This commit was manufactured by cvs2svn to create tag 'v20061012'.

Sprout from master 2006-10-10 22:16:50 UTC Simon Kaegi <skaegi> '[bug 158171] Adding support to allow contribution of the HttpContext implementation. Use the "class" attribute to specify a class name instantiated via createExecutableExtension.'
Cherrypick from master 2006-09-28 16:14:09 UTC Simon Kaegi <skaegi> 'Adding the serverside eclipse projects to the main depot':
    bundles/org.eclipse.equinox.servletbridge/templates/WEB-INF/eclipse/launch.ini
Delete:
    bundles/org.eclipse.equinox.app/.classpath
    bundles/org.eclipse.equinox.app/.cvsignore
    bundles/org.eclipse.equinox.app/.project
    bundles/org.eclipse.equinox.app/.settings/org.eclipse.core.resources.prefs
    bundles/org.eclipse.equinox.app/.settings/org.eclipse.jdt.core.prefs
    bundles/org.eclipse.equinox.app/.settings/org.eclipse.jdt.ui.prefs
    bundles/org.eclipse.equinox.app/.settings/org.eclipse.pde.core.prefs
    bundles/org.eclipse.equinox.app/META-INF/MANIFEST.MF
    bundles/org.eclipse.equinox.app/about.html
    bundles/org.eclipse.equinox.app/about_files/LICENSE-2.0.txt
    bundles/org.eclipse.equinox.app/build.properties
    bundles/org.eclipse.equinox.app/plugin.properties
    bundles/org.eclipse.equinox.app/plugin.xml
    bundles/org.eclipse.equinox.app/schema/applications.exsd
    bundles/org.eclipse.equinox.app/schema/products.exsd
    bundles/org.eclipse.equinox.app/src/org/eclipse/core/runtime/IPlatformRunnable.java
    bundles/org.eclipse.equinox.app/src/org/eclipse/core/runtime/IProduct.java
    bundles/org.eclipse.equinox.app/src/org/eclipse/core/runtime/IProductProvider.java
    bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/app/IApplication.java
    bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/app/IApplicationContext.java
    bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/Activator.java
    bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/AnyThreadAppLauncher.java
    bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/AppCommands.java
    bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/AppPersistence.java
    bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/CommandLineArgs.java
    bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/EclipseAppContainer.java
    bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/EclipseAppDescriptor.java
    bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/EclipseAppHandle.java
    bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/EclipseScheduledApplication.java
    bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/ErrorApplication.java
    bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/Messages.java
    bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/Product.java
    bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/messages.properties
    bundles/org.eclipse.equinox.app/src/org/osgi/service/application/ApplicationAdminPermission.java
    bundles/org.eclipse.equinox.app/src/org/osgi/service/application/ApplicationDescriptor.java
    bundles/org.eclipse.equinox.app/src/org/osgi/service/application/ApplicationException.java
    bundles/org.eclipse.equinox.app/src/org/osgi/service/application/ApplicationHandle.java
    bundles/org.eclipse.equinox.app/src/org/osgi/service/application/ScheduledApplication.java
    bundles/org.eclipse.equinox.common/.classpath
    bundles/org.eclipse.equinox.common/.cvsignore
    bundles/org.eclipse.equinox.common/.options
    bundles/org.eclipse.equinox.common/.project
    bundles/org.eclipse.equinox.common/.settings/org.eclipse.core.resources.prefs
    bundles/org.eclipse.equinox.common/.settings/org.eclipse.jdt.core.prefs
    bundles/org.eclipse.equinox.common/.settings/org.eclipse.jdt.ui.prefs
    bundles/org.eclipse.equinox.common/META-INF/MANIFEST.MF
    bundles/org.eclipse.equinox.common/about.html
    bundles/org.eclipse.equinox.common/build.properties
    bundles/org.eclipse.equinox.common/plugin.properties
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/boot/PlatformURLBaseConnection.java
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/boot/PlatformURLConnection.java
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/boot/PlatformURLHandler.java
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/Activator.java
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/AdapterManager.java
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/CommonMessages.java
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/DataArea.java
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/DevClassPathHelper.java
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/FindSupport.java
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/IAdapterFactoryExt.java
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/IAdapterManagerProvider.java
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/IRuntimeConstants.java
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/LocalizationUtils.java
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/MetaDataKeeper.java
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/PlatformURLConfigConnection.java
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/PlatformURLConverter.java
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/PlatformURLFragmentConnection.java
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/PlatformURLMetaConnection.java
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/PlatformURLPluginConnection.java
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/ReferenceHashSet.java
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/ResourceTranslator.java
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/RuntimeLog.java
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/commonMessages.properties
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/package.html
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/Assert.java
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/AssertionFailedException.java
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/CoreException.java
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/FileLocator.java
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/IAdaptable.java
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/IAdapterFactory.java
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/IAdapterManager.java
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/IBundleGroup.java
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/IBundleGroupProvider.java
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/ILogListener.java
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/IPath.java
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/IProgressMonitor.java
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/IProgressMonitorWithBlocking.java
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/ISafeRunnable.java
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/IStatus.java
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/ListenerList.java
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/MultiStatus.java
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/NullProgressMonitor.java
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/OperationCanceledException.java
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/Path.java
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/PlatformObject.java
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/PluginVersionIdentifier.java
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/ProgressMonitorWrapper.java
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/QualifiedName.java
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/SafeRunner.java
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/Status.java
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/SubProgressMonitor.java
    bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/package.html
    bundles/org.eclipse.equinox.device/.classpath
    bundles/org.eclipse.equinox.device/.cvsignore
    bundles/org.eclipse.equinox.device/.project
    bundles/org.eclipse.equinox.device/.settings/org.eclipse.core.resources.prefs
    bundles/org.eclipse.equinox.device/.settings/org.eclipse.jdt.core.prefs
    bundles/org.eclipse.equinox.device/META-INF/MANIFEST.MF
    bundles/org.eclipse.equinox.device/about.html
    bundles/org.eclipse.equinox.device/build.properties
    bundles/org.eclipse.equinox.device/plugin.properties
    bundles/org.eclipse.equinox.device/src/org/eclipse/equinox/device/Activator.java
    bundles/org.eclipse.equinox.device/src/org/eclipse/equinox/device/DeviceMsg.java
    bundles/org.eclipse.equinox.device/src/org/eclipse/equinox/device/DeviceTracker.java
    bundles/org.eclipse.equinox.device/src/org/eclipse/equinox/device/DriverLocatorTracker.java
    bundles/org.eclipse.equinox.device/src/org/eclipse/equinox/device/DriverSelectorTracker.java
    bundles/org.eclipse.equinox.device/src/org/eclipse/equinox/device/DriverTracker.java
    bundles/org.eclipse.equinox.device/src/org/eclipse/equinox/device/ExternalMessages.properties
    bundles/org.eclipse.equinox.device/src/org/eclipse/equinox/device/LogMessages.properties
    bundles/org.eclipse.equinox.device/src/org/eclipse/equinox/device/LogTracker.java
    bundles/org.eclipse.equinox.device/src/org/eclipse/equinox/device/LogTrackerMsg.java
    bundles/org.eclipse.equinox.device/src/org/eclipse/equinox/device/Match.java
    bundles/org.eclipse.equinox.device/src/org/eclipse/equinox/device/SecureAction.java
    bundles/org.eclipse.equinox.ds/.classpath
    bundles/org.eclipse.equinox.ds/.cvsignore
    bundles/org.eclipse.equinox.ds/.project
    bundles/org.eclipse.equinox.ds/.settings/org.eclipse.core.resources.prefs
    bundles/org.eclipse.equinox.ds/.settings/org.eclipse.jdt.core.prefs
    bundles/org.eclipse.equinox.ds/META-INF/MANIFEST.MF
    bundles/org.eclipse.equinox.ds/about.html
    bundles/org.eclipse.equinox.ds/build.properties
    bundles/org.eclipse.equinox.ds/plugin.properties
    bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/AbstractReflector.java
    bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/Activator.java
    bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/FrameworkHook.java
    bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/Log.java
    bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/instance/BuildDispose.java
    bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/instance/InstanceProcess.java
    bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/instance/InvokeMethod.java
    bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/instance/RegisterComponentService.java
    bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/model/ComponentConfiguration.java
    bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/model/ComponentDescription.java
    bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/model/ComponentDescriptionCache.java
    bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/model/ImplementationDescription.java
    bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/model/PropertyDescription.java
    bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/model/PropertyResourceDescription.java
    bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/model/PropertyValueDescription.java
    bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/model/ProvideDescription.java
    bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/model/ReferenceDescription.java
    bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/model/ServiceDescription.java
    bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/ComponentElement.java
    bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/ElementHandler.java
    bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/IgnoredElement.java
    bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/ImplementationElement.java
    bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/Parser.java
    bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/ParserConstants.java
    bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/ParserHandler.java
    bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/PropertiesElement.java
    bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/PropertyElement.java
    bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/ProvideElement.java
    bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/ReferenceElement.java
    bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/ServiceElement.java
    bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/XMLParserNotAvailableException.java
    bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/resolver/CircularityException.java
    bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/resolver/Reference.java
    bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/resolver/Resolver.java
    bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/service/ComponentContextImpl.java
    bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/service/ComponentFactoryImpl.java
    bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/service/ComponentInstanceImpl.java
    bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/tracker/BundleTracker.java
    bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/tracker/BundleTrackerCustomizer.java
    bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/workqueue/WorkDispatcher.java
    bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/workqueue/WorkQueue.java
    bundles/org.eclipse.equinox.event/.classpath
    bundles/org.eclipse.equinox.event/.cvsignore
    bundles/org.eclipse.equinox.event/.project
    bundles/org.eclipse.equinox.event/.settings/org.eclipse.core.resources.prefs
    bundles/org.eclipse.equinox.event/.settings/org.eclipse.jdt.core.prefs
    bundles/org.eclipse.equinox.event/META-INF/MANIFEST.MF
    bundles/org.eclipse.equinox.event/about.html
    bundles/org.eclipse.equinox.event/build.properties
    bundles/org.eclipse.equinox.event/plugin.properties
    bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/Activator.java
    bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/EventAdminImpl.java
    bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/BundleEventAdapter.java
    bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/ConfigurationEventAdapter.java
    bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/Constants.java
    bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/EventAdapter.java
    bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/EventRedeliverer.java
    bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/FrameworkEventAdapter.java
    bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/LogEntryAdapter.java
    bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/LogReaderServiceListener.java
    bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/LogReaderServiceTracker.java
    bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/ServiceEventAdapter.java
    bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/UPnPEventAdapter.java
    bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/UserAdminEventAdapter.java
    bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/WireAdminEventAdapter.java
    bundles/org.eclipse.equinox.http/.classpath
    bundles/org.eclipse.equinox.http/.cvsignore
    bundles/org.eclipse.equinox.http/.project
    bundles/org.eclipse.equinox.http/.settings/org.eclipse.core.resources.prefs
    bundles/org.eclipse.equinox.http/.settings/org.eclipse.jdt.core.prefs
    bundles/org.eclipse.equinox.http/META-INF/MANIFEST.MF
    bundles/org.eclipse.equinox.http/OSGI-INF/l10n/bundle_en.properties
    bundles/org.eclipse.equinox.http/OSGI-INF/metatype/METADATA.XML
    bundles/org.eclipse.equinox.http/about.html
    bundles/org.eclipse.equinox.http/build.properties
    bundles/org.eclipse.equinox.http/plugin.properties
    bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/Activator.java
    bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/DefaultHttpContext.java
    bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/ExternalMessages.properties
    bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/Http.java
    bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/HttpConfiguration.java
    bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/HttpConnection.java
    bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/HttpDate.java
    bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/HttpListener.java
    bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/HttpMsg.java
    bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/HttpSecurityTracker.java
    bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/HttpServerSocket.java
    bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/HttpService.java
    bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/HttpSocket.java
    bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/HttpThread.java
    bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/HttpThreadPool.java
    bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/LogMessages.properties
    bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/LogTracker.java
    bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/LogTrackerMsg.java
    bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/Registration.java
    bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/ResourceRegistration.java
    bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/ResourceUnavailableException.java
    bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/SSLTracker.java
    bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/SecureAction.java
    bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/ServletRegistration.java
    bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/StaticDataReader.java
    bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/Tokenizer.java
    bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/URI.java
    bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/mime.types
    bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/servlet/HttpServletRequestImpl.java
    bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/servlet/HttpServletResponseImpl.java
    bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/servlet/HttpSessionContextImpl.java
    bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/servlet/HttpSessionImpl.java
    bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/servlet/RequestDispatcherImpl.java
    bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/servlet/ServletConfigImpl.java
    bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/servlet/ServletContextImpl.java
    bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/servlet/ServletInputStreamImpl.java
    bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/servlet/ServletOutputStreamImpl.java
    bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/servlet/ServletPrintWriter.java
    bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/status.codes
    bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/socket/ServerSocketInterface.java
    bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/socket/SocketInterface.java
    bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/socket/https/HttpsServerSocket.java
    bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/socket/https/HttpsSocket.java
    bundles/org.eclipse.equinox.log/.classpath
    bundles/org.eclipse.equinox.log/.cvsignore
    bundles/org.eclipse.equinox.log/.project
    bundles/org.eclipse.equinox.log/.settings/org.eclipse.core.resources.prefs
    bundles/org.eclipse.equinox.log/.settings/org.eclipse.jdt.core.prefs
    bundles/org.eclipse.equinox.log/META-INF/MANIFEST.MF
    bundles/org.eclipse.equinox.log/OSGI-INF/l10n/bundle_en.properties
    bundles/org.eclipse.equinox.log/OSGI-INF/metatype/METADATA.XML
    bundles/org.eclipse.equinox.log/about.html
    bundles/org.eclipse.equinox.log/build.properties
    bundles/org.eclipse.equinox.log/plugin.properties
    bundles/org.eclipse.equinox.log/src/org/eclipse/equinox/log/Activator.java
    bundles/org.eclipse.equinox.log/src/org/eclipse/equinox/log/ExternalMessages.properties
    bundles/org.eclipse.equinox.log/src/org/eclipse/equinox/log/LogEntry.java
    bundles/org.eclipse.equinox.log/src/org/eclipse/equinox/log/LogMsg.java
    bundles/org.eclipse.equinox.log/src/org/eclipse/equinox/log/LogReaderService.java
    bundles/org.eclipse.equinox.log/src/org/eclipse/equinox/log/LogReaderServiceFactory.java
    bundles/org.eclipse.equinox.log/src/org/eclipse/equinox/log/LogServiceFactory.java
    bundles/org.eclipse.equinox.log/src/org/eclipse/equinox/log/LogServiceImpl.java
    bundles/org.eclipse.equinox.log/src/org/eclipse/equinox/log/LoggedException.java
    bundles/org.eclipse.equinox.metatype/.classpath
    bundles/org.eclipse.equinox.metatype/.cvsignore
    bundles/org.eclipse.equinox.metatype/.project
    bundles/org.eclipse.equinox.metatype/.settings/org.eclipse.core.resources.prefs
    bundles/org.eclipse.equinox.metatype/.settings/org.eclipse.jdt.core.prefs
    bundles/org.eclipse.equinox.metatype/META-INF/MANIFEST.MF
    bundles/org.eclipse.equinox.metatype/about.html
    bundles/org.eclipse.equinox.metatype/build.properties
    bundles/org.eclipse.equinox.metatype/plugin.properties
    bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/Activator.java
    bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/AttributeDefinitionImpl.java
    bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/DataParser.java
    bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/ExternalMessages.properties
    bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/FragmentUtils.java
    bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/Icon.java
    bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/LocalizationElement.java
    bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/Logging.java
    bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/MetaTypeInformationImpl.java
    bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/MetaTypeMsg.java
    bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/MetaTypeProviderImpl.java
    bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/MetaTypeProviderTracker.java
    bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/MetaTypeServiceImpl.java
    bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/ObjectClassDefinitionImpl.java
    bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/ValueTokenizer.java
    bundles/org.eclipse.equinox.preferences/.classpath
    bundles/org.eclipse.equinox.preferences/.cvsignore
    bundles/org.eclipse.equinox.preferences/.options
    bundles/org.eclipse.equinox.preferences/.project
    bundles/org.eclipse.equinox.preferences/.settings/org.eclipse.core.resources.prefs
    bundles/org.eclipse.equinox.preferences/.settings/org.eclipse.jdt.core.prefs
    bundles/org.eclipse.equinox.preferences/META-INF/MANIFEST.MF
    bundles/org.eclipse.equinox.preferences/about.html
    bundles/org.eclipse.equinox.preferences/about_files/LICENSE-2.0.txt
    bundles/org.eclipse.equinox.preferences/build.properties
    bundles/org.eclipse.equinox.preferences/plugin.properties
    bundles/org.eclipse.equinox.preferences/plugin.xml
    bundles/org.eclipse.equinox.preferences/schema/preferences.exsd
    bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/AbstractScope.java
    bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/Activator.java
    bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/Base64.java
    bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/ConfigurationPreferences.java
    bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/DefaultPreferences.java
    bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/EclipsePreferences.java
    bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/ExportedPreferences.java
    bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/IPreferencesConstants.java
    bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/ImmutableMap.java
    bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/InstancePreferences.java
    bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/ListenerRegistry.java
    bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/LookupOrder.java
    bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/OSGiPreferencesServiceImpl.java
    bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/OSGiPreferencesServiceManager.java
    bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/PreferenceServiceRegistryHelper.java
    bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/PreferencesOSGiUtils.java
    bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/PreferencesService.java
    bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/PrefsMessages.java
    bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/RootPreferences.java
    bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/StringPool.java
    bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/exchange/ILegacyPreferences.java
    bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/exchange/IProductPreferencesService.java
    bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/messages.properties
    bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/AbstractPreferenceInitializer.java
    bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/ConfigurationScope.java
    bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/DefaultScope.java
    bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/IEclipsePreferences.java
    bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/IExportedPreferences.java
    bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/IPreferenceFilter.java
    bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/IPreferenceNodeVisitor.java
    bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/IPreferencesService.java
    bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/IScope.java
    bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/IScopeContext.java
    bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/InstanceScope.java
    bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/PreferenceFilterEntry.java
    bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/PreferenceModifyListener.java
    bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/package.html
    bundles/org.eclipse.equinox.preferences/src/org/osgi/service/prefs/BackingStoreException.java
    bundles/org.eclipse.equinox.preferences/src/org/osgi/service/prefs/Preferences.java
    bundles/org.eclipse.equinox.preferences/src/org/osgi/service/prefs/PreferencesService.java
    bundles/org.eclipse.equinox.registry/.classpath
    bundles/org.eclipse.equinox.registry/.cvsignore
    bundles/org.eclipse.equinox.registry/.options
    bundles/org.eclipse.equinox.registry/.project
    bundles/org.eclipse.equinox.registry/.settings/org.eclipse.core.resources.prefs
    bundles/org.eclipse.equinox.registry/.settings/org.eclipse.jdt.core.prefs
    bundles/org.eclipse.equinox.registry/META-INF/MANIFEST.MF
    bundles/org.eclipse.equinox.registry/about.html
    bundles/org.eclipse.equinox.registry/about_files/LICENSE-2.0.txt
    bundles/org.eclipse.equinox.registry/about_files/NOTICE.txt
    bundles/org.eclipse.equinox.registry/build.properties
    bundles/org.eclipse.equinox.registry/plugin.properties
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/BaseExtensionHandle.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/BaseExtensionPointHandle.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/BufferedRandomInputStream.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ConfigurationElement.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ConfigurationElementHandle.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/Contribution.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/Extension.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ExtensionDelta.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ExtensionHandle.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ExtensionPoint.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ExtensionPointHandle.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ExtensionRegistry.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ExtensionsParser.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/Handle.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/HashtableOfInt.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/HashtableOfStringAndInt.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/IObjectManager.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/IRegistryConstants.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/KeyedElement.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/KeyedHashSet.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ReadWriteMonitor.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ReferenceMap.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryChangeEvent.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryDelta.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryIndexChildren.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryIndexElement.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryMessages.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryObject.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryObjectFactory.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryObjectManager.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryProperties.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryProviderFactory.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistrySupport.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryTimestamp.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/TableReader.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/TableWriter.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/TemporaryObjectManager.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ThirdLevelConfigurationElementHandle.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/messages.properties
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/osgi/Activator.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/osgi/EclipseBundleListener.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/osgi/EquinoxRegistryStrategy.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/osgi/EquinoxUtils.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/osgi/OSGIUtils.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/osgi/RegistryCommandProvider.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/osgi/RegistryProviderOSGI.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/osgi/RegistryStrategyOSGI.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/spi/ConfigurationElementAttribute.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/spi/ConfigurationElementDescription.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/ContributorFactoryOSGi.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/ContributorFactorySimple.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/IConfigurationElement.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/IContributor.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/IExecutableExtension.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/IExecutableExtensionFactory.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/IExtension.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/IExtensionDelta.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/IExtensionPoint.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/IExtensionRegistry.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/IRegistryChangeEvent.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/IRegistryChangeListener.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/InvalidRegistryObjectException.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/RegistryFactory.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/dynamichelpers/ExtensionTracker.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/dynamichelpers/IExtensionChangeHandler.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/dynamichelpers/IExtensionTracker.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/dynamichelpers/IFilter.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/dynamichelpers/package.html
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/package.html
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/spi/IRegistryProvider.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/spi/RegistryContributor.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/spi/RegistryStrategy.java
    bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/spi/package.html
    bundles/org.eclipse.equinox.useradmin/.classpath
    bundles/org.eclipse.equinox.useradmin/.cvsignore
    bundles/org.eclipse.equinox.useradmin/.project
    bundles/org.eclipse.equinox.useradmin/.settings/org.eclipse.core.resources.prefs
    bundles/org.eclipse.equinox.useradmin/.settings/org.eclipse.jdt.core.prefs
    bundles/org.eclipse.equinox.useradmin/META-INF/MANIFEST.MF
    bundles/org.eclipse.equinox.useradmin/about.html
    bundles/org.eclipse.equinox.useradmin/build.properties
    bundles/org.eclipse.equinox.useradmin/plugin.properties
    bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/Activator.java
    bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/Authorization.java
    bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/ExternalMessages.properties
    bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/Group.java
    bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/LogMessages.properties
    bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/LogTracker.java
    bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/LogTrackerMsg.java
    bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/Role.java
    bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/User.java
    bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/UserAdmin.java
    bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/UserAdminEventProducer.java
    bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/UserAdminHashtable.java
    bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/UserAdminMsg.java
    bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/UserAdminStore.java
    bundles/org.eclipse.equinox.wireadmin/.classpath
    bundles/org.eclipse.equinox.wireadmin/.cvsignore
    bundles/org.eclipse.equinox.wireadmin/.project
    bundles/org.eclipse.equinox.wireadmin/.settings/org.eclipse.core.resources.prefs
    bundles/org.eclipse.equinox.wireadmin/.settings/org.eclipse.jdt.core.prefs
    bundles/org.eclipse.equinox.wireadmin/META-INF/MANIFEST.MF
    bundles/org.eclipse.equinox.wireadmin/about.html
    bundles/org.eclipse.equinox.wireadmin/build.properties
    bundles/org.eclipse.equinox.wireadmin/plugin.properties
    bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/Activator.java
    bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/ConsumerCustomizer.java
    bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/ConsumersCustomizer.java
    bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/ExternalMessages.properties
    bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/LogMessages.properties
    bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/LogTracker.java
    bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/LogTrackerMsg.java
    bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/ProducerCustomizer.java
    bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/ProducersCustomizer.java
    bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/ReadOnlyDictionary.java
    bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/Wire.java
    bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/WireAdmin.java
    bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/WireAdminEventProducer.java
    bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/WireAdminMsg.java
    bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/WireAdminStore.java
diff --git a/bundles/org.eclipse.equinox.app/.classpath b/bundles/org.eclipse.equinox.app/.classpath
deleted file mode 100755
index 751c8f2..0000000
--- a/bundles/org.eclipse.equinox.app/.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"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/bundles/org.eclipse.equinox.app/.cvsignore b/bundles/org.eclipse.equinox.app/.cvsignore
deleted file mode 100755
index ba077a4..0000000
--- a/bundles/org.eclipse.equinox.app/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-bin
diff --git a/bundles/org.eclipse.equinox.app/.project b/bundles/org.eclipse.equinox.app/.project
deleted file mode 100755
index c1246c3..0000000
--- a/bundles/org.eclipse.equinox.app/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.equinox.app</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/bundles/org.eclipse.equinox.app/.settings/org.eclipse.core.resources.prefs b/bundles/org.eclipse.equinox.app/.settings/org.eclipse.core.resources.prefs
deleted file mode 100755
index 16532b2..0000000
--- a/bundles/org.eclipse.equinox.app/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Tue May 25 15:00:03 EDT 2004
-encoding/<project>=ISO-8859-1
-eclipse.preferences.version=1
diff --git a/bundles/org.eclipse.equinox.app/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.equinox.app/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100755
index 9509abc..0000000
--- a/bundles/org.eclipse.equinox.app/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,77 +0,0 @@
-#Wed Dec 14 13:44:11 CST 2005
-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=warning
-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=warning
-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.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.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
diff --git a/bundles/org.eclipse.equinox.app/.settings/org.eclipse.jdt.ui.prefs b/bundles/org.eclipse.equinox.app/.settings/org.eclipse.jdt.ui.prefs
deleted file mode 100755
index a0bbd3f..0000000
--- a/bundles/org.eclipse.equinox.app/.settings/org.eclipse.jdt.ui.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Wed Dec 14 13:44:11 CST 2005
-eclipse.preferences.version=1
-internal.default.compliance=default
diff --git a/bundles/org.eclipse.equinox.app/.settings/org.eclipse.pde.core.prefs b/bundles/org.eclipse.equinox.app/.settings/org.eclipse.pde.core.prefs
deleted file mode 100755
index e993d41..0000000
--- a/bundles/org.eclipse.equinox.app/.settings/org.eclipse.pde.core.prefs
+++ /dev/null
@@ -1,4 +0,0 @@
-#Fri Dec 02 16:20:40 CST 2005
-eclipse.preferences.version=1
-pluginProject.equinox=false
-pluginProject.extensions=true
diff --git a/bundles/org.eclipse.equinox.app/META-INF/MANIFEST.MF b/bundles/org.eclipse.equinox.app/META-INF/MANIFEST.MF
deleted file mode 100755
index c21a87b..0000000
--- a/bundles/org.eclipse.equinox.app/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,30 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %pluginName
-Bundle-SymbolicName: org.eclipse.equinox.app; singleton:=true
-Bundle-Version: 1.0.0.qualifier
-Bundle-Vendor: %providerName
-Bundle-Activator: org.eclipse.equinox.internal.app.Activator
-Bundle-Localization: plugin
-Export-Package: org.eclipse.core.runtime; app="split"; mandatory:="app",
- org.eclipse.equinox.app;version="1.0",
- org.eclipse.equinox.internal.app;x-friends:="org.eclipse.core.runtime",
- org.osgi.service.application;version="1.0"
-Import-Package: org.eclipse.osgi.framework.console;resolution:=optional,
- org.eclipse.osgi.framework.log,
- org.eclipse.osgi.service.datalocation,
- org.eclipse.osgi.service.debug,
- org.eclipse.osgi.service.environment,
- org.eclipse.osgi.service.runnable,
- org.eclipse.osgi.storagemanager,
- org.eclipse.osgi.util,
- org.osgi.framework;version="1.3",
- org.osgi.service.condpermadmin; resolution:=optional,
- org.osgi.service.event;version="1.0.0";resolution:=optional,
- org.osgi.service.packageadmin;version="1.2",
- org.osgi.util.tracker
-Require-Bundle: org.eclipse.equinox.registry;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.equinox.common;bundle-version="[3.2.0,4.0.0)"
-Comment-DynamicImport: this is only used to allow late binding of the package
-DynamicImport-Package: org.osgi.service.event;version="1.0.0"
-Eclipse-LazyStart: true
diff --git a/bundles/org.eclipse.equinox.app/about.html b/bundles/org.eclipse.equinox.app/about.html
deleted file mode 100755
index 8d1c4af..0000000
--- a/bundles/org.eclipse.equinox.app/about.html
+++ /dev/null
@@ -1,69 +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 25, 2006</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 (&quot;EPL&quot;).  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, &quot;Program&quot; 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 (&quot;Redistributor&quot;) 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&rsquo;s license for 
-terms and conditions of use.</p>
-
-<h4>OSGi Materials</h4>
-
-<p>All files in the following sub-directories (and their sub-directories):</p>
-
-<ul>
- <li>org/osgi</li>
-</ul>
-
-<p>shall be defined as the &quot;OSGi Materials.&quot;  The OSGi Materials are:</p>
-
-<blockquote>
-Copyright (c) 2000, 2006
-<br /><br />
-OSGi Alliance
-Bishop Ranch 6<br/>
-2400 Camino Ramon, Suite 375<br/>
-San Ramon, CA 94583 USA
-<br /><br />
-All Rights Reserved.
-</blockquote>
-
-<p>The OSGi Materials are provided to you under 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>Implementation of certain elements of the OSGi Materials may be subject to third party intellectual property rights, including without limitation, patent rights (such a third party may
-or may not be a member of the OSGi Alliance).  The OSGi Alliance and its members are not responsible and shall not be held responsible in any manner for identifying or failing to identify any or all such third party
-intellectual property rights.</p>
-
-<small>OSGi&trade; is a trademark, registered trademark, or service mark of The OSGi Alliance in the US and other countries. Java is a trademark,
-registered trademark, or service mark of Sun Microsystems, Inc. in the US and other countries. All other trademarks, registered trademarks, or
-service marks used in the Content are the property of their respective owners and are hereby recognized.</small>
-
-<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>
diff --git a/bundles/org.eclipse.equinox.app/about_files/LICENSE-2.0.txt b/bundles/org.eclipse.equinox.app/about_files/LICENSE-2.0.txt
deleted file mode 100644
index d645695..0000000
--- a/bundles/org.eclipse.equinox.app/about_files/LICENSE-2.0.txt
+++ /dev/null
@@ -1,202 +0,0 @@
-
-                                 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.
diff --git a/bundles/org.eclipse.equinox.app/build.properties b/bundles/org.eclipse.equinox.app/build.properties
deleted file mode 100755
index 48cdb9e..0000000
--- a/bundles/org.eclipse.equinox.app/build.properties
+++ /dev/null
@@ -1,21 +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
-###############################################################################
-source.. = src/
-output.. = bin/
-bin.includes = META-INF/,\
-               .,\
-               about.html,\
-               plugin.properties,\
-               plugin.xml,\
-               about_files/
-src.includes = about.html,\
-               schema/,\
-               about_files/
diff --git a/bundles/org.eclipse.equinox.app/plugin.properties b/bundles/org.eclipse.equinox.app/plugin.properties
deleted file mode 100755
index f4088f0..0000000
--- a/bundles/org.eclipse.equinox.app/plugin.properties
+++ /dev/null
@@ -1,14 +0,0 @@
-###############################################################################
-# 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
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-pluginName = Equinox Application Container
-providerName = Eclipse.org
-applicationsName = Applications
-productsName = Products
diff --git a/bundles/org.eclipse.equinox.app/plugin.xml b/bundles/org.eclipse.equinox.app/plugin.xml
deleted file mode 100755
index e5f898f..0000000
--- a/bundles/org.eclipse.equinox.app/plugin.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.2"?>
-<plugin>
-   <extension-point id="org.eclipse.core.runtime.applications" name="%applicationsName" schema="schema/applications.exsd"/>
-   <extension-point id="org.eclipse.core.runtime.products" name="%productsName" schema="schema/products.exsd"/>
-   <extension
-         id="error"
-         point="org.eclipse.core.runtime.applications">
-      <application visible="false">
-         <run class="org.eclipse.equinox.internal.app.ErrorApplication"/>
-      </application>
-   </extension>
-</plugin>
diff --git a/bundles/org.eclipse.equinox.app/schema/applications.exsd b/bundles/org.eclipse.equinox.app/schema/applications.exsd
deleted file mode 100755
index 68ee890..0000000
--- a/bundles/org.eclipse.equinox.app/schema/applications.exsd
+++ /dev/null
@@ -1,211 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- Schema file written by PDE -->
-<schema targetNamespace="org.eclipse.core.runtime">
-<annotation>
-      <appInfo>
-         <meta.schema plugin="org.eclipse.core.runtime" id="applications" name="Applications"/>
-      </appInfo>
-      <documentation>
-         Platform runtime supports plug-ins which would like to 
-declare main entry points.  That is, programs which 
-would like to run using the platform runtime but yet 
-control all aspects of execution can declare themselves 
-as an application.  Declared applications can be run 
-directly from the main platform launcher by specifying 
-the &lt;i&gt;-application&lt;/i&gt; argument where the parameter 
-is the id of an extension supplied to the 
-applications extension point described here.  
-This application is instantiated and run by the platform.  
-Platform clients can also use the platform to lookup and 
-run multiple applications.
-      </documentation>
-   </annotation>
-
-   <element name="extension">
-      <complexType>
-         <sequence>
-            <element ref="application"/>
-         </sequence>
-         <attribute name="point" type="string" use="required">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="id" type="string" use="required">
-            <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="application">
-      <complexType>
-         <sequence>
-            <element ref="run" minOccurs="0" maxOccurs="1"/>
-         </sequence>
-         <attribute name="visible" type="boolean" use="default" value="true">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="cardinality" use="default" value="singleton-global">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-            </annotation>
-            <simpleType>
-               <restriction base="string">
-                  <enumeration value="singleton-global">
-                  </enumeration>
-                  <enumeration value="singleton-scoped">
-                  </enumeration>
-                  <enumeration value="1">
-                  </enumeration>
-                  <enumeration value="2">
-                  </enumeration>
-                  <enumeration value="3">
-                  </enumeration>
-                  <enumeration value="4">
-                  </enumeration>
-                  <enumeration value="5">
-                  </enumeration>
-                  <enumeration value="*">
-                  </enumeration>
-               </restriction>
-            </simpleType>
-         </attribute>
-         <attribute name="thread" use="default" value="main">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-            </annotation>
-            <simpleType>
-               <restriction base="string">
-                  <enumeration value="main">
-                  </enumeration>
-                  <enumeration value="any">
-                  </enumeration>
-               </restriction>
-            </simpleType>
-         </attribute>
-      </complexType>
-   </element>
-
-   <element name="run">
-      <complexType>
-         <sequence>
-            <element ref="parameter" minOccurs="0" maxOccurs="unbounded"/>
-         </sequence>
-         <attribute name="class" type="string" use="required">
-            <annotation>
-               <documentation>
-                  the fully-qualified name of a class which implements 
-&lt;samp&gt;org.eclipse.core.runtime.IPlatformRunnable&lt;/samp&gt; or &lt;samp&gt;org.eclipse.equinox.application.IApplication&lt;/samp&gt;.
-               </documentation>
-               <appInfo>
-                  <meta.attribute kind="java" basedOn="org.eclipse.core.runtime.IPlatformRunnable"/>
-               </appInfo>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <element name="parameter">
-      <annotation>
-         <appInfo>
-            <meta.element labelAttribute="name"/>
-         </appInfo>
-      </annotation>
-      <complexType>
-         <attribute name="name" type="string" use="required">
-            <annotation>
-               <documentation>
-                  the name of this parameter made available to instances of the specified application class
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="value" type="string" use="required">
-            <annotation>
-               <documentation>
-                  the value of this parameter made available to instances of the specified application class
-               </documentation>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="examples"/>
-      </appInfo>
-      <documentation>
-         Following is an example of an application declaration: 
-&lt;p&gt;
-&lt;pre&gt;
-   &lt;extension id=&quot;coolApplication&quot; point=&quot;org.eclipse.core.runtime.applications&quot;&gt; 
-      &lt;application&gt; 
-         &lt;run class=&quot;com.xyz.applications.Cool&quot;&gt; 
-            &lt;parameter name=&quot;optimize&quot; value=&quot;true&quot;/&gt; 
-         &lt;/run&gt; 
-      &lt;/application&gt; 
-   &lt;/extension&gt; 
-&lt;/pre&gt;
-&lt;/p&gt;
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="apiInfo"/>
-      </appInfo>
-      <documentation>
-         The value of the class attribute must represent an 
-implementor of 
-&lt;samp&gt;org.eclipse.core.runtime.IPlatformRunnable&lt;/samp&gt;.
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="implementation"/>
-      </appInfo>
-      <documentation>
-         The platform supplies a number of applications including the platform workbench itself.
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="copyright"/>
-      </appInfo>
-      <documentation>
-         Copyright (c) 2004, 2005 IBM Corporation and others.&lt;br&gt;
-All rights reserved. This program and the accompanying materials are made 
-available under the terms of the Eclipse Public License v1.0 which 
-accompanies 
-this distribution, and is available at 
-&lt;a 
-href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;
-      </documentation>
-   </annotation>
-
-</schema>
diff --git a/bundles/org.eclipse.equinox.app/schema/products.exsd b/bundles/org.eclipse.equinox.app/schema/products.exsd
deleted file mode 100644
index f3da7ce..0000000
--- a/bundles/org.eclipse.equinox.app/schema/products.exsd
+++ /dev/null
@@ -1,216 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- Schema file written by PDE -->
-<schema targetNamespace="org.eclipse.core.runtime">
-<annotation>
-      <appInfo>
-         <meta.schema plugin="org.eclipse.core.runtime" id="products" name="Products"/>
-      </appInfo>
-      <documentation>
-         Products are the Eclipse unit of branding.  Product extensions are supplied by plug-ins wishing to define one or more products.  There must be one product per extension as the extension id is used in processing and identifying the product.
-&lt;p&gt;
-There are two possible forms of product extension, static and dynamic.  Static product extensions directly contain all relevant information about the product.  Dynamic product extensions identify a class (an &lt;code&gt;IProductProvider&lt;/code&gt;) which is capable of defining one or more products when queried.
-      </documentation>
-   </annotation>
-
-   <element name="extension">
-      <complexType>
-         <sequence>
-            <choice>
-               <element ref="product"/>
-               <element ref="provider"/>
-            </choice>
-         </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="product">
-      <complexType>
-         <sequence>
-            <element ref="property" minOccurs="0" maxOccurs="unbounded"/>
-         </sequence>
-         <attribute name="application" type="string" use="required">
-            <annotation>
-               <documentation>
-                  the default application to run when running this product
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="name" type="string" use="required">
-            <annotation>
-               <documentation>
-                  the human-readable name of this product
-               </documentation>
-               <appInfo>
-                  <meta.attribute translatable="true"/>
-               </appInfo>
-            </annotation>
-         </attribute>
-         <attribute name="description" type="string">
-            <annotation>
-               <documentation>
-                  the human-readable description of this product
-               </documentation>
-               <appInfo>
-                  <meta.attribute translatable="true"/>
-               </appInfo>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <element name="property">
-      <annotation>
-         <appInfo>
-            <meta.element labelAttribute="name"/>
-         </appInfo>
-      </annotation>
-      <complexType>
-         <attribute name="name" type="string" use="required">
-            <annotation>
-               <documentation>
-                  the key under which this property is stored
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="value" type="string" use="required">
-            <annotation>
-               <documentation>
-                  the value of this property
-               </documentation>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <element name="provider">
-      <annotation>
-         <documentation>
-            details of a product provider
-         </documentation>
-      </annotation>
-      <complexType>
-         <sequence>
-            <element ref="run"/>
-         </sequence>
-      </complexType>
-   </element>
-
-   <element name="run">
-      <complexType>
-         <attribute name="class" type="string" use="required">
-            <annotation>
-               <documentation>
-                  the fully-qualified name of a class which implements 
-&lt;samp&gt;org.eclipse.core.runtime.IProductProvider&lt;/samp&gt;.
-               </documentation>
-               <appInfo>
-                  <meta.attribute kind="java" basedOn="org.eclipse.core.runtime.IProductProvider"/>
-               </appInfo>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="since"/>
-      </appInfo>
-      <documentation>
-         3.0
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="examples"/>
-      </appInfo>
-      <documentation>
-         Following is an example of static product declaration: 
-&lt;p&gt;
-&lt;pre&gt;
-   &lt;extension id=&quot;coolProduct&quot; point=&quot;org.eclipse.core.runtime.products&quot;&gt; 
-      &lt;product name=&quot;%coolName&quot; application=&quot;coolApplication&quot; description=&quot;%coolDescription&quot;&gt; 
-          &lt;property name=&quot;windowImages&quot; value=&quot;window.gif&quot;/&gt; 
-          &lt;property name=&quot;aboutImage&quot; value=&quot;image.gif&quot;/&gt; 
-          &lt;property name=&quot;aboutText&quot; value=&quot;%aboutText&quot;/&gt; 
-          &lt;property name=&quot;appName&quot; value=&quot;CoolApp&quot;/&gt; 
-          &lt;property name=&quot;welcomePage&quot; value=&quot;$nl$/welcome.xml&quot;/&gt; 
-          &lt;property name=&quot;preferenceCustomization&quot; value=&quot;plugin_customization.ini&quot;/&gt; 
-      &lt;/product&gt; 
-   &lt;/extension&gt; 
-&lt;/pre&gt;
-&lt;/p&gt;
-
-The following is an example of a dynamic product (product provider) declaration:
-Following is an example of an application declaration: 
-&lt;p&gt;
-&lt;pre&gt;
-   &lt;extension id=&quot;coolProvider&quot; point=&quot;org.eclipse.core.runtime.products&quot;&gt; 
-      &lt;provider&gt; 
-         &lt;run class=&quot;com.example.productProvider&quot;/&gt; 
-      &lt;/provider&gt; 
-   &lt;/extension&gt; 
-&lt;/pre&gt;
-&lt;/p&gt;
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="apiInfo"/>
-      </appInfo>
-      <documentation>
-         Static product extensions provided here are represented at runtime by instances of &lt;code&gt;IProduct&lt;/code&gt;.  Dynamic product extensions must identify an implementor of &lt;code&gt;IProductProvider&lt;/code&gt;.  See &lt;code&gt;org.eclipse.ui.branding.IProductConstants&lt;/code&gt; 
-for details of the branding related product properties defined by the Eclipse UI.
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="implementation"/>
-      </appInfo>
-      <documentation>
-         No implementations of &lt;code&gt;IProductProvider&lt;/code&gt; are supplied.
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="copyright"/>
-      </appInfo>
-      <documentation>
-         Copyright (c) 2004, 2005 IBM Corporation and others.&lt;br&gt;
-All rights reserved. This program and the accompanying materials are made 
-available under the terms of the Eclipse Public License v1.0 which 
-accompanies 
-this distribution, and is available at 
-&lt;a 
-href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;
-      </documentation>
-   </annotation>
-
-</schema>
diff --git a/bundles/org.eclipse.equinox.app/src/org/eclipse/core/runtime/IPlatformRunnable.java b/bundles/org.eclipse.equinox.app/src/org/eclipse/core/runtime/IPlatformRunnable.java
deleted file mode 100644
index c1bce35..0000000
--- a/bundles/org.eclipse.equinox.app/src/org/eclipse/core/runtime/IPlatformRunnable.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.runtime;
-
-import org.eclipse.equinox.app.IApplication;
-
-/**
- * Bootstrap type for the platform. Platform runnables represent executable 
- * entry points into plug-ins.  Runnables can be configured into the Platform's
- * <code>org.eclipse.core.runtime.applications</code> extension-point 
- * or be made available through code or extensions on other plug-in's extension-points.
- *
- * <p>
- * Clients may implement this interface.
- * </p>
- * 
- * @since 3.0
- * @deprecated use {@link IApplication}
- */
-public interface IPlatformRunnable {
-
-	/**
-	 * Exit object indicating normal termination
-	 */
-	public static final Integer EXIT_OK = new Integer(0);
-
-	/**
-	 * Exit object requesting platform restart
-	 */
-	public static final Integer EXIT_RESTART = new Integer(23);
-
-	/**
-	 * Exit object requesting that the command passed back be executed.  Typically
-	 * this is used to relaunch Eclipse with different command line arguments. When the executable is
-	 * relaunched the command line will be retrieved from the <code>eclipse.exit</code> system property.  
-	 */
-	public static final Integer EXIT_RELAUNCH = new Integer(24);
-
-	/**
-	 * Runs this runnable with the given args and returns a result.
-	 * The content of the args is unchecked and should conform to the expectations of
-	 * the runnable being invoked.  Typically this is a <code>String</code> array.
-	 * Applications can return any object they like.  If an <code>Integer</code> is returned
-	 * it is treated as the program exit code if Eclipse is exiting.
-	 * 
-	 * @param args the argument(s) to pass to the application
-	 * @return the return value of the application
-	 * @exception Exception if there is a problem running this runnable.
-	 * @see #EXIT_OK
-	 * @see #EXIT_RESTART
-	 * @see #EXIT_RELAUNCH
-	 */
-	public Object run(Object args) throws Exception;
-}
diff --git a/bundles/org.eclipse.equinox.app/src/org/eclipse/core/runtime/IProduct.java b/bundles/org.eclipse.equinox.app/src/org/eclipse/core/runtime/IProduct.java
deleted file mode 100644
index 246be33..0000000
--- a/bundles/org.eclipse.equinox.app/src/org/eclipse/core/runtime/IProduct.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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.runtime;
-
-import org.osgi.framework.Bundle;
-
-/**
- * Products are the Eclipse unit of branding.  From the runtime point of view they have
- * a name, id and description and identify the Eclipse application to run.  
- * <p>
- * Since the bulk of the branding related information is
- * specific to the UI, products also carry an arbitrary set of properties.  The valid set of 
- * key-value pairs and their interpretation defined by the UI of the target environment.
- * For example, in the standard Eclipse UI, <code>org.eclipse.ui.branding.IProductConstants</code>
- * the properties of interest to the UI.  Other clients may specify additional properties.
- * </p><p>
- * Products can be defined directly using extensions to the <code>org.eclipse.core.runtime.products</code>
- * extension point or by using facilities provided by IProductProvider implementations.
- * </p><p>
- * For readers familiar with Eclipse 2.1 and earlier, products are roughly equivalent to 
- * <i>primary features</i>. 
- * </p>
- * 
- * @see IProductProvider
- * @see org.eclipse.ui.branding.IProductConstants
- * @since 3.0
- */
-public interface IProduct {
-	/**
-	 * Returns the application associated with this product.  This information is used 
-	 * to guide the runtime as to what application extension to create and execute.
-	 * 
-	 * @return this product's application or <code>null</code> if none
-	 */
-	public String getApplication();
-
-	/**
-	 * Returns the name of this product.  The name is typically used in the title
-	 * bar of UI windows.
-	 * 
-	 * @return the name of this product or <code>null</code> if none
-	 */
-	public String getName();
-
-	/**
-	 * Returns the text description of this product
-	 * 
-	 * @return the description of this product or <code>null</code> if none
-	 */
-	public String getDescription();
-
-	/** Returns the unique product id of this product.
-	 * 
-	 * @return the id of this product
-	 */
-	public String getId();
-
-	/**
-	 * Returns the property of this product with the given key.
-	 * <code>null</code> is returned if there is no such key/value pair.
-	 * 
-	 * @param key the name of the property to return
-	 * @return the value associated with the given key or <code>null</code> if none
-	 */
-	public String getProperty(String key);
-	
-	/**
-	 * Returns the bundle which is responsible for the definition of this product.
-	 * Typically this is used as a base for searching for images and other files 
-	 * that are needed in presenting the product.
-	 * 
-	 * @return the bundle which defines this product or <code>null</code> if none
-	 */
-	public Bundle getDefiningBundle();
-}
diff --git a/bundles/org.eclipse.equinox.app/src/org/eclipse/core/runtime/IProductProvider.java b/bundles/org.eclipse.equinox.app/src/org/eclipse/core/runtime/IProductProvider.java
deleted file mode 100644
index 5e72785..0000000
--- a/bundles/org.eclipse.equinox.app/src/org/eclipse/core/runtime/IProductProvider.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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.runtime;
-
-/**
- * Product providers define products (units of branding) which have been installed in
- * the current system.  Typically, a configuration agent (i.e., plug-in installer) will 
- * define a product provider so that it can report to the system the products it has installed.
- * <p>
- * Products are normally defined and installed in the system using extensions to the 
- * <code>org.eclipse.core.runtime.products</code> extension point.  In cases where 
- * the notion of product is defined by alternate means (e.g., primary feature), an <code>IProductProvider</code>
- * can be installed in this extension point using an executable extension.  The provider
- * then acts as a proxy for the product extensions that represent the products installed.
- * </p>
- * 
- * @see IProduct
- * @since 3.0
- */
-public interface IProductProvider {
-	/**
-	 * Returns the human-readable name of this product provider.
-	 * 
-	 * @return the name of this product provider
-	 */
-	public String getName();
-
-	/**
-	 * Returns the products provided by this provider.
-	 * 
-	 * @return the products provided by this provider
-	 */
-	public IProduct[] getProducts();
-}
diff --git a/bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/app/IApplication.java b/bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/app/IApplication.java
deleted file mode 100755
index a1cd885..0000000
--- a/bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/app/IApplication.java
+++ /dev/null
@@ -1,64 +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.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.
- *
- * <p>
- * Clients may implement this interface.
- * </p>
- * 
- * @since 3.2
- */
-public interface IApplication {
-
-	/**
-	 * Exit object indicating normal termination
-	 */
-	public static final Integer EXIT_OK = new Integer(0);
-
-	/**
-	 * Exit object requesting platform restart
-	 */
-	public static final Integer EXIT_RESTART = new Integer(23);
-
-	/**
-	 * Exit object requesting that the command passed back be executed.  Typically
-	 * this is used to relaunch Eclipse with different command line arguments.
-	 */
-	public static final Integer EXIT_RELAUNCH = new Integer(24);
-
-	/**
-	 * Starts this application with the given context and returns a result.
-	 * The content of the context is unchecked and should conform to the expectations of
-	 * the runnable being invoked.<p>
-	 * 
-	 * Applications can return any object they like.  If an <code>Integer</code> is returned
-	 * it is treated as the program exit code if Eclipse is exiting.
-	 * @return the return value of the application
-	 * @see #EXIT_OK
-	 * @see #EXIT_RESTART
-	 * @see #EXIT_RELAUNCH
-	 * @param context the application context to pass to the application
-	 * @exception Exception if there is a problem running this application.
-	 */
-	public Object start(IApplicationContext context) throws Exception;
-
-	/**
-	 * Forces a running application to exit.  This method must block until the 
-	 * running application has completely stopped.
-	 */
-	public void stop();
-}
diff --git a/bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/app/IApplicationContext.java b/bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/app/IApplicationContext.java
deleted file mode 100644
index 0efb998..0000000
--- a/bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/app/IApplicationContext.java
+++ /dev/null
@@ -1,55 +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.app;
-
-import java.util.Map;
-import org.eclipse.core.runtime.IProduct;
-import org.osgi.service.application.ApplicationDescriptor;
-
-/**
- * The context used to start an application.
- */
-public interface IApplicationContext {
-	/**
-	 * A key used to store arguments for the application.  The content of this argument 
-	 * is unchecked and should conform to the expectations of the application being invoked.  
-	 * Typically this is a <code>String</code> array.
-	 * <p>
-	 * 
-	 * If the map used to launch an application {@link ApplicationDescriptor#launch(Map)} does 
-	 * not contain a value for this key then command line arguments used to launch 
-	 * the platform are set in the arguments of the application context.
-	 */
-	public static final String APPLICATION_ARGS = "application.args"; //$NON-NLS-1$
-
-	/**
-	 * The arguments used for the application.  The arguments from 
-	 * {@link ApplicationDescriptor#launch(Map)} are used as the arguments
-	 * for this context when an application is launched.
-	 * 
-	 * @return a map of application arguments.
-	 */
-	public Map getArguments();
-
-	/**
-	 * Will end the splash screen for the application.  This method should be 
-	 * called after the application is ready.
-	 */
-	public void applicationRunning();
-
-	/**
-	 * Returns the product which was selected when running this Eclipse instance
-	 * or <code>null</code> if none
-	 * @return the current product or <code>null</code> if none
-	 */
-	public IProduct getProduct();
-}
diff --git a/bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/Activator.java b/bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/Activator.java
deleted file mode 100755
index 1469dd3..0000000
--- a/bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/Activator.java
+++ /dev/null
@@ -1,238 +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.internal.app;
-
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import org.eclipse.core.runtime.IContributor;
-import org.eclipse.core.runtime.IExtensionRegistry;
-import org.eclipse.core.runtime.spi.RegistryContributor;
-import org.eclipse.osgi.framework.log.FrameworkLog;
-import org.eclipse.osgi.framework.log.FrameworkLogEntry;
-import org.eclipse.osgi.service.debug.DebugOptions;
-import org.eclipse.osgi.service.environment.EnvironmentInfo;
-import org.eclipse.osgi.service.runnable.ApplicationLauncher;
-import org.osgi.framework.*;
-import org.osgi.service.packageadmin.PackageAdmin;
-import org.osgi.util.tracker.ServiceTracker;
-import org.osgi.util.tracker.ServiceTrackerCustomizer;
-
-public class Activator implements BundleActivator, ServiceTrackerCustomizer {
-	public static final String PI_APP = "org.eclipse.equinox.app"; //$NON-NLS-1$
-	public static boolean DEBUG = false;
-	private static BundleContext context;
-	// PackageAdmin is a system service that never goes away as long 
-	// as the framwork is active.  No need to track it!!
-	private static PackageAdmin packageAdmin;
-	private static EclipseAppContainer container;
-	// tracks the FrameworkLog service
-	private static ServiceTracker frameworkLog;
-	// tracks the extension registry and app launcher services
-	private ServiceTracker registryTracker;
-	private ServiceTracker launcherTracker;
-	private IExtensionRegistry registry;
-	private ApplicationLauncher launcher;
-
-	public void start(BundleContext bc) {
-		context = bc;
-		// doing simple get service here because we expect the PackageAdmin service to always be available
-		ServiceReference ref = context.getServiceReference(PackageAdmin.class.getName());
-		if (ref != null)
-			packageAdmin = (PackageAdmin) context.getService(ref);
-		getDebugOptions(context);
-		processCommandLineArgs();
-		// set the app manager context before starting the container
-		AppPersistence.start(context);
-		// we must have an extension registry started before we can start the container
-		registryTracker = new ServiceTracker(context, IExtensionRegistry.class.getName(), this);
-		registryTracker.open();
-		launcherTracker = new ServiceTracker(context, ApplicationLauncher.class.getName(), this);
-		launcherTracker.open();
-		// start the app commands for the console
-		try {
-			AppCommands.create(context);
-		} catch (NoClassDefFoundError e) {
-			// catch incase CommandProvider is not available
-		}
-	}
-
-	public void stop(BundleContext bc) {
-		// stop the app commands for the console
-		try {
-			AppCommands.destroy(context);
-		} catch (NoClassDefFoundError e) {
-			// catch incase CommandProvider is not available
-		}
-		// close the registry tracker; this will stop the container if it was started
-		registryTracker.close();
-		registryTracker = null;
-		// close the launcher tracker
-		launcherTracker.close();
-		launcherTracker = null;
-		// unset the app manager context after the container has been stopped
-		AppPersistence.stop();
-		if (frameworkLog != null) {
-			frameworkLog.close();
-			frameworkLog = null;
-		}
-		packageAdmin = null; // we do not unget PackageAdmin here; let the framework do it for us
-		context = null;
-	}
-
-	private void getDebugOptions(BundleContext context) {
-		ServiceReference debugRef = context.getServiceReference(DebugOptions.class.getName());
-		if (debugRef == null)
-			return;
-		DebugOptions debugOptions = (DebugOptions) context.getService(debugRef);
-		DEBUG = debugOptions.getBooleanOption(PI_APP + "/debug", false); //$NON-NLS-1$
-		context.ungetService(debugRef);
-	}
-
-	private void processCommandLineArgs() {
-		ServiceReference infoRef = context.getServiceReference(EnvironmentInfo.class.getName());
-		if (infoRef == null)
-			return;
-		EnvironmentInfo envInfo = (EnvironmentInfo) context.getService(infoRef);
-		if (envInfo == null)
-			return;
-		String[] args = envInfo.getNonFrameworkArgs();
-		context.ungetService(infoRef);
-		CommandLineArgs.processCommandLine(args);
-	}
-
-	public Object addingService(ServiceReference reference) {
-		if (container != null)
-			return null; // container is already started; do nothing
-		Object service = context.getService(reference);
-		boolean needed = false;
-		if (launcher == null && service instanceof ApplicationLauncher) {
-			launcher = (ApplicationLauncher) service;
-			needed = true;
-		}
-		if (registry == null && service instanceof IExtensionRegistry) {
-			registry = (IExtensionRegistry) service;
-			needed = true;
-		}
-		if (needed) {
-			if (registry != null && launcher != null) {
-				// create and start the app container
-				container = new EclipseAppContainer(context, registry, launcher);
-				container.start();
-			}
-			return service;
-		}
-		// this means there is more than one registry or launcher; we don't need a second one
-		context.ungetService(reference);
-		return null;
-	}
-
-	public void modifiedService(ServiceReference reference, Object service) {
-		// do nothing
-	}
-
-	public void removedService(ServiceReference reference, Object service) {
-		// either the registry or launcher is going away
-		if (service == registry)
-			registry = null;
-		if (service == launcher)
-			launcher = null;
-		if (container == null)
-			return; // do nothing; we have not started the container yet
-		// stop the app container
-		container.stop();
-		container = null;
-	}
-
-	// helper used to protect callers from permission checks when opening service trackers
-	static void openTracker(final ServiceTracker tracker, final boolean allServices) {
-		if (System.getSecurityManager() == null)
-			tracker.open(allServices);
-		else
-			AccessController.doPrivileged(new PrivilegedAction() {
-				public Object run() {
-					tracker.open(allServices);
-					return null;
-				}
-			});
-	}
-
-	// helper used to protect callers from permission checks when get services
-	static Object getService(final ServiceTracker tracker) {
-		if (System.getSecurityManager() == null)
-			return tracker.getService();
-		return AccessController.doPrivileged(new PrivilegedAction() {
-			public Object run() {
-				return tracker.getService();
-			}
-		});
-	}
-
-	// helper used to protect callers from permission checks when getting locations
-	static String getLocation(final Bundle bundle) {
-		if (System.getSecurityManager() == null)
-			return bundle.getLocation();
-		return (String) AccessController.doPrivileged(new PrivilegedAction() {
-			public Object run() {
-				return bundle.getLocation();
-			}
-		});
-	}
-
-	// helper method to get a bundle from a contributor.
-	static Bundle getBundle(IContributor contributor) {
-		if (contributor instanceof RegistryContributor) {
-			try {
-				long id = Long.parseLong(((RegistryContributor) contributor).getActualId());
-				if (context != null)
-					return context.getBundle(id);
-			} catch (NumberFormatException e) {
-				// try using the name of the contributor below
-			}
-		}
-		if (packageAdmin == null)
-			return null;
-		Bundle[] bundles = packageAdmin.getBundles(contributor.getName(), 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;
-	}
-
-	static BundleContext getContext() {
-		return context;
-	}
-
-	public static EclipseAppContainer getContainer() {
-		return container;
-	}
-
-	static void log(FrameworkLogEntry entry) {
-		BundleContext bc = context;
-		if (bc == null)
-			return;
-		ServiceReference ref = null;
-		try {
-			ref = bc.getServiceReference(FrameworkLog.class.getName());
-			if (ref == null)
-				return;
-			FrameworkLog log = (FrameworkLog) context.getService(ref);
-			if (log != null)
-				log.log(entry);
-		} finally {
-			if (ref != null)
-				bc.ungetService(ref);
-		}
-	}
-}
diff --git a/bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/AnyThreadAppLauncher.java b/bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/AnyThreadAppLauncher.java
deleted file mode 100644
index bbaa9db..0000000
--- a/bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/AnyThreadAppLauncher.java
+++ /dev/null
@@ -1,36 +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.internal.app;
-
-import org.eclipse.osgi.framework.log.FrameworkLogEntry;
-
-public class AnyThreadAppLauncher implements Runnable{
-	private EclipseAppHandle appHandle;
-
-	private AnyThreadAppLauncher(EclipseAppHandle appHandle) {
-		this.appHandle = appHandle;
-	}
-
-	public void run() {
-		try {
-			// pasing null will cause EclipseAppHandle to get the correct arguments
-			appHandle.run(null);
-		} catch (Throwable e) {
-			Activator.log(new FrameworkLogEntry(Activator.PI_APP, FrameworkLogEntry.ERROR, 0, e.getMessage(), 0, e, null));
-		}
-	}
-
-	static void launchEclipseApplication(EclipseAppHandle appHandle) {
-		AnyThreadAppLauncher launchable = new AnyThreadAppLauncher(appHandle);
-		new Thread(launchable, "app thread - " + appHandle.getInstanceId()).start(); //$NON-NLS-1$
-	}
-}
diff --git a/bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/AppCommands.java b/bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/AppCommands.java
deleted file mode 100755
index ea361ef..0000000
--- a/bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/AppCommands.java
+++ /dev/null
@@ -1,247 +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.internal.app;
-
-import java.util.*;
-import org.eclipse.equinox.app.IApplicationContext;
-import org.eclipse.osgi.framework.console.CommandInterpreter;
-import org.eclipse.osgi.framework.console.CommandProvider;
-import org.osgi.framework.*;
-import org.osgi.service.application.*;
-import org.osgi.util.tracker.ServiceTracker;
-
-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 static AppCommands instance;
-	private BundleContext context;
-	private ServiceTracker applicationDescriptors;
-	private ServiceTracker applicationHandles;
-	private ServiceTracker scheduledApplications;
-	private Filter launchableApp;
-	private Filter activeApp;
-	private ServiceRegistration providerRegistration;
-
-	static synchronized void create(BundleContext context) {
-		if (instance != null)
-			return;
-		instance = new AppCommands();
-		instance.start(context);
-	}
-
-	static synchronized void destroy(BundleContext context) {
-		if (instance == null)
-			return;
-		instance.stop(context);
-		instance = null;
-	}
-
-	protected AppCommands() {
-		// empty
-	}
-
-	public void start(BundleContext ctx) {
-		this.context = ctx;
-		try {
-			applicationDescriptors = new ServiceTracker(ctx, ApplicationDescriptor.class.getName(), null);
-			applicationDescriptors.open();
-			applicationHandles = new ServiceTracker(ctx, ApplicationHandle.class.getName(), null);
-			applicationHandles.open();
-			scheduledApplications = new ServiceTracker(ctx, ScheduledApplication.class.getName(), null);
-			scheduledApplications.open();
-			launchableApp = ctx.createFilter(LAUNCHABLE_APP_FILTER);
-			activeApp = ctx.createFilter(ACTIVE_APP_FILTER);
-			providerRegistration = ctx.registerService(CommandProvider.class.getName(), this, null);
-		} catch (InvalidSyntaxException e) {
-			// should not happen.
-		}
-	}
-
-	public void stop(BundleContext ctx) {
-		providerRegistration.unregister();
-		if (applicationDescriptors != null)
-			applicationDescriptors.close();
-		if (applicationHandles != null)
-			applicationHandles.close();
-		if (scheduledApplications != null)
-			scheduledApplications.close();
-	}
-
-	public String getHelp() {
-		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$
-		return sb.toString();
-	}
-
-	private Dictionary getServiceProps(ServiceReference ref) {
-		String[] keys = ref.getPropertyKeys();
-		Hashtable props = new Hashtable(keys.length);
-		for (int i = 0; i < keys.length; i++)
-			props.put(keys[i], ref.getProperty(keys[i]));
-		return props;
-	}
-
-	public void _apps(CommandInterpreter intp) {
-		ServiceReference[] apps = applicationDescriptors.getServiceReferences();
-		if (apps == null) {
-			intp.println("No applications found."); //$NON-NLS-1$
-			return;
-		}
-		for (int i = 0; i < apps.length; i++) {
-			intp.print(apps[i].getProperty(ApplicationDescriptor.APPLICATION_PID));
-			intp.print(" ["); //$NON-NLS-1$
-			intp.print(launchableApp.match(getServiceProps(apps[i])) ? "enabled" : "disabled"); //$NON-NLS-1$ //$NON-NLS-2$
-			intp.println("]"); //$NON-NLS-1$
-		}
-	}
-
-	public void _activeApps(CommandInterpreter intp) {
-		ServiceReference[] active = applicationHandles.getServiceReferences();
-		if (active == null) {
-			intp.println("No active applications found"); //$NON-NLS-1$
-			return;
-		}
-		for (int i = 0; i < active.length; i++) {
-			intp.print(active[i].getProperty(ApplicationHandle.APPLICATION_PID));
-			intp.print(" ["); //$NON-NLS-1$
-			intp.print(activeApp.match(getServiceProps(active[i])) ? "running" : "stopping"); //$NON-NLS-1$ //$NON-NLS-2$
-			intp.println("]"); //$NON-NLS-1$
-		}
-	}
-
-	public void _startApp(CommandInterpreter intp) throws Exception {
-		String appId = intp.nextArgument();
-		ServiceReference[] apps = applicationDescriptors.getServiceReferences();
-		if (apps != null && appId != null)
-			for (int i = 0; i < apps.length; i++)
-				if (appId.equals(apps[i].getProperty(ApplicationDescriptor.APPLICATION_PID))) {
-					ArrayList argList = new ArrayList();
-					String arg = null;
-					while ((arg = intp.nextArgument()) != null)
-						argList.add(arg);
-					String[] args = argList.size() == 0 ? null : (String[]) argList.toArray(new String[argList.size()]);
-					ApplicationDescriptor appDesc = (ApplicationDescriptor) context.getService(apps[i]);
-					try {
-						HashMap launchArgs = new HashMap(1);
-						if (args != null)
-							launchArgs.put(IApplicationContext.APPLICATION_ARGS, args);
-						appDesc.launch(launchArgs);
-						intp.println("Launched application: " + appId); //$NON-NLS-1$
-					} finally {
-						context.ungetService(apps[i]);
-					}
-					return;
-				}
-		intp.println("No application with the id \"" + appId + "\" exists."); //$NON-NLS-1$ //$NON-NLS-2$
-	}
-
-	public void _stopApp(CommandInterpreter intp) throws Exception {
-		String runningId = intp.nextArgument();
-		ServiceReference[] runningApps = applicationHandles.getServiceReferences();
-		if (runningApps != null && runningId != null)
-			for (int i = 0; i < runningApps.length; i++)
-				if (runningId.equals(runningApps[i].getProperty(ApplicationHandle.APPLICATION_PID))) {
-					if (activeApp.match(getServiceProps(runningApps[i]))) {
-						try {
-							ApplicationHandle appDesc = (ApplicationHandle) context.getService(runningApps[i]);
-							appDesc.destroy();
-							intp.println("Stopped application: " + runningId); //$NON-NLS-1$
-						} finally {
-							context.ungetService(runningApps[i]);
-						}
-					} else {
-						intp.println("Applicationi is already stopping: " + runningId); //$NON-NLS-1$
-					}
-					return;
-				}
-		intp.println("No running application with the id \"" + runningId + "\" exists."); //$NON-NLS-1$ //$NON-NLS-2$
-	}
-
-	public void _lockApp(CommandInterpreter intp) throws Exception {
-		String appId = intp.nextArgument();
-		ServiceReference[] apps = applicationDescriptors.getServiceReferences();
-		if (apps != null && appId != null)
-			for (int i = 0; i < apps.length; i++)
-				if (appId.equals(apps[i].getProperty(ApplicationDescriptor.APPLICATION_PID))) {
-					try {
-						ApplicationDescriptor appDesc = (ApplicationDescriptor) context.getService(apps[i]);
-						appDesc.lock();
-						intp.println("Locked application: " + appId); //$NON-NLS-1$
-					} finally {
-						context.ungetService(apps[i]);
-					}
-					return;
-				}
-		intp.println("No application with the id \"" + appId + "\" exists."); //$NON-NLS-1$ //$NON-NLS-2$
-	}
-
-	public void _unlockApp(CommandInterpreter intp) throws Exception {
-		String appId = intp.nextArgument();
-		ServiceReference[] apps = applicationDescriptors.getServiceReferences();
-		if (apps != null && appId != null)
-			for (int i = 0; i < apps.length; i++)
-				if (appId.equals(apps[i].getProperty(ApplicationDescriptor.APPLICATION_PID))) {
-					try {
-						ApplicationDescriptor appDesc = (ApplicationDescriptor) context.getService(apps[i]);
-						appDesc.unlock();
-						intp.println("Unlocked application: " + appId); //$NON-NLS-1$
-					} finally {
-						context.ungetService(apps[i]);
-					}
-					return;
-				}
-		intp.println("No application with the id \"" + appId + "\" exists."); //$NON-NLS-1$ //$NON-NLS-2$
-	}
-
-	public void _schedApp(CommandInterpreter intp) throws Exception {
-		String appId = intp.nextArgument();
-		ServiceReference[] apps = applicationDescriptors.getServiceReferences();
-		if (apps != null && appId != null)
-			for (int i = 0; i < apps.length; i++)
-				if (appId.equals(apps[i].getProperty(ApplicationDescriptor.APPLICATION_PID))) {
-					try {
-						ApplicationDescriptor appDesc = (ApplicationDescriptor) context.getService(apps[i]);
-						String filter = intp.nextArgument();
-						boolean recure = Boolean.valueOf(intp.nextArgument()).booleanValue();
-						appDesc.schedule(null, null, "org/osgi/application/timer", filter, recure); //$NON-NLS-1$
-						intp.println("scheduled application: " + appId); //$NON-NLS-1$
-					} finally {
-						context.ungetService(apps[i]);
-					}
-					return;
-				}
-		intp.println("No application with the id \"" + appId + "\" exists."); //$NON-NLS-1$ //$NON-NLS-2$
-	}
-
-	public void _unschedApp(CommandInterpreter intp) throws Exception {
-		String schedId = intp.nextArgument();
-		ServiceReference[] scheds = scheduledApplications.getServiceReferences();
-		if (scheds != null)
-			for (int i = 0; i < scheds.length; i++) {
-				ScheduledApplication schedApp = (ScheduledApplication) context.getService(scheds[i]);
-				try {
-					if (schedId.equals(schedApp.getApplicationDescriptor().getApplicationId()))
-						schedApp.remove();
-				} finally {
-					context.ungetService(scheds[i]);
-				}
-			}
-	}
-}
diff --git a/bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/AppPersistence.java b/bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/AppPersistence.java
deleted file mode 100644
index 87be44d..0000000
--- a/bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/AppPersistence.java
+++ /dev/null
@@ -1,430 +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.internal.app;
-
-import java.io.*;
-import java.util.*;
-import org.eclipse.osgi.framework.log.FrameworkLogEntry;
-import org.eclipse.osgi.service.datalocation.Location;
-import org.eclipse.osgi.storagemanager.StorageManager;
-import org.eclipse.osgi.util.NLS;
-import org.osgi.framework.*;
-import org.osgi.service.application.*;
-import org.osgi.service.event.Event;
-import org.osgi.service.event.EventConstants;
-import org.osgi.util.tracker.ServiceTracker;
-import org.osgi.util.tracker.ServiceTrackerCustomizer;
-
-/**
- * Manages all persistent data for ApplicationDescriptors (lock status, 
- * scheduled applications etc.)
- */
-public class AppPersistence implements ServiceTrackerCustomizer {
-	private static final String PROP_CONFIG_AREA = "osgi.configuration.area"; //$NON-NLS-1$
-
-	private static final String FILTER_PREFIX = "(&(objectClass=org.eclipse.osgi.service.datalocation.Location)(type="; //$NON-NLS-1$
-	private static final String FILE_APPLOCKS = ".locks"; //$NON-NLS-1$
-	private static final String FILE_APPSCHEDULED = ".scheduled"; //$NON-NLS-1$
-	private static final String EVENT_HANDLER = "org.osgi.service.event.EventHandler"; //$NON-NLS-1$
-
-	private static final int DATA_VERSION = 2;
-	private static final byte NULL = 0;
-	private static final int OBJECT = 1;
-
-	private static BundleContext context;
-	private static ServiceTracker configTracker;
-	private static Location configLocation;
-	private static Collection locks = new ArrayList();
-	private static Map scheduledApps = new HashMap();
-	static ArrayList timerApps = new ArrayList();
-	private static StorageManager storageManager;
-	private static boolean scheduling = false;
-	static boolean shutdown = false;
-	private static int nextScheduledID = 1;
-	private static Thread timerThread;
-
-	static void start(BundleContext bc) {
-		context = bc;
-		shutdown = false;
-		initConfiguration();
-	}
-
-	static void stop() {
-		shutdown = true;
-		stopTimer();
-		if (storageManager != null) {
-			storageManager.close();
-			storageManager = null;
-		}
-		closeConfiguration();
-		context = null;
-	}
-
-	private static void initConfiguration() {
-		closeConfiguration(); // just incase
-		Filter filter = null;
-		try {
-			filter = context.createFilter(FILTER_PREFIX + PROP_CONFIG_AREA + "))"); //$NON-NLS-1$
-		} catch (InvalidSyntaxException e) {
-			// ignore this.  It should never happen as we have tested the above format.
-		}
-		configTracker = new ServiceTracker(context, filter, new AppPersistence());
-		configTracker.open();
-	}
-
-	private static void closeConfiguration() {
-		if (configTracker != null)
-			configTracker.close();
-		configTracker = null;
-	}
-
-	/**
-	 * Used by {@link ApplicationDescriptor} to determine if an application is locked.
-	 * @param desc the application descriptor
-	 * @return true if the application is persistently locked.
-	 */
-	public static boolean isLocked(ApplicationDescriptor desc) {
-		synchronized (locks) {
-			return locks.contains(desc.getApplicationId());
-		}
-	}
-
-	/**
-	 * Used by {@link ApplicationDescriptor} to determine lock and unlock and application.
-	 * @param desc the application descriptor
-	 * @param locked the locked flag
-	 */
-	public static void saveLock(ApplicationDescriptor desc, boolean locked) {
-		synchronized (locks) {
-			if (locked) {
-				if (!locks.contains(desc.getApplicationId())) {
-					locks.add(desc.getApplicationId());
-					saveData(FILE_APPLOCKS);
-				}
-			} else if (locks.remove(desc.getApplicationId())) {
-				saveData(FILE_APPLOCKS);
-			}
-		}
-	}
-
-	static void removeScheduledApp(EclipseScheduledApplication scheduledApp) {
-		boolean removed;
-		synchronized (scheduledApps) {
-			removed = scheduledApps.remove(scheduledApp.getScheduleId()) != null;
-			if (removed) {
-				saveData(FILE_APPSCHEDULED);
-			}
-		}
-		if (removed)
-			synchronized (timerApps) {
-				timerApps.remove(scheduledApp);
-			}
-	}
-
-	/**
-	 * Used by {@link ScheduledApplication} to persistently schedule an application launch
-	 * @param descriptor
-	 * @param arguments
-	 * @param topic
-	 * @param eventFilter
-	 * @param recurring
-	 * @return the scheduled application
-	 * @throws InvalidSyntaxException
-	 * @throws ApplicationException 
-	 */
-	public static ScheduledApplication addScheduledApp(ApplicationDescriptor descriptor, String scheduleId, Map arguments, String topic, String eventFilter, boolean recurring) throws InvalidSyntaxException, ApplicationException {
-		if (!scheduling && !checkSchedulingSupport())
-			throw new ApplicationException(ApplicationException.APPLICATION_SCHEDULING_FAILED, "Cannot support scheduling without org.osgi.service.event package"); //$NON-NLS-1$
-		// check the event filter for correct syntax
-		context.createFilter(eventFilter);	
-		EclipseScheduledApplication result;
-		synchronized (scheduledApps) {
-			result = new EclipseScheduledApplication(context, getNextScheduledID(scheduleId), descriptor.getApplicationId(), arguments, topic, eventFilter, recurring);
-			addScheduledApp(result);
-			saveData(FILE_APPSCHEDULED);
-		}
-		return result;
-	}
-
-	// must call this method while holding the scheduledApps lock
-	private static void addScheduledApp(EclipseScheduledApplication scheduledApp) {
-		if (ScheduledApplication.TIMER_TOPIC.equals(scheduledApp.getTopic())) {
-			synchronized (timerApps) {
-				timerApps.add(scheduledApp);
-				if (timerThread == null)
-					startTimer();
-			}
-		}
-		scheduledApps.put(scheduledApp.getScheduleId(), scheduledApp);
-		Hashtable serviceProps = new Hashtable();
-		if (scheduledApp.getTopic() != null)
-			serviceProps.put(EventConstants.EVENT_TOPIC, new String[] {scheduledApp.getTopic()});
-		if (scheduledApp.getEventFilter() != null)
-			serviceProps.put(EventConstants.EVENT_FILTER, scheduledApp.getEventFilter());
-		serviceProps.put(ScheduledApplication.SCHEDULE_ID, scheduledApp.getScheduleId());
-		serviceProps.put(ScheduledApplication.APPLICATION_PID, scheduledApp.getAppPid());
-		ServiceRegistration sr = context.registerService(new String[] {ScheduledApplication.class.getName(), EVENT_HANDLER}, scheduledApp, serviceProps);
-		scheduledApp.setServiceRegistration(sr);
-	}
-
-	private static String getNextScheduledID(String scheduledId) throws ApplicationException {
-		if (scheduledId != null) {
-			if (scheduledApps.get(scheduledId) != null)
-				throw new ApplicationException(ApplicationException.APPLICATION_DUPLICATE_SCHEDULE_ID, "Duplicate scheduled ID: " + scheduledId); //$NON-NLS-1$
-			return scheduledId;
-		}
-		if (nextScheduledID == Integer.MAX_VALUE)
-			nextScheduledID = 0;
-		String result = new Integer(nextScheduledID++).toString();
-		while (scheduledApps.get(result) != null && nextScheduledID < Integer.MAX_VALUE)
-			result = new Integer(nextScheduledID++).toString();
-		if (nextScheduledID == Integer.MAX_VALUE)
-			throw new ApplicationException(ApplicationException.APPLICATION_DUPLICATE_SCHEDULE_ID, "Maximum number of scheduled applications reached"); //$NON-NLS-1$
-		return result;
-	}
-
-	private static boolean checkSchedulingSupport() {
-		// cannot support scheduling without the event admin package
-		try {
-			Class.forName(EVENT_HANDLER);
-			scheduling = true;
-			return true;
-		} catch (ClassNotFoundException e) {
-			scheduling = false;
-			return false;
-		}
-	}
-
-	private synchronized static boolean loadData(String fileName) {
-		try {
-			Location location = configLocation;
-			if (location == null)
-				return false;
-			File theStorageDir = new File(location.getURL().getPath() + '/' + Activator.PI_APP);
-			if (storageManager == null) {
-				boolean readOnly = location.isReadOnly();
-				storageManager = new StorageManager(theStorageDir, readOnly ? "none" : null, readOnly); //$NON-NLS-1$
-				storageManager.open(!readOnly);
-			}
-			File dataFile = storageManager.lookup(fileName, false);
-			if (dataFile == null || !dataFile.isFile()) {
-				Location parent = location.getParentLocation();
-				if (parent != null) {
-					theStorageDir = new File(parent.getURL().getPath() + '/' + Activator.PI_APP);
-					StorageManager tmp = new StorageManager(theStorageDir, "none", true); //$NON-NLS-1$
-					tmp.open(false);
-					dataFile = tmp.lookup(fileName, false);
-					tmp.close();
-				}
-			}
-			if (dataFile == null || !dataFile.isFile())
-				return true;
-			if (FILE_APPLOCKS.equals(fileName))
-				loadLocks(dataFile);
-			else if (FILE_APPSCHEDULED.equals(fileName))
-				loadSchedules(dataFile);
-		} catch (IOException e) {
-			return false;
-		}
-		return true;
-	}
-
-	private static void loadLocks(File locksData) throws IOException {
-		ObjectInputStream in = null;
-		try {
-			in = new ObjectInputStream(new FileInputStream(locksData));
-			int dataVersion = in.readInt();
-			if (dataVersion != DATA_VERSION)
-				return;
-			int numLocks = in.readInt();
-			synchronized (locks) {
-				for (int i = 0; i < numLocks; i++)
-					locks.add(in.readUTF());
-			}
-		} finally {
-			if (in != null)
-				in.close();
-		}
-	}
-
-	private static void loadSchedules(File schedulesData) throws IOException {
-		ObjectInputStream in = null;
-		try {
-			in = new ObjectInputStream(new FileInputStream(schedulesData));
-			int dataVersion = in.readInt();
-			if (dataVersion != DATA_VERSION)
-				return;
-			int numScheds = in.readInt();
-			for (int i = 0; i < numScheds; i++) {
-				String id = readString(in, false);
-				String appPid = readString(in, false);
-				String topic = readString(in, false);
-				String eventFilter = readString(in, false);
-				boolean recurring = in.readBoolean();
-				Map args = (Map) in.readObject();
-				EclipseScheduledApplication schedApp = new EclipseScheduledApplication(context, id, appPid, args, topic, eventFilter, recurring);
-				addScheduledApp(schedApp);
-			}
-		} catch (InvalidSyntaxException e) {
-			throw new IOException(e.getMessage());
-		} catch (NoClassDefFoundError e) {
-			throw new IOException(e.getMessage());
-		} catch (ClassNotFoundException e) {
-			throw new IOException(e.getMessage());
-		} finally {
-			if (in != null)
-				in.close();
-		}
-	}
-
-	private synchronized static void saveData(String fileName) {
-		if (storageManager == null || storageManager.isReadOnly())
-			return;
-		try {
-			File data = storageManager.createTempFile(fileName);
-			if (FILE_APPLOCKS.equals(fileName))
-				saveLocks(data);
-			else if (FILE_APPSCHEDULED.equals(fileName))
-				saveSchedules(data);
-			storageManager.lookup(fileName, true);
-			storageManager.update(new String[] {fileName}, new String[] {data.getName()});
-		} catch (IOException e) {
-			Activator.log(new FrameworkLogEntry(Activator.PI_APP, FrameworkLogEntry.ERROR, 0, NLS.bind(Messages.persistence_error_saving, fileName), 0, e, null));
-		}
-	}
-
-	// must call this while holding the locks lock
-	private static void saveLocks(File locksData) throws IOException {
-		ObjectOutputStream out = null;
-		try {
-			out = new ObjectOutputStream(new FileOutputStream(locksData));
-			out.writeInt(DATA_VERSION);
-			out.writeInt(locks.size());
-			for (Iterator iterLocks = locks.iterator(); iterLocks.hasNext();)
-				out.writeUTF((String) iterLocks.next());
-		} finally {
-			if (out != null)
-				out.close();
-		}
-	}
-
-	// must call this while holding the scheduledApps lock
-	private static void saveSchedules(File schedulesData) throws IOException {
-		ObjectOutputStream out = null;
-		try {
-			out = new ObjectOutputStream(new FileOutputStream(schedulesData));
-			out.writeInt(DATA_VERSION);
-			out.writeInt(scheduledApps.size());
-			for (Iterator apps = scheduledApps.values().iterator(); apps.hasNext();) {
-				EclipseScheduledApplication app = (EclipseScheduledApplication) apps.next();
-				writeStringOrNull(out, app.getScheduleId());
-				writeStringOrNull(out, app.getAppPid());
-				writeStringOrNull(out, app.getTopic());
-				writeStringOrNull(out, app.getEventFilter());
-				out.writeBoolean(app.isRecurring());
-				out.writeObject(app.getArguments());
-			}
-		} finally {
-			if (out != null)
-				out.close();
-		}
-	}
-
-	private static void startTimer() {
-		timerThread = new Thread(new AppTimer(), "app schedule timer"); //$NON-NLS-1$
-		timerThread.start();
-	}
-
-	private static void stopTimer() {
-		if (timerThread != null)
-			timerThread.interrupt();
-		timerThread = null;
-	}
-
-	static class AppTimer implements Runnable {
-		public void run() {
-			int lastMin = -1;
-			while (!shutdown) {
-				try {
-					Thread.sleep(30000); // sleeping 30 secs instead of 60 to try to avoid skipping minutes
-					Calendar cal = Calendar.getInstance();
-					int minute = cal.get(Calendar.MINUTE);
-					if (minute == lastMin)
-						continue;
-					lastMin = minute;
-					Hashtable props = new Hashtable();
-					props.put(ScheduledApplication.YEAR, new Integer(cal.get(Calendar.YEAR)));
-					props.put(ScheduledApplication.MONTH, new Integer(cal.get(Calendar.MONTH)));
-					props.put(ScheduledApplication.DAY_OF_MONTH, new Integer(cal.get(Calendar.DAY_OF_MONTH)));
-					props.put(ScheduledApplication.DAY_OF_WEEK, new Integer(cal.get(Calendar.DAY_OF_WEEK)));
-					props.put(ScheduledApplication.HOUR_OF_DAY, new Integer(cal.get(Calendar.HOUR_OF_DAY)));
-					props.put(ScheduledApplication.MINUTE, new Integer(minute));
-					Event timerEvent = new Event(ScheduledApplication.TIMER_TOPIC, props);
-					EclipseScheduledApplication[] apps = null;
-					// poor mans implementation of dispatching events; the spec will not allow us to use event admin to dispatch the virtual timer events; boo!!
-					synchronized (timerApps) {
-						if (timerApps.size() == 0)
-							continue;
-						apps = (EclipseScheduledApplication[]) timerApps.toArray(new EclipseScheduledApplication[timerApps.size()]);
-					}
-					for (int i = 0; i < apps.length; i++) {
-						try {
-							String filterString = apps[i].getEventFilter();
-							Filter filter = filterString == null ? null : FrameworkUtil.createFilter(filterString);
-							if (filter == null || filter.match(props))
-								apps[i].handleEvent(timerEvent);
-						} catch (Throwable t) {
-							String message = NLS.bind(Messages.scheduled_app_launch_error, apps[i].getAppPid());
-							Activator.log(new FrameworkLogEntry(Activator.PI_APP, FrameworkLogEntry.WARNING, 0, message, 0, t, null));
-						}
-					}
-				} catch (InterruptedException e) {
-					// do nothing;
-				}
-			}
-		}
-	}
-
-	private static String readString(ObjectInputStream in, boolean intern) throws IOException {
-		byte type = in.readByte();
-		if (type == NULL)
-			return null;
-		return intern ? in.readUTF().intern() : in.readUTF();
-	}
-
-	private static void writeStringOrNull(ObjectOutputStream out, String string) throws IOException {
-		if (string == null)
-			out.writeByte(NULL);
-		else {
-			out.writeByte(OBJECT);
-			out.writeUTF(string);
-		}
-	}
-
-	public Object addingService(ServiceReference reference) {
-		if (configLocation != null)
-			return null; // only care about one configuration
-		configLocation = (Location) context.getService(reference);
-		loadData(FILE_APPLOCKS);
-		loadData(FILE_APPSCHEDULED);
-		return configLocation;
-	}
-
-	public void modifiedService(ServiceReference reference, Object service) {
-		// don't care
-	}
-
-	public void removedService(ServiceReference reference, Object service) {
-		if (service == configLocation)
-			configLocation = null;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/CommandLineArgs.java b/bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/CommandLineArgs.java
deleted file mode 100644
index 8067ea1..0000000
--- a/bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/CommandLineArgs.java
+++ /dev/null
@@ -1,132 +0,0 @@
-package org.eclipse.equinox.internal.app;
-
-public class CommandLineArgs {
-	// obsolete command line args
-	private static final String NO_PACKAGE_PREFIXES = "-noPackagePrefixes"; //$NON-NLS-1$
-	private static final String NO_UPDATE = "-noUpdate"; //$NON-NLS-1$
-	private static final String BOOT = "-boot"; //$NON-NLS-1$
-	private static final String CLASSLOADER_PROPERTIES = "-classloaderProperties"; //$NON-NLS-1$	
-	private static final String PLUGINS = "-plugins"; //$NON-NLS-1$
-	private static final String FIRST_USE = "-firstUse"; //$NON-NLS-1$
-	private static final String NEW_UPDATES = "-newUpdates"; //$NON-NLS-1$
-	private static final String UPDATE = "-update"; //$NON-NLS-1$
-	private static final String PASSWORD = "-password"; //$NON-NLS-1$
-	private static final String KEYRING = "-keyring"; //$NON-NLS-1$
-
-	// supported command line args
-	private static final String PRODUCT = "-product"; //$NON-NLS-1$
-	private static final String FEATURE = "-feature"; //$NON-NLS-1$
-	private static final String APPLICATION = "-application"; //$NON-NLS-1$	
-
-	// Command line args as seen by the Eclipse runtime. allArgs does NOT
-	// include args consumed by the underlying framework (e.g., OSGi)
-	private static String[] appArgs = new String[0];
-	private static String[] allArgs = new String[0];
-	private static String product;
-	private static String application;
-
-	static String[] processCommandLine(String[] args) {
-		if (args == null)
-			return args;
-		if (args.length == 0)
-			return args;
-		allArgs = args;
-		int[] configArgs = new int[args.length];
-		//need to initialize the first element to something that could not be an index.
-		configArgs[0] = -1;
-		int configArgIndex = 0;
-		for (int i = 0; i < args.length; i++) {
-			boolean found = false;
-			// check for args without parameters (i.e., a flag arg)
-
-			// consume obsolete args for compatibility
-			if (args[i].equalsIgnoreCase(CLASSLOADER_PROPERTIES))
-				found = true; // ignored
-			if (args[i].equalsIgnoreCase(NO_PACKAGE_PREFIXES))
-				found = true; // ignored
-			if (args[i].equalsIgnoreCase(PLUGINS))
-				found = true; // ignored
-			if (args[i].equalsIgnoreCase(FIRST_USE))
-				found = true; // ignored
-			if (args[i].equalsIgnoreCase(NO_UPDATE))
-				found = true; // ignored
-			if (args[i].equalsIgnoreCase(NEW_UPDATES))
-				found = true; // ignored
-			if (args[i].equalsIgnoreCase(UPDATE))
-				found = true; // ignored
-			if (args[i].equalsIgnoreCase(BOOT))
-				found = true; // ignored
-			if (args[i].equalsIgnoreCase(KEYRING))
-				found = true; // ignored  
-			if (args[i].equalsIgnoreCase(PASSWORD))
-				found = true; // ignored
-
-			// done checking obsolete for args.  Remember where an arg was found 
-			if (found) {
-				configArgs[configArgIndex++] = i;
-				// check if the obsolet arg had a second param
-				if (i < args.length && !args[i + 1].startsWith("-")) //$NON-NLS-1$
-					configArgs[configArgIndex++] = ++i;
-				continue;
-			}
-
-			// check for args with parameters
-			if (i == args.length - 1 || args[i + 1].startsWith("-")) //$NON-NLS-1$
-				continue;
-			String arg = args[++i];
-
-			// look for the product to run
-			// treat -feature as a synonym for -product for compatibility.
-			if (args[i - 1].equalsIgnoreCase(PRODUCT) || args[i - 1].equalsIgnoreCase(FEATURE)) {
-				// use the long way to set the property to compile against eeminimum
-				product = arg;
-				found = true;
-			}
-
-			// look for the application to run.  
-			if (args[i - 1].equalsIgnoreCase(APPLICATION)) {
-				// use the long way to set the property to compile against eeminimum
-				application = arg;
-				found = true;
-			}
-
-			// done checking for args.  Remember where an arg was found 
-			if (found) {
-				configArgs[configArgIndex++] = i - 1;
-				configArgs[configArgIndex++] = i;
-			}
-		}
-
-		// remove all the arguments consumed by this argument parsing
-		if (configArgIndex == 0) {
-			appArgs = args;
-			return args;
-		}
-		appArgs = new String[args.length - configArgIndex];
-		configArgIndex = 0;
-		int j = 0;
-		for (int i = 0; i < args.length; i++) {
-			if (i == configArgs[configArgIndex])
-				configArgIndex++;
-			else
-				appArgs[j++] = args[i];
-		}
-		return appArgs;
-	}
-
-	static String getApplication() {
-		return application;
-	}
-
-	static String getProduct() {
-		return product;
-	}
-
-	public static String[] getApplicationArgs() {
-		return appArgs;
-	}
-
-	public static String[] getAllArgs() {
-		return allArgs;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/EclipseAppContainer.java b/bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/EclipseAppContainer.java
deleted file mode 100644
index 67cead4..0000000
--- a/bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/EclipseAppContainer.java
+++ /dev/null
@@ -1,517 +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.internal.app;
-
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.util.*;
-import org.eclipse.core.runtime.*;
-import org.eclipse.equinox.app.IApplicationContext;
-import org.eclipse.osgi.framework.log.FrameworkLogEntry;
-import org.eclipse.osgi.service.runnable.ApplicationLauncher;
-import org.eclipse.osgi.util.NLS;
-import org.osgi.framework.*;
-import org.osgi.service.application.*;
-
-/*
- * A MEG application container that understands eclipse applications.  This 
- * container will discover installed eclipse applications and register the 
- * appropriate ApplicatoinDescriptor service with the service registry.
- */
-public class EclipseAppContainer implements IRegistryChangeListener, SynchronousBundleListener {
-	private static final String PI_RUNTIME = "org.eclipse.core.runtime"; //$NON-NLS-1$
-	private static final String PT_APPLICATIONS = "applications"; //$NON-NLS-1$
-	private static final String PT_APP_VISIBLE = "visible"; //$NON-NLS-1$
-	private static final String PT_APP_THREAD = "thread"; //$NON-NLS-1$
-	private static final String PT_APP_THREAD_MAIN = "main"; //$NON-NLS-1$
-	private static final String PT_APP_THREAD_ANY = "any"; //$NON-NLS-1$
-	private static final String PT_APP_CARDINALITY = "cardinality"; //$NON-NLS-1$
-	private static final String PT_APP_CARDINALITY_SINGLETON_GLOBAL = "singleton-global"; //$NON-NLS-1$
-	private static final String PT_APP_CARDINALITY_SINGLETON_SCOPED = "singleton-scoped"; //$NON-NLS-1$
-	private static final String PT_APP_CARDINALITY_UNLIMITED = "*"; //$NON-NLS-1$
-	private static final String PT_PRODUCTS = "products"; //$NON-NLS-1$
-	private static final String EXT_ERROR_APP = "org.eclipse.equinox.app.error"; //$NON-NLS-1$
-
-	private static final String PROP_PRODUCT = "eclipse.product"; //$NON-NLS-1$
-	private static final String PROP_ECLIPSE_APPLICATION = "eclipse.application"; //$NON-NLS-1$
-	private static final String PROP_ECLIPSE_APPLICATION_LAUNCH_DEFAULT = "eclipse.application.launchDefault"; //$NON-NLS-1$
-	private static final String PROP_ECLIPSE_REGISTER_APP_DESC = "eclipse.application.registerDescriptors"; //$NON-NLS-1$
-
-	static final int NOT_LOCKED = 0;
-	static final int LOCKED_SINGLETON_GLOBAL_RUNNING = 1;
-	static final int LOCKED_SINGLETON_GLOBAL_APPS_RUNNING = 2;
-	static final int LOCKED_SINGLETON_SCOPED_RUNNING = 3;
-	static final int LOCKED_SINGLETON_LIMITED_RUNNING = 4;
-	static final int LOCKED_MAIN_THREAD_RUNNING = 5;
-
-	BundleContext context;
-	// A map of ApplicationDescriptors keyed by eclipse application ID
-	private HashMap apps = new HashMap();
-
-	private IExtensionRegistry extensionRegistry;
-	private ApplicationLauncher appLauncher;
-	private IProduct product;
-	private boolean missingProductReported;
-
-	// the currently active application handles
-	private Collection activeHandles = new ArrayList();
-	private EclipseAppHandle activeMain;
-	private EclipseAppHandle activeGlobalSingleton;
-	private EclipseAppHandle activeScopedSingleton;
-	private HashMap activeLimited;
-
-	public EclipseAppContainer(BundleContext context, IExtensionRegistry extensionRegistry, ApplicationLauncher appLauncher) {
-		this.context = context;
-		this.extensionRegistry = extensionRegistry;
-		this.appLauncher = appLauncher;
-	}
-
-	void start() {
-		extensionRegistry.addRegistryChangeListener(this);
-		// need to listen for system bundle stopping
-		context.addBundleListener(this);
-		String startDefaultProp = context.getProperty(EclipseAppContainer.PROP_ECLIPSE_APPLICATION_LAUNCH_DEFAULT);
-		if (startDefaultProp == null || "true".equalsIgnoreCase(context.getProperty(EclipseAppContainer.PROP_ECLIPSE_APPLICATION_LAUNCH_DEFAULT))) { //$NON-NLS-1$
-			boolean registerDescs = "true".equalsIgnoreCase(context.getProperty(EclipseAppContainer.PROP_ECLIPSE_REGISTER_APP_DESC)); //$NON-NLS-1$
-			// register all the descriptors if requested to
-			if (registerDescs)
-				registerAppDescriptors();
-			// Start the default application
-			try {
-				startDefaultApp();
-			} catch (ApplicationException e) {
-				Activator.log(new FrameworkLogEntry(Activator.PI_APP, FrameworkLogEntry.ERROR, 0, Messages.application_errorStartDefault, 0, e, null));
-				if (!registerDescs)
-					// if an error occurred then register all desciptors if they were not registered already.
-					registerAppDescriptors();
-			}
-		} else {
-			// we are not running the default application; we should register all applications
-			registerAppDescriptors();
-		}
-	}
-
-	void stop() {
-		// stop all applications
-		stopAllApps();
-		context.removeBundleListener(this);
-		extensionRegistry.removeRegistryChangeListener(this);
-		// flush the apps
-		apps.clear();
-		product = null;
-		missingProductReported = false;
-	}
-
-	/*
-	 * Only used to find the default application
-	 */
-	private EclipseAppDescriptor getAppDescriptor(String applicationId) {
-		EclipseAppDescriptor result = null;
-		synchronized (apps) {
-			result = (EclipseAppDescriptor) apps.get(applicationId);
-		}
-		if (result == null) {
-			registerAppDescriptor(applicationId); // try again just in case we are waiting for an event
-			synchronized (apps) {
-				result = (EclipseAppDescriptor) apps.get(applicationId);
-			}
-		}
-		return result;
-	}
-
-	private EclipseAppDescriptor createAppDescriptor(IExtension appExtension) {
-		synchronized (apps) {
-			EclipseAppDescriptor appDescriptor = (EclipseAppDescriptor) apps.get(appExtension.getUniqueIdentifier());
-			if (appDescriptor != null)
-				return appDescriptor;
-			// the appDescriptor does not exist for the app ID; create it
-			IConfigurationElement[] configs = appExtension.getConfigurationElements();
-			int flags = EclipseAppDescriptor.FLAG_CARD_SINGLETON_GLOGAL | EclipseAppDescriptor.FLAG_VISIBLE | EclipseAppDescriptor.FLAG_TYPE_MAIN_THREAD;
-			int cardinality = 0;
-			if (configs.length > 0) {
-				String sVisible = configs[0].getAttribute(PT_APP_VISIBLE);
-				if (sVisible != null && !Boolean.valueOf(sVisible).booleanValue())
-					flags &= ~(EclipseAppDescriptor.FLAG_VISIBLE);
-				String sThread = configs[0].getAttribute(PT_APP_THREAD);
-				if (PT_APP_THREAD_ANY.equals(sThread)) {
-					flags |= EclipseAppDescriptor.FLAG_TYPE_ANY_THREAD;
-					flags &= ~(EclipseAppDescriptor.FLAG_TYPE_MAIN_THREAD);
-				}
-				String sCardinality = configs[0].getAttribute(PT_APP_CARDINALITY);
-				if (sCardinality != null) {
-					flags &= ~(EclipseAppDescriptor.FLAG_CARD_SINGLETON_GLOGAL); // clear the global bit
-					if (PT_APP_CARDINALITY_SINGLETON_SCOPED.equals(sCardinality))
-						flags |= EclipseAppDescriptor.FLAG_CARD_SINGLETON_SCOPED;
-					else if (PT_APP_CARDINALITY_UNLIMITED.equals(sCardinality))
-						flags |= EclipseAppDescriptor.FLAG_CARD_UNLIMITED;
-					else if (PT_APP_CARDINALITY_SINGLETON_GLOBAL.equals(sCardinality))
-						flags |= EclipseAppDescriptor.FLAG_CARD_SINGLETON_GLOGAL;
-					else {
-						try {
-							cardinality = Integer.parseInt(sCardinality);
-							flags |= EclipseAppDescriptor.FLAG_CARD_LIMITED;
-						} catch (NumberFormatException e) {
-							// TODO should we log this?
-							// just fall back to the default
-							flags |= EclipseAppDescriptor.FLAG_CARD_SINGLETON_GLOGAL;
-						}
-					}
-				}
-			}
-			appDescriptor = new EclipseAppDescriptor(Activator.getBundle(appExtension.getContributor()), appExtension.getUniqueIdentifier(), flags, cardinality, this);
-			// register the appDescriptor as a service
-			ServiceRegistration sr = (ServiceRegistration) AccessController.doPrivileged(new RegisterService(new String[] {ApplicationDescriptor.class.getName()}, appDescriptor, appDescriptor.getServiceProperties()));
-			appDescriptor.setServiceRegistration(sr);
-			// save the app descriptor in the cache
-			apps.put(appExtension.getUniqueIdentifier(), appDescriptor);
-			return appDescriptor;
-		}
-	}
-
-	private EclipseAppDescriptor removeAppDescriptor(String applicationId) {
-		synchronized (apps) {
-			EclipseAppDescriptor appDescriptor = (EclipseAppDescriptor) apps.remove(applicationId);
-			if (appDescriptor == null)
-				return null;
-			appDescriptor.unregister();
-			return appDescriptor;
-		}
-	}
-
-	/*
-	 * Gives access to the RegisterService privileged action.
-	 */
-	PrivilegedAction getRegServiceAction(String[] serviceClasses, Object serviceObject, Dictionary serviceProps) {
-		return new RegisterService(serviceClasses, serviceObject, serviceProps);
-	}
-
-	/*
-	 * PrivilegedAction used to register ApplicationDescriptor and ApplicationHandle services
-	 */
-	private class RegisterService implements PrivilegedAction {
-		String[] serviceClasses;
-		Object serviceObject;
-		Dictionary serviceProps;
-
-		RegisterService(String[] serviceClasses, Object serviceObject, Dictionary serviceProps) {
-			this.serviceClasses = serviceClasses;
-			this.serviceObject = serviceObject;
-			this.serviceProps = serviceProps;
-		}
-
-		public Object run() {
-			return context.registerService(serviceClasses, serviceObject, serviceProps);
-		}
-	}
-
-	private void startDefaultApp() throws ApplicationException {
-		// find the default application
-		String applicationId = getApplicationId();
-		EclipseAppDescriptor defaultDesc = null;
-		Map args = null;
-		if (applicationId == null) {
-			// the application id is not set; use a descriptor that will throw an exception
-			args = new HashMap(2);
-			args.put(ErrorApplication.ERROR_EXCEPTION, new RuntimeException(Messages.application_noIdFound));
-			defaultDesc = getAppDescriptor(EXT_ERROR_APP);
-		} else {
-			defaultDesc = getAppDescriptor(applicationId);
-			if (defaultDesc == null) {
-				// the application id is not available in the registry; use a descriptor that will throw an exception
-				args = new HashMap(2);
-				args.put(ErrorApplication.ERROR_EXCEPTION, new RuntimeException(NLS.bind(Messages.application_notFound, applicationId, getAvailableAppsMsg())));
-				defaultDesc = getAppDescriptor(EXT_ERROR_APP);
-			}
-		}
-		if (defaultDesc != null)
-			defaultDesc.launch(args);
-		else
-			throw new ApplicationException(ApplicationException.APPLICATION_INTERNAL_ERROR, Messages.application_noIdFound);
-	}
-
-	/*
-	 * Registers an ApplicationDescriptor service for each eclipse application
-	 * available in the extension registry.
-	 */
-	private void registerAppDescriptors() {
-		IExtension[] availableApps = getAvailableAppExtensions();
-		for (int i = 0; i < availableApps.length; i++)
-			createAppDescriptor(availableApps[i]);
-	}
-
-	private void registerAppDescriptor(String applicationId) {
-		IExtension appExtension = getAppExtension(applicationId);
-		if (appExtension != null)
-			createAppDescriptor(appExtension);
-	}
-
-	/*
-	 * Returns a list of all the available application IDs which are available 
-	 * in the extension registry.
-	 */
-	private IExtension[] getAvailableAppExtensions() {
-		IExtensionPoint point = extensionRegistry.getExtensionPoint(PI_RUNTIME + '.' + PT_APPLICATIONS);
-		if (point == null)
-			return new IExtension[0];
-		return point.getExtensions();
-	}
-
-	String getAvailableAppsMsg() {
-		IExtension[] availableApps = getAvailableAppExtensions();
-		String availableAppsMsg = "<NONE>"; //$NON-NLS-1$
-		if (availableApps.length != 0) {
-			availableAppsMsg = availableApps[0].getUniqueIdentifier();
-			for (int i = 1; i < availableApps.length; i++)
-				availableAppsMsg = availableAppsMsg + ", " + availableApps[i].getUniqueIdentifier(); //$NON-NLS-1$
-		}
-		return availableAppsMsg;
-	}
-
-	/*
-	 * Returns the application extension for the specified applicaiton ID.
-	 * A RuntimeException is thrown if the extension does not exist for the
-	 * given application ID.
-	 */
-	IExtension getAppExtension(String applicationId) {
-		return extensionRegistry.getExtension(PI_RUNTIME, PT_APPLICATIONS, applicationId);
-	}
-
-	void launch(EclipseAppHandle appHandle) throws Exception {
-		lock(appHandle);
-		if (((EclipseAppDescriptor) appHandle.getApplicationDescriptor()).getThreadType() == EclipseAppDescriptor.FLAG_TYPE_MAIN_THREAD) {
-			// use the ApplicationLauncher provided by the framework 
-			// to ensure it is launched on the main thread
-			if (appLauncher == null)
-				throw new IllegalStateException();
-			appLauncher.launch(appHandle, appHandle.getArguments().get(IApplicationContext.APPLICATION_ARGS));
-		} else {
-			AnyThreadAppLauncher.launchEclipseApplication(appHandle);
-		}
-	}
-
-	public void registryChanged(IRegistryChangeEvent event) {
-		processAppDeltas(event.getExtensionDeltas(PI_RUNTIME, PT_APPLICATIONS));
-		processAppDeltas(event.getExtensionDeltas(Activator.PI_APP, PT_APPLICATIONS));
-	}
-
-	private void processAppDeltas(IExtensionDelta[] deltas) {
-		for (int i = 0; i < deltas.length; i++) {
-			switch (deltas[i].getKind()) {
-				case IExtensionDelta.ADDED :
-					createAppDescriptor(deltas[i].getExtension());
-					break;
-				case IExtensionDelta.REMOVED :
-					removeAppDescriptor(deltas[i].getExtension().getUniqueIdentifier());
-					break;
-			}
-		}
-	}
-
-	public void bundleChanged(BundleEvent event) {
-		// if this is not the system bundle stopping then ignore the event
-		if ((BundleEvent.STOPPING & event.getType()) == 0 || event.getBundle().getBundleId() != 0)
-			return;
-		// The system bundle is stopping; better stop all applications and containers now
-		stopAllApps();
-	}
-
-	private void stopAllApps() {
-		// get a stapshot of running applications
-		try {
-			ServiceReference[] runningRefs = context.getServiceReferences(ApplicationHandle.class.getName(), "(!(application.state=STOPPING))"); //$NON-NLS-1$
-			if (runningRefs != null)
-				for (int i = 0; i < runningRefs.length; i++) {
-					ApplicationHandle handle = (ApplicationHandle) context.getService(runningRefs[i]);
-					try {
-						handle.destroy();
-					} catch (Throwable t) {
-						String message = NLS.bind(Messages.application_error_stopping, handle.getInstanceId());
-						Activator.log(new FrameworkLogEntry(Activator.PI_APP, FrameworkLogEntry.WARNING, 0, message, 0, t, null));
-					}
-				}
-		} catch (InvalidSyntaxException e) {
-			// do nothing; we already tested the filter string above
-		}
-	}
-
-	String getApplicationId() {
-		// try commandLineProperties
-		String applicationId = CommandLineArgs.getApplication();
-		if (applicationId != null)
-			return applicationId;
-
-		// try bundleContext properties
-		applicationId = context.getProperty(EclipseAppContainer.PROP_ECLIPSE_APPLICATION);
-		if (applicationId != null)
-			return applicationId;
-
-		//Derive the application from the product information
-		return getProduct() == null ? null : getProduct().getApplication();
-	}
-
-	public IProduct getProduct() {
-		if (product != null)
-			return product;
-		// try commandLineProperties
-		String productId = CommandLineArgs.getProduct();
-		if (productId == null) {
-			// try bundleContext properties
-			if (context == null)
-				return null;
-			productId = context.getProperty(PROP_PRODUCT);
-			if (productId == null)
-				return null;
-		}
-		IConfigurationElement[] entries = extensionRegistry.getConfigurationElementsFor(PI_RUNTIME, PT_PRODUCTS, productId);
-		if (entries.length > 0) {
-			// There should only be one product with the given id so just take the first element
-			product = new Product(productId, entries[0]);
-			return product;
-		}
-		IConfigurationElement[] elements = extensionRegistry.getConfigurationElementsFor(PI_RUNTIME, PT_PRODUCTS);
-		List logEntries = null;
-		for (int i = 0; i < elements.length; i++) {
-			IConfigurationElement element = elements[i];
-			if (element.getName().equalsIgnoreCase("provider")) { //$NON-NLS-1$
-				try {
-					IProductProvider provider = (IProductProvider) element.createExecutableExtension("run"); //$NON-NLS-1$
-					IProduct[] products = provider.getProducts();
-					for (int j = 0; j < products.length; j++) {
-						IProduct provided = products[j];
-						if (productId.equalsIgnoreCase(provided.getId())) {
-							product = provided;
-							return product;
-						}
-					}
-				} catch (CoreException e) {
-					if (logEntries == null)
-						logEntries = new ArrayList(3);
-					logEntries.add(new FrameworkLogEntry(Activator.PI_APP, NLS.bind(Messages.provider_invalid, element.getParent().toString()), 0, e, null));
-				}
-			}
-		}
-		if (logEntries != null)
-			Activator.log(new FrameworkLogEntry(Activator.PI_APP, Messages.provider_invalid_general, 0, null, (FrameworkLogEntry[]) logEntries.toArray(new FrameworkLogEntry[logEntries.size()])));
-
-		if (!missingProductReported) {
-			Activator.log(new FrameworkLogEntry(Activator.PI_APP, NLS.bind(Messages.product_notFound, productId), 0, null, null));
-			missingProductReported = true;
-		}
-		return null;
-	}
-
-	private void refreshAppDescriptors() {
-		synchronized (apps) {
-			for (Iterator allApps = apps.values().iterator(); allApps.hasNext();)
-				((EclipseAppDescriptor) allApps.next()).refreshProperties();
-		}
-	}
-
-	synchronized void lock(EclipseAppHandle appHandle) throws ApplicationException {
-		EclipseAppDescriptor eclipseApp = (EclipseAppDescriptor) appHandle.getApplicationDescriptor();
-		switch (isLocked(eclipseApp)) {
-			case NOT_LOCKED :
-				break;
-			case LOCKED_SINGLETON_GLOBAL_RUNNING :
-				throw new ApplicationException(ApplicationException.APPLICATION_INTERNAL_ERROR, NLS.bind(Messages.singleton_running, activeGlobalSingleton.getInstanceId()));
-			case LOCKED_SINGLETON_GLOBAL_APPS_RUNNING :
-				throw new ApplicationException(ApplicationException.APPLICATION_INTERNAL_ERROR, Messages.apps_running);
-			case LOCKED_SINGLETON_SCOPED_RUNNING :
-				throw new ApplicationException(ApplicationException.APPLICATION_INTERNAL_ERROR, NLS.bind(Messages.singleton_running, activeScopedSingleton.getInstanceId()));
-			case LOCKED_SINGLETON_LIMITED_RUNNING :
-				throw new ApplicationException(ApplicationException.APPLICATION_INTERNAL_ERROR, NLS.bind(Messages.max_running, eclipseApp.getApplicationId()));
-			case LOCKED_MAIN_THREAD_RUNNING :
-				throw new ApplicationException(ApplicationException.APPLICATION_INTERNAL_ERROR, NLS.bind(Messages.main_running, activeMain.getInstanceId()));
-			default :
-				break;
-		}
-
-		if (eclipseApp.getThreadType() == EclipseAppDescriptor.FLAG_TYPE_MAIN_THREAD) {
-			if (activeMain != null)
-				throw new IllegalStateException(Messages.main_running + activeMain.getInstanceId());
-		}
-		// ok we can now successfully lock the container
-		switch (eclipseApp.getCardinalityType()) {
-			case EclipseAppDescriptor.FLAG_CARD_SINGLETON_GLOGAL :
-				activeGlobalSingleton = appHandle;
-				break;
-			case EclipseAppDescriptor.FLAG_CARD_SINGLETON_SCOPED :
-				activeScopedSingleton = appHandle;
-				break;
-			case EclipseAppDescriptor.FLAG_CARD_LIMITED :
-				if (activeLimited == null)
-					activeLimited = new HashMap(3);
-				ArrayList limited = (ArrayList) activeLimited.get(eclipseApp.getApplicationId());
-				if (limited == null) {
-					limited = new ArrayList(eclipseApp.getCardinality());
-					activeLimited.put(eclipseApp.getApplicationId(), limited);
-				}
-				limited.add(appHandle);
-				break;
-			case EclipseAppDescriptor.FLAG_CARD_UNLIMITED :
-				break;
-			default :
-				break;
-		}
-		if (eclipseApp.getThreadType() == EclipseAppDescriptor.FLAG_TYPE_MAIN_THREAD)
-			activeMain = appHandle;
-		activeHandles.add(appHandle);
-		refreshAppDescriptors();
-	}
-
-	synchronized void unlock(EclipseAppHandle appHandle) {
-		if (activeGlobalSingleton == appHandle)
-			activeGlobalSingleton = null;
-		else if (activeScopedSingleton == appHandle)
-			activeScopedSingleton = null;
-		else if (((EclipseAppDescriptor) appHandle.getApplicationDescriptor()).getCardinalityType() == EclipseAppDescriptor.FLAG_CARD_LIMITED) {
-			if (activeLimited != null) {
-				ArrayList limited = (ArrayList) activeLimited.get(((EclipseAppDescriptor) appHandle.getApplicationDescriptor()).getApplicationId());
-				if (limited != null)
-					limited.remove(appHandle);
-			}
-		}
-		if (activeMain == appHandle)
-			activeMain = null;
-		if (activeHandles.remove(appHandle))
-			refreshAppDescriptors(); // only refresh descriptors if we really unlocked something
-	}
-
-	synchronized int isLocked(EclipseAppDescriptor eclipseApp) {
-		if (activeGlobalSingleton != null)
-			return LOCKED_SINGLETON_GLOBAL_RUNNING;
-		switch (eclipseApp.getCardinalityType()) {
-			case EclipseAppDescriptor.FLAG_CARD_SINGLETON_GLOGAL :
-				if (activeHandles.size() > 0)
-					return LOCKED_SINGLETON_GLOBAL_APPS_RUNNING;
-				break;
-			case EclipseAppDescriptor.FLAG_CARD_SINGLETON_SCOPED :
-				if (activeScopedSingleton != null)
-					return LOCKED_SINGLETON_SCOPED_RUNNING;
-				break;
-			case EclipseAppDescriptor.FLAG_CARD_LIMITED :
-				if (activeLimited != null) {
-					ArrayList limited = (ArrayList) activeLimited.get(eclipseApp.getApplicationId());
-					if (limited != null && limited.size() >= eclipseApp.getCardinality())
-						return LOCKED_SINGLETON_LIMITED_RUNNING;
-				}
-				break;
-			case EclipseAppDescriptor.FLAG_CARD_UNLIMITED :
-				break;
-			default :
-				break;
-		}
-		if (eclipseApp.getThreadType() == EclipseAppDescriptor.FLAG_TYPE_MAIN_THREAD && activeMain != null)
-			return LOCKED_MAIN_THREAD_RUNNING;
-		return NOT_LOCKED;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/EclipseAppDescriptor.java b/bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/EclipseAppDescriptor.java
deleted file mode 100755
index 2dda6d3..0000000
--- a/bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/EclipseAppDescriptor.java
+++ /dev/null
@@ -1,196 +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.internal.app;
-
-import java.security.AccessController;
-import java.util.*;
-import org.eclipse.equinox.app.IApplicationContext;
-import org.osgi.framework.*;
-import org.osgi.service.application.ApplicationDescriptor;
-import org.osgi.service.application.ApplicationHandle;
-import org.osgi.service.condpermadmin.BundleSignerCondition;
-import org.osgi.service.condpermadmin.ConditionInfo;
-
-/*
- * An ApplicationDescriptor for an eclipse application.
- */
-public class EclipseAppDescriptor extends ApplicationDescriptor {
-	static final String APP_TYPE = "eclipse.application.type"; //$NON-NLS-1$
-	static final String APP_TYPE_MAIN_THREAD = "main.thread"; //$NON-NLS-1$
-	static final String APP_TYPE_ANY_THREAD = "any.thread"; //$NON-NLS-1$
-	static final int FLAG_VISIBLE = 0x01;
-	static final int FLAG_CARD_SINGLETON_GLOGAL = 0x02;
-	static final int FLAG_CARD_SINGLETON_SCOPED = 0x04;
-	static final int FLAG_CARD_UNLIMITED = 0x08;
-	static final int FLAG_CARD_LIMITED = 0x10;
-	static final int FLAG_TYPE_MAIN_THREAD = 0x20;
-	static final int FLAG_TYPE_ANY_THREAD = 0x40;
-	private static long instanceID = 0;
-	private ServiceRegistration sr;
-	private Boolean locked = Boolean.FALSE;
-	private EclipseAppContainer appContainer;
-	private Bundle contributor;
-	private int flags;
-	private int cardinality;
-
-	protected EclipseAppDescriptor(Bundle contributor, String pid, int flags, int cardinality, EclipseAppContainer appContainer) {
-		super(pid);
-		this.contributor = contributor;
-		this.appContainer = appContainer;
-		this.locked = AppPersistence.isLocked(this) ? Boolean.TRUE : Boolean.FALSE;
-		this.flags = flags;
-		this.cardinality = cardinality;
-	}
-
-	protected Map getPropertiesSpecific(String locale) {
-		// just use the service properties; for now we do not localize any properties
-		return getServiceProperties();
-	}
-
-	protected ApplicationHandle launchSpecific(Map arguments) throws Exception {
-		// if this application is locked throw an exception.
-		if (getLocked().booleanValue())
-			throw new IllegalStateException("Cannot launch a locked application."); //$NON-NLS-1$
-		// initialize the appHandle
-		EclipseAppHandle appHandle = createAppHandle(arguments);
-		try {
-			// use the appContainer to launch the application on the main thread.
-			appContainer.launch(appHandle);
-		} catch (Throwable t) {
-			// be sure to destroy the appHandle if an error occurs
-			appHandle.destroy();
-			if (t instanceof Exception)
-				throw (Exception) t;
-			throw (Error) t;
-		}
-		return appHandle;
-	}
-
-	protected synchronized void lockSpecific() {
-		locked = Boolean.TRUE;
-		// make sure the service properties are updated with the latest lock info
-		refreshProperties();
-	}
-
-	protected synchronized void unlockSpecific() {
-		locked = Boolean.FALSE;
-		// make sure the service properties are updated with the latest lock info
-		refreshProperties();
-	}
-
-	void refreshProperties() {
-		ServiceRegistration reg = getServiceRegistration();
-		if (reg != null)
-			try {
-				reg.setProperties(getServiceProperties());
-			} catch (IllegalStateException e) {
-				// this must mean the service was unregistered
-				// just ignore
-			}
-		
-	}
-
-	synchronized void setServiceRegistration(ServiceRegistration sr) {
-		this.sr = sr;
-	}
-
-	private synchronized ServiceRegistration getServiceRegistration() {
-		return sr;
-	}
-
-	private synchronized Boolean getLocked() {
-		return locked;
-	}
-
-	/*
-	 * Gets a snapshot of the current service properties.
-	 */
-	Hashtable getServiceProperties() {
-		Hashtable props = new Hashtable(10);
-		props.put(ApplicationDescriptor.APPLICATION_PID, getApplicationId());
-		props.put(ApplicationDescriptor.APPLICATION_CONTAINER, Activator.PI_APP);
-		props.put(ApplicationDescriptor.APPLICATION_LOCATION, getLocation());
-		Boolean launchable = appContainer.isLocked(this) == 0 ? Boolean.TRUE : Boolean.FALSE;
-		props.put(ApplicationDescriptor.APPLICATION_LAUNCHABLE, launchable);
-		props.put(ApplicationDescriptor.APPLICATION_LOCKED, getLocked());
-		Boolean visible = (flags & FLAG_VISIBLE) != 0 ? Boolean.TRUE : Boolean.FALSE;
-		props.put(ApplicationDescriptor.APPLICATION_VISIBLE, visible);
-		props.put(APP_TYPE, getThreadTypeString());
-		return props;
-	}
-
-	private String getLocation() {
-		if (contributor == null)
-			return ""; //$NON-NLS-1$
-		return Activator.getLocation(contributor);
-	}
-
-	/*
-	 * Returns the appHandle.  If it does not exist then one is created.
-	 */
-	private EclipseAppHandle createAppHandle(Map arguments) {
-		EclipseAppHandle newAppHandle = new EclipseAppHandle(EclipseAppDescriptor.getInstanceID(this), arguments, this);
-		ServiceRegistration appHandleReg = (ServiceRegistration) AccessController.doPrivileged(appContainer.getRegServiceAction(new String[] {ApplicationHandle.class.getName(), IApplicationContext.class.getName()}, newAppHandle, newAppHandle.getServiceProperties()));
-		newAppHandle.setServiceRegistration(appHandleReg);
-		return newAppHandle;
-	}
-
-	EclipseAppContainer getContainerManager() {
-		return appContainer;
-	}
-
-	public boolean matchDNChain(String pattern) {
-		if (contributor == null)
-			return false;
-		return BundleSignerCondition.getCondition(contributor, new ConditionInfo(BundleSignerCondition.class.getName(), new String[] {pattern})).isSatisfied();
-	}
-
-	protected boolean isLaunchableSpecific() {
-		return true;
-	}
-
-	public synchronized void unregister() {
-		ServiceRegistration temp = sr;
-		if (temp != null) {
-			sr = null;
-			temp.unregister();
-		}
-	}
-
-	String getThreadTypeString() {
-		if ((flags & FLAG_TYPE_ANY_THREAD) != 0)
-			return APP_TYPE_ANY_THREAD;
-		return APP_TYPE_MAIN_THREAD;
-	}
-
-	int getThreadType() {
-		return flags & (FLAG_TYPE_ANY_THREAD | FLAG_TYPE_MAIN_THREAD);
-	}
-
-	int getCardinalityType() {
-		return flags & (FLAG_CARD_SINGLETON_GLOGAL | FLAG_CARD_SINGLETON_SCOPED | FLAG_CARD_LIMITED | FLAG_CARD_UNLIMITED);
-	}
-
-	int getCardinality() {
-		return cardinality;
-	}
-
-	private static String getInstanceID(EclipseAppDescriptor eclipseApp) {
-		// if the app is a singleton or has a limit of 1 just return the application id
-		if ((eclipseApp.getCardinalityType() & (FLAG_CARD_SINGLETON_GLOGAL | FLAG_CARD_SINGLETON_SCOPED)) != 0 || eclipseApp.getCardinality() == 1)
-			return eclipseApp.getApplicationId();
-		// create a unique instance id
-		synchronized (EclipseAppDescriptor.class) {
-			return eclipseApp.getApplicationId() + "_" + instanceID++; //$NON-NLS-1$
-		}
-	}
-}
diff --git a/bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/EclipseAppHandle.java b/bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/EclipseAppHandle.java
deleted file mode 100755
index 6305c96..0000000
--- a/bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/EclipseAppHandle.java
+++ /dev/null
@@ -1,222 +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.internal.app;
-
-import java.util.*;
-import org.eclipse.core.runtime.*;
-import org.eclipse.equinox.app.IApplication;
-import org.eclipse.equinox.app.IApplicationContext;
-import org.eclipse.osgi.service.runnable.ApplicationRunnable;
-import org.eclipse.osgi.util.NLS;
-import org.osgi.framework.*;
-import org.osgi.service.application.ApplicationHandle;
-
-/*
- * An ApplicationHandle that represents a single instance of a running eclipse application.
- */
-public class EclipseAppHandle extends ApplicationHandle implements ApplicationRunnable, IApplicationContext {
-	// Indicates the application is starting
-	private static final int FLAG_STARTING = 0x01;
-	// Indicates the application is active
-	private static final int FLAG_ACTIVE = 0x02;
-	// Indicates the application is stopping
-	private static final int FLAG_STOPPING = 0x04;
-	// Indicates the application is stopped
-	private static final int FLAG_STOPPED = 0x08;
-	private static final String STARTING = "starting"; //$NON-NLS-1$
-	private static final String STOPPED = "stopped"; //$NON-NLS-1$
-	private static final String PROP_ECLIPSE_EXITCODE = "eclipse.exitcode"; //$NON-NLS-1$
-
-	private ServiceRegistration handleRegistration;
-	private int status = EclipseAppHandle.FLAG_STARTING;
-	private Map arguments;
-	private Object application;
-
-	/*
-	 * Constructs a handle for a single running instance of a eclipse application.
-	 */
-	EclipseAppHandle(String instanceId, Map arguments, EclipseAppDescriptor descriptor) {
-		super(instanceId, descriptor);
-		if (arguments == null)
-			this.arguments = new HashMap(2);
-		else
-			this.arguments = new HashMap(arguments);
-	}
-
-	synchronized public String getState() {
-		switch (status) {
-			case FLAG_STARTING :
-				return STARTING;
-			case FLAG_ACTIVE :
-				return ApplicationHandle.RUNNING;
-			case FLAG_STOPPING :
-				return ApplicationHandle.STOPPING;
-			case FLAG_STOPPED :
-			default :
-				return STOPPED;
-		}
-	}
-
-	protected void destroySpecific() {
-		// when this method is called we must force the application to exit.
-		// first set the status to stopping
-		setAppStatus(EclipseAppHandle.FLAG_STOPPING);
-		// now force the appliction to stop
-		IApplication app = getApplication();
-		if (app != null)
-			app.stop();
-		// make sure the app status is stopped
-		setAppStatus(EclipseAppHandle.FLAG_STOPPED);
-	}
-
-	void setServiceRegistration(ServiceRegistration sr) {
-		this.handleRegistration = sr;
-	}
-
-	/*
-	 * Gets a snapshot of the current service properties.
-	 */
-	Dictionary getServiceProperties() {
-		Dictionary props = new Hashtable(6);
-		props.put(ApplicationHandle.APPLICATION_PID, getInstanceId());
-		props.put(ApplicationHandle.APPLICATION_STATE, getState());
-		props.put(ApplicationHandle.APPLICATION_DESCRIPTOR, getApplicationDescriptor().getApplicationId());
-		props.put(EclipseAppDescriptor.APP_TYPE, ((EclipseAppDescriptor) getApplicationDescriptor()).getThreadTypeString());
-		return props;
-	}
-
-	/*
-	 * Changes the status of this handle.  This method will properly transition
-	 * the state of this handle and will update the service registration accordingly.
-	 */
-	private synchronized void setAppStatus(int status) {
-		if (this.status == status)
-			return;
-		if ((status & EclipseAppHandle.FLAG_STARTING) != 0)
-			throw new IllegalArgumentException("Cannot set app status to ACTIVE"); //$NON-NLS-1$
-		// if status is stopping and the context is already stopping then return
-		if ((status & EclipseAppHandle.FLAG_STOPPING) != 0)
-			if ((this.status & (EclipseAppHandle.FLAG_STOPPING | EclipseAppHandle.FLAG_STOPPED)) != 0)
-				return;
-		// change the service properties to reflect the state change.
-		this.status = status; 
-		handleRegistration.setProperties(getServiceProperties());
-		// if the status is stopped then unregister the service
-		if ((this.status & EclipseAppHandle.FLAG_STOPPED) != 0) {
-			handleRegistration.unregister();
-			((EclipseAppDescriptor) getApplicationDescriptor()).getContainerManager().unlock(this);
-		}
-	}
-
-	public Map getArguments() {
-		return arguments;
-	}
-
-	public IProduct getProduct() {
-		return ((EclipseAppDescriptor) getApplicationDescriptor()).getContainerManager().getProduct();
-	}
-
-	public Object run(Object context) throws Exception {
-		if (context != null) {
-			// always force the use of the context if it is not null
-			arguments.put(IApplicationContext.APPLICATION_ARGS, context);
-		} else {
-			// get the context from the arguments
-			context = arguments.get(IApplicationContext.APPLICATION_ARGS);
-			if (context == null) {
-				// if context is null then use the args from CommandLineArgs
-				context = CommandLineArgs.getApplicationArgs();
-				arguments.put(IApplicationContext.APPLICATION_ARGS, context);
-			}
-		}
-		Object result;
-		try {
-			Object app;
-			synchronized (this) {
-				application = getConfiguration().createExecutableExtension("run"); //$NON-NLS-1$
-				app = application;
-			}
-			if (app instanceof IApplication)
-				result = ((IApplication) app).start(this);
-			else
-				result = ((IPlatformRunnable) app).run(context);
-		} finally {
-			synchronized (this) {
-				application = null;
-			}
-			// The application exited itself; notify the app context
-			setAppStatus(EclipseAppHandle.FLAG_STOPPED);
-		}
-		int exitCode = result instanceof Integer ? ((Integer) result).intValue() : 0;
-		// use the long way to set the property to compile against eeminimum
-		System.getProperties().setProperty(PROP_ECLIPSE_EXITCODE, Integer.toString(exitCode));
-		if (Activator.DEBUG)
-			System.out.println(NLS.bind(Messages.application_returned, (new String[] {getApplicationDescriptor().getApplicationId(), result == null ? "null" : result.toString()}))); //$NON-NLS-1$
-		return result;
-	}
-
-	public void stop() {
-		destroy();
-	}
-
-	public void applicationRunning() {
-		// first set the application handle status to running
-		setAppStatus(EclipseAppHandle.FLAG_ACTIVE);
-		// now run the splash handler
-		final Runnable handler = getSplashHandler();
-		if (handler == null)
-			return;
-		SafeRunner.run(new ISafeRunnable() {
-			public void handleException(Throwable e) {
-				// just continue ... the exception has already been logged by
-				// handleException(ISafeRunnable)
-			}
-
-			public void run() throws Exception {
-				handler.run();
-			}
-		});
-	}
-
-	private Runnable getSplashHandler() {
-		ServiceReference[] ref;
-		try {
-			ref = Activator.getContext().getServiceReferences(Runnable.class.getName(), "(name=splashscreen)"); //$NON-NLS-1$
-		} catch (InvalidSyntaxException e) {
-			return null;
-		}
-		if (ref == null || ref.length == 0)
-			return null;
-		// assumes the endInitializationHandler is available as a service
-		// see EclipseStarter.publishSplashScreen
-		Runnable result = (Runnable) Activator.getContext().getService(ref[0]);
-		if (result != null) {
-			Activator.getContext().ungetService(ref[0]); // immediately unget the service because we are not using it long
-			return result;
-		}
-		return null;
-	}
-
-	private IApplication getApplication() {
-		return (IApplication) ((application instanceof IApplication) ? application : null);
-	}
-
-	private IConfigurationElement getConfiguration() {
-		IExtension applicationExtension = ((EclipseAppDescriptor) getApplicationDescriptor()).getContainerManager().getAppExtension(getApplicationDescriptor().getApplicationId());
-		if (applicationExtension == null)
-			throw new RuntimeException(NLS.bind(Messages.application_notFound, getApplicationDescriptor().getApplicationId(), ((EclipseAppDescriptor) getApplicationDescriptor()).getContainerManager().getAvailableAppsMsg()));
-		IConfigurationElement[] configs = applicationExtension.getConfigurationElements();
-		if (configs.length == 0)
-			throw new RuntimeException(NLS.bind(Messages.application_invalidExtension, getApplicationDescriptor().getApplicationId()));
-		return configs[0];
-	}
-}
diff --git a/bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/EclipseScheduledApplication.java b/bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/EclipseScheduledApplication.java
deleted file mode 100755
index 3e2b206..0000000
--- a/bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/EclipseScheduledApplication.java
+++ /dev/null
@@ -1,152 +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.internal.app;
-
-import java.security.Guard;
-import java.security.GuardedObject;
-import java.util.HashMap;
-import java.util.Map;
-import org.eclipse.osgi.framework.log.FrameworkLogEntry;
-import org.eclipse.osgi.util.NLS;
-import org.osgi.framework.*;
-import org.osgi.service.application.ApplicationDescriptor;
-import org.osgi.service.application.ScheduledApplication;
-import org.osgi.service.event.*;
-import org.osgi.util.tracker.ServiceTracker;
-
-public class EclipseScheduledApplication implements ScheduledApplication, EventHandler {
-	private static final String FILTER_PREFIX = "(&(objectclass=" + ApplicationDescriptor.class.getName() + ")(" + ApplicationDescriptor.APPLICATION_PID + "="; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-	private static final String FILTER_POSTFIX = "))"; //$NON-NLS-1$
-
-	private boolean recurring;
-	private String topic;
-	private String eventFilter;
-	private Map args;
-	private String appPid;
-	private String id;
-	private ServiceRegistration sr;
-	private ServiceTracker appTracker;
-	private boolean removed = false;
-
-	EclipseScheduledApplication(BundleContext context, String id, String appPid, Map args, String topic, String eventFilter, boolean recurring) throws InvalidSyntaxException {
-		this.id = id;
-		this.appPid = appPid;
-		this.args = args;
-		this.topic = topic == null || topic.trim().equals("") || topic.trim().equals("*") ? null : topic; //$NON-NLS-1$ //$NON-NLS-2$
-		this.eventFilter = eventFilter;
-		this.recurring = recurring;
-		appTracker = new ServiceTracker(context, context.createFilter(FILTER_PREFIX + appPid + FILTER_POSTFIX), null);
-		Activator.openTracker(appTracker, false);
-	}
-
-	public String getScheduleId() {
-		return id;
-	}
-
-	String getAppPid() {
-		return appPid;
-	}
-
-	public synchronized String getTopic() {
-		if (removed)
-			throw new IllegalStateException(Messages.scheduled_app_removed);
-		return topic;
-	}
-
-	public synchronized String getEventFilter() {
-		if (removed)
-			throw new IllegalStateException(Messages.scheduled_app_removed);
-		return eventFilter;
-	}
-
-	public synchronized boolean isRecurring() {
-		if (removed)
-			throw new IllegalStateException(Messages.scheduled_app_removed);
-		return recurring;
-	}
-
-	public synchronized ApplicationDescriptor getApplicationDescriptor() {
-		if (removed)
-			throw new IllegalStateException(Messages.scheduled_app_removed);
-		return (ApplicationDescriptor) Activator.getService(appTracker);
-	}
-
-	public synchronized Map getArguments() {
-		if (removed)
-			throw new IllegalStateException(Messages.scheduled_app_removed);
-		return args == null ? null : new HashMap(args);
-	}
-
-	private Map getArguments(Event trigger) {
-		Map result = args == null ? new HashMap() : getArguments();
-		result.put(TRIGGERING_EVENT, new GuardedObject(trigger, new TriggerGuard(trigger.getTopic())));
-		return result;
-	}
-
-	public synchronized void remove() {
-		if (removed)
-			return;
-		removed = true;
-		AppPersistence.removeScheduledApp(this);
-		if (sr != null)
-			sr.unregister();
-		sr = null;
-		appTracker.close();
-	}
-
-	public synchronized void handleEvent(Event event) {
-		try {
-			if (removed)
-				return;
-			ApplicationDescriptor desc = getApplicationDescriptor();
-			if (desc == null)
-				// in this case the application descriptor was removed;
-				// we must return and keep the scheduled app incase the application comes back
-				return;
-			desc.launch(getArguments(event));
-		} catch (Exception e) {
-			String message = NLS.bind(Messages.scheduled_app_launch_error, sr);
-			Activator.log(new FrameworkLogEntry(Activator.PI_APP, FrameworkLogEntry.WARNING, 0, message, 0, e, null));
-			return; // return here to avoid removing non-recurring apps when an error occurs
-		}
-		if (!isRecurring())
-			remove();
-	}
-
-	synchronized void setServiceRegistration(ServiceRegistration sr) {
-		this.sr = sr;
-		if (removed) // just incase we were removed before the sr was set
-			sr.unregister();
-	}
-
-	/*
-	 * This is used to guard the event topic argument which is passed to an application
-	 * when we are launching it from a scheduling. 
-	 */
-	public class TriggerGuard implements Guard {
-		String eventTopic;
-
-		public TriggerGuard(String topic) {
-			this.eventTopic = topic;
-		}
-
-		/*
-		 * does the proper TopicPermission check for the event topic
-		 */
-		public void checkGuard(Object object) throws SecurityException {
-			SecurityManager sm = System.getSecurityManager();
-			if (sm != null)
-				sm.checkPermission(new TopicPermission(eventTopic, TopicPermission.SUBSCRIBE));
-		}
-
-	}
-}
diff --git a/bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/ErrorApplication.java b/bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/ErrorApplication.java
deleted file mode 100755
index 532531f..0000000
--- a/bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/ErrorApplication.java
+++ /dev/null
@@ -1,34 +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
- *******************************************************************************/
-
-package org.eclipse.equinox.internal.app;
-
-import org.eclipse.equinox.app.IApplication;
-import org.eclipse.equinox.app.IApplicationContext;
-
-/*
- * Special case class only used to throw exceptions when an application
- * cannot be found.
- */
-public class ErrorApplication implements IApplication {
-	static final String ERROR_EXCEPTION = "error.exception"; //$NON-NLS-1$
-
-	public Object start(IApplicationContext context) throws Exception {
-		Exception error = (Exception) context.getArguments().get(ERROR_EXCEPTION);
-		if (error != null)
-			throw error;
-		throw new IllegalStateException();
-	}
-
-	public void stop() {
-		// do nothing
-	}
-}
diff --git a/bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/Messages.java b/bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/Messages.java
deleted file mode 100755
index fc08365..0000000
--- a/bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/Messages.java
+++ /dev/null
@@ -1,53 +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.internal.app;
-
-import org.eclipse.osgi.util.NLS;
-
-public class Messages extends NLS {
-	private static final String MESSAGES_NAME = "org.eclipse.equinox.internal.app.messages"; //$NON-NLS-1$
-
-	// application
-	public static String application_invalidExtension;
-	public static String application_noIdFound;
-	public static String application_notFound;
-	public static String application_returned;
-	public static String application_errorStartDefault;
-	public static String application_error_stopping;
-
-	// product
-	public static String provider_invalid;
-	public static String provider_invalid_general;
-	public static String product_notFound;
-
-	// scheduled
-	public static String scheduled_app_removed;
-	public static String scheduled_app_launch_error;
-
-	// persistence
-	public static String persistence_error_saving;
-
-	// singletons
-	public static String singleton_running;
-	public static String apps_running;
-	public static String main_running;
-	public static String max_running;
-
-	static {
-		// load message values from bundle file
-		reloadMessages();
-	}
-
-	public static void reloadMessages() {
-		NLS.initializeMessages(MESSAGES_NAME, Messages.class);
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/Product.java b/bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/Product.java
deleted file mode 100644
index f5f74ef..0000000
--- a/bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/Product.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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.app;
-
-import java.util.HashMap;
-import org.eclipse.core.runtime.*;
-import org.osgi.framework.Bundle;
-
-public class Product implements IProduct {
-	private static final String ATTR_DESCRIPTION = "description"; //$NON-NLS-1$
-	private static final String ATTR_NAME = "name"; //$NON-NLS-1$
-	private static final String ATTR_APPLICATION = "application"; //$NON-NLS-1$
-	private static final String ATTR_VALUE = "value"; //$NON-NLS-1$
-
-	String application = null;
-	String name = null;
-	String id = null;
-	String description = null;
-	HashMap properties;
-	Bundle definingBundle = null;
-
-	public Product(String id, IConfigurationElement element) {
-		this.id = id;
-		if (element == null)
-			return;
-		application = element.getAttribute(ATTR_APPLICATION);
-		name = element.getAttribute(ATTR_NAME);
-		description = element.getAttribute(ATTR_DESCRIPTION);
-		loadProperties(element);
-	}
-
-	private void loadProperties(IConfigurationElement element) {
-		IConfigurationElement[] children = element.getChildren();
-		properties = new HashMap(children.length);
-		for (int i = 0; i < children.length; i++) {
-			IConfigurationElement child = children[i];
-			String key = child.getAttribute(ATTR_NAME);
-			String value = child.getAttribute(ATTR_VALUE);
-			if (key != null && value != null)
-				properties.put(key, value);
-		}
-		definingBundle = Activator.getBundle(element.getContributor());
-	}
-
-	public Bundle getDefiningBundle() {
-		return definingBundle;
-	}
-
-	public String getApplication() {
-		return application;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public String getDescription() {
-		return description;
-	}
-
-	public String getId() {
-		return id;
-	}
-
-	public String getProperty(String key) {
-		return (String) properties.get(key);
-	}
-}
diff --git a/bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/messages.properties b/bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/messages.properties
deleted file mode 100755
index e4dc82a..0000000
--- a/bundles/org.eclipse.equinox.app/src/org/eclipse/equinox/internal/app/messages.properties
+++ /dev/null
@@ -1,37 +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
-###############################################################################
-### Equinox AppContainer plugin messages
-
-### application
-application_invalidExtension = Invalid (empty) application extension \"{0}\".
-application_noIdFound = No application id has been found.
-application_notFound=Application \"{0}\" could not be found in the registry. The applications available are: {1}.
-application_returned=The application \"{0}\" returned with code: {1}.
-application_errorStartDefault=An error occurred while starting the application
-application_error_stopping=An error occurred while stopping the application: {0}
-
-### product
-provider_invalid_general = Errors while processing the product providers.
-provider_invalid = Problem creating the provider registered by {0}.
-product_notFound = Product {0} could not be found.
-
-### scheduled
-scheduled_app_removed=Application has been unregistered
-scheduled_app_launch_error=Failed to launch the scheduled appication: {0}
-
-### persistence
-persistence_error_saving=An error occurred while saving: {0}
-
-### singleton
-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} 
diff --git a/bundles/org.eclipse.equinox.app/src/org/osgi/service/application/ApplicationAdminPermission.java b/bundles/org.eclipse.equinox.app/src/org/osgi/service/application/ApplicationAdminPermission.java
deleted file mode 100755
index 5615148..0000000
--- a/bundles/org.eclipse.equinox.app/src/org/osgi/service/application/ApplicationAdminPermission.java
+++ /dev/null
@@ -1,407 +0,0 @@
-/*
- * $Header: /cvshome/build/org.osgi.service.application/src/org/osgi/service/application/ApplicationAdminPermission.java,v 1.34 2006/07/12 21:22:11 hargrave Exp $
- * 
- * Copyright (c) OSGi Alliance (2004, 2006). 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.application;
-
-import java.security.Permission;
-import java.util.*;
-
-import org.osgi.framework.*;
-
-/**
- * This class implements permissions for manipulating applications and
- * their instances.
- * <P>
- * ApplicationAdminPermission can be targeted to applications that matches the
- * 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>.
- */
-public class ApplicationAdminPermission extends Permission {
-	private static final long serialVersionUID = 1L;
-  
-	/**
-	 * Allows the lifecycle management of the target applications.
-	 */
-	public static final String LIFECYCLE_ACTION = "lifecycle";
-
-	/**
-	 * 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>
-	 */
-	public static final String SCHEDULE_ACTION = "schedule";
-
-	/**
-	 * Allows setting/unsetting the locking state of the target applications.
-	 */
-	public static final String LOCK_ACTION = "lock";
-
-	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>
-	 * 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
-	 * 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
-	 * possible actions.
-	 * 
-	 * @param filter
-	 *            filter to identify application. The value <code>null</code>
-	 *            is equivalent to <code>"*"</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
-	 *            not significant.
-	 * @throws InvalidSyntaxException 
-	 *            is thrown if the specified <code>filter</code> is not syntactically
-	 *            correct.
-	 * 
-	 * @exception NullPointerException
-	 *                is thrown if the actions parameter is <code>null</code>
-	 * 
-	 * @see ApplicationDescriptor
-	 * @see org.osgi.framework.AdminPermission
-	 */
-	public ApplicationAdminPermission(String filter, String actions) throws InvalidSyntaxException {
-		super(filter == null ? "*" : filter);
-		
-		if( filter == null )
-			filter = "*";
-		
-		if( actions == null )
-			throw new NullPointerException( "Action string cannot be null!" );
-		
-		this.applicationDescriptor = null;
-		this.filter = (filter == null ? "*" : filter);
-		this.actions = actions;
-
-		if( !filter.equals( "*" ) && !filter.equals( "<<SELF>>" ) )
-			FrameworkUtil.createFilter( this.filter ); // check if the filter is valid
-		init();
-	}
-	
-	/**
-	 * 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>
-	 * @throws NullPointerException if any of the arguments is null. 
-	 */
-	public ApplicationAdminPermission(ApplicationDescriptor application, String actions) {
-		super(application.getApplicationId());
-				
-		if( application == null || actions == null )
-			throw new NullPointerException( "ApplicationDescriptor and action string cannot be null!" );
-		
-		this.filter = application.getApplicationId();
-		this.applicationDescriptor = application;
-		this.actions = actions;
-		
-		init();
-	}
-	
-	/**
-	 * This method can be used in the {@link java.security.ProtectionDomain}
-	 * implementation in the <code>implies</code> method to insert the
-	 * application ID of the current application into the permission being
-	 * checked. This enables the evaluation of the 
-	 * <code>&lt;&lt;SELF&gt;&gt;</code> pseudo targets.
-	 * @param applicationId the ID of the current application.
-	 * @return the permission updated with the ID of the current application
-	 */
-	public ApplicationAdminPermission setCurrentApplicationId(String applicationId) {
-		ApplicationAdminPermission newPerm = null;
-		
-		if( this.applicationDescriptor == null ) {
-			try {
-				newPerm = new ApplicationAdminPermission( this.filter, this.actions );
-			}catch( InvalidSyntaxException e ) {
-				throw new RuntimeException( "Internal error" ); /* this can never happen */
-			}
-		}
-		else	
-		    newPerm = new ApplicationAdminPermission( this.applicationDescriptor, this.actions );
-		
-		newPerm.applicationID = applicationId;
-		
-		return newPerm;
-	}
-
-	/**
-	 * Checks if the specified <code>permission</code> 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}
-	 *      (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>&lt;&lt;SELF&gt;&gt;</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 list of permitted actions in this permission contains all actions required in the 
-	 *      <code>otherPermission</code>  
-	 * </UL> 
-	 * Otherwise the method returns false.
-	 * @param otherPermission the implied permission
-	 * @return true if this permission implies the <code>otherPermission</code>, false otherwise.
-	 */
-  public boolean implies(Permission otherPermission) {
-  	  if( otherPermission == null )
-  	  	return false;
-  	  	
-      if(!(otherPermission instanceof ApplicationAdminPermission))
-          return false;
-
-      ApplicationAdminPermission other = (ApplicationAdminPermission) otherPermission;
-
-      if( !filter.equals("*") ) {
-       	if( other.applicationDescriptor == null )
-       		return false;
-       	
-      	if( filter.equals( "<<SELF>>") ) {
-            if( other.applicationID == null )
-          		return false; /* it cannot be, this might be a bug */
-            
-      		if( !other.applicationID.equals( other.applicationDescriptor.getApplicationId() ) )
-      			return false;
-      	}
-      	else {
-      		Hashtable props = new Hashtable();
-      		props.put( "pid", other.applicationDescriptor.getApplicationId() );
-      		props.put( "signer", new SignerWrapper( other.applicationDescriptor ) );
-      		      		
-      		Filter flt = getFilter();
-      		if( flt == null )
-      			return false;
-      		
-      		if( !flt.match( props ) )
-      			return false;
-      	}
-      }
-      
-      if( !actionsVector.containsAll( other.actionsVector ) )
-      	return false;
-      
-      return true;
-  }
-
-  public boolean equals(Object with) {
-  	if( with == null || !(with instanceof ApplicationAdminPermission) )
-  		return false;
-  	
-  	ApplicationAdminPermission other = (ApplicationAdminPermission)with;  	
-  	
-  	// Compare actions:
-  	if( other.actionsVector.size() != actionsVector.size() )
-  		return false;
-  	
-  	for( int i=0; i != actionsVector.size(); i++ )
-  		if( !other.actionsVector.contains( actionsVector.get( i ) ) )
-  			return false;
-  	
-  	
-  	return equal(this.filter, other.filter ) && equal(this.applicationDescriptor, other.applicationDescriptor)
-  			&& equal(this.applicationID, other.applicationID);
-  }
-  
-  /**
-   * Compares parameters for equality. If both object are null, they are considered
-   * equal.
-   * @param a object to compare
-   * @param b other object to compare
-   * @return true if both objects are equal or both are null
-   */
-  private static boolean equal(Object a, Object b) {
-	  // This equation is true if both references are null or both point
-	  // to the same object. In both cases they are considered as equal.
-	  if( a == b ) {
-		  return true;
-	  }
-	  
-	  return a.equals(b);
-  }
-
-  public int hashCode() {
-	  int hc = 0;
-	  for( int i=0; i != actionsVector.size(); i++ )
-		  hc ^= ((String)actionsVector.get( i )).hashCode();
-	  hc ^= (null == this.filter )? 0 : this.filter.hashCode();
-	  hc ^= (null == this.applicationDescriptor) ? 0 : this.applicationDescriptor.hashCode();
-	  hc ^= (null == this.applicationID) ? 0 : this.applicationID.hashCode();
-	  return hc;
-  }
-
-  /**
-   * Returns the actions of this permission.
-   * @return the actions specified when this permission was created
-   */
-  public String getActions() {
-  	return actions;
-  }
-
-  private String applicationID;
-
-  private static final Vector ACTIONS = new Vector();
-  private              Vector actionsVector;
-  private final        String filter;
-  private final        String actions;
-  private              Filter appliedFilter = null; 
-  
-  static {
-      ACTIONS.add(LIFECYCLE_ACTION);
-      ACTIONS.add(SCHEDULE_ACTION);
-      ACTIONS.add(LOCK_ACTION);
-  }
-
-  private static Vector actionsVector(String actions) {
-      Vector v = new Vector();
-      StringTokenizer t = new StringTokenizer(actions.toUpperCase(), ",");
-      while (t.hasMoreTokens()) {
-          String action = t.nextToken().trim();
-          v.add(action.toLowerCase());
-      }
-      
-      if( v.contains( SCHEDULE_ACTION ) && !v.contains( LIFECYCLE_ACTION ) )
-    	  v.add( LIFECYCLE_ACTION );
-      
-      return v;
-  }
-  
-
-  private static class SignerWrapper extends Object {
-  	private String pattern;
-  	private ApplicationDescriptor appDesc;
-  	
-  	public SignerWrapper(String pattern) {
-  		this.pattern = pattern;    			
-  	}
-  	
-  	SignerWrapper(ApplicationDescriptor appDesc) {
-  		this.appDesc = appDesc;
-  	}
-  	
-  	public boolean equals(Object o) {
-  		if (!(o instanceof SignerWrapper))
-  			return false;
-  		SignerWrapper other = (SignerWrapper) o;
-  		ApplicationDescriptor matchAppDesc = (ApplicationDescriptor) (appDesc != null ? appDesc : other.appDesc);
-  		String matchPattern = appDesc != null ? other.pattern : pattern;
-  		return matchAppDesc.matchDNChain(matchPattern);
-  	}
-  }
-  
-  private void init() {
-		actionsVector = actionsVector( actions );
-
-		if ( actions.equals("*") )
-			actionsVector = actionsVector( LIFECYCLE_ACTION + "," + SCHEDULE_ACTION + "," + LOCK_ACTION );
-		else if (!ACTIONS.containsAll(actionsVector))
-      throw new IllegalArgumentException("Illegal action!");
-		
-		applicationID = null;
-  }
-  
-  private Filter getFilter() {
-  	String transformedFilter = filter;
-  	
-  	if (appliedFilter == null) {
-  		try {
-  			int pos = filter.indexOf("signer"); //$NON-NLS-1$
-  			if (pos != -1){ 
-  			
-  				//there may be a signer attribute 
-    			StringBuffer filterBuf = new StringBuffer(filter);
-    			int numAsteriskFound = 0; //use as offset to replace in buffer
-    			
-    			int walkbackPos; //temp pos
-
-    			//find occurences of (signer= and escape out *'s
-    			while (pos != -1) {
-
-    				//walk back and look for '(' to see if this is an attr
-    				walkbackPos = pos-1; 
-    				
-    				//consume whitespace
-    				while(walkbackPos >= 0 && Character.isWhitespace(filter.charAt(walkbackPos))) {
-    					walkbackPos--;
-    				}
-    				if (walkbackPos <0) {
-    					//filter is invalid - FilterImpl will throw error
-    					break;
-    				}
-    				
-    				//check to see if we have unescaped '('
-    				if (filter.charAt(walkbackPos) != '(' || (walkbackPos > 0 && filter.charAt(walkbackPos-1) == '\\')) {
-    					//'(' was escaped or not there
-    					pos = filter.indexOf("signer",pos+6); //$NON-NLS-1$
-    					continue;
-    				}     				
-    				pos+=6; //skip over 'signer'
-
-    				//found signer - consume whitespace before '='
-    				while (Character.isWhitespace(filter.charAt(pos))) {
-    					pos++;
-    				}
-
-    				//look for '='
-    				if (filter.charAt(pos) != '=') {
-    					//attr was signerx - keep looking
-    					pos = filter.indexOf("signer",pos); //$NON-NLS-1$
-    					continue;
-    				}
-    				pos++; //skip over '='
-    				
-    				//found signer value - escape '*'s
-    				while (!(filter.charAt(pos) == ')' && filter.charAt(pos-1) != '\\')) {
-    					if (filter.charAt(pos) == '*') {
-    						filterBuf.insert(pos+numAsteriskFound,'\\');
-    						numAsteriskFound++;
-    					}
-    					pos++;
-    				}
-
-    				//end of signer value - look for more?
-    				pos = filter.indexOf("signer",pos); //$NON-NLS-1$
-    			} //end while (pos != -1)
-    			transformedFilter = filterBuf.toString();
-  			} //end if (pos != -1)
-
-  			appliedFilter = FrameworkUtil.createFilter( transformedFilter );
-		} catch (InvalidSyntaxException e) {
-			//we will return null
-		}
-  	}     		
-  	return appliedFilter;
-  }
-}
diff --git a/bundles/org.eclipse.equinox.app/src/org/osgi/service/application/ApplicationDescriptor.java b/bundles/org.eclipse.equinox.app/src/org/osgi/service/application/ApplicationDescriptor.java
deleted file mode 100755
index 1c41ecb..0000000
--- a/bundles/org.eclipse.equinox.app/src/org/osgi/service/application/ApplicationDescriptor.java
+++ /dev/null
@@ -1,525 +0,0 @@
-/*
- * $Header: /cvshome/build/org.osgi.service.application/src/org/osgi/service/application/ApplicationDescriptor.java,v 1.61 2006/07/10 12:02:31 hargrave Exp $
- * 
- * Copyright (c) OSGi Alliance (2004, 2006). 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.application;
-
-import java.util.Iterator;
-import java.util.Map;
-import org.eclipse.equinox.internal.app.AppPersistence;
-import org.osgi.framework.Constants;
-import org.osgi.framework.InvalidSyntaxException;
-
-/**
- * An OSGi service that represents an installed application and stores
- * information about it. The application descriptor can be used for instance
- * creation.
- */
-
-public abstract class ApplicationDescriptor {
-	/*
-	 * NOTE: An implementor may also choose to replace this class in
-	 * their distribution with a class that directly interfaces with the
-	 * org.osgi.service.application implementation. This replacement class MUST NOT alter the
-	 * public/protected signature of this class.
-	 */
-
-	/**
-	 * The property key for the localized name of the application.
-	 */
-	public static final String APPLICATION_NAME = "application.name";
-
-	/**
-	 * The property key for the localized icon of the application.
-	 */
-	public static final String APPLICATION_ICON = "application.icon";
-
-	/**
-	 * The property key for the unique identifier (PID) of the application.
-	 */
-	public static final String APPLICATION_PID = Constants.SERVICE_PID;
-
-	/**
-	 * The property key for the version of the application.
-	 */
-	public static final String APPLICATION_VERSION = "application.version";
-
-	/**
-	 * The property key for the name of the application vendor.
-	 */
-	public static final String APPLICATION_VENDOR = Constants.SERVICE_VENDOR;
-
-
-	/**
-	 * The property key for the visibility property of the application.
-	 */
-	public static final String APPLICATION_VISIBLE = "application.visible";
-
-	/**
-	 * The property key for the launchable property of the application.
-	 */
-	public static final String APPLICATION_LAUNCHABLE = "application.launchable";
-
-	/**
-	 * The property key for the locked property of the application.
-	 */
-	public static final String APPLICATION_LOCKED = "application.locked";
-
-	/**
-	 * The property key for the localized description of the application.
-	 */
-	public static final String APPLICATION_DESCRIPTION = "application.description";
-
-	/**
-	 * The property key for the localized documentation of the application.
-	 */
-	public static final String APPLICATION_DOCUMENTATION = "application.documentation";
-
-	/**
-	 * The property key for the localized copyright notice of the application.
-	 */
-	public static final String APPLICATION_COPYRIGHT = "application.copyright";
-
-	/**
-	 * The property key for the localized license of the application.
-	 */
-	public static final String APPLICATION_LICENSE = "application.license";
-
-	/**
-	 * The property key for the application container of the application.
-	 */
-	public static final String APPLICATION_CONTAINER = "application.container";
-
-	/**
-	 * The property key for the location of the application.
-	 */
-	public static final String APPLICATION_LOCATION = "application.location";
-
-	
-	private final String	pid;
-
-	private boolean[]				locked = {false};
-
-	/**
-	 * Constructs the <code>ApplicationDescriptor</code>.
-	 *
-	 * @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.
-	 */
-	protected  ApplicationDescriptor(String applicationId) {
-		if(null == applicationId ) {
-			throw new NullPointerException("Application ID must not be null!");
-		}
-		
-		this.pid = applicationId;
-		locked[0] = isLocked();
-	}
-
-	/**
-	 * Returns the identifier of the represented application.
-	 * 
-	 * @return the identifier of the represented application
-	 */
-	public final String getApplicationId() {
-		return pid;
-	}
-
-	/**
-	 * This method verifies whether the specified <code>pattern</code>
-	 * matches the Distinguished Names of any of the certificate chains
-	 * used to authenticate this application.
-	 * <P>
-	 * The <code>pattern</code> 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. 
-	 * 
-	 * @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
-	 *   one of the certificate chains used to authenticate this application 
-	 * @throws NullPointerException if the specified <code>pattern</code> is null.
-     * @throws IllegalStateException if the application descriptor was
-     *   unregistered
-	 */	
-	public abstract boolean matchDNChain( String pattern );
-	
-	/**
-	 * 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.
-	 * <p>
-	 * This method will call the <code>getPropertiesSpecific</code> method
-	 * to enable the container implementation to insert application model and/or
-	 * container implementation specific properties.
-	 * <P>
-	 * The returned {@link java.util.Map} will 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 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 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.
-	 * 
-	 * @return copy of the service properties of this application descriptor service,
-	 *         according to the specified locale. If locale is null then the
-	 *         default locale's properties will be returned. (Since service
-	 *         properties are always exist it cannot return null.)
-	 * 
-	 * @throws IllegalStateException
-	 *             if the application descriptor is unregistered
-	 */
-	public final Map getProperties(String locale) {
-		Map props = getPropertiesSpecific( locale );
-		Boolean containerLocked = (Boolean) props.remove( APPLICATION_LOCKED );
-		synchronized (locked) {
-			if (containerLocked != null && containerLocked.booleanValue() != locked[0]) {
-				if (locked[0])
-					lockSpecific();
-				else
-					unlockSpecific();
-			}
-		}
-		props.put( APPLICATION_LOCKED, new Boolean( locked[0] ) );
-		return props;
-	}
-	
-	/**
-	 * Container implementations can provide application model specific
-	 * and/or container implementation specific properties via this 
-	 * 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
-	 * 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>
-	 * 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
-	 * should be returned.
-	 * 
-	 * @return the application model specific and/or container implementation
-	 * specific properties of this application descriptor.
-	 *  
-	 * @throws IllegalStateException
-	 *             if the application descriptor is unregistered
-	 */
-	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.
-	 * <p>
-	 * The following steps are made:
-	 * <UL>
-	 * <LI>Check for the appropriate permission.
-	 * <LI>Check the locking state of the application. If locked then return
-	 * null otherwise continue.
-	 * <LI>Calls the <code>launchSpecific()</code> method to create and start an application
-	 * instance.
-	 * <LI>Returns the <code>ApplicationHandle</code> 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:
-	 * <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>
-	 * </ul>
-	 * <P>
-	 * The method is synchonous, 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.
-	 * 
-	 * @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>.
-	 * 
-	 * @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>)
-	 */
-	public final ApplicationHandle launch(Map arguments)
-			throws ApplicationException {
-		SecurityManager sm = System.getSecurityManager();
-		if (sm!= null)
-			sm.checkPermission(new ApplicationAdminPermission(this, ApplicationAdminPermission.LIFECYCLE_ACTION));
-		synchronized (locked) {
-			if (locked[0])
-				throw new ApplicationException(ApplicationException.APPLICATION_LOCKED, "Application is locked, can't launch!");
-		}
-		if( !isLaunchableSpecific() )
-			throw new ApplicationException(ApplicationException.APPLICATION_NOT_LAUNCHABLE,
-					 "Cannot launch the application!");
-		checkArgs(arguments);
-		try {
-			return launchSpecific(arguments);
-		} catch(IllegalStateException ise) {
-			throw ise;
-		} catch(SecurityException se) {
-			throw se;
-		} catch( ApplicationException ae) {
-			throw ae;
-		} catch(Exception t) {
-			throw new ApplicationException(ApplicationException.APPLICATION_INTERNAL_ERROR, t);
-		}
-	}
-
-	/**
-	 * 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
-	 * successfully started or the attempt to start it failed.
-	 * <P>
-	 * This method must not return <code>null</code>. If launching the application
-	 * failed, and exception must be thrown.
-	 * 
-	 * @param arguments
-	 *            the startup parameters of the new application instance, may be
-	 *            null
-	 * 
-	 * @return the registered application model
-	 *         specific application handle for the newly created and started
-	 *         instance.
-	 * 
-	 * @throws IllegalStateException
-	 *             if the application descriptor is unregistered
-	 * @throws Exception
-	 *             if any problem occures.
-	 */
-	protected abstract ApplicationHandle launchSpecific(Map arguments)
-			throws Exception;
-	
-	/**
-	 * This method is called by launch() to verify that according to the
-	 * container, the application is launchable.
-	 * 
-	 * @return true, if the application is launchable according to the 
-	 *  container, false otherwise.
-	 *  
-	 * @throws IllegalStateException
-	 *             if the application descriptor is unregistered
-	 */
-	protected abstract boolean isLaunchableSpecific();
-
-	/**
-	 * Schedules the application at a specified event. Schedule information
-	 * should not get lost even if the framework or the device restarts so it
-	 * should be stored in a persistent storage. The method registers a
-	 * {@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.
-     * <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.
-     * 
-	 * @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
-	 * 
-	 * @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).
-     *              </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>)
-	 */
-	public final ScheduledApplication schedule(String scheduleId, Map arguments, String topic,
-			String eventFilter, boolean recurring) throws InvalidSyntaxException, 
-            ApplicationException {
-		SecurityManager sm = System.getSecurityManager();
-		if (sm != null)
-			sm.checkPermission(new ApplicationAdminPermission(this, ApplicationAdminPermission.SCHEDULE_ACTION));
-		checkArgs(arguments);
-		isLaunchableSpecific(); // checks if the ApplicationDescriptor was already unregistered
-		return AppPersistence.addScheduledApp(this, scheduleId, arguments, topic, eventFilter, recurring);
-	}
-
-	/**
-	 * Sets the lock state of the application. If an application is locked then
-	 * launching a new instance is not possible. It does not affect the already
-	 * launched instances.
-	 * 
-	 * @throws SecurityException
-	 *             if the caller doesn't have "lock" ApplicationAdminPermission
-	 *             for the application.
-	 * @throws IllegalStateException
-	 *             if the application descriptor is unregistered
-	 */
-	public final void lock() {
-		SecurityManager sm = System.getSecurityManager();
-		if (sm != null)
-			sm.checkPermission(new ApplicationAdminPermission(this, ApplicationAdminPermission.LOCK_ACTION));
-		synchronized (locked) {
-			if (locked[0])
-				return;
-			locked[0] = true;
-			lockSpecific();
-			saveLock(true);
-		}
-	}
-	
-	/**
-	 * 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.
-     * @throws IllegalStateException
-     *             if the application descriptor is unregistered
-	 */
-	protected abstract void lockSpecific();
-
-	/**
-	 * Unsets the lock state of the application.
-	 * 
-	 * @throws SecurityException
-	 *             if the caller doesn't have "lock" ApplicationAdminPermission
-	 *             for the application.
-	 * @throws IllegalStateException
-	 *             if the application descriptor is unregistered
-	 */
-	public final void unlock() {
-		SecurityManager sm = System.getSecurityManager();
-		if (sm != null)
-			sm.checkPermission(new ApplicationAdminPermission(this, ApplicationAdminPermission.LOCK_ACTION));
-		synchronized (locked) {
-			if (!locked[0])
-				return;
-			locked[0] = false;
-			unlockSpecific();
-			saveLock(false);
-		}
-	}
-	
-	/**
-	 * 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.
-
-	 * @throws IllegalStateException
-	 *             if the application descriptor is unregistered
-	 */
-	protected abstract void unlockSpecific();
-
-	private void saveLock(boolean locked) {
-		AppPersistence.saveLock(this, locked);
-	}
-
-	private boolean isLocked() {
-		return AppPersistence.isLocked(this);
-	}
-
-	private void checkArgs(Map arguments) {
-		if (arguments == null)
-			return;
-		for (Iterator keys = arguments.keySet().iterator(); keys.hasNext();) {
-			Object key = keys.next();
-			if (!(key instanceof String))
-				throw new IllegalArgumentException("Invalid key type: " + key == null ? "<null>" : key.getClass().getName());
-			if ("".equals(key)) //$NON-NLS-1$
-				throw new IllegalArgumentException("Empty string is an invalid key");
-		}
-	}
-
-
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.equinox.app/src/org/osgi/service/application/ApplicationException.java b/bundles/org.eclipse.equinox.app/src/org/osgi/service/application/ApplicationException.java
deleted file mode 100755
index c30e112..0000000
--- a/bundles/org.eclipse.equinox.app/src/org/osgi/service/application/ApplicationException.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * $Header: /cvshome/build/org.osgi.service.application/src/org/osgi/service/application/ApplicationException.java,v 1.10 2006/07/10 11:49:12 hargrave Exp $
- * 
- * Copyright (c) OSGi Alliance (2005, 2006). 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.application;
-
-/**
- * This exception is used to indicate problems related to application 
- * lifecycle management.
- * 
- * <code>ApplicationException</code> 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
- * describes the type of problem reported in this exception. The possible codes are:
- * <ul>
- * <li> {@link #APPLICATION_LOCKED} - The application couldn't be launched because it is locked.</li>
- * <li> {@link #APPLICATION_NOT_LAUNCHABLE} - The application is not in launchable state.</li>
- * <li> {@link #APPLICATION_INTERNAL_ERROR} - An exception was thrown by the application or its
- *       container during launch.</li>
- * <li> {@link #APPLICATION_SCHEDULING_FAILED} - The scheduling of an application
- *       failed.
- * </ul>
- * 
- */
-public class ApplicationException extends Exception {
-	private static final long serialVersionUID = -7173190453622508207L;
-	private final Throwable cause;
-	private final int errorCode;
-	
-	/**
-	 * The application couldn't be launched because it is locked.
-	 */
-	public static final int APPLICATION_LOCKED	= 0x01;
-	
-	/**
-	 * The application is not in launchable state, it's 
-	 * {@link ApplicationDescriptor#APPLICATION_LAUNCHABLE}
-	 * attribute is false.
-	 */
-	public static final int APPLICATION_NOT_LAUNCHABLE = 0x02;
-	
-	/**
-	 * An exception was thrown by the application or the corresponding
-	 * container during launch. The exception is available in {@link #getCause()}.
-	 */
-	public static final int APPLICATION_INTERNAL_ERROR = 0x03;
-    
-    /**
-     * The application schedule could not be created due to some internal error
-     * (for example, the schedule information couldn't be saved).
-     */
-    public static final int APPLICATION_SCHEDULING_FAILED = 0x04;
-    
-    /**
-     * The application scheduling failed because the specified identifier
-     * is already in use.
-     */
-    public static final int APPLICATION_DUPLICATE_SCHEDULE_ID = 0x05;
-
-	/**
-	 * Creates an <code>ApplicationException</code> with the specified error code.
-	 * @param errorCode The code of the error 
-	 */
-	public ApplicationException(int errorCode) {
-		this(errorCode,(Throwable) null);
-	}
-	
-	/**
-	 * Creates a <code>ApplicationException</code> that wraps another exception.
-	 * 
-	 * @param errorCode The code of the error 
-	 * @param cause The cause of this exception.
-	 */
-	public ApplicationException(int errorCode, Throwable cause) {
-		super();
-		this.cause = cause;
-		this.errorCode = errorCode;
-	}
-
-	/**
-	 * Creates an <code>ApplicationException</code> with the specified error code.
-	 * @param errorCode The code of the error 
-	 * @param message The associated message
-	 */
-	public ApplicationException(int errorCode, String message) {
-		this(errorCode, message,null);
-	}
-
-	/**
-	 * Creates a <code>ApplicationException</code> that wraps another exception.
-	 * 
-	 * @param errorCode The code of the error 
-	 * @param message The associated message.
-	 * @param cause The cause of this exception.
-	 */
-	public ApplicationException(int errorCode, String message, Throwable cause) {
-		super(message);
-		this.cause = cause;
-		this.errorCode = errorCode;
-	}
-
-	/**
-	 * Returns the cause of this exception or <code>null</code> if no cause
-	 * was specified when this exception was created.
-	 * 
-	 * @return The cause of this exception or <code>null</code> if no cause
-	 *         was specified.
-	 */
-	public Throwable getCause() {
-		return cause;
-	}
-
-	/**
-	 * Returns the error code associcated with this exception.
-	 * @return The error code of this exception.
-	 */
-	public int getErrorCode() {
-		return errorCode;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.app/src/org/osgi/service/application/ApplicationHandle.java b/bundles/org.eclipse.equinox.app/src/org/osgi/service/application/ApplicationHandle.java
deleted file mode 100755
index 110d8a7..0000000
--- a/bundles/org.eclipse.equinox.app/src/org/osgi/service/application/ApplicationHandle.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * $Header: /cvshome/build/org.osgi.service.application/src/org/osgi/service/application/ApplicationHandle.java,v 1.41 2006/07/10 12:02:31 hargrave Exp $
- * 
- * Copyright (c) OSGi Alliance (2004, 2006). 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.application;
-
-import org.osgi.framework.Constants;
-
-/**
- * ApplicationHandle is an OSGi service interface which represents an instance
- * of an application. It provides the functionality to query and manipulate the
- * lifecycle state of the represented application instance. It defines constants
- * for the lifecycle states.
- */
-public abstract class ApplicationHandle {
-	/*
-	 * NOTE: An implementor may also choose to replace this class in
-	 * their distribution with a class that directly interfaces with the
-	 * org.osgi.service.application implementation. This replacement class MUST NOT alter the
-	 * public/protected signature of this class.
-	 */
-
-	/**
-	 * The property key for the unique identifier (PID) of the application
-	 * 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";
-	
-	/**
-	 * The property key for the state of this appliction instance.
-	 */
-	public final static String APPLICATION_STATE		= "application.state";
-
-	/**
-	 * The application instance is running. This is the initial state of a newly
-	 * 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.
-   */
-	public final static String STOPPING = "STOPPING";
-
-	private final String instanceId;
-	
-	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
-	 * handle.
-	 * <p>
-	 * The instance identifier should follow the following scheme: 
-	 * &lt;<i>application descriptor PID</i>&gt;.&lt;<i>index</i>&gt;
-	 * where &lt;<i>application descriptor PID</i>&gt; is the PID of the 
-	 * corresponding <code>ApplicationDescriptor</code> and &lt;<i>index</i>&gt;
-	 * 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.
-	 * 
-	 * @param instanceId the instance identifier of the represented application
-	 * instance. It must not be null.
-	 * 
-	 * @param descriptor the <code>ApplicationDescriptor</code> 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) ) {
-			throw new NullPointerException("Parameters must not be null!");
-		}
-		
-		this.instanceId	= instanceId;
-		this.descriptor = descriptor;
-	}
-
-	/**
-	 * Retrieves the <code>ApplicationDescriptor</code> to which this 
-	 * <code>ApplicationHandle</code> belongs. 
-	 * 
-	 * @return The corresponding <code>ApplicationDescriptor</code>
-	 */
-	public final ApplicationDescriptor getApplicationDescriptor() {
-		return descriptor;
-	}
-
-	/**
-	 * Get the state of the application instance.
-	 * 
-	 * @return the state of the application.
-	 * 
-	 * @throws IllegalStateException
-	 *             if the application handle is unregistered
-	 */
-	public abstract String getState();
-
-	/**
-	 * Returns the unique identifier of this instance. This value is also
-	 * available as a service property of this application handle's service.pid.
-	 * 
-	 * @return the unique identifier of the instance
-	 */
-	public final String getInstanceId() {
-		return instanceId;
-	}
-
-	/**
-	 * The application instance's lifecycle state can be influenced by this
-	 * method. It lets the application instance perform operations to stop
-	 * the application safely, e.g. saving its state to a permanent storage.
-	 * <p>
-	 * The method must check if the lifecycle transition is valid; a STOPPING
-	 * application cannot be stopped. If it is invalid then the method must
-	 * exit. Otherwise the lifecycle state of the application instance must be
-	 * set to STOPPING. Then the destroySpecific() method must be called to
-	 * 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. 
-	 * This method should  free all the resources related to this 
-	 * <code>ApplicationHandle</code>.
-	 * <p>
-	 * When this method is completed the application instance has already made
-	 * its operations for safe stopping, the ApplicationHandle has been
-	 * unregistered and its related resources has been freed. Further calls on
-	 * this application should not be made because they may have unexpected
-	 * results.
-	 * 
-	 * @throws SecurityException
-	 *             if the caller doesn't have "lifecycle"
-	 *             <code>ApplicationAdminPermission</code> for the corresponding application.
-	 * 
-	 * @throws IllegalStateException
-	 *             if the application handle is unregistered
-	 */
-	public final void destroy() {
-		if (STOPPING.equals(getState()))
-			return;
-		SecurityManager sm = System.getSecurityManager();
-		if (sm != null)
-			sm.checkPermission(new ApplicationAdminPermission(getApplicationDescriptor(), ApplicationAdminPermission.LIFECYCLE_ACTION));
-		destroySpecific();
-	}
-
-	/**
-	 * Called by the destroy() method to perform application model specific
-	 * steps to stop and destroy an application instance safely.
-	 * 
-	 * @throws IllegalStateException
-	 *             if the application handle is unregistered
-	 */
-	protected abstract void destroySpecific();
-	
-
-}
diff --git a/bundles/org.eclipse.equinox.app/src/org/osgi/service/application/ScheduledApplication.java b/bundles/org.eclipse.equinox.app/src/org/osgi/service/application/ScheduledApplication.java
deleted file mode 100755
index 46cfe5e..0000000
--- a/bundles/org.eclipse.equinox.app/src/org/osgi/service/application/ScheduledApplication.java
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * $Header: /cvshome/build/org.osgi.service.application/src/org/osgi/service/application/ScheduledApplication.java,v 1.20 2006/07/06 14:59:29 sboshev Exp $
- * 
- * Copyright (c) OSGi Alliance (2004, 2006). 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.application;
-
-import java.util.Map;
-
-/**
- * It is allowed to schedule an application based on a specific event.
- * ScheduledApplication service keeps the schedule information. When the
- * 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
- * unique within the scope of the application being scheduled.
- * <p>
- * <code>ScheduledApplication</code> 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.
- */
-public interface ScheduledApplication {
-    
-    /**
-     * The property key for the identifier of the application being scheduled.
-     */
-    public static final String APPLICATION_PID = ApplicationDescriptor.APPLICATION_PID;
-    
-    /**
-     * The property key for the schedule identifier. The identifier is unique
-     * within the scope of the application being scheduled.
-     */
-    public static final String SCHEDULE_ID = "schedule.id";
-    
-    /**
-     * The key for the startup argument used to pass the event object that 
-     * triggered the schedule to launch the application instance.
-     * The event is passed in a {@link java.security.GuardedObject}
-     * protected by the corresponding 
-     * {@link org.osgi.service.event.TopicPermission}.
-     */
-    public static final String TRIGGERING_EVENT = "org.osgi.triggeringevent";
-    
-    /**
-     * The topic name for the virtual timer topic. Time based schedules
-     * should be created using this topic.
-     */
-    public static final String TIMER_TOPIC = "org/osgi/application/timer";
-    
-    /**
-     * The name of the <i>year</i> attribute of a virtual timer event. The value is
-     * defined by {@link java.util.Calendar#YEAR}.
-     */
-    public static final String YEAR = "year";
-    
-    /**
-     * The name of the <i>month</i> attribute of a virtual timer event. The value is
-     * defined by {@link java.util.Calendar#MONTH}.
-     */
-    public static final String MONTH = "month";
-    
-    /**
-     * The name of the <i>day of month</i> attribute of a virtual timer event. The value is
-     * defined by {@link java.util.Calendar#DAY_OF_MONTH}.
-     */
-    public static final String DAY_OF_MONTH = "day_of_month";
-    
-    /**
-     * The name of the <i>day of week</i> attribute of a virtual timer event. The value is
-     * defined by {@link java.util.Calendar#DAY_OF_WEEK}.
-     */
-    public static final String DAY_OF_WEEK = "day_of_week";
-    
-    /**
-     * The name of the <i>hour of day</i> attribute of a virtual timer event. The value is
-     * defined by {@link java.util.Calendar#HOUR_OF_DAY}.
-     */
-    public static final String HOUR_OF_DAY = "hour_of_day";
-    
-    /**
-     * The name of the <i>minute</i> attribute of a virtual timer event. The value is
-     * defined by {@link java.util.Calendar#MINUTE}.
-     */
-    public static final String MINUTE = "minute";
-    
-    
-    /**
-     * Returns the identifier of this schedule. The identifier is unique within
-     * the scope of the application that the schedule is related to. 
-     * @return the identifier of this schedule
-     * 
-     */
-    public String getScheduleId();
-
-	/**
-	 * Queries the topic of the triggering event. The topic may contain a
-	 * trailing asterisk as wildcard.
-	 * 
-	 * @return the topic of the triggering event
-	 * 
-	 * @throws IllegalStateException
-	 *             if the scheduled application service is unregistered
-	 */
-	public String getTopic();
-
-	/**
-	 * Queries the event filter for the triggering event.
-	 * 
-	 * @return the event filter for triggering event
-	 * 
-	 * @throws IllegalStateException
-	 *             if the scheduled application service is unregistered
-	 */
-	public String getEventFilter();
-
-	/**
-	 * Queries if the schedule is recurring.
-	 * 
-	 * @return true if the schedule is recurring, otherwise returns false
-	 * 
-	 * @throws IllegalStateException
-	 *             if the scheduled application service is unregistered
-	 */
-	public boolean isRecurring();
-
-	/**
-	 * Retrieves the ApplicationDescriptor which represents the application and
-	 * necessary for launching.
-	 * 
-	 * @return the application descriptor that
-	 *         represents the scheduled application
-	 * 
-	 * @throws IllegalStateException
-	 *             if the scheduled application service is unregistered
-	 */
-	public ApplicationDescriptor getApplicationDescriptor();
-
-	/**
-	 * Queries the startup arguments specified when the application was
-	 * scheduled. The method returns a copy of the arguments, it is not possible
-	 * to modify the arguments after scheduling.
-	 * 
-	 * @return the startup arguments of the scheduled application. It may be
-	 *         null if null argument was specified.
-	 * 
-	 * @throws IllegalStateException
-	 *             if the scheduled application service is unregistered
-	 */
-	public Map getArguments();
-
-	/**
-	 * Cancels this schedule of the application.
-	 * 
-	 * @throws SecurityException
-	 *             if the caller doesn't have "schedule"
-	 *             ApplicationAdminPermission for the scheduled application.
-	 * @throws IllegalStateException
-	 *             if the scheduled application service is unregistered
-	 */
-	public void remove();
-}
diff --git a/bundles/org.eclipse.equinox.common/.classpath b/bundles/org.eclipse.equinox.common/.classpath
deleted file mode 100644
index ce0c7a5..0000000
--- a/bundles/org.eclipse.equinox.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/CDC-1.0%Foundation-1.0"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/bundles/org.eclipse.equinox.common/.cvsignore b/bundles/org.eclipse.equinox.common/.cvsignore
deleted file mode 100644
index ba077a4..0000000
--- a/bundles/org.eclipse.equinox.common/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-bin
diff --git a/bundles/org.eclipse.equinox.common/.options b/bundles/org.eclipse.equinox.common/.options
deleted file mode 100644
index 0f84266..0000000
--- a/bundles/org.eclipse.equinox.common/.options
+++ /dev/null
@@ -1,4 +0,0 @@
-# Debugging options for the org.eclipse.equinox.common plugin
-
-# Turn on general debugging for the org.eclipse.equinox.common plugin.
-org.eclipse.equinox.common/debug=false
diff --git a/bundles/org.eclipse.equinox.common/.project b/bundles/org.eclipse.equinox.common/.project
deleted file mode 100644
index 2289dee..0000000
--- a/bundles/org.eclipse.equinox.common/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.equinox.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/bundles/org.eclipse.equinox.common/.settings/org.eclipse.core.resources.prefs b/bundles/org.eclipse.equinox.common/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index 16532b2..0000000
--- a/bundles/org.eclipse.equinox.common/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Tue May 25 15:00:03 EDT 2004
-encoding/<project>=ISO-8859-1
-eclipse.preferences.version=1
diff --git a/bundles/org.eclipse.equinox.common/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.equinox.common/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 9f4449f..0000000
--- a/bundles/org.eclipse.equinox.common/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,8 +0,0 @@
-#Wed Apr 26 06:03:18 EDT 2006
-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.assertIdentifier=ignore
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=ignore
-org.eclipse.jdt.core.compiler.source=1.3
diff --git a/bundles/org.eclipse.equinox.common/.settings/org.eclipse.jdt.ui.prefs b/bundles/org.eclipse.equinox.common/.settings/org.eclipse.jdt.ui.prefs
deleted file mode 100644
index f93e454..0000000
--- a/bundles/org.eclipse.equinox.common/.settings/org.eclipse.jdt.ui.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Wed Apr 19 11:19:07 CDT 2006
-eclipse.preferences.version=1
-internal.default.compliance=user
diff --git a/bundles/org.eclipse.equinox.common/META-INF/MANIFEST.MF b/bundles/org.eclipse.equinox.common/META-INF/MANIFEST.MF
deleted file mode 100644
index 86e7956..0000000
--- a/bundles/org.eclipse.equinox.common/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,24 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %pluginName
-Bundle-SymbolicName: org.eclipse.equinox.common; singleton:=true
-Bundle-Version: 3.3.0.qualifier
-Bundle-Localization: plugin
-Export-Package: org.eclipse.core.internal.runtime;x-friends:="org.eclipse.core.contenttype,org.eclipse.core.jobs,org.eclipse.equinox.preferences,org.eclipse.equinox.registry,org.eclipse.core.runtime,org.eclipse.core.runtime.compatibility"; common="split"; mandatory:="common",
- org.eclipse.core.internal.boot;x-friends:="org.eclipse.core.resources,org.eclipse.core.runtime.compatibility,org.eclipse.pde.build",
- org.eclipse.core.runtime; common="split"; mandatory:="common"
-Bundle-Vendor: %providerName
-Bundle-Activator: org.eclipse.core.internal.runtime.Activator
-Import-Package: org.eclipse.osgi.framework.log,
- 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.packageadmin,
- org.osgi.util.tracker
-Bundle-RequiredExecutionEnvironment: CDC-1.0/Foundation-1.0,
- J2SE-1.3
-Eclipse-LazyStart: true
diff --git a/bundles/org.eclipse.equinox.common/about.html b/bundles/org.eclipse.equinox.common/about.html
deleted file mode 100644
index 4602330..0000000
--- a/bundles/org.eclipse.equinox.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>June 2, 2006</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 (&quot;EPL&quot;).  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, &quot;Program&quot; 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 (&quot;Redistributor&quot;) 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>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/bundles/org.eclipse.equinox.common/build.properties b/bundles/org.eclipse.equinox.common/build.properties
deleted file mode 100644
index c1e8ad7..0000000
--- a/bundles/org.eclipse.equinox.common/build.properties
+++ /dev/null
@@ -1,17 +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
-###############################################################################
-source.. = src/
-output.. = bin/
-bin.includes = META-INF/,\
-               .,\
-               plugin.properties,\
-               about.html
-src.includes = about.html
diff --git a/bundles/org.eclipse.equinox.common/plugin.properties b/bundles/org.eclipse.equinox.common/plugin.properties
deleted file mode 100644
index 9badd2f..0000000
--- a/bundles/org.eclipse.equinox.common/plugin.properties
+++ /dev/null
@@ -1,12 +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
-###############################################################################
-pluginName = Common Eclipse Runtime
-providerName = Eclipse.org
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/boot/PlatformURLBaseConnection.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/boot/PlatformURLBaseConnection.java
deleted file mode 100644
index 2e2b2c1..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/boot/PlatformURLBaseConnection.java
+++ /dev/null
@@ -1,65 +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.core.internal.boot;
-
-import java.io.IOException;
-import java.net.URL;
-import org.eclipse.core.internal.runtime.CommonMessages;
-import org.eclipse.osgi.util.NLS;
-
-/**
- * Platform URL support
- * platform:/base/	maps to platform installation location
- */
-public class PlatformURLBaseConnection extends PlatformURLConnection {
-
-	// platform/ protocol
-	public static final String PLATFORM = "base"; //$NON-NLS-1$
-	public static final String PLATFORM_URL_STRING = PlatformURLHandler.PROTOCOL + PlatformURLHandler.PROTOCOL_SEPARATOR + "/" + PLATFORM + "/"; //$NON-NLS-1$ //$NON-NLS-2$
-
-	private static URL installURL;
-
-	/*
-	 * Constructor for the class.
-	 */
-	public PlatformURLBaseConnection(URL url) {
-		super(url);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.internal.url.PlatformURLConnection#allowCaching()
-	 */
-	protected boolean allowCaching() {
-		return true;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.internal.url.PlatformURLConnection#resolve()
-	 */
-	protected URL resolve() throws IOException {
-		String spec = url.getFile().trim();
-		if (spec.startsWith("/")) //$NON-NLS-1$
-			spec = spec.substring(1);
-		if (!spec.startsWith(PLATFORM + "/")) { //$NON-NLS-1$
-			String message = NLS.bind(CommonMessages.url_badVariant, url);
-			throw new IOException(message);
-		}
-		return spec.length() == PLATFORM.length() + 1 ? installURL : new URL(installURL, spec.substring(PLATFORM.length() + 1));
-	}
-
-	public static void startup(URL url) {
-		// register connection type for platform:/base/ handling
-		if (installURL != null)
-			return;
-		installURL = url;
-		PlatformURLHandler.register(PLATFORM, PlatformURLBaseConnection.class);
-	}
-}
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/boot/PlatformURLConnection.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/boot/PlatformURLConnection.java
deleted file mode 100644
index e4b3570..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/boot/PlatformURLConnection.java
+++ /dev/null
@@ -1,499 +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.core.internal.boot;
-
-import java.io.*;
-import java.net.URL;
-import java.net.URLConnection;
-import java.util.Enumeration;
-import java.util.Properties;
-import org.eclipse.core.internal.runtime.Activator;
-import org.eclipse.core.internal.runtime.CommonMessages;
-import org.eclipse.osgi.service.debug.DebugOptions;
-import org.eclipse.osgi.util.NLS;
-
-/**
- * Platform URL support
- */
-public abstract class PlatformURLConnection extends URLConnection {
-
-	// URL access
-	private boolean isInCache = false;
-	private boolean isJar = false;
-
-	//	protected URL url;				// declared in super (platform: URL)
-	private URL resolvedURL = null; // resolved file URL (e.g. http: URL)
-	private URL cachedURL = null; // file URL in cache (file: URL)
-
-	private URLConnection connection = null; // actual connection
-
-	// local cache
-	private static Properties cacheIndex = new Properties();
-	private static String cacheLocation;
-	private static String indexName;
-	private static String filePrefix;
-
-	// constants	
-	private static final int BUF_SIZE = 32768;
-	private static final Object NOT_FOUND = new Object(); // marker
-	private static final String CACHE_PROP = ".cache.properties"; //$NON-NLS-1$
-	private static final String CACHE_LOCATION_PROP = "location"; //$NON-NLS-1$
-	private static final String CACHE_INDEX_PROP = "index"; //$NON-NLS-1$
-	private static final String CACHE_PREFIX_PROP = "prefix"; //$NON-NLS-1$
-	private static final String CACHE_INDEX = ".index.properties"; //$NON-NLS-1$
-	private static final String CACHE_DIR = ".eclipse-" + PlatformURLHandler.PROTOCOL + File.separator; //$NON-NLS-1$
-
-	// debug tracing
-	private static final String OPTION_DEBUG = "org.eclipse.core.runtime/url/debug"; //$NON-NLS-1$;
-	private static final String OPTION_DEBUG_CONNECT = OPTION_DEBUG + "/connect"; //$NON-NLS-1$;
-	private static final String OPTION_DEBUG_CACHE_LOOKUP = OPTION_DEBUG + "/cachelookup"; //$NON-NLS-1$;
-	private static final String OPTION_DEBUG_CACHE_COPY = OPTION_DEBUG + "/cachecopy"; //$NON-NLS-1$;
-
-	public final static boolean DEBUG;
-	public final static boolean DEBUG_CONNECT;
-	public final static boolean DEBUG_CACHE_LOOKUP;
-	public final static boolean DEBUG_CACHE_COPY;
-
-	static {
-		Activator activator = Activator.getDefault();
-		if (activator == null) {
-			DEBUG = DEBUG_CONNECT = DEBUG_CACHE_LOOKUP = DEBUG_CACHE_COPY = false;
-		} else {
-			DebugOptions debugOptions = activator.getDebugOptions();
-			if (debugOptions != null) {
-				DEBUG = debugOptions.getBooleanOption(OPTION_DEBUG, false);
-				DEBUG_CONNECT = debugOptions.getBooleanOption(OPTION_DEBUG_CONNECT, true);
-				DEBUG_CACHE_LOOKUP = debugOptions.getBooleanOption(OPTION_DEBUG_CACHE_LOOKUP, true);
-				DEBUG_CACHE_COPY = debugOptions.getBooleanOption(OPTION_DEBUG_CACHE_COPY, true);
-			} else
-				DEBUG = DEBUG_CONNECT = DEBUG_CACHE_LOOKUP = DEBUG_CACHE_COPY = false;
-		}
-	}
-
-	protected PlatformURLConnection(URL url) {
-		super(url);
-	}
-
-	protected boolean allowCaching() {
-		return false;
-	}
-
-	public void connect() throws IOException {
-		connect(false);
-	}
-
-	private synchronized void connect(boolean asLocal) throws IOException {
-		if (connected)
-			return;
-
-		if (shouldCache(asLocal)) {
-			try {
-				URL inCache = getURLInCache();
-				if (inCache != null)
-					connection = inCache.openConnection();
-			} catch (IOException e) {
-				// failed to cache ... will use resolved URL instead
-			}
-		}
-
-		// use resolved URL
-		if (connection == null)
-			connection = resolvedURL.openConnection();
-		connected = true;
-		if (DEBUG && DEBUG_CONNECT)
-			debug("Connected as " + connection.getURL()); //$NON-NLS-1$
-	}
-
-	//TODO consider refactoring this method... it is too long
-	//TODO avoid cryptic identifiers such as ix, tgt, tmp, srcis, tgtos...
-	private void copyToCache() throws IOException {
-
-		if (isInCache | cachedURL == null)
-			return;
-		String tmp;
-		int ix;
-
-		// cache entry key
-		String key;
-		if (isJar) {
-			tmp = url.getFile();
-			ix = tmp.lastIndexOf(PlatformURLHandler.JAR_SEPARATOR);
-			if (ix != -1)
-				tmp = tmp.substring(0, ix);
-			key = tmp;
-		} else
-			key = url.getFile();
-
-		// source url
-		URL src;
-		if (isJar) {
-			tmp = resolvedURL.getFile();
-			ix = tmp.lastIndexOf(PlatformURLHandler.JAR_SEPARATOR);
-			if (ix != -1)
-				tmp = tmp.substring(0, ix);
-			src = new URL(tmp);
-		} else
-			src = resolvedURL;
-		InputStream srcis = null;
-
-		// cache target
-		String tgt;
-		if (isJar) {
-			tmp = cachedURL.getFile();
-			ix = tmp.indexOf(PlatformURLHandler.PROTOCOL_SEPARATOR);
-			if (ix != -1)
-				tmp = tmp.substring(ix + 1);
-			ix = tmp.lastIndexOf(PlatformURLHandler.JAR_SEPARATOR);
-			if (ix != -1)
-				tmp = tmp.substring(0, ix);
-			tgt = tmp;
-		} else
-			tgt = cachedURL.getFile();
-		File tgtFile = null;
-		FileOutputStream tgtos = null;
-
-		boolean error = false;
-		long total = 0;
-
-		try {
-			if (DEBUG && DEBUG_CACHE_COPY) {
-				if (isJar)
-					debug("Caching jar as " + tgt); //$NON-NLS-1$
-				else
-					debug("Caching as " + tgt); //$NON-NLS-1$
-			}
-
-			srcis = src.openStream();
-			byte[] buf = new byte[BUF_SIZE];
-			int count = srcis.read(buf);
-
-			tgtFile = new File(tgt);
-			tgtos = new FileOutputStream(tgtFile);
-
-			while (count != -1) {
-				total += count;
-				tgtos.write(buf, 0, count);
-				count = srcis.read(buf);
-			}
-
-			srcis.close();
-			srcis = null;
-			tgtos.flush();
-			tgtos.getFD().sync();
-			tgtos.close();
-			tgtos = null;
-
-			// add cache entry
-			cacheIndex.put(key, tgt);
-			isInCache = true;
-		} catch (IOException e) {
-			error = true;
-			cacheIndex.put(key, NOT_FOUND);
-			// mark cache entry for this execution
-			if (DEBUG && DEBUG_CACHE_COPY)
-				debug("Failed to cache due to " + e); //$NON-NLS-1$
-			throw e;
-		} finally {
-			if (!error && DEBUG && DEBUG_CACHE_COPY)
-				debug(total + " bytes copied"); //$NON-NLS-1$
-			if (srcis != null)
-				srcis.close();
-			if (tgtos != null)
-				tgtos.close();
-		}
-	}
-
-	protected void debug(String s) {
-		System.out.println("URL " + getURL().toString() + "^" + Integer.toHexString(Thread.currentThread().hashCode()) + " " + s); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-	}
-
-	private static void debugStartup(String s) {
-		System.out.println("URL " + s); //$NON-NLS-1$
-	}
-
-	public URL[] getAuxillaryURLs() throws IOException {
-		return null;
-	}
-
-	public synchronized InputStream getInputStream() throws IOException {
-		if (!connected)
-			connect();
-		return connection.getInputStream();
-	}
-
-	public URL getResolvedURL() {
-		return resolvedURL;
-	}
-
-	public URL getURLAsLocal() throws IOException {
-		connect(true); // connect and force caching if necessary
-		URL u = connection.getURL();
-		String up = u.getProtocol();
-		if (!up.equals(PlatformURLHandler.FILE) && !up.equals(PlatformURLHandler.JAR) && !up.startsWith(PlatformURLHandler.BUNDLE))
-			throw new IOException(NLS.bind(CommonMessages.url_noaccess, up));
-		return u;
-	}
-
-	//TODO consider refactoring this method... it is too long
-	private URL getURLInCache() throws IOException {
-
-		if (!allowCaching())
-			return null; // target should not be cached
-
-		if (isInCache)
-			return cachedURL;
-
-		if (cacheLocation == null | cacheIndex == null)
-			return null; // not caching
-
-		// check if we are dealing with a .jar/ .zip
-		String file = ""; //$NON-NLS-1$
-		String jarEntry = null;
-		if (isJar) {
-			file = url.getFile();
-			int ix = file.lastIndexOf(PlatformURLHandler.JAR_SEPARATOR);
-			if (ix != -1) {
-				jarEntry = file.substring(ix + PlatformURLHandler.JAR_SEPARATOR.length());
-				file = file.substring(0, ix);
-			}
-		} else {
-			file = url.getFile();
-		}
-
-		// check for cached entry
-		String tmp = (String) cacheIndex.get(file);
-
-		// check for "not found" marker
-		if (tmp != null && tmp == NOT_FOUND)
-			throw new IOException();
-
-		// validate cache entry
-		if (tmp != null && !(new File(tmp)).exists()) {
-			tmp = null;
-			cacheIndex.remove(url.getFile());
-		}
-
-		// found in cache
-		if (tmp != null) {
-			if (isJar) {
-				if (DEBUG && DEBUG_CACHE_LOOKUP)
-					debug("Jar located in cache as " + tmp); //$NON-NLS-1$
-				tmp = PlatformURLHandler.FILE + PlatformURLHandler.PROTOCOL_SEPARATOR + tmp + PlatformURLHandler.JAR_SEPARATOR + jarEntry;
-				cachedURL = new URL(PlatformURLHandler.JAR, null, -1, tmp);
-			} else {
-				if (DEBUG && DEBUG_CACHE_LOOKUP)
-					debug("Located in cache as " + tmp); //$NON-NLS-1$
-				cachedURL = new URL(PlatformURLHandler.FILE, null, -1, tmp);
-			}
-			isInCache = true;
-		} else {
-			// attempt to cache
-			int ix = file.lastIndexOf("/"); //$NON-NLS-1$
-			tmp = file.substring(ix + 1);
-			tmp = cacheLocation + filePrefix + Long.toString((new java.util.Date()).getTime()) + "_" + tmp; //$NON-NLS-1$
-			tmp = tmp.replace(File.separatorChar, '/');
-			if (isJar) {
-				tmp = PlatformURLHandler.FILE + PlatformURLHandler.PROTOCOL_SEPARATOR + tmp + PlatformURLHandler.JAR_SEPARATOR + jarEntry;
-				cachedURL = new URL(PlatformURLHandler.JAR, null, -1, tmp);
-			} else
-				cachedURL = new URL(PlatformURLHandler.FILE, null, -1, tmp);
-			copyToCache();
-		}
-
-		return cachedURL;
-	}
-
-	/*
-	 * to be implemented by subclass
-	 * @return URL resolved URL
-	 */
-	protected URL resolve() throws IOException {
-		// TODO throw UnsupportedOperationException instead - this is a bug in subclass, not an actual failure
-		throw new IOException();
-	}
-
-	protected String getId(String spec) {
-		int i = spec.lastIndexOf('_');
-		return i >= 0 ? spec.substring(0, i) : spec;
-	}
-
-	protected String getVersion(String spec) {
-		int i = spec.lastIndexOf('_');
-		return i >= 0 ? spec.substring(i + 1, spec.length()) : ""; //$NON-NLS-1$
-	}
-
-	void setResolvedURL(URL url) throws IOException {
-		if (url == null)
-			throw new IOException();
-		if (resolvedURL != null)
-			return;
-		int ix = url.getFile().lastIndexOf(PlatformURLHandler.JAR_SEPARATOR);
-		isJar = -1 != ix;
-		// Resolved URLs containing !/ separator are assumed to be jar URLs.
-		// If the resolved protocol is not jar, new jar URL is created.
-		if (isJar && !url.getProtocol().equals(PlatformURLHandler.JAR))
-			url = new URL(PlatformURLHandler.JAR, "", -1, url.toExternalForm()); //$NON-NLS-1$
-		resolvedURL = url;
-	}
-
-	private boolean shouldCache(boolean asLocal) {
-
-		// don't cache files that are known to be local
-		String rp = resolvedURL.getProtocol();
-		String rf = resolvedURL.getFile();
-		if (rp.equals(PlatformURLHandler.FILE))
-			return false;
-		if (rp.equals(PlatformURLHandler.JAR) && (rf.startsWith(PlatformURLHandler.FILE)))
-			return false;
-
-		// for other files force caching if local connection was requested
-		if (asLocal)
-			return true;
-
-		// for now cache all files
-		// XXX: add cache policy support
-		return true;
-	}
-
-	static void shutdown() {
-		if (indexName != null && cacheLocation != null) {
-			// weed out "not found" entries
-			Enumeration keys = cacheIndex.keys();
-			String key;
-			Object value;
-			while (keys.hasMoreElements()) {
-				key = (String) keys.nextElement();
-				value = cacheIndex.get(key);
-				if (value == NOT_FOUND)
-					cacheIndex.remove(key);
-			}
-			//if the cache index is empty we don't need to save it
-			if (cacheIndex.size() == 0)
-				return;
-			try {
-				// try to save cache index
-				FileOutputStream fos = null;
-				fos = new FileOutputStream(cacheLocation + indexName);
-				try {
-					cacheIndex.store(fos, null);
-					fos.flush();
-					fos.getFD().sync();
-				} finally {
-					fos.close();
-				}
-			} catch (IOException e) {
-				// failed to store cache index ... ignore
-			}
-		}
-	}
-
-	//TODO consider splitting this method into two or more steps - it is too long 
-	static void startup(String location, String os, String ws, String nl) {
-		verifyLocation(location); // check for platform location, ignore errors
-		String cacheProps = location.trim();
-		if (!cacheProps.endsWith(File.separator))
-			cacheProps += File.separator;
-		cacheProps += CACHE_PROP;
-		File cachePropFile = new File(cacheProps);
-		Properties props = null;
-		FileInputStream fis;
-
-		if (cachePropFile.exists()) {
-			// load existing properties	
-			try {
-				props = new Properties();
-				fis = new FileInputStream(cachePropFile);
-				try {
-					props.load(fis);
-				} finally {
-					fis.close();
-				}
-			} catch (IOException e) {
-				props = null;
-			}
-		}
-
-		if (props == null) {
-			// first time up, or failed to load previous settings
-			props = new Properties();
-
-			String tmp = System.getProperty("user.home"); //$NON-NLS-1$
-			if (!tmp.endsWith(File.separator))
-				tmp += File.separator;
-			tmp += CACHE_DIR;
-			props.put(CACHE_LOCATION_PROP, tmp);
-
-			tmp = Long.toString((new java.util.Date()).getTime());
-			props.put(CACHE_PREFIX_PROP, tmp);
-
-			tmp += CACHE_INDEX;
-			props.put(CACHE_INDEX_PROP, tmp);
-
-			// save for next time around
-			FileOutputStream fos = null;
-			try {
-				fos = new FileOutputStream(cachePropFile);
-				try {
-					props.store(fos, null);
-					fos.flush();
-					fos.getFD().sync();
-				} finally {
-					fos.close();
-				}
-			} catch (IOException e) {
-				// failed to store cache location metadata ... ignore
-			}
-		}
-
-		// remember settings for shutdown processing
-		filePrefix = (String) props.get(CACHE_PREFIX_PROP);
-		indexName = (String) props.get(CACHE_INDEX_PROP);
-		cacheLocation = (String) props.get(CACHE_LOCATION_PROP);
-
-		if (DEBUG) {
-			debugStartup("Cache location: " + cacheLocation); //$NON-NLS-1$
-			debugStartup("Cache index: " + indexName); //$NON-NLS-1$
-			debugStartup("Cache file prefix: " + filePrefix); //$NON-NLS-1$
-		}
-
-		// create cache directory structure if needed
-		if (!verifyLocation(cacheLocation)) {
-			indexName = null;
-			cacheLocation = null;
-			if (DEBUG)
-				debugStartup("Failed to create cache directory structure. Caching suspended"); //$NON-NLS-1$
-			return;
-		}
-
-		// attempt to initialize cache index
-		if (cacheLocation != null && indexName != null) {
-			try {
-				fis = new FileInputStream(cacheLocation + indexName);
-				try {
-					cacheIndex.load(fis);
-				} finally {
-					fis.close();
-				}
-			} catch (IOException e) {
-				if (DEBUG)
-					debugStartup("Failed to initialize cache"); //$NON-NLS-1$
-			}
-		}
-	}
-
-	private static boolean verifyLocation(String location) {
-		// verify cache directory exists. Create if needed
-		File cacheDir = new File(location);
-		if (cacheDir.exists())
-			return true;
-		return cacheDir.mkdirs();
-	}
-}
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/boot/PlatformURLHandler.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/boot/PlatformURLHandler.java
deleted file mode 100644
index 2bfa34b..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/boot/PlatformURLHandler.java
+++ /dev/null
@@ -1,83 +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.core.internal.boot;
-
-import java.io.IOException;
-import java.lang.reflect.Constructor;
-import java.net.*;
-import java.util.Hashtable;
-import org.eclipse.core.internal.runtime.CommonMessages;
-import org.eclipse.osgi.util.NLS;
-import org.osgi.service.url.AbstractURLStreamHandlerService;
-
-/**
- * URL handler for the "platform" protocol
- */
-public class PlatformURLHandler extends AbstractURLStreamHandlerService {
-
-	private static Hashtable connectionType = new Hashtable();
-
-	// URL protocol designations
-	public static final String PROTOCOL = "platform"; //$NON-NLS-1$
-	public static final String FILE = "file"; //$NON-NLS-1$
-	public static final String JAR = "jar"; //$NON-NLS-1$
-	public static final String BUNDLE = "bundle"; //$NON-NLS-1$
-	public static final String JAR_SEPARATOR = "!/"; //$NON-NLS-1$
-	public static final String PROTOCOL_SEPARATOR = ":"; //$NON-NLS-1$
-
-	/*
-	 * Constructor for the class.
-	 */
-	public PlatformURLHandler() {
-		super();
-	}
-
-	/* (non-Javadoc)
-	 * @see org.osgi.service.url.AbstractURLStreamHandlerService#openConnection(java.net.URL)
-	 */
-	public URLConnection openConnection(URL url) throws IOException {
-		// Note: openConnection() method is made public (rather than protected)
-		//       to enable request delegation from proxy handlers
-		String spec = url.getFile().trim();
-		if (spec.startsWith("/")) //$NON-NLS-1$
-			spec = spec.substring(1);
-		int ix = spec.indexOf("/"); //$NON-NLS-1$
-		if (ix == -1)
-			throw new MalformedURLException(NLS.bind(CommonMessages.url_invalidURL, url.toExternalForm()));
-
-		String type = spec.substring(0, ix);
-		Constructor construct = (Constructor) connectionType.get(type);
-		if (construct == null)
-			throw new MalformedURLException(NLS.bind(CommonMessages.url_badVariant, type));
-
-		PlatformURLConnection connection = null;
-		try {
-			connection = (PlatformURLConnection) construct.newInstance(new Object[] {url});
-		} catch (Exception e) {
-			throw new IOException(NLS.bind(CommonMessages.url_createConnection, e.getMessage()));
-		}
-		connection.setResolvedURL(connection.resolve());
-		return connection;
-	}
-
-	public static void register(String type, Class connectionClass) {
-		try {
-			Constructor c = connectionClass.getConstructor(new Class[] {URL.class});
-			connectionType.put(type, c);
-		} catch (NoSuchMethodException e) {
-			//don't register connection classes that don't conform to the spec
-		}
-	}
-	
-	public static void unregister(String type) {
-		connectionType.remove(type);
-	}
-}
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/Activator.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/Activator.java
deleted file mode 100644
index 4799012..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/Activator.java
+++ /dev/null
@@ -1,344 +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.core.internal.runtime;
-
-import java.net.URL;
-import java.util.*;
-import org.eclipse.core.internal.boot.*;
-import org.eclipse.osgi.framework.log.FrameworkLog;
-import org.eclipse.osgi.service.datalocation.Location;
-import org.eclipse.osgi.service.debug.DebugOptions;
-import org.eclipse.osgi.service.localization.BundleLocalization;
-import org.eclipse.osgi.service.urlconversion.URLConverter;
-import org.osgi.framework.*;
-import org.osgi.service.packageadmin.PackageAdmin;
-import org.osgi.service.url.URLConstants;
-import org.osgi.service.url.URLStreamHandlerService;
-import org.osgi.util.tracker.ServiceTracker;
-
-/**
- * The Common runtime plugin class.
- * 
- * This class can only be used if OSGi plugin is available.
- */
-public class Activator implements BundleActivator {
-
-	/**
-	 * Table to keep track of all the URL converter services.
-	 */
-	private static Map urlTrackers = new HashMap();
-	private static BundleContext bundleContext;
-	private static Activator singleton;
-	private ServiceRegistration platformURLConverterService = null;
-	private ServiceTracker installLocationTracker = null;
-	private ServiceTracker instanceLocationTracker = null;
-	private ServiceTracker configLocationTracker = null;
-	private ServiceTracker bundleTracker = null;
-	private ServiceTracker debugTracker = null;
-	private ServiceTracker logTracker = null;
-	private ServiceTracker localizationTracker = null;
-
-	/*
-	 * Returns the singleton for this Activator. Callers should be aware that
-	 * this will return null if the bundle is not active.
-	 */
-	public static Activator getDefault() {
-		return singleton;
-	}
-	/**
-	 * Print a debug message to the console. 
-	 * Pre-pend the message with the current date and the name of the current thread.
-	 */
-	public static void message(String message) {
-		StringBuffer buffer = new StringBuffer();
-		buffer.append(new Date(System.currentTimeMillis()));
-		buffer.append(" - ["); //$NON-NLS-1$
-		buffer.append(Thread.currentThread().getName());
-		buffer.append("] "); //$NON-NLS-1$
-		buffer.append(message);
-		System.out.println(buffer.toString());
-	}
-
-	/* (non-Javadoc)
-	 * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
-	 */
-	public void start(BundleContext context) throws Exception {
-		bundleContext = context;
-		singleton = this;
-		Dictionary urlProperties = new Hashtable();
-		urlProperties.put("protocol", "platform"); //$NON-NLS-1$ //$NON-NLS-2$
-		platformURLConverterService = context.registerService(URLConverter.class.getName(), new PlatformURLConverter(), urlProperties);
-		installPlatformURLSupport();
-	}
-
-	/*
-	 * Return the configuration location service, if available.
-	 */
-	public Location getConfigurationLocation() {
-		if (configLocationTracker == null) {
-			Filter filter = null;
-			try {
-				filter = bundleContext.createFilter(Location.CONFIGURATION_FILTER);
-			} catch (InvalidSyntaxException e) {
-				// should not happen
-			}
-			configLocationTracker = new ServiceTracker(bundleContext, filter, null);
-			configLocationTracker.open();
-		}
-		return (Location) configLocationTracker.getService();
-	}
-
-	/*
-	 * Return the debug options service, if available.
-	 */
-	public DebugOptions getDebugOptions() {
-		if (debugTracker == null) {
-			debugTracker = new ServiceTracker(bundleContext, DebugOptions.class.getName(), null);
-			debugTracker.open();
-		}
-		return (DebugOptions) debugTracker.getService();
-	}
-
-	/*
-	 * Return the framework log service, if available.
-	 */
-	public FrameworkLog getFrameworkLog() {
-		if (logTracker == null) {
-			logTracker = new ServiceTracker(bundleContext, FrameworkLog.class.getName(), null);
-			logTracker.open();
-		}
-		return (FrameworkLog) logTracker.getService();
-	}
-
-	/*
-	 * Return the instance location service, if available.
-	 */
-	public Location getInstanceLocation() {
-		if (instanceLocationTracker == null) {
-			Filter filter = null;
-			try {
-				filter = bundleContext.createFilter(Location.INSTANCE_FILTER);
-			} catch (InvalidSyntaxException e) {
-				// ignore this.  It should never happen as we have tested the above format.
-			}
-			instanceLocationTracker = new ServiceTracker(bundleContext, filter, null);
-			instanceLocationTracker.open();
-		}
-		return (Location) instanceLocationTracker.getService();
-	}
-
-	/**
-	 * Return the resolved bundle with the specified symbolic name.
-	 * 
-	 * @see PackageAdmin#getBundles(String, String)
-	 */
-	public Bundle getBundle(String symbolicName) {
-		PackageAdmin admin = getBundleAdmin();
-		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;
-	}
-
-	/*
-	 * Return the package admin service, if available.
-	 */
-	private PackageAdmin getBundleAdmin() {
-		if (bundleTracker == null) {
-			bundleTracker = new ServiceTracker(getContext(), PackageAdmin.class.getName(), null);
-			bundleTracker.open();
-		}
-		return (PackageAdmin) bundleTracker.getService();
-	}
-
-	/*
-	 * Return an array of fragments for the given bundle host.
-	 */
-	public Bundle[] getFragments(Bundle host) {
-		PackageAdmin admin = getBundleAdmin();
-		if (admin == null)
-			return new Bundle[0];
-		return admin.getFragments(host);
-	}
-
-	/*
-	 * Return the install location service if available.
-	 */
-	public Location getInstallLocation() {
-		if (installLocationTracker == null) {
-			Filter filter = null;
-			try {
-				filter = bundleContext.createFilter(Location.INSTALL_FILTER);
-			} catch (InvalidSyntaxException e) {
-				// should not happen
-			}
-			installLocationTracker = new ServiceTracker(bundleContext, filter, null);
-			installLocationTracker.open();
-		}
-		return (Location) installLocationTracker.getService();
-	}
-
-	/**
-	 * Returns the bundle id of the bundle that contains the provided object, or
-	 * <code>null</code> if the bundle could not be determined.
-	 */
-	public String getBundleId(Object object) {
-		if (object == null)
-			return null;
-		if (bundleTracker == null) {
-			message("Bundle tracker is not set"); //$NON-NLS-1$
-			return null;
-		}
-		PackageAdmin packageAdmin = (PackageAdmin) bundleTracker.getService();
-		if (packageAdmin == null)
-			return null;
-
-		Bundle source = packageAdmin.getBundle(object.getClass());
-		if (source != null && source.getSymbolicName() != null)
-			return source.getSymbolicName();
-		return null;
-	}
-
-	public ResourceBundle getLocalization(Bundle bundle, String locale) {
-		if (localizationTracker == null) {
-			BundleContext context = Activator.getContext();
-			if (context == null) {
-				message("ResourceTranslator called before plugin is started"); //$NON-NLS-1$
-				return null;
-			}
-			localizationTracker = new ServiceTracker(context, BundleLocalization.class.getName(), null);
-			localizationTracker.open();
-		}
-		BundleLocalization location = (BundleLocalization) localizationTracker.getService();
-		if (location != null)
-			return location.getLocalization(bundle, locale);
-
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
-	 */
-	public void stop(BundleContext context) throws Exception {
-		closeURLTrackerServices();
-		if (platformURLConverterService != null) {
-			platformURLConverterService.unregister();
-			platformURLConverterService = null;
-		}
-		if (installLocationTracker != null) {
-			installLocationTracker.close();
-			installLocationTracker = null;
-		}
-		if (configLocationTracker != null) {
-			configLocationTracker.close();
-			configLocationTracker = null;
-		}
-		if (bundleTracker != null) {
-			bundleTracker.close();
-			bundleTracker = null;
-		}
-		if (debugTracker != null) {
-			debugTracker.close();
-			debugTracker = null;
-		}
-		if (logTracker != null) {
-			logTracker.close();
-			logTracker = null;
-		}
-		if (instanceLocationTracker != null) {
-			instanceLocationTracker.close();
-			instanceLocationTracker = null;
-		}
-		if (localizationTracker != null) {
-			localizationTracker.close();
-			localizationTracker = null;
-		}
-		bundleContext = null;
-		singleton = null;
-	}
-
-	/*
-	 * Return this bundle's context.
-	 */
-	static BundleContext getContext() {
-		return bundleContext;
-	}
-
-	/*
-	 * Let go of all the services that we acquired and kept track of.
-	 */
-	private static void closeURLTrackerServices() {
-		synchronized (urlTrackers) {
-			if (!urlTrackers.isEmpty()) {
-				for (Iterator iter = urlTrackers.keySet().iterator(); iter.hasNext();) {
-					String key = (String) iter.next();
-					ServiceTracker tracker = (ServiceTracker) urlTrackers.get(key);
-					tracker.close();
-				}
-				urlTrackers = new HashMap();
-			}
-		}
-	}
-
-	/*
-	 * Return the URL Converter for the given URL. Return null if we can't
-	 * find one.
-	 */
-	public static URLConverter getURLConverter(URL url) {
-		String protocol = url.getProtocol();
-		synchronized (urlTrackers) {
-			ServiceTracker tracker = (ServiceTracker) urlTrackers.get(protocol);
-			if (tracker == null) {
-				// get the right service based on the protocol
-				String FILTER_PREFIX = "(&(objectClass=" + URLConverter.class.getName() + ")(protocol="; //$NON-NLS-1$ //$NON-NLS-2$
-				String FILTER_POSTFIX = "))"; //$NON-NLS-1$
-				Filter filter = null;
-				try {
-					filter = getContext().createFilter(FILTER_PREFIX + protocol + FILTER_POSTFIX);
-				} catch (InvalidSyntaxException e) {
-					return null;
-				}
-				tracker = new ServiceTracker(getContext(), filter, null);
-				tracker.open();
-				// cache it in the registry
-				urlTrackers.put(protocol, tracker);
-			}
-			return (URLConverter) tracker.getService();
-		}
-	}
-
-	/**
-	 * Register the platform URL support as a service to the URLHandler service
-	 */
-	private void installPlatformURLSupport() {
-		PlatformURLPluginConnection.startup();
-		PlatformURLFragmentConnection.startup();
-		PlatformURLMetaConnection.startup();
-		PlatformURLConfigConnection.startup();
-
-		Location service = getInstallLocation();
-		if (service != null)
-			PlatformURLBaseConnection.startup(service.getURL());
-
-		Hashtable properties = new Hashtable(1);
-		properties.put(URLConstants.URL_HANDLER_PROTOCOL, new String[] {PlatformURLHandler.PROTOCOL});
-		getContext().registerService(URLStreamHandlerService.class.getName(), new PlatformURLHandler(), properties);
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/AdapterManager.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/AdapterManager.java
deleted file mode 100644
index 2b8f8fc..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/AdapterManager.java
+++ /dev/null
@@ -1,393 +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.core.internal.runtime;
-
-import java.util.*;
-import org.eclipse.core.runtime.IAdapterFactory;
-import org.eclipse.core.runtime.IAdapterManager;
-
-/**
- * This class is the standard implementation of <code>IAdapterManager</code>. It provides
- * fast lookup of property values with the following semantics:
- * <ul>
- * <li>At most one factory will be invoked per property lookup
- * <li>If multiple installed factories provide the same adapter, only the first found in
- * the search order will be invoked.
- * <li>The search order from a class with the definition <br>
- * <code>class X extends Y implements A, B</code><br> is as follows: <il>
- * <li>the target's class: X
- * <li>X's superclasses in order to <code>Object</code>
- * <li>a breadth-first traversal of the target class's interfaces in the order returned by
- * <code>getInterfaces</code> (in the example, A and its superinterfaces then B and its
- * superinterfaces) </il>
- * </ul>
- * 
- * @see IAdapterFactory
- * @see IAdapterManager
- */
-public final class AdapterManager implements IAdapterManager {
-	/** 
-	 * Cache of adapters for a given adaptable class. Maps String  -> Map
-	 * (adaptable class name -> (adapter class name -> factory instance))
-	 */
-	protected HashMap adapterLookup;
-	/**
-	 * Cache of classes for a given type name. Avoids too many loadClass calls.
-	 * (factory -> (type name -> clazz))
-	 */
-	protected HashMap classLookup;
-	/**
-	 * Cache of class lookup order. This avoids having to compute often, and
-	 * provides clients with quick lookup for instanceOf checks based on type name.
-	 */
-	protected HashMap classSearchOrderLookup;
-	/**
-	 * Map of factories, keyed by <code>String</code>, fully qualified class name of
-	 * the adaptable class that the factory provides adapters for. Value is a <code>List</code>
-	 * of <code>IAdapterFactory</code>.
-	 */
-	protected final HashMap factories;
-
-	private ArrayList lazyFactoryProviders;
-
-	private static final AdapterManager singleton = new AdapterManager();
-
-	public static AdapterManager getDefault() {
-		return singleton;
-	}
-
-	/**
-	 * Private constructor to block instance creation.
-	 */
-	private AdapterManager() {
-		factories = new HashMap(5);
-		lazyFactoryProviders = new ArrayList(1);
-		adapterLookup = null;
-	}
-
-	/**
-	 * Given a type name, add all of the factories that respond to those types into
-	 * the given table. Each entry will be keyed by the adapter class name (supplied in
-	 * IAdapterFactory.getAdapterList).
-	 */
-	private void addFactoriesFor(String typeName, Map table) {
-		List factoryList = (List) getFactories().get(typeName);
-		if (factoryList == null)
-			return;
-		for (int i = 0, imax = factoryList.size(); i < imax; i++) {
-			IAdapterFactory factory = (IAdapterFactory) factoryList.get(i);
-			if (factory instanceof IAdapterFactoryExt) {
-				String[] adapters = ((IAdapterFactoryExt) factory).getAdapterNames();
-				for (int j = 0; j < adapters.length; j++) {
-					if (table.get(adapters[j]) == null)
-						table.put(adapters[j], factory);
-				}
-			} else {
-				Class[] adapters = factory.getAdapterList();
-				for (int j = 0; j < adapters.length; j++) {
-					String adapterName = adapters[j].getName();
-					if (table.get(adapterName) == null)
-						table.put(adapterName, factory);
-				}
-			}
-		}
-	}
-
-	private void cacheClassLookup(IAdapterFactory factory, Class clazz) {
-		//cache reference to lookup to protect against concurrent flush
-		HashMap lookup = classLookup;
-		if (lookup == null)
-			classLookup = lookup = new HashMap(4);
-		HashMap classes = (HashMap) lookup.get(factory);
-		if (classes == null) {
-			classes = new HashMap(4);
-			lookup.put(factory, classes);
-		}
-		classes.put(clazz.getName(), clazz);
-	}
-
-	private Class cachedClassForName(IAdapterFactory factory, String typeName) {
-		Class clazz = null;
-		//cache reference to lookup to protect against concurrent flush
-		HashMap lookup = classLookup;
-		if (lookup != null) {
-			HashMap classes = (HashMap) lookup.get(factory);
-			if (classes != null) {
-				clazz = (Class) classes.get(typeName);
-			}
-		}
-		return clazz;
-	}
-
-	/**
-	 * Returns the class with the given fully qualified name, or null
-	 * if that class does not exist or belongs to a plug-in that has not
-	 * yet been loaded.
-	 */
-	private Class classForName(IAdapterFactory factory, String typeName) {
-		Class clazz = cachedClassForName(factory, typeName);
-		if (clazz == null) {
-			try {
-				if (factory instanceof IAdapterFactoryExt)
-					factory = ((IAdapterFactoryExt) factory).loadFactory(false);
-				if (factory != null) {
-					clazz = factory.getClass().getClassLoader().loadClass(typeName);
-					cacheClassLookup(factory, clazz);
-				}
-			} catch (ClassNotFoundException e) {
-				// class not yet loaded
-			}
-		}
-		return clazz;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.runtime.IAdapterManager#getAdapterTypes(java.lang.Class)
-	 */
-	public String[] computeAdapterTypes(Class adaptable) {
-		Set types = getFactories(adaptable).keySet();
-		return (String[]) types.toArray(new String[types.size()]);
-	}
-
-	/**
-	 * Computes the adapters that the provided class can adapt to, along
-	 * with the factory object that can perform that transformation. Returns 
-	 * a table of adapter class name to factory object.
-	 * @param adaptable
-	 */
-	private Map getFactories(Class adaptable) {
-		//cache reference to lookup to protect against concurrent flush
-		HashMap lookup = adapterLookup;
-		if (lookup == null)
-			adapterLookup = lookup = new HashMap(30);
-		Map table = (Map) lookup.get(adaptable.getName());
-		if (table == null) {
-			// calculate adapters for the class
-			table = new HashMap(4);
-			Class[] classes = computeClassOrder(adaptable);
-			for (int i = 0; i < classes.length; i++)
-				addFactoriesFor(classes[i].getName(), table);
-			// cache the table
-			lookup.put(adaptable.getName(), table);
-		}
-		return table;
-	}
-
-	public Class[] computeClassOrder(Class adaptable) {
-		List classes = null;
-		//cache reference to lookup to protect against concurrent flush
-		HashMap lookup = classSearchOrderLookup;
-		if (lookup != null)
-			classes = (List) lookup.get(adaptable);
-		// compute class order only if it hasn't been cached before
-		if (classes == null) {
-			classes = new ArrayList();
-			computeClassOrder(adaptable, classes);
-			if (lookup == null)
-				classSearchOrderLookup = lookup = new HashMap();
-			lookup.put(adaptable, classes);
-		}
-		return (Class[]) classes.toArray(new Class[classes.size()]);
-	}
-
-	/**
-	 * Builds and returns a table of adapters for the given adaptable type.
-	 * The table is keyed by adapter class name. The
-	 * value is the <b>sole<b> factory that defines that adapter. Note that
-	 * if multiple adapters technically define the same property, only the
-	 * first found in the search order is considered.
-	 * 
-	 * Note that it is important to maintain a consistent class and interface
-	 * lookup order. See the class comment for more details.
-	 */
-	private void computeClassOrder(Class adaptable, Collection classes) {
-		Class clazz = adaptable;
-		Set seen = new HashSet(4);
-		while (clazz != null) {
-			classes.add(clazz);
-			computeInterfaceOrder(clazz.getInterfaces(), classes, seen);
-			clazz = clazz.getSuperclass();
-		}
-	}
-
-	private void computeInterfaceOrder(Class[] interfaces, Collection classes, Set seen) {
-		List newInterfaces = new ArrayList(interfaces.length);
-		for (int i = 0; i < interfaces.length; i++) {
-			Class interfac = interfaces[i];
-			if (seen.add(interfac)) {
-				//note we cannot recurse here without changing the resulting interface order
-				classes.add(interfac);
-				newInterfaces.add(interfac);
-			}
-		}
-		for (Iterator it = newInterfaces.iterator(); it.hasNext();)
-			computeInterfaceOrder(((Class) it.next()).getInterfaces(), classes, seen);
-	}
-
-	/**
-	 * Flushes the cache of adapter search paths. This is generally required whenever an
-	 * adapter is added or removed.
-	 * <p>
-	 * It is likely easier to just toss the whole cache rather than trying to be smart
-	 * and remove only those entries affected.
-	 * </p>
-	 */
-	public synchronized void flushLookup() {
-		adapterLookup = null;
-		classLookup = null;
-		classSearchOrderLookup = null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.runtime.IAdapterManager#getAdapter(java.lang.Object, java.lang.Class)
-	 */
-	public Object getAdapter(Object adaptable, Class adapterType) {
-		IAdapterFactory factory = (IAdapterFactory) getFactories(adaptable.getClass()).get(adapterType.getName());
-		Object result = null;
-		if (factory != null)
-			result = factory.getAdapter(adaptable, adapterType);
-		if (result == null && adapterType.isInstance(adaptable))
-			return adaptable;
-		return result;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.runtime.IAdapterManager#getAdapter(java.lang.Object, java.lang.Class)
-	 */
-	public Object getAdapter(Object adaptable, String adapterType) {
-		return getAdapter(adaptable, adapterType, false);
-	}
-
-	/**
-	 * Returns an adapter of the given type for the provided adapter.
-	 * @param adaptable the object to adapt
-	 * @param adapterType the type to adapt the object to
-	 * @param force <code>true</code> if the plug-in providing the
-	 * factory should be activated if necessary. <code>false</code>
-	 * if no plugin activations are desired.
-	 */
-	private Object getAdapter(Object adaptable, String adapterType, boolean force) {
-		IAdapterFactory factory = (IAdapterFactory) getFactories(adaptable.getClass()).get(adapterType);
-		if (force && factory instanceof IAdapterFactoryExt)
-			factory = ((IAdapterFactoryExt) factory).loadFactory(true);
-		Object result = null;
-		if (factory != null) {
-			Class clazz = classForName(factory, adapterType);
-			if (clazz != null)
-				result = factory.getAdapter(adaptable, clazz);
-		}
-		if (result == null && adaptable.getClass().getName().equals(adapterType))
-			return adaptable;
-		return result;
-	}
-
-	public boolean hasAdapter(Object adaptable, String adapterTypeName) {
-		return getFactories(adaptable.getClass()).get(adapterTypeName) != null;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.runtime.IAdapterManager#queryAdapter(java.lang.Object, java.lang.String)
-	 */
-	public int queryAdapter(Object adaptable, String adapterTypeName) {
-		IAdapterFactory factory = (IAdapterFactory) getFactories(adaptable.getClass()).get(adapterTypeName);
-		if (factory == null)
-			return NONE;
-		if (factory instanceof IAdapterFactoryExt) {
-			factory = ((IAdapterFactoryExt) factory).loadFactory(false); // don't force loading
-			if (factory == null)
-				return NOT_LOADED;
-		}
-		return LOADED;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.runtime.IAdapterManager#loadAdapter(java.lang.Object, java.lang.String)
-	 */
-	public Object loadAdapter(Object adaptable, String adapterTypeName) {
-		return getAdapter(adaptable, adapterTypeName, true);
-	}
-
-	/*
-	 * @see IAdapterManager#registerAdapters
-	 */
-	public synchronized void registerAdapters(IAdapterFactory factory, Class adaptable) {
-		registerFactory(factory, adaptable.getName());
-		flushLookup();
-	}
-
-	/*
-	 * @see IAdapterManager#registerAdapters
-	 */
-	public void registerFactory(IAdapterFactory factory, String adaptableType) {
-		List list = (List) factories.get(adaptableType);
-		if (list == null) {
-			list = new ArrayList(5);
-			factories.put(adaptableType, list);
-		}
-		list.add(factory);
-	}
-
-	/*
-	 * @see IAdapterManager#unregisterAdapters
-	 */
-	public synchronized void unregisterAdapters(IAdapterFactory factory) {
-		for (Iterator it = factories.values().iterator(); it.hasNext();)
-			((List) it.next()).remove(factory);
-		flushLookup();
-	}
-
-	/*
-	 * @see IAdapterManager#unregisterAdapters
-	 */
-	public synchronized void unregisterAdapters(IAdapterFactory factory, Class adaptable) {
-		List factoryList = (List) factories.get(adaptable.getName());
-		if (factoryList == null)
-			return;
-		factoryList.remove(factory);
-		flushLookup();
-	}
-
-	/*
-	 * Shuts down the adapter manager by removing all factories
-	 * and removing the registry change listener. Should only be
-	 * invoked during platform shutdown.
-	 */
-	public synchronized void unregisterAllAdapters() {
-		factories.clear();
-		flushLookup();
-	}
-
-	public void registerLazyFactoryProvider(IAdapterManagerProvider factoryProvider) {
-		synchronized (lazyFactoryProviders) {
-			lazyFactoryProviders.add(factoryProvider);
-		}
-	}
-
-	public boolean unregisterLazyFactoryProvider(IAdapterManagerProvider factoryProvider) {
-		synchronized (lazyFactoryProviders) {
-			return lazyFactoryProviders.remove(factoryProvider);
-		}
-	}
-
-	public HashMap getFactories() {
-		// avoid the synchronize if we don't have to call it
-		if (lazyFactoryProviders.size() == 0)
-			return factories;
-		synchronized (lazyFactoryProviders) {
-			while (lazyFactoryProviders.size() > 0) {
-				IAdapterManagerProvider provider = (IAdapterManagerProvider) lazyFactoryProviders.remove(0);
-				if (provider.addFactories(this))
-					flushLookup();
-			}
-		}
-		return factories;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/CommonMessages.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/CommonMessages.java
deleted file mode 100644
index bbe6952..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/CommonMessages.java
+++ /dev/null
@@ -1,62 +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 - Initial API and implementation
- **********************************************************************/
-package org.eclipse.core.internal.runtime;
-
-import org.eclipse.osgi.util.NLS;
-
-// Common runtime plugin message catalog
-public class CommonMessages extends NLS {
-	private static final String BUNDLE_NAME = "org.eclipse.core.internal.runtime.commonMessages"; //$NON-NLS-1$
-
-	public static String ok;
-
-	// metadata
-	public static String meta_couldNotCreate;
-	public static String meta_instanceDataUnspecified;
-	public static String meta_noDataModeSpecified;
-	public static String meta_notDir;
-	public static String meta_readonly;
-	public static String meta_pluginProblems;
-
-	// URL
-	public static String url_badVariant;
-	public static String url_createConnection;
-	public static String url_invalidURL;
-	public static String url_noaccess;
-	public static String url_noOutput;
-	public static String url_resolveFragment;
-	public static String url_resolvePlugin;
-
-	// parsing/resolve
-	public static String parse_doubleSeparatorVersion;
-	public static String parse_emptyPluginVersion;
-	public static String parse_fourElementPluginVersion;
-	public static String parse_numericMajorComponent;
-	public static String parse_numericMinorComponent;
-	public static String parse_numericServiceComponent;
-	public static String parse_oneElementPluginVersion;
-
-	public static String parse_postiveMajor;
-	public static String parse_postiveMinor;
-	public static String parse_postiveService;
-	public static String parse_separatorEndVersion;
-	public static String parse_separatorStartVersion;
-
-	public static String activator_not_available;
-	
-	static {
-		// load message values from bundle file
-		reloadMessages();
-	}
-
-	public static void reloadMessages() {
-		NLS.initializeMessages(BUNDLE_NAME, CommonMessages.class);
-	}
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/DataArea.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/DataArea.java
deleted file mode 100644
index 480d3ab..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/DataArea.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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.runtime;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.URL;
-import org.eclipse.core.runtime.*;
-import org.eclipse.osgi.framework.log.FrameworkLog;
-import org.eclipse.osgi.service.datalocation.Location;
-import org.eclipse.osgi.service.debug.DebugOptions;
-import org.eclipse.osgi.util.NLS;
-import org.osgi.framework.Bundle;
-
-/**
- * This class can only be used if OSGi plugin is available
- */
-public class DataArea {
-	private static final String OPTION_DEBUG = "org.eclipse.equinox.common/debug"; //$NON-NLS-1$;
-
-	/* package */static final String F_META_AREA = ".metadata"; //$NON-NLS-1$
-	/* package */static final String F_PLUGIN_DATA = ".plugins"; //$NON-NLS-1$
-	/* package */static final String F_LOG = ".log"; //$NON-NLS-1$
-	/**
-	 * Internal name of the preference storage file (value <code>"pref_store.ini"</code>) in this plug-in's (read-write) state area.
-	 */
-	/* package */static final String PREFERENCES_FILE_NAME = "pref_store.ini"; //$NON-NLS-1$
-
-	private IPath location; //The location of the instance data
-	private boolean initialized = false;
-
-	protected void assertLocationInitialized() throws IllegalStateException {
-		if (location != null && initialized)
-			return;
-		Activator activator = Activator.getDefault();
-		if (activator == null)
-			throw new IllegalStateException(CommonMessages.activator_not_available);
-		Location service = activator.getInstanceLocation();
-		if (service == null)
-			throw new IllegalStateException(CommonMessages.meta_noDataModeSpecified);
-		try {
-			URL url = service.getURL();
-			if (url == null)
-				throw new IllegalStateException(CommonMessages.meta_instanceDataUnspecified);
-			// TODO assume the URL is a file: 
-			// Use the new File technique to ensure that the resultant string is 
-			// in the right format (e.g., leading / removed from /c:/foo etc)
-			location = new Path(new File(url.getFile()).toString());
-			initializeLocation();
-		} catch (CoreException e) {
-			throw new IllegalStateException(e.getMessage());
-		}
-	}
-
-	public IPath getMetadataLocation() throws IllegalStateException {
-		assertLocationInitialized();
-		return location.append(F_META_AREA);
-	}
-
-	public IPath getInstanceDataLocation() throws IllegalStateException {
-		assertLocationInitialized();
-		return location;
-	}
-
-	public IPath getLogLocation() throws IllegalStateException {
-		FrameworkLog log = Activator.getDefault().getFrameworkLog();
-		if (log == null)
-			return null;
-		return new Path(log.getFile().getAbsolutePath());
-	}
-
-	/**
-	 * Returns the read/write location in which the given bundle can manage private state.
-	 */
-	public IPath getStateLocation(Bundle bundle) throws IllegalStateException {
-		assertLocationInitialized();
-		return getStateLocation(bundle.getSymbolicName());
-	}
-
-	public IPath getStateLocation(String bundleName) throws IllegalStateException {
-		assertLocationInitialized();
-		return getMetadataLocation().append(F_PLUGIN_DATA).append(bundleName);
-	}
-
-	public IPath getPreferenceLocation(String bundleName, boolean create) throws IllegalStateException {
-		IPath result = getStateLocation(bundleName);
-		if (create)
-			result.toFile().mkdirs();
-		return result.append(PREFERENCES_FILE_NAME);
-	}
-
-	private void initializeLocation() throws CoreException {
-		// check if the location can be created
-		if (location.toFile().exists()) {
-			if (!location.toFile().isDirectory()) {
-				String message = NLS.bind(CommonMessages.meta_notDir, location);
-				throw new CoreException(new Status(IStatus.ERROR, IRuntimeConstants.PI_RUNTIME, IRuntimeConstants.FAILED_WRITE_METADATA, message, null));
-			}
-		}
-		//try infer the device if there isn't one (windows)
-		if (location.getDevice() == null)
-			location = new Path(location.toFile().getAbsolutePath());
-		createLocation();
-		initialized = true;
-	}
-
-	private void createLocation() throws CoreException {
-		// append on the metadata location so that the whole structure is created.  
-		File file = location.append(F_META_AREA).toFile();
-		try {
-			file.mkdirs();
-		} catch (Exception e) {
-			String message = NLS.bind(CommonMessages.meta_couldNotCreate, file.getAbsolutePath());
-			throw new CoreException(new Status(IStatus.ERROR, IRuntimeConstants.PI_RUNTIME, IRuntimeConstants.FAILED_WRITE_METADATA, message, e));
-		}
-		if (!file.canWrite()) {
-			String message = NLS.bind(CommonMessages.meta_readonly, file.getAbsolutePath());
-			throw new CoreException(new Status(IStatus.ERROR, IRuntimeConstants.PI_RUNTIME, IRuntimeConstants.FAILED_WRITE_METADATA, message, null));
-		}
-		// set the log file location now that we created the data area
-		IPath path = location.append(F_META_AREA).append(F_LOG);
-		try {
-			Activator activator = Activator.getDefault();
-			if (activator != null) {
-				FrameworkLog log = activator.getFrameworkLog();
-				if (log != null)
-					log.setFile(path.toFile(), true);
-				else if (debug())
-					System.out.println("ERROR: Unable to acquire log service. Application will proceed, but logging will be disabled.");
-			}
-		} catch (IOException e) {
-			e.printStackTrace();
-		}
-	}
-
-	private boolean debug() {
-		Activator activator = Activator.getDefault();
-		if (activator == null)
-			return false;
-		DebugOptions debugOptions = activator.getDebugOptions();
-		if (debugOptions == null)
-			return false;
-		return debugOptions.getBooleanOption(OPTION_DEBUG, false);
-	}
-}
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/DevClassPathHelper.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/DevClassPathHelper.java
deleted file mode 100644
index 43955a7..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/DevClassPathHelper.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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.runtime;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.*;
-
-public class DevClassPathHelper {
-
-	// command line options
-	public static final String PROP_DEV = "osgi.dev"; //$NON-NLS-1$
-
-	static protected boolean inDevelopmentMode = false;
-	static protected String[] devDefaultClasspath;
-	static protected Properties devProperties = null;
-
-	static {
-		// Check the osgi.dev property to see if dev classpath entries have been defined.
-		String osgiDev = Activator.getContext() == null ? System.getProperty(PROP_DEV) : Activator.getContext().getProperty(PROP_DEV);
-		if (osgiDev != null) {
-			try {
-				inDevelopmentMode = true;
-				URL location = new URL(osgiDev);
-				devProperties = load(location);
-				if (devProperties != null)
-					devDefaultClasspath = getArrayFromList(devProperties.getProperty("*")); //$NON-NLS-1$
-			} catch (MalformedURLException e) {
-				devDefaultClasspath = getArrayFromList(osgiDev);
-			}
-		}
-	}
-
-	public static String[] getDevClassPath(String id) {
-		String[] result = null;
-		if (id != null && devProperties != null) {
-			String entry = devProperties.getProperty(id);
-			if (entry != null)
-				result = getArrayFromList(entry);
-		}
-		if (result == null)
-			result = devDefaultClasspath;
-		return result;
-	}
-
-	/**
-	 * Returns the result of converting a list of comma-separated tokens into an array
-	 * 
-	 * @return the array of string tokens
-	 * @param prop the initial comma-separated string
-	 */
-	public static String[] getArrayFromList(String prop) {
-		if (prop == null || prop.trim().equals("")) //$NON-NLS-1$
-			return new String[0];
-		Vector list = new Vector();
-		StringTokenizer tokens = new StringTokenizer(prop, ","); //$NON-NLS-1$
-		while (tokens.hasMoreTokens()) {
-			String token = tokens.nextToken().trim();
-			if (!token.equals("")) //$NON-NLS-1$
-				list.addElement(token);
-		}
-		return list.isEmpty() ? new String[0] : (String[]) list.toArray(new String[list.size()]);
-	}
-
-	public static boolean inDevelopmentMode() {
-		return inDevelopmentMode;
-	}
-
-	/*
-	 * Load the given properties file
-	 */
-	private static Properties load(URL url) {
-		Properties props = new Properties();
-		try {
-			InputStream is = null;
-			try {
-				is = url.openStream();
-				props.load(is);
-			} finally {
-				if (is != null)
-					is.close();
-			}
-		} catch (IOException e) {
-			// TODO consider logging here
-		}
-		return props;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/FindSupport.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/FindSupport.java
deleted file mode 100644
index 60566a9..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/FindSupport.java
+++ /dev/null
@@ -1,276 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.runtime;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Map;
-import org.eclipse.core.runtime.*;
-import org.osgi.framework.Bundle;
-
-// This class provides implements the find* methods exposed on Platform.
-// It does the lookup in bundles and fragments and does the variable replacement.
-// Can only be used if OSGi is available.
-public class FindSupport {
-	// OSGI system properties
-	public static final String PROP_NL = "osgi.nl"; //$NON-NLS-1$
-	public static final String PROP_OS = "osgi.os"; //$NON-NLS-1$
-	public static final String PROP_WS = "osgi.ws"; //$NON-NLS-1$
-	public static final String PROP_ARCH = "osgi.arch"; //$NON-NLS-1$
-
-	private static String[] NL_JAR_VARIANTS = buildNLVariants(Activator.getContext() == null ? System.getProperty(PROP_NL) : Activator.getContext().getProperty(PROP_NL));
-
-	private static String[] buildNLVariants(String nl) {
-		ArrayList result = new ArrayList();
-		IPath base = new Path("nl"); //$NON-NLS-1$
-
-		IPath path = new Path(nl.replace('_', '/'));
-		while (path.segmentCount() > 0) {
-			result.add(base.append(path).toString());
-			// for backwards compatibility only, don't replace the slashes
-			if (path.segmentCount() > 1)
-				result.add(base.append(path.toString().replace('/', '_')).toString());
-			path = path.removeLastSegments(1);
-		}
-
-		return (String[]) result.toArray(new String[result.size()]);
-	}
-
-	/**
-	 * See doc on {@link FileLocator#find(Bundle, IPath, Map)} 
-	 */
-	public static URL find(Bundle bundle, IPath path) {
-		return find(bundle, path, null);
-	}
-
-	/**
-	 * See doc on {@link FileLocator#find(Bundle, IPath, Map)} 
-	 */
-	public static URL find(Bundle b, IPath path, Map override) {
-		return find(b, path, override, null);
-	}
-
-	/**
-	 * See doc on {@link FileLocator#findEntries(Bundle, IPath)}
-	 */
-	public static URL[] findEntries(Bundle bundle, IPath path) {
-		return findEntries(bundle, path, null);
-	}
-
-	/**
-	 * See doc on {@link FileLocator#findEntries(Bundle, IPath, Map)}
-	 */
-	public static URL[] findEntries(Bundle bundle, IPath path, Map override) {
-		ArrayList results = new ArrayList(1);
-		find(bundle, path, override, results);
-		return (URL[]) results.toArray(new URL[results.size()]);
-	}
-
-	private static URL find(Bundle b, IPath path, Map override, ArrayList multiple) {
-		if (path == null)
-			return null;
-
-		URL result = null;
-
-		// Check for the empty or root case first
-		if (path.isEmpty() || path.isRoot()) {
-			// Watch for the root case.  It will produce a new
-			// URL which is only the root directory (and not the
-			// root of this plugin).	
-			result = findInPlugin(b, Path.EMPTY, multiple);
-			if (result == null || multiple != null)
-				result = findInFragments(b, Path.EMPTY, multiple);
-			return result;
-		}
-
-		// Now check for paths without variable substitution
-		String first = path.segment(0);
-		if (first.charAt(0) != '$') {
-			result = findInPlugin(b, path, multiple);
-			if (result == null || multiple != null)
-				result = findInFragments(b, path, multiple);
-			return result;
-		}
-
-		// Worry about variable substitution
-		IPath rest = path.removeFirstSegments(1);
-		if (first.equalsIgnoreCase("$nl$")) //$NON-NLS-1$
-			return findNL(b, rest, override, multiple);
-		if (first.equalsIgnoreCase("$os$")) //$NON-NLS-1$
-			return findOS(b, rest, override, multiple);
-		if (first.equalsIgnoreCase("$ws$")) //$NON-NLS-1$
-			return findWS(b, rest, override, multiple);
-		if (first.equalsIgnoreCase("$files$")) //$NON-NLS-1$
-			return null;
-
-		return null;
-	}
-
-	private static URL findOS(Bundle b, IPath path, Map override, ArrayList multiple) {
-		String os = null;
-		if (override != null)
-			try {
-				// check for override
-				os = (String) override.get("$os$"); //$NON-NLS-1$
-			} catch (ClassCastException e) {
-				// just in case
-			}
-		if (os == null)
-			// use default
-			os = Activator.getContext().getProperty(PROP_OS);
-		if (os.length() == 0)
-			return null;
-
-		// Now do the same for osarch
-		String osArch = null;
-		if (override != null)
-			try {
-				// check for override
-				osArch = (String) override.get("$arch$"); //$NON-NLS-1$
-			} catch (ClassCastException e) {
-				// just in case
-			}
-		if (osArch == null)
-			// use default
-			osArch = Activator.getContext().getProperty(PROP_ARCH);
-		if (osArch.length() == 0)
-			return null;
-
-		URL result = null;
-		IPath base = new Path("os").append(os).append(osArch); //$NON-NLS-1$
-		// Keep doing this until all you have left is "os" as a path
-		while (base.segmentCount() != 1) {
-			IPath filePath = base.append(path);
-			result = findInPlugin(b, filePath, multiple);
-			if (result != null && multiple == null)
-				return result;
-			result = findInFragments(b, filePath, multiple);
-			if (result != null && multiple == null)
-				return result;
-			base = base.removeLastSegments(1);
-		}
-		// If we get to this point, we haven't found it yet.
-		// Look in the plugin and fragment root directories
-		result = findInPlugin(b, path, multiple);
-		if (result != null && multiple == null)
-			return result;
-		return findInFragments(b, path, multiple);
-	}
-
-	private static URL findWS(Bundle b, IPath path, Map override, ArrayList multiple) {
-		String ws = null;
-		if (override != null)
-			try {
-				// check for override
-				ws = (String) override.get("$ws$"); //$NON-NLS-1$
-			} catch (ClassCastException e) {
-				// just in case
-			}
-		if (ws == null)
-			// use default
-			ws = Activator.getContext().getProperty(PROP_WS);
-		IPath filePath = new Path("ws").append(ws).append(path); //$NON-NLS-1$
-		// We know that there is only one segment to the ws path
-		// e.g. ws/win32	
-		URL result = findInPlugin(b, filePath, multiple);
-		if (result != null && multiple == null)
-			return result;
-		result = findInFragments(b, filePath, multiple);
-		if (result != null && multiple == null)
-			return result;
-		// If we get to this point, we haven't found it yet.
-		// Look in the plugin and fragment root directories
-		result = findInPlugin(b, path, multiple);
-		if (result != null && multiple == null)
-			return result;
-		return findInFragments(b, path, multiple);
-	}
-
-	private static URL findNL(Bundle b, IPath path, Map override, ArrayList multiple) {
-		String nl = null;
-		String[] nlVariants = null;
-		if (override != null)
-			try {
-				// check for override
-				nl = (String) override.get("$nl$"); //$NON-NLS-1$
-			} catch (ClassCastException e) {
-				// just in case
-			}
-		nlVariants = nl == null ? NL_JAR_VARIANTS : buildNLVariants(nl);
-		if (nl != null && nl.length() == 0)
-			return null;
-
-		URL result = null;
-		for (int i = 0; i < nlVariants.length; i++) {
-			IPath filePath = new Path(nlVariants[i]).append(path);
-			result = findInPlugin(b, filePath, multiple);
-			if (result != null && multiple == null)
-				return result;
-			result = findInFragments(b, filePath, multiple);
-			if (result != null && multiple == null)
-				return result;
-		}
-		// If we get to this point, we haven't found it yet.
-		// Look in the plugin and fragment root directories
-		result = findInPlugin(b, path, multiple);
-		if (result != null && multiple == null)
-			return result;
-		return findInFragments(b, path, multiple);
-	}
-
-	private static URL findInPlugin(Bundle b, IPath filePath, ArrayList multiple) {
-		URL result = b.getEntry(filePath.toString());
-		if (result != null && multiple != null)
-			multiple.add(result);
-		return result;
-	}
-
-	private static URL findInFragments(Bundle b, IPath filePath, ArrayList multiple) {
-		Activator activator = Activator.getDefault();
-		if (activator == null)
-			return null;
-		Bundle[] fragments = activator.getFragments(b);
-		if (fragments == null)
-			return null;
-
-		if (multiple != null)
-			multiple.ensureCapacity(fragments.length + 1);
-
-		for (int i = 0; i < fragments.length; i++) {
-			URL fileURL = fragments[i].getEntry(filePath.toString());
-			if (fileURL != null) {
-				if (multiple == null)
-					return fileURL;
-				multiple.add(fileURL);
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * See doc on {@link FileLocator#openStream(Bundle, IPath, boolean)} 
-	 */
-	public static final InputStream openStream(Bundle bundle, IPath file, boolean substituteArgs) throws IOException {
-		URL url = null;
-		if (!substituteArgs) {
-			url = findInPlugin(bundle, file, null);
-			if (url == null)
-				url = findInFragments(bundle, file, null);
-		} else {
-			url = FindSupport.find(bundle, file);
-		}
-		if (url != null)
-			return url.openStream();
-		throw new IOException("Cannot find " + file.toString()); //$NON-NLS-1$
-	}
-}
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/IAdapterFactoryExt.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/IAdapterFactoryExt.java
deleted file mode 100644
index c473980..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/IAdapterFactoryExt.java
+++ /dev/null
@@ -1,31 +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
- *******************************************************************************/
-package org.eclipse.core.internal.runtime;
-
-import org.eclipse.core.runtime.IAdapterFactory;
-
-/**
- * An internal interface that exposes portion of AdapterFactoryProxy functionality
- * without the need to import the class itself.
- */
-public interface IAdapterFactoryExt {
-
-	/**
-	 * Loads the real adapter factory, but only if its associated plug-in is
-	 * already loaded. Returns the real factory if it was successfully loaded.
-	 * @param force if <code>true</code> the plugin providing the 
-	 * factory will be loaded if necessary, otherwise no plugin activations
-	 * will occur.
-	 */
-	public IAdapterFactory loadFactory(boolean force);
-
-	public String[] getAdapterNames();
-}
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/IAdapterManagerProvider.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/IAdapterManagerProvider.java
deleted file mode 100644
index d7077a2..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/IAdapterManagerProvider.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.core.internal.runtime;
-
-/**
- * The callback interface for the elements desiring to lazily supply
- * information to the adapter manager.
- * 
- * @since org.eclipse.core.runtime 3.2
- */
-public interface IAdapterManagerProvider {
-
-	/**
-	 * Add factories. The method called before the AdapterManager starts
-	 * using factories.
-	 *  
-	 * @param adapterManager the adapter manager that is about to be used
-	 * @return <code>true</code> if factories were added; <code>false</code> 
-	 * if no factories were added in this method call.
-	 */
-	public boolean addFactories(AdapterManager adapterManager);
-}
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/IRuntimeConstants.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/IRuntimeConstants.java
deleted file mode 100644
index a9d74d1..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/IRuntimeConstants.java
+++ /dev/null
@@ -1,37 +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.core.internal.runtime;
-
-public interface IRuntimeConstants {
-
-	/**
-	 * The unique identifier constant (value "<code>org.eclipse.core.runtime</code>")
-	 * of the Core Runtime (pseudo-) plug-in.
-	 */
-	public static final String PI_RUNTIME = "org.eclipse.core.runtime"; //$NON-NLS-1$
-
-	/**
-	 * Name of this bundle.
-	 */
-	public static final String PI_COMMON = "org.eclipse.equinox.common"; //$NON-NLS-1$
-
-	/**
-	 * Status code constant (value 2) indicating an error occurred while running a plug-in.
-	 */
-	public static final int PLUGIN_ERROR = 2;
-
-	/**
-	 * Status code constant (value 5) indicating the platform could not write
-	 * some of its metadata.
-	 */
-	public static final int FAILED_WRITE_METADATA = 5;
-
-}
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/LocalizationUtils.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/LocalizationUtils.java
deleted file mode 100644
index ba6c64e..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/LocalizationUtils.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.core.internal.runtime;
-
-import java.lang.reflect.Field;
-
-/**
- * Helper methods related to string localization.
- * 
- * @since org.eclipse.equinox.common 3.3
- */
-public class LocalizationUtils {
-	/**
-	 * This method can be used in the absence of NLS class. The method tries to 
-	 * use the NLS-based translation routine. If it falls, the method returns the original
-	 * non-translated key.
-	 * 
-	 * @param key case-sensetive name of the filed in the translation file representing 
-	 * the string to be translated
-	 * @return
-	 */
-	static public String safeLocalize(String key) {
-		try {
-			Class messageClass = Class.forName("org.eclipse.core.internal.runtime.CommonMessages"); //$NON-NLS-1$
-			if (messageClass == null)
-				return key;
-			Field field = messageClass.getDeclaredField(key);
-			if (field == null)
-				return key;
-			Object value = field.get(null);
-			if (value instanceof String)
-				return (String) value;
-		} catch (ClassNotFoundException e) {
-			// eat exception and fall through
-		} catch (NoClassDefFoundError e) {
-			// eat exception and fall through
-		} catch (SecurityException e) {
-			// eat exception and fall through
-		} catch (NoSuchFieldException e) {
-			// eat exception and fall through
-		} catch (IllegalArgumentException e) {
-			// eat exception and fall through
-		} catch (IllegalAccessException e) {
-			// eat exception and fall through
-		}
-		return key;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/MetaDataKeeper.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/MetaDataKeeper.java
deleted file mode 100644
index dac414a..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/MetaDataKeeper.java
+++ /dev/null
@@ -1,37 +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.core.internal.runtime;
-
-import org.eclipse.core.internal.runtime.DataArea;
-
-/**
- * The class contains a set of utilities working platform metadata area.
- * This class can only be used if OSGi plugin is available.
- * 
- * Copied from InternalPlatform as of August 30, 2005.
- * @since org.eclipse.equinox.common 3.2
- */
-public class MetaDataKeeper {
-
-	private static DataArea metaArea = null;
-
-	/**
-	 * Returns the object which defines the location and organization
-	 * of the platform's meta area.
-	 */
-	public static DataArea getMetaArea() {
-		if (metaArea != null)
-			return metaArea;
-
-		metaArea = new DataArea();
-		return metaArea;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/PlatformURLConfigConnection.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/PlatformURLConfigConnection.java
deleted file mode 100644
index a42711c..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/PlatformURLConfigConnection.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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.runtime;
-
-import java.io.*;
-import java.net.URL;
-import java.net.UnknownServiceException;
-import org.eclipse.core.internal.boot.PlatformURLConnection;
-import org.eclipse.core.internal.boot.PlatformURLHandler;
-import org.eclipse.osgi.service.datalocation.Location;
-import org.eclipse.osgi.util.NLS;
-
-public class PlatformURLConfigConnection extends PlatformURLConnection {
-	private static final String FILE_PROTOCOL = "file"; //$NON-NLS-1$
-	private static boolean isRegistered = false;
-	public static final String CONFIG = "config"; //$NON-NLS-1$
-
-	private boolean parentConfiguration = false;
-
-	/*
-	 * Constructor for the class.
-	 */
-	public PlatformURLConfigConnection(URL url) {
-		super(url);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.internal.url.PlatformURLConnection#resolve()
-	 */
-	protected URL resolve() throws IOException {
-		String spec = url.getFile().trim();
-		if (spec.startsWith("/")) //$NON-NLS-1$
-			spec = spec.substring(1);
-		if (!spec.startsWith(CONFIG))
-			throw new IOException(NLS.bind(CommonMessages.url_badVariant, url.toString()));
-		String path = spec.substring(CONFIG.length() + 1);
-		// resolution takes parent configuration into account (if it exists)
-		Activator activator = Activator.getDefault();
-		if (activator == null)
-			throw new IOException(CommonMessages.activator_not_available);
-		Location localConfig = activator.getConfigurationLocation();
-		Location parentConfig = localConfig.getParentLocation();
-		// assume we will find the file locally
-		URL localURL = new URL(localConfig.getURL(), path);
-		if (!FILE_PROTOCOL.equals(localURL.getProtocol()) || parentConfig == null)
-			// we only support cascaded file: URLs
-			return localURL;
-		File localFile = new File(localURL.getPath());
-		if (localFile.exists())
-			// file exists in local configuration
-			return localURL;
-		// try to find in the parent configuration
-		URL parentURL = new URL(parentConfig.getURL(), path);
-		if (FILE_PROTOCOL.equals(parentURL.getProtocol())) {
-			// we only support cascaded file: URLs			
-			File parentFile = new File(parentURL.getPath());
-			if (parentFile.exists()) {
-				// parent has the location
-				parentConfiguration = true;
-				return parentURL;
-			}
-		}
-		return localURL;
-	}
-
-	public static void startup() {
-		// register connection type for platform:/config handling
-		if (isRegistered)
-			return;
-		PlatformURLHandler.register(CONFIG, PlatformURLConfigConnection.class);
-		isRegistered = true;
-	}
-
-	/* (non-Javadoc)
-	 * @see java.net.URLConnection#getOutputStream()
-	 */
-	public OutputStream getOutputStream() throws IOException {
-		if (parentConfiguration || Activator.getDefault() == null || Activator.getDefault().getConfigurationLocation().isReadOnly())
-			throw new UnknownServiceException(NLS.bind(CommonMessages.url_noOutput, url));
-		//This is not optimal but connection is a private instance variable in the super-class.
-		URL resolved = getResolvedURL();
-		if (resolved != null) {
-			String fileString = resolved.getFile();
-			if (fileString != null) {
-				File file = new File(fileString);
-				String parent = file.getParent();
-				if (parent != null)
-					new File(parent).mkdirs();
-				return new FileOutputStream(file);
-			}
-		}
-		return null;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/PlatformURLConverter.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/PlatformURLConverter.java
deleted file mode 100644
index e486568..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/PlatformURLConverter.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.core.internal.runtime;
-
-import java.io.IOException;
-import java.net.URL;
-import java.net.URLConnection;
-import org.eclipse.core.internal.boot.PlatformURLConnection;
-import org.eclipse.core.internal.boot.PlatformURLHandler;
-import org.eclipse.core.runtime.FileLocator;
-import org.eclipse.osgi.service.urlconversion.URLConverter;
-
-/**
- * Class which implements the URLConverter service. Manages conversion of a 
- * platform: URL to one with a more well known protocol.
- * 
- * @since 3.2
- */
-public class PlatformURLConverter implements URLConverter {
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.osgi.service.urlconversion.URLConverter#toFileURL(java.net.URL)
-	 */
-	public URL toFileURL(URL url) throws IOException {
-		URLConnection connection = url.openConnection();
-		if (!(connection instanceof PlatformURLConnection))
-			return url;
-		URL result = ((PlatformURLConnection) connection).getURLAsLocal();
-		// if we have a bundle*: URL we should try to convert it
-		if (!result.getProtocol().startsWith(PlatformURLHandler.BUNDLE))
-			return result;
-		return FileLocator.toFileURL(result);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.osgi.service.urlconversion.URLConverter#resolve(java.net.URL)
-	 */
-	public URL resolve(URL url) throws IOException {
-		URLConnection connection = url.openConnection();
-		if (!(connection instanceof PlatformURLConnection))
-			return url;
-		URL result = ((PlatformURLConnection) connection).getResolvedURL();
-		// if we have a bundle*: URL we should try to convert it
-		if (!result.getProtocol().startsWith(PlatformURLHandler.BUNDLE))
-			return result;
-		return FileLocator.resolve(result);
-	}
-}
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/PlatformURLFragmentConnection.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/PlatformURLFragmentConnection.java
deleted file mode 100644
index de3053c..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/PlatformURLFragmentConnection.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.core.internal.runtime;
-
-import java.io.IOException;
-import java.net.URL;
-import org.eclipse.core.internal.boot.PlatformURLConnection;
-import org.eclipse.core.internal.boot.PlatformURLHandler;
-import org.eclipse.osgi.util.NLS;
-import org.osgi.framework.Bundle;
-
-/**
- * Platform URL support
- * platform:/fragment/fragmentId/		maps to fragmentDescriptor.getInstallURLInternal()
- */
-public class PlatformURLFragmentConnection extends PlatformURLConnection {
-
-	private Bundle target = null;
-	private static boolean isRegistered = false;
-	public static final String FRAGMENT = "fragment"; //$NON-NLS-1$
-
-	/*
-	 * Constructor for the class.
-	 */
-	public PlatformURLFragmentConnection(URL url) {
-		super(url);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.internal.url.PlatformURLConnection#allowCaching()
-	 */
-	protected boolean allowCaching() {
-		return true;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.internal.url.PlatformURLConnection#resolve()
-	 */
-	protected URL resolve() throws IOException {
-		String spec = url.getFile().trim();
-		if (spec.startsWith("/")) //$NON-NLS-1$
-			spec = spec.substring(1);
-		if (!spec.startsWith(FRAGMENT))
-			throw new IOException(NLS.bind(CommonMessages.url_badVariant, url));
-		int ix = spec.indexOf("/", FRAGMENT.length() + 1); //$NON-NLS-1$
-		String ref = ix == -1 ? spec.substring(FRAGMENT.length() + 1) : spec.substring(FRAGMENT.length() + 1, ix);
-		String id = getId(ref);
-		Activator activator = Activator.getDefault();
-		if (activator == null)
-			throw new IOException(CommonMessages.activator_not_available);
-		target = activator.getBundle(id);
-		if (target == null)
-			throw new IOException(NLS.bind(CommonMessages.url_resolveFragment, url));
-		URL result = target.getEntry("/"); //$NON-NLS-1$
-		if (ix == -1 || (ix + 1) >= spec.length())
-			return result;
-		return new URL(result, spec.substring(ix + 1));
-	}
-
-	public static void startup() {
-		// register connection type for platform:/fragment handling
-		if (isRegistered)
-			return;
-		PlatformURLHandler.register(FRAGMENT, PlatformURLFragmentConnection.class);
-		isRegistered = true;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/PlatformURLMetaConnection.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/PlatformURLMetaConnection.java
deleted file mode 100644
index 7ebad21..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/PlatformURLMetaConnection.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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.runtime;
-
-import java.io.*;
-import java.net.URL;
-import org.eclipse.core.internal.boot.PlatformURLConnection;
-import org.eclipse.core.internal.boot.PlatformURLHandler;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.osgi.util.NLS;
-import org.osgi.framework.Bundle;
-
-public class PlatformURLMetaConnection extends PlatformURLConnection {
-	private Bundle target = null;
-	private static boolean isRegistered = false;
-	public static final String META = "meta"; //$NON-NLS-1$
-
-	/*
-	 * Constructor for the class.
-	 */
-	public PlatformURLMetaConnection(URL url) {
-		super(url);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.internal.url.PlatformURLConnection#resolve()
-	 */
-	protected URL resolve() throws IOException {
-		String spec = url.getFile().trim();
-		if (spec.startsWith("/")) //$NON-NLS-1$
-			spec = spec.substring(1);
-		if (!spec.startsWith(META))
-			throw new IOException(NLS.bind(CommonMessages.url_badVariant, url.toString()));
-		int ix = spec.indexOf("/", META.length() + 1); //$NON-NLS-1$
-		String ref = ix == -1 ? spec.substring(META.length() + 1) : spec.substring(META.length() + 1, ix);
-		String id = getId(ref);
-		Activator activator = Activator.getDefault();
-		if (activator == null)
-			throw new IOException(CommonMessages.activator_not_available);
-		target = activator.getBundle(id);
-		if (target == null)
-			throw new IOException(NLS.bind(CommonMessages.url_resolvePlugin, url.toString()));
-		IPath path = MetaDataKeeper.getMetaArea().getStateLocation(target);
-		if (ix != -1 || (ix + 1) <= spec.length())
-			path = path.append(spec.substring(ix + 1));
-		return path.toFile().toURL();
-	}
-
-	public static void startup() {
-		// register connection type for platform:/meta handling
-		if (isRegistered)
-			return;
-		PlatformURLHandler.register(META, PlatformURLMetaConnection.class);
-		isRegistered = true;
-	}
-
-	/* (non-Javadoc)
-	 * @see java.net.URLConnection#getOutputStream()
-	 */
-	public OutputStream getOutputStream() throws IOException {
-		//This is not optimal but connection is a private instance variable in super.
-		URL resolved = getResolvedURL();
-		if (resolved != null) {
-			String fileString = resolved.getFile();
-			if (fileString != null) {
-				File file = new File(fileString);
-				String parent = file.getParent();
-				if (parent != null)
-					new File(parent).mkdirs();
-				return new FileOutputStream(file);
-			}
-		}
-		return null;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/PlatformURLPluginConnection.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/PlatformURLPluginConnection.java
deleted file mode 100644
index ccb5686..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/PlatformURLPluginConnection.java
+++ /dev/null
@@ -1,109 +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.core.internal.runtime;
-
-import java.io.IOException;
-import java.net.URL;
-import org.eclipse.core.internal.boot.PlatformURLConnection;
-import org.eclipse.core.internal.boot.PlatformURLHandler;
-import org.eclipse.osgi.util.NLS;
-import org.osgi.framework.Bundle;
-
-/**
- * Platform URL support
- * platform:/plugin/pluginId/		maps to pluginDescriptor.getInstallURLInternal()
- */
-public class PlatformURLPluginConnection extends PlatformURLConnection {
-
-	private Bundle target = null;
-	private static boolean isRegistered = false;
-	public static final String PLUGIN = "plugin"; //$NON-NLS-1$
-
-	/*
-	 * Constructor for the class.
-	 */
-	public PlatformURLPluginConnection(URL url) {
-		super(url);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.internal.url.PlatformURLConnection#allowCaching()
-	 */
-	protected boolean allowCaching() {
-		return true;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.internal.url.PlatformURLConnection#resolve()
-	 */
-	protected URL resolve() throws IOException {
-		String spec = url.getFile().trim();
-		if (spec.startsWith("/")) //$NON-NLS-1$
-			spec = spec.substring(1);
-		if (!spec.startsWith(PLUGIN))
-			throw new IOException(NLS.bind(CommonMessages.url_badVariant, url));
-		int ix = spec.indexOf("/", PLUGIN.length() + 1); //$NON-NLS-1$
-		String ref = ix == -1 ? spec.substring(PLUGIN.length() + 1) : spec.substring(PLUGIN.length() + 1, ix);
-		String id = getId(ref);
-		Activator activator = Activator.getDefault();
-		if (activator == null)
-			throw new IOException(CommonMessages.activator_not_available);
-		target = activator.getBundle(id);
-		if (target == null)
-			throw new IOException(NLS.bind(CommonMessages.url_resolvePlugin, url));
-		if (ix == -1 || (ix + 1) >= spec.length())
-			return target.getEntry("/"); //$NON-NLS-1$
-		URL result = target.getEntry(spec.substring(ix + 1));
-		if (result != null)
-			return result;
-		// if the result is null then force the creation of a URL that will throw FileNotFoundExceptions
-		return new URL(target.getEntry("/"), spec.substring(ix + 1)); //$NON-NLS-1$
-
-	}
-
-	public static void startup() {
-		// register connection type for platform:/plugin handling
-		if (isRegistered)
-			return;
-		PlatformURLHandler.register(PLUGIN, PlatformURLPluginConnection.class);
-		isRegistered = true;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.internal.url.PlatformURLConnection#getAuxillaryURLs()
-	 */
-	public URL[] getAuxillaryURLs() throws IOException {
-		if (target == null) {
-			String spec = url.getFile().trim();
-			if (spec.startsWith("/")) //$NON-NLS-1$
-				spec = spec.substring(1);
-			if (!spec.startsWith(PLUGIN))
-				throw new IOException(NLS.bind(CommonMessages.url_badVariant, url));
-			int ix = spec.indexOf("/", PLUGIN.length() + 1); //$NON-NLS-1$
-			String ref = ix == -1 ? spec.substring(PLUGIN.length() + 1) : spec.substring(PLUGIN.length() + 1, ix);
-			String id = getId(ref);
-			Activator activator = Activator.getDefault();
-			if (activator == null)
-				throw new IOException(CommonMessages.activator_not_available);
-			target = activator.getBundle(id);
-			if (target == null)
-				throw new IOException(NLS.bind(CommonMessages.url_resolvePlugin, url));
-		}
-		Bundle[] fragments = Activator.getDefault().getFragments(target);
-		int fragmentLength = (fragments == null) ? 0 : fragments.length;
-		if (fragmentLength == 0)
-			return null;
-		URL[] result = new URL[fragmentLength];
-		for (int i = 0; i < fragmentLength; i++)
-			result[i] = fragments[i].getEntry("/"); //$NON-NLS-1$
-		return result;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/ReferenceHashSet.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/ReferenceHashSet.java
deleted file mode 100644
index 05887f8..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/ReferenceHashSet.java
+++ /dev/null
@@ -1,323 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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.runtime;
-
-import java.lang.ref.*;
-
-/**
- * A hashset whose values can be garbage collected.
- * This API is EXPERIMENTAL and provided as early access.
- * @since 3.1
- */
-public class ReferenceHashSet {
-
-	private interface HashedReference {
-		int hashCode();
-
-		Object get();
-	}
-
-	private class HashableWeakReference extends WeakReference implements HashedReference {
-		public int hashCode;
-
-		public HashableWeakReference(Object referent, ReferenceQueue queue) {
-			super(referent, queue);
-			this.hashCode = referent.hashCode();
-		}
-
-		public boolean equals(Object obj) {
-			if (!(obj instanceof HashableWeakReference))
-				return false;
-			Object referent = super.get();
-			Object other = ((HashableWeakReference) obj).get();
-			if (referent == null)
-				return other == null;
-			return referent.equals(other);
-		}
-
-		public int hashCode() {
-			return this.hashCode;
-		}
-
-		public String toString() {
-			Object referent = super.get();
-			if (referent == null)
-				return "[hashCode=" + this.hashCode + "] <referent was garbage collected>"; //$NON-NLS-1$  //$NON-NLS-2$
-			return "[hashCode=" + this.hashCode + "] " + referent.toString(); //$NON-NLS-1$ //$NON-NLS-2$
-		}
-	}
-
-	private class HashableSoftReference extends SoftReference implements HashedReference {
-		public int hashCode;
-
-		public HashableSoftReference(Object referent, ReferenceQueue queue) {
-			super(referent, queue);
-			this.hashCode = referent.hashCode();
-		}
-
-		public boolean equals(Object obj) {
-			if (!(obj instanceof HashableWeakReference))
-				return false;
-			Object referent = super.get();
-			Object other = ((HashableWeakReference) obj).get();
-			if (referent == null)
-				return other == null;
-			return referent.equals(other);
-		}
-
-		public int hashCode() {
-			return this.hashCode;
-		}
-
-		public String toString() {
-			Object referent = super.get();
-			if (referent == null)
-				return "[hashCode=" + this.hashCode + "] <referent was garbage collected>"; //$NON-NLS-1$  //$NON-NLS-2$
-			return "[hashCode=" + this.hashCode + "] " + referent.toString(); //$NON-NLS-1$ //$NON-NLS-2$
-		}
-	}
-
-	private class StrongReference implements HashedReference {
-		private Object referent;
-
-		public StrongReference(Object referent, ReferenceQueue queue) {
-			this.referent = referent;
-		}
-
-		public int hashCode() {
-			return referent.hashCode();
-		}
-
-		public Object get() {
-			return referent;
-		}
-
-		public boolean equals(Object obj) {
-			return referent.equals(obj);
-		}
-	}
-
-	HashedReference[] values;
-
-	public int elementSize; // number of elements in the table
-
-	int threshold;
-
-	ReferenceQueue referenceQueue = new ReferenceQueue();
-
-	public ReferenceHashSet() {
-		this(5);
-	}
-
-	public ReferenceHashSet(int size) {
-		this.elementSize = 0;
-		this.threshold = size; // size represents the expected
-		// number of elements
-		int extraRoom = (int) (size * 1.75f);
-		if (this.threshold == extraRoom)
-			extraRoom++;
-		this.values = new HashedReference[extraRoom];
-	}
-
-	/**
-	 * Constant indicating that hard references should be used.
-	 */
-	final public static int HARD = 0;
-
-	/**
-	 * Constant indiciating that soft references should be used.
-	 */
-	final public static int SOFT = 1;
-
-	/**
-	 * Constant indicating that weak references should be used.
-	 */
-	final public static int WEAK = 2;
-
-	private HashedReference toReference(int type, Object referent) {
-		switch (type) {
-			case HARD :
-				return new StrongReference(referent, referenceQueue);
-			case SOFT :
-				return new HashableSoftReference(referent, referenceQueue);
-			case WEAK :
-				return new HashableWeakReference(referent, referenceQueue);
-			default :
-				throw new Error();
-		}
-	}
-
-	/*
-	 * Adds the given object to this set. If an object that is equals to the
-	 * given object already exists, do nothing. Returns the existing object or
-	 * the new object if not found.
-	 */
-	public Object add(Object obj, int referenceType) {
-		cleanupGarbageCollectedValues();
-		int index = (obj.hashCode() & 0x7FFFFFFF) % this.values.length;
-		HashedReference currentValue;
-		while ((currentValue = this.values[index]) != null) {
-			Object referent;
-			if (obj.equals(referent = currentValue.get())) {
-				return referent;
-			}
-			index = (index + 1) % this.values.length;
-		}
-		this.values[index] = toReference(referenceType, obj);
-
-		// assumes the threshold is never equal to the size of the table
-		if (++this.elementSize > this.threshold)
-			rehash();
-
-		return obj;
-	}
-
-	private void addValue(HashedReference value) {
-		Object obj = value.get();
-		if (obj == null)
-			return;
-		int valuesLength = this.values.length;
-		int index = (value.hashCode() & 0x7FFFFFFF) % valuesLength;
-		HashedReference currentValue;
-		while ((currentValue = this.values[index]) != null) {
-			if (obj.equals(currentValue.get())) {
-				return;
-			}
-			index = (index + 1) % valuesLength;
-		}
-		this.values[index] = value;
-
-		// assumes the threshold is never equal to the size of the table
-		if (++this.elementSize > this.threshold)
-			rehash();
-	}
-
-	private void cleanupGarbageCollectedValues() {
-		HashedReference toBeRemoved;
-		while ((toBeRemoved = (HashedReference) this.referenceQueue.poll()) != null) {
-			int hashCode = toBeRemoved.hashCode();
-			int valuesLength = this.values.length;
-			int index = (hashCode & 0x7FFFFFFF) % valuesLength;
-			HashedReference currentValue;
-			while ((currentValue = this.values[index]) != null) {
-				if (currentValue == toBeRemoved) {
-					// replace the value at index with the last value with the
-					// same hash
-					int sameHash = index;
-					int current;
-					while ((currentValue = this.values[current = (sameHash + 1) % valuesLength]) != null && currentValue.hashCode() == hashCode)
-						sameHash = current;
-					this.values[index] = this.values[sameHash];
-					this.values[sameHash] = null;
-					this.elementSize--;
-					break;
-				}
-				index = (index + 1) % valuesLength;
-			}
-		}
-	}
-
-	public boolean contains(Object obj) {
-		return get(obj) != null;
-	}
-
-	/*
-	 * Return the object that is in this set and that is equals to the given
-	 * object. Return null if not found.
-	 */
-	public Object get(Object obj) {
-		cleanupGarbageCollectedValues();
-		int valuesLength = this.values.length;
-		int index = (obj.hashCode() & 0x7FFFFFFF) % valuesLength;
-		HashedReference currentValue;
-		while ((currentValue = this.values[index]) != null) {
-			Object referent;
-			if (obj.equals(referent = currentValue.get())) {
-				return referent;
-			}
-			index = (index + 1) % valuesLength;
-		}
-		return null;
-	}
-
-	private void rehash() {
-		ReferenceHashSet newHashSet = new ReferenceHashSet(this.elementSize * 2); // double the number of expected elements
-		newHashSet.referenceQueue = this.referenceQueue;
-		HashedReference currentValue;
-		for (int i = 0, length = this.values.length; i < length; i++)
-			if ((currentValue = this.values[i]) != null)
-				newHashSet.addValue(currentValue);
-
-		this.values = newHashSet.values;
-		this.threshold = newHashSet.threshold;
-		this.elementSize = newHashSet.elementSize;
-	}
-
-	/*
-	 * Removes the object that is in this set and that is equals to the given
-	 * object. Return the object that was in the set, or null if not found.
-	 */
-	public Object remove(Object obj) {
-		cleanupGarbageCollectedValues();
-		int valuesLength = this.values.length;
-		int index = (obj.hashCode() & 0x7FFFFFFF) % valuesLength;
-		HashedReference currentValue;
-		while ((currentValue = this.values[index]) != null) {
-			Object referent;
-			if (obj.equals(referent = currentValue.get())) {
-				this.elementSize--;
-				this.values[index] = null;
-				rehash();
-				return referent;
-			}
-			index = (index + 1) % valuesLength;
-		}
-		return null;
-	}
-
-	public int size() {
-		return this.elementSize;
-	}
-
-	public String toString() {
-		StringBuffer buffer = new StringBuffer("{"); //$NON-NLS-1$
-		for (int i = 0, length = this.values.length; i < length; i++) {
-			HashedReference value = this.values[i];
-			if (value != null) {
-				Object ref = value.get();
-				if (ref != null) {
-					buffer.append(ref.toString());
-					buffer.append(", "); //$NON-NLS-1$
-				}
-			}
-		}
-		buffer.append("}"); //$NON-NLS-1$
-		return buffer.toString();
-	}
-
-	public Object[] toArray() {
-		cleanupGarbageCollectedValues();
-		Object[] result = new Object[elementSize];
-		int resultSize = 0;
-		for (int i = 0; i < values.length; i++) {
-			if (values[i] == null)
-				continue;
-			Object tmp = values[i].get();
-			if (tmp != null)
-				result[resultSize++] = tmp;
-		}
-		if (result.length == resultSize)
-			return result;
-		Object[] finalResult = new Object[resultSize];
-		System.arraycopy(result, 0, finalResult, 0, resultSize);
-		return finalResult;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/ResourceTranslator.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/ResourceTranslator.java
deleted file mode 100644
index 38002a6..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/ResourceTranslator.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.runtime;
-
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.*;
-import org.eclipse.osgi.util.ManifestElement;
-import org.osgi.framework.*;
-
-/**
- * This class can only be used if OSGi plugin is available.
- */
-public class ResourceTranslator {
-	private static final String KEY_PREFIX = "%"; //$NON-NLS-1$
-	private static final String KEY_DOUBLE_PREFIX = "%%"; //$NON-NLS-1$	
-
-	public static String getResourceString(Bundle bundle, String value) {
-		return getResourceString(bundle, value, null);
-	}
-
-	public static String getResourceString(Bundle bundle, String value, ResourceBundle resourceBundle) {
-		String s = value.trim();
-		if (!s.startsWith(KEY_PREFIX, 0))
-			return s;
-		if (s.startsWith(KEY_DOUBLE_PREFIX, 0))
-			return s.substring(1);
-
-		int ix = s.indexOf(' ');
-		String key = ix == -1 ? s : s.substring(0, ix);
-		String dflt = ix == -1 ? s : s.substring(ix + 1);
-
-		if (resourceBundle == null && bundle != null) {
-			try {
-				resourceBundle = getResourceBundle(bundle);
-			} catch (MissingResourceException e) {
-				// just return the default (dflt)
-			}
-		}
-
-		if (resourceBundle == null)
-			return dflt;
-
-		try {
-			return resourceBundle.getString(key.substring(1));
-		} catch (MissingResourceException e) {
-			//this will avoid requiring a bundle access on the next lookup
-			return dflt;
-		}
-	}
-
-	public static ResourceBundle getResourceBundle(Bundle bundle) throws MissingResourceException {
-		if (hasRuntime21(bundle))
-			return ResourceBundle.getBundle("plugin", Locale.getDefault(), createTempClassloader(bundle)); //$NON-NLS-1$
-		return Activator.getDefault().getLocalization(bundle, null);
-	}
-
-	private static boolean hasRuntime21(Bundle b) {
-		try {
-			ManifestElement[] prereqs = ManifestElement.parseHeader(Constants.REQUIRE_BUNDLE, (String) b.getHeaders("").get(Constants.REQUIRE_BUNDLE)); //$NON-NLS-1$
-			if (prereqs == null)
-				return false;
-			for (int i = 0; i < prereqs.length; i++) {
-				if ("2.1".equals(prereqs[i].getAttribute(Constants.BUNDLE_VERSION_ATTRIBUTE)) && "org.eclipse.core.runtime".equals(prereqs[i].getValue())) { //$NON-NLS-1$//$NON-NLS-2$
-					return true;
-				}
-			}
-		} catch (BundleException e) {
-			return false;
-		}
-		return false;
-	}
-
-	private static ClassLoader createTempClassloader(Bundle b) {
-		ArrayList classpath = new ArrayList();
-		addClasspathEntries(b, classpath);
-		addBundleRoot(b, classpath);
-		addDevEntries(b, classpath);
-		addFragments(b, classpath);
-		URL[] urls = new URL[classpath.size()];
-		return new URLClassLoader((URL[]) classpath.toArray(urls));
-	}
-
-	private static void addFragments(Bundle host, ArrayList classpath) {
-		Activator activator = Activator.getDefault();
-		if (activator == null)
-			return;
-		Bundle[] fragments = activator.getFragments(host);
-		if (fragments == null)
-			return;
-
-		for (int i = 0; i < fragments.length; i++) {
-			addClasspathEntries(fragments[i], classpath);
-			addDevEntries(fragments[i], classpath);
-		}
-	}
-
-	private static void addClasspathEntries(Bundle b, ArrayList classpath) {
-		ManifestElement[] classpathElements;
-		try {
-			classpathElements = ManifestElement.parseHeader(Constants.BUNDLE_CLASSPATH, (String) b.getHeaders("").get(Constants.BUNDLE_CLASSPATH)); //$NON-NLS-1$
-			if (classpathElements == null)
-				return;
-			for (int i = 0; i < classpathElements.length; i++) {
-				URL classpathEntry = b.getEntry(classpathElements[i].getValue());
-				if (classpathEntry != null)
-					classpath.add(classpathEntry);
-			}
-		} catch (BundleException e) {
-			//ignore
-		}
-	}
-
-	private static void addBundleRoot(Bundle b, ArrayList classpath) {
-		classpath.add(b.getEntry("/")); //$NON-NLS-1$
-	}
-
-	private static void addDevEntries(Bundle b, ArrayList classpath) {
-		if (!DevClassPathHelper.inDevelopmentMode())
-			return;
-
-		String[] binaryPaths = DevClassPathHelper.getDevClassPath(b.getSymbolicName());
-		for (int i = 0; i < binaryPaths.length; i++) {
-			URL classpathEntry = b.getEntry(binaryPaths[i]);
-			if (classpathEntry != null)
-				classpath.add(classpathEntry);
-		}
-	}
-}
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/RuntimeLog.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/RuntimeLog.java
deleted file mode 100644
index 33a0229..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/RuntimeLog.java
+++ /dev/null
@@ -1,121 +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
- *     Julian Chen - fix for bug #92572, jclRM
- *******************************************************************************/
-package org.eclipse.core.internal.runtime;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import org.eclipse.core.runtime.*;
-
-/**
- * NOT API!!!  This log infrastructure was split from the InternalPlatform.
- * 
- * @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);
-
-	/**
-	 * Keep the messages until the first log listener is registered.
-	 * Once first log listeners is registred, it is going to receive
-	 * all status messages accumulated during the period when no log
-	 * listener was available.
-	 */
-	private static ArrayList queuedMessages = new ArrayList(5);
-
-	/**
-	 * @see Platform#addLogListener(ILogListener)
-	 */
-	public static void addLogListener(ILogListener listener) {
-		synchronized (logListeners) {
-			boolean firstListener = (logListeners.size() == 0);
-			// 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();
-			}
-		}
-	}
-
-	/**
-	 * @see Platform#removeLogListener(ILogListener)
-	 */
-	public static void removeLogListener(ILogListener listener) {
-		synchronized (logListeners) {
-			logListeners.remove(listener);
-		}
-	}
-
-	/**
-	 * Checks if the given listener is present
-	 */
-	public static boolean contains(ILogListener listener) {
-		synchronized (logListeners) {
-			return logListeners.contains(listener);
-		}
-	}
-
-	/**
-	 * Notifies all listeners of the platform log.
-	 */
-	public static void log(final IStatus status) {
-		// create array to avoid concurrent access
-		ILogListener[] listeners;
-		synchronized (logListeners) {
-			listeners = (ILogListener[]) logListeners.toArray(new ILogListener[logListeners.size()]);
-			if (listeners.length == 0) {
-				queuedMessages.add(status);
-				return;
-			}
-		}
-		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);
-			}
-		}
-	}
-
-	private static void handleException(Throwable e) {
-		if (!(e instanceof OperationCanceledException)) {
-			// Got a error while logging. Don't try to log again, just put it into stderr 
-			e.printStackTrace();
-		}
-	}
-
-	/**
-	 * Helps determine if any listeners are registered with the logging mechanism.
-	 * @return true if no listeners are registered
-	 */
-	public static boolean isEmpty() {
-		synchronized (logListeners) {
-			return (logListeners.size() == 0);
-		}
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/commonMessages.properties b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/commonMessages.properties
deleted file mode 100644
index 5faef93..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/commonMessages.properties
+++ /dev/null
@@ -1,46 +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
-###############################################################################
-### Common runtime plugin messages
-
-ok = OK
-
-### metadata
-meta_couldNotCreate = Error trying to create the platform metadata area: {0}.
-meta_instanceDataUnspecified = The instance data location has not been specified yet.
-meta_noDataModeSpecified = No instance data can be specified.
-meta_notDir = Specified platform location \"{0}\" is not a directory.
-meta_readonly = The platform metadata area could not be written: {0}.  By default the platform writes its content\nunder the current working directory when the platform is launched.  Use the -data parameter to\nspecify a different content area for the platform.
-meta_pluginProblems = Problems occurred when invoking code from plug-in: \"{0}\".
-
-### parsing/resolve
-parse_doubleSeparatorVersion=Plug-in version identifier, \"{0}\", must not contain two consecutive separator characters.
-parse_emptyPluginVersion=A plug-in version identifier must be non-empty.
-parse_fourElementPluginVersion=Plug-in version identifier, \"{0}\", can contain a maximum of four components.
-parse_numericMajorComponent=The major (1st) component of plug-in version identifier, \"{0}\", must be numeric.
-parse_numericMinorComponent=The minor (2nd) component of plug-in version identifier, \"{0}\", must be numeric.
-parse_numericServiceComponent=The service (3rd) component of plug-in version identifier, \"{0}\", must be numeric.
-parse_oneElementPluginVersion=Plug-in version identifier, \"{0}\", must contain at least one component.
-parse_postiveMajor=Plug-in version identifier, \"{0}\", must have a positive major (1st) component.
-parse_postiveMinor=Plug-in version identifier, \"{0}\", must have a positive minor (2nd) component.
-parse_postiveService=Plug-in version identifier, \"{0}\", must have a positive service (3rd) component.
-parse_separatorEndVersion=Plug-in version identifier, \"{0}\", must not end with a separator character.
-parse_separatorStartVersion=Plug-in version identifier, \"{0}\", must not start with a separator character.
-
-### URL
-url_badVariant = Unsupported \"platform:\" protocol variation \"{0}\".
-url_createConnection = Unable to create connection on \"{0}\".
-url_invalidURL = Invalid URL \"{0}\".
-url_noOutput = Output is not supported for \"{0}\", location is read-only.
-url_noaccess = Unhandled URL protocol \"{0}\".
-url_resolveFragment = Unable to resolve fragment \"{0}\".
-url_resolvePlugin = Unable to resolve plug-in \"{0}\".
-
-activator_not_available = The bundle activator for the org.eclipse.equinox.common bundle is not available.
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/package.html b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/package.html
deleted file mode 100644
index 0898ea2..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/internal/runtime/package.html
+++ /dev/null
@@ -1,24 +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>Package-level Javadoc</title>
-</head>
-<body>
-Provides core support for the runtime.
-<h2>
-Package Specification</h2>
-This package contains some classes that require OSGi presence. If OSGi plugin is not present in
-the platform, class loader errors will be raised if those classes get activated. The classes are:
-<UL>
-<LI>FindSupport
-<LI>DataArea
-<LI>MetaDataKeeper
-<LI>ResourceTranslator
-<LI>CommonRuntimeBundle
-<LI>CommonOSGiUtils
-</UL>
-
-
-</body>
-</html>
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/Assert.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/Assert.java
deleted file mode 100644
index d6547de..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/Assert.java
+++ /dev/null
@@ -1,112 +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.core.runtime;
-
-/**
- * <code>Assert</code> is useful for for embedding runtime sanity checks
- * in code. The predicate methods all test a condition and throw some
- * type of unchecked exception if the condition does not hold.
- * <p>
- * Assertion failure exceptions, like most runtime exceptions, are
- * thrown when something is misbehaving. Assertion failures are invariably
- * unspecified behavior; consequently, clients should never rely on
- * these being thrown (and certainly should not being catching them
- * specifically).
- * </p><p>
- * This class can be used without OSGi running.
- * </p><p>
- * This class is not intended to be instantiated or sub-classed by clients.
- * </p>
- * @since org.eclipse.equinox.common 3.2
- */
-public final class Assert {
-	/* This class is not intended to be instantiated. */
-	private Assert() {
-		// not allowed
-	}
-
-	/** Asserts that an argument is legal. If the given boolean is
-	 * not <code>true</code>, an <code>IllegalArgumentException</code>
-	 * is thrown.
-	 *
-	 * @param expression the outcode of the check
-	 * @return <code>true</code> if the check passes (does not return
-	 *    if the check fails)
-	 * @exception IllegalArgumentException if the legality test failed
-	 */
-	public static boolean isLegal(boolean expression) {
-		return isLegal(expression, ""); //$NON-NLS-1$
-	}
-
-	/** Asserts that an argument is legal. If the given boolean is
-	 * not <code>true</code>, an <code>IllegalArgumentException</code>
-	 * is thrown.
-	 * The given message is included in that exception, to aid debugging.
-	 *
-	 * @param expression the outcode 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)
-	 * @exception IllegalArgumentException if the legality test failed
-	 */
-	public static boolean isLegal(boolean expression, String message) {
-		if (!expression)
-			throw new IllegalArgumentException(message);
-		return expression;
-	}
-
-	/** Asserts that the given object is not <code>null</code>. If this
-	 * is not the case, some kind of unchecked exception is thrown.
-	 * 
-	 * @param object the value to test
-	 */
-	public static void isNotNull(Object object) {
-		isNotNull(object, ""); //$NON-NLS-1$
-	}
-
-	/** Asserts that the given object is not <code>null</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 object the value to test
-	 * @param message the message to include in the exception
-	 */
-	public static void isNotNull(Object object, String message) {
-		if (object == null)
-			throw new AssertionFailedException("null argument:" + message); //$NON-NLS-1$
-	}
-
-	/** Asserts that the given boolean is <code>true</code>. If this
-	 * is not the case, some kind of unchecked exception is thrown.
-	 *
-	 * @param expression the outcode of the check
-	 * @return <code>true</code> if the check passes (does not return
-	 *    if the check fails)
-	 */
-	public static boolean isTrue(boolean expression) {
-		return isTrue(expression, ""); //$NON-NLS-1$
-	}
-
-	/** 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 outcode 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)
-	 */
-	public static boolean isTrue(boolean expression, String message) {
-		if (!expression)
-			throw new AssertionFailedException("assertion failed: " + message); //$NON-NLS-1$
-		return expression;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/AssertionFailedException.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/AssertionFailedException.java
deleted file mode 100644
index cb561c1..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/AssertionFailedException.java
+++ /dev/null
@@ -1,39 +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.core.runtime;
-
-/**
- * <code>AssertionFailedException</code> is a runtime exception thrown
- * by some of the methods in <code>Assert</code>.
- * <p>
- * This class can be used without OSGi running.
- * </p><p>
- * This class is not intended to be instantiated or sub-classed by clients.
- * </p>
- * @see Assert
- * @since org.eclipse.equinox.common 3.2
- */
-public class AssertionFailedException extends RuntimeException {
-
-	/**
-	 * All serializable objects should have a stable serialVersionUID
-	 */
-	private static final long serialVersionUID = 1L;
-
-	/** 
-	 * Constructs a new exception with the given message.
-	 * 
-	 * @param detail the message
-	 */
-	public AssertionFailedException(String detail) {
-		super(detail);
-	}
-}
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/CoreException.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/CoreException.java
deleted file mode 100644
index bbe858c..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/CoreException.java
+++ /dev/null
@@ -1,99 +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.core.runtime;
-
-import java.io.PrintStream;
-import java.io.PrintWriter;
-
-/**
- * A checked exception representing a failure.
- * <p>
- * Core exceptions contain a status object describing the 
- * cause of the exception.
- * </p><p>
- * This class can be used without OSGi running.
- * </p>
- * @see IStatus
- */
-public class CoreException extends Exception {
-
-	/**
-	 * All serializable objects should have a stable serialVersionUID
-	 */
-	private static final long serialVersionUID = 1L;
-
-	/** Status object. */
-	private IStatus status;
-
-	/**
-	 * Creates a new exception with the given status object.  The message
-	 * of the given status is used as the exception message.
-	 *
-	 * @param status the status object to be associated with this exception
-	 */
-	public CoreException(IStatus status) {
-		super(status.getMessage());
-		this.status = status;
-	}
-
-	/**
-	 * Returns the status object for this exception.
-	 *
-	 * @return a status object
-	 */
-	public final IStatus getStatus() {
-		return status;
-	}
-
-	/**
-	 * Prints a stack trace out for the exception, and
-	 * any nested exception that it may have embedded in
-	 * its Status object.
-	 */
-	public void printStackTrace() {
-		printStackTrace(System.err);
-	}
-
-	/**
-	 * Prints a stack trace out for the exception, and
-	 * any nested exception that it may have embedded in
-	 * its Status object.
-	 * 
-	 * @param output the stream to write to
-	 */
-	public void printStackTrace(PrintStream output) {
-		synchronized (output) {
-			super.printStackTrace(output);
-			if (status.getException() != null) {
-				output.print(getClass().getName() + "[" + status.getCode() + "]: "); //$NON-NLS-1$ //$NON-NLS-2$
-				status.getException().printStackTrace(output);
-			}
-		}
-	}
-
-	/**
-	 * Prints a stack trace out for the exception, and
-	 * any nested exception that it may have embedded in
-	 * its Status object.
-	 * 
-	 * @param output the stream to write to
-	 */
-	public void printStackTrace(PrintWriter output) {
-		synchronized (output) {
-			super.printStackTrace(output);
-			if (status.getException() != null) {
-				output.print(getClass().getName() + "[" + status.getCode() + "]: "); //$NON-NLS-1$ //$NON-NLS-2$
-				status.getException().printStackTrace(output);
-			}
-		}
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/FileLocator.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/FileLocator.java
deleted file mode 100644
index 2cc1900..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/FileLocator.java
+++ /dev/null
@@ -1,189 +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.runtime;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.Map;
-import org.eclipse.core.internal.runtime.Activator;
-import org.eclipse.core.internal.runtime.FindSupport;
-import org.eclipse.osgi.service.urlconversion.URLConverter;
-import org.osgi.framework.Bundle;
-
-/**
- * This class contains collection of helper methods aimed at finding files in bundles.
- * This class can only be used if OSGi plugin is available.
- * <p>
- * The class is not intended to be subclassed or instantiated by clients.
- * </p>
- * @since org.eclipse.equinox.common 3.2
- */
-public final class FileLocator {
-
-	private FileLocator() {
-		// prevent instantiation
-	}
-
-	/**
-	 * Returns a URL for the given path in the given bundle.  Returns <code>null</code> if the URL
-	 * could not be computed or created. 
-	 * <p>
-	 * find looks for this path in given bundle and any attached fragments.  
-	 * <code>null</code> is returned if no such entry is found.  Note that
-	 * there is no specific order to the fragments.
-	 * </p><p>
-	 * The following arguments may also be used
-	 * <pre>
-	 *     $nl$ - for language specific information
-	 *     $os$ - for operating system specific information
-	 *     $ws$ - for windowing system specific information
-	 * </pre>
-	 * </p><p>
-	 * A path of $nl$/about.properties in an environment with a default 
-	 * locale of en_CA will return a URL corresponding to the first place
-	 * about.properties is found according to the following order:
-	 * <pre>
-	 *     plugin root/nl/en/CA/about.properties
-	 *     fragment1 root/nl/en/CA/about.properties
-	 *     fragment2 root/nl/en/CA/about.properties
-	 *     ...
-	 *     plugin root/nl/en/about.properties
-	 *     fragment1 root/nl/en/about.properties
-	 *     fragment2 root/nl/en/about.properties
-	 *     ...
-	 *     plugin root/about.properties
-	 *     fragment1 root/about.properties
-	 *     fragment2 root/about.properties
-	 *     ...
-	 * </pre>
-	 * </p><p>
-	 * The current environment variable values can be overridden using 
-	 * the override map argument or <code>null</code> can be specified
-	 * if this is not desired.
-	 * </p>
-	 * 
-	 * @param bundle the bundle in which to search
-	 * @param path file path relative to plug-in installation location
-	 * @param override map of override substitution arguments to be used for
-	 * 	any $arg$ path elements. The map keys correspond to the substitution
-	 * 	arguments (eg. "$nl$" or "$os$"). The resulting
-	 * 	values must be of type java.lang.String. If the map is <code>null</code>,
-	 * 	or does not contain the required substitution argument, the default
-	 * 	is used.
-	 * @return a URL for the given path or <code>null</code>.  The actual form
-	 * 	of the returned URL is not specified.
-	 */
-	public static URL find(Bundle bundle, IPath path, Map override) {
-		return FindSupport.find(bundle, path, override);
-	}
-
-	/**
-	 * Same as {@link #findEntries(Bundle, IPath, Map)} except multiple entries
-	 * can be returned if more than one entry matches the path in the host and 
-	 * any of its fragments.
-	 * 
-	 * @param bundle the bundle in which to search
-	 * @param path file path relative to plug-in installation location
-	 * @param override map of override substitution arguments to be used for
-	 * 	any $arg$ path elements. The map keys correspond to the substitution
-	 * 	arguments (eg. "$nl$" or "$os$"). The resulting
-	 * 	values must be of type java.lang.String. If the map is <code>null</code>,
-	 * 	or does not contain the required substitution argument, the default
-	 * 	is used.
-	 * @return an array of entries which match the given path.  An empty 
-	 * array is returned if no matches are found.
-	 * 
-	 * @since org.eclipse.equinox.common 3.3
-	 */
-	public static URL[] findEntries(Bundle bundle, IPath path, Map override) {
-		return FindSupport.findEntries(bundle, path, override);
-	}
-
-	/**
-	 * Same as {@link #findEntries(Bundle, IPath)} except multiple entries 
-	 * can be returned if more than one entry matches the path in the host 
-	 * any of its fragments.
-	 * 
-	 * @param bundle the bundle in which to search
-	 * @param path file path relative to plug-in installation location
-	 * @return an array of entries which match the given path.  An empty 
-	 * array is returned if no matches are found.
-	 * 
-	 * @since org.eclipse.equinox.common 3.3
-	 */
-	public static URL[] findEntries(Bundle bundle, IPath path) {
-		return FindSupport.findEntries(bundle, path);
-	}
-
-	/**
-	 * Returns an input stream for the specified file. The file path
-	 * must be specified relative to this plug-in's installation location.
-	 * Optionally, the path specified may contain $arg$ path elements that can 
-	 * be used as substitution arguments.  If this option is used then the $arg$ 
-	 * path elements are processed in the same way as {@link #find(Bundle, IPath, Map)}.
-	 * <p>
-	 * The caller must close the returned stream when done.
-	 * </p>
-	 *
-	 * @param bundle the bundle in which to search
-	 * @param file path relative to plug-in installation location
-	 * @param substituteArgs <code>true</code> to process substitution arguments, 
-	 * and <code>false</code> for the file exactly as specified without processing any
-	 * substitution arguments.
-	 * @return an input stream
-	 * @exception IOException if the given path cannot be found in this plug-in
-	 */
-	public static InputStream openStream(Bundle bundle, IPath file, boolean substituteArgs) throws IOException {
-		return FindSupport.openStream(bundle, file, substituteArgs);
-	}
-
-	/**
-	 * Converts a URL that uses a user-defined protocol into a URL that uses the file
-	 * protocol. The contents of the URL may be extracted into a cache on the file-system
-	 * in order to get a file URL. 
-	 * <p>
-	 * If the protocol for the given URL is not recognized by this converter, the original
-	 * URL is returned as-is.
-	 * </p>
-	 * @param url the original URL
-	 * @return the converted file URL or the original URL passed in if it is 
-	 * 	not recognized by this converter
-	 * @throws IOException if an error occurs during the conversion
-	 */
-	public static URL toFileURL(URL url) throws IOException {
-		URLConverter converter = Activator.getURLConverter(url);
-		return converter == null ? url : converter.toFileURL(url);
-	}
-
-	/**
-	 * Converts a URL that uses a client-defined protocol into a URL that uses a
-	 * protocol which is native to the Java class library (file, jar, http, etc).
-	 * <p>
-	 * Note however that users of this API should not assume too much about the
-	 * results of this method.  While it may consistently return a file: URL in certain
-	 * installation configurations, others may result in jar: or http: URLs.
-	 * </p>
-	 * <p>
-	 * If the protocol is not recognized by this converter, then the original URL is
-	 * returned as-is.
-	 * </p>
-	 * @param url the original URL
-	 * @return the resolved URL or the original if the protocol is unknown to this converter
-	 * @exception IOException if unable to resolve URL
-	 * @throws IOException if an error occurs during the resolution
-	 */
-	public static URL resolve(URL url) throws IOException {
-		URLConverter converter = Activator.getURLConverter(url);
-		return converter == null ? url : converter.resolve(url);
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/IAdaptable.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/IAdaptable.java
deleted file mode 100644
index 1c3f6d1..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/IAdaptable.java
+++ /dev/null
@@ -1,49 +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.core.runtime;
-
-/**
- * An interface for an adaptable object.
- * <p>
- * Adaptable objects can be dynamically extended to provide different 
- * interfaces (or "adapters").  Adapters are created by adapter 
- * factories, which are in turn managed by type by adapter managers.
- * </p>
- * For example,
- * <pre>
- *     IAdaptable a = [some adaptable];
- *     IFoo x = (IFoo)a.getAdapter(IFoo.class);
- *     if (x != null)
- *         [do IFoo things with x]
- * </pre>
- * <p>
- * This interface can be used without OSGi running.
- * </p><p>
- * Clients may implement this interface, or obtain a default implementation
- * of this interface by subclassing <code>PlatformObject</code>.
- * </p>
- * @see IAdapterFactory
- * @see IAdapterManager
- * @see PlatformObject
- */
-public interface IAdaptable {
-	/**
-	 * Returns an object which is an instance of the given class
-	 * associated with this object. Returns <code>null</code> if
-	 * no such object can be found.
-	 *
-	 * @param adapter the adapter class to look up
-	 * @return a object castable to the given class, 
-	 *    or <code>null</code> if this object does not
-	 *    have an adapter for the given class
-	 */
-	public Object getAdapter(Class adapter);
-}
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/IAdapterFactory.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/IAdapterFactory.java
deleted file mode 100644
index a3dfcb4..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/IAdapterFactory.java
+++ /dev/null
@@ -1,54 +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.core.runtime;
-
-/**
- * An adapter factory defines behavioral extensions for
- * one or more classes that implements the <code>IAdaptable</code>
- * interface. Adapter factories are registered with an
- * adapter manager.
- * <p>
- * This interface can be used without OSGi running.
- * </p><p>
- * Clients may implement this interface.
- * </p>
- * @see IAdapterManager
- * @see IAdaptable
- */
-public interface IAdapterFactory {
-	/**
-	 * Returns an object which is an instance of the given class
-	 * associated with the given object. Returns <code>null</code> if
-	 * no such object can be found.
-	 *
-	 * @param adaptableObject the adaptable object being queried
-	 *   (usually an instance of <code>IAdaptable</code>)
-	 * @param adapterType the type of adapter to look up
-	 * @return a object castable to the given adapter type, 
-	 *    or <code>null</code> if this adapter factory 
-	 *    does not have an adapter of the given type for the
-	 *    given object
-	 */
-	public Object getAdapter(Object adaptableObject, Class adapterType);
-
-	/**
-	 * Returns the collection of adapter types handled by this
-	 * factory.
-	 * <p>
-	 * This method is generally used by an adapter manager
-	 * to discover which adapter types are supported, in advance
-	 * of dispatching any actual <code>getAdapter</code> requests.
-	 * </p>
-	 *
-	 * @return the collection of adapter types
-	 */
-	public Class[] getAdapterList();
-}
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/IAdapterManager.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/IAdapterManager.java
deleted file mode 100644
index 316e551..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/IAdapterManager.java
+++ /dev/null
@@ -1,260 +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.core.runtime;
-
-/**
- * An adapter manager maintains a registry of adapter factories. Clients
- * directly invoke methods on an adapter manager to register and unregister
- * adapters. All adaptable objects (that is, objects that implement the <code>IAdaptable</code>
- * interface) funnel <code>IAdaptable.getAdapter</code> invocations to their
- * adapter manager's <code>IAdapterManger.getAdapter</code> method. The
- * adapter manager then forwards this request unmodified to the <code>IAdapterFactory.getAdapter</code>
- * method on one of the registered adapter factories.
- * <p>
- * Adapter factories can be registered programmatically using the <code>registerAdapters</code>
- * method.  Alternatively, they can be registered declaratively using the 
- * <code>org.eclipse.core.runtime.adapters</code> extension point.  Factories registered
- * with this extension point will not be able to provide adapters until their
- * corresponding plugin has been activated.
- * <p>
- * The following code snippet shows how one might register an adapter of type
- * <code>com.example.acme.Sticky</code> on resources in the workspace.
- * <p>
- * 
- * <pre>
- *  IAdapterFactory pr = new IAdapterFactory() {
- *  	public Class[] getAdapterList() {
- *  		return new Class[] { com.example.acme.Sticky.class };
- *  	}
- *  	public Object getAdapter(Object adaptableObject, Class adapterType) {
- *  		IResource res = (IResource) adaptableObject;
- *  		QualifiedName key = new QualifiedName(&quot;com.example.acme&quot;, &quot;sticky-note&quot;);
- *  		try {
- *  			com.example.acme.Sticky v = (com.example.acme.Sticky) res.getSessionProperty(key);
- *  			if (v == null) {
- *  				v = new com.example.acme.Sticky();
- *  				res.setSessionProperty(key, v);
- *  			}
- *  		} catch (CoreException e) {
- *  			// unable to access session property - ignore
- *  		}
- *  		return v;
- *  	}
- *  }
- *  Platform.getAdapterManager().registerAdapters(pr, IResource.class);
- *   </pre>
- * 
- * </p><p>
- * This interface can be used without OSGi running.
- * </p><p>
- * This interface is not intended to be implemented by clients.
- * </p>
- * @see IAdaptable
- * @see IAdapterFactory
- */
-public interface IAdapterManager {
-
-	/**
-	 * This value can be returned to indicate that no applicable adapter factory 
-	 * was found. 
-	 * @since org.eclipse.equinox.common 3.3
-	 */
-	public static final int NONE = 0;
-
-	/**
-	 * This value can be returned to indicate that an adapter factory was found, 
-	 * but has not been loaded.
-	 * @since org.eclipse.equinox.common 3.3
-	 */
-	public static final int NOT_LOADED = 1;
-
-	/**
-	 * This value can be returned to indicate that an adapter factory is loaded.
-	 * @since org.eclipse.equinox.common 3.3
-	 */
-	public static final int LOADED = 2;
-
-	/**
-	 * Returns the types that can be obtained by converting <code>adaptableClass</code> 
-	 * via this manager. Converting means that subsequent calls to <code>getAdapter()</code>
-	 * or <code>loadAdapter()</code> could result in an adapted object.
-	 * <p>
-	 * Note that the returned types do not guarantee that
-	 * a subsequent call to <code>getAdapter</code> with the same type as an argument
-	 * will return a non-null result. If the factory's plug-in has not yet been
-	 * loaded, or if the factory itself returns <code>null</code>, then
-	 * <code>getAdapter</code> will still return <code>null</code>.
-	 * </p>
-	 * @param adaptableClass the adaptable class being queried	
-	 * @return an array of type names that can be obtained by converting 
-	 * <code>adaptableClass</code> via this manager. An empty array 
-	 * is returned if there are none.
-	 * @since 3.1
-	 */
-	public String[] computeAdapterTypes(Class adaptableClass);
-
-	/**
-	 * Returns the class search order for a given class. The search order from a 
-	 * class with the definition <br>
-	 * <code>class X extends Y implements A, B</code><br>
-	 * is as follows:
-	 * <ul>
-	 * <li>the target's class: X
-	 * <li>X's superclasses in order to <code>Object</code>
-	 * <li>a breadth-first traversal of the target class's interfaces in the
-	 * order returned by <code>getInterfaces</code> (in the example, A and its
-	 * superinterfaces then B and its superinterfaces) </li>
-	 * </ul>
-	 * 
-	 * @param clazz the class for which to return the class order. 
-	 * @return the class search order for the given class. The returned
-	 * search order will minimally  contain the target class.
-	 * @since 3.1
-	 */
-	public Class[] computeClassOrder(Class clazz);
-
-	/**
-	 * Returns an object which is an instance of the given class associated
-	 * with the given object. Returns <code>null</code> if no such object can
-	 * be found.
-	 * <p>
-	 * Note that this method will never cause plug-ins to be loaded. If the
-	 * only suitable factory is not yet loaded, this method will return <code>null</code>.
-	 * 
-	 * @param adaptable the adaptable object being queried (usually an instance
-	 * of <code>IAdaptable</code>)
-	 * @param adapterType the type of adapter to look up
-	 * @return an object castable to the given adapter type, or <code>null</code>
-	 * if the given adaptable object does not have an available adapter of the
-	 * given type
-	 */
-	public Object getAdapter(Object adaptable, Class adapterType);
-
-	/**
-	 * Returns an object which is an instance of the given class name associated
-	 * with the given object. Returns <code>null</code> if no such object can
-	 * be found.
-	 * <p>
-	 * Note that this method will never cause plug-ins to be loaded. If the
-	 * only suitable factory is not yet loaded, this method will return <code>null</code>.
-	 * If activation of the plug-in providing the factory is required, use the
-	 * <code>loadAdapter</code> method instead.
-	 * 
-	 * @param adaptable the adaptable object being queried (usually an instance
-	 * of <code>IAdaptable</code>)
-	 * @param adapterTypeName the fully qualified name of the type of adapter to look up
-	 * @return an object castable to the given adapter type, or <code>null</code>
-	 * if the given adaptable object does not have an available adapter of the
-	 * given type
-	 * @since 3.0
-	 */
-	public Object getAdapter(Object adaptable, String adapterTypeName);
-
-	/**
-	 * Returns whether there is an adapter factory registered that may be able
-	 * to convert <code>adaptable</code> to an object of type <code>adapterTypeName</code>.
-	 * <p>
-	 * Note that a return value of <code>true</code> does not guarantee that
-	 * a subsequent call to <code>getAdapter</code> with the same arguments
-	 * will return a non-null result. If the factory's plug-in has not yet been
-	 * loaded, or if the factory itself returns <code>null</code>, then
-	 * <code>getAdapter</code> will still return <code>null</code>.
-	 * 
-	 * @param adaptable the adaptable object being queried (usually an instance
-	 * of <code>IAdaptable</code>)
-	 * @param adapterTypeName the fully qualified class name of an adapter to
-	 * look up
-	 * @return <code>true</code> if there is an adapter factory that claims
-	 * it can convert <code>adaptable</code> to an object of type <code>adapterType</code>,
-	 * and <code>false</code> otherwise.
-	 * @since 3.0
-	 */
-	public boolean hasAdapter(Object adaptable, String adapterTypeName);
-
-	/**
-	 * Returns a status of an adapter factory registered that may be able
-	 * to convert <code>adaptable</code> to an object of type <code>adapterTypeName</code>.
-	 * <p>
-	 * One of the following values can be returned:<ul>
-	 * <li>{@link org.eclipse.core.runtime.IAdapterManager#NONE} if no applicable adapter factory was found;</li>
-	 * <li>{@link org.eclipse.core.runtime.IAdapterManager#NOT_LOADED} if an adapter factory was found, but has not been loaded;</li>
-	 * <li>{@link org.eclipse.core.runtime.IAdapterManager#LOADED} if an adapter factory was found, and it is loaded.</li>
-	 * </ul></p>
-	 * @param adaptable the adaptable object being queried (usually an instance
-	 * of <code>IAdaptable</code>)
-	 * @param adapterTypeName the fully qualified class name of an adapter to
-	 * look up
-	 * @return a status of the adapter 
-	 * @since org.eclipse.equinox.common 3.3
-	 */
-	public int queryAdapter(Object adaptable, String adapterTypeName);
-
-	/**
-	 * Returns an object that is an instance of the given class name associated
-	 * with the given object. Returns <code>null</code> if no such object can
-	 * be found.
-	 * <p>
-	 * Note that unlike the <code>getAdapter</code> methods, this method
-	 * will cause the plug-in that contributes the adapter factory to be loaded
-	 * if necessary. As such, this method should be used judiciously, in order
-	 * to avoid unnecessary plug-in activations. Most clients should avoid
-	 * activation by using <code>getAdapter</code> instead.
-	 * 
-	 * @param adaptable the adaptable object being queried (usually an instance
-	 * of <code>IAdaptable</code>)
-	 * @param adapterTypeName the fully qualified name of the type of adapter to look up
-	 * @return an object castable to the given adapter type, or <code>null</code>
-	 * if the given adaptable object does not have an available adapter of the
-	 * given type
-	 * @since 3.0
-	 */
-	public Object loadAdapter(Object adaptable, String adapterTypeName);
-
-	/**
-	 * Registers the given adapter factory as extending objects of the given
-	 * type.
-	 * <p>
-	 * If the type being extended is a class, the given factory's adapters are
-	 * available on instances of that class and any of its subclasses. If it is
-	 * an interface, the adapters are available to all classes that directly or
-	 * indirectly implement that interface.
-	 * </p>
-	 * 
-	 * @param factory the adapter factory
-	 * @param adaptable the type being extended
-	 * @see #unregisterAdapters(IAdapterFactory)
-	 * @see #unregisterAdapters(IAdapterFactory, Class)
-	 */
-	public void registerAdapters(IAdapterFactory factory, Class adaptable);
-
-	/**
-	 * Removes the given adapter factory completely from the list of registered
-	 * factories. Equivalent to calling <code>unregisterAdapters(IAdapterFactory,Class)</code>
-	 * on all classes against which it had been explicitly registered. Does
-	 * nothing if the given factory is not currently registered.
-	 * 
-	 * @param factory the adapter factory to remove
-	 * @see #registerAdapters(IAdapterFactory, Class)
-	 */
-	public void unregisterAdapters(IAdapterFactory factory);
-
-	/**
-	 * Removes the given adapter factory from the list of factories registered
-	 * as extending the given class. Does nothing if the given factory and type
-	 * combination is not registered.
-	 * 
-	 * @param factory the adapter factory to remove
-	 * @param adaptable one of the types against which the given factory is
-	 * registered
-	 * @see #registerAdapters(IAdapterFactory, Class)
-	 */
-	public void unregisterAdapters(IAdapterFactory factory, Class adaptable);
-}
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/IBundleGroup.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/IBundleGroup.java
deleted file mode 100644
index 3f53394..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/IBundleGroup.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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.runtime;
-
-import org.osgi.framework.Bundle;
-
-/**
- * Bundle groups represent a logical collection of plug-ins (aka bundles).  Bundle
- * groups do not contain their constituents but rather collect them together under
- * a common label.  The main role of a bundle group is to report to the system
- * (e.g., the About dialog) what bundles have been installed.  They are not intended
- * for use in managing the set of bundles they represent.
- * <p>
- * Since the bulk of the branding related information is specific to the consumer, 
- * bundle groups also carry an arbitrary set of properties.  The valid set of 
- * key-value pairs and their interpretation defined by the consumer in the 
- * target environment.
- * </p><p>
- * The Eclipse UI is the typical consumer of bundle groups and defines various 
- * property keys that it will use, for example, to display About information.  See
- * <code>org.eclipse.ui.branding.IBundleGroupConstants</code>.
- * </p>
- * @see IBundleGroupProvider
- * @since 3.0
- */
-public interface IBundleGroup {
-
-	/**
-	 * Returns the identifier of this bundle group.  Bundle groups are uniquely identified by the combination of
-	 * their identifier and their version.
-	 * 
-	 * @see #getVersion()
-	 * @return the identifier for this bundle group
-	 */
-	public String getIdentifier();
-
-	/**
-	 * Returns the human-readable name of this bundle group.
-	 * 
-	 * @return the human-readable name
-	 */
-	public String getName();
-
-	/**
-	 * Returns the version of this bundle group. Bundle group version strings have the same format as 
-	 * bundle versions (i.e., major.minor.service.qualifier).  Bundle groups are uniquely identified 
-	 * by the combination of their identifier and their version.
-	 * 
-	 * @see #getIdentifier()
-	 * @return the string form of this bundle group's version
-	 */
-	public String getVersion();
-
-	/**
-	 * Returns a text description of this bundle group.
-	 * 
-	 * @return text description of this bundle group
-	 */
-	public String getDescription();
-
-	/**
-	 * Returns the name of the provider of this bundle group.
-	 * 
-	 * @return the name of the provider or <code>null</code> if none
-	 */
-	public String getProviderName();
-
-	/**
-	 * Returns a list of all bundles supplied by this bundle group.  
-	 * 
-	 * @return the bundles supplied by this bundle group
-	 */
-	public Bundle[] getBundles();
-
-	/**
-	 * Returns the property of this bundle group with the given key.
-	 * <code>null</code> is returned if there is no such key/value pair.
-	 * 
-	 * @param key the name of the property to return
-	 * @return the value associated with the given key or <code>null</code> if none
-	 */
-	public String getProperty(String key);
-}
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/IBundleGroupProvider.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/IBundleGroupProvider.java
deleted file mode 100644
index 5de0835..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/IBundleGroupProvider.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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.runtime;
-
-/**
- * Bundle group providers define groups of plug-ins which have been installed in
- * the current system.  Typically, a configuration agent (i.e., plug-in installer) will 
- * define a bundle group provider so that it can report to the system the list 
- * of plug-ins it has installed.
- * @see IBundleGroup
- * @since 3.0
- */
-public interface IBundleGroupProvider {
-
-	/**
-	 * Returns the human-readable name of this bundle group provider.
-	 * 
-	 * @return the name of this bundle group provider
-	 */
-	public String getName();
-
-	/**
-	 * Returns the bundle groups provided by this provider.
-	 * 
-	 * @return the bundle groups provided by this provider
-	 */
-	public IBundleGroup[] getBundleGroups();
-}
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/ILogListener.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/ILogListener.java
deleted file mode 100644
index b104e83..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/ILogListener.java
+++ /dev/null
@@ -1,34 +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.core.runtime;
-
-import java.util.EventListener;
-
-/**
- * A log listener is notified of entries added to a plug-in's log.
- * <p>
- * This interface can be used without OSGi running.
- * </p><p>
- * Clients may implement this interface.
- * </p>
- * @see ILog#addLogListener(ILogListener)
- * @see Platform#addLogListener(ILogListener)
- */
-public interface ILogListener extends EventListener {
-	/**
-	 * Notifies this listener that given status has been logged by
-	 * a plug-in.  The listener is free to retain or ignore this status.
-	 * 
-	 * @param status the status being logged
-	 * @param plugin the plugin of the log which generated this event
-	 */
-	public void logging(IStatus status, String plugin);
-}
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/IPath.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/IPath.java
deleted file mode 100644
index 6a5e8a1..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/IPath.java
+++ /dev/null
@@ -1,505 +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.core.runtime;
-
-/**
- * A path is an ordered collection of string segments,
- * separated by a standard separator character, "/".
- * A path may also have a leading and/or a trailing separator.
- * Paths may also be prefixed by an optional device id, which includes
- * the character(s) which separate the device id from the rest 
- * of the path. For example, "C:" and "Server/Volume:" are typical
- * device ids.
- * A device independent path has <code>null</code> for a device id.
- * <p>
- * Note that paths are value objects; all operations on paths 
- * return a new path; the path that is operated on is unscathed.
- * </p>
- * <p>
- * UNC paths are denoted by leading double-slashes such 
- * as <code>//Server/Volume/My/Path</code>. When a new path
- * is constructed all double-slashes are removed except those
- * appearing at the beginning of the path.
- * </p>
- * <p>
- * This interface can be used without OSGi running.
- * </p><p>
- * This interface is not intended to be implemented by clients.
- * </p>
- * @see Path
- */
-public interface IPath extends Cloneable {
-
-	/**
-	 * Path separator character constant "/" used in paths.
-	 */
-	public static final char SEPARATOR = '/';
-
-	/** 
-	 * Device separator character constant ":" used in paths.
-	 */
-	public static final char DEVICE_SEPARATOR = ':';
-
-	/**
-	 * Returns a new path which is the same as this path but with
-	 * the given file extension added.  If this path is empty, root or has a 
-	 * trailing separator, this path is returned.  If this path already
-	 * has an extension, the existing extension is left and the given
-	 * extension simply appended.  Clients wishing to replace
-	 * the current extension should first remove the extension and
-	 * then add the desired one.
-	 * <p>
-	 * The file extension portion is defined as the string
-	 * following the last period (".") character in the last segment.
-	 * The given extension should not include a leading ".".
-	 * </p>
-	 *
-	 * @param extension the file extension to append
-	 * @return the new path
-	 */
-	public IPath addFileExtension(String extension);
-
-	/**
-	 * Returns a path with the same segments as this path
-	 * but with a trailing separator added.
-	 * This path must have at least one segment.
-	 * <p>
-	 * If this path already has a trailing separator,
-	 * this path is returned.
-	 * </p>
-	 *
-	 * @return the new path
-	 * @see #hasTrailingSeparator()
-	 * @see #removeTrailingSeparator()
-	 */
-	public IPath addTrailingSeparator();
-
-	/**
-	 * Returns the canonicalized path obtained from the
-	 * concatenation of the given string path to the
-	 * end of this path. The given string path must be a valid
-	 * path. If it has a trailing separator, 
-	 * the result will have a trailing separator.
-	 * The device id of this path is preserved (the one
-	 * of the given string is ignored). Duplicate slashes
-	 * are removed from the path except at the beginning
-	 * where the path is considered to be UNC.
-	 * 
-	 * @param path the string path to concatenate
-	 * @return the new path
-	 * @see #isValidPath(String)
-	 */
-	public IPath append(String path);
-
-	/**
-	 * Returns the canonicalized path obtained from the 
-	 * concatenation of the given path's segments to the
-	 * end of this path.  If the given path has a trailing
-	 * separator, the result will have a trailing separator.
-	 * The device id of this path is preserved (the one
-	 * of the given path is ignored). Duplicate slashes
-	 * are removed from the path except at the beginning
-	 * where the path is considered to be UNC.
-	 *
-	 * @param path the path to concatenate
-	 * @return the new path
-	 */
-	public IPath append(IPath path);
-
-	/**
-	 * Returns a copy of this path.
-	 *
-	 * @return the cloned path
-	 */
-	public Object clone();
-
-	/**
-	 * Returns whether this path equals the given object.
-	 * <p>
-	 * Equality for paths is defined to be: same sequence of segments,
-	 * same absolute/relative status, and same device.
-	 * Trailing separators are disregarded.
-	 * Paths are not generally considered equal to objects other than paths.
-	 * </p>
-	 *
-	 * @param obj the other object
-	 * @return <code>true</code> if the paths are equivalent,
-	 *    and <code>false</code> if they are not
-	 */
-	public boolean equals(Object obj);
-
-	/**
-	 * Returns the device id for this path, or <code>null</code> if this
-	 * path has no device id. Note that the result will end in ':'.
-	 *
-	 * @return the device id, or <code>null</code>
-	 * @see #setDevice(String)
-	 */
-	public String getDevice();
-
-	/**
-	 * Returns the file extension portion of this path, 
-	 * or <code>null</code> if there is none.
-	 * <p>
-	 * The file extension portion is defined as the string
-	 * following the last period (".") character in the last segment.
-	 * If there is no period in the last segment, the path has no
-	 * file extension portion. If the last segment ends in a period,
-	 * the file extension portion is the empty string.
-	 * </p>
-	 *
-	 * @return the file extension or <code>null</code>
-	 */
-	public String getFileExtension();
-
-	/**
-	 * Returns whether this path has a trailing separator.
-	 * <p>
-	 * Note: In the root path ("/"), the separator is considered to
-	 * be leading rather than trailing.
-	 * </p>
-	 *
-	 * @return <code>true</code> if this path has a trailing
-	 *    separator, and <code>false</code> otherwise
-	 * @see #addTrailingSeparator()
-	 * @see #removeTrailingSeparator()
-	 */
-	public boolean hasTrailingSeparator();
-
-	/**
-	 * Returns whether this path is an absolute path (ignoring
-	 * any device id).
-	 * <p>
-	 * Absolute paths start with a path separator.
-	 * A root path, like <code>/</code> or <code>C:/</code>, 
-	 * is considered absolute.  UNC paths are always absolute.
-	 * </p>
-	 *
-	 * @return <code>true</code> if this path is an absolute path,
-	 *    and <code>false</code> otherwise
-	 */
-	public boolean isAbsolute();
-
-	/**
-	 * Returns whether this path has no segments and is not
-	 * a root path.
-	 *
-	 * @return <code>true</code> if this path is empty,
-	 *    and <code>false</code> otherwise
-	 */
-	public boolean isEmpty();
-
-	/**
-	 * Returns whether this path is a prefix of the given path.
-	 * To be a prefix, this path's segments must
-	 * appear in the argument path in the same order,
-	 * and their device ids must match.
-	 * <p>
-	 * An empty path is a prefix of all paths with the same device; a root path is a prefix of 
-	 * all absolute paths with the same device.
-	 * </p>
-	 * @param anotherPath the other path
-	 * @return <code>true</code> if this path is a prefix of the given path,
-	 *    and <code>false</code> otherwise
-	 */
-	public boolean isPrefixOf(IPath anotherPath);
-
-	/**
-	 * Returns whether this path is a root path.
-	 * <p>
-	 * The root path is the absolute non-UNC path with zero segments; 
-	 * e.g., <code>/</code> or <code>C:/</code>.
-	 * The separator is considered a leading separator, not a trailing one.
-	 * </p>
-	 *
-	 * @return <code>true</code> if this path is a root path,
-	 *    and <code>false</code> otherwise
-	 */
-	public boolean isRoot();
-
-	/**
-	 * Returns a boolean value indicating whether or not this path
-	 * is considered to be in UNC form. Return false if this path
-	 * has a device set or if the first 2 characters of the path string
-	 * are not <code>Path.SEPARATOR</code>.
-	 * 
-	 * @return boolean indicating if this path is UNC
-	 */
-	public boolean isUNC();
-
-	/**
-	 * Returns whether the given string is syntactically correct as
-	 * a path.  The device id is the prefix up to and including the device
-	 * separator for the local file system; the path proper is everything to 
-	 * the right of it, or the entire string if there is no device separator. 
-	 * When the platform location is a file system with no meaningful device
-	 * separator, the entire string is treated as the path proper.
-	 * The device id is not checked for validity; the path proper is correct 
-	* if each of the segments in its canonicalized form is valid.
-	 *
-	 * @param path the path to check
-	 * @return <code>true</code> if the given string is a valid path,
-	 *    and <code>false</code> otherwise
-	 * @see #isValidSegment(String)
-	 */
-	public boolean isValidPath(String path);
-
-	/**
-	 * Returns whether the given string is valid as a segment in 
-	 * a path. The rules for valid segments are as follows:
-	 * <ul>
-	 * <li> the empty string is not valid
-	 * <li> any string containing the slash character ('/') is not valid
-	 * <li>any string containing segment or device separator characters
-	 * on the local file system, such as the backslash ('\') and colon (':')
-	 * on some file systems.
-	 * </ul>
-	 *
-	 * @param segment the path segment to check
-	 * @return <code>true</code> if the given path segment is valid,
-	 *    and <code>false</code> otherwise
-	 */
-	public boolean isValidSegment(String segment);
-
-	/**
-	 * Returns the last segment of this path, or
-	 * <code>null</code> if it does not have any segments.
-	 *
-	 * @return the last segment of this path, or <code>null</code> 
-	 */
-	public String lastSegment();
-
-	/**
-	 * Returns an absolute path with the segments and device id of this path.
-	 * Absolute paths start with a path separator. If this path is absolute, 
-	 * it is simply returned.
-	 *
-	 * @return the new path
-	 */
-	public IPath makeAbsolute();
-
-	/**
-	 * Returns a relative path with the segments and device id of this path.
-	 * Absolute paths start with a path separator and relative paths do not. 
-	 * If this path is relative, it is simply returned.
-	 *
-	 * @return the new path
-	 */
-	public IPath makeRelative();
-
-	/**
-	 * Return a new path which is the equivalent of this path converted to UNC
-	 * form (if the given boolean is true) or this path not as a UNC path (if the given
-	 * boolean is false). If UNC, the returned path will not have a device and the 
-	 * first 2 characters of the path string will be <code>Path.SEPARATOR</code>. If not UNC, the
-	 * 	first 2 characters of the returned path string will not be <code>Path.SEPARATOR</code>.
-	 * 
-	 * @param toUNC true if converting to UNC, false otherwise
-	 * @return the new path, either in UNC form or not depending on the boolean parameter
-	 */
-	public IPath makeUNC(boolean toUNC);
-
-	/**
-	 * Returns a count of the number of segments which match in
-	 * this path and the given path (device ids are ignored),
-	 * comparing in increasing segment number order.
-	 *
-	 * @param anotherPath the other path
-	 * @return the number of matching segments
-	 */
-	public int matchingFirstSegments(IPath anotherPath);
-
-	/**
-	 * Returns a new path which is the same as this path but with
-	 * the file extension removed.  If this path does not have an 
-	 * extension, this path is returned.
-	 * <p>
-	 * The file extension portion is defined as the string
-	 * following the last period (".") character in the last segment.
-	 * If there is no period in the last segment, the path has no
-	 * file extension portion. If the last segment ends in a period,
-	 * the file extension portion is the empty string.
-	 * </p>
-	 *
-	 * @return the new path
-	 */
-	public IPath removeFileExtension();
-
-	/**
-	 * Returns a copy of this path with the given number of segments
-	 * removed from the beginning. The device id is preserved. 
-	 * The number must be greater or equal zero.
-	 * If the count is zero, this path is returned.
-	 * The resulting path will always be a relative path with respect
-	 * to this path.  If the number equals or exceeds the number
-	 * of segments in this path, an empty relative path is returned.
-	 *
-	 * @param count the number of segments to remove
-	 * @return the new path
-	 */
-	public IPath removeFirstSegments(int count);
-
-	/**
-	 * Returns a copy of this path with the given number of segments
-	 * removed from the end. The device id is preserved.
-	 * The number must be greater or equal zero.
-	 * If the count is zero, this path is returned.
-	 * <p>
-	 * If this path has a trailing separator, it will still
-	 * have a trailing separator after the last segments are removed
-	 * (assuming there are some segments left).  If there is no
-	 * trailing separator, the result will not have a trailing
-	 * separator.
-	 * If the number equals or exceeds the number
-	 * of segments in this path, a path with no segments is returned.
-	 * </p>
-	 *
-	 * @param count the number of segments to remove
-	 * @return the new path
-	 */
-	public IPath removeLastSegments(int count);
-
-	/**
-	 * Returns a path with the same segments as this path
-	 * but with a trailing separator removed.
-	 * Does nothing if this path does not have at least one segment.
-	 * The device id is preserved.
-	 * <p>
-	 * If this path does not have a trailing separator,
-	 * this path is returned.
-	 * </p>
-	 *
-	 * @return the new path
-	 * @see #addTrailingSeparator()
-	 * @see #hasTrailingSeparator()
-	 */
-	public IPath removeTrailingSeparator();
-
-	/**
-	 * Returns the specified segment of this path, or
-	 * <code>null</code> if the path does not have such a segment.
-	 *
-	 * @param index the 0-based segment index
-	 * @return the specified segment, or <code>null</code> 
-	 */
-	public String segment(int index);
-
-	/**
-	 * Returns the number of segments in this path.
-	 * <p> 
-	 * Note that both root and empty paths have 0 segments.
-	 * </p>
-	 *
-	 * @return the number of segments
-	 */
-	public int segmentCount();
-
-	/**
-	 * Returns the segments in this path in order.
-	 *
-	 * @return an array of string segments
-	 */
-	public String[] segments();
-
-	/**
-	 * Returns a new path which is the same as this path but with 
-	 * the given device id.  The device id must end with a ":".
-	 * A device independent path is obtained by passing <code>null</code>.
-	 * <p>
-	 * For example, "C:" and "Server/Volume:" are typical device ids.
-	 * </p>
-	 *
-	 * @param device the device id or <code>null</code>
-	 * @return a new path
-	 * @see #getDevice()
-	 */
-	public IPath setDevice(String device);
-
-	/**
-	 * Returns a <code>java.io.File</code> corresponding to this path.
-	 *
-	 * @return the file corresponding to this path
-	 */
-	public java.io.File toFile();
-
-	/**
-	 * Returns a string representation of this path which uses the
-	 * platform-dependent path separator defined by <code>java.io.File</code>.
-	 * This method is like <code>toString()</code> except that the
-	 * latter always uses the same separator (<code>/</code>) regardless of platform.
-	 * <p>
-	 * This string is suitable for passing to <code>java.io.File(String)</code>.
-	 * </p>
-	 *
-	 * @return a platform-dependent string representation of this path
-	 */
-	public String toOSString();
-
-	/**
-	 * Returns a platform-neutral string representation of this path. The 
-	 * format is not specified, except that the resulting string can be 
-	 * passed back to the <code>Path#fromPortableString(String)</code> 
-	 * constructor to produce the exact same path on any platform.
-	 * <p>
-	 * This string is suitable for passing to <code>Path#fromPortableString(String)</code>.
-	 * </p>
-	 *
-	 * @return a platform-neutral string representation of this path
-	 * @see Path#fromPortableString(String)
-	 * @since 3.1
-	 */
-	public String toPortableString();
-
-	/**
-	 * Returns a string representation of this path, including its
-	 * device id.  The same separator, "/", is used on all platforms.
-	 * <p>
-	 * Example result strings (without and with device id):
-	 * <pre>
-	 * "/foo/bar.txt"
-	 * "bar.txt"
-	 * "/foo/"
-	 * "foo/"
-	 * ""
-	 * "/"
-	 * "C:/foo/bar.txt"
-	 * "C:bar.txt"
-	 * "C:/foo/"
-	 * "C:foo/"
-	 * "C:"
-	 * "C:/"
-	 * </pre>
-	 * This string is suitable for passing to <code>Path(String)</code>.
-	 * </p>
-	 *
-	 * @return a string representation of this path
-	 * @see Path
-	 */
-	public String toString();
-
-	/**
-	 * Returns a copy of this path truncated after the
-	 * given number of segments. The number must not be negative.
-	 * The device id is preserved.
-	 * <p>
-	 * If this path has a trailing separator, the result will too
-	 * (assuming there are some segments left). If there is no
-	 * trailing separator, the result will not have a trailing
-	 * separator.
-	 * Copying up to segment zero simply means making an copy with
-	 * no path segments.
-	 * </p>
-	 *
-	 * @param count the segment number at which to truncate the path
-	 * @return the new path
-	 */
-	public IPath uptoSegment(int count);
-}
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/IProgressMonitor.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/IProgressMonitor.java
deleted file mode 100644
index b38a34c..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/IProgressMonitor.java
+++ /dev/null
@@ -1,129 +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.core.runtime;
-
-/**
- * The <code>IProgressMonitor</code> interface is implemented
- * by objects that monitor the progress of an activity; the methods
- * in this interface are invoked by code that performs the activity.
- * <p>
- * All activity is broken down into a linear sequence of tasks against
- * which progress is reported. When a task begins, a <code>beginTask(String, int)
- * </code> notification is reported, followed by any number and mixture of 
- * progress reports (<code>worked()</code>) and subtask notifications 
- * (<code>subTask(String)</code>).  When the task is eventually completed, a 
- * <code>done()</code> notification is reported.  After the <code>done()</code>
- * notification, the progress monitor cannot be reused;  i.e., <code>
- * beginTask(String, int)</code> cannot be called again after the call to 
- * <code>done()</code>.
- * </p>
- * <p>
- * A request to cancel an operation can be signaled using the 
- * <code>setCanceled</code> method.  Operations taking a progress
- * monitor are expected to poll the monitor (using <code>isCanceled</code>)
- * periodically and abort at their earliest convenience.  Operation can however 
- * choose to ignore cancelation requests.
- * </p>
- * <p>
- * Since notification is synchronous with the activity itself, the listener should 
- * provide a fast and robust implementation. If the handling of notifications would 
- * involve blocking operations, or operations which might throw uncaught exceptions, 
- * the notifications should be queued, and the actual processing deferred (or perhaps
- * delegated to a separate thread).
- * </p><p>
- * This interface can be used without OSGi running.
- * </p><p>
- * Clients may implement this interface.
- * </p>
- */
-public interface IProgressMonitor {
-
-	/** Constant indicating an unknown amount of work.
-	 */
-	public final static int UNKNOWN = -1;
-
-	/**
-	 * Notifies that the main task is beginning.  This must only be called once
-	 * on a given progress monitor instance.
-	 * 
-	 * @param name the name (or description) of the main task
-	 * @param totalWork the total number of work units into which
-	 *  the main task is been subdivided. If the value is <code>UNKNOWN</code> 
-	 *  the implementation is free to indicate progress in a way which 
-	 *  doesn't require the total number of work units in advance.
-	 */
-	public void beginTask(String name, int totalWork);
-
-	/**
-	 * Notifies that the work is done; that is, either the main task is completed 
-	 * or the user canceled it. This method may be called more than once 
-	 * (implementations should be prepared to handle this case).
-	 */
-	public void done();
-
-	/**
-	 * Internal method to handle scaling correctly. This method
-	 * must not be called by a client. Clients should 
-	 * always use the method </code>worked(int)</code>.
-	 * 
-	 * @param work the amount of work done
-	 */
-	public void internalWorked(double work);
-
-	/**
-	 * Returns whether cancelation of current operation has been requested.
-	 * Long-running operations should poll to see if cancelation
-	 * has been requested.
-	 *
-	 * @return <code>true</code> if cancellation has been requested,
-	 *    and <code>false</code> otherwise
-	 * @see #setCanceled(boolean)
-	 */
-	public boolean isCanceled();
-
-	/**
-	 * Sets the cancel state to the given value.
-	 * 
-	 * @param value <code>true</code> indicates that cancelation has
-	 *     been requested (but not necessarily acknowledged);
-	 *     <code>false</code> clears this flag
-	 * @see #isCanceled()
-	 */
-	public void setCanceled(boolean value);
-
-	/**
-	 * Sets the task name to the given value. This method is used to 
-	 * restore the task label after a nested operation was executed. 
-	 * Normally there is no need for clients to call this method.
-	 *
-	 * @param name the name (or description) of the main task
-	 * @see #beginTask(java.lang.String, int)
-	 */
-	public void setTaskName(String name);
-
-	/**
-	 * Notifies that a subtask of the main task is beginning.
-	 * Subtasks are optional; the main task might not have subtasks.
-	 *
-	 * @param name the name (or description) of the subtask
-	 */
-	public void subTask(String name);
-
-	/**
-	 * Notifies that a given number of work unit of the main task
-	 * has been completed. Note that this amount represents an
-	 * installment, as opposed to a cumulative amount of work done
-	 * to date.
-	 *
-	 * @param work the number of work units just completed
-	 */
-	public void worked(int work);
-}
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/IProgressMonitorWithBlocking.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/IProgressMonitorWithBlocking.java
deleted file mode 100644
index 3d0e358..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/IProgressMonitorWithBlocking.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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 - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.core.runtime;
-
-/**
- * An extension to the IProgressMonitor interface for monitors that want to
- * support feedback when an activity is blocked due to concurrent activity in
- * another thread.
- * <p>
- * When a monitor that supports this extension is passed to an operation, the
- * operation should call <code>setBlocked</code> whenever it knows that it
- * must wait for a lock that is currently held by another thread. The operation
- * should continue to check for and respond to cancelation requests while
- * blocked. When the operation is no longer blocked, it must call <code>clearBlocked</code>
- * to clear the blocked state.
- * <p>
- * This interface can be used without OSGi running.
- * </p><p>
- * Clients may implement this interface.
- * </p>
- * @see IProgressMonitor
- * @since 3.0
- */
-public interface IProgressMonitorWithBlocking extends IProgressMonitor {
-	/**
-	 * Indicates that this operation is blocked by some background activity. If
-	 * a running operation ever calls <code>setBlocked</code>, it must
-	 * eventually call <code>clearBlocked</code> before the operation
-	 * completes.
-	 * <p>
-	 * If the caller is blocked by a currently executing job, this method will return
-	 * an <code>IJobStatus</code> indicating the job that is currently blocking
-	 * the caller. If this blocking job is not known, this method will return a plain
-	 * informational <code>IStatus</code> object.
-	 * </p>
-	 * 
-	 * @param reason an optional status object whose message describes the
-	 * reason why this operation is blocked, or <code>null</code> if this
-	 * information is not available.
-	 * @see #clearBlocked()
-	 * @see org.eclipse.core.runtime.jobs.IJobStatus
-	 */
-	public void setBlocked(IStatus reason);
-
-	/**
-	 * Clears the blocked state of the running operation. If a running
-	 * operation ever calls <code>setBlocked</code>, it must eventually call
-	 * <code>clearBlocked</code> before the operation completes.
-	 * 
-	 * @see #setBlocked(IStatus)
-	 */
-	public void clearBlocked();
-
-}
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/ISafeRunnable.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/ISafeRunnable.java
deleted file mode 100644
index d321d35..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/ISafeRunnable.java
+++ /dev/null
@@ -1,49 +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.core.runtime;
-
-/**
- * Safe runnables represent blocks of code and associated exception
- * handlers.  They are typically used when a plug-in needs to call some
- * untrusted code (e.g., code contributed by another plug-in via an
- * extension).
- * <p>
- * This interface can be used without OSGi running.
- * </p><p>
- * Clients may implement this interface.
- * </p>
- * @see Platform#run(ISafeRunnable)
- */
-public interface ISafeRunnable {
-	/**
-	 * Handles an exception thrown by this runnable's <code>run</code>
-	 * method.  The processing done here should be specific to the
-	 * particular usecase for this runnable.  Generalized exception
-	 * processing (e.g., logging in the platform's log) is done by the
-	 * Platform's run mechanism.
-	 *
-	 * @param exception an exception which occurred during processing
-	 *		the body of this runnable (i.e., in <code>run()</code>)
-	 * @see Platform#run(ISafeRunnable)
-	 */
-	public void handleException(Throwable exception);
-
-	/**
-	 * Runs this runnable.  Any exceptions thrown from this method will
-	 * be passed to this runnable's <code>handleException</code>
-	 * method.
-	 *
-	 * @exception Exception if a problem occurred while running this method.
-	 *		The exception will be processed by <code>handleException</code>
-	 * @see Platform#run(ISafeRunnable)
-	 */
-	public void run() throws Exception;
-}
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/IStatus.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/IStatus.java
deleted file mode 100644
index f146519..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/IStatus.java
+++ /dev/null
@@ -1,186 +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.core.runtime;
-
-/**
- * A status object represents the outcome of an operation.
- * All <code>CoreException</code>s carry a status object to indicate 
- * what went wrong. Status objects are also returned by methods needing 
- * to provide details of failures (e.g., validation methods).
- * <p>
- * A status carries the following information:
- * <ul>
- * <li> plug-in identifier (required)</li>
- * <li> severity (required)</li>
- * <li> status code (required)</li>
- * <li> message (required) - localized to current locale</li>
- * <li> exception (optional) - for problems stemming from a failure at
- *    a lower level</li>
- * </ul>
- * Some status objects, known as multi-statuses, have other status objects 
- * as children.
- * </p>
- * <p>
- * The class <code>Status</code> is the standard public implementation
- * of status objects; the subclass <code>MultiStatus</code> is the
- * implements multi-status objects.
- * </p><p>
- * This interface can be used without OSGi running.
- * </p>
- * @see MultiStatus
- * @see Status
- */
-public interface IStatus {
-
-	/** Status severity constant (value 0) indicating this status represents the nominal case.
-	 * This constant is also used as the status code representing the nominal case.
-	 * @see #getSeverity()
-	 * @see #isOK()
-	 */
-	public static final int OK = 0;
-
-	/** Status type severity (bit mask, value 1) indicating this status is informational only.
-	 * @see #getSeverity()
-	 * @see #matches(int)
-	 */
-	public static final int INFO = 0x01;
-
-	/** Status type severity (bit mask, value 2) indicating this status represents a warning.
-	 * @see #getSeverity()
-	 * @see #matches(int)
-	 */
-	public static final int WARNING = 0x02;
-
-	/** Status type severity (bit mask, value 4) indicating this status represents an error.
-	 * @see #getSeverity()
-	 * @see #matches(int)
-	 */
-	public static final int ERROR = 0x04;
-
-	/** Status type severity (bit mask, value 8) indicating this status represents a
-	 * cancelation
-	 * @see #getSeverity()
-	 * @see #matches(int)
-	 * @since 3.0
-	 */
-	public static final int CANCEL = 0x08;
-
-	/**
-	 * Returns a list of status object immediately contained in this
-	 * multi-status, or an empty list if this is not a multi-status.
-	 *
-	 * @return an array of status objects
-	 * @see #isMultiStatus()
-	 */
-	public IStatus[] getChildren();
-
-	/**
-	 * Returns the plug-in-specific status code describing the outcome.
-	 *
-	 * @return plug-in-specific status code
-	 */
-	public int getCode();
-
-	/**
-	 * Returns the relevant low-level exception, or <code>null</code> if none. 
-	 * For example, when an operation fails because of a network communications
-	 * failure, this might return the <code>java.io.IOException</code>
-	 * describing the exact nature of that failure.
-	 *
-	 * @return the relevant low-level exception, or <code>null</code> if none
-	 */
-	public Throwable getException();
-
-	/**
-	 * Returns the message describing the outcome.
-	 * The message is localized to the current locale.
-	 *
-	 * @return a localized message
-	 */
-	public String getMessage();
-
-	/**
-	 * Returns the unique identifier of the plug-in associated with this status
-	 * (this is the plug-in that defines the meaning of the status code).
-	 *
-	 * @return the unique identifier of the relevant plug-in
-	 */
-	public String getPlugin();
-
-	/**
-	 * Returns the severity. The severities are as follows (in
-	 * descending order):
-	 * <ul>
-	 * <li><code>CANCEL</code> - cancelation occurred</li>
-	 * <li><code>ERROR</code> - a serious error (most severe)</li>
-	 * <li><code>WARNING</code> - a warning (less severe)</li>
-	 * <li><code>INFO</code> - an informational ("fyi") message (least severe)</li>
-	 * <li><code>OK</code> - everything is just fine</li>
-	 * </ul>
-	 * <p>
-	 * The severity of a multi-status is defined to be the maximum
-	 * severity of any of its children, or <code>OK</code> if it has
-	 * no children.
-	 * </p>
-	 *
-	 * @return the severity: one of <code>OK</code>, <code>ERROR</code>, 
-	 * <code>INFO</code>, <code>WARNING</code>,  or <code>CANCEL</code>
-	 * @see #matches(int)
-	 */
-	public int getSeverity();
-
-	/**
-	 * Returns whether this status is a multi-status.
-	 * A multi-status describes the outcome of an operation
-	 * involving multiple operands.
-	 * <p>
-	 * The severity of a multi-status is derived from the severities
-	 * of its children; a multi-status with no children is
-	 * <code>OK</code> by definition.
-	 * A multi-status carries a plug-in identifier, a status code,
-	 * a message, and an optional exception. Clients may treat
-	 * multi-status objects in a multi-status unaware way.
-	 * </p>
-	 *
-	 * @return <code>true</code> for a multi-status, 
-	 *    <code>false</code> otherwise
-	 * @see #getChildren()
-	 */
-	public boolean isMultiStatus();
-
-	/**
-	 * Returns whether this status indicates everything is okay
-	 * (neither info, warning, nor error).
-	 *
-	 * @return <code>true</code> if this status has severity
-	 *    <code>OK</code>, and <code>false</code> otherwise
-	 */
-	public boolean isOK();
-
-	/**
-	 * Returns whether the severity of this status matches the given
-	 * severity mask. Note that a status with severity <code>OK</code>
-	 * will never match; use <code>isOK</code> instead to detect
-	 * a status with a severity of <code>OK</code>.
-	 *
-	 * @param severityMask a mask formed by bitwise or'ing severity mask
-	 *    constants (<code>ERROR</code>, <code>WARNING</code>,
-	 *    <code>INFO</code>, <code>CANCEL</code>)
-	 * @return <code>true</code> if there is at least one match, 
-	 *    <code>false</code> if there are no matches
-	 * @see #getSeverity()
-	 * @see #CANCEL
-	 * @see #ERROR
-	 * @see #WARNING
-	 * @see #INFO
-	 */
-	public boolean matches(int severityMask);
-}
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/ListenerList.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/ListenerList.java
deleted file mode 100644
index 14bc042..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/ListenerList.java
+++ /dev/null
@@ -1,190 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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.runtime;
-
-/**
- * This class is a thread safe list that is designed for storing lists of listeners.
- * The implementation is optimized for minimal memory footprint, frequent reads 
- * and infrequent writes.  Modification of the list is synchronized and relatively
- * expensive, while accessing the listeners is very fast.  Readers are given access 
- * to the underlying array data structure for reading, with the trust that they will 
- * not modify the underlying array.
- * <p>
- * <a name="same">A listener list handles the <i>same</i> listener being added 
- * multiple times, and tolerates removal of listeners that are the same as other
- * listeners in the list.  For this purpose, listeners can be compared with each other 
- * using either equality or identity, as specified in the list constructor.
- * </p>
- * <p>
- * Use the <code>getListeners</code> method when notifying listeners. The recommended
- * code sequence for notifying all registered listeners of say,
- * <code>FooListener.eventHappened</code>, is:
- * 
- * <pre>
- * Object[] listeners = myListenerList.getListeners();
- * for (int i = 0; i &lt; listeners.length; ++i) {
- * 	((FooListener) listeners[i]).eventHappened(event);
- * }
- * </pre>
- * 
- * </p><p>
- * This class can be used without OSGi running.
- * </p>
- * @since org.eclipse.equinox.common 3.2
- */
-public class ListenerList {
-
-	/**
-	 * The empty array singleton instance.
-	 */
-	private static final Object[] EmptyArray = new Object[0];
-
-	/**
-	 * Mode constant (value 0) indicating that listeners should be considered
-	 * the <a href="#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.
-	 */
-	public static final int IDENTITY = 1;
-
-	/**
-	 * Indicates the comparison mode used to determine if two
-	 * listeners are equivalent
-	 */
-	private final boolean identity;
-
-	/**
-	 * The list of listeners.  Initially empty but initialized
-	 * to an array of size capacity the first time a listener is added.
-	 * Maintains invariant: listeners != null
-	 */
-	private volatile Object[] listeners = EmptyArray;
-
-	/**
-	 * Creates a listener list in which listeners are compared using equality.
-	 */
-	public ListenerList() {
-		this(EQUALITY);
-	}
-
-	/**
-	 * 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>.
-	 */
-	public ListenerList(int mode) {
-		if (mode != EQUALITY && mode != IDENTITY)
-			throw new IllegalArgumentException();
-		this.identity = mode == IDENTITY;
-	}
-
-	/**
-	 * Adds a listener to this list. This method has no effect if the <a href="#same">same</a>
-	 * listener is already registered.
-	 * 
-	 * @param listener the listener to add
-	 */
-	public synchronized void add(Object listener) {
-		// This method is synchronized to protect against multiple threads adding 
-		// or removing listeners concurrently. This does not block concurrent readers.
-		if (listener == null)
-			throw new IllegalArgumentException();
-		// check for duplicates 
-		final int oldSize = listeners.length;
-		for (int i = 0; i < oldSize; ++i) {
-			Object listener2 = listeners[i];
-			if (identity ? listener == listener2 : listener.equals(listener2))
-				return;
-		}
-		// Thread safety: create new array to avoid affecting concurrent readers
-		Object[] newListeners = new Object[oldSize + 1];
-		System.arraycopy(listeners, 0, newListeners, 0, oldSize);
-		newListeners[oldSize] = listener;
-		//atomic assignment
-		this.listeners = newListeners;
-	}
-
-	/**
-	 * Returns an array containing all the registered listeners.
-	 * The resulting array is unaffected by subsequent adds or removes.
-	 * If there are no listeners registered, the result is an empty array.
-	 * Use this method when notifying listeners, so that any modifications
-	 * to the listener list during the notification will have no effect on 
-	 * the notification itself.
-	 * <p>
-	 * Note: Callers of this method <b>must not</b> modify the returned array. 
-	 *
-	 * @return the list of registered listeners
-	 */
-	public Object[] getListeners() {
-		return listeners;
-	}
-
-	/**
-	 * Returns whether this listener list is empty.
-	 *
-	 * @return <code>true</code> if there are no registered listeners, and
-	 *   <code>false</code> otherwise
-	 */
-	public boolean isEmpty() {
-		return listeners.length == 0;
-	}
-
-	/**
-	 * Removes a listener from this list. Has no effect if the <a href="#same">same</a> 
-	 * listener was not already registered.
-	 *
-	 * @param listener the listener to remove
-	 */
-	public synchronized void remove(Object listener) {
-		// This method is synchronized to protect against multiple threads adding 
-		// or removing listeners concurrently. This does not block concurrent readers.
-		if (listener == null)
-			throw new IllegalArgumentException();
-		int oldSize = listeners.length;
-		for (int i = 0; i < oldSize; ++i) {
-			Object listener2 = listeners[i];
-			if (identity ? listener == listener2 : listener.equals(listener2)) {
-				if (oldSize == 1) {
-					listeners = EmptyArray;
-				} else {
-					// Thread safety: create new array to avoid affecting concurrent readers
-					Object[] newListeners = new Object[oldSize - 1];
-					System.arraycopy(listeners, 0, newListeners, 0, i);
-					System.arraycopy(listeners, i + 1, newListeners, i, oldSize - i - 1);
-					//atomic assignment to field
-					this.listeners = newListeners;
-				}
-				return;
-			}
-		}
-	}
-
-	/**
-	 * Returns the number of registered listeners.
-	 *
-	 * @return the number of registered listeners
-	 */
-	public int size() {
-		return listeners.length;
-	}
-	
-    /**
-     * Removes all listeners from this list.
-     */
-    public synchronized void clear() {
-            listeners = EmptyArray;
-    }
-}
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/MultiStatus.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/MultiStatus.java
deleted file mode 100644
index 8f74789..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/MultiStatus.java
+++ /dev/null
@@ -1,149 +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.core.runtime;
-
-/**
- * A concrete multi-status implementation, 
- * suitable either for instantiating or subclassing.
- * <p>
- * This class can be used without OSGi running.
- * </p>
- */
-public class MultiStatus extends Status {
-
-	/** List of child statuses.
-	 */
-	private IStatus[] children;
-
-	/**
-	 * Creates and returns a new multi-status object with the given children.
-	 *
-	 * @param pluginId the unique identifier of the relevant plug-in
-	 * @param code the plug-in-specific status code
-	 * @param newChildren the list of children status objects
-	 * @param message a human-readable message, localized to the
-	 *    current locale
-	 * @param exception a low-level exception, or <code>null</code> if not
-	 *    applicable 
-	 */
-	public MultiStatus(String pluginId, int code, IStatus[] newChildren, String message, Throwable exception) {
-		this(pluginId, code, message, exception);
-		Assert.isLegal(newChildren != null);
-		int maxSeverity = getSeverity();
-		for (int i = 0; i < newChildren.length; i++) {
-			Assert.isLegal(newChildren[i] != null);
-			int severity = newChildren[i].getSeverity();
-			if (severity > maxSeverity)
-				maxSeverity = severity;
-		}
-		this.children = new IStatus[newChildren.length];
-		setSeverity(maxSeverity);
-		System.arraycopy(newChildren, 0, this.children, 0, newChildren.length);
-	}
-
-	/**
-	 * Creates and returns a new multi-status object with no children.
-	 *
-	 * @param pluginId the unique identifier of the relevant plug-in
-	 * @param code the plug-in-specific status code
-	 * @param message a human-readable message, localized to the
-	 *    current locale
-	 * @param exception a low-level exception, or <code>null</code> if not
-	 *    applicable 
-	 */
-	public MultiStatus(String pluginId, int code, String message, Throwable exception) {
-		super(OK, pluginId, code, message, exception);
-		children = new IStatus[0];
-	}
-
-	/**
-	 * Adds the given status to this multi-status.
-	 *
-	 * @param status the new child status
-	 */
-	public void add(IStatus status) {
-		Assert.isLegal(status != null);
-		IStatus[] result = new IStatus[children.length + 1];
-		System.arraycopy(children, 0, result, 0, children.length);
-		result[result.length - 1] = status;
-		children = result;
-		int newSev = status.getSeverity();
-		if (newSev > getSeverity()) {
-			setSeverity(newSev);
-		}
-	}
-
-	/**
-	 * Adds all of the children of the given status to this multi-status.
-	 * Does nothing if the given status has no children (which includes
-	 * the case where it is not a multi-status).
-	 *
-	 * @param status the status whose children are to be added to this one
-	 */
-	public void addAll(IStatus status) {
-		Assert.isLegal(status != null);
-		IStatus[] statuses = status.getChildren();
-		for (int i = 0; i < statuses.length; i++) {
-			add(statuses[i]);
-		}
-	}
-
-	/* (Intentionally not javadoc'd)
-	 * Implements the corresponding method on <code>IStatus</code>.
-	 */
-	public IStatus[] getChildren() {
-		return children;
-	}
-
-	/* (Intentionally not javadoc'd)
-	 * Implements the corresponding method on <code>IStatus</code>.
-	 */
-	public boolean isMultiStatus() {
-		return true;
-	}
-
-	/**
-	 * Merges the given status into this multi-status.
-	 * Equivalent to <code>add(status)</code> if the
-	 * given status is not a multi-status. 
-	 * Equivalent to <code>addAll(status)</code> if the
-	 * given status is a multi-status. 
-	 *
-	 * @param status the status to merge into this one
-	 * @see #add(IStatus)
-	 * @see #addAll(IStatus)
-	 */
-	public void merge(IStatus status) {
-		Assert.isLegal(status != null);
-		if (!status.isMultiStatus()) {
-			add(status);
-		} else {
-			addAll(status);
-		}
-	}
-
-	/**
-	 * Returns a string representation of the status, suitable 
-	 * for debugging purposes only.
-	 */
-	public String toString() {
-		StringBuffer buf = new StringBuffer(super.toString());
-		buf.append(" children=["); //$NON-NLS-1$
-		for (int i = 0; i < children.length; i++) {
-			if (i != 0) {
-				buf.append(" "); //$NON-NLS-1$
-			}
-			buf.append(children[i].toString());
-		}
-		buf.append("]"); //$NON-NLS-1$
-		return buf.toString();
-	}
-}
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/NullProgressMonitor.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/NullProgressMonitor.java
deleted file mode 100644
index 5a7c261..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/NullProgressMonitor.java
+++ /dev/null
@@ -1,126 +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.core.runtime;
-
-/**
- * A default progress monitor implementation suitable for
- * subclassing.
- * <p>
- * This implementation supports cancelation. The default
- * implementations of the other methods do nothing.
- * </p><p>
- * This class can be used without OSGi running.
- * </p>
- */
-public class NullProgressMonitor implements IProgressMonitor {
-
-	/**
-	 * Indicates whether cancel has been requested.
-	 */
-	private boolean cancelled = false;
-
-	/**
-	 * Constructs a new progress monitor.
-	 */
-	public NullProgressMonitor() {
-		super();
-	}
-
-	/**
-	 * This implementation does nothing. 
-	 * Subclasses may override this method to do interesting
-	 * processing when a task begins.
-	 * 
-	 * @see IProgressMonitor#beginTask(String, int)
-	 */
-	public void beginTask(String name, int totalWork) {
-		// do nothing
-	}
-
-	/**
-	 * This implementation does nothing.
-	 * Subclasses may override this method to do interesting
-	 * processing when a task is done.
-	 * 
-	 * @see IProgressMonitor#done()
-	 */
-	public void done() {
-		// do nothing
-	}
-
-	/**
-	 * This implementation does nothing.
-	 * Subclasses may override this method.
-	 * 
-	 * @see IProgressMonitor#internalWorked(double)
-	 */
-	public void internalWorked(double work) {
-		// do nothing
-	}
-
-	/**
-	 * This implementation returns the value of the internal 
-	 * state variable set by <code>setCanceled</code>.
-	 * Subclasses which override this method should
-	 * override <code>setCanceled</code> as well.
-	 *
-	 * @see IProgressMonitor#isCanceled()
-	 * @see IProgressMonitor#setCanceled(boolean)
-	 */
-	public boolean isCanceled() {
-		return cancelled;
-	}
-
-	/**
-	 * This implementation sets the value of an internal state variable.
-	 * Subclasses which override this method should override 
-	 * <code>isCanceled</code> as well.
-	 *
-	 * @see IProgressMonitor#isCanceled()
-	 * @see IProgressMonitor#setCanceled(boolean)
-	 */
-	public void setCanceled(boolean cancelled) {
-		this.cancelled = cancelled;
-	}
-
-	/**
-	 * This implementation does nothing.
-	 * Subclasses may override this method to do something
-	 * with the name of the task.
-	 * 
-	 * @see IProgressMonitor#setTaskName(String)
-	 */
-	public void setTaskName(String name) {
-		// do nothing
-	}
-
-	/**
-	 * This implementation does nothing.
-	 * Subclasses may override this method to do interesting
-	 * processing when a subtask begins.
-	 * 
-	 * @see IProgressMonitor#subTask(String)
-	 */
-	public void subTask(String name) {
-		// do nothing
-	}
-
-	/**
-	 * This implementation does nothing.
-	 * Subclasses may override this method to do interesting
-	 * processing when some work has been completed.
-	 * 
-	 * @see IProgressMonitor#worked(int)
-	 */
-	public void worked(int work) {
-		// do nothing
-	}
-}
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/OperationCanceledException.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/OperationCanceledException.java
deleted file mode 100644
index 75bfffd..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/OperationCanceledException.java
+++ /dev/null
@@ -1,44 +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.core.runtime;
-
-/**
- * This exception is thrown to blow out of a long-running method 
- * when the user cancels it.
- * <p>
- * This class can be used without OSGi running.
- * </p><p>
- * This class is not intended to be subclassed by clients but
- * may be instantiated.
- * </p>
- */
-public final class OperationCanceledException extends RuntimeException {
-	/**
-	 * All serializable objects should have a stable serialVersionUID
-	 */
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * Creates a new exception.
-	 */
-	public OperationCanceledException() {
-		super();
-	}
-
-	/**
-	 * Creates a new exception with the given message.
-	 * 
-	 * @param message the message for the exception
-	 */
-	public OperationCanceledException(String message) {
-		super(message);
-	}
-}
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/Path.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/Path.java
deleted file mode 100644
index 73ea9ee..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/Path.java
+++ /dev/null
@@ -1,989 +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.core.runtime;
-
-import java.io.File;
-
-/** 
- * The standard implementation of the <code>IPath</code> interface.
- * Paths are always maintained in canonicalized form.  That is, parent
- * references (i.e., <code>../../</code>) and duplicate separators are 
- * resolved.  For example,
- * <pre>     new Path("/a/b").append("../foo/bar")</pre>
- * will yield the path
- * <pre>     /a/foo/bar</pre>
- * <p>
- * This class can be used without OSGi running.
- * </p><p>
- * This class is not intended to be subclassed by clients but
- * may be instantiated.
- * </p>
- * @see IPath
- */
-public class Path implements IPath, Cloneable {
-	/** masks for separator values */
-	private static final int HAS_LEADING = 1;
-	private static final int IS_UNC = 2;
-	private static final int HAS_TRAILING = 4;
-
-	private static final int ALL_SEPARATORS = HAS_LEADING | IS_UNC | HAS_TRAILING;
-
-	/** Constant empty string value. */
-	private static final String EMPTY_STRING = ""; //$NON-NLS-1$
-
-	/** Constant value indicating no segments */
-	private static final String[] NO_SEGMENTS = new String[0];
-
-	/** Constant value containing the empty path with no device. */
-	public static final Path EMPTY = new Path(EMPTY_STRING);
-
-	/** Mask for all bits that are involved in the hash code */
-	private static final int HASH_MASK = ~HAS_TRAILING;
-
-
-	/** Constant root path string (<code>"/"</code>). */
-	private static final String ROOT_STRING = "/"; //$NON-NLS-1$
-
-	/** Constant value containing the root path with no device. */
-	public static final Path ROOT = new Path(ROOT_STRING);
-	
-	/** Constant value indicating if the current platform is Windows */
-	private static final boolean WINDOWS = java.io.File.separatorChar == '\\';
-
-	/** The device id string. May be null if there is no device. */
-	private String device = null;
-
-	//Private implementation note: the segments and separators 
-	//arrays are never modified, so that they can be shared between 
-	//path instances
-
-	/** The path segments */
-	private String[] segments;
-
-	/** flags indicating separators (has leading, is UNC, has trailing) */
-	private int separators;
-
-	/** 
-	 * Constructs a new path from the given string path.
-	 * The string path must represent a valid file system path
-	 * on the local file system. 
-	 * The path is canonicalized and double slashes are removed
-	 * except at the beginning. (to handle UNC paths). All forward
-	 * slashes ('/') are treated as segment delimiters, and any
-	 * segment and device delimiters for the local file system are
-	 * also respected.
-	 *
-	 * @param pathString the portable string path
-	 * @see IPath#toPortableString()
-	 * @since 3.1
-	 */
-	public static IPath fromOSString(String pathString) {
-		return new Path(pathString);
-	}
-	
-	/** 
-	 * Constructs a new path from the given path string.
-	 * The path string must have been produced by a previous
-	 * call to <code>IPath.toPortableString</code>.
-	 *
-	 * @param pathString the portable path string
-	 * @see IPath#toPortableString()
-	 * @since 3.1
-	 */
-	public static IPath fromPortableString(String pathString) {
-		int firstMatch = pathString.indexOf(DEVICE_SEPARATOR) +1;
-		//no extra work required if no device characters
-		if (firstMatch <= 0)
-			return new Path().initialize(null, pathString);
-		//if we find a single colon, then the path has a device
-		String devicePart = null;
-		int pathLength = pathString.length();
-		if (firstMatch == pathLength || pathString.charAt(firstMatch) != DEVICE_SEPARATOR) {
-			devicePart = pathString.substring(0, firstMatch);
-			pathString = pathString.substring(firstMatch, pathLength);
-		}
-		//optimize for no colon literals
-		if (pathString.indexOf(DEVICE_SEPARATOR) == -1) 
-			return new Path().initialize(devicePart, pathString);
-		//contract colon literals
-		char[] chars = pathString.toCharArray();
-		int readOffset = 0, writeOffset = 0, length = chars.length;
-		while (readOffset < length) {
-			if (chars[readOffset] == DEVICE_SEPARATOR)
-				if (++readOffset >= length)
-					break;
-			chars[writeOffset++] = chars[readOffset++];
-		}
-		return new Path().initialize(devicePart, new String(chars, 0, writeOffset));
-	}
-	
-	/* (Intentionally not included in javadoc)
-	 * Private constructor.
-	 */
-	private Path() {
-		// not allowed
-	}
-
-	/** 
-	 * Constructs a new path from the given string path.
-	 * The string path must represent a valid file system path
-	 * on the local file system. 
-	 * The path is canonicalized and double slashes are removed
-	 * except at the beginning. (to handle UNC paths). All forward
-	 * slashes ('/') are treated as segment delimiters, and any
-	 * segment and device delimiters for the local file system are
-	 * also respected (such as colon (':') and backslash ('\') on some file systems).
-	 *
-	 * @param fullPath the string path
-	 * @see #isValidPath(String)
-	 */
-	public Path(String fullPath) {
-		String devicePart = null;
-		if (WINDOWS) {
-			//convert backslash to forward slash
-			fullPath = fullPath.indexOf('\\') == -1 ? fullPath : fullPath.replace('\\', SEPARATOR);
-			//extract device
-			int i = fullPath.indexOf(DEVICE_SEPARATOR);
-			if (i != -1) {
-				//remove leading slash from device part to handle output of URL.getFile()
-				int start = fullPath.charAt(0) == SEPARATOR ? 1 : 0;
-				devicePart = fullPath.substring(start, i + 1);
-				fullPath = fullPath.substring(i + 1, fullPath.length());
-			}
-		}
-		initialize(devicePart, fullPath);
-	}
-
-	/** 
-	 * Constructs a new path from the given device id and string path.
-	 * The given string path must be valid.
-	 * The path is canonicalized and double slashes are removed except
-	 * at the beginning (to handle UNC paths). All forward
-	 * slashes ('/') are treated as segment delimiters, and any
-	 * segment delimiters for the local file system are
-	 * also respected (such as backslash ('\') on some file systems).
-	 *
-	 * @param device the device id
-	 * @param path the string path
-	 * @see #isValidPath(String)
-	 * @see #setDevice(String)
-	 */
-	public Path(String device, String path) {
-		if (WINDOWS) {
-			//convert backslash to forward slash
-			path = path.indexOf('\\') == -1 ? path : path.replace('\\', SEPARATOR);
-		}
-		initialize(device, path);
-	}
-
-	/* (Intentionally not included in javadoc)
-	 * Private constructor.
-	 */
-	private Path(String device, String[] segments, int _separators) {
-		// no segment validations are done for performance reasons	
-		this.segments = segments;
-		this.device = device;
-		//hash code is cached in all but the bottom three bits of the separators field
-		this.separators = (computeHashCode() << 3) | (_separators & ALL_SEPARATORS);
-	}
-
-	/* (Intentionally not included in javadoc)
-	 * @see IPath#addFileExtension
-	 */
-	public IPath addFileExtension(String extension) {
-		if (isRoot() || isEmpty() || hasTrailingSeparator())
-			return this;
-		int len = segments.length;
-		String[] newSegments = new String[len];
-		System.arraycopy(segments, 0, newSegments, 0, len - 1);
-		newSegments[len - 1] = segments[len - 1] + '.' + extension;
-		return new Path(device, newSegments, separators);
-	}
-
-	/* (Intentionally not included in javadoc)
-	 * @see IPath#addTrailingSeparator
-	 */
-	public IPath addTrailingSeparator() {
-		if (hasTrailingSeparator() || isRoot()) {
-			return this;
-		}
-		//XXX workaround, see 1GIGQ9V
-		if (isEmpty()) {
-			return new Path(device, segments, HAS_LEADING);
-		}
-		return new Path(device, segments, separators | HAS_TRAILING);
-	}
-
-	/* (Intentionally not included in javadoc)
-	 * @see IPath#append(IPath)
-	 */
-	public IPath append(IPath tail) {
-		//optimize some easy cases
-		if (tail == null || tail.segmentCount() == 0)
-			return this;
-		//these call chains look expensive, but in most cases they are no-ops
-		if (this.isEmpty())
-			return tail.setDevice(device).makeRelative().makeUNC(isUNC());
-		if (this.isRoot())
-			return tail.setDevice(device).makeAbsolute().makeUNC(isUNC());
-
-		//concatenate the two segment arrays
-		int myLen = segments.length;
-		int tailLen = tail.segmentCount();
-		String[] newSegments = new String[myLen + tailLen];
-		System.arraycopy(segments, 0, newSegments, 0, myLen);
-		for (int i = 0; i < tailLen; i++) {
-			newSegments[myLen + i] = tail.segment(i);
-		}
-		//use my leading separators and the tail's trailing separator
-		Path result = new Path(device, newSegments, (separators & (HAS_LEADING | IS_UNC)) | (tail.hasTrailingSeparator() ? HAS_TRAILING : 0));
-		String tailFirstSegment = newSegments[myLen];
-		if (tailFirstSegment.equals("..") || tailFirstSegment.equals(".")) { //$NON-NLS-1$ //$NON-NLS-2$
-			result.canonicalize();
-		}
-		return result;
-	}
-
-	/* (Intentionally not included in javadoc)
-	 * @see IPath#append(java.lang.String)
-	 */
-	public IPath append(String tail) {
-		//optimize addition of a single segment
-		if (tail.indexOf(SEPARATOR) == -1 && tail.indexOf("\\") == -1 && tail.indexOf(DEVICE_SEPARATOR) == -1) { //$NON-NLS-1$
-			int tailLength = tail.length();
-			if (tailLength < 3) {
-				//some special cases
-				if (tailLength == 0 || ".".equals(tail)) { //$NON-NLS-1$
-					return this;
-				}
-				if ("..".equals(tail)) //$NON-NLS-1$
-					return removeLastSegments(1);
-			}
-			//just add the segment
-			int myLen = segments.length;
-			String[] newSegments = new String[myLen + 1];
-			System.arraycopy(segments, 0, newSegments, 0, myLen);
-			newSegments[myLen] = tail;
-			return new Path(device, newSegments, separators & ~HAS_TRAILING);
-		}
-		//go with easy implementation
-		return append(new Path(tail));
-	}
-
-	/**
-	 * Destructively converts this path to its canonical form.
-	 * <p>
-	 * In its canonical form, a path does not have any
-	 * "." segments, and parent references ("..") are collapsed
-	 * where possible.
-	 * </p>
-	 * @return true if the path was modified, and false otherwise.
-	 */
-	private boolean canonicalize() {
-		//look for segments that need canonicalizing
-		for (int i = 0, max = segments.length; i < max; i++) {
-			String segment = segments[i];
-			if (segment.charAt(0) == '.' && (segment.equals("..") || segment.equals("."))) { //$NON-NLS-1$ //$NON-NLS-2$
-				//path needs to be canonicalized
-				collapseParentReferences();
-				//paths of length 0 have no trailing separator
-				if (segments.length == 0)
-					separators &= (HAS_LEADING | IS_UNC);
-				//recompute hash because canonicalize affects hash
-				separators = (separators & ALL_SEPARATORS) | (computeHashCode() << 3);
-				return true;
-			}
-		}
-		return false;
-	}
-
-	/* (Intentionally not included in javadoc)
-	 * Clones this object.
-	 */
-	public Object clone() {
-		try {
-			return super.clone();
-		} catch (CloneNotSupportedException e) {
-			return null;
-		}
-	}
-
-	/**
-	 * Destructively removes all occurrences of ".." segments from this path.
-	 */
-	private void collapseParentReferences() {
-		int segmentCount = segments.length;
-		String[] stack = new String[segmentCount];
-		int stackPointer = 0;
-		for (int i = 0; i < segmentCount; i++) {
-			String segment = segments[i];
-			if (segment.equals("..")) { //$NON-NLS-1$
-				if (stackPointer == 0) {
-					// if the stack is empty we are going out of our scope 
-					// so we need to accumulate segments.  But only if the original
-					// path is relative.  If it is absolute then we can't go any higher than
-					// root so simply toss the .. references.
-					if (!isAbsolute())
-						stack[stackPointer++] = segment; //stack push
-				} else {
-					// if the top is '..' then we are accumulating segments so don't pop
-					if ("..".equals(stack[stackPointer - 1])) //$NON-NLS-1$
-						stack[stackPointer++] = ".."; //$NON-NLS-1$
-					else
-						stackPointer--;
-					//stack pop
-				}
-				//collapse current references
-			} else if (!segment.equals(".") || (i == 0 && !isAbsolute())) //$NON-NLS-1$
-				stack[stackPointer++] = segment; //stack push
-		}
-		//if the number of segments hasn't changed, then no modification needed
-		if (stackPointer == segmentCount)
-			return;
-		//build the new segment array backwards by popping the stack
-		String[] newSegments = new String[stackPointer];
-		System.arraycopy(stack, 0, newSegments, 0, stackPointer);
-		this.segments = newSegments;
-	}
-
-	/**
-	 * Removes duplicate slashes from the given path, with the exception
-	 * of leading double slash which represents a UNC path.
-	 */
-	private String collapseSlashes(String path) {
-		int length = path.length();
-		// if the path is only 0, 1 or 2 chars long then it could not possibly have illegal
-		// duplicate slashes.
-		if (length < 3)
-			return path;
-		// check for an occurrence of // in the path.  Start at index 1 to ensure we skip leading UNC //
-		// If there are no // then there is nothing to collapse so just return.
-		if (path.indexOf("//", 1) == -1) //$NON-NLS-1$
-			return path;
-		// We found an occurrence of // in the path so do the slow collapse.
-		char[] result = new char[path.length()];
-		int count = 0;
-		boolean hasPrevious = false;
-		char[] characters = path.toCharArray();
-		for (int index = 0; index < characters.length; index++) {
-			char c = characters[index];
-			if (c == SEPARATOR) {
-				if (hasPrevious) {
-					// skip double slashes, except for beginning of UNC.
-					// note that a UNC path can't have a device.
-					if (device == null && index == 1) {
-						result[count] = c;
-						count++;
-					}
-				} else {
-					hasPrevious = true;
-					result[count] = c;
-					count++;
-				}
-			} else {
-				hasPrevious = false;
-				result[count] = c;
-				count++;
-			}
-		}
-		return new String(result, 0, count);
-	}
-
-	/* (Intentionally not included in javadoc)
-	 * Computes the hash code for this object.
-	 */
-	private int computeHashCode() {
-		int hash = device == null ? 17 : device.hashCode();
-		int segmentCount = segments.length;
-		for (int i = 0; i < segmentCount; i++) {
-			//this function tends to given a fairly even distribution
-			hash = hash * 37 + segments[i].hashCode();
-		}
-		return hash;
-	}
-
-	/* (Intentionally not included in javadoc)
-	 * Returns the size of the string that will be created by toString or toOSString.
-	 */
-	private int computeLength() {
-		int length = 0;
-		if (device != null)
-			length += device.length();
-		if ((separators & HAS_LEADING) != 0)
-			length++;
-		if ((separators & IS_UNC) != 0)
-			length++;
-		//add the segment lengths
-		int max = segments.length;
-		if (max > 0) {
-			for (int i = 0; i < max; i++) {
-				length += segments[i].length();
-			}
-			//add the separator lengths
-			length += max - 1;
-		}
-		if ((separators & HAS_TRAILING) != 0)
-			length++;
-		return length;
-	}
-
-	/* (Intentionally not included in javadoc)
-	 * Returns the number of segments in the given path
-	 */
-	private int computeSegmentCount(String path) {
-		int len = path.length();
-		if (len == 0 || (len == 1 && path.charAt(0) == SEPARATOR)) {
-			return 0;
-		}
-		int count = 1;
-		int prev = -1;
-		int i;
-		while ((i = path.indexOf(SEPARATOR, prev + 1)) != -1) {
-			if (i != prev + 1 && i != len) {
-				++count;
-			}
-			prev = i;
-		}
-		if (path.charAt(len - 1) == SEPARATOR) {
-			--count;
-		}
-		return count;
-	}
-
-	/**
-	 * Computes the segment array for the given canonicalized path.
-	 */
-	private String[] computeSegments(String path) {
-		// performance sensitive --- avoid creating garbage
-		int segmentCount = computeSegmentCount(path);
-		if (segmentCount == 0)
-			return NO_SEGMENTS;
-		String[] newSegments = new String[segmentCount];
-		int len = path.length();
-		// check for initial slash
-		int firstPosition = (path.charAt(0) == SEPARATOR) ? 1 : 0;
-		// check for UNC
-		if (firstPosition == 1 && len > 1 && (path.charAt(1) == SEPARATOR))
-			firstPosition = 2;
-		int lastPosition = (path.charAt(len - 1) != SEPARATOR) ? len - 1 : len - 2;
-		// for non-empty paths, the number of segments is 
-		// the number of slashes plus 1, ignoring any leading
-		// and trailing slashes
-		int next = firstPosition;
-		for (int i = 0; i < segmentCount; i++) {
-			int start = next;
-			int end = path.indexOf(SEPARATOR, next);
-			if (end == -1) {
-				newSegments[i] = path.substring(start, lastPosition + 1);
-			} else {
-				newSegments[i] = path.substring(start, end);
-			}
-			next = end + 1;
-		}
-		return newSegments;
-	}
-	/**
-	 * Returns the platform-neutral encoding of the given segment onto
-	 * the given string buffer. This escapes literal colon characters with double colons.
-	 */
-	private void encodeSegment(String string, StringBuffer buf) {
-		int len = string.length();
-		for (int i = 0; i < len; i++) {
-			char c = string.charAt(i);
-			buf.append(c);
-			if (c == DEVICE_SEPARATOR)
-				buf.append(DEVICE_SEPARATOR);
-		}
-	}
-
-	/* (Intentionally not included in javadoc)
-	 * Compares objects for equality.
-	 */
-	public boolean equals(Object obj) {
-		if (this == obj)
-			return true;
-		if (!(obj instanceof Path))
-			return false;
-		Path target = (Path) obj;
-		//check leading separators and hash code
-		if ((separators & HASH_MASK) != (target.separators & HASH_MASK))
-			return false;
-		String[] targetSegments = target.segments;
-		int i = segments.length;
-		//check segment count
-		if (i != targetSegments.length)
-			return false;
-		//check segments in reverse order - later segments more likely to differ
-		while (--i >= 0)
-			if (!segments[i].equals(targetSegments[i]))
-				return false;
-		//check device last (least likely to differ)
-		return device == target.device || (device != null && device.equals(target.device));
-	}
-
-	/* (Intentionally not included in javadoc)
-	 * @see IPath#getDevice
-	 */
-	public String getDevice() {
-		return device;
-	}
-
-	/* (Intentionally not included in javadoc)
-	 * @see IPath#getFileExtension
-	 */
-	public String getFileExtension() {
-		if (hasTrailingSeparator()) {
-			return null;
-		}
-		String lastSegment = lastSegment();
-		if (lastSegment == null) {
-			return null;
-		}
-		int index = lastSegment.lastIndexOf('.');
-		if (index == -1) {
-			return null;
-		}
-		return lastSegment.substring(index + 1);
-	}
-
-	/* (Intentionally not included in javadoc)
-	 * Computes the hash code for this object.
-	 */
-	public int hashCode() {
-		return separators & HASH_MASK;
-	}
-
-	/* (Intentionally not included in javadoc)
-	 * @see IPath#hasTrailingSeparator2
-	 */
-	public boolean hasTrailingSeparator() {
-		return (separators & HAS_TRAILING) != 0;
-	}
-
-	/*
-	 * Initialize the current path with the given string.
-	 */
-	private IPath initialize(String deviceString, String path) {
-		Assert.isNotNull(path);
-		this.device = deviceString;
-
-		path = collapseSlashes(path);
-		int len = path.length();
-
-		//compute the separators array
-		if (len < 2) {
-			if (len == 1 && path.charAt(0) == SEPARATOR) {
-				this.separators = HAS_LEADING;
-			} else {
-				this.separators = 0;
-			}
-		} else {
-			boolean hasLeading = path.charAt(0) == SEPARATOR;
-			boolean isUNC = hasLeading && path.charAt(1) == SEPARATOR;
-			//UNC path of length two has no trailing separator
-			boolean hasTrailing = !(isUNC && len == 2) && path.charAt(len - 1) == SEPARATOR;
-			separators = hasLeading ? HAS_LEADING : 0;
-			if (isUNC)
-				separators |= IS_UNC;
-			if (hasTrailing)
-				separators |= HAS_TRAILING;
-		}
-		//compute segments and ensure canonical form
-		segments = computeSegments(path);
-		if (!canonicalize()) {
-			//compute hash now because canonicalize didn't need to do it
-			separators = (separators & ALL_SEPARATORS) | (computeHashCode() << 3);
-		}
-		return this;
-	}
-
-	/* (Intentionally not included in javadoc)
-	 * @see IPath#isAbsolute
-	 */
-	public boolean isAbsolute() {
-		//it's absolute if it has a leading separator
-		return (separators & HAS_LEADING) != 0;
-	}
-
-	/* (Intentionally not included in javadoc)
-	 * @see IPath#isEmpty
-	 */
-	public boolean isEmpty() {
-		//true if no segments and no leading prefix
-		return segments.length == 0 && ((separators & ALL_SEPARATORS) != HAS_LEADING);
-
-	}
-
-	/* (Intentionally not included in javadoc)
-	 * @see IPath#isPrefixOf
-	 */
-	public boolean isPrefixOf(IPath anotherPath) {
-		if (device == null) {
-			if (anotherPath.getDevice() != null) {
-				return false;
-			}
-		} else {
-			if (!device.equalsIgnoreCase(anotherPath.getDevice())) {
-				return false;
-			}
-		}
-		if (isEmpty() || (isRoot() && anotherPath.isAbsolute())) {
-			return true;
-		}
-		int len = segments.length;
-		if (len > anotherPath.segmentCount()) {
-			return false;
-		}
-		for (int i = 0; i < len; i++) {
-			if (!segments[i].equals(anotherPath.segment(i)))
-				return false;
-		}
-		return true;
-	}
-
-	/* (Intentionally not included in javadoc)
-	 * @see IPath#isRoot
-	 */
-	public boolean isRoot() {
-		//must have no segments, a leading separator, and not be a UNC path.
-		return this == ROOT || (segments.length == 0 && ((separators & ALL_SEPARATORS) == HAS_LEADING));
-	}
-
-	/* (Intentionally not included in javadoc)
-	 * @see IPath#isUNC
-	 */
-	public boolean isUNC() {
-		if (device != null)
-			return false;
-		return (separators & IS_UNC) != 0;
-	}
-
-	/* (Intentionally not included in javadoc)
-	 * @see IPath#isValidPath(String)
-	 */
-	public boolean isValidPath(String path) {
-		Path test = new Path(path);
-		for (int i = 0, max = test.segmentCount(); i < max; i++) 
-			if (!isValidSegment(test.segment(i))) 
-				return false;
-		return true;
-	}
-
-	/* (Intentionally not included in javadoc)
-	 * @see IPath#isValidSegment(String)
-	 */
-	public boolean isValidSegment(String segment) {
-		int size = segment.length();
-		if (size == 0)
-			return false;
-		for (int i = 0; i < size; i++) {
-			char c = segment.charAt(i);
-			if (c == '/')
-				return false;
-			if (WINDOWS && (c == '\\' || c == ':'))
-				return false;
-		}
-		return true;
-	}
-
-	/* (Intentionally not included in javadoc)
-	 * @see IPath#lastSegment()
-	 */
-	public String lastSegment() {
-		int len = segments.length;
-		return len == 0 ? null : segments[len - 1];
-	}
-
-	/* (Intentionally not included in javadoc)
-	 * @see IPath#makeAbsolute()
-	 */
-	public IPath makeAbsolute() {
-		if (isAbsolute()) {
-			return this;
-		}
-		Path result = new Path(device, segments, separators | HAS_LEADING);
-		//may need canonicalizing if it has leading ".." or "." segments
-		if (result.segmentCount() > 0) {
-			String first = result.segment(0);
-			if (first.equals("..") || first.equals(".")) { //$NON-NLS-1$ //$NON-NLS-2$
-				result.canonicalize();
-			}
-		}
-		return result;
-	}
-
-	/* (Intentionally not included in javadoc)
-	 * @see IPath#makeRelative()
-	 */
-	public IPath makeRelative() {
-		if (!isAbsolute()) {
-			return this;
-		}
-		return new Path(device, segments, separators & HAS_TRAILING);
-	}
-
-	/* (Intentionally not included in javadoc)
-	 * @see IPath#makeUNC(boolean)
-	 */
-	public IPath makeUNC(boolean toUNC) {
-		// if we are already in the right form then just return
-		if (!(toUNC ^ isUNC()))
-			return this;
-
-		int newSeparators = this.separators;
-		if (toUNC) {
-			newSeparators |= HAS_LEADING | IS_UNC;
-		} else {
-			//mask out the UNC bit
-			newSeparators &= HAS_LEADING | HAS_TRAILING;
-		}
-		return new Path(toUNC ? null : device, segments, newSeparators);
-	}
-
-	/* (Intentionally not included in javadoc)
-	 * @see IPath#matchingFirstSegments(IPath)
-	 */
-	public int matchingFirstSegments(IPath anotherPath) {
-		Assert.isNotNull(anotherPath);
-		int anotherPathLen = anotherPath.segmentCount();
-		int max = Math.min(segments.length, anotherPathLen);
-		int count = 0;
-		for (int i = 0; i < max; i++) {
-			if (!segments[i].equals(anotherPath.segment(i))) {
-				return count;
-			}
-			count++;
-		}
-		return count;
-	}
-
-	/* (Intentionally not included in javadoc)
-	 * @see IPath#removeFileExtension()
-	 */
-	public IPath removeFileExtension() {
-		String extension = getFileExtension();
-		if (extension == null || extension.equals("")) { //$NON-NLS-1$
-			return this;
-		}
-		String lastSegment = lastSegment();
-		int index = lastSegment.lastIndexOf(extension) - 1;
-		return removeLastSegments(1).append(lastSegment.substring(0, index));
-	}
-
-	/* (Intentionally not included in javadoc)
-	 * @see IPath#removeFirstSegments(int)
-	 */
-	public IPath removeFirstSegments(int count) {
-		if (count == 0)
-			return this;
-		if (count >= segments.length) {
-			return new Path(device, NO_SEGMENTS, 0);
-		}
-		Assert.isLegal(count > 0);
-		int newSize = segments.length - count;
-		String[] newSegments = new String[newSize];
-		System.arraycopy(this.segments, count, newSegments, 0, newSize);
-
-		//result is always a relative path
-		return new Path(device, newSegments, separators & HAS_TRAILING);
-	}
-
-	/* (Intentionally not included in javadoc)
-	 * @see IPath#removeLastSegments(int)
-	 */
-	public IPath removeLastSegments(int count) {
-		if (count == 0)
-			return this;
-		if (count >= segments.length) {
-			//result will have no trailing separator
-			return new Path(device, NO_SEGMENTS, separators & (HAS_LEADING | IS_UNC));
-		}
-		Assert.isLegal(count > 0);
-		int newSize = segments.length - count;
-		String[] newSegments = new String[newSize];
-		System.arraycopy(this.segments, 0, newSegments, 0, newSize);
-		return new Path(device, newSegments, separators);
-	}
-
-	/* (Intentionally not included in javadoc)
-	 * @see IPath#removeTrailingSeparator()
-	 */
-	public IPath removeTrailingSeparator() {
-		if (!hasTrailingSeparator()) {
-			return this;
-		}
-		return new Path(device, segments, separators & (HAS_LEADING | IS_UNC));
-	}
-
-	/* (Intentionally not included in javadoc)
-	 * @see IPath#segment(int)
-	 */
-	public String segment(int index) {
-		if (index >= segments.length)
-			return null;
-		return segments[index];
-	}
-
-	/* (Intentionally not included in javadoc)
-	 * @see IPath#segmentCount()
-	 */
-	public int segmentCount() {
-		return segments.length;
-	}
-
-	/* (Intentionally not included in javadoc)
-	 * @see IPath#segments()
-	 */
-	public String[] segments() {
-		String[] segmentCopy = new String[segments.length];
-		System.arraycopy(segments, 0, segmentCopy, 0, segments.length);
-		return segmentCopy;
-	}
-
-	/* (Intentionally not included in javadoc)
-	 * @see IPath#setDevice(String)
-	 */
-	public IPath setDevice(String value) {
-		if (value != null) {
-			Assert.isTrue(value.indexOf(IPath.DEVICE_SEPARATOR) == (value.length() - 1), "Last character should be the device separator"); //$NON-NLS-1$
-		}
-		//return the receiver if the device is the same
-		if (value == device || (value != null && value.equals(device)))
-			return this;
-
-		return new Path(value, segments, separators);
-	}
-
-	/* (Intentionally not included in javadoc)
-	 * @see IPath#toFile()
-	 */
-	public File toFile() {
-		return new File(toOSString());
-	}
-
-	/* (Intentionally not included in javadoc)
-	 * @see IPath#toOSString()
-	 */
-	public String toOSString() {
-		//Note that this method is identical to toString except
-		//it uses the OS file separator instead of the path separator
-		int resultSize = computeLength();
-		if (resultSize <= 0)
-			return EMPTY_STRING;
-		char FILE_SEPARATOR = File.separatorChar;
-		char[] result = new char[resultSize];
-		int offset = 0;
-		if (device != null) {
-			int size = device.length();
-			device.getChars(0, size, result, offset);
-			offset += size;
-		}
-		if ((separators & HAS_LEADING) != 0)
-			result[offset++] = FILE_SEPARATOR;
-		if ((separators & IS_UNC) != 0)
-			result[offset++] = FILE_SEPARATOR;
-		int len = segments.length - 1;
-		if (len >= 0) {
-			//append all but the last segment, with separators
-			for (int i = 0; i < len; i++) {
-				int size = segments[i].length();
-				segments[i].getChars(0, size, result, offset);
-				offset += size;
-				result[offset++] = FILE_SEPARATOR;
-			}
-			//append the last segment
-			int size = segments[len].length();
-			segments[len].getChars(0, size, result, offset);
-			offset += size;
-		}
-		if ((separators & HAS_TRAILING) != 0)
-			result[offset++] = FILE_SEPARATOR;
-		return new String(result);
-	}
-
-	/* (Intentionally not included in javadoc)
-	 * @see IPath#toPortableString()
-	 */
-	public String toPortableString() {
-		int resultSize = computeLength();
-		if (resultSize <= 0)
-			return EMPTY_STRING;
-		StringBuffer result = new StringBuffer(resultSize);
-		if (device != null)
-			result.append(device);
-		if ((separators & HAS_LEADING) != 0)
-			result.append(SEPARATOR);
-		if ((separators & IS_UNC) != 0)
-			result.append(SEPARATOR);
-		int len = segments.length;
-		//append all segments with separators
-		for (int i = 0; i < len; i++) {
-			if (segments[i].indexOf(DEVICE_SEPARATOR) >= 0)
-				encodeSegment(segments[i], result);
-			else
-				result.append(segments[i]);
-			if (i < len-1 || (separators & HAS_TRAILING) != 0)
-				result.append(SEPARATOR);
-		}
-		return result.toString();
-	}
-
-	/* (Intentionally not included in javadoc)
-	 * @see IPath#toString()
-	 */
-	public String toString() {
-		int resultSize = computeLength();
-		if (resultSize <= 0)
-			return EMPTY_STRING;
-		char[] result = new char[resultSize];
-		int offset = 0;
-		if (device != null) {
-			int size = device.length();
-			device.getChars(0, size, result, offset);
-			offset += size;
-		}
-		if ((separators & HAS_LEADING) != 0)
-			result[offset++] = SEPARATOR;
-		if ((separators & IS_UNC) != 0)
-			result[offset++] = SEPARATOR;
-		int len = segments.length - 1;
-		if (len >= 0) {
-			//append all but the last segment, with separators
-			for (int i = 0; i < len; i++) {
-				int size = segments[i].length();
-				segments[i].getChars(0, size, result, offset);
-				offset += size;
-				result[offset++] = SEPARATOR;
-			}
-			//append the last segment
-			int size = segments[len].length();
-			segments[len].getChars(0, size, result, offset);
-			offset += size;
-		}
-		if ((separators & HAS_TRAILING) != 0)
-			result[offset++] = SEPARATOR;
-		return new String(result);
-	}
-
-	/* (Intentionally not included in javadoc)
-	 * @see IPath#uptoSegment(int)
-	 */
-	public IPath uptoSegment(int count) {
-		if (count == 0)
-			return new Path(device, NO_SEGMENTS, separators & (HAS_LEADING | IS_UNC));
-		if (count >= segments.length)
-			return this;
-		Assert.isTrue(count > 0, "Invalid parameter to Path.uptoSegment"); //$NON-NLS-1$
-		String[] newSegments = new String[count];
-		System.arraycopy(segments, 0, newSegments, 0, count);
-		return new Path(device, newSegments, separators);
-	}
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/PlatformObject.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/PlatformObject.java
deleted file mode 100644
index c32b24f..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/PlatformObject.java
+++ /dev/null
@@ -1,68 +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.core.runtime;
-
-import org.eclipse.core.internal.runtime.AdapterManager;
-
-/**
- * An abstract superclass implementing the <code>IAdaptable</code>
- * interface. <code>getAdapter</code> invocations are directed
- * 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
- * the <code>IAdaptable</code> interface and explicitly forwarding
- * the <code>getAdapter</code> request to the platform's 
- * adapter manager. The method would look like:
- * <pre>
- *     public Object getAdapter(Class adapter) {
- *         return Platform.getAdapterManager().getAdapter(this, adapter);
- *     }
- * </pre>
- * </p><p>
- * This class can be used without OSGi running.
- * </p><p>
- * Clients may subclass.
- * </p>
- *
- * @see Platform#getAdapterManager()
- * @see IAdaptable
- */
-public abstract class PlatformObject implements IAdaptable {
-	/**
-	 * Constructs a new platform object.
-	 */
-	public PlatformObject() {
-		super();
-	}
-
-	/**
-	 * Returns an object which is an instance of the given class
-	 * associated with this object. Returns <code>null</code> if
-	 * no such object can be found.
-	 * <p>
-	 * This implementation of the method declared by <code>IAdaptable</code>
-	 * passes the request along to the platform's adapter manager; roughly
-	 * <code>Platform.getAdapterManager().getAdapter(this, adapter)</code>.
-	 * Subclasses may override this method (however, if they do so, they
-	 * should invoke the method on their superclass to ensure that the
-	 * Platform's adapter manager is consulted).
-	 * </p>
-	 *
-	 * @param adapter the class to adapt to
-	 * @return the adapted object or <code>null</code>
-	 * @see IAdaptable#getAdapter(Class)
-	 * @see Platform#getAdapterManager()
-	 */
-	public Object getAdapter(Class adapter) {
-		return AdapterManager.getDefault().getAdapter(this, adapter);
-	}
-}
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/PluginVersionIdentifier.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/PluginVersionIdentifier.java
deleted file mode 100644
index 44f05ee..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/PluginVersionIdentifier.java
+++ /dev/null
@@ -1,454 +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.core.runtime;
-
-import java.util.StringTokenizer;
-import java.util.Vector;
-import org.eclipse.core.internal.runtime.CommonMessages;
-import org.eclipse.core.internal.runtime.IRuntimeConstants;
-import org.eclipse.osgi.util.NLS;
-import org.osgi.framework.Version;
-
-/**
- * <p>
- * Version identifier for a plug-in. In its string representation, 
- * it consists of up to 4 tokens separated by a decimal point.
- * The first 3 tokens are positive integer numbers, the last token
- * is an uninterpreted string (no whitespace characters allowed).
- * For example, the following are valid version identifiers 
- * (as strings):
- * <ul>
- *   <li><code>0.0.0</code></li>
- *   <li><code>1.0.127564</code></li>
- *   <li><code>3.7.2.build-127J</code></li>
- *   <li><code>1.9</code> (interpreted as <code>1.9.0</code>)</li>
- *   <li><code>3</code> (interpreted as <code>3.0.0</code>)</li>
- * </ul>
- * </p>
- * <p>
- * The version identifier can be decomposed into a major, minor, 
- * service level component and qualifier components. A difference
- * in the major component is interpreted as an incompatible version
- * change. A difference in the minor (and not the major) component
- * is interpreted as a compatible version change. The service
- * level component is interpreted as a cumulative and compatible
- * service update of the minor version component. The qualifier is
- * not interpreted, other than in version comparisons. The 
- * qualifiers are compared using lexicographical string comparison.
- * </p>
- * <p>
- * Version identifiers can be matched as perfectly equal, equivalent,
- * compatible or greaterOrEqual.
- * </p><p>
- * This class can be used without OSGi running.
- * </p><p>
- * Clients may instantiate; not intended to be subclassed by clients.
- * </p>
- * @see java.lang.String#compareTo(java.lang.String)
- * @deprecated clients should use {@link org.osgi.framework.Version} instead
- */
-public final class PluginVersionIdentifier {
-
-	private Version version;
-	
-	private static final String SEPARATOR = "."; //$NON-NLS-1$
-	
-	/**
-	 * Creates a plug-in version identifier from its components.
-	 * 
-	 * @param major major component of the version identifier
-	 * @param minor minor component of the version identifier
-	 * @param service service update component of the version identifier
-	 */
-	public PluginVersionIdentifier(int major, int minor, int service) {
-		this(major, minor, service, null);
-	}
-
-	/**
-	 * Creates a plug-in version identifier from its components.
-	 * 
-	 * @param major major component of the version identifier
-	 * @param minor minor component of the version identifier
-	 * @param service service update component of the version identifier
-	 * @param qualifier qualifier component of the version identifier. 
-	 * Qualifier characters that are not a letter or a digit are replaced.
-	 */
-	public PluginVersionIdentifier(int major, int minor, int service, String qualifier) {
-		// Do the test outside of the assert so that they 'Policy.bind' 
-		// will not be evaluated each time (including cases when we would
-		// have passed by the assert).
-
-		if (major < 0)
-			Assert.isTrue(false, NLS.bind(CommonMessages.parse_postiveMajor, major + SEPARATOR + minor + SEPARATOR + service + SEPARATOR + qualifier));
-		if (minor < 0)
-			Assert.isTrue(false, NLS.bind(CommonMessages.parse_postiveMinor, major + SEPARATOR + minor + SEPARATOR + service + SEPARATOR + qualifier));
-		if (service < 0)
-			Assert.isTrue(false, NLS.bind(CommonMessages.parse_postiveService, major + SEPARATOR + minor + SEPARATOR + service + SEPARATOR + qualifier));
-
-		this.version = new Version(major, minor, service, qualifier);
-	}
-
-	/**
-	 * Creates a plug-in version identifier from the given string.
-	 * The string representation consists of up to 4 tokens 
-	 * separated by decimal point.
-	 * For example, the following are valid version identifiers 
-	 * (as strings):
-	 * <ul>
-	 *   <li><code>0.0.0</code></li>
-	 *   <li><code>1.0.127564</code></li>
-	 *   <li><code>3.7.2.build-127J</code></li>
-	 *   <li><code>1.9</code> (interpreted as <code>1.9.0</code>)</li>
-	 *   <li><code>3</code> (interpreted as <code>3.0.0</code>)</li>
-	 * </ul>
-	 * </p>
-	 * 
-	 * @param versionId string representation of the version identifier. 
-	 * Qualifier characters that are not a letter or a digit are replaced.
-	 */
-	public PluginVersionIdentifier(String versionId) {
-		Object[] parts = parseVersion(versionId);
-		version = new Version(((Integer) parts[0]).intValue(), ((Integer) parts[1]).intValue(), ((Integer) parts[2]).intValue(), (String) parts[3]);
-	}
-
-	/**
-	 * Validates the given string as a plug-in version identifier.
-	 * 
-	 * @param version the string to validate
-	 * @return a status object with code <code>IStatus.OK</code> if
-	 *		the given string is valid as a plug-in version identifier, otherwise a status
-	 *		object indicating what is wrong with the string
-	 * @since 2.0
-	 */
-	public static IStatus validateVersion(String version) {
-		try {
-			parseVersion(version);
-		} catch (RuntimeException e) {
-			return new Status(IStatus.ERROR, IRuntimeConstants.PI_RUNTIME, IStatus.ERROR, e.getMessage(), e);
-		}
-		return Status.OK_STATUS;
-	}
-
-	private static Object[] parseVersion(String versionId) {
-
-		// Do the test outside of the assert so that they 'Policy.bind' 
-		// will not be evaluated each time (including cases when we would
-		// have passed by the assert).
-		if (versionId == null)
-			Assert.isNotNull(null, CommonMessages.parse_emptyPluginVersion);
-		String s = versionId.trim();
-		if (s.equals("")) //$NON-NLS-1$
-			Assert.isTrue(false, CommonMessages.parse_emptyPluginVersion);
-		if (s.startsWith(SEPARATOR))
-			Assert.isTrue(false, NLS.bind(CommonMessages.parse_separatorStartVersion, s));
-		if (s.endsWith(SEPARATOR))
-			Assert.isTrue(false, NLS.bind(CommonMessages.parse_separatorEndVersion, s));
-		if (s.indexOf(SEPARATOR + SEPARATOR) != -1)
-			Assert.isTrue(false, NLS.bind(CommonMessages.parse_doubleSeparatorVersion, s));
-
-		StringTokenizer st = new StringTokenizer(s, SEPARATOR);
-		Vector elements = new Vector(4);
-
-		while (st.hasMoreTokens())
-			elements.addElement(st.nextToken());
-
-		int elementSize = elements.size();
-
-		if (elementSize <= 0)
-			Assert.isTrue(false, NLS.bind(CommonMessages.parse_oneElementPluginVersion, s));
-		if (elementSize > 4)
-			Assert.isTrue(false, NLS.bind(CommonMessages.parse_fourElementPluginVersion, s));
-
-		int[] numbers = new int[3];
-		try {
-			numbers[0] = Integer.parseInt((String) elements.elementAt(0));
-			if (numbers[0] < 0)
-				Assert.isTrue(false, NLS.bind(CommonMessages.parse_postiveMajor, s));
-		} catch (NumberFormatException nfe) {
-			Assert.isTrue(false, NLS.bind(CommonMessages.parse_numericMajorComponent, s));
-		}
-
-		try {
-			if (elementSize >= 2) {
-				numbers[1] = Integer.parseInt((String) elements.elementAt(1));
-				if (numbers[1] < 0)
-					Assert.isTrue(false, NLS.bind(CommonMessages.parse_postiveMinor, s));
-			} else
-				numbers[1] = 0;
-		} catch (NumberFormatException nfe) {
-			Assert.isTrue(false, NLS.bind(CommonMessages.parse_numericMinorComponent, s));
-		}
-
-		try {
-			if (elementSize >= 3) {
-				numbers[2] = Integer.parseInt((String) elements.elementAt(2));
-				if (numbers[2] < 0)
-					Assert.isTrue(false, NLS.bind(CommonMessages.parse_postiveService, s));
-			} else
-				numbers[2] = 0;
-		} catch (NumberFormatException nfe) {
-			Assert.isTrue(false, NLS.bind(CommonMessages.parse_numericServiceComponent, s));
-		}
-
-		// "result" is a 4-element array with the major, minor, service, and qualifier
-		Object[] result = new Object[4];
-		result[0] = new Integer(numbers[0]);
-		result[1] = new Integer(numbers[1]);
-		result[2] = new Integer(numbers[2]);
-		if (elementSize >= 4)
-			result[3] = (String) elements.elementAt(3);
-		else
-			result[3] = ""; //$NON-NLS-1$
-		return result;
-	}
-
-	/**
-	 * Compare version identifiers for equality. Identifiers are
-	 * equal if all of their components are equal.
-	 *
-	 * @param object an object to compare
-	 * @return whether or not the two objects are equal
-	 */
-	public boolean equals(Object object) {
-		if (!(object instanceof PluginVersionIdentifier))
-			return false;
-		PluginVersionIdentifier v = (PluginVersionIdentifier) object;
-		return version.equals(v.version);
-	}
-
-	/**
-	 * Returns a hash code value for the object. 
-	 *
-	 * @return an integer which is a hash code value for this object.
-	 */
-	public int hashCode() {
-		return version.hashCode();
-	}
-
-	/**
-	 * Returns the major (incompatible) component of this 
-	 * version identifier.
-	 *
-	 * @return the major version
-	 */
-	public int getMajorComponent() {
-		return version.getMajor();
-	}
-
-	/**
-	 * Returns the minor (compatible) component of this 
-	 * version identifier.
-	 *
-	 * @return the minor version
-	 */
-	public int getMinorComponent() {
-		return version.getMinor();
-	}
-
-	/**
-	 * Returns the service level component of this 
-	 * version identifier.
-	 *
-	 * @return the service level
-	 */
-	public int getServiceComponent() {
-		return version.getMicro();
-	}
-
-	/**
-	 * Returns the qualifier component of this 
-	 * version identifier.
-	 *
-	 * @return the qualifier
-	 */
-	public String getQualifierComponent() {
-		return version.getQualifier();
-	}
-
-	/**
-	 * Compares two version identifiers to see if this one is
-	 * greater than or equal to the argument.
-	 * <p>
-	 * A version identifier is considered to be greater than or equal
-	 * if its major component is greater than the argument major 
-	 * component, or the major components are equal and its minor component
-	 * is greater than the argument minor component, or the
-	 * major and minor components are equal and its service component is
-	 * greater than the argument service component, or the major, minor and
-	 * service components are equal and the qualifier component is
-	 * greater than the argument qualifier component (using lexicographic
-	 * string comparison), or all components are equal.
-	 * </p>
-	 *
-	 * @param id the other version identifier
-	 * @return <code>true</code> is this version identifier
-	 *    is compatible with the given version identifier, and
-	 *    <code>false</code> otherwise
-	 * @since 2.0
-	 */
-	public boolean isGreaterOrEqualTo(PluginVersionIdentifier id) {
-		if (id == null)
-			return false;
-		if (getMajorComponent() > id.getMajorComponent())
-			return true;
-		if ((getMajorComponent() == id.getMajorComponent()) && (getMinorComponent() > id.getMinorComponent()))
-			return true;
-		if ((getMajorComponent() == id.getMajorComponent()) && (getMinorComponent() == id.getMinorComponent()) && (getServiceComponent() > id.getServiceComponent()))
-			return true;
-		if ((getMajorComponent() == id.getMajorComponent()) && (getMinorComponent() == id.getMinorComponent()) && (getServiceComponent() == id.getServiceComponent()) && (getQualifierComponent().compareTo(id.getQualifierComponent()) >= 0))
-			return true;
-		else
-			return false;
-	}
-
-	/**
-	 * Compares two version identifiers for compatibility.
-	 * <p>
-	 * A version identifier is considered to be compatible if its major 
-	 * component equals to the argument major component, and its minor component
-	 * is greater than or equal to the argument minor component.
-	 * If the minor components are equal, than the service level of the
-	 * version identifier must be greater than or equal to the service level
-	 * of the argument identifier. If the service levels are equal, the two 
-	 * version identifiers are considered to be equivalent if this qualifier is 
-	 * greater or equal to the qualifier of the argument (using lexicographic
-	 * string comparison).
-	 * </p>
-	 *
-	 * @param id the other version identifier
-	 * @return <code>true</code> is this version identifier
-	 *    is compatible with the given version identifier, and
-	 *    <code>false</code> otherwise
-	 */
-	public boolean isCompatibleWith(PluginVersionIdentifier id) {
-		if (id == null)
-			return false;
-		if (getMajorComponent() != id.getMajorComponent())
-			return false;
-		if (getMinorComponent() > id.getMinorComponent())
-			return true;
-		if (getMinorComponent() < id.getMinorComponent())
-			return false;
-		if (getServiceComponent() > id.getServiceComponent())
-			return true;
-		if (getServiceComponent() < id.getServiceComponent())
-			return false;
-		if (getQualifierComponent().compareTo(id.getQualifierComponent()) >= 0)
-			return true;
-		else
-			return false;
-	}
-
-	/**
-	 * Compares two version identifiers for equivalency.
-	 * <p>
-	 * Two version identifiers are considered to be equivalent if their major 
-	 * and minor component equal and are at least at the same service level 
-	 * as the argument. If the service levels are equal, the two version
-	 * identifiers are considered to be equivalent if this qualifier is 
-	 * greater or equal to the qualifier of the argument (using lexicographic
-	 * string comparison).
-	 * 
-	 * </p>
-	 *
-	 * @param id the other version identifier
-	 * @return <code>true</code> is this version identifier
-	 *    is equivalent to the given version identifier, and
-	 *    <code>false</code> otherwise
-	 */
-	public boolean isEquivalentTo(PluginVersionIdentifier id) {
-		if (id == null)
-			return false;
-		if (getMajorComponent() != id.getMajorComponent())
-			return false;
-		if (getMinorComponent() != id.getMinorComponent())
-			return false;
-		if (getServiceComponent() > id.getServiceComponent())
-			return true;
-		if (getServiceComponent() < id.getServiceComponent())
-			return false;
-		if (getQualifierComponent().compareTo(id.getQualifierComponent()) >= 0)
-			return true;
-		else
-			return false;
-	}
-
-	/**
-	 * Compares two version identifiers for perfect equality.
-	 * <p>
-	 * Two version identifiers are considered to be perfectly equal if their
-	 * major, minor, service and qualifier components are equal
-	 * </p>
-	 *
-	 * @param id the other version identifier
-	 * @return <code>true</code> is this version identifier
-	 *    is perfectly equal to the given version identifier, and
-	 *    <code>false</code> otherwise
-	 * @since 2.0
-	 */
-	public boolean isPerfect(PluginVersionIdentifier id) {
-		if (id == null)
-			return false;
-		if ((getMajorComponent() != id.getMajorComponent()) || (getMinorComponent() != id.getMinorComponent()) || (getServiceComponent() != id.getServiceComponent()) || (!getQualifierComponent().equals(id.getQualifierComponent())))
-			return false;
-		else
-			return true;
-	}
-
-	/**
-	 * Compares two version identifiers for order using multi-decimal
-	 * comparison. 
-	 *
-	 * @param id the other version identifier
-	 * @return <code>true</code> is this version identifier
-	 *    is greater than the given version identifier, and
-	 *    <code>false</code> otherwise
-	 */
-	public boolean isGreaterThan(PluginVersionIdentifier id) {
-
-		if (id == null) {
-			if (getMajorComponent() == 0 && getMinorComponent() == 0 && getServiceComponent() == 0 && getQualifierComponent().equals("")) //$NON-NLS-1$
-				return false;
-			else
-				return true;
-		}
-
-		if (getMajorComponent() > id.getMajorComponent())
-			return true;
-		if (getMajorComponent() < id.getMajorComponent())
-			return false;
-		if (getMinorComponent() > id.getMinorComponent())
-			return true;
-		if (getMinorComponent() < id.getMinorComponent())
-			return false;
-		if (getServiceComponent() > id.getServiceComponent())
-			return true;
-		if (getServiceComponent() < id.getServiceComponent())
-			return false;
-		if (getQualifierComponent().compareTo(id.getQualifierComponent()) > 0)
-			return true;
-		else
-			return false;
-
-	}
-
-	/**
-	 * Returns the string representation of this version identifier. 
-	 * The result satisfies
-	 * <code>vi.equals(new PluginVersionIdentifier(vi.toString()))</code>.
-	 *
-	 * @return the string representation of this plug-in version identifier
-	 */
-	public String toString() {
-		return version.toString();
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/ProgressMonitorWrapper.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/ProgressMonitorWrapper.java
deleted file mode 100644
index f282e64..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/ProgressMonitorWrapper.java
+++ /dev/null
@@ -1,170 +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.core.runtime;
-
-/**
- * An abstract wrapper around a progress monitor which,
- * unless overridden, forwards <code>IProgressMonitor</code>
- * and <code>IProgressMonitorWithBlocking</code> methods to the wrapped progress monitor.
- * <p>
- * This class can be used without OSGi running.
- * </p><p>
- * Clients may subclass.
- * </p>
- */
-public abstract class ProgressMonitorWrapper implements IProgressMonitor, IProgressMonitorWithBlocking {
-
-	/** The wrapped progress monitor. */
-	private IProgressMonitor progressMonitor;
-
-	/** 
-	 * Creates a new wrapper around the given monitor.
-	 *
-	 * @param monitor the progress monitor to forward to
-	 */
-	protected ProgressMonitorWrapper(IProgressMonitor monitor) {
-		Assert.isNotNull(monitor);
-		progressMonitor = monitor;
-	}
-
-	/** 
-	 * This implementation of a <code>IProgressMonitor</code>
-	 * method forwards to the wrapped progress monitor.
-	 * Clients may override this method to do additional
-	 * processing.
-	 *
-	 * @see IProgressMonitor#beginTask(String, int)
-	 */
-	public void beginTask(String name, int totalWork) {
-		progressMonitor.beginTask(name, totalWork);
-	}
-
-	/**
-	 * This implementation of a <code>IProgressMonitorWithBlocking</code>
-	 * method forwards to the wrapped progress monitor.
-	 * Clients may override this method to do additional
-	 * processing.
-	 *
-	 * @see IProgressMonitorWithBlocking#clearBlocked()
-	 * @since 3.0
-	 */
-	public void clearBlocked() {
-		if (progressMonitor instanceof IProgressMonitorWithBlocking)
-			((IProgressMonitorWithBlocking) progressMonitor).clearBlocked();
-	}
-
-	/**
-	 * This implementation of a <code>IProgressMonitor</code>
-	 * method forwards to the wrapped progress monitor.
-	 * Clients may override this method to do additional
-	 * processing.
-	 *
-	 * @see IProgressMonitor#done()
-	 */
-	public void done() {
-		progressMonitor.done();
-	}
-
-	/**
-	 * Returns the wrapped progress monitor.
-	 *
-	 * @return the wrapped progress monitor
-	 */
-	public IProgressMonitor getWrappedProgressMonitor() {
-		return progressMonitor;
-	}
-
-	/**
-	 * This implementation of a <code>IProgressMonitor</code>
-	 * method forwards to the wrapped progress monitor.
-	 * Clients may override this method to do additional
-	 * processing.
-	 *
-	 * @see IProgressMonitor#internalWorked(double)
-	 */
-	public void internalWorked(double work) {
-		progressMonitor.internalWorked(work);
-	}
-
-	/**
-	 * This implementation of a <code>IProgressMonitor</code>
-	 * method forwards to the wrapped progress monitor.
-	 * Clients may override this method to do additional
-	 * processing.
-	 *
-	 * @see IProgressMonitor#isCanceled()
-	 */
-	public boolean isCanceled() {
-		return progressMonitor.isCanceled();
-	}
-
-	/**
-	 * This implementation of a <code>IProgressMonitorWithBlocking</code>
-	 * method forwards to the wrapped progress monitor.
-	 * Clients may override this method to do additional
-	 * processing.
-	 *
-	 * @see IProgressMonitorWithBlocking#setBlocked(IStatus)
-	 * @since 3.0
-	 */
-	public void setBlocked(IStatus reason) {
-		if (progressMonitor instanceof IProgressMonitorWithBlocking)
-			((IProgressMonitorWithBlocking) progressMonitor).setBlocked(reason);
-	}
-
-	/**
-	 * This implementation of a <code>IProgressMonitor</code>
-	 * method forwards to the wrapped progress monitor.
-	 * Clients may override this method to do additional
-	 * processing.
-	 *
-	 * @see IProgressMonitor#setCanceled(boolean)
-	 */
-	public void setCanceled(boolean b) {
-		progressMonitor.setCanceled(b);
-	}
-
-	/**
-	 * This implementation of a <code>IProgressMonitor</code>
-	 * method forwards to the wrapped progress monitor.
-	 * Clients may override this method to do additional
-	 * processing.
-	 *
-	 * @see IProgressMonitor#setTaskName(String)
-	 */
-	public void setTaskName(String name) {
-		progressMonitor.setTaskName(name);
-	}
-
-	/**
-	 * This implementation of a <code>IProgressMonitor</code>
-	 * method forwards to the wrapped progress monitor.
-	 * Clients may override this method to do additional
-	 * processing.
-	 *
-	 * @see IProgressMonitor#subTask(String)
-	 */
-	public void subTask(String name) {
-		progressMonitor.subTask(name);
-	}
-
-	/**
-	 * This implementation of a <code>IProgressMonitor</code>
-	 * method forwards to the wrapped progress monitor.
-	 * Clients may override this method to do additional
-	 * processing.
-	 *
-	 * @see IProgressMonitor#worked(int)
-	 */
-	public void worked(int work) {
-		progressMonitor.worked(work);
-	}
-}
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/QualifiedName.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/QualifiedName.java
deleted file mode 100644
index e0a49dc..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/QualifiedName.java
+++ /dev/null
@@ -1,116 +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.core.runtime;
-
-/**
- * Qualified names are two-part names: qualifier and local name.
- * The qualifier must be in URI form (see RFC2396).  
- * Note however that the qualifier may be <code>null</code> if
- * the default name space is being used.  The empty string is not 
- * a valid local name.
- * <p>
- * This class can be used without OSGi running.
- * </p><p>
- * This class is not intended to be subclassed by clients.
- * </p>
- */
-public final class QualifiedName {
-
-	/** Qualifier part (potentially <code>null</code>). */
-	/*package*/
-	String qualifier = null;
-
-	/** Local name part. */
-	/*package*/
-	String localName = null;
-
-	/**
-	 * Creates and returns a new qualified name with the given qualifier
-	 * and local name.  The local name must not be the empty string.
-	 * The qualifier may be <code>null</code>.
-	 * <p>
-	 * Clients may instantiate.
-	 * </p>
-	 * @param qualifier the qualifier string, or <code>null</code>
-	 * @param localName the local name string
-	 */
-	public QualifiedName(String qualifier, String localName) {
-		Assert.isLegal(localName != null && localName.length() != 0);
-		this.qualifier = qualifier;
-		this.localName = localName;
-	}
-
-	/**
-	 * Returns whether this qualified name is equivalent to the given object.
-	 * <p>
-	 * Qualified names are equal if and only if they have the same
-	 * qualified parts and local parts.
-	 * Qualified names are not equal to objects other than qualified names.
-	 * </p>
-	 *
-	 * @param obj the object to compare to
-	 * @return <code>true</code> if these are equivalent qualified
-	 *    names, and <code>false</code> otherwise
-	 */
-	public boolean equals(Object obj) {
-		if (obj == this) {
-			return true;
-		}
-		if (!(obj instanceof QualifiedName)) {
-			return false;
-		}
-		QualifiedName qName = (QualifiedName) obj;
-		/* There may or may not be a qualifier */
-		if (qualifier == null && qName.getQualifier() != null) {
-			return false;
-		}
-		if (qualifier != null && !qualifier.equals(qName.getQualifier())) {
-			return false;
-		}
-		return localName.equals(qName.getLocalName());
-	}
-
-	/**
-	 * Returns the local part of this name.
-	 *
-	 * @return the local name string
-	 */
-	public String getLocalName() {
-		return localName;
-	}
-
-	/**
-	 * Returns the qualifier part for this qualified name, or <code>null</code>
-	 * if none.
-	 *
-	 * @return the qualifier string, or <code>null</code>
-	 */
-	public String getQualifier() {
-		return qualifier;
-	}
-
-	/* (Intentionally omitted from javadoc)
-	 * Implements the method <code>Object.hashCode</code>.
-	 * 
-	 * Returns the hash code for this qualified name.
-	 */
-	public int hashCode() {
-		return (qualifier == null ? 0 : qualifier.hashCode()) + localName.hashCode();
-	}
-
-	/**
-	 * Converts this qualified name into a string, suitable for 
-	 * debug purposes only.
-	 */
-	public String toString() {
-		return (getQualifier() == null ? "" : getQualifier() + ':') + getLocalName(); //$NON-NLS-1$
-	}
-}
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/SafeRunner.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/SafeRunner.java
deleted file mode 100644
index 7a38d23..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/SafeRunner.java
+++ /dev/null
@@ -1,70 +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.core.runtime;
-
-import org.eclipse.core.internal.runtime.*;
-import org.eclipse.osgi.util.NLS;
-
-/**
- * Runs the given ISafeRunnable in a protected mode: exceptions
- * thrown in the runnable are logged and passed to the runnable's
- * exception handler.  Such exceptions are not rethrown by this method.
- * <p>
- * This class can be used without OSGi running.
- * </p>
- * @since org.eclipse.equinox.common 3.2
- */
-public final class SafeRunner {
-
-	/**
-	 * Runs the given runnable in a protected mode.   Exceptions
-	 * thrown in the runnable are logged and passed to the runnable's
-	 * exception handler.  Such exceptions are not rethrown by this method.
-	 *
-	 * @param code the runnable to run
-	 */
-	public static void run(ISafeRunnable code) {
-		Assert.isNotNull(code);
-		try {
-			code.run();
-		} catch (Exception e) {
-			handleException(code, e);
-		} catch (LinkageError e) {
-			handleException(code, e);
-		}
-	}
-
-	private static void handleException(ISafeRunnable code, Throwable e) {
-		if (!(e instanceof OperationCanceledException)) {
-			// try to obtain the correct plug-in id for the bundle providing the safe runnable 
-			Activator activator = Activator.getDefault();
-			String pluginId = null;
-			if (activator != null)
-				pluginId = activator.getBundleId(code);
-			if (pluginId == null)
-				pluginId = IRuntimeConstants.PI_COMMON;
-			String message = NLS.bind(CommonMessages.meta_pluginProblems, pluginId);
-			IStatus status;
-			if (e instanceof CoreException) {
-				status = new MultiStatus(pluginId, IRuntimeConstants.PLUGIN_ERROR, message, e);
-				((MultiStatus) status).merge(((CoreException) e).getStatus());
-			} else {
-				status = new Status(IStatus.ERROR, pluginId, IRuntimeConstants.PLUGIN_ERROR, message, e);
-			}
-			// Make sure user sees the exception: if the log is empty, log the exceptions on stderr 
-			if (!RuntimeLog.isEmpty())
-				RuntimeLog.log(status);
-			else
-				e.printStackTrace();
-		}
-		code.handleException(e);
-	}
-}
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/Status.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/Status.java
deleted file mode 100644
index 894b687..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/Status.java
+++ /dev/null
@@ -1,279 +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.core.runtime;
-
-import org.eclipse.core.internal.runtime.IRuntimeConstants;
-import org.eclipse.core.internal.runtime.LocalizationUtils;
-
-/**
- * A concrete status implementation, suitable either for 
- * instantiating or subclassing.
- * <p>
- * This class can be used without OSGi running.
- * </p>
- */
-public class Status implements IStatus {
-
-	/**
-	 * A standard OK status with an "ok"  message.
-	 *
-	 * @since 3.0
-	 */
-	public static final IStatus OK_STATUS = new Status(OK, IRuntimeConstants.PI_RUNTIME, OK, LocalizationUtils.safeLocalize("ok"), null); //$NON-NLS-1$
-	/**
-	 * A standard CANCEL status with no message.
-	 * 
-	 * @since 3.0
-	 */
-	public static final IStatus CANCEL_STATUS = new Status(CANCEL, IRuntimeConstants.PI_RUNTIME, 1, "", null); //$NON-NLS-1$
-	/**
-	 * The severity. One of
-	 * <ul>
-	 * <li><code>CANCEL</code></li>
-	 * <li><code>ERROR</code></li>
-	 * <li><code>WARNING</code></li>
-	 * <li><code>INFO</code></li>
-	 * <li>or <code>OK</code> (0)</li>
-	 * </ul>
-	 */
-	private int severity = OK;
-
-	/** Unique identifier of plug-in.
-	 */
-	private String pluginId;
-
-	/** Plug-in-specific status code.
-	 */
-	private int code;
-
-	/** Message, localized to the current locale.
-	 */
-	private String message;
-
-	/** Wrapped exception, or <code>null</code> if none.
-	 */
-	private Throwable exception = null;
-
-	/** Constant to avoid generating garbage.
-	 */
-	private static final IStatus[] theEmptyStatusArray = new IStatus[0];
-
-	/**
-	 * Creates a new status object.  The created status has no children.
-	 *
-	 * @param severity the severity; one of <code>OK</code>, <code>ERROR</code>, 
-	 * <code>INFO</code>, <code>WARNING</code>,  or <code>CANCEL</code>
-	 * @param pluginId the unique identifier of the relevant plug-in
-	 * @param code the plug-in-specific status code, or <code>OK</code>
-	 * @param message a human-readable message, localized to the
-	 *    current locale
-	 * @param exception a low-level exception, or <code>null</code> if not
-	 *    applicable 
-	 */
-	public Status(int severity, String pluginId, int code, String message, Throwable exception) {
-		setSeverity(severity);
-		setPlugin(pluginId);
-		setCode(code);
-		setMessage(message);
-		setException(exception);
-	}
-
-	/**
-	 * Simplified constructor of a new status object; assumes that code is <code>OK</code>.
-	 * The created status has no children.
-	 *
-	 * @param severity the severity; one of <code>OK</code>, <code>ERROR</code>, 
-	 * <code>INFO</code>, <code>WARNING</code>,  or <code>CANCEL</code>
-	 * @param pluginId the unique identifier of the relevant plug-in
-	 * @param message a human-readable message, localized to the
-	 *    current locale
-	 * @param exception a low-level exception, or <code>null</code> if not
-	 *    applicable
-	 *     
-	 * @since org.eclipse.equinox.common 3.3
-	 */
-	public Status(int severity, String pluginId, String message, Throwable exception) {
-		setSeverity(severity);
-		setPlugin(pluginId);
-		setMessage(message);
-		setException(exception);
-		setCode(OK);
-	}
-
-	/**
-	 * Simplified constructor of a new status object; assumes that code is <code>OK</code> and
-	 * exception is <code>null</code>. The created status has no children.
-	 *
-	 * @param severity the severity; one of <code>OK</code>, <code>ERROR</code>, 
-	 * <code>INFO</code>, <code>WARNING</code>,  or <code>CANCEL</code>
-	 * @param pluginId the unique identifier of the relevant plug-in
-	 * @param message a human-readable message, localized to the
-	 *    current locale
-	 *    
-	 * @since org.eclipse.equinox.common 3.3
-	 */
-	public Status(int severity, String pluginId, String message) {
-		setSeverity(severity);
-		setPlugin(pluginId);
-		setMessage(message);
-		setCode(OK);
-		setException(null);
-	}
-
-	/* (Intentionally not javadoc'd)
-	 * Implements the corresponding method on <code>IStatus</code>.
-	 */
-	public IStatus[] getChildren() {
-		return theEmptyStatusArray;
-	}
-
-	/* (Intentionally not javadoc'd)
-	 * Implements the corresponding method on <code>IStatus</code>.
-	 */
-	public int getCode() {
-		return code;
-	}
-
-	/* (Intentionally not javadoc'd)
-	 * Implements the corresponding method on <code>IStatus</code>.
-	 */
-	public Throwable getException() {
-		return exception;
-	}
-
-	/* (Intentionally not javadoc'd)
-	 * Implements the corresponding method on <code>IStatus</code>.
-	 */
-	public String getMessage() {
-		return message;
-	}
-
-	/* (Intentionally not javadoc'd)
-	 * Implements the corresponding method on <code>IStatus</code>.
-	 */
-	public String getPlugin() {
-		return pluginId;
-	}
-
-	/* (Intentionally not javadoc'd)
-	 * Implements the corresponding method on <code>IStatus</code>.
-	 */
-	public int getSeverity() {
-		return severity;
-	}
-
-	/* (Intentionally not javadoc'd)
-	 * Implements the corresponding method on <code>IStatus</code>.
-	 */
-	public boolean isMultiStatus() {
-		return false;
-	}
-
-	/* (Intentionally not javadoc'd)
-	 * Implements the corresponding method on <code>IStatus</code>.
-	 */
-	public boolean isOK() {
-		return severity == OK;
-	}
-
-	/* (Intentionally not javadoc'd)
-	 * Implements the corresponding method on <code>IStatus</code>.
-	 */
-	public boolean matches(int severityMask) {
-		return (severity & severityMask) != 0;
-	}
-
-	/**
-	 * Sets the status code.
-	 *
-	 * @param code the plug-in-specific status code, or <code>OK</code>
-	 */
-	protected void setCode(int code) {
-		this.code = code;
-	}
-
-	/**
-	 * Sets the exception.
-	 *
-	 * @param exception a low-level exception, or <code>null</code> if not
-	 *    applicable 
-	 */
-	protected void setException(Throwable exception) {
-		this.exception = exception;
-	}
-
-	/**
-	 * Sets the message. If null is passed, message is set to an empty
-	 * string.
-	 *
-	 * @param message a human-readable message, localized to the
-	 *    current locale
-	 */
-	protected void setMessage(String message) {
-		if (message == null)
-			this.message = ""; //$NON-NLS-1$
-		else
-			this.message = message;
-	}
-
-	/**
-	 * Sets the plug-in id.
-	 *
-	 * @param pluginId the unique identifier of the relevant plug-in
-	 */
-	protected void setPlugin(String pluginId) {
-		Assert.isLegal(pluginId != null && pluginId.length() > 0);
-		this.pluginId = pluginId;
-	}
-
-	/**
-	 * Sets the severity.
-	 *
-	 * @param severity the severity; one of <code>OK</code>, <code>ERROR</code>, 
-	 * <code>INFO</code>, <code>WARNING</code>,  or <code>CANCEL</code>
-	 */
-	protected void setSeverity(int severity) {
-		Assert.isLegal(severity == OK || severity == ERROR || severity == WARNING || severity == INFO || severity == CANCEL);
-		this.severity = severity;
-	}
-
-	/**
-	 * Returns a string representation of the status, suitable 
-	 * for debugging purposes only.
-	 */
-	public String toString() {
-		StringBuffer buf = new StringBuffer();
-		buf.append("Status "); //$NON-NLS-1$
-		if (severity == OK) {
-			buf.append("OK"); //$NON-NLS-1$
-		} else if (severity == ERROR) {
-			buf.append("ERROR"); //$NON-NLS-1$
-		} else if (severity == WARNING) {
-			buf.append("WARNING"); //$NON-NLS-1$
-		} else if (severity == INFO) {
-			buf.append("INFO"); //$NON-NLS-1$
-		} else if (severity == CANCEL) {
-			buf.append("CANCEL"); //$NON-NLS-1$
-		} else {
-			buf.append("severity="); //$NON-NLS-1$
-			buf.append(severity);
-		}
-		buf.append(": "); //$NON-NLS-1$
-		buf.append(pluginId);
-		buf.append(" code="); //$NON-NLS-1$
-		buf.append(code);
-		buf.append(' ');
-		buf.append(message);
-		buf.append(' ');
-		buf.append(exception);
-		return buf.toString();
-	}
-}
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/SubProgressMonitor.java b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/SubProgressMonitor.java
deleted file mode 100644
index c55969a..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/SubProgressMonitor.java
+++ /dev/null
@@ -1,179 +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.core.runtime;
-
-/**
- * A progress monitor that uses a given amount of work ticks
- * from a parent monitor. It can be used as follows:
- * <pre>
- *     try {
- *         pm.beginTask("Main Task", 100);
- *         doSomeWork(pm, 30);
- *         SubProgressMonitor subMonitor= new SubProgressMonitor(pm, 40);
- *         try {
- *             subMonitor.beginTask("", 300);
- *             doSomeWork(subMonitor, 300);
- *         } finally {
- *             subMonitor.done();
- *         }
- *         doSomeWork(pm, 30);
- *     } finally {
- *         pm.done();
- *     }
- * </pre>
- * <p>
- * This class can be used without OSGi running.
- * </p><p>
- * This class may be instantiated or subclassed by clients.
- * </p>
- */
-public class SubProgressMonitor extends ProgressMonitorWrapper {
-
-	/**
-	 * Style constant indicating that calls to <code>subTask</code>
-	 * should not have any effect.
-	 *
-	 * @see #SubProgressMonitor(IProgressMonitor,int,int)
-	 */
-	public static final int SUPPRESS_SUBTASK_LABEL = 1 << 1;
-	/**
-	 * Style constant indicating that the main task label 
-	 * should be prepended to the subtask label.
-	 *
-	 * @see #SubProgressMonitor(IProgressMonitor,int,int)
-	 */
-	public static final int PREPEND_MAIN_LABEL_TO_SUBTASK = 1 << 2;
-
-	private int parentTicks = 0;
-	private double sentToParent = 0.0;
-	private double scale = 0.0;
-	private int nestedBeginTasks = 0;
-	private boolean usedUp = false;
-	private boolean hasSubTask = false;
-	private int style;
-	private String mainTaskLabel;
-
-	/**
-	 * Creates a new sub-progress monitor for the given monitor. The sub 
-	 * progress monitor uses the given number of work ticks from its 
-	 * parent monitor.
-	 *
-	 * @param monitor the parent progress monitor
-	 * @param ticks the number of work ticks allocated from the
-	 *    parent monitor
-	 */
-	public SubProgressMonitor(IProgressMonitor monitor, int ticks) {
-		this(monitor, ticks, 0);
-	}
-
-	/**
-	 * Creates a new sub-progress monitor for the given monitor. The sub 
-	 * progress monitor uses the given number of work ticks from its 
-	 * parent monitor.
-	 *
-	 * @param monitor the parent progress monitor
-	 * @param ticks the number of work ticks allocated from the
-	 *    parent monitor
-	 * @param style one of
-	 *    <ul>
-	 *    <li> <code>SUPPRESS_SUBTASK_LABEL</code> </li>
-	 *    <li> <code>PREPEND_MAIN_LABEL_TO_SUBTASK</code> </li>
-	 *    </ul>
-	 * @see #SUPPRESS_SUBTASK_LABEL
-	 * @see #PREPEND_MAIN_LABEL_TO_SUBTASK
-	 */
-	public SubProgressMonitor(IProgressMonitor monitor, int ticks, int style) {
-		super(monitor);
-		this.parentTicks = ticks;
-		this.style = style;
-	}
-
-	/* (Intentionally not javadoc'd)
-	 * Implements the method <code>IProgressMonitor.beginTask</code>.
-	 *
-	 * Starts a new main task. Since this progress monitor is a sub
-	 * progress monitor, the given name will NOT be used to update
-	 * the progress bar's main task label. That means the given 
-	 * string will be ignored. If style <code>PREPEND_MAIN_LABEL_TO_SUBTASK
-	 * <code> is specified, then the given string will be prepended to
-	 * every string passed to <code>subTask(String)</code>.
-	 */
-	public void beginTask(String name, int totalWork) {
-		nestedBeginTasks++;
-		// Ignore nested begin task calls.
-		if (nestedBeginTasks > 1) {
-			return;
-		}
-		// be safe:  if the argument would cause math errors (zero or 
-		// negative), just use 0 as the scale.  This disables progress for
-		// this submonitor. 
-		scale = totalWork <= 0 ? 0 : (double) parentTicks / (double) totalWork;
-		if ((style & PREPEND_MAIN_LABEL_TO_SUBTASK) != 0) {
-			mainTaskLabel = name;
-		}
-	}
-
-	/* (Intentionally not javadoc'd)
-	 * Implements the method <code>IProgressMonitor.done</code>.
-	 */
-	public void done() {
-		// Ignore if more done calls than beginTask calls or if we are still
-		// in some nested beginTasks
-		if (nestedBeginTasks == 0 || --nestedBeginTasks > 0)
-			return;
-		// Send any remaining ticks and clear out the subtask text
-		double remaining = parentTicks - sentToParent;
-		if (remaining > 0)
-			super.internalWorked(remaining);
-		//clear the sub task if there was one
-		if (hasSubTask)
-			subTask(""); //$NON-NLS-1$
-		sentToParent = 0;
-	}
-
-	/* (Intentionally not javadoc'd)
-	 * Implements the internal method <code>IProgressMonitor.internalWorked</code>.
-	 */
-	public void internalWorked(double work) {
-		if (usedUp || nestedBeginTasks != 1) {
-			return;
-		}
-
-		double realWork = scale * work;
-		super.internalWorked(realWork);
-		sentToParent += realWork;
-		if (sentToParent >= parentTicks) {
-			usedUp = true;
-		}
-	}
-
-	/* (Intentionally not javadoc'd)
-	 * Implements the method <code>IProgressMonitor.subTask</code>.
-	 */
-	public void subTask(String name) {
-		if ((style & SUPPRESS_SUBTASK_LABEL) != 0) {
-			return;
-		}
-		hasSubTask = true;
-		String label = name;
-		if ((style & PREPEND_MAIN_LABEL_TO_SUBTASK) != 0 && mainTaskLabel != null && mainTaskLabel.length() > 0) {
-			label = mainTaskLabel + ' ' + label;
-		}
-		super.subTask(label);
-	}
-
-	/* (Intentionally not javadoc'd)
-	 * Implements the method <code>IProgressMonitor.worked</code>.
-	 */
-	public void worked(int work) {
-		internalWorked(work);
-	}
-}
diff --git a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/package.html b/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/package.html
deleted file mode 100644
index d81771f..0000000
--- a/bundles/org.eclipse.equinox.common/src/org/eclipse/core/runtime/package.html
+++ /dev/null
@@ -1,17 +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>Package-level Javadoc</title>
-</head>
-<body>
-Provides support for the runtime platform, core utility methods and the extension registry.
-<h2>
-Package Specification</h2>
-This package contains three components:<ul>
-<li>APIs related to the runtime platform itself (provided by the <tt>org.eclipse.core.runtime</tt> plug-in)</li>
-<li>Various utility types such as <tt>Path</tt>, <tt>IPath</tt> and various flavours of progress monitors (provided by the <tt>org.eclipse.equinox.common</tt> plug-in)</li>
-<li>Extension registry mechanism (provided by the <tt>org.eclipse.equinox.registry</tt> plug-in)</li>
-</ul>
-</body>
-</html>
diff --git a/bundles/org.eclipse.equinox.device/.classpath b/bundles/org.eclipse.equinox.device/.classpath
deleted file mode 100644
index 065ac06..0000000
--- a/bundles/org.eclipse.equinox.device/.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.pde.core.requiredPlugins"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/bundles/org.eclipse.equinox.device/.cvsignore b/bundles/org.eclipse.equinox.device/.cvsignore
deleted file mode 100644
index ba077a4..0000000
--- a/bundles/org.eclipse.equinox.device/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-bin
diff --git a/bundles/org.eclipse.equinox.device/.project b/bundles/org.eclipse.equinox.device/.project
deleted file mode 100644
index 5d5c431..0000000
--- a/bundles/org.eclipse.equinox.device/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.equinox.device</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/bundles/org.eclipse.equinox.device/.settings/org.eclipse.core.resources.prefs b/bundles/org.eclipse.equinox.device/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index 16532b2..0000000
--- a/bundles/org.eclipse.equinox.device/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Tue May 25 15:00:03 EDT 2004
-encoding/<project>=ISO-8859-1
-eclipse.preferences.version=1
diff --git a/bundles/org.eclipse.equinox.device/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.equinox.device/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index c8df024..0000000
--- a/bundles/org.eclipse.equinox.device/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,49 +0,0 @@
-#Fri Dec 16 09:19:41 CST 2005
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=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=disabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-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.overridingPackageDefaultMethod=warning
-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=ignore
-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=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
diff --git a/bundles/org.eclipse.equinox.device/META-INF/MANIFEST.MF b/bundles/org.eclipse.equinox.device/META-INF/MANIFEST.MF
deleted file mode 100644
index 9d73e9b..0000000
--- a/bundles/org.eclipse.equinox.device/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,15 +0,0 @@
-Bundle-ManifestVersion: 2
-Bundle-Name: %bundleName
-Bundle-Version: 1.0.0.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.log;version="1.2",
- org.osgi.util.tracker,
- org.eclipse.osgi.util
-Export-Package: org.eclipse.equinox.device; x-internal:=true
diff --git a/bundles/org.eclipse.equinox.device/about.html b/bundles/org.eclipse.equinox.device/about.html
deleted file mode 100644
index 3989f53..0000000
--- a/bundles/org.eclipse.equinox.device/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 11, 2006</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 (&quot;EPL&quot;).  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, &quot;Program&quot; 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 (&quot;Redistributor&quot;) 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>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/bundles/org.eclipse.equinox.device/build.properties b/bundles/org.eclipse.equinox.device/build.properties
deleted file mode 100644
index 3da785a..0000000
--- a/bundles/org.eclipse.equinox.device/build.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-###############################################################################
-# Copyright (c) 2005 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
-###############################################################################
-bin.includes = META-INF/,\
-               plugin.properties,\
-               about.html,\
-               .
-src.includes = about.html
-source.. = src/
-output.. = bin/
diff --git a/bundles/org.eclipse.equinox.device/plugin.properties b/bundles/org.eclipse.equinox.device/plugin.properties
deleted file mode 100644
index 86742fd..0000000
--- a/bundles/org.eclipse.equinox.device/plugin.properties
+++ /dev/null
@@ -1,13 +0,0 @@
-###############################################################################
-# Copyright (c) 2005 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
-###############################################################################
-bundleVendor = Eclipse.org
-bundleName = Device Access Service
-bundleCopyright = Copyright (c) IBM Corp. 1999, 2005
diff --git a/bundles/org.eclipse.equinox.device/src/org/eclipse/equinox/device/Activator.java b/bundles/org.eclipse.equinox.device/src/org/eclipse/equinox/device/Activator.java
deleted file mode 100644
index ae1b411..0000000
--- a/bundles/org.eclipse.equinox.device/src/org/eclipse/equinox/device/Activator.java
+++ /dev/null
@@ -1,425 +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.equinox.device;
-
-import org.eclipse.osgi.util.NLS;
-import org.osgi.framework.*;
-import org.osgi.service.log.LogService;
-import org.osgi.util.tracker.ServiceTracker;
-import org.osgi.util.tracker.ServiceTrackerCustomizer;
-
-/**
- * DeviceManager bundle. This bundle implements the OSGi Device Access 1.1
- * specification.
- *
- * This implementation does not include the optimizations in section
- * 8.7.4 of the OSGi SP R2 spec.
- *
- */
-public class Activator implements BundleActivator, ServiceTrackerCustomizer, FrameworkListener, Runnable {
-	protected final static boolean DEBUG = false;
-
-	/** DeviceManager BundleContext */
-	protected BundleContext context;
-
-	/** LogTracker object */
-	protected LogTracker log;
-
-	/** if false the thread must terminate */
-	protected volatile boolean running;
-
-	/** DeviceManager thread */
-	protected Thread thread;
-
-	/** DriverTracker for Driver services. */
-	protected DriverTracker drivers;
-
-	/** Tracker for DriverLocator services */
-	protected DriverLocatorTracker locators;
-
-	/** Tracker for DriverSelector services */
-	protected DriverSelectorTracker selectors;
-
-	/** ServiceTracker object for device services */
-	protected ServiceTracker devices;
-
-	/** filter for Device services */
-	protected Filter deviceFilter;
-
-	/** filter for Driver services */
-	protected Filter driverFilter;
-
-	/**
-	 * Linked List item
-	 */
-	static class DeviceService {
-		/** object for this item */
-		final DeviceTracker device;
-		/** next item in event queue */
-		DeviceService next;
-
-		/**
-		 * Constructor for work queue item
-		 *
-		 * @param o Object for this event
-		 */
-		DeviceService(DeviceTracker device) {
-			this.device = device;
-			next = null;
-		}
-	}
-
-	/** item at the head of the event queue */
-	private DeviceService head;
-	/** item at the tail of the event queue */
-	private DeviceService tail;
-
-	/** number of milliseconds to wait before refining idle Device services */
-	protected long updatewait;
-
-	/** set to true by DriverTracker when a Driver Service is registered */
-	protected volatile boolean driverServiceRegistered;
-
-	/**
-	 * Create a DeviceManager object.
-	 *
-	 */
-
-	public Activator() {
-		super();
-	}
-
-	/**
-	 * Start the Device Manager.
-	 *
-	 * @param context The device manager's bundle context
-	 */
-
-	public void start(BundleContext contxt) throws Exception {
-		this.context = contxt;
-		running = false;
-
-		log = new LogTracker(context, System.err);
-
-		try {
-			deviceFilter = context.createFilter("(|(" + org.osgi.framework.Constants.OBJECTCLASS + "=" + DeviceTracker.clazz + ////-1$ ////-2$ //$NON-NLS-1$ //$NON-NLS-2$
-					")(" + org.osgi.service.device.Constants.DEVICE_CATEGORY + "=*))"); //$NON-NLS-1$ //$NON-NLS-2$
-
-			driverFilter = context.createFilter("(" + org.osgi.framework.Constants.OBJECTCLASS + "=" + DriverTracker.clazz + ")"); ////-1$ ////-2$ ////-3$ //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-		} catch (InvalidSyntaxException e) {
-			log.log(LogService.LOG_ERROR, NLS.bind(DeviceMsg.Unable_to_create_Filter_for_DeviceManager, e)); ////-1$
-			throw e;
-		}
-
-		updatewait = 5 * 1000L;
-
-		String prop = context.getProperty("org.eclipse.equinox.device.updatewait"); //$NON-NLS-1$
-
-		if (prop != null) {
-			try {
-				updatewait = Long.parseLong(prop) * 1000L;
-			} catch (NumberFormatException e) {
-				//do nothing
-			}
-		}
-
-		Bundle systemBundle = context.getBundle(0);
-
-		if ((systemBundle != null) && ((systemBundle.getState() & Bundle.STARTING) != 0)) { /* if the system bundle is starting */
-			context.addFrameworkListener(this);
-		} else {
-			startDeviceManager();
-		}
-
-		log.log(LogService.LOG_INFO, DeviceMsg.DeviceManager_started);
-	}
-
-	/**
-	 * Receive notification of a general framework event.
-	 *
-	 * @param event The FrameworkEvent.
-	 */
-	public void frameworkEvent(FrameworkEvent event) {
-		switch (event.getType()) {
-			case FrameworkEvent.STARTED : {
-				context.removeFrameworkListener(this);
-
-				try {
-					startDeviceManager();
-				} catch (Throwable t) {
-					log.log(LogService.LOG_ERROR, NLS.bind(DeviceMsg.DeviceManager_has_thrown_an_error, t)); ////-1$
-				}
-
-				break;
-			}
-		}
-	}
-
-	/**
-	 * Start the DeviceManager thread.
-	 *
-	 */
-	public void startDeviceManager() {
-		if (!running) {
-			head = null;
-			tail = null;
-
-			locators = new DriverLocatorTracker(this);
-
-			selectors = new DriverSelectorTracker(this);
-
-			drivers = new DriverTracker(this);
-
-			devices = new ServiceTracker(context, deviceFilter, this);
-			devices.open();
-
-			running = true;
-			driverServiceRegistered = false;
-
-			thread = (new SecureAction()).createThread(this, "DeviceManager"); //$NON-NLS-1$
-			thread.start(); /* Start DeviceManager thread */
-		}
-	}
-
-	/**
-	 * Stop the Device Manager bundle.
-	 *
-	 * @param context The device manager's bundle context
-	 */
-
-	public void stop(BundleContext contxt) throws Exception {
-		context.removeFrameworkListener(this);
-
-		if (running) {
-			Thread t = thread;
-
-			running = false; /* request thread to stop */
-
-			if (t != null) {
-				t.interrupt();
-
-				synchronized (t) {
-					while (t.isAlive()) /* wait for thread to complete */
-					{
-						try {
-							t.wait(0);
-						} catch (InterruptedException e) {
-							//	do nothing
-						}
-					}
-				}
-			}
-		}
-
-		if (drivers != null) {
-			drivers.close();
-			drivers = null;
-		}
-
-		if (devices != null) {
-			devices.close();
-			devices = null;
-		}
-
-		if (locators != null) {
-			locators.close();
-			locators = null;
-		}
-
-		if (selectors != null) {
-			selectors.close();
-			selectors = null;
-		}
-
-		if (log != null) {
-			log.close();
-			log = null;
-		}
-
-		this.context = null;
-	}
-
-	/**
-	 * A service is being added to the ServiceTracker.
-	 *
-	 * <p>This method is called before a service which matched
-	 * the search parameters of the ServiceTracker is
-	 * added to the ServiceTracker. This method should return the
-	 * service object to be tracked for this ServiceReference.
-	 * The returned service object is stored in the ServiceTracker
-	 * and is available from the getService and getServices
-	 * methods.
-	 *
-	 * @param reference Reference to service being added to the ServiceTracker.
-	 * @return The service object to be tracked for the
-	 * ServiceReference or <tt>null</tt> if the ServiceReference should not
-	 * be tracked.
-	 */
-	public Object addingService(ServiceReference reference) {
-		if (Activator.DEBUG) {
-			this.log.log(reference, LogService.LOG_DEBUG, "DeviceManager device service registered"); //$NON-NLS-1$
-		}
-
-		enqueue(new DeviceTracker(this, reference));
-
-		return (reference);
-	}
-
-	/**
-	 * A service tracked by the ServiceTracker has been modified.
-	 *
-	 * <p>This method is called when a service being tracked
-	 * by the ServiceTracker has had it properties modified.
-	 *
-	 * @param reference Reference to service that has been modified.
-	 * @param service The service object for the modified service.
-	 */
-	public void modifiedService(ServiceReference reference, Object service) {
-		// do nothing
-	}
-
-	/**
-	 * A service tracked by the ServiceTracker is being removed.
-	 *
-	 * <p>This method is called after a service is no longer being tracked
-	 * by the ServiceTracker.
-	 *
-	 * @param reference Reference to service that has been removed.
-	 * @param service The service object for the removed service.
-	 */
-	public void removedService(ServiceReference reference, Object object) {
-		if (Activator.DEBUG) {
-			log.log(reference, LogService.LOG_DEBUG, "DeviceManager device service unregistered"); //$NON-NLS-1$
-		}
-
-		/* We do not implement optional driver reclamation.
-		 * Thus we take no specific action upon Device service unregistration .
-		 */
-	}
-
-	public void refineIdleDevices() {
-		if (Activator.DEBUG) {
-			log.log(LogService.LOG_DEBUG, "DeviceManager refining idle device services"); //$NON-NLS-1$
-		}
-
-		ServiceReference[] references = devices.getServiceReferences();
-
-		if (references != null) {
-			int size = references.length;
-
-			for (int i = 0; i < size; i++) {
-				ServiceReference device = references[i];
-
-				enqueue(new DeviceTracker(this, device));
-			}
-		}
-	}
-
-	/**
-	 * Main thread for DeviceManager.
-	 *
-	 * Attempt to refine all Device services that are not in use
-	 * by a driver bundle.
-	 */
-	public void run() {
-		while (running) {
-			DeviceTracker device;
-
-			try {
-				device = dequeue();
-			} catch (InterruptedException e) {
-				continue;
-			}
-
-			try {
-				device.refine();
-			} catch (Throwable t) {
-				log.log(LogService.LOG_ERROR, NLS.bind(DeviceMsg.DeviceManager_has_thrown_an_error, t)); ////-1$
-			}
-		}
-	}
-
-	/**
-	 * Queue the object to be processed on the work thread.
-	 * The thread is notified.
-	 *
-	 * @param device Work item.
-	 */
-	public synchronized void enqueue(DeviceTracker device) {
-		if (device != null) {
-			if (Activator.DEBUG) {
-				log.log(LogService.LOG_DEBUG, "DeviceManager queuing DeviceTracker"); //$NON-NLS-1$
-			}
-
-			DeviceService item = new DeviceService(device);
-
-			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();
-	}
-
-	/**
-	 * Dequeue an object from the work thread.
-	 * If the queue is empty, this method blocks.
-	 *
-	 * @return Dequeue object from the work thread.
-	 * @throws InterruptedException If the queue has been stopped.
-	 */
-	private synchronized DeviceTracker dequeue() throws InterruptedException {
-		while (running && (head == null)) {
-			/* This should be included per Section 8.7.7 of the OSGi SP R2
-			 * spec, but it causes the OSGi SP R2 Test Suite to fail.
-			 * We should turn this on for R3.
-
-			 if (driverServiceRegistered)
-			 */
-			if (false) {
-				driverServiceRegistered = false;
-
-				refineIdleDevices();
-			} else {
-				locators.uninstallDriverBundles();
-
-				try {
-					if (Activator.DEBUG) {
-						log.log(LogService.LOG_DEBUG, "DeviceManager waiting on queue"); //$NON-NLS-1$
-					}
-
-					wait();
-				} catch (InterruptedException e) {
-					// do nothing
-				}
-			}
-		}
-
-		if (!running) /* if we are stopping */
-		{
-			throw new InterruptedException(); /* throw an exception */
-		}
-
-		DeviceService item = head;
-		head = item.next;
-		if (head == null) {
-			tail = null;
-		}
-
-		return (item.device);
-	}
-}
diff --git a/bundles/org.eclipse.equinox.device/src/org/eclipse/equinox/device/DeviceMsg.java b/bundles/org.eclipse.equinox.device/src/org/eclipse/equinox/device/DeviceMsg.java
deleted file mode 100644
index bbb83f3..0000000
--- a/bundles/org.eclipse.equinox.device/src/org/eclipse/equinox/device/DeviceMsg.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.device;
-
-import org.eclipse.osgi.util.NLS;
-
-public class DeviceMsg extends NLS {
-	private static final String BUNDLE_NAME = "org.eclipse.equinox.device.ExternalMessages"; //$NON-NLS-1$
-
-	public static String DeviceManager_started;
-	public static String Device_service_unregistered;
-	public static String Device_noDriverFound_called;
-	public static String Multiple_Driver_services_with_the_same_DRIVER_ID;
-	public static String DeviceManager_Update_Wait;
-	public static String Driver_service_has_no_DRIVER_ID_property;
-	public static String Device_attached_by_DRIVER_ID;
-	public static String Device_referred_to;
-	public static String Unable_to_create_Filter_for_DeviceManager;
-	public static String DeviceManager_has_thrown_an_error;
-	public static String Device_noDriverFound_error;
-	public static String DriverLocator_unable_to_load_driver;
-	public static String DriverLocator_error_calling_findDrivers;
-	public static String Unable_to_install_or_start_driver_bundle;
-	public static String Unable_to_uninstall_driver_bundle;
-	public static String Unable_to_uninstall_driver_bundle_number;
-	public static String DriverSelector_error_during_match;
-	public static String Driver_service_has_no_DRIVER_ID;
-	public static String Driver_error_during_match;
-	public static String Driver_error_during_attach;
-
-	static {
-		// initialize resource bundles
-		NLS.initializeMessages(BUNDLE_NAME, DeviceMsg.class);
-	}
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.equinox.device/src/org/eclipse/equinox/device/DeviceTracker.java b/bundles/org.eclipse.equinox.device/src/org/eclipse/equinox/device/DeviceTracker.java
deleted file mode 100644
index 8952c06..0000000
--- a/bundles/org.eclipse.equinox.device/src/org/eclipse/equinox/device/DeviceTracker.java
+++ /dev/null
@@ -1,343 +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.equinox.device;
-
-import java.util.*;
-import org.eclipse.osgi.util.NLS;
-import org.osgi.framework.*;
-import org.osgi.service.device.Device;
-import org.osgi.service.log.LogService;
-import org.osgi.util.tracker.ServiceTracker;
-
-/**
- * DeviceTracker class. This class has the logic for refining a
- * Device service.
- *
- */
-public class DeviceTracker extends ServiceTracker {
-	/** OSGi Device class name */
-	protected final static String clazz = "org.osgi.service.device.Device"; //$NON-NLS-1$
-
-	/** DeviceManager object. */
-	protected Activator manager;
-
-	/** reference to Device service we are attempting to refine */
-	protected ServiceReference device;
-
-	/** LogService object */
-	protected LogService log;
-
-	/** Device services properties */
-	protected Dictionary properties;
-
-	/** if false the algorithm must terminate */
-	protected volatile boolean running;
-
-	/**
-	 * Create a DeviceTracker from a ServiceReference.
-	 *
-	 * @param manager DeviceManager object
-	 * @param device ServiceReference to the Device service.
-	 * @param id ID of DeviceTracker object
-	 */
-	public DeviceTracker(Activator manager, ServiceReference device) {
-		super(manager.context, device, null);
-
-		this.manager = manager;
-		log = manager.log;
-
-		if (Activator.DEBUG) {
-			log.log(device, LogService.LOG_DEBUG, this + " constructor"); //$NON-NLS-1$
-		}
-
-		open();
-	}
-
-	/**
-	 * Close the Device.
-	 */
-
-	public void close() {
-		if (device != null) {
-			if (Activator.DEBUG) {
-				log.log(device, LogService.LOG_DEBUG, this + " closing"); //$NON-NLS-1$
-			}
-
-			running = false; /* request thread to stop */
-
-			super.close();
-
-			device = null;
-		}
-	}
-
-	/**
-	 * A service is being added to the ServiceTracker.
-	 *
-	 * <p>This method is called before a service which matched
-	 * the search parameters of the ServiceTracker is
-	 * added to the ServiceTracker. This method should return the
-	 * service object to be tracked for this ServiceReference.
-	 * The returned service object is stored in the ServiceTracker
-	 * and is available from the getService and getServices
-	 * methods.
-	 *
-	 * @param reference Reference to service being added to the ServiceTracker.
-	 * @return The service object to be tracked for the
-	 * ServiceReference or <tt>null</tt> if the ServiceReference should not
-	 * be tracked.
-	 */
-	public Object addingService(ServiceReference reference) {
-		if (Activator.DEBUG) {
-			log.log(reference, LogService.LOG_DEBUG, this + " adding Device service"); //$NON-NLS-1$
-		}
-
-		device = reference;
-
-		running = true;
-
-		properties = new Properties(reference);
-
-		return (reference);
-	}
-
-	/**
-	 * A service tracked by the ServiceTracker has been modified.
-	 *
-	 * <p>This method is called when a service being tracked
-	 * by the ServiceTracker has had it properties modified.
-	 *
-	 * @param reference Reference to service that has been modified.
-	 * @param service The service object for the modified service.
-	 */
-	public void modifiedService(ServiceReference reference, Object service) {
-		properties = new Properties(reference);
-	}
-
-	/**
-	 * A service tracked by the ServiceTracker is being removed.
-	 *
-	 * <p>This method is called after a service is no longer being tracked
-	 * by the ServiceTracker.
-	 *
-	 * @param reference Reference to service that has been removed.
-	 * @param service The service object for the removed service.
-	 */
-	public void removedService(ServiceReference reference, Object service) {
-		if (running) {
-			log.log(reference, LogService.LOG_WARNING, DeviceMsg.Device_service_unregistered);
-			running = false; /* request algorithm to stop */
-		} else {
-			if (Activator.DEBUG) {
-				log.log(reference, LogService.LOG_DEBUG, this + " removing Device service"); //$NON-NLS-1$
-			}
-		}
-		super.removedService(reference, service);
-	}
-
-	/**
-	 * Attempt to refine this Device service.
-	 *
-	 */
-	public void refine() {
-		if (Activator.DEBUG) {
-			log.log(device, LogService.LOG_DEBUG, this + " refining " + device); //$NON-NLS-1$
-		}
-
-		if (running && isIdle()) {
-			/* List of excluded drivers from this algorithm run */
-			DriverTracker drivers = manager.drivers;
-
-			manager.locators.loadDrivers(properties, drivers);
-
-			Vector exclude = new Vector(drivers.size());
-
-			while (running) {
-				ServiceReference driver = drivers.match(device, exclude);
-
-				if (driver == null) {
-					noDriverFound();
-					break;
-				}
-
-				if (drivers.attach(driver, device, exclude)) {
-					break;
-				}
-			}
-		}
-
-		close();
-	}
-
-	/**
-	 * Determine if the device service tracked by this object is idle.
-	 *
-	 * OSGi SP R2 Section 8.2.2 defines in idle device service as:
-	 * "A Device service is not used by any other bundle according to the Framework;
-	 * it is called an idle Device service."
-	 *
-	 * This method defines it as:
-	 *  A Device service is not used by any DRIVER bundle according to the Framework;
-	 *  it is called an idle Device service.
-	 *
-	 * Thus if a non-driver bundle uses a device service, it is still considered
-	 * idle by this method.
-	 *
-	 * @return true if the device service is idle.
-	 */
-	public boolean isIdle() {
-		if (Activator.DEBUG) {
-			log.log(device, LogService.LOG_DEBUG, "Check device service idle: " + device); //$NON-NLS-1$
-		}
-
-		Filter filter_ = manager.driverFilter;
-		Bundle[] users = device.getUsingBundles();
-
-		int userCount = (users == null) ? 0 : users.length;
-
-		for (int i = 0; i < userCount; i++) {
-			ServiceReference[] services = users[i].getRegisteredServices();
-
-			int servicesCount = (services == null) ? 0 : services.length;
-
-			for (int j = 0; j < servicesCount; j++) {
-				if (filter_.match(services[j])) {
-					if (Activator.DEBUG) {
-						log.log(LogService.LOG_DEBUG, "Device " + device + " already in use by bundle " + users[i]); //$NON-NLS-1$ //$NON-NLS-2$
-					}
-
-					return (false);
-				}
-			}
-		}
-
-		return (true);
-	}
-
-	/**
-	 * Called by the device manager after it has failed to attach
-	 * any driver to the device.
-	 * <p>
-	 * If the device can be configured in alternate ways, the driver
-	 * may respond by unregistering the device service and registering
-	 * a different device service instead.</p>
-	 */
-
-	public void noDriverFound() {
-		BundleContext contxt = manager.context;
-
-		Object service = contxt.getService(device);
-
-		try {
-			//It is possible that this is a Free Format Device that does not
-			//implement Device
-			if (service instanceof Device) {
-				log.log(device, LogService.LOG_INFO, DeviceMsg.Device_noDriverFound_called);
-
-				try {
-					((Device) service).noDriverFound();
-				} catch (Throwable t) {
-					log.log(device, LogService.LOG_ERROR, NLS.bind(DeviceMsg.Device_noDriverFound_error, t));
-				}
-			}
-		} finally {
-			contxt.ungetService(device);
-		}
-
-	}
-
-	public String toString() {
-		return "DeviceTracker"; //$NON-NLS-1$
-	}
-
-	/**
-	 * Readonly Dictionary for device properties.
-	 *
-	 */
-	static class Properties extends Hashtable {
-		private static final long serialVersionUID = -8489170394007899809L;
-		/**
-		 * keys in original case.
-		 */
-		protected Vector keys;
-
-		/**
-		 * Create a properties object for the service.
-		 *
-		 * @param device The service to get the properties of.
-		 */
-		protected Properties(ServiceReference device) {
-			super();
-
-			String[] props = device.getPropertyKeys();
-
-			if (props != null) {
-				int size = props.length;
-
-				keys = new Vector(size);
-
-				for (int i = 0; i < size; i++) {
-					String key = props[i];
-					Object value = device.getProperty(key);
-
-					if (value != null) {
-						keys.addElement(key);
-
-						super.put(key.toLowerCase(), value);
-					}
-				}
-			} else {
-				keys = new Vector(0);
-			}
-		}
-
-		/**
-		 * Override keys to support case-preserving of keys.
-		 */
-		public Enumeration keys() {
-			return (keys.elements());
-		}
-
-		/**
-		 * Override get to support case-insensitivity.
-		 *
-		 * @param key header name.
-		 */
-		public Object get(Object key) {
-			if (key instanceof String) {
-				return (super.get(((String) key).toLowerCase()));
-			}
-
-			return (null);
-		}
-
-		/**
-		 * Override put to disable it. This Dictionary is readonly once built.
-		 *
-		 * @param key header name.
-		 * @param value header value.
-		 * @throws UnsupportedOperationException.
-		 */
-		public Object put(Object key, Object value) {
-			throw new UnsupportedOperationException();
-		}
-
-		/**
-		 * Override remove to disable it. This Dictionary is readonly once built.
-		 *
-		 * @param key header name.
-		 * @throws UnsupportedOperationException.
-		 */
-		public Object remove(Object key) {
-			throw new UnsupportedOperationException();
-		}
-	}
-}
diff --git a/bundles/org.eclipse.equinox.device/src/org/eclipse/equinox/device/DriverLocatorTracker.java b/bundles/org.eclipse.equinox.device/src/org/eclipse/equinox/device/DriverLocatorTracker.java
deleted file mode 100644
index bf4e40c..0000000
--- a/bundles/org.eclipse.equinox.device/src/org/eclipse/equinox/device/DriverLocatorTracker.java
+++ /dev/null
@@ -1,345 +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.equinox.device;
-
-import java.io.InputStream;
-import java.util.Dictionary;
-import java.util.Vector;
-import org.eclipse.osgi.util.NLS;
-import org.osgi.framework.*;
-import org.osgi.service.device.DriverLocator;
-import org.osgi.service.log.LogService;
-import org.osgi.util.tracker.ServiceTracker;
-
-/**
- * DriverLocatorTracker class. This class tracks all DriverLocator services.
- *
- */
-public class DriverLocatorTracker extends ServiceTracker {
-	protected final static String clazz = "org.osgi.service.device.DriverLocator"; //$NON-NLS-1$
-
-	/** DeviceManager object. */
-	protected Activator manager;
-
-	/** LogService object */
-	protected LogService log;
-
-	/** List of bundles to be uninstalled. */
-	protected Vector bundles;
-
-	/**
-	 * Create the DriverLocatorTracker.
-	 *
-	 * @param context Device manager bundle context.
-	 * @param log LogService object
-	 */
-	public DriverLocatorTracker(Activator manager) {
-		super(manager.context, clazz, null);
-
-		this.manager = manager;
-		log = manager.log;
-		bundles = new Vector(10, 10);
-
-		if (Activator.DEBUG) {
-			log.log(LogService.LOG_DEBUG, "DriverLocatorTracker constructor"); //$NON-NLS-1$
-		}
-
-		open();
-	}
-
-	/**
-	 * A service is being added to the ServiceTracker.
-	 *
-	 * <p>This method is called before a service which matched
-	 * the search parameters of the ServiceTracker is
-	 * added to the ServiceTracker. This method should return the
-	 * service object to be tracked for this ServiceReference.
-	 * The returned service object is stored in the ServiceTracker
-	 * and is available from the getService and getServices
-	 * methods.
-	 *
-	 * @param reference Reference to service being added to the ServiceTracker.
-	 * @return The service object to be tracked for the
-	 * ServiceReference or <tt>null</tt> if the ServiceReference should not
-	 * be tracked.
-	 */
-	public Object addingService(ServiceReference reference) {
-		if (Activator.DEBUG) {
-			log.log(reference, LogService.LOG_DEBUG, "DriverLocatorTracker adding service"); //$NON-NLS-1$
-		}
-
-		return (context.getService(reference));
-	}
-
-	/**
-	 * A service tracked by the ServiceTracker has been modified.
-	 *
-	 * <p>This method is called when a service being tracked
-	 * by the ServiceTracker has had it properties modified.
-	 *
-	 * @param reference Reference to service that has been modified.
-	 * @param service The service object for the modified service.
-	 */
-	public void modifiedService(ServiceReference reference, Object service) {
-		//do nothing
-	}
-
-	/**
-	 * A service tracked by the ServiceTracker is being removed.
-	 *
-	 * <p>This method is called after a service is no longer being tracked
-	 * by the ServiceTracker.
-	 *
-	 * @param reference Reference to service that has been removed.
-	 * @param service The service object for the removed service.
-	 */
-	public void removedService(ServiceReference reference, Object object) {
-		if (Activator.DEBUG) {
-			log.log(reference, LogService.LOG_DEBUG, "DriverLocatorTracker removing service"); //$NON-NLS-1$
-		}
-
-		context.ungetService(reference);
-	}
-
-	/**
-	 * Call the DriverLocator services in an attempt to locate and
-	 * install driver bundles to refine the device service.
-	 *
-	 * @param locators Array of DriverLocator objects
-	 * @param drivers Dictionary of drivers with key=DRIVER_ID, value=Driver object
-	 */
-	public void loadDrivers(Dictionary properties, DriverTracker drivers) {
-		if (Activator.DEBUG) {
-			log.log(LogService.LOG_DEBUG, Thread.currentThread().getName() + ": DriverLocatorTracker loadDrivers called"); //$NON-NLS-1$
-		}
-
-		ServiceReference[] references = getServiceReferences();
-
-		if (references != null) {
-			int size = references.length;
-
-			for (int i = 0; i < size; i++) {
-				ServiceReference locator = references[i];
-				DriverLocator service = (DriverLocator) getService(locator);
-
-				if (service != null) {
-					if (Activator.DEBUG) {
-						log.log(locator, LogService.LOG_DEBUG, Thread.currentThread().getName() + ": DriverLocator findDrivers called"); //$NON-NLS-1$
-					}
-
-					try {
-						String[] driver_ids = service.findDrivers(properties);
-
-						if (Activator.DEBUG) {
-							int count = (driver_ids == null) ? 0 : driver_ids.length;
-
-							StringBuffer sb = new StringBuffer();
-
-							sb.append('<');
-
-							for (int k = 0; k < count; k++) {
-								if (k > 0) {
-									sb.append(',');
-								}
-								sb.append(driver_ids[k]);
-							}
-
-							sb.append('>');
-
-							log.log(locator, LogService.LOG_DEBUG, Thread.currentThread().getName() + ": DriverLocator findDrivers returned: " + sb); //$NON-NLS-1$
-						}
-
-						if (driver_ids != null) {
-							int count = driver_ids.length;
-
-							for (int j = 0; j < count; j++) {
-								String driver_id = driver_ids[j];
-
-								if (drivers.getDriver(driver_id) == null) {
-									if (Activator.DEBUG) {
-										log.log(locator, LogService.LOG_DEBUG, Thread.currentThread().getName() + ": DriverLocator loadDriver called for driver: " + driver_id); //$NON-NLS-1$
-									}
-
-									try {
-										InputStream in = service.loadDriver(driver_id);
-
-										if (Activator.DEBUG) {
-											log.log(locator, LogService.LOG_DEBUG, Thread.currentThread().getName() + ": DriverLocator loadDriver returned: " + in); //$NON-NLS-1$
-										}
-
-										installDriverBundle(driver_id, in);
-									} catch (Throwable t) {
-										log.log(locator, LogService.LOG_ERROR, NLS.bind(DeviceMsg.DriverLocator_unable_to_load_driver, driver_id), t);
-									}
-								}
-							}
-						}
-					} catch (Throwable t) {
-						log.log(locator, LogService.LOG_ERROR, DeviceMsg.DriverLocator_error_calling_findDrivers, t);
-					}
-				}
-			}
-		}
-	}
-
-	/**
-	 * Get an <code>InputStream</code> from which the driver bundle providing a driver with the giving ID can be installed.
-	 *
-	 * @param id the ID of the driver that needs to be installed.
-	 * @return the <code>InputStream</code> from which the driver
-	 * bundle can be installed
-	 */
-
-	public void loadDriver(String driver_id, DriverTracker drivers) {
-		if (Activator.DEBUG) {
-			log.log(LogService.LOG_DEBUG, Thread.currentThread().getName() + ": DriverLocatorTracker loadDriver called for driver: " + driver_id); //$NON-NLS-1$
-		}
-
-		if (drivers.getDriver(driver_id) == null) {
-			ServiceReference[] references = getServiceReferences();
-
-			if (references != null) {
-				int size = references.length;
-
-				for (int i = 0; i < size; i++) {
-					ServiceReference locator = references[i];
-					DriverLocator service = (DriverLocator) getService(locator);
-
-					if (service != null) {
-						if (Activator.DEBUG) {
-							log.log(locator, LogService.LOG_DEBUG, Thread.currentThread().getName() + ": DriverLocator loadDriver called for driver: " + driver_id); //$NON-NLS-1$
-						}
-
-						try {
-							InputStream in = service.loadDriver(driver_id);
-
-							if (Activator.DEBUG) {
-								log.log(locator, LogService.LOG_DEBUG, Thread.currentThread().getName() + ": DriverLocator loadDriver returned: " + in); //$NON-NLS-1$
-							}
-
-							if (in != null) {
-								installDriverBundle(driver_id, in);
-
-								break;
-							}
-						} catch (Throwable t) {
-							log.log(locator, LogService.LOG_ERROR, NLS.bind(DeviceMsg.DriverLocator_unable_to_load_driver, driver_id), t);
-						}
-					}
-				}
-			}
-		}
-	}
-
-	/**
-	 * Install a Driver bundle.
-	 *
-	 * @param driver_id DRIVER_ID for new driver bundle.
-	 * @param in InputStream to a new driver bundle.
-	 */
-	public void installDriverBundle(String driver_id, InputStream in) {
-		if (Activator.DEBUG) {
-			log.log(LogService.LOG_DEBUG, Thread.currentThread().getName() + ": installDriverBundle from InputStream: " + driver_id); //$NON-NLS-1$
-		}
-
-		if (in != null) {
-			Bundle bundle = null;
-
-			try {
-				bundle = context.installBundle(driver_id, in);
-				/* installBundle will close the InputStream */
-
-				if (Activator.DEBUG) {
-					log.log(LogService.LOG_DEBUG, Thread.currentThread().getName() + ": Driver bundle installed: " + driver_id); //$NON-NLS-1$
-				}
-
-				synchronized (bundles) {
-					if (!bundles.contains(bundle)) {
-						bundles.addElement(bundle);
-					}
-				}
-
-				bundle.start();
-
-				if (Activator.DEBUG) {
-					log.log(LogService.LOG_DEBUG, Thread.currentThread().getName() + ": Driver bundle started: " + driver_id); //$NON-NLS-1$
-				}
-			} catch (BundleException e) {
-				log.log(LogService.LOG_ERROR, NLS.bind(DeviceMsg.Unable_to_install_or_start_driver_bundle, driver_id), e);
-
-				if (bundle != null) {
-					bundles.removeElement(bundle);
-
-					try {
-						bundle.uninstall();
-
-						if (Activator.DEBUG) {
-							log.log(LogService.LOG_DEBUG, Thread.currentThread().getName() + ": Driver bundle uninstalled: " + driver_id); //$NON-NLS-1$
-						}
-					} catch (BundleException ee) {
-						log.log(LogService.LOG_ERROR, NLS.bind(DeviceMsg.Unable_to_uninstall_driver_bundle_number, driver_id), ee);
-					}
-
-					bundle = null;
-				}
-			}
-		}
-	}
-
-	/**
-	 * Remove bundle from uninstall list.
-	 *
-	 * @param bundle bundle to remove from list.
-	 */
-	public void usingDriverBundle(Bundle bundle) {
-		bundles.removeElement(bundle);
-	}
-
-	/**
-	 * Uninstall the recently installed but unused driver bundles.
-	 *
-	 */
-	public void uninstallDriverBundles() {
-		int size;
-		Bundle[] uninstall = null;
-
-		synchronized (bundles) {
-			size = bundles.size();
-
-			if (size > 0) {
-				uninstall = new Bundle[size];
-				bundles.copyInto(uninstall);
-			}
-		}
-
-		for (int i = 0; i < size; i++) {
-			Bundle bundle = uninstall[i];
-
-			if ((bundle.getState() & Bundle.UNINSTALLED) == 0) { /* if bundle not already uninstalled */
-				try {
-					bundle.uninstall();
-
-					if (Activator.DEBUG) {
-						log.log(LogService.LOG_DEBUG, Thread.currentThread().getName() + ": Driver bundle uninstalled"); //$NON-NLS-1$
-					}
-				} catch (BundleException ee) {
-					log.log(LogService.LOG_ERROR, NLS.bind(DeviceMsg.Unable_to_uninstall_driver_bundle, ee));
-				}
-			}
-		}
-
-		bundles.removeAllElements();
-	}
-
-	public boolean isUninstallCandidate(Bundle bundle) {
-		return bundles.contains(bundle);
-	}
-}
diff --git a/bundles/org.eclipse.equinox.device/src/org/eclipse/equinox/device/DriverSelectorTracker.java b/bundles/org.eclipse.equinox.device/src/org/eclipse/equinox/device/DriverSelectorTracker.java
deleted file mode 100644
index ba5782a..0000000
--- a/bundles/org.eclipse.equinox.device/src/org/eclipse/equinox/device/DriverSelectorTracker.java
+++ /dev/null
@@ -1,150 +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.equinox.device;
-
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.device.Device;
-import org.osgi.service.device.DriverSelector;
-import org.osgi.service.log.LogService;
-import org.osgi.util.tracker.ServiceTracker;
-
-/**
- * DriverSelectorTracker class. This class tracks all DriverSelector services.
- *
- */
-public class DriverSelectorTracker extends ServiceTracker {
-	/** Driver service name */
-	protected final static String clazz = "org.osgi.service.device.DriverSelector"; //$NON-NLS-1$
-
-	/** LogService object */
-	protected LogService log;
-
-	/** DeviceManager object. */
-	protected Activator manager;
-
-	/**
-	 * Create the DriverTracker.
-	 *
-	 * @param manager DeviceManager object.
-	 * @param device DeviceTracker we are working for.
-	 */
-	public DriverSelectorTracker(Activator manager) {
-		super(manager.context, clazz, null);
-
-		this.manager = manager;
-		log = manager.log;
-
-		if (Activator.DEBUG) {
-			log.log(LogService.LOG_DEBUG, "DriverSelectorTracker constructor"); //$NON-NLS-1$
-		}
-
-		open();
-	}
-
-	/**
-	 * Select the matching driver.
-	 *
-	 * @param device Device service being matched.
-	 * @param matches Array of the successful matches from Driver services.
-	 * @return ServiceReference to best matched Driver or null of their is no match.
-	 */
-	public ServiceReference select(ServiceReference device, Match[] matches) {
-		if (Activator.DEBUG) {
-			log.log(device, LogService.LOG_DEBUG, "DriverSelector select called"); //$NON-NLS-1$
-		}
-
-		//This should give us the highest ranking DriverSelector (if available)
-		ServiceReference selector = getServiceReference();
-
-		if (selector != null) {
-			DriverSelector service = (DriverSelector) getService(selector);
-
-			try {
-				int index = service.select(device, matches);
-
-				if (index == DriverSelector.SELECT_NONE) {
-					return null;
-				}
-
-				return matches[index].getDriver();
-			} catch (Throwable t) {
-				log.log(selector, LogService.LOG_ERROR, DeviceMsg.DriverSelector_error_during_match, t);
-			}
-		}
-
-		return defaultSelection(matches);
-	}
-
-	/**
-	 * Default match selection algorithm from OSGi SPR2 spec.
-	 *
-	 * @param matchArray An array of the successful matches.
-	 * @return ServiceReference to the selected Driver service
-	 */
-	public ServiceReference defaultSelection(Match[] matches) {
-		int size = matches.length;
-
-		int max = Device.MATCH_NONE;
-		ServiceReference reference = null;
-
-		for (int i = 0; i < size; i++) {
-			Match driver = matches[i];
-
-			int match = driver.getMatchValue();
-
-			if (match >= max) {
-				if (match == max) /* we must break the tie */
-				{
-					reference = breakTie(reference, driver.getDriver());
-				} else {
-					max = match;
-					reference = driver.getDriver();
-				}
-			}
-		}
-
-		return reference;
-	}
-
-	/**
-	 * Select the service with the highest service.ranking. Break ties
-	 * buy selecting the lowest service.id.
-	 *
-	 */
-	public ServiceReference breakTie(ServiceReference ref1, ServiceReference ref2) {
-		//first we check service rankings
-		Object property = ref1.getProperty(org.osgi.framework.Constants.SERVICE_RANKING);
-
-		int ref1Ranking = (property instanceof Integer) ? ((Integer) property).intValue() : 0;
-
-		property = ref2.getProperty(org.osgi.framework.Constants.SERVICE_RANKING);
-
-		int ref2Ranking = (property instanceof Integer) ? ((Integer) property).intValue() : 0;
-
-		if (ref1Ranking > ref2Ranking) {
-			return ref1;
-		} else if (ref2Ranking > ref1Ranking) {
-			return ref2;
-		} else // The rankings must match here
-		{
-			//we now check service ids
-			long ref1ID = ((Long) (ref1.getProperty(org.osgi.framework.Constants.SERVICE_ID))).longValue();
-
-			long ref2ID = ((Long) (ref2.getProperty(org.osgi.framework.Constants.SERVICE_ID))).longValue();
-
-			if (ref1ID < ref2ID) {
-				return ref1;
-			}
-
-			return ref2;
-		}
-	}
-}
diff --git a/bundles/org.eclipse.equinox.device/src/org/eclipse/equinox/device/DriverTracker.java b/bundles/org.eclipse.equinox.device/src/org/eclipse/equinox/device/DriverTracker.java
deleted file mode 100644
index 2b7a7f8..0000000
--- a/bundles/org.eclipse.equinox.device/src/org/eclipse/equinox/device/DriverTracker.java
+++ /dev/null
@@ -1,486 +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.equinox.device;
-
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.util.Hashtable;
-import java.util.Vector;
-import org.eclipse.osgi.util.NLS;
-import org.osgi.framework.*;
-import org.osgi.service.device.Device;
-import org.osgi.service.device.Driver;
-import org.osgi.service.log.LogService;
-import org.osgi.util.tracker.ServiceTracker;
-
-/**
- * DriverTracker class. This class tracks all Driver services.
- *
- */
-public class DriverTracker extends ServiceTracker {
-	/** Driver service name */
-	protected final static String clazz = "org.osgi.service.device.Driver"; //$NON-NLS-1$
-
-	/** LogService object */
-	protected LogService log;
-
-	/** Dictionary mapping DRIVER_ID strings <==> Driver ServiceReferences */
-	protected Hashtable drivers;
-
-	/** DeviceManager object. */
-	protected Activator manager;
-
-	/** Dictionary mapping Driver ID String =>
-	 *  Hashtable (Device ServiceReference => cached Match objects) */
-	protected Hashtable matches;
-
-	/** Dictionary mapping Driver ID String =>
-	 *  Hashtable (Device ServiceReference => cached referral String) */
-	protected Hashtable referrals;
-
-	/**
-	 * Create the DriverTracker.
-	 *
-	 * @param manager DeviceManager object.
-	 * @param device DeviceTracker we are working for.
-	 */
-	public DriverTracker(Activator manager) {
-		super(manager.context, clazz, null);
-
-		this.manager = manager;
-		log = manager.log;
-
-		drivers = new Hashtable(37);
-		matches = new Hashtable(37);
-		referrals = new Hashtable(37);
-
-		if (Activator.DEBUG) {
-			log.log(LogService.LOG_DEBUG, this + " constructor"); //$NON-NLS-1$
-		}
-
-		open();
-	}
-
-	/**
-	 * A service is being added to the ServiceTracker.
-	 *
-	 * <p>This method is called before a service which matched
-	 * the search parameters of the ServiceTracker is
-	 * added to the ServiceTracker. This method should return the
-	 * service object to be tracked for this ServiceReference.
-	 * The returned service object is stored in the ServiceTracker
-	 * and is available from the getService and getServices
-	 * methods.
-	 *
-	 * @param reference Reference to service being added to the ServiceTracker.
-	 * @return The service object to be tracked for the
-	 * ServiceReference or <tt>null</tt> if the ServiceReference should not
-	 * be tracked.
-	 */
-	public Object addingService(ServiceReference reference) {
-		if (Activator.DEBUG) {
-			log.log(reference, LogService.LOG_DEBUG, this + " adding service"); //$NON-NLS-1$
-		}
-
-		String driver_id = getDriverID(reference);
-
-		if (drivers.get(driver_id) != null) {
-			log.log(reference, LogService.LOG_WARNING, NLS.bind(DeviceMsg.Multiple_Driver_services_with_the_same_DRIVER_ID, driver_id));
-
-			return (null); /* don't track this driver */
-		}
-
-		drivers.put(driver_id, reference);
-		drivers.put(reference, driver_id);
-
-		manager.driverServiceRegistered = true;
-
-		/* OSGi SPR2 Device Access 1.1
-		 * Section 8.4.3 - When a new Driver service is registered,
-		 * the Device Attachment Algorithm must be applied to all
-		 * idle Device services.
-		 *
-		 * We do not refine idle Devices when the manager has not fully
-		 * started or the Driver service is from a bundle just installed
-		 * by the devicemanager.
-		 */
-		Bundle bundle = reference.getBundle();
-
-		if (manager.running && !manager.locators.isUninstallCandidate(bundle)) {
-			manager.refineIdleDevices();
-		}
-
-		return (context.getService(reference));
-	}
-
-	/**
-	 * A service tracked by the ServiceTracker has been modified.
-	 *
-	 * <p>This method is called when a service being tracked
-	 * by the ServiceTracker has had it properties modified.
-	 *
-	 * @param reference Reference to service that has been modified.
-	 * @param service The service object for the modified service.
-	 */
-	public void modifiedService(ServiceReference reference, Object service) {
-		if (Activator.DEBUG) {
-			log.log(reference, LogService.LOG_DEBUG, this + " modified service"); //$NON-NLS-1$
-		}
-
-		String driver_id = getDriverID(reference);
-
-		String old_id = (String) drivers.get(reference);
-
-		if (!driver_id.equals(old_id)) {
-			drivers.put(driver_id, reference);
-			drivers.put(reference, driver_id);
-			drivers.remove(old_id);
-		}
-	}
-
-	/**
-	 * A service tracked by the ServiceTracker is being removed.
-	 *
-	 * <p>This method is called after a service is no longer being tracked
-	 * by the ServiceTracker.
-	 *
-	 * @param reference Reference to service that has been removed.
-	 * @param service The service object for the removed service.
-	 */
-	public void removedService(ServiceReference reference, Object object) {
-		if (Activator.DEBUG) {
-			log.log(reference, LogService.LOG_DEBUG, this + " removing service"); //$NON-NLS-1$
-		}
-
-		String driver_id = getDriverID(reference);
-		drivers.remove(driver_id);
-		drivers.remove(reference);
-
-		matches.remove(driver_id);
-		referrals.remove(driver_id);
-
-		context.ungetService(reference);
-
-		/* OSGi SPR2 Device Access 1.1
-		 * Section 8.4.4 - When a Driver service is unregistered,
-		 * the Device Attachment Algorithm must be applied to all
-		 * idle Device services.
-		 *
-		 * We do not refine idle Devices when the manager has not fully
-		 * started or the Driver service is from a bundle just installed
-		 * by the devicemanager.
-		 */
-
-		Bundle bundle = reference.getBundle();
-
-		if (manager.running && !manager.locators.isUninstallCandidate(bundle)) {
-			DriverUpdate update = new DriverUpdate(bundle, manager);
-
-			Thread thread = (new SecureAction()).createThread(update, DeviceMsg.DeviceManager_Update_Wait);
-
-			thread.start();
-		}
-	}
-
-	/**
-	 * Return the DRIVER_ID string for a ServiceReference.
-	 *
-	 * Per Section 8.4.3 of the OSGi SP R2 spec,
-	 * "A Driver service registration must have a DRIVER_ID property"
-	 *
-	 * This method is somewhat more lenient. If no DRIVER_ID property
-	 * is set, it will use the Bundle's location instead.
-	 *
-	 * @param reference Reference to driver service.
-	 * @param log LogService object.
-	 * @return DRIVER_ID string.
-	 */
-	public String getDriverID(final ServiceReference reference) {
-		String driver_id = (String) reference.getProperty(org.osgi.service.device.Constants.DRIVER_ID);
-
-		if (driver_id == null) {
-			log.log(reference, LogService.LOG_WARNING, DeviceMsg.Driver_service_has_no_DRIVER_ID);
-			driver_id = (String) AccessController.doPrivileged(new PrivilegedAction() {
-				public Object run() {
-					return reference.getBundle().getLocation();
-				}
-			});
-		}
-
-		return (driver_id);
-	}
-
-	/**
-	 * Get the ServiceReference for a given DRIVER_ID.
-	 *
-	 * @param driver_id
-	 * @return ServiceReference to a Driver service.
-	 */
-	public ServiceReference getDriver(String driver_id) {
-		return ((ServiceReference) drivers.get(driver_id));
-	}
-
-	/**
-	 * Search the driver list to find the best match for the device.
-	 *
-	 * @return ServiceReference to best matched Driver or null of their is no match.
-	 */
-	public ServiceReference match(ServiceReference device, Vector exclude) {
-		if (Activator.DEBUG) {
-			log.log(device, LogService.LOG_DEBUG, this + ": Driver match called"); //$NON-NLS-1$
-		}
-
-		ServiceReference[] references = getServiceReferences();
-
-		if (references != null) {
-			int size = references.length;
-
-			Vector successfulMatches = new Vector(size);
-
-			for (int i = 0; i < size; i++) {
-				ServiceReference driver = references[i];
-
-				if (exclude.contains(driver)) {
-					if (Activator.DEBUG) {
-						log.log(driver, LogService.LOG_DEBUG, this + ": Driver match excluded: " + drivers.get(driver)); //$NON-NLS-1$
-					}
-				} else {
-					if (Activator.DEBUG) {
-						log.log(driver, LogService.LOG_DEBUG, this + ": Driver match called: " + drivers.get(driver)); //$NON-NLS-1$
-					}
-
-					Match match = getMatch(driver, device);
-
-					if (match == null) {
-						Driver service = (Driver) getService(driver);
-
-						if (service == null) {
-							continue;
-						}
-
-						int matchValue = Device.MATCH_NONE;
-
-						try {
-							matchValue = service.match(device);
-						} catch (Throwable t) {
-							log.log(driver, LogService.LOG_ERROR, DeviceMsg.Driver_error_during_match, t);
-
-							continue;
-						}
-
-						if (Activator.DEBUG) {
-							log.log(driver, LogService.LOG_DEBUG, this + ": Driver match value: " + matchValue); //$NON-NLS-1$
-						}
-
-						match = new Match(driver, matchValue);
-
-						storeMatch(driver, device, match);
-					}
-
-					if (match.getMatchValue() > Device.MATCH_NONE) {
-						successfulMatches.addElement(match);
-					}
-				}
-			}
-
-			size = successfulMatches.size();
-
-			if (size > 0) {
-				Match[] matchArray = new Match[size];
-				successfulMatches.copyInto(matchArray);
-
-				return manager.selectors.select(device, matchArray);
-			}
-		}
-
-		return null;
-	}
-
-	public Match getMatch(ServiceReference driver, ServiceReference device) {
-		String driverid = getDriverID(driver);
-
-		Hashtable driverMatches = (Hashtable) matches.get(driverid);
-
-		if (driverMatches == null) {
-			return null;
-		}
-
-		return (Match) driverMatches.get(device);
-	}
-
-	public void storeMatch(ServiceReference driver, ServiceReference device, Match match) {
-		String driverid = getDriverID(driver);
-
-		Hashtable driverMatches = (Hashtable) matches.get(driverid);
-
-		if (driverMatches == null) {
-			driverMatches = new Hashtable(37);
-
-			matches.put(driverid, driverMatches);
-		}
-
-		driverMatches.put(device, match);
-	}
-
-	/**
-	 * Attempt to attach the driver to the device. If the driver
-	 * refers, add the referred driver to the driver list.
-	 *
-	 * @param driver Driver to attach
-	 * @param device Device to be attached
-	 * @return true is the Driver successfully attached.
-	 */
-	public boolean attach(ServiceReference driver, ServiceReference device, Vector exclude) {
-		if (Activator.DEBUG) {
-			log.log(driver, LogService.LOG_DEBUG, this + ": Driver attach called: " + drivers.get(driver)); //$NON-NLS-1$
-		}
-
-		Driver service = (Driver) getService(driver);
-
-		if (service != null) {
-			String referral = getReferral(driver, device);
-
-			if (referral == null) {
-				try {
-					referral = service.attach(device);
-				} catch (Throwable t) {
-					log.log(driver, LogService.LOG_ERROR, DeviceMsg.Driver_error_during_attach, t);
-
-					exclude.addElement(driver);
-
-					return (false);
-				}
-
-				storeReferral(driver, device, (referral == null) ? "" : referral); //$NON-NLS-1$
-			} else {
-				if (referral.length() == 0) {
-					referral = null;
-				}
-			}
-
-			if (referral == null) {
-				log.log(device, LogService.LOG_INFO, NLS.bind(DeviceMsg.Device_attached_by_DRIVER_ID, drivers.get(driver)));
-
-				manager.locators.usingDriverBundle(driver.getBundle());
-
-				return (true);
-			}
-
-			log.log(device, LogService.LOG_INFO, NLS.bind(DeviceMsg.Device_referred_to, referral));
-			manager.locators.loadDriver(referral, this);
-		}
-
-		exclude.addElement(driver);
-
-		return (false);
-	}
-
-	public String getReferral(ServiceReference driver, ServiceReference device) {
-		String driverid = getDriverID(driver);
-
-		Hashtable driverReferrals = (Hashtable) referrals.get(driverid);
-
-		if (driverReferrals == null) {
-			return null;
-		}
-
-		return (String) driverReferrals.get(device);
-	}
-
-	public void storeReferral(ServiceReference driver, ServiceReference device, String referral) {
-		String driverid = getDriverID(driver);
-
-		Hashtable driverReferrals = (Hashtable) referrals.get(driverid);
-
-		if (driverReferrals == null) {
-			driverReferrals = new Hashtable(37);
-
-			referrals.put(driverid, driverReferrals);
-		}
-
-		driverReferrals.put(device, referral);
-	}
-
-	public String toString() {
-		return "DriverTracker"; //$NON-NLS-1$
-	}
-
-	public class DriverUpdate implements Runnable, ServiceListener, BundleListener {
-		private Activator manager_;
-		private Bundle bundle;
-		private BundleContext contxt;
-
-		/** if false the thread must terminate */
-		private volatile boolean running;
-
-		private long updatewait;
-
-		DriverUpdate(Bundle bundle, Activator manager) {
-			this.manager_ = manager;
-			this.bundle = bundle;
-
-			contxt = manager_.context;
-			updatewait = manager_.updatewait;
-			running = true;
-
-			contxt.addBundleListener(this);
-			try {
-				contxt.addServiceListener(this, manager_.driverFilter.toString());
-			} catch (InvalidSyntaxException e) {
-				/* this should not happen */
-			}
-		}
-
-		public void run() {
-			// 1. Wait for some time
-			// 2. if bundle registers Driver; terminate
-			// 3. if bundle uninstalls; cancel wait
-			// 4. manager.refineIdleDevices()
-
-			try {
-				if (updatewait > 0) {
-					synchronized (this) {
-						wait(updatewait);
-					}
-				}
-			} catch (InterruptedException e) {
-				//do nothing
-			}
-
-			contxt.removeServiceListener(this);
-			contxt.removeBundleListener(this);
-
-			if (running) {
-				manager.refineIdleDevices();
-			}
-		}
-
-		public void serviceChanged(ServiceEvent event) {
-			if ((event.getType() == ServiceEvent.REGISTERED) && bundle.equals(event.getServiceReference().getBundle())) {
-				contxt.removeServiceListener(this);
-
-				running = false; /* cancel */
-
-				/* should probably interrupt waiting thread here */
-			}
-		}
-
-		public void bundleChanged(BundleEvent event) {
-			if ((event.getType() == Bundle.UNINSTALLED) && bundle.equals(event.getBundle())) {
-				contxt.removeBundleListener(this);
-
-				updatewait = 0; /* avoid wait */
-
-				/* should probably interrupt waiting thread here */
-			}
-		}
-	}
-}
diff --git a/bundles/org.eclipse.equinox.device/src/org/eclipse/equinox/device/ExternalMessages.properties b/bundles/org.eclipse.equinox.device/src/org/eclipse/equinox/device/ExternalMessages.properties
deleted file mode 100644
index 93ef233..0000000
--- a/bundles/org.eclipse.equinox.device/src/org/eclipse/equinox/device/ExternalMessages.properties
+++ /dev/null
@@ -1,31 +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
-###############################################################################
-# NLS_MESSAGEFORMAT_ALL 
-DeviceManager_started=DeviceManager started
-Device_service_unregistered=Device service unregistered
-Device_noDriverFound_called=No matching driver found for device
-Multiple_Driver_services_with_the_same_DRIVER_ID=Multiple Driver services with the same DRIVER_ID: {0}
-DeviceManager_Update_Wait=DeviceManager Update Wait
-Driver_service_has_no_DRIVER_ID_property=Driver service has no DRIVER_ID property. Using bundle location as DRIVER_ID.
-Device_attached_by_DRIVER_ID=Device attached by DRIVER_ID={0}
-Device_referred_to=Device referred to {0}
-Unable_to_create_Filter_for_DeviceManager=Unable to create Filter for DeviceManager
-DeviceManager_has_thrown_an_error=DeviceManager has thrown an error
-Device_noDriverFound_error=Device noDriverFound error
-DriverLocator_unable_to_load_driver=DriverLocator unable to load driver: {0}
-DriverLocator_error_calling_findDrivers=DriverLocator error calling findDrivers
-Unable_to_install_or_start_driver_bundle=Unable to install or start driver bundle: {0}
-Unable_to_uninstall_driver_bundle=Unable to uninstall driver bundle
-Unable_to_uninstall_driver_bundle_number=Unable to uninstall driver bundle: {0}
-DriverSelector_error_during_match=DriverSelector error during match
-Driver_service_has_no_DRIVER_ID=Driver service has no DRIVER_ID property. Using bundle location as DRIVER_ID.
-Driver_error_during_match=Driver error during match
-Driver_error_during_attach=Driver error during attach
diff --git a/bundles/org.eclipse.equinox.device/src/org/eclipse/equinox/device/LogMessages.properties b/bundles/org.eclipse.equinox.device/src/org/eclipse/equinox/device/LogMessages.properties
deleted file mode 100644
index e0d8f71..0000000
--- a/bundles/org.eclipse.equinox.device/src/org/eclipse/equinox/device/LogMessages.properties
+++ /dev/null
@@ -1,15 +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
-###############################################################################
-# NLS_MESSAGEFORMAT_ALL 
-Unknown_Log_level=Unknown Log Level
-Info=Log Info
-Warning=Log Warning
-Error=Log Error
diff --git a/bundles/org.eclipse.equinox.device/src/org/eclipse/equinox/device/LogTracker.java b/bundles/org.eclipse.equinox.device/src/org/eclipse/equinox/device/LogTracker.java
deleted file mode 100644
index 44b58ba..0000000
--- a/bundles/org.eclipse.equinox.device/src/org/eclipse/equinox/device/LogTracker.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1998, 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.device;
-
-import java.io.PrintStream;
-import java.text.DateFormat;
-import java.util.Calendar;
-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 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 */
-	protected PrintStream out;
-
-	/** Calendar and DateFormat to user if LogService is unavailable */
-	private static Calendar calendar;
-	private static DateFormat dateFormat;
-	private String timestamp;
-
-	/**
-	 * 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;
-		calendar = Calendar.getInstance();
-		dateFormat = DateFormat.getDateTimeInstance();
-		open();
-	}
-
-	/*
-	 * ----------------------------------------------------------------------
-	 *      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(ServiceReference reference, int level, String message) {
-		log(reference, level, message, null);
-	}
-
-	public synchronized void log(ServiceReference reference, int level, String message, Throwable exception) {
-		ServiceReference[] references = getServiceReferences();
-
-		if (references != null) {
-			int size = references.length;
-
-			for (int i = 0; i < size; i++) {
-				LogService service = (LogService) getService(references[i]);
-				if (service != null) {
-					try {
-						service.log(reference, level, message, exception);
-					} catch (Exception e) {
-						// do nothing
-					}
-				}
-			}
-
-			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.
-				timestamp = dateFormat.format(calendar.getTime());
-				out.print(timestamp + " "); //$NON-NLS-1$
-
-				switch (level) {
-					case LOG_DEBUG : {
-						out.print("Debug: "); //$NON-NLS-1$
-
-						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);
-				}
-			}
-		}
-	}
-}
diff --git a/bundles/org.eclipse.equinox.device/src/org/eclipse/equinox/device/LogTrackerMsg.java b/bundles/org.eclipse.equinox.device/src/org/eclipse/equinox/device/LogTrackerMsg.java
deleted file mode 100644
index 6301732..0000000
--- a/bundles/org.eclipse.equinox.device/src/org/eclipse/equinox/device/LogTrackerMsg.java
+++ /dev/null
@@ -1,27 +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.device;
-
-import org.eclipse.osgi.util.NLS;
-
-public class LogTrackerMsg extends NLS {
-	private static final String BUNDLE_NAME = "org.eclipse.equinox.device.LogMessages"; //$NON-NLS-1$
-
-	public static String Unknown_Log_level;
-	public static String Info;
-	public static String Warning;
-	public static String Error;
-
-	static {
-		// initialize resource bundles
-		NLS.initializeMessages(BUNDLE_NAME, LogTrackerMsg.class);
-	}
-}
diff --git a/bundles/org.eclipse.equinox.device/src/org/eclipse/equinox/device/Match.java b/bundles/org.eclipse.equinox.device/src/org/eclipse/equinox/device/Match.java
deleted file mode 100644
index 39482e8..0000000
--- a/bundles/org.eclipse.equinox.device/src/org/eclipse/equinox/device/Match.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.device;
-
-import org.osgi.framework.ServiceReference;
-
-/**
- * Match implementation class.
- *
- */
-public class Match implements org.osgi.service.device.Match {
-
-	private ServiceReference driver;
-	private int matchValue;
-
-	Match(ServiceReference driver, int matchValue) {
-		this.driver = driver;
-		this.matchValue = matchValue;
-	}
-
-	public ServiceReference getDriver() {
-		return driver;
-	}
-
-	public int getMatchValue() {
-		return matchValue;
-	}
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.equinox.device/src/org/eclipse/equinox/device/SecureAction.java b/bundles/org.eclipse.equinox.device/src/org/eclipse/equinox/device/SecureAction.java
deleted file mode 100644
index 218eed7..0000000
--- a/bundles/org.eclipse.equinox.device/src/org/eclipse/equinox/device/SecureAction.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2005 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
- *******************************************************************************/
-
-package org.eclipse.equinox.device;
-
-import java.security.*;
-
-/**
- * Utility class to execute common privileged code.
- */
-public class SecureAction {
-	// make sure we use the correct controlContext;
-	private AccessControlContext controlContext;
-
-	/**
-	 * Constructs a new SecureAction object.  The constructed SecureAction object 
-	 * uses the caller's AccessControlContext to perform security checks 
-	 */
-	public SecureAction() {
-		// save the control context to be used.
-		this.controlContext = AccessController.getContext();
-	}
-
-	/**
-	 * Creates a new Thread from a Runnable.  Same as calling
-	 * new Thread(target,name).
-	 * @param target the Runnable to create the Thread from.
-	 * @param name The name of the Thread.
-	 * @return The new Thread
-	 */
-	public Thread createThread(final Runnable target, final String name) {
-		if (System.getSecurityManager() == null)
-			return new Thread(target, name);
-		return (Thread) AccessController.doPrivileged(new PrivilegedAction() {
-			public Object run() {
-				return new Thread(target, name);
-			}
-		}, controlContext);
-	}
-	
-	
-}
diff --git a/bundles/org.eclipse.equinox.ds/.classpath b/bundles/org.eclipse.equinox.ds/.classpath
deleted file mode 100644
index 751c8f2..0000000
--- a/bundles/org.eclipse.equinox.ds/.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"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/bundles/org.eclipse.equinox.ds/.cvsignore b/bundles/org.eclipse.equinox.ds/.cvsignore
deleted file mode 100644
index ba077a4..0000000
--- a/bundles/org.eclipse.equinox.ds/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-bin
diff --git a/bundles/org.eclipse.equinox.ds/.project b/bundles/org.eclipse.equinox.ds/.project
deleted file mode 100644
index cdafa44..0000000
--- a/bundles/org.eclipse.equinox.ds/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.equinox.ds</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/bundles/org.eclipse.equinox.ds/.settings/org.eclipse.core.resources.prefs b/bundles/org.eclipse.equinox.ds/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index 16532b2..0000000
--- a/bundles/org.eclipse.equinox.ds/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Tue May 25 15:00:03 EDT 2004
-encoding/<project>=ISO-8859-1
-eclipse.preferences.version=1
diff --git a/bundles/org.eclipse.equinox.ds/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.equinox.ds/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index f1a5108..0000000
--- a/bundles/org.eclipse.equinox.ds/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,49 +0,0 @@
-#Fri Dec 16 09:20:00 CST 2005
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=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=disabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-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.overridingPackageDefaultMethod=warning
-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=ignore
-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=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
diff --git a/bundles/org.eclipse.equinox.ds/META-INF/MANIFEST.MF b/bundles/org.eclipse.equinox.ds/META-INF/MANIFEST.MF
deleted file mode 100644
index eb0dbc2..0000000
--- a/bundles/org.eclipse.equinox.ds/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,26 +0,0 @@
-Bundle-ManifestVersion: 2
-Bundle-SymbolicName: org.eclipse.equinox.ds
-Bundle-Version: 1.0.0.qualifier
-Bundle-Name: %bundleName
-Bundle-Vendor: %bundleVendor
-Bundle-Copyright: %bundleCopyright
-Bundle-Activator: org.eclipse.equinox.ds.Activator
-Bundle-Localization: plugin
-Import-Package: javax.xml.parsers,
- org.eclipse.osgi.util,
- org.osgi.framework;version="1.3.0",
- org.osgi.service.cm;version="1.2.0",
- org.osgi.service.component;version="1.0.0",
- org.osgi.service.log;version="1.0.0",
- org.osgi.service.packageadmin;version="1.2.0",
- org.osgi.util.tracker;version="1.3.0",
- org.xml.sax,
- org.xml.sax.helpers
-Export-Package: org.eclipse.equinox.ds;x-internal:=true,
- org.eclipse.equinox.ds.instance;x-internal:=true,
- org.eclipse.equinox.ds.model;x-internal:=true,
- org.eclipse.equinox.ds.parser;x-internal:=true,
- org.eclipse.equinox.ds.resolver;x-internal:=true,
- org.eclipse.equinox.ds.service;x-internal:=true,
- org.eclipse.equinox.ds.tracker;x-internal:=true,
- org.eclipse.equinox.ds.workqueue;x-internal:=true
diff --git a/bundles/org.eclipse.equinox.ds/about.html b/bundles/org.eclipse.equinox.ds/about.html
deleted file mode 100644
index 3989f53..0000000
--- a/bundles/org.eclipse.equinox.ds/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 11, 2006</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 (&quot;EPL&quot;).  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, &quot;Program&quot; 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 (&quot;Redistributor&quot;) 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>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/bundles/org.eclipse.equinox.ds/build.properties b/bundles/org.eclipse.equinox.ds/build.properties
deleted file mode 100644
index 5d98e30..0000000
--- a/bundles/org.eclipse.equinox.ds/build.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-###############################################################################
-# Copyright (c) 2005 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
-###############################################################################
-bin.includes = META-INF/,\
-               plugin*.properties,\
-               about.html,\
-               .
-src.includes = about.html
-source.. = src/
-output.. = bin/
\ No newline at end of file
diff --git a/bundles/org.eclipse.equinox.ds/plugin.properties b/bundles/org.eclipse.equinox.ds/plugin.properties
deleted file mode 100644
index 9676e24..0000000
--- a/bundles/org.eclipse.equinox.ds/plugin.properties
+++ /dev/null
@@ -1,13 +0,0 @@
-###############################################################################
-# Copyright (c) 2005 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
-###############################################################################
-bundleVendor = Eclipse.org
-bundleName = Declarative Services
-bundleCopyright = Copyright (c) IBM Corp. 2005
diff --git a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/AbstractReflector.java b/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/AbstractReflector.java
deleted file mode 100644
index 78a378e..0000000
--- a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/AbstractReflector.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.ds;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
-/**
- * Base class which provides reflection support methods.
- * 
- * @version $Revision: 1.2 $
- */
-abstract class AbstractReflector {
-
-	/**
-	 * Locate and invoke the specified method.
-	 * 
-	 * @param object Object or Class upon which to call the method.
-	 * @param methodName The name of the method.
-	 * @param params The formal parameter types of the method.
-	 * @param args The arguments for the method call.
-	 * @return The return value of the method.
-	 */
-	protected Object invokeMethod(Object object, String methodName, Class[] params, Object[] args) {
-		Class clazz;
-		if (object instanceof Class) {
-			clazz = (Class) object;
-			object = null;
-		} else {
-			clazz = object.getClass();
-		}
-
-		Method method = getMethod(clazz, methodName, params);
-		try {
-			return method.invoke(object, args);
-		} catch (IllegalAccessException e) {
-			reflectionException(e);
-		} catch (InvocationTargetException e) {
-			reflectionException(e);
-		}
-
-		return null;
-	}
-
-	/**
-	 * Locate the specified method.
-	 * 
-	 * @param clazz Class upon which to locate the method.
-	 * @param methodName The name of the method.
-	 * @param params The formal parameter types of the method.
-	 * @return The method.
-	 */
-	private Method getMethod(Class clazz, String methodName, Class[] params) {
-		Exception exception = null;
-		for (; clazz != null; clazz = clazz.getSuperclass()) {
-			try {
-				Method method = clazz.getDeclaredMethod(methodName, params);
-				// enable us to access the method if not public
-				method.setAccessible(true);
-				return method;
-			} catch (NoSuchMethodException e) {
-				exception = e;
-				continue;
-			}
-		}
-
-		reflectionException(exception);
-		return null;
-	}
-
-	//
-	//	/**
-	//	 * Locate and return the value of the specified field.
-	//	 * 
-	//	 * @param object Object or Class upon which to locate the field.
-	//	 * @param fieldName The name of the field.
-	//	 * @return The value of the field.
-	//	 */
-	//	protected Object getFieldValue(Object object, String fieldName) {
-	//		Class clazz;
-	//		if (object instanceof Class) {
-	//			clazz = (Class) object;
-	//			object = null;
-	//		}
-	//		else {
-	//			clazz = object.getClass();
-	//		}
-	//
-	//		Field field = getField(clazz, fieldName);
-	//		try {
-	//			return field.get(object);
-	//		}
-	//		catch (IllegalAccessException e) {
-	//			reflectionException(e);
-	//		}
-	//
-	//		return null;
-	//	}
-	//
-	//	/**
-	//	 * Locate the specified field.
-	//	 * 
-	//	 * @param clazz Class upon which to locate the field.
-	//	 * @param fieldName The name of the field.
-	//	 * @return The field.
-	//	 */
-	//	private Field getField(Class clazz, String fieldName) {
-	//		Exception exception = null;
-	//		for (; clazz != null; clazz = clazz.getSuperclass()) {
-	//			try {
-	//				Field field = clazz.getDeclaredField(fieldName);
-	//				// enable us to access the field if not public
-	//				field.setAccessible(true);
-	//				return field;
-	//			}
-	//			catch (NoSuchFieldException e) {
-	//				exception = e;
-	//				continue;
-	//			}
-	//		}
-	//
-	//		reflectionException(exception);
-	//		return null;
-	//	}
-
-	/**
-	 * Abstract method called when a reflection exception occurs.
-	 * 
-	 * @param e Exception which indicates the reflection logic is confused.
-	 */
-	protected abstract void reflectionException(Exception e);
-
-}
diff --git a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/Activator.java b/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/Activator.java
deleted file mode 100644
index 742927c..0000000
--- a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/Activator.java
+++ /dev/null
@@ -1,430 +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.ds;
-
-import java.util.ArrayList;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.equinox.ds.model.ComponentDescription;
-import org.eclipse.equinox.ds.model.ComponentDescriptionCache;
-import org.eclipse.equinox.ds.parser.XMLParserNotAvailableException;
-import org.eclipse.equinox.ds.resolver.Resolver;
-import org.eclipse.equinox.ds.tracker.BundleTracker;
-import org.eclipse.equinox.ds.tracker.BundleTrackerCustomizer;
-import org.eclipse.equinox.ds.workqueue.WorkDispatcher;
-import org.eclipse.equinox.ds.workqueue.WorkQueue;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleActivator;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.BundleEvent;
-import org.osgi.framework.SynchronousBundleListener;
-import org.osgi.service.log.LogService;
-import org.osgi.service.packageadmin.PackageAdmin;
-import org.osgi.util.tracker.ServiceTracker;
-
-/**
- * 
- * Main class for the SCR. This class will start the SCR bundle and begin
- * processing other bundles.
- * 
- * @version $Revision: 1.5 $
- */
-public class Activator implements BundleActivator, BundleTrackerCustomizer, WorkDispatcher, SynchronousBundleListener {
-
-	public BundleContext context;
-	private FrameworkHook framework;
-	private ComponentDescriptionCache cache;
-	private BundleTracker bundleTracker;
-	public Resolver resolver;
-	private ServiceTracker packageAdminTracker;
-	public WorkQueue workQueue;
-
-	private Hashtable bundleToComponentDescriptions;
-	private Hashtable bundleToLastModified;
-
-	/**
-	 * New Service Components (ComponentDescription)s are added
-	 */
-	public static final int ADD = 1;
-
-	/**
-	 * Start the SCR bundle.
-	 * 
-	 * @param bundleContext BundleContext for SCR implementation.
-	 */
-	public void start(BundleContext bundleContext) {
-		this.context = bundleContext;
-		framework = new FrameworkHook();
-		Log.init(context);
-		cache = new ComponentDescriptionCache(this);
-		bundleToComponentDescriptions = new Hashtable();
-		bundleToLastModified = new Hashtable();
-
-		packageAdminTracker = new ServiceTracker(context, PackageAdmin.class.getName(), null);
-		packageAdminTracker.open();
-
-		//notify this object when bundles enter (or exit) the Bundle.ACTIVE state
-		bundleTracker = new BundleTracker(context, Bundle.ACTIVE, this);
-
-		workQueue = new WorkQueue("SCR Work Queue"); //$NON-NLS-1$
-		workQueue.setDaemon(true); // make sure the work queue is daemon
-		resolver = new Resolver(this);
-		workQueue.start();
-		bundleContext.addBundleListener(this); //track UNRESOLVED events
-		bundleTracker.open();
-	}
-
-	/**
-	 * Stop the SCR bundle.
-	 * 
-	 * @param bundleContext BundleContext for SCR implementation.
-	 */
-	public void stop(BundleContext bundleContext) {
-
-		bundleTracker.close();
-
-		//process all remaining events in queue and then shut it down
-		workQueue.closeAndJoin();
-
-		resolver.dispose();
-		packageAdminTracker.close();
-
-		//shut down cache (write to disk)
-		cache.dispose();
-
-		Log.dispose();
-
-		cache = null;
-		framework = null;
-		resolver = null;
-		bundleToComponentDescriptions = null;
-		bundleToLastModified = null;
-		this.context = null;
-	}
-
-	/**
-	 * Returns the bundle's Service-Component manifest header.  If the bundle
-	 * has header, then the bundle will be tracked. If not, null is returned 
-	 * and the bundle will not be tracked.
-	 * 
-	 * If the bundle contains service components, parse the service component xml 
-	 * file(s) and create an {@link ComponentDescription ComponentDescription} object for every service 
-	 * component in the bundle.  Add the {@link ComponentDescription ComponentDescriptions} to 
-	 * the queue to be sent to the resolver.
-	 * 
-	 * @param bundle Candidate bundle to be tracked.
-	 * @return the bundle's Service-Component manifest header or null if the 
-	 * bundle does not specify the header.
-	 */
-	public Object addingBundle(Bundle bundle) {
-
-		List enableComponentDescriptions = new ArrayList();
-
-		PackageAdmin packageAdmin = (PackageAdmin) packageAdminTracker.getService();
-		if (packageAdmin.getBundleType(bundle) != 0) {
-			return null; // don't process fragments.
-		}
-
-		Long bundleID = new Long(bundle.getBundleId());
-
-		// get the bundle's last modified date
-		Long bundleLastModified = new Long(bundle.getLastModified());
-
-		// get the last saved value for the bundle's last modified date
-		Long bundleOldLastModified = (Long) bundleToLastModified.get(bundleID);
-
-		try {
-			// compare the two and if changed ( or if first time ) update the maps
-			if ((!bundleLastModified.equals(bundleOldLastModified)) || (bundleOldLastModified == null)) {
-
-				// get the BundleContext for this bundle (framework impl dependent)
-				BundleContext bundleContext = framework.getBundleContext(bundle);
-
-				// get all ComponentDescriptions for this bundle
-				// throws XMLParserNotAvailableException if no XML parser
-				List componentDescriptions = cache.getComponentDescriptions(bundleContext);
-
-				// update map of bundle to ComponentDescriptions
-				bundleToComponentDescriptions.put(bundleID, componentDescriptions);
-
-				// update bundle:lastModifiedDate map
-				bundleToLastModified.put(bundleID, bundleLastModified);
-
-				// for each CD in bundle set enable flag based on autoenable
-
-				Iterator it = componentDescriptions.iterator();
-				while (it.hasNext()) {
-					ComponentDescription componentDescription = (ComponentDescription) it.next();
-					validate(componentDescription);
-					if (componentDescription.isAutoenable() && componentDescription.isValid()) {
-						componentDescription.setEnabled(true);
-						enableComponentDescriptions.add(componentDescription);
-					}
-				}
-			}
-
-			// publish all CDs to be enabled, to resolver (add to the workqueue and
-			// publish event)
-			if (!enableComponentDescriptions.isEmpty()) {
-				workQueue.enqueueWork(this, ADD, enableComponentDescriptions);
-			}
-
-		} catch (XMLParserNotAvailableException e) {
-			//cache.getComponentDescriptions(bundleContext); threw this exception
-			//because we needed an XML parser and we didn't have one
-			//when an XML parser becomes available this method will be called again
-			//log a message but still return the bundleId so this bundle will be tracked
-			Log.log(LogService.LOG_INFO, "Declarative Services waiting for XML parser for bundle " + bundleID);
-		}
-		return bundleID;
-	}
-
-	/**
-	 * Empty implementation. No work is needed for modifiedBundle.
-	 * 
-	 * @param bundle
-	 * @param object
-	 */
-	public void modifiedBundle(Bundle bundle, Object object) {
-
-		Long bundleID = new Long(bundle.getBundleId());
-
-		// flush map
-		bundleToComponentDescriptions.remove(bundleID);
-
-		// flush map
-		bundleToLastModified.remove(bundleID);
-
-	}
-
-	/**
-	 * A bundle is going to an in-ACTIVE state.  Dispose and remove it's service
-	 * components from the system.  Disposal is done synchronously so all of the 
-	 * service components have been disposed before this method returns.
-	 * 
-	 * @param bundle Bundle becoming untracked.
-	 * @param object Value returned by addingBundle.
-	 */
-
-	public void removedBundle(Bundle bundle, Object object) {
-
-		List disableComponentDescriptions = new ArrayList();
-		Long bundleID = new Long(bundle.getBundleId());
-
-		// get CD's for this bundle
-		List ComponentDescriptions = (List) bundleToComponentDescriptions.get(new Long(bundle.getBundleId()));
-		if (ComponentDescriptions != null) {
-			Iterator it = ComponentDescriptions.iterator();
-
-			// for each CD in bundle
-			while (it.hasNext()) {
-				ComponentDescription ComponentDescription = (ComponentDescription) it.next();
-
-				// check if enabled && satisfied
-				if ((ComponentDescription.isEnabled())) {
-
-					// add to disabled list
-					disableComponentDescriptions.add(ComponentDescription);
-
-					// mark disabled
-					ComponentDescription.setEnabled(false);
-				}
-			}
-		}
-
-		// remove the bundle from the lists/maps
-		bundleToComponentDescriptions.remove(bundleID);
-		bundleToLastModified.remove(bundleID);
-
-		resolver.disableComponents(disableComponentDescriptions);
-		return;
-	}
-
-	/**
-	 * Called by Service Component code via ComponentContext
-	 * 
-	 * Enable the component(s) and put them on the queue for the resolver.
-	 * 
-	 * @param name The name of a component or <code>null</code> to indicate
-	 *        all components in the bundle.
-	 * 
-	 * @param bundle The bundle which contains the Service Component to be
-	 *        enabled
-	 */
-	public void enableComponent(String name, Bundle bundle) {
-
-		// get all ComponentDescriptions for this bundle
-		List componentDescriptions = (List) bundleToComponentDescriptions.get(new Long(bundle.getBundleId()));
-
-		// Create the list of CD's to be enabled
-		List enableCDs = new ArrayList();
-
-		if (componentDescriptions != null) {
-			Iterator it = componentDescriptions.iterator();
-
-			// for each CD in list
-			while (it.hasNext()) {
-				ComponentDescription componentDescription = (ComponentDescription) it.next();
-				validate(componentDescription);
-
-				// if name is null then enable ALL Component Descriptions in
-				// this bundle
-				if (name == null) {
-
-					// if CD is valid and is disabled then enable it
-					if (componentDescription.isValid() && !componentDescription.isEnabled()) {
-
-						// add to list of CDs to enable
-						enableCDs.add(componentDescription);
-
-						// set CD enabled
-						componentDescription.setEnabled(true);
-					}
-				} else {
-					if (componentDescription.getName().equals(name)) {
-
-						// if CD is valid and is disabled then enable it
-						if (componentDescription.isValid() && !componentDescription.isEnabled()) {
-
-							// add to list of CDs to enable
-							enableCDs.add(componentDescription);
-
-							// set CD enabled
-							componentDescription.setEnabled(true);
-						}
-					}
-				}
-				// else it is either not valid or it is already enabled - do
-				// nothing
-			}
-		}
-
-		// publish to resolver the list of CDs to enable
-		if (!enableCDs.isEmpty())
-			workQueue.enqueueWork(this, ADD, enableCDs);
-	}
-
-	/**
-	 * Disable a Service Component - The specified component name must be in the 
-	 * bundle as this component. Called by Service Component via ComponentContext.
-	 * 
-	 * Synchronously disable the component.  All component configurations (component configurations)
-	 * are disposed before this method returns.
-	 * 
-	 * @param name The name of a component to disable
-	 * 
-	 * @param bundle The bundle which contains the Service Component to be
-	 *        disabled
-	 */
-
-	public void disableComponent(String name, Bundle bundle) {
-
-		List disableComponentDescriptions = new ArrayList();
-
-		// Get the list of CDs for this bundle
-		List componentDescriptionsList = (List) bundleToComponentDescriptions.get(new Long(bundle.getBundleId()));
-
-		if (componentDescriptionsList != null) {
-			Iterator it = componentDescriptionsList.iterator();
-
-			// for each ComponentDescription in list
-			while (it.hasNext()) {
-				ComponentDescription componentDescription = (ComponentDescription) it.next();
-
-				// find the ComponentDescription with the specified name
-				if (componentDescription.getName().equals(name)) {
-
-					// if enabled then add to disabled list and mark disabled
-					if (componentDescription.isEnabled()) {
-
-						disableComponentDescriptions.add(componentDescription);
-
-						componentDescription.setEnabled(false);
-
-					}
-				}
-			}
-		}
-
-		// publish to resolver the list of CDs to disable
-		resolver.disableComponents(disableComponentDescriptions);
-		return;
-	}
-
-	/**
-	 * Put a job on the work queue to be done later (asynchronously) by the work 
-	 * queue thread.
-	 * @param workAction currently only valid value is Main.ADD
-	 * @param workObject work object to be acted upon
-	 * @see org.eclipse.equinox.ds.workqueue.WorkDispatcher#dispatchWork(int,
-	 *      java.lang.Object)
-	 */
-	public void dispatchWork(int workAction, Object workObject) {
-
-		List descriptions;
-		descriptions = (List) workObject;
-		switch (workAction) {
-			case ADD :
-				resolver.enableComponents(descriptions);
-				break;
-		}
-	}
-
-	/**
-	 * Validate the Component Description
-	 * 
-	 * If error is found log and throw exception.
-	 * 
-	 * @param cd to be validated
-	 * @throws Throwable if fatal problem is found
-	 */
-	private void validate(ComponentDescription componentDescription) {
-
-		if ((componentDescription.getFactory() != null) && (componentDescription.getService() != null) && (componentDescription.getService().isServicefactory())) {
-			componentDescription.setValid(false);
-			Log.log(1, "validate cd: ", new Throwable("invalid to specify both ComponentFactory and ServiceFactory"));
-		} else if ((componentDescription.isImmediate()) && (componentDescription.getService() != null) && (componentDescription.getService().isServicefactory())) {
-			componentDescription.setValid(false);
-			Log.log(1, "validate cd: ", new Throwable("invalid to specify both immediate and ServiceFactory"));
-		} else if ((componentDescription.isImmediate()) && (componentDescription.getFactory() != null)) {
-			componentDescription.setValid(false);
-			Log.log(1, "validate cd: ", new Throwable("invalid to specify both immediate and ComponentFactory"));
-		} else if ((!componentDescription.isImmediate()) && (componentDescription.getService() == null) && (componentDescription.getFactory() == null)) {
-			componentDescription.setValid(false);
-			Log.log(1, "validate cd: ", new Throwable("invalid set immediate to false and provide no Service"));
-		} else {
-			componentDescription.setValid(true);
-		}
-
-	}
-
-	/**
-	 * SynchronousBundleListener - when a bundle we are tracking is UNRESOLVED, 
-	 * clear it's reflection cache.
-	 */
-	public void bundleChanged(BundleEvent event) {
-		if (event.getType() == BundleEvent.UNRESOLVED) {
-
-			// get cached ComponentDescriptions for this bundle, if any
-			List componentDescriptions = cache.getCachedComponentDescriptions(event.getBundle());
-
-			Iterator itr = componentDescriptions.iterator();
-			while(itr.hasNext()) {
-				ComponentDescription componentDescription = (ComponentDescription)itr.next();
-
-				componentDescription.clearReflectionMethods();
-			}
-		} //end if event type == UNRESOLVED
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/FrameworkHook.java b/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/FrameworkHook.java
deleted file mode 100644
index e372521..0000000
--- a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/FrameworkHook.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.ds;
-
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-
-/**
- * This class provide implementation hooks into the Eclipse OSGi framework
- * implementation. This class must be modified to connect SCR with other
- * framework implementations.
- * 
- * @version $Revision: 1.2 $
- */
-class FrameworkHook extends AbstractReflector {
-	/**
-	 * Return the BundleContext for the specified bundle.
-	 * 
-	 * @param bundle The bundle whose BundleContext is desired.
-	 * @return The BundleContext for the specified bundle.
-	 */
-	BundleContext getBundleContext(final Bundle bundle) {
-		if (System.getSecurityManager() == null) {
-			return (BundleContext) invokeMethod(bundle, "getContext", null, null); //$NON-NLS-1$
-		}
-		return (BundleContext) AccessController.doPrivileged(new PrivilegedAction() {
-			public Object run() {
-				return invokeMethod(bundle, "getContext", null, null); //$NON-NLS-1$
-			}
-		});
-	}
-
-	/**
-	 * Throws an IllegalStateException if the reflection logic cannot find what
-	 * it is looking for. This probably means this class does not properly
-	 * recognize the framework implementation.
-	 * 
-	 * @param e Exception which indicates the reflection logic is confused.
-	 */
-	protected void reflectionException(Exception e) {
-		throw new IllegalStateException("FrameworkHook does not recognize the framework implementation: " + e.getMessage());
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/Log.java b/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/Log.java
deleted file mode 100644
index 94f00bf..0000000
--- a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/Log.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.ds;
-
-import org.osgi.framework.BundleContext;
-import org.osgi.service.log.LogService;
-import org.osgi.util.tracker.ServiceTracker;
-
-/**
- * Utility class with static methods for logging to LogService, if available 
- * 
- * @version $Revision: 1.2 $
- */
-public class Log {
-	static private ServiceTracker logTracker;
-
-	private Log() {
-	};
-
-	static void init(BundleContext bc) {
-		logTracker = new ServiceTracker(bc, LogService.class.getName(), null);
-		logTracker.open();
-	}
-
-	static void dispose() {
-		if (logTracker != null) {
-			logTracker.close();
-		}
-		logTracker = null;
-	}
-
-	public static void log(int level, String message) {
-		log(level, message, null);
-	}
-
-	public static void log(int level, String message, Throwable e) {
-		LogService logService = (LogService) logTracker.getService();
-		if (logService != null) {
-			logService.log(level, message, e);
-		}
-	}
-
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/instance/BuildDispose.java b/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/instance/BuildDispose.java
deleted file mode 100644
index f98c77c..0000000
--- a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/instance/BuildDispose.java
+++ /dev/null
@@ -1,717 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.ds.instance;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.*;
-import org.eclipse.equinox.ds.Activator;
-import org.eclipse.equinox.ds.Log;
-import org.eclipse.equinox.ds.model.*;
-import org.eclipse.equinox.ds.resolver.Reference;
-import org.eclipse.equinox.ds.resolver.Resolver;
-import org.eclipse.equinox.ds.service.ComponentContextImpl;
-import org.eclipse.equinox.ds.service.ComponentInstanceImpl;
-import org.osgi.framework.*;
-import org.osgi.service.component.*;
-
-/**
- * This class provides the following function
- * 
- * Build of a component instance - includes activate, bind, instantiate. Dispose
- * of a component instance - includes deactivate, unbind, unreference.
- * 
- */
-public class BuildDispose {
-
-	private InvokeMethod invoke;
-
-	/**
-	 * Counts re-entry in to the
-	 * {@link BuildDispose#buildComponentConfigInstance(Bundle, ComponentConfiguration)} method. This
-	 * is used to handle circular dependencies.
-	 */
-	private int stackCount;
-
-	/**
-	 * Used with stackCount to handle circular dependencies in the
-	 * {@link BuildDispose#buildComponentConfigInstance(Bundle, ComponentConfiguration)} method.
-	 */
-	private List delayedBindList;
-
-	/** Main SCR class */
-	private Activator main;
-
-	/**
-	 * @param main Main SCR class
-	 */
-	BuildDispose(Activator main) {
-		invoke = new InvokeMethod(this);
-		this.main = main;
-		stackCount = 0;
-		delayedBindList = new ArrayList();
-	}
-
-	/**
-	 * dispose - cleanup since the SCR is shutting down
-	 */
-	void dispose() {
-		synchronized (this) {
-			invoke = null;
-			main = null;
-		}
-	}
-
-	/**
-	 * Create an instance of a Component Configuration ({@link ComponentConfiguration}).
-	 * Instantiate the Service Component implementation class and create a
-	 * {@link ComponentInstanceImpl} to track it. Create a
-	 * {@link ComponentContext},
-	 * {@link BuildDispose#bind(ComponentConfiguration, ComponentInstanceImpl) bind}
-	 * the Service Component's references and call the implementation class'
-	 * "activate" method.
-	 * 
-	 * This method also handles possible circluarities. The method is re-entrant
-	 * and tracks how many times we have entered the method. If a possible
-	 * circularity is encountered while binding references (it is detected
-	 * earlier by the resolver) then the bind action is delayed until the last
-	 * time we exit this method to "break" the cirularity. See the OSGi R4
-	 * specification section 112.3.5 for more information about Cirular
-	 * References.
-	 * 
-	 * @param usingBundle - if this Component Instance is being created to
-	 *        return from a BundleContext.getService() call, this is the bundle
-	 *        which is "using" this instance. Otherwise null.
-	 * 
-	 * @param componentConfiguration - Component Configuration to create an instance of
-	 * 
-	 * @throws ComponentException
-	 * 
-	 * @return ComponentInstance
-	 * 
-	 */
-
-	public ComponentInstance buildComponentConfigInstance(Bundle usingBundle, ComponentConfiguration componentConfiguration) throws ComponentException {
-
-		synchronized (this) {
-
-			// keep track of how many times we have re-entered this method
-			stackCount++;
-
-			ComponentInstanceImpl componentInstance = null;
-
-			try {
-				ComponentDescription componentDescription = componentConfiguration.getComponentDescription();
-
-				Object instance = createInstance(componentDescription);
-
-				componentInstance = instantiate(componentConfiguration, instance);
-
-				createComponentContext(usingBundle, componentInstance);
-
-				bind(componentInstance);
-
-				activate(componentInstance);
-
-				componentConfiguration.addInstance(componentInstance);
-
-			} catch (ComponentException e) {
-				Log.log(1, "[SCR] Error attempting to build component ", e);
-				throw e;
-
-			} finally {
-
-				// keep track of how many times we have re-entered this method
-				stackCount--;
-
-			}
-
-			// if this is the last time in this method and we have "delayed"
-			// bind
-			// actions to do (there was a circularity during bind)
-			if (stackCount == 0 && !delayedBindList.isEmpty()) {
-				// put delayed dynamic binds on the queue.
-				// (this is used to handle circularity)
-				main.resolver.instanceProcess.workQueue.enqueueWork(main.resolver, Resolver.DYNAMICBIND, ((ArrayList) delayedBindList).clone());
-				delayedBindList.clear();
-			}
-
-			return componentInstance;
-		} // end synchronized(this)
-	}
-
-	/**
-	 * Dispose of a Component Configuration.
-	 * 
-	 * Unregister this Component Configuration's service, if it has one.
-	 * 
-	 * Call
-	 * {@link BuildDispose#disposeComponentInstance(ComponentConfiguration, ComponentInstance)}
-	 * for each instance of this Component Configuration. * Dispose of the
-	 * {@link ComponentConfiguration} object.
-	 * 
-	 * Synchronously dispose of this Component Configuration. This method will
-	 * not return until all instances of this Component Configuration are
-	 * disposed.
-	 * 
-	 * @param componentConfiguration Component Configuration to dispose
-	 */
-	void disposeComponentConfig(ComponentConfiguration componentConfiguration) {
-
-		synchronized (this) {
-			// unregister this component configuration's service
-			ServiceRegistration serviceRegistration = componentConfiguration.getServiceRegistration();
-			if (serviceRegistration != null) {
-				try {
-					serviceRegistration.unregister();
-				} catch (IllegalStateException e) {
-					// service has already been unregistered, no problem
-				}
-			}
-
-			// get all instances for this component
-			Iterator it = componentConfiguration.getInstances().iterator();
-			while (it.hasNext()) {
-				disposeComponentInstance((ComponentInstanceImpl) it.next());
-			}
-			componentConfiguration.removeAllInstances();
-
-			// clean up this component configuration object
-			it = componentConfiguration.getReferences().iterator();
-			while (it.hasNext()) {
-				Reference reference = (Reference) it.next();
-
-				reference.clearServiceReferences();
-			}
-			componentConfiguration.clearDelayActivateComponentConfigurationNames();
-		}
-	}
-
-	/**
-	 * Dispose of the Component Instance.
-	 * 
-	 * Deactivate the instance, call unbind methods, and release any services it
-	 * was using.
-	 * 
-	 * Synchronously disposes of a Component Configuration instance. This method
-	 * does not return until the instance has been deactivated and unbound, and
-	 * any services used by the instance have been released.
-	 * 
-	 * @param ci instance of component configuration to dispose
-	 */
-	public void disposeComponentInstance(ComponentInstance ci) {
-
-		synchronized (this) {
-			ComponentInstanceImpl componentInstance = (ComponentInstanceImpl) ci;
-			deactivate(componentInstance);
-			unbind(componentInstance);
-
-			// if this was the last instance of the component configuration, make sure we unget
-			// any lingering references, just in case
-			ComponentConfiguration componentConfiguration = componentInstance.getComponentConfiguration();
-			if (componentConfiguration.getInstances().isEmpty()) {
-				BundleContext context = componentConfiguration.getComponentDescription().getBundleContext();
-				Iterator referenceItr = componentConfiguration.getReferences().iterator();
-				while (referenceItr.hasNext()) {
-					Reference reference = (Reference) referenceItr.next();
-
-					Iterator serviceReferenceItr = reference.getServiceReferences().iterator();
-					while (serviceReferenceItr.hasNext()) {
-						context.ungetService((ServiceReference) serviceReferenceItr.next());
-
-					}
-				}
-			}
-
-			componentInstance = null;
-		}
-	}
-
-	/**
-	 * Instantiate an instance of the implementation class of this Service
-	 * Component
-	 * 
-	 * @param cd Service Component
-	 * 
-	 * @return an instance of the implementation class of cd
-	 * 
-	 * @throws ComponentException and logs an error if there is an exception
-	 *         loading the class or instantiating the instance
-	 * 
-	 */
-
-	private Object createInstance(ComponentDescription cd) throws ComponentException {
-		Object instance = null;
-		String classname = cd.getImplementation().getClassname();
-		try {
-			instance = cd.getBundleContext().getBundle().loadClass(classname).newInstance();
-		} catch (IllegalAccessException e) {
-			Log.log(1, "[SCR] IllegalAccessException attempting to create instance ", e);
-			throw new ComponentException(e.getMessage());
-		} catch (ClassNotFoundException e) {
-			Log.log(1, "[SCR] ClassNotFoundException attempting to create instance. ", e);
-			throw new ComponentException(e.getMessage());
-		} catch (InstantiationException e) {
-			Log.log(1, "[SCR] InstantiationException attempting to create instance. ", e);
-			throw new ComponentException(e.getMessage());
-		}
-
-		return instance;
-	}
-
-	/**
-	 * Create a ComponentInstanceImpl object to track an instance of a Component
-	 * Configuration's implementation class.
-	 * 
-	 * @param componentConfiguration Component Configuration
-	 * 
-	 * @param instance instance of Component Configuration's implementation
-	 *        class to track
-	 * 
-	 * @return ComponentInstanceImpl
-	 * 
-	 */
-	private ComponentInstanceImpl instantiate(ComponentConfiguration componentConfiguration, Object instance) {
-		return new ComponentInstanceImpl(main, componentConfiguration, instance);
-	}
-
-	/**
-	 * Acquire and bind services for this Component Configuration instance.
-	 * 
-	 * Calls
-	 * {@link BuildDispose#bindReference(Reference, ComponentInstanceImpl)} for
-	 * each reference in the Component Configuration that has a bind method.
-	 * 
-	 * @param componentInstance instance to bind
-	 * 
-	 */
-	private void bind(ComponentInstanceImpl componentInstance) {
-		// Get all the required service Reference Descriptions for this Service
-		// Component
-		// bind them in order
-		List references = componentInstance.getComponentConfiguration().getReferences();
-		// call the Bind method if the Reference Description includes one
-		Iterator itr = references.iterator();
-		while (itr.hasNext()) {
-			Reference reference = (Reference) itr.next();
-			if (reference.getReferenceDescription().getBind() != null) {
-				bindReference(reference, componentInstance);
-			}
-		}
-	}
-
-	/**
-	 * Try to acquire a service and call the bind method on a Component
-	 * Configuration instance for a reference.
-	 * 
-	 * If the reference's cardinality is 0..n or 1..n, bind will be called for
-	 * each registered service which satisfies the reference. If the cardinality
-	 * is 0..1 or 1..1, bind will be called with the service that has the
-	 * highest service.ranking and service.id
-	 * 
-	 * If an exception occurs during bind, we log an error and continue.
-	 * 
-	 * @param reference Reference to bind
-	 * 
-	 * @param componentInstance Component Configuration instance to call bind
-	 *        methods on.
-	 * 
-	 */
-	void bindReference(Reference reference, ComponentInstanceImpl componentInstance) {
-		synchronized (this) {
-			ServiceReference[] serviceReferences = null;
-			// if there is a published service, then get the ServiceObject and
-			// call bind
-			try {
-				// get All Registered services using this target filter
-				serviceReferences = componentInstance.getComponentContext().getBundleContext().getServiceReferences(reference.getReferenceDescription().getInterfacename(), reference.getTarget());
-
-				// If a bind method throws an exception, SCR must log an error
-				// message containing the exception with the Log Service but
-				// the activation of the component configuration does not fail.
-			} catch (InvalidSyntaxException e) {
-				Log.log(1, "[SCR] InvalidSyntaxException attempting to bindReference ", e);
-			}
-
-			// if cardinality is 0..1 or 0..n, it is OK if there is nothing to
-			// bind with
-			if (!reference.getReferenceDescription().isRequired() && serviceReferences == null) {
-				// that's OK
-				return;
-			}
-
-			// sort by service ranking and service id
-			Arrays.sort(serviceReferences);
-
-			// we only want to bind one service
-			if (reference.getReferenceDescription().getCardinalityHigh() == 1) {
-				bindServiceToReference(reference, serviceReferences[0], componentInstance);
-				// here we can bind more than one service, if availible
-			} else {
-				for (int j = 0; j < serviceReferences.length; j++) {
-					bindServiceToReference(reference, serviceReferences[j], componentInstance);
-				}
-			}
-		} // end synchronized(this)
-
-	}
-
-	/**
-	 * Bind a Component Configuration instance to a particular
-	 * {@link ServiceReference}.
-	 * 
-	 * @param reference
-	 * 
-	 * @param serviceReference
-	 * 
-	 * @param componentInstance
-	 * 
-	 */
-	private void bindServiceToReference(Reference reference, ServiceReference serviceReference, ComponentInstanceImpl componentInstance) {
-		ReferenceDescription rd = reference.getReferenceDescription();
-		// make sure we have not already bound this object
-		if (!reference.bindedToServiceReference(serviceReference) && rd.getBind() != null) {
-
-			try {
-				//only look up bind method once
-				Method method = rd.getBindMethod();
-				if (method == null) {
-					method = invoke.findBindOrUnbindMethod(componentInstance, reference, serviceReference, rd.getBind());
-					rd.setBindMethod(method);
-				}
-				if (method == null) {
-					// could be circularity break
-					return;
-				}
-				Object param = null;
-				if (method.getParameterTypes()[0].equals(ServiceReference.class)) {
-					param = serviceReference;
-				} else {
-					// componentInstance.getServiceObject(...) is populated by
-					// the findBindOrUnbindMethod function
-					param = reference.getServiceObject(serviceReference);
-
-					// ... but not if the bind method was cached
-					if (param == null) {
-						param = getService(reference, serviceReference);
-						if (param == null) {
-							// could be circularity break
-							return;
-						}
-						reference.addServiceReference(serviceReference, param);
-					}
-				}
-
-				invoke.bindComponent(method, componentInstance.getInstance(), param);
-				// If a bind method throws an exception, SCR must log an error
-				// message containing
-				// the exception with the Log Service but the activation of the
-				// component configuration does not fail.
-			} catch (IllegalAccessException e) {
-				Log.log(1, "[SCR] IllegalAccessException attempting to bind Service to Reference ", e);
-			} catch (InvocationTargetException e) {
-				Log.log(1, "[SCR] InvocationTargetException attempting to bind Service to Reference ", e);
-
-			}
-
-			// track this serviceReference so we know to unbind it later
-			reference.addServiceReference(serviceReference);
-		}
-	}
-
-	/**
-	 * Acquire a service object from a {@link ServiceReference}.
-	 * 
-	 * This method checks if "getting" the service could cause a cycle. If so,
-	 * it breaks the cycle and returns null.
-	 * 
-	 * @param consumercomponent configuration Component Configuration which wants to acquire the
-	 *        service
-	 * @param reference
-	 * @param serviceReference
-	 * 
-	 * @return the service object or null if it would cause a circularity
-	 */
-	public Object getService(Reference reference, ServiceReference serviceReference) {
-		// check if getting this service would cause a circularity
-		if (couldCauseCycle(reference, serviceReference)) {
-			return null;
-		}
-
-		// getting this service will not cause a circularity
-		return reference.getComponentConfiguration().getComponentDescription().getBundleContext().getService(serviceReference);
-
-	}
-
-	/**
-	 * Check the "cycle list" put in the component configuration by the resolver to see if getting
-	 * this reference would cause a circularity.
-	 * 
-	 * A circularity is only possible if the "producer" of the service is also a
-	 * service component.
-	 * 
-	 * If getting the service could cause a circularity and the reference's
-	 * policy is "dynamic", add an entry to the "delayed bind table" which is
-	 * processed farther up the call stack by the
-	 * {@link BuildDispose#buildComponentConfigInstance(Bundle, ComponentConfiguration)} method.
-	 * 
-	 * @param consumercomponent configuration
-	 * @param reference
-	 * @param serviceReference
-	 * @return if getting the service could cause a circularity
-	 */
-	private boolean couldCauseCycle(Reference reference, ServiceReference serviceReference) {
-
-		ComponentConfiguration consumerComponentConfiguration = reference.getComponentConfiguration();
-		// if we are not building a component, no cycles possible
-		if (stackCount == 0) {
-			return false;
-		}
-
-		String producerComponentName = (String) serviceReference.getProperty(ComponentConstants.COMPONENT_NAME);
-
-		// if producer is not a service component, no cycles possible
-		if (producerComponentName == null) {
-			return false;
-		}
-
-		// check if producer is on our "do not activate" list
-		if (!consumerComponentConfiguration.getDelayActivateComponentConfigurationNames().contains(producerComponentName)) {
-			return false;
-		}
-
-		// find producer component configuration
-		ComponentConfiguration producerComponentConfiguration = null;
-		Iterator it = main.resolver.satisfiedComponentConfigurations.iterator();
-		while (it.hasNext()) {
-			ComponentConfiguration componentConfiguration = (ComponentConfiguration) it.next();
-			if (producerComponentName.equals(componentConfiguration.getComponentDescription().getName())) {
-				// found the producer component configuration
-				producerComponentConfiguration = componentConfiguration;
-				break;
-			}
-		}
-
-		if (producerComponentConfiguration.getComponentDescription().getService().isServicefactory()) {
-			// producer is a service factory - there is a new instance for every
-			// bundle, so see if one of the instances is used by this bundle
-			it = producerComponentConfiguration.getInstances().iterator();
-			Bundle bundle = consumerComponentConfiguration.getComponentDescription().getBundleContext().getBundle();
-			while (it.hasNext()) {
-				ComponentInstanceImpl producerComponentInstance = (ComponentInstanceImpl) it.next();
-				if (producerComponentInstance.getComponentContext().getUsingBundle().equals(bundle)) {
-					// a producer already exists, so no cycle possible
-					return false;
-				}
-			}
-		} else {
-			// producer is not a service factory - there will only ever be one
-			// instance - if it exists then no cycle possible
-			if (!producerComponentConfiguration.getInstances().isEmpty()) {
-				return false;
-			}
-		}
-
-		// producer component configuration is not active - do not activate it because that could
-		// cause circularity
-
-		// if reference has bind method and policy=dynamic, activate later and
-		// bind
-		if (reference.getReferenceDescription().getBind() != null && reference.getReferenceDescription().getPolicy().equalsIgnoreCase("dynamic")) {
-			// delay bind by putting on the queue later
-			delayedBindList.add(reference);
-		}
-
-		// can't get service now because of circularity - we will bind later
-		// (dynamically) if the reference had a bind method and was dynamic
-		return true;
-	}
-
-	/**
-	 * Call the unbind method for each of the Referenced Services in a Component
-	 * Configuration instance
-	 * 
-	 * @param componentInstance
-	 */
-	private void unbind(ComponentInstanceImpl componentInstance) {
-		// Get all the required service reference descriptions for this Service
-		// Component
-		List references = componentInstance.getComponentConfiguration().getReferences();
-		// call the unBind method if the Reference Description includes one
-		// unbind in reverse order
-		ListIterator itr = references.listIterator(references.size());
-		while (itr.hasPrevious()) {
-			unbindReference((Reference) itr.previous(), componentInstance);
-		}
-	}
-
-	/**
-	 * Call the unbind method for each {@link ServiceReference} bound to a
-	 * Reference for a Component Configuration instance
-	 * 
-	 * @param reference
-	 * @param componentInstance
-	 */
-	private void unbindReference(Reference reference, ComponentInstanceImpl componentInstance) {
-		Iterator itr = reference.getServiceReferences().iterator();
-		while (itr.hasNext()) {
-			ServiceReference serviceReference = (ServiceReference) itr.next();
-			unbindServiceFromReference(reference, componentInstance, serviceReference);
-		}
-	}
-
-	/**
-	 * Dynamically unbind a reference from a Component Configuration instance.
-	 * 
-	 * First try to re-bind to a new reference as described in the OSGi R4
-	 * specification section 112.5.10 "Bound Service Replacement"
-	 * 
-	 * @param reference
-	 * @param componentInstance
-	 * @param serviceReference
-	 */
-	void unbindDynamicReference(Reference reference, ComponentInstanceImpl componentInstance, ServiceReference serviceReference) {
-		synchronized (this) {
-			// rebind if we can
-			bindReference(reference, componentInstance);
-
-			unbindServiceFromReference(reference, componentInstance, serviceReference);
-
-		}
-
-	}
-
-	/**
-	 * Unbind a {@link ServiceReference} from a Component Configuration
-	 * instance.
-	 * 
-	 * Find the unbind method and call it if a method exists. If the
-	 * {@link ServiceReference} was acquired, call
-	 * {@link BundleContext#ungetService(org.osgi.framework.ServiceReference)}
-	 * using the Service Component's bundle context.
-	 * 
-	 * @param reference
-	 * @param componentInstance
-	 * @param serviceReference
-	 */
-	private void unbindServiceFromReference(Reference reference, ComponentInstanceImpl componentInstance, ServiceReference serviceReference) {
-		ReferenceDescription rd = reference.getReferenceDescription();
-		String unbind = rd.getUnbind();
-		Object serviceObject = null;
-		Method method = null;
-		if (unbind != null) {
-			//only look up unbind method once
-			method = rd.getUnbindMethod();
-			if (method == null) {
-				method = invoke.findBindOrUnbindMethod(componentInstance, reference, serviceReference, unbind);
-				rd.setUnbindMethod(method);
-			}
-		}
-		if (method != null) {
-			Object param = null;
-			if (method.getParameterTypes()[0].equals(ServiceReference.class)) {
-				param = serviceReference;
-			} else {
-				// componentInstance.getServiceObject(...) is populated by
-				// the findBindOrUnbindMethod function
-				serviceObject = reference.getServiceObject(serviceReference);
-
-				// ... but not if the bind method was cached
-				if (serviceObject == null) {
-					serviceObject = getService(reference, serviceReference);
-					if (serviceObject == null) {
-						// could be circularity break
-						return;
-					}
-					reference.addServiceReference(serviceReference, serviceObject);
-				}
-				param = serviceObject;
-			}
-			// If an unbind method throws an exception, SCR must log an error
-			// message
-			// containing the exception with the Log Service and the
-			// deactivation of the component configuration will continue.
-			try {
-				invoke.unbindComponent(method, componentInstance.getInstance(), param);
-			} catch (InvocationTargetException e) {
-				Log.log(1, "[SCR] InvocationTargetException attempting to unbind reference.", e);
-			} catch (IllegalAccessException e) {
-				Log.log(1, "[SCR] IllegalAccessException attempting to unbind reference.", e);
-			}
-		} // end if (method != null)
-
-		// release service object
-		if (serviceObject != null) {
-			componentInstance.getComponentContext().getBundleContext().ungetService(serviceReference);
-		}
-		reference.removeServiceReference(serviceReference);
-	}
-
-	/**
-	 * Invoke the activate method on a Component Configuration instance, if it
-	 * exists.
-	 * 
-	 * @param componentInstance
-	 * @throws ComponentException
-	 */
-	private void activate(ComponentInstanceImpl componentInstance) throws ComponentException {
-
-		// If the activate method throws an exception, SCR must log an error
-		// message
-		// containing the exception with the Log Service and the component
-		// configuration is not activated.
-		try {
-			invoke.activateComponent(componentInstance.getInstance(), componentInstance.getComponentContext());
-		} catch (IllegalAccessException e) {
-			Log.log(1, "[SCR] IllegalAccessException attempting to activate component ", e);
-			throw new ComponentException(e.getMessage());
-		} catch (InvocationTargetException e) {
-			Log.log(1, "[SCR] InvocationTargetException attempting to activate component ", e);
-			throw new ComponentException(e.getMessage());
-		}
-	}
-
-	/**
-	 * Invoke the deactivate method on a Component Configuration instance, if it
-	 * exists.
-	 * 
-	 * @param componentInstance
-	 */
-	private void deactivate(ComponentInstanceImpl componentInstance) {
-
-		// If the deactivate method throws an exception, SCR must log an error
-		// message
-		// containing the exception with the Log Service and the component
-		// configuration will continue.
-		try {
-			invoke.deactivateComponent(componentInstance.getInstance(), componentInstance.getComponentContext());
-		} catch (InvocationTargetException e) {
-			Log.log(1, "[SCR] InvocationTargetException attempting to deactivate component.", e);
-		} catch (IllegalAccessException e) {
-			Log.log(1, "[SCR] IllegalAccessException attempting to deactivate component. ", e);
-		}
-
-	}
-
-	/**
-	 * Create and return a new ComponentContext for a Component Configuration
-	 * instance
-	 * 
-	 * @param usingBundle
-	 * @param componentInstance
-	 * 
-	 */
-	private void createComponentContext(Bundle usingBundle, ComponentInstanceImpl componentInstance) {
-		ComponentContext context = new ComponentContextImpl(main, usingBundle, componentInstance);
-		componentInstance.setComponentContext(context);
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/instance/InstanceProcess.java b/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/instance/InstanceProcess.java
deleted file mode 100644
index d3fd44e..0000000
--- a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/instance/InstanceProcess.java
+++ /dev/null
@@ -1,369 +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.ds.instance;
-
-import java.io.IOException;
-import java.util.*;
-import org.eclipse.equinox.ds.Activator;
-import org.eclipse.equinox.ds.Log;
-import org.eclipse.equinox.ds.model.ComponentDescription;
-import org.eclipse.equinox.ds.model.ComponentConfiguration;
-import org.eclipse.equinox.ds.resolver.Reference;
-import org.eclipse.equinox.ds.service.ComponentFactoryImpl;
-import org.eclipse.equinox.ds.service.ComponentInstanceImpl;
-import org.eclipse.equinox.ds.workqueue.WorkQueue;
-import org.osgi.framework.*;
-import org.osgi.service.cm.*;
-import org.osgi.service.component.ComponentException;
-import org.osgi.service.component.ComponentFactory;
-
-/**
- * Register services for satisfied Component Configurations and listen for 
- * configuration changes from ConfigAdmin
- * 
- */
-public class InstanceProcess implements ConfigurationListener {
-
-	/* set this to true to compile in debug messages */
-	private static final boolean DEBUG = false;
-
-	/** Main SCR class */
-	private Activator main;
-
-	/* Actually does the work of building and disposing of instances */
-	public BuildDispose buildDispose;
-
-	protected WorkQueue workQueue;
-
-	//configListener service registered by this class
-	private ServiceRegistration configListener;
-
-	/**
-	 * Handle Instance processing
-	 * 
-	 * @param main - the Main class of the SCR
-	 */
-	public InstanceProcess(Activator main) {
-
-		this.main = main;
-
-		// use Main's workqueue
-		workQueue = main.workQueue;
-		buildDispose = new BuildDispose(main);
-
-		configListener = main.context.registerService(ConfigurationListener.class.getName(), this, null);
-
-	}
-
-	/**
-	 * dispose cleanup, the SCR is shutting down
-	 */
-	public void dispose() {
-
-		if (configListener != null) {
-			main.context.ungetService(configListener.getReference());
-		}
-
-		buildDispose.dispose();
-		buildDispose = null;
-		main = null;
-		workQueue = null;
-	}
-
-	/**
-	 * Register and possibly activate Component Configurations.
-	 * 
-	 * Activate each Service Component that has the attribute immediate=true.
-	 * 
-	 * If Service Component has a service element, register the service or
-	 * service factory.
-	 * 
-	 * If Service Component has the factory attribute set, register a 
-	 * {@link org.osgi.service.component.ComponentFactory}.
-	 * 
-	 * @param componentConfigurations - List of satisfied Component Configurations
-	 */
-	public void registerComponentConfigurations(List componentConfigurations) {
-
-		ComponentConfiguration componentConfiguration;
-		ComponentDescription cd;
-		String factoryPid = null;
-
-		// loop through CD+P list
-
-		Iterator it = componentConfigurations.iterator();
-		while (it.hasNext()) {
-			componentConfiguration = (ComponentConfiguration) it.next();
-			cd = componentConfiguration.getComponentDescription();
-			if (DEBUG)
-				System.out.println("InstanceProcess: buildInstances: component name = " + cd.getName());
-
-
-			// ComponentFactory
-			if (componentConfiguration.isComponentFactory()) {
-				if (DEBUG)
-					System.out.println("InstanceProcess: buildInstances: ComponentFactory");
-				// check if MSF
-				ConfigurationAdmin configurationAdmin = (ConfigurationAdmin) main.resolver.configAdminTracker.getService();
-
-				if (configurationAdmin != null) {
-					try {
-						Configuration config = configurationAdmin.getConfiguration(cd.getName());
-						if (config != null)
-							factoryPid = config.getFactoryPid();
-					} catch (IOException e) {
-						Log.log(1, "[SCR] Error attempting to create componentFactory. ", e);
-					}
-				}
-
-				// if MSF throw exception - can't be ComponentFactory and
-				// MSF
-				if (factoryPid != null) {
-					throw new org.osgi.service.component.ComponentException("ManagedServiceFactory and ConfigurationFactory are incompatible");
-				}
-
-				// if the factory attribute is set on the component element
-				// then register a component factory service
-				// for the Service Component on behalf of the Service
-				// Component.
-				componentConfiguration.setServiceRegistration(cd.getBundleContext().registerService(ComponentFactory.class.getName(), new ComponentFactoryImpl(componentConfiguration, main), componentConfiguration.getProperties()));
-				continue; // break so we do not create an instance
-			} 
-			
-			// if component is immediate or a factory instance - create instance
-			// if it is a factory instance, we need to create it before we register its service
-			if (cd.isImmediate() || (cd.getFactory() != null)) {
-				try {
-					buildDispose.buildComponentConfigInstance(null, componentConfiguration);
-				} catch (ComponentException e) {
-					Log.log(1, "[SCR] Error attempting to build Component.", e);
-				}
-			}
-			
-			// if Service
-			if (cd.getService() != null) {
-				RegisterComponentService.registerService(this, componentConfiguration);
-			}
-
-		}// end while(more componentConfigurations)
-	}
-
-	/**
-	 * 
-	 * Dispose of Component Configurations
-	 * 
-	 * @param componentConfigurations - list of Component Configurations to be
-	 *         disposed
-	 */
-
-	public void disposeComponentConfigurations(List componentConfigurations) {
-
-		// loop through CD+P list to be disposed
-		Iterator it = componentConfigurations.iterator();
-		while (it.hasNext()) {
-			ComponentConfiguration componentConfiguration = (ComponentConfiguration) it.next();
-
-			// dispose component
-			buildDispose.disposeComponentConfig(componentConfiguration);
-		}
-	}
-
-	/**
-	 * Dynamically bind references.
-	 * 
-	 * @param references List of {@link Reference}s to dynamically bind
-	 */
-	public void dynamicBind(List references) {
-		Iterator it = references.iterator();
-		while (it.hasNext()) {
-			Reference reference = (Reference) it.next();
-			List instances = reference.getComponentConfiguration().getInstances();
-			Iterator it2 = instances.iterator();
-			while (it2.hasNext()) {
-				ComponentInstanceImpl compInstance = (ComponentInstanceImpl) it2.next();
-				buildDispose.bindReference(reference, compInstance);
-			}
-		}
-	}
-
-	/**
-	 * Dynamically unbind references.
-	 * 
-	 * @param unbindJobs Map of {@link Reference}:{@link ServiceReference}
-	 * to be unbound
-	 */
-	public void dynamicUnBind(Map unbindJobs) {
-		// for each unbind job
-		Iterator itr = unbindJobs.entrySet().iterator();
-		while (itr.hasNext()) {
-			Map.Entry unbindJob = (Map.Entry) itr.next();
-			Reference reference = (Reference) unbindJob.getKey();
-			ComponentConfiguration componentConfiguration = reference.getComponentConfiguration();
-			ServiceReference serviceReference = (ServiceReference) unbindJob.getValue();
-
-			// get the list of instances created
-			List instances = componentConfiguration.getInstances();
-			Iterator it = instances.iterator();
-			while (it.hasNext()) {
-				ComponentInstanceImpl compInstance = (ComponentInstanceImpl) it.next();
-				Object instance = compInstance.getInstance();
-				if (instance != null) {
-					try {
-						buildDispose.unbindDynamicReference(reference, compInstance, serviceReference);
-					} catch (Exception ex) {
-						ex.printStackTrace();
-					}
-				}
-			}
-
-			// all instances are now unbound
-			reference.removeServiceReference(serviceReference);
-		}
-	}
-
-	/**
-	 * Listen for configuration changes
-	 * 
-	 * Service Components can receive properties from the Configuration Admin
-	 * service. If a Component Configuration is activated and it’s properties are
-	 * updated in the Configuration Admin service, the SCR must deactivate the
-	 * component and activate the component again using the new properties.
-	 * 
-	 * @param event ConfigurationEvent
-	 * 
-	 * @see ConfigurationListener#configurationEvent(org.osgi.service.cm.ConfigurationEvent)
-	 */
-	public void configurationEvent(ConfigurationEvent event) {
-
-		Configuration[] config = null;
-
-		String pid = event.getPid();
-		if (DEBUG)
-			System.out.println("pid = " + pid);
-
-		String fpid = event.getFactoryPid();
-		if (DEBUG)
-			System.out.println("fpid = " + fpid);
-
-		//See if this configuration event is for declarative services
-		ComponentDescription cd;
-		if (fpid != null) {
-			// find the fpid == component name in the CD list
-			cd = (ComponentDescription) main.resolver.enabledCDsByName.get(fpid);
-		} else {
-			// find the spid == component name in the CD list
-			cd = (ComponentDescription) main.resolver.enabledCDsByName.get(pid);
-		}
-		if (cd == null) {
-			//this configuration event has nothing to do with declarative services
-			return;
-		}
-
-		switch (event.getType()) {
-			case ConfigurationEvent.CM_UPDATED :
-
-				String filter = (fpid != null ? "(&" : "") + "(" + Constants.SERVICE_PID + "=" + pid + ")" + (fpid != null ? ("(" + ConfigurationAdmin.SERVICE_FACTORYPID + "=" + fpid + "))") : "");
-
-				// Get the config for this service.pid
-				ConfigurationAdmin cm = (ConfigurationAdmin) main.resolver.configAdminTracker.getService();
-				try {
-					config = cm.listConfigurations(filter);
-				} catch (IOException e) {
-					Log.log(1, "[SCR] Error attempting to list CM Configurations ", e);
-				} catch (InvalidSyntaxException e) {
-					Log.log(1, "[SCR] Error attempting to list CM Configurations ", e);
-				}
-
-				// if NOT a factory
-				if (fpid == null) {
-
-					// there is only one component configuration for this CD, so we can disable the
-					// CD
-					main.resolver.disableComponents(Collections.singletonList(cd));
-
-					// now re-enable the CD - the resolver will pick up the new
-					// config
-					workQueue.enqueueWork(main, Activator.ADD, Collections.singletonList(cd));
-
-					// If a MSF
-					// create a new component configuration or update an existing one
-				} else {
-
-					// get component configuration with this PID
-					ComponentConfiguration componentConfiguration = cd.getComponentConfigurationByPID(pid);
-
-					// if only the no-props component configuration exists, replace it
-					if (componentConfiguration == null && cd.getComponentConfigurations().size() == 1 && ((ComponentConfiguration) cd.getComponentConfigurations().get(0)).getProperties().get(Constants.SERVICE_PID) == null) {
-						componentConfiguration = (ComponentConfiguration) cd.getComponentConfigurations().get(0);
-					}
-
-					// if old component configuration exists, dispose of it
-					if (componentConfiguration != null) {
-						// config already exists - dispose of it
-						cd.removeComponentConfiguration(componentConfiguration);
-						main.resolver.disposeComponentConfigurations(Collections.singletonList(componentConfiguration));
-					}
-
-					// create a new component configuration (adds to resolver enabledComponentConfigurations list)
-					main.resolver.map(cd, config[0].getProperties());
-
-					// kick the resolver to figure out if component configuration is satisfied, etc
-					workQueue.enqueueWork(main, Activator.ADD, Collections.EMPTY_LIST);
-
-				}
-
-				break;
-			case ConfigurationEvent.CM_DELETED :
-
-				// if not a factory
-				if (fpid == null) {
-
-					// there is only one component configuration for this CD, so we can disable the
-					// CD
-					main.resolver.disableComponents(Collections.singletonList(cd));
-
-					// now re-enable the CD - the resolver will create component configuration with
-					// no
-					// configAdmin properties
-					workQueue.enqueueWork(main, Activator.ADD, Collections.singletonList(cd));
-				} else {
-					// config is a factory
-
-					// get component configuration created for this config (with this PID)
-					ComponentConfiguration componentConfiguration = cd.getComponentConfigurationByPID(pid);
-
-					// if this was the last component configuration created for this factory
-					if (cd.getComponentConfigurations().size() == 1) {
-
-						// there is only one component configuration for this CD, so we can disable
-						// the CD
-						main.resolver.disableComponents(Collections.singletonList(cd));
-
-						// now re-enable the CD - the resolver will create component configuration
-						// with no
-						// configAdmin properties
-						workQueue.enqueueWork(main, Activator.ADD, Collections.singletonList(cd));
-
-					} else {
-
-						// we can just dispose this component configuration
-						cd.removeComponentConfiguration(componentConfiguration);
-						disposeComponentConfigurations(Collections.singletonList(componentConfiguration));
-						main.resolver.satisfiedComponentConfigurations.remove(componentConfiguration);
-						main.resolver.enabledComponentConfigurations.remove(componentConfiguration);
-
-					}
-				}
-				break;
-		}
-
-	}
-}
diff --git a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/instance/InvokeMethod.java b/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/instance/InvokeMethod.java
deleted file mode 100644
index bf20e1e..0000000
--- a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/instance/InvokeMethod.java
+++ /dev/null
@@ -1,322 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.ds.instance;
-
-import java.lang.reflect.*;
-import org.eclipse.equinox.ds.Log;
-import org.eclipse.equinox.ds.model.ComponentDescription;
-import org.eclipse.equinox.ds.model.ComponentConfiguration;
-import org.eclipse.equinox.ds.resolver.Reference;
-import org.eclipse.equinox.ds.service.ComponentInstanceImpl;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.component.ComponentContext;
-import org.osgi.service.log.LogService;
-
-/**
- * Invoke a method on a Service Component implementation class instance:
- * activate, deactivate, bind or unbind
- * 
- * @version $Revision: 1.1 $
- */
-
-class InvokeMethod {
-
-	private BuildDispose buildDispose;
-
-	InvokeMethod(BuildDispose buildDispose) {
-		this.buildDispose = buildDispose;
-	}
-
-	/**
-	 * Invoke the activate method of the Service Component if one exists
-	 * 
-	 * @param instance The instance of the component
-	 * @param context The component context
-	 */
-	void activateComponent(Object instance, ComponentContext context) throws IllegalAccessException, InvocationTargetException {
-
-		//cache activate method
-		ComponentDescription cd = ((ComponentInstanceImpl) context.getComponentInstance()).getComponentConfiguration().getComponentDescription();
-		Method method = cd.getActivateMethod();
-		if (method == null && !cd.isActivateMethodInitialized()) {
-			method = findActivateOrDeactivateMethod("activate", instance.getClass());
-			//also sets cd.activateMethodInitialized flag
-			cd.setActivateMethod(method);
-		}
-
-		// Create an array of parameters to pass to the method
-		// The activate method requires the ComponentContext
-		Object[] parameterTypes = new Object[] {context};
-
-		if (method != null) {
-			invokeMethod(method, instance, parameterTypes);
-		}
-	}
-
-	/**
-	 * Invoke the deactivate method of the Service Component if one exists
-	 * 
-	 * @param instance The instance of the component
-	 * @param context The component context
-	 */
-	void deactivateComponent(Object instance, ComponentContext context) throws IllegalAccessException, InvocationTargetException {
-
-		//cache deactivate method
-		ComponentDescription cd = ((ComponentInstanceImpl) context.getComponentInstance()).getComponentConfiguration().getComponentDescription();
-		Method method = cd.getDeactivateMethod();
-		if (method == null && !cd.isDeactivateMethodInitialized()) {
-			method = findActivateOrDeactivateMethod("deactivate", instance.getClass());
-			//also sets cd.deactivateMethodInitialized flag
-			cd.setDeactivateMethod(method);
-		}
-
-		// Create an array of parameters to pass to the method
-		// The deactivate method requires the ComponentContext
-		Object[] parameterTypes = new Object[] {context};
-
-		if (method != null) {
-			invokeMethod(method, instance, parameterTypes);
-		}
-	}
-
-	/**
-	 * Invoke a bind method of a Service Component
-	 * 
-	 * @param bind
-	 * @param instance
-	 * @param param service object or {@link ServiceReference}
-	 * 
-	 * @throws IllegalAccessException
-	 * @throws InvocationTargetException
-	 */
-	void bindComponent(Method bindMethod, Object instance, Object param) throws IllegalAccessException, InvocationTargetException {
-		// Create an array of parameters to pass to the method
-		Object[] parameterTypes = new Object[] {param};
-		invokeMethod(bindMethod, instance, parameterTypes);
-	}
-
-	/**
-	 * unbind method of the Service Component
-	 * 
-	 * @param unbind
-	 * @param instance
-	 * @param param service object or {@link ServiceReference}
-	 * 
-	 * @throws IllegalAccessException
-	 * @throws InvocationTargetException
-	 */
-	void unbindComponent(Method unbindMethod, Object instance, Object param) throws IllegalAccessException, InvocationTargetException {
-		// Create an array of parameters to pass to the method
-		Object[] parameterTypes = new Object[] {param};
-		invokeMethod(unbindMethod, instance, parameterTypes);
-	}
-
-	/**
-	 * invokeMethod - invoke a Method on the Service Compoent via reflection
-	 * 
-	 * @param method- the method name to invoke
-	 * @param instance - instance to invoke method on
-	 * @param parameterTypes - array of parameters to pass to the method
-	 * 
-	 * @throws IllegalAccessException
-	 * @throws InvocationTargetException
-	 */
-
-	private void invokeMethod(Method method, Object instance, Object[] parameterTypes) throws IllegalAccessException, InvocationTargetException {
-
-		// If the method is declared protected or public, SCR will call the
-		// method
-		int mod = method.getModifiers();
-		if ((Modifier.isProtected(mod)) || (Modifier.isPublic(mod))) {
-			// if the method is protected must set accessibility(true) to invoke
-			// it
-			if (Modifier.isProtected(mod))
-				method.setAccessible(true);
-			// invoke the method
-			method.invoke(instance, parameterTypes);
-		}
-	}
-
-	private static final Class[] PARAM_COMPONENTCONTEXT = new Class[] {ComponentContext.class};
-	private static final Class[] PARAM_SERVICEREFERENCE = new Class[] {ServiceReference.class};
-
-	/**
-	 * Search through class and the superclasses for an activate or deactivate
-	 * method.
-	 * 
-	 * If method if found but not public or protected, log an error and return null
-	 * 
-	 * @param methodName name of method to look for
-	 * @param consumerClass Object to look in
-	 * @return method or null if not found
-	 */
-	private Method findActivateOrDeactivateMethod(String methodName, Class consumerClass) {
-		Method method = null;
-		while (!consumerClass.equals(java.lang.Object.class) && method == null) {
-
-			// search this class' methods
-			try {
-				method = consumerClass.getDeclaredMethod(methodName, PARAM_COMPONENTCONTEXT);
-			} catch (NoSuchMethodException e) {
-				// we'll try the superclass
-			}
-			if (method != null)
-				break;
-
-			// we couldn't find the method - try the superclass
-			consumerClass = consumerClass.getSuperclass();
-		}
-
-		// if method is not protected or public, log error message
-		if (method != null) {
-			int modifier = method.getModifiers();
-			if (!(Modifier.isProtected(modifier) || Modifier.isPublic(modifier))) {
-				// log error
-				Log.log(LogService.LOG_ERROR, "[SCR] Method " + methodName + " is not protected or public.");
-				method = null;
-			}
-		}
-
-		return method;
-	}
-
-	/**
-	 * Search through class and the superclasses for a bind or unbind method.
-	 * 
-	 * See OSGi R4 Specification section 112.3.1 "Accessing Services" for an 
-	 * explanation of the method search algorithm used for bind and unbind
-	 * methods.
-	 * 
-	 * Searching for the bind or unbind method may require a service object.  If
-	 * the object has not already been acquired, this method may call 
-	 * {@link BuildDispose#getService(ComponentConfiguration, Reference, ServiceReference)} 
-	 * to get it.
-	 * 
-	 * If method can not be found we log an error and return null.
-	 * 
-	 * @param componentInstance Object to look in
-	 * @param reference Reference object
-	 * @param serviceReference
-	 * @param methodName name of method to look for
-	 * 
-	 * @return the method or null if no method was found
-	 * 
-	 */
-	Method findBindOrUnbindMethod(ComponentInstanceImpl componentInstance, Reference reference, ServiceReference serviceReference, String methodName) {
-		Class consumerClass = componentInstance.getInstance().getClass();
-		Object serviceObject = null;
-		Class serviceObjectClass = null;
-		Class interfaceClass = null;
-		Class[] param_interfaceClass = null;
-		Method method = null;
-		while (consumerClass != null) {
-
-			// search this class' methods
-			// look for various forms of bind methods
-
-			// 1) check for bind(ServiceReference) method
-			try {
-				method = consumerClass.getDeclaredMethod(methodName, PARAM_SERVICEREFERENCE);
-			} catch (NoSuchMethodException e) {
-			}
-			if (method != null)
-				break;
-
-			// we need a serviceObject to keep looking, create one if necessary
-			if (serviceObject == null) {
-				serviceObject = reference.getServiceObject(serviceReference);
-				if (serviceObject == null) {
-					serviceObject = buildDispose.getService(reference, serviceReference);
-				}
-				if (serviceObject == null) {
-					// we could not create a serviceObject because of
-					// circularity
-					return null;
-				}
-				reference.addServiceReference(serviceReference, serviceObject);
-				serviceObjectClass = serviceObject.getClass();
-
-				// figure out the interface class - this is guaranteed to
-				// succeed or else
-				// the framework would not have let us have the service object
-				Class searchForInterfaceClass = serviceObjectClass;
-				String interfaceName = reference.getReferenceDescription().getInterfacename();
-				while (searchForInterfaceClass != null) {
-					// first look through interfaces
-					Class[] interfaceClasses = searchForInterfaceClass.getInterfaces();
-					for (int i = 0; i < interfaceClasses.length; i++) {
-						if (interfaceClasses[i].getName().equals(interfaceName)) {
-							interfaceClass = interfaceClasses[i];
-							break;
-						}
-					}
-					if (interfaceClass != null) {
-						break;
-					}
-
-					// also check the class itself
-					if (searchForInterfaceClass.getName().equals(interfaceName)) {
-						interfaceClass = searchForInterfaceClass;
-						break;
-					}
-
-					// advance up the superclasses
-					searchForInterfaceClass = searchForInterfaceClass.getSuperclass();
-				}
-
-				param_interfaceClass = new Class[] {interfaceClass};
-
-			} // end if(serviceObject == null)
-
-			// 2) check for bind(Service interface) method
-			try {
-				method = consumerClass.getDeclaredMethod(methodName, param_interfaceClass);
-			} catch (NoSuchMethodException e) {
-			}
-			if (method != null)
-				break;
-
-			// 3) check for bind(class.isAssignableFrom(serviceObjectClass))
-			// method
-			Method[] methods = consumerClass.getDeclaredMethods();
-			for (int i = 0; i < methods.length; i++) {
-				Class[] params = methods[i].getParameterTypes();
-				if (params.length == 1 && methods[i].getName().equals(methodName) && params[0].isAssignableFrom(serviceObjectClass)) {
-
-					method = methods[i];
-					break;
-				}
-			}
-			if (method != null)
-				break;
-
-			// we couldn't find the method - try the superclass
-			consumerClass = consumerClass.getSuperclass();
-		}
-
-		if (method == null) {
-			// log error = we could not find the method
-			Log.log(LogService.LOG_ERROR, "[SCR] Could not find method " + methodName + ".");
-			return null;
-		}
-
-		// if method is not protected or public, log error message
-		int modifier = method.getModifiers();
-		if (!(Modifier.isProtected(modifier) || Modifier.isPublic(modifier))) {
-			// log error
-			Log.log(LogService.LOG_ERROR, "[SCR] Method " + methodName + " is not protected or public.");
-			return null;
-		}
-
-		return method;
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/instance/RegisterComponentService.java b/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/instance/RegisterComponentService.java
deleted file mode 100644
index 0e3cb22..0000000
--- a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/instance/RegisterComponentService.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.ds.instance;
-
-import java.util.Hashtable;
-import java.util.List;
-import org.eclipse.equinox.ds.Log;
-import org.eclipse.equinox.ds.model.ComponentDescription;
-import org.eclipse.equinox.ds.model.ComponentConfiguration;
-import org.osgi.framework.*;
-import org.osgi.service.component.ComponentException;
-import org.osgi.service.component.ComponentInstance;
-
-/**
- * Static utility class to register a Component Configuration's provided service.
- * A ServiceFactory is used to enable lazy activation
- * 
- * @version $Revision: 1.1 $
- */
-abstract class RegisterComponentService {
-
-	/* set this to true to compile in debug messages */
-	private static final boolean DEBUG = false;
-
-	// cannot instantiate - this is a utility class
-	private RegisterComponentService() {
-	}
-
-	/**
-	 * Register the Component Configuration's service
-	 * 
-	 * @param ip - InstanceProcess
-	 * @param componentConfiguration - ComponentDescription plus Properties
-	 */
-	static void registerService(InstanceProcess instanceProcess, ComponentConfiguration componentConfiguration) {
-
-		ComponentDescription cd = componentConfiguration.getComponentDescription();
-
-		//make final references for use by anonymous inner class
-		final InstanceProcess finalInstanceProcess = instanceProcess;
-		final ComponentConfiguration finalComponentConfiguration = componentConfiguration;
-
-		List servicesProvided = cd.getServicesProvided();
-		String[] servicesProvidedArray = (String[]) servicesProvided.toArray(new String[servicesProvided.size()]);
-
-		// register the service using a ServiceFactory
-		ServiceRegistration serviceRegistration = null;
-		if (cd.getService().isServicefactory()) {
-			// register the service using a ServiceFactory
-			serviceRegistration = cd.getBundleContext().registerService(servicesProvidedArray, new ServiceFactory() {
-				// map of Bundle:componentInstance
-				Hashtable instances;
-
-				// ServiceFactory.getService method.
-				public Object getService(Bundle bundle, ServiceRegistration registration) {
-					if (DEBUG)
-						System.out.println("RegisterComponentServiceFactory:getService: registration:" + registration);
-
-					ComponentInstance componentInstance = null;
-					try {
-						componentInstance = finalInstanceProcess.buildDispose.buildComponentConfigInstance(bundle, finalComponentConfiguration);
-					} catch (ComponentException e) {
-						Log.log(1, "[SCR] Error attempting to register a Service Factory.", e);
-					}
-
-					if (componentInstance != null) {
-						// save so we can dispose later
-						synchronized (this) {
-							if (instances == null) {
-								instances = new Hashtable();
-							}
-						}
-						instances.put(bundle, componentInstance);
-					}
-					return componentInstance.getInstance();
-				}
-
-				// ServiceFactory.ungetService method.
-				public void ungetService(Bundle bundle, ServiceRegistration registration, Object service) {
-					if (DEBUG)
-						System.out.println("RegisterComponentServiceFactory:ungetService: registration = " + registration);
-					((ComponentInstance) instances.get(bundle)).dispose();
-					instances.remove(bundle);
-					synchronized (this) {
-						if (instances.isEmpty()) {
-							instances = null;
-						}
-					}
-				}
-			}, componentConfiguration.getProperties());
-		} else {
-			// servicefactory=false
-			// always return the same instance
-			serviceRegistration = cd.getBundleContext().registerService(servicesProvidedArray, new ServiceFactory() {
-
-				int references = 0;
-
-				//keep track of whether the componentInstance was created
-				//by this class' getService method or if it already 
-				//existed - if we create it then we have to dispose
-				//of it when it is no longer in use (references == 0)
-				boolean disposeComponentInstance = false;
-
-				// ServiceFactory.getService method.
-				public Object getService(Bundle bundle, ServiceRegistration registration) {
-					if (DEBUG)
-						System.out.println("RegisterComponentService: getService: registration = " + registration);
-
-					synchronized (this) {
-
-						if (finalComponentConfiguration.getInstances().isEmpty()) {
-							try {
-								//track that we created this instance
-								//so we know to dispose of it later
-								finalInstanceProcess.buildDispose.buildComponentConfigInstance(null, finalComponentConfiguration);
-								disposeComponentInstance = true;
-							} catch (ComponentException e) {
-								Log.log(1, "[SCR] Error attempting to register Service.", e);
-								return null;
-							}
-						}
-						references++;
-					}
-					return ((ComponentInstance) finalComponentConfiguration.getInstances().get(0)).getInstance();
-				}
-
-				// ServiceFactory.ungetService method.
-				public void ungetService(Bundle bundle, ServiceRegistration registration, Object service) {
-					if (DEBUG)
-						System.out.println("RegisterComponentService: ungetService: registration = " + registration);
-
-					synchronized (this) {
-						references--;
-						if (references < 1 && disposeComponentInstance) {
-							// if disposeComponentInstance then we 
-							// created it in getService so we should
-							// dispose of it now
-							((ComponentInstance) finalComponentConfiguration.getInstances().get(0)).dispose();
-							disposeComponentInstance = false;
-						}
-					}
-				}
-			}, componentConfiguration.getProperties());
-		}
-
-		if (DEBUG)
-			System.out.println("RegisterComponentService: register: " + serviceRegistration);
-
-		componentConfiguration.setServiceRegistration(serviceRegistration);
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/model/ComponentConfiguration.java b/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/model/ComponentConfiguration.java
deleted file mode 100644
index e6bd7f5..0000000
--- a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/model/ComponentConfiguration.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.ds.model;
-
-import java.util.*;
-import org.osgi.framework.ServiceRegistration;
-import org.osgi.service.component.ComponentInstance;
-
-/**
- * 
- * Component Description with properties
- * 
- * Component Configuration – A component configuration represents a component
- * description parameterized by component properties.
- * 
- * @version $Revision: 1.1 $
- */
-public class ComponentConfiguration {
-
-	private ComponentDescription cd;
-	private Hashtable properties;
-	private ServiceRegistration serviceRegistration;
-
-	/**
-	 * List of {@link org.eclipse.equinox.ds.resolver.Reference Reference} objects
-	 */
-	private List references;
-
-	/**
-	 * List of {@link ComponentInstance} objects
-	 */
-	private List instances;
-
-	/**
-	 * List of names (Strings) of Component Configurations we should not cause to
-	 * activate during the activation of this Component Configuration.  This is
-	 * populated by the {@link org.eclipse.equinox.ds.resolver.Resolver Resolver}
-	 * and used by {@link org.eclipse.equinox.ds.instance.BuildDispose BuildDispose}.
-	 */
-	protected List delayActivateComponentConfigurationNames;
-
-	/**
-	 * Flag to indicate that this Component Configuration registers 
-	 * the {@link org.osgi.service.component.ComponentFactory} 
-	 * service.  
-	 * 
-	 * (A Service Component that has the "factory" attribute will have
-	 * one Component Configuration that registers 
-	 * {@link org.osgi.service.component.ComponentFactory} and then a Component
-	 * Configuration for every factory instance that registers a different service
-	 * or none at all).
-	 */
-	protected boolean componentFactory;
-
-	/**
-	 * Create a new Component Configuration for this Service Component with
-	 * it's own Reference objects, and properties.
-	 * 
-	 * @param cd the Service Component
-	 * 
-	 * @param references a List of 
-	 *        {@link org.eclipse.equinox.ds.resolver.Reference Reference}
-	 *        objects
-	 *        
-	 * @param properties Properties associated with this Component Configuration
-	 * 
-	 * @param componentFactory "Component Factory" flag - see 
-	 *        {@link ComponentConfiguration#componentFactory}
-	 */
-	public ComponentConfiguration(ComponentDescription cd, List references, Hashtable properties, boolean componentFactory) {
-
-		this.cd = cd;
-		this.references = references;
-		this.properties = properties;
-
-		delayActivateComponentConfigurationNames = new ArrayList();
-		instances = new ArrayList();
-
-		this.componentFactory = componentFactory;
-	}
-
-	/**
-	 * Get the properties of this Component Configuration
-	 */
-	public Hashtable getProperties() {
-		return properties;
-	}
-
-	public ComponentDescription getComponentDescription() {
-		return cd;
-	}
-
-	/**
-	 * Add a new Component Configuration name we should beware of activating to
-	 * prevent a cycle.
-	 * 
-	 * @see ComponentConfiguration#delayActivateComponentConfigurationNames
-	 */
-	public void setDelayActivateComponentConfigurationName(String componentConfigurationName) {
-		if (!delayActivateComponentConfigurationNames.contains(componentConfigurationName))
-			delayActivateComponentConfigurationNames.add(componentConfigurationName);
-	}
-
-	public ServiceRegistration getServiceRegistration() {
-		return serviceRegistration;
-	}
-
-	public void setServiceRegistration(ServiceRegistration serviceRegistration) {
-		this.serviceRegistration = serviceRegistration;
-	}
-
-	public List getDelayActivateComponentConfigurationNames() {
-		return delayActivateComponentConfigurationNames;
-	}
-
-	public void clearDelayActivateComponentConfigurationNames() {
-		delayActivateComponentConfigurationNames.clear();
-	}
-
-	public List getReferences() {
-		return references;
-	}
-
-	public void addInstance(ComponentInstance instance) {
-		instances.add(instance);
-	}
-
-	public List getInstances() {
-		return instances;
-	}
-
-	public void removeInstance(Object object) {
-		instances.remove(object);
-	}
-
-	public void removeAllInstances() {
-		instances.clear();
-	}
-
-	public boolean isComponentFactory() {
-		return componentFactory;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/model/ComponentDescription.java b/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/model/ComponentDescription.java
deleted file mode 100644
index e768dfd..0000000
--- a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/model/ComponentDescription.java
+++ /dev/null
@@ -1,402 +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.ds.model;
-
-import java.io.*;
-import java.lang.reflect.Method;
-import java.net.URL;
-import java.util.*;
-import org.eclipse.equinox.ds.Log;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.Constants;
-import org.osgi.service.component.ComponentException;
-import org.osgi.service.log.LogService;
-
-/**
- * 
- * Memory model of the Service Component xml
- * 
- * @version $Revision: 1.3 $
- */
-public class ComponentDescription implements Serializable {
-	/**
-	 * Eclipse-generated <code>serialVersionUID</code>
-	 */
-	private static final long serialVersionUID = -6131574862715499271L;
-
-	transient private BundleContext bundleContext;
-	private String name;
-	private boolean autoenable;
-	private boolean immediate;
-	private boolean enabled;
-	private boolean valid;
-	private String factory;
-
-	private ImplementationDescription implementation;
-	private List propertyDescriptions;
-	private ServiceDescription service;
-	private List servicesProvided;
-
-	private List referenceDescriptions;
-
-	transient private List componentConfigurations;
-
-	transient private boolean activateMethodInitialized;
-	transient private Method activateMethod;
-	transient private boolean deactivateMethodInitialized;
-	transient private Method deactivateMethod;
-
-	//does this really need to be transient?
-	transient private Map properties;
-
-	/**
-	 * Map of Component Configurations created for this Service Component keyed
-	 * by ConfigurationAdmin PID
-	 */
-	transient private Map componentConfigurationsByPID;
-
-	/**
-	 * Constructor
-	 * 
-	 * @param bundleContext The bundle to set.
-	 */
-	public ComponentDescription(BundleContext bundleContext) {
-		this.bundleContext = bundleContext;
-		autoenable = true;
-		immediate = false;
-		propertyDescriptions = new ArrayList();
-		referenceDescriptions = new ArrayList();
-		componentConfigurations = new ArrayList();
-		componentConfigurationsByPID = new Hashtable();
-		servicesProvided = Collections.EMPTY_LIST;
-	}
-
-	/**
-	 * Return true if autoenable is set
-	 * 
-	 * @return Returns autoenable
-	 */
-	public boolean isAutoenable() {
-		return autoenable;
-	}
-
-	/**
-	 * @param autoenable The autoenable value to set.
-	 */
-	public void setAutoenable(boolean autoenable) {
-		this.autoenable = autoenable;
-	}
-
-	/**
-	 * @return Returns true if immediate is set
-	 */
-	public boolean isImmediate() {
-		return immediate;
-	}
-
-	/**
-	 * Set the specified value for immediate
-	 * 
-	 * @param immediate
-	 */
-	public void setImmediate(boolean immediate) {
-		this.immediate = immediate;
-	}
-
-	/**
-	 * @return Returns the bundleContext
-	 */
-	public BundleContext getBundleContext() {
-		return bundleContext;
-	}
-
-	/**
-	 * Set the bundle context for this service component (note package private 
-	 * visibility)
-	 */
-	void setBundleContext(BundleContext context) {
-		this.bundleContext = context;
-	}
-
-	/**
-	 * @return Returns the factory.
-	 */
-	public String getFactory() {
-		return factory;
-	}
-
-	/**
-	 * @param factory The factory to set.
-	 */
-	public void setFactory(String factory) {
-		this.factory = factory;
-	}
-
-	/**
-	 * @return Returns the implementation.
-	 */
-	public ImplementationDescription getImplementation() {
-		return implementation;
-	}
-
-	/**
-	 * @param implementation The implementation to set.
-	 */
-	public void setImplementation(ImplementationDescription implementation) {
-		this.implementation = implementation;
-	}
-
-	/**
-	 * @return Returns the name.
-	 */
-	public String getName() {
-		return name;
-	}
-
-	/**
-	 * @param name The name to set.
-	 */
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	/**
-	 * @return Returns the XML properties.
-	 */
-	public Map getProperties() {
-		if (properties == null) {
-			//the first time this method is called load the properties 
-			//(possibly from files) - for subsequent calls we do not 
-			//load again
-			if (propertyDescriptions.isEmpty()) {
-				properties = Collections.EMPTY_MAP;
-			} else {
-				properties = new Hashtable(propertyDescriptions.size());
-			}
-
-			//get properties from Service Component XML, in parse order
-			Iterator it = propertyDescriptions.iterator();
-			while (it.hasNext()) {
-				PropertyDescription propertyDescription = (PropertyDescription) it.next();
-				if (propertyDescription instanceof PropertyValueDescription) {
-					PropertyValueDescription propvalue = (PropertyValueDescription) propertyDescription;
-					properties.put(propvalue.getName(), propvalue.getValue());
-				} else {
-					// read from seperate properties file
-					properties.putAll(loadPropertyFile(((PropertyResourceDescription) propertyDescription).getEntry()));
-				}
-			}
-		}
-
-		return properties;
-	}
-
-	/**
-	 * @param propertyDescription The properties to set.
-	 */
-	public void addPropertyDescription(PropertyDescription propertyDescription) {
-		propertyDescriptions.add(propertyDescription);
-	}
-
-	/**
-	 * Get the Service Component properties from a properties entry file
-	 * 
-	 * @param propertyEntryName - the name of the properties file
-	 */
-	private Hashtable loadPropertyFile(String propertyEntryName) {
-
-		URL url = null;
-		Properties props = new Properties();
-
-		url = this.getBundleContext().getBundle().getEntry(propertyEntryName);
-		if (url == null) {
-			throw new ComponentException("Properties entry file " + propertyEntryName + " cannot be found");
-		}
-
-		try {
-			InputStream in = null;
-			File file = new File(propertyEntryName);
-
-			if (file.exists()) {
-				// throws FileNotFoundException if it's not there or no read
-				// access
-				in = new FileInputStream(file);
-			} else {
-				in = url.openStream();
-			}
-			if (in != null) {
-				props.load(new BufferedInputStream(in));
-				in.close();
-			} else {
-				Log.log(LogService.LOG_WARNING, "Unable to find properties file " + propertyEntryName);
-			}
-		} catch (IOException e) {
-			throw new ComponentException("Properties entry file " + propertyEntryName + " cannot be read");
-		}
-
-		return props;
-
-	}
-
-	/**
-	 * @return Returns the service.
-	 */
-	public ServiceDescription getService() {
-		return service;
-	}
-
-	/**
-	 * return a handly list of the serviceInterfaces provided
-	 */
-	public List getServicesProvided() {
-		return servicesProvided;
-	}
-
-	/**
-	 * @param service The service to set.
-	 */
-	public void setService(ServiceDescription service) {
-		this.service = service;
-
-		if (service != null) {
-			servicesProvided = new ArrayList();
-			ProvideDescription[] provideDescription = service.getProvides();
-			for (int i = 0; i < provideDescription.length; i++) {
-				servicesProvided.add(provideDescription[i].getInterfacename());
-			}
-		} else {
-			servicesProvided = Collections.EMPTY_LIST;
-		}
-
-	}
-
-	/**
-	 * @return Returns the reference Descriptions.
-	 */
-	public List getReferenceDescriptions() {
-		return referenceDescriptions;
-	}
-
-	/**
-	 * @param reference The references to set.
-	 */
-	public void addReferenceDescription(ReferenceDescription reference) {
-		referenceDescriptions.add(reference);
-	}
-
-	/**
-	 * @return Returns true if enabled
-	 */
-	public boolean isEnabled() {
-		return enabled;
-	}
-
-	/**
-	 * @param enabled set the value
-	 */
-	public void setEnabled(boolean enabled) {
-		this.enabled = enabled;
-	}
-
-	/**
-	 * @return Returns true if valid
-	 */
-	public boolean isValid() {
-		return valid;
-	}
-
-	/**
-	 * @param valid - set the value
-	 */
-	public void setValid(boolean valid) {
-		this.valid = valid;
-	}
-
-	public void addComponentConfiguration(ComponentConfiguration componentConfiguration) {
-		componentConfigurations.add(componentConfiguration);
-		String pid = (String) componentConfiguration.getProperties().get(Constants.SERVICE_PID);
-		if (pid != null) {
-			componentConfigurationsByPID.put(pid, componentConfiguration);
-		}
-	}
-
-	public List getComponentConfigurations() {
-		return componentConfigurations;
-	}
-
-	public ComponentConfiguration getComponentConfigurationByPID(String pid) {
-		return (ComponentConfiguration) componentConfigurationsByPID.get(pid);
-	}
-
-	public void clearComponentConfigurations() {
-		componentConfigurations.clear();
-		componentConfigurationsByPID.clear();
-	}
-    
-    public void clearReflectionMethods() {
-        activateMethodInitialized = false;
-        activateMethod = null;
-        deactivateMethodInitialized = false;
-        deactivateMethod = null;
-        
-        Iterator iter = referenceDescriptions.iterator();
-        while (iter.hasNext()) {
-            ReferenceDescription rd = (ReferenceDescription) iter.next();
-            rd.setBindMethod(null);
-            rd.setUnbindMethod(null);
-        }
-    }
-
-	public void removeComponentConfiguration(ComponentConfiguration componentConfiguration) {
-		componentConfigurations.remove(componentConfiguration);
-	}
-
-	/**
-	 * Called by the (de)serialization logic to create an object of this class
-	 * from a serialized file record
-	 * 
-	 * @see Serializable
-	 */
-	private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException {
-		//do standard deserialization
-		in.defaultReadObject();
-
-		//initialize transient collections
-		this.componentConfigurations = new ArrayList();
-		this.componentConfigurationsByPID = new Hashtable();
-	}
-
-	public Method getActivateMethod() {
-		return activateMethod;
-	}
-
-	public void setActivateMethod(Method activateMethod) {
-		activateMethodInitialized = true;
-		this.activateMethod = activateMethod;
-	}
-
-	public boolean isActivateMethodInitialized() {
-		return activateMethodInitialized;
-	}
-
-	public Method getDeactivateMethod() {
-		return deactivateMethod;
-	}
-
-	public void setDeactivateMethod(Method deactivateMethod) {
-		deactivateMethodInitialized = true;
-		this.deactivateMethod = deactivateMethod;
-	}
-
-	public boolean isDeactivateMethodInitialized() {
-		return deactivateMethodInitialized;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/model/ComponentDescriptionCache.java b/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/model/ComponentDescriptionCache.java
deleted file mode 100644
index bcd6b98..0000000
--- a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/model/ComponentDescriptionCache.java
+++ /dev/null
@@ -1,184 +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.ds.model;
-
-import java.io.*;
-import java.util.*;
-import org.eclipse.equinox.ds.Activator;
-import org.eclipse.equinox.ds.Log;
-import org.eclipse.equinox.ds.parser.Parser;
-import org.eclipse.equinox.ds.parser.XMLParserNotAvailableException;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.osgi.service.log.LogService;
-
-/**
- * 
- * Cache of component descriptions.
- * 
- * @version $Revision: 1.3 $
- */
-public class ComponentDescriptionCache {
-
-	private static final String CACHE_FILE = "cdcache.ser";
-	private static final String CACHE_XML_PROPERTY = "declarativeservices.cacheXML";
-
-	private File cacheFile;
-	private final boolean CACHE_XML;
-	private Activator main;
-	/**
-	 * Cache of BundleId:CD
-	 */
-	private Map cdCache;
-
-	/**
-	 * Cache of BundleId:BundleLastModifiedTime
-	 */
-	private Map lastModifiedTimes;
-
-	/**
-	 * Parser object to use if the bundle's information is not in the cache or
-	 * is stale.
-	 */
-	private Parser parser;
-
-	/**
-	 * Create the cache object.
-	 * 
-	 * @param main Main object.
-	 */
-	public ComponentDescriptionCache(Activator main) {
-		this.main = main;
-		parser = new Parser(main);
-
-		//check if we're supposed to cache the XML (defaults to true)
-		CACHE_XML = Boolean.valueOf(System.getProperty(CACHE_XML_PROPERTY, "true")).booleanValue();
-
-		//load cache
-		cacheFile = main.context.getDataFile(CACHE_FILE);
-		if (cacheFile.exists() && CACHE_XML) {
-			try {
-				FileInputStream in = new FileInputStream(cacheFile);
-				ObjectInputStream cacheStream = new ObjectInputStream(in);
-				cdCache = (Hashtable) cacheStream.readObject();
-				lastModifiedTimes = (Hashtable) cacheStream.readObject();
-				cacheStream.close();
-				in.close();
-			} catch (Exception e) {
-				//should this be an info, warning, or error?
-				//some devices don't have filesystems
-				Log.log(LogService.LOG_WARNING, "Could not read Service Component XML cache", e);
-
-				cdCache = new Hashtable();
-				lastModifiedTimes = new Hashtable();
-			}
-		} else {
-			cdCache = new Hashtable();
-			lastModifiedTimes = new Hashtable();
-		}
-	}
-
-	/**
-	 * Return the component descriptions for the specified bundle.
-	 * 
-	 * @param bundle Bundle for which component description are to be returns
-	 * @return An array list of the component descriptions for the specified
-	 *         bundle.
-	 * @throws XMLParserNotAvailableException 
-	 */
-	public List getComponentDescriptions(BundleContext bundleContext) throws XMLParserNotAvailableException {
-		//check to see if we already have the cds for this bundle up-to-date in cache
-		Bundle bundle = bundleContext.getBundle();
-		Long bundleId = new Long(bundle.getBundleId());
-		Long cacheTime = (Long) lastModifiedTimes.get(bundleId);
-		Long lastModified = new Long(bundle.getLastModified());
-
-		List cds = null;
-		if (cacheTime != null && cacheTime.equals(lastModified)) {
-			//we have the bundle cached
-			cds = (List) cdCache.get(bundleId);
-		} else {
-			//not cached or out of date
-			cds = parser.getComponentDescriptions(bundleContext);
-			if (!cds.isEmpty()) {
-				lastModifiedTimes.put(bundleId, lastModified);
-				cdCache.put(bundleId, cds);
-			}
-		}
-
-		//set the bundle context of each CD - these can not be cached because
-		//a bundle gets a new bundle context every time it is initialized (started)
-		Iterator it = cds.iterator();
-		while (it.hasNext()) {
-			((ComponentDescription) it.next()).setBundleContext(bundleContext);
-		}
-
-		return cds;
-	}
-	
-	/**
-	 * Check the cache for CDs for the given bundle.  If CDs are not already cached
-	 * return Collections.EMPTY_LIST.  Note cds may be returned that are not up-to-date
-	 * @param bundle
-	 * @return
-	 */
-	public List getCachedComponentDescriptions(Bundle bundle) {
-		//check to see if we already have the cds for this bundle
-		Long bundleId = new Long(bundle.getBundleId());
-		List cds = (List) cdCache.get(bundleId);
-
-		return cds != null ? cds : Collections.EMPTY_LIST;
-	}
-
-	public void dispose() {
-		parser.dispose();
-
-		//write cache
-		if (CACHE_XML) {
-
-			//clean out cache - only save entries for bundles that are
-			//still installed
-			Bundle[] installedBundles = main.context.getBundles();
-			Set installedBundleIDs = new HashSet(installedBundles.length);
-			for (int i = 0; i < installedBundles.length; i++) {
-				installedBundleIDs.add(new Long(installedBundles[i].getBundleId()));
-			}
-			cdCache.keySet().retainAll(installedBundleIDs);
-			lastModifiedTimes.keySet().retainAll(installedBundleIDs);
-
-			//write to disk
-			try {
-				FileOutputStream out = new FileOutputStream(cacheFile);
-				ObjectOutputStream cacheStream = new ObjectOutputStream(out);
-				cacheStream.writeObject(cdCache);
-				cacheStream.writeObject(lastModifiedTimes);
-				cacheStream.flush();
-				cacheStream.close();
-				out.close();
-			} catch (Exception e) {
-				//should this be an info, warning, or error?
-				//some devices don't have filesystems
-				Log.log(LogService.LOG_WARNING, "Could not write Service Component XML cache", e);
-
-				//delete the cache file if possible
-				try {
-					cacheFile.delete();
-				} catch (Exception e2) {
-					Log.log(LogService.LOG_INFO, "Could not delete Service Component XML cache", e2);
-				}
-			}
-		} //end if(CACHE_XML)
-		cacheFile = null;
-		cdCache = null;
-		lastModifiedTimes = null;
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/model/ImplementationDescription.java b/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/model/ImplementationDescription.java
deleted file mode 100644
index b067297..0000000
--- a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/model/ImplementationDescription.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.ds.model;
-
-import java.io.Serializable;
-
-/**
- * 
- * This class models the implementation element.
- * The implementation element is required and defines the name of the component
- * implementation class.
- * 
- * @version $Revision: 1.2 $
- */
-public class ImplementationDescription implements Serializable {
-	/**
-	 * Eclipse-generated <code>serialVersionUID</code>
-	 */
-	private static final long serialVersionUID = -5348855154850323280L;
-
-	private String classname;
-
-	public ImplementationDescription() {
-	}
-
-	/**
-	 * @return Returns the classname.
-	 */
-	public String getClassname() {
-		return classname;
-	}
-
-	/**
-	 * @param classname set this class name.
-	 */
-	public void setClassname(String classname) {
-		this.classname = classname;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/model/PropertyDescription.java b/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/model/PropertyDescription.java
deleted file mode 100644
index 81ec99f..0000000
--- a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/model/PropertyDescription.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.ds.model;
-
-import java.io.Serializable;
-
-/**
- * 
- * Abstract class for modeling the property and properties elements.
- * 
- * @version $Revision: 1.2 $
- */
-public abstract class PropertyDescription implements Serializable {
-
-}
diff --git a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/model/PropertyResourceDescription.java b/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/model/PropertyResourceDescription.java
deleted file mode 100644
index 885b4b2..0000000
--- a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/model/PropertyResourceDescription.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.ds.model;
-
-/**
- * 
- * This class models the properties element.
- * The properties element reads a set of properties from a bundle entry.
- * 
- * @version $Revision: 1.2 $
- */
-public class PropertyResourceDescription extends PropertyDescription {
-
-	/**
-	 * Eclipse-generated <code>serialVersionUID</code>
-	 */
-	private static final long serialVersionUID = -6094597960839333734L;
-
-	private String entry;
-
-	/**
-	 * @return Returns the entry.
-	 */
-	public String getEntry() {
-		return entry;
-	}
-
-	/**
-	 * @param entry The entry to set.
-	 */
-	public void setEntry(String entry) {
-		this.entry = entry;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/model/PropertyValueDescription.java b/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/model/PropertyValueDescription.java
deleted file mode 100644
index 317e52a..0000000
--- a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/model/PropertyValueDescription.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.ds.model;
-
-/**
- * 
- * This class models the property element.
- * The property element defines a single property. 
- * 
- * @version $Revision: 1.2 $
- */
-public class PropertyValueDescription extends PropertyDescription {
-
-	/**
-	 * Eclipse-generated <code>serialVersionUID</code>
-	 */
-	private static final long serialVersionUID = 8680436828645485510L;
-
-	private String name;
-	private String type;
-	private Object value;
-
-	/**
-	 * @return Returns the name.
-	 */
-	public String getName() {
-		return name;
-	}
-
-	/**
-	 * @param name The name to set.
-	 */
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	/**
-	 * @return Returns the type.
-	 */
-	public String getType() {
-		return type == null ? "String" : type;
-	}
-
-	/**
-	 * @param type The type to set.
-	 */
-	public void setType(String type) {
-		this.type = type;
-	}
-
-	/**
-	 * @return Returns the value.
-	 */
-	public Object getValue() {
-		return value;
-	}
-
-	/**
-	 * @param value The value to set.
-	 */
-	public void setValue(Object value) {
-		this.value = value;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/model/ProvideDescription.java b/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/model/ProvideDescription.java
deleted file mode 100644
index 35007f9..0000000
--- a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/model/ProvideDescription.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.ds.model;
-
-import java.io.Serializable;
-
-/**
- * 
- * This class models the provide element.
- * The service element must have one or more provide elements that define
- * the service interfaces. The provide element has a single attribute:
- * interface 
- * 
- * @version $Revision: 1.2 $
- */
-public class ProvideDescription implements Serializable {
-	/**
-	 * Eclipse-generated <code>serialVersionUID</code>
-	 */
-	private static final long serialVersionUID = -8301435779729338880L;
-
-	private String interfacename;
-
-	/**
-	 * @return Returns the interfacename.
-	 */
-	public String getInterfacename() {
-		return interfacename;
-	}
-
-	/**
-	 * @param interfacename The interfacename to set.
-	 */
-	public void setInterfacename(String interfacename) {
-		this.interfacename = interfacename;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/model/ReferenceDescription.java b/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/model/ReferenceDescription.java
deleted file mode 100644
index ba5cfaf..0000000
--- a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/model/ReferenceDescription.java
+++ /dev/null
@@ -1,214 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.ds.model;
-
-import java.io.Serializable;
-import java.lang.reflect.Method;
-
-/**
- * 
- * This class models the reference element.
- * A reference declares a dependency that a component has on a set 
- * of target services.
- * 
- * @see org.eclipse.equinox.ds.resolver.Reference
- * 
- * @version $Revision: 1.2 $
- */
-public class ReferenceDescription implements Serializable {
-
-	/**
-	 * Eclipse-generated <code>serialVersionUID</code>
-	 */
-	private static final long serialVersionUID = -6454039348113422074L;
-
-	private static final int CARDINALITY_HIGH_DEFAULT = 1;
-	private static final int CARDINALITY_LOW_DEFAULT = 1;
-	private static final String POLICY_DEFAULT = "static";
-
-	private String name;
-	private String interfacename;
-
-	// Cardinality indicates the number of services, matching this
-	// reference,
-	// which will bind to this Service Component. Possible values are:
-	// 0..1, 0..n, 1..1 (i.e. exactly one), 1..n (i.e. at least one).
-	// This attribute is optional. If it is not specified, then a
-	// cardinality
-	// of “1..1� is used.
-	private int cardinalityHigh;
-	private int cardinalityLow;
-	private String policy;
-	private String target;
-	private String bind;
-	private String unbind;
-
-	//Cache bind and unbind methods
-	transient private Method bindMethod;
-	transient private Method unbindMethod;
-
-	public ReferenceDescription() {
-		// set defaults
-		cardinalityHigh = CARDINALITY_HIGH_DEFAULT;
-		cardinalityLow = CARDINALITY_LOW_DEFAULT;
-		policy = POLICY_DEFAULT;
-	}
-
-	/**
-	 * @return Returns the bind method.
-	 */
-	public String getBind() {
-		return bind;
-	}
-
-	/**
-	 * @param bind The bind method.
-	 */
-	public void setBind(String bind) {
-		this.bind = bind;
-	}
-
-	/**
-	 * @return Returns the cardinality.
-	 */
-	public int getCardinalityHigh() {
-		return cardinalityHigh;
-	}
-
-	/**
-	 * @param cardinality 
-	 */
-	public void setCardinality(String cardinality) {
-		if (cardinality.equals("0..1")) {
-			cardinalityLow = 0;
-			cardinalityHigh = 1;
-		} else if (cardinality.equals("0..n")) {
-			cardinalityLow = 0;
-			cardinalityHigh = 999999999; // infinite
-		} else if (cardinality.equals("1..1")) {
-			cardinalityLow = 1;
-			cardinalityHigh = 1;
-		} else if (cardinality.equals("1..n")) {
-			cardinalityLow = 1;
-			cardinalityHigh = 999999999;
-		} else {
-			// TODO throw exception?
-		}
-	}
-
-	/**
-	 * @return Returns the interfacename.
-	 */
-	public String getInterfacename() {
-		return interfacename;
-	}
-
-	/**
-	 * @param interfacename The interfacename to set.
-	 */
-	public void setInterfacename(String interfacename) {
-		this.interfacename = interfacename;
-	}
-
-	/**
-	 * @return Returns the name.
-	 */
-	public String getName() {
-		return name;
-	}
-
-	/**
-	 * @param name The name to set.
-	 */
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	/**
-	 * @return Returns the policy.
-	 */
-	public String getPolicy() {
-		return policy;
-	}
-
-	/**
-	 * @param policy The policy to set.
-	 */
-	public void setPolicy(String policy) {
-		// TODO validate
-		this.policy = policy;
-	}
-
-	/**
-	 * @return Returns the target.
-	 */
-	public String getTarget() {
-		return target;
-	}
-
-	/**
-	 * @param target The target to set.
-	 */
-	public void setTarget(String target) {
-		// TODO validate
-		this.target = target;
-	}
-
-	/**
-	 * @return Returns the unbind method
-	 */
-	public String getUnbind() {
-		return unbind;
-	}
-
-	/**
-	 * @param unbind The unbind method to set.
-	 */
-	public void setUnbind(String unbind) {
-		this.unbind = unbind;
-	}
-
-	// if the cardinality is "1..1" or "1..n" then this reference is required
-	public boolean isRequired() {
-		return (cardinalityLow == 1);
-	}
-
-	//Cache bind and unbind methods
-
-	/**
-	 * @return Returns the bind method.
-	 */
-	public Method getBindMethod() {
-		return bindMethod;
-	}
-
-	/**
-	 * @param bind The bind method.
-	 */
-	public void setBindMethod(Method method) {
-		this.bindMethod = method;
-	}
-
-	/**
-	 * @return Returns the unbind method
-	 */
-	public Method getUnbindMethod() {
-		return unbindMethod;
-	}
-
-	/**
-	 * @param unbind The unbind method to set.
-	 */
-	public void setUnbindMethod(Method method) {
-		this.unbindMethod = method;
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/model/ServiceDescription.java b/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/model/ServiceDescription.java
deleted file mode 100644
index 9e161a5..0000000
--- a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/model/ServiceDescription.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.ds.model;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * 
- * This class models the service element.
- * The service element is optional. It describes the service information to be
- * used when a component configuration is to be registered as a service. * 
- * 
- * @version $Revision: 1.2 $
- */
-public class ServiceDescription implements Serializable {
-	/**
-	 * Eclipse-generated <code>serialVersionUID</code>
-	 */
-	private static final long serialVersionUID = -4376202637155295067L;
-
-	private boolean servicefactory;
-	private List provides;
-
-	public ServiceDescription() {
-		servicefactory = false;
-		provides = new ArrayList();
-	}
-
-	/**
-	 * @param servicefactory indicates if servicefactory is set
-	 */
-	public void setServicefactory(boolean servicefactory) {
-		this.servicefactory = servicefactory;
-	}
-
-	/**
-	 * @return Returns true is servicefactory is set
-	 */
-	public boolean isServicefactory() {
-		return servicefactory;
-	}
-
-	/**
-	 * @param provide add this provide element to the array of provide elements.
-	 */
-	public void addProvide(ProvideDescription provide) {
-		provides.add(provide);
-	}
-
-	/**
-	 * @return Returns the array of provide elements.
-	 */
-	public ProvideDescription[] getProvides() {
-		int size = provides.size();
-		ProvideDescription[] result = new ProvideDescription[size];
-		provides.toArray(result);
-		return result;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/ComponentElement.java b/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/ComponentElement.java
deleted file mode 100644
index b656151..0000000
--- a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/ComponentElement.java
+++ /dev/null
@@ -1,125 +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.ds.parser;
-
-import org.eclipse.equinox.ds.model.ComponentDescription;
-import org.eclipse.equinox.ds.model.PropertyValueDescription;
-import org.osgi.service.component.ComponentConstants;
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
-
-class ComponentElement extends ElementHandler {
-	private ParserHandler parent;
-	private ComponentDescription component;
-	private boolean immediateSet;
-
-	ComponentElement(ParserHandler root, Attributes attributes) {
-		this.root = root;
-		this.parent = root;
-		component = new ComponentDescription(root.bundleContext);
-		immediateSet = false;
-
-		processAttributes(attributes);
-
-		if (component.getName() == null) {
-			root.logError("component name not specified");
-		}
-	}
-	
-	protected void handleAttribute(String name, String value) {
-		if (name.equals(ParserConstants.NAME_ATTRIBUTE)) {
-			component.setName(value);
-			PropertyValueDescription nameProperty = new PropertyValueDescription();
-			nameProperty.setName(ComponentConstants.COMPONENT_NAME);
-			nameProperty.setValue(value);
-			component.addPropertyDescription(nameProperty);
-			return;
-		}
-		if (name.equals(ParserConstants.ENABLED_ATTRIBUTE)) {
-			component.setAutoenable(value.equalsIgnoreCase("true"));
-			return;
-		}
-		if (name.equals(ParserConstants.FACTORY_ATTRIBUTE)) {
-			component.setFactory(value);
-			return;
-		}
-		if (name.equals(ParserConstants.IMMEDIATE_ATTRIBUTE)) {
-			component.setImmediate(value.equalsIgnoreCase("true"));
-			immediateSet = true;
-			return;
-		}
-		
-		root.logError("unrecognized component element attribute: " + name);
-	}
-
-
-
-	ComponentDescription getComponentDescription() {
-		return component;
-	}
-
-	public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
-		if (isSCRNamespace(uri)) {
-			if (localName.equals(ParserConstants.IMPLEMENTATION_ELEMENT)) {
-				root.setHandler(new ImplementationElement(root, this, attributes));
-				return;
-			}
-			
-			if (localName.equals(ParserConstants.PROPERTY_ELEMENT)) {
-				root.setHandler(new PropertyElement(root, this, attributes));
-				return;
-			}
-			
-			if (localName.equals(ParserConstants.PROPERTIES_ELEMENT)) {
-				root.setHandler(new PropertiesElement(root, this, attributes));
-				return;
-			}
-			
-			if (localName.equals(ParserConstants.SERVICE_ELEMENT)) {
-				root.setHandler(new ServiceElement(root, this, attributes));
-				return;
-			}
-			
-			if (localName.equals(ParserConstants.REFERENCE_ELEMENT)) {
-				root.setHandler(new ReferenceElement(root, this, attributes));
-				return;
-			}
-		}
-		
-		super.startElement(uri, localName, qName, attributes);
-	}
-
-	public void endElement(String uri, String localName, String qName) {
-
-		// if unset, immediate attribute is false if service element is
-		// specified or true otherwise
-		// if component factory then immediate by default is false
-		if (!immediateSet && (component.getFactory() == null)) {
-			component.setImmediate(component.getService() == null);
-		}
-
-		if (component.getImplementation() == null) {
-			root.logError("no implementation element");
-		}
-
-		if (root.isError()) {
-			root.setError(false);
-		} else {
-			parent.addComponentDescription(component);
-		}
-
-		root.setHandler(parent);
-	}
-
-	protected String getElementName() {
-		return "component";
-	}
-}
diff --git a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/ElementHandler.java b/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/ElementHandler.java
deleted file mode 100644
index eb7a7c4..0000000
--- a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/ElementHandler.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 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
- *******************************************************************************/
-package org.eclipse.equinox.ds.parser;
-
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
-import org.xml.sax.helpers.DefaultHandler;
-
-/**
- * Base class for element handlers to provide some common behavior.
- * 
- */
-abstract class ElementHandler extends DefaultHandler {
-	
-	protected ParserHandler	root;
-
-	/**
-	 * Return the name of the handled element.
-	 * 
-	 * @return The name of the handled element.
-	 */
-	protected abstract String getElementName();
-	
-	protected boolean isSCRNamespace(String uri) {
-		return (uri.length() == 0) || uri.equals(ParserConstants.SCR_NAMESPACE);
-	}
-	
-	protected void processAttributes(Attributes attributes) {
-		int size = attributes.getLength();
-		for (int i = 0; i < size; i++) {
-			if (isSCRNamespace(attributes.getURI(i))) {
-				handleAttribute(attributes.getLocalName(i), attributes.getValue(i));
-			}
-		}
-	}
-	
-	protected abstract void handleAttribute(String name, String value);
-
-	public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
-		if (isSCRNamespace(uri)) {
-			root.logError("unrecognized element "+ qName);
-		}
-		
-		root.setHandler(new IgnoredElement(root, this));
-	}
-
-	public void characters(char[] ch, int start, int length) {
-		int end = start + length;
-		for (int i = start; i < end; i++) {
-			if (!Character.isWhitespace(ch[i])) {
-				root.logError(getElementName()+ " element body must be empty");
-			}
-		}
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/IgnoredElement.java b/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/IgnoredElement.java
deleted file mode 100644
index 1821829..0000000
--- a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/IgnoredElement.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 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
- *******************************************************************************/
-package org.eclipse.equinox.ds.parser;
-
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
-import org.xml.sax.helpers.DefaultHandler;
-
-class IgnoredElement extends DefaultHandler {
-
-	private ParserHandler root;
-	private DefaultHandler parent;
-	
-	private int depth;
-	
-	IgnoredElement(ParserHandler root, DefaultHandler parent) {
-		this.root = root;
-		this.parent = parent;
-		depth = 1;
-	}
-	public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
-		depth++;
-	}
-	
-	
-	public void endElement(String uri, String localName, String qName) throws SAXException {
-		depth--;
-		if (depth == 0) {
-			root.setHandler(parent);
-		}
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/ImplementationElement.java b/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/ImplementationElement.java
deleted file mode 100644
index e2aeb3c..0000000
--- a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/ImplementationElement.java
+++ /dev/null
@@ -1,54 +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.ds.parser;
-
-import org.eclipse.equinox.ds.model.ComponentDescription;
-import org.eclipse.equinox.ds.model.ImplementationDescription;
-import org.xml.sax.Attributes;
-
-class ImplementationElement extends ElementHandler {
-	private ComponentElement parent;
-	private ImplementationDescription implementation;
-
-	ImplementationElement(ParserHandler root, ComponentElement parent, Attributes attributes) {
-		this.root = root;
-		this.parent = parent;
-		implementation = new ImplementationDescription();
-
-		processAttributes(attributes);
-		
-		if (implementation.getClassname() == null) {
-			root.logError("implementation class not specified");
-		}
-	}
-
-	protected void handleAttribute(String name, String value) {
-		if (name.equals(ParserConstants.CLASS_ATTRIBUTE)) {
-			implementation.setClassname(value);
-			return;
-		}
-		root.logError("unrecognized implementation element attribute: " + name);
-	}
-
-	public void endElement(String uri, String localName, String qName) {
-		ComponentDescription component = parent.getComponentDescription();
-		if (component.getImplementation() != null) {
-			root.logError("more than one implementation element");
-		}
-
-		component.setImplementation(implementation);
-		root.setHandler(parent);
-	}
-
-	protected String getElementName() {
-		return "implementation";
-	}
-}
diff --git a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/Parser.java b/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/Parser.java
deleted file mode 100644
index 56429c7..0000000
--- a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/Parser.java
+++ /dev/null
@@ -1,186 +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.ds.parser;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Dictionary;
-import java.util.Enumeration;
-import java.util.Iterator;
-import java.util.List;
-
-import javax.xml.parsers.FactoryConfigurationError;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.SAXParserFactory;
-
-import org.eclipse.equinox.ds.Activator;
-import org.eclipse.equinox.ds.Log;
-import org.eclipse.osgi.util.ManifestElement;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.BundleException;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.component.ComponentConstants;
-import org.osgi.util.tracker.ServiceTracker;
-import org.osgi.util.tracker.ServiceTrackerCustomizer;
-import org.xml.sax.SAXException;
-
-/**
- * 
- * Parse the component description xml
- * 
- * @version $Revision: 1.3 $
- */
-public class Parser implements ServiceTrackerCustomizer {
-
-	private Activator main;
-
-	/* ServiceTracker for parser */
-	private ServiceTracker parserTracker;
-
-	/**
-	 * If an XML Parser is needed but not available, wait until one becomes available
-	 */
-	private List delayedParseBundles = new ArrayList();
-
-	/**
-	 * Create and open a ServiceTracker which will track registered XML parsers
-	 * 
-	 * @param main Main object.
-	 */
-	public Parser(Activator main) {
-		this.main = main;
-		parserTracker = new ServiceTracker(main.context, ParserConstants.SAX_FACTORY_CLASS, this);
-		parserTracker.open();
-	}
-
-	public void dispose() {
-		parserTracker.close();
-	}
-
-	public List getComponentDescriptions(BundleContext bundleContext) throws XMLParserNotAvailableException {
-		ManifestElement[] xml = parseManifestHeader(bundleContext.getBundle());
-
-		List result;
-
-		if (xml != null) {
-			result = new ArrayList(xml.length);
-			for (int i = 0; i < xml.length; i++) {
-				List components = parseComponentDescription(bundleContext, xml[i].getValue());
-				result.addAll(components);
-			}
-		} else {
-			result = Collections.EMPTY_LIST;
-		}
-
-		return result;
-	}
-
-	/*
-	 * Get the xml files from the bundle
-	 * 
-	 * @param bundle Bundle @return Vector holding all the xmlfiles for the
-	 * specifed Bundle
-	 */
-	private ManifestElement[] parseManifestHeader(Bundle bundle) {
-
-		Dictionary headers = bundle.getHeaders();
-		String files = (String) headers.get(ComponentConstants.SERVICE_COMPONENT);
-
-		try {
-			return ManifestElement.parseHeader(ComponentConstants.SERVICE_COMPONENT, files);
-		} catch (BundleException e) {
-			Log.log(1, "[SCR] Error attempting parse Manifest Element Header. ", e);
-			return new ManifestElement[0];
-		}
-	}
-
-	/**
-	 * Given the bundle and the xml filename, parse it!
-	 * 
-	 * @param bundle Bundle
-	 * @param xml String
-	 */
-	private List parseComponentDescription(BundleContext bundleContext, String xml) throws XMLParserNotAvailableException {
-
-		SAXParserFactory parserFactory = (SAXParserFactory) parserTracker.getService();
-		if (parserFactory == null) {
-			// backup to using jaxp to create a new instance
-			try {
-				parserFactory = SAXParserFactory.newInstance();
-			} catch (FactoryConfigurationError err) {
-				/* whoops - we need an XML parser but we don't have one - put bundle on
-				 * "delayed parse list" and raise an exception
-				 */
-				delayedParseBundles.add(bundleContext.getBundle());
-				throw new XMLParserNotAvailableException();
-			}
-		}
-
-		List result = new ArrayList();
-		int fileIndex = xml.lastIndexOf('/');
-		String path = fileIndex != -1 ? xml.substring(0, fileIndex) : "/";
-		try {
-			Enumeration urls = bundleContext.getBundle().findEntries(path, xml.substring(fileIndex + 1), false);
-			if (urls == null || !urls.hasMoreElements()) {
-				throw new BundleException("resource not found: " + xml);
-			}
-			URL url = (URL) urls.nextElement();
-			InputStream is = url.openStream();
-			parserFactory.setNamespaceAware(true);
-			parserFactory.setValidating(false);
-			SAXParser saxParser = parserFactory.newSAXParser();
-			saxParser.parse(is, new ParserHandler(bundleContext, result));
-		} catch (IOException e) {
-			Log.log(1, "[SCR] IOException attempting to parse ComponentDescription XML. ", e);
-		} catch (BundleException e) {
-			Log.log(1, "[SCR] BundleException attempting to parse ComponentDescription XML. ", e);
-		} catch (SAXException e) {
-			Log.log(1, "[SCR] SAXException attempting to parse ComponentDescription XML. ", e);
-		} catch (ParserConfigurationException e) {
-			Log.log(1, "[SCR] ParserConfigurationException attempting to parse ComponentDescription XML. ", e);
-		}
-
-		return result;
-	}
-
-	/**
-	 * If we are waiting for the XML parser to appear, kick the main bundle loop to 
-	 * process
-	 */
-	public Object addingService(ServiceReference reference) {
-
-		Object xmlParser = main.context.getService(reference);
-
-		Iterator delayedParseBundlesItr = delayedParseBundles.iterator();
-		while (delayedParseBundlesItr.hasNext()) {
-			Bundle bundle = (Bundle) delayedParseBundlesItr.next();
-			delayedParseBundlesItr.remove();
-			if (bundle.getState() == Bundle.ACTIVE) {
-				main.addingBundle(bundle);
-			}
-		}
-
-		return xmlParser;
-	}
-
-	public void modifiedService(ServiceReference reference, Object object) {
-		//nothing
-	}
-
-	public void removedService(ServiceReference reference, Object object) {
-		main.context.ungetService(reference);
-	}
-}
diff --git a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/ParserConstants.java b/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/ParserConstants.java
deleted file mode 100644
index 8206810..0000000
--- a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/ParserConstants.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.ds.parser;
-
-/**
- * 
- * Define Constants
- * 
- * @version $Revision: 1.2 $
- */
-
-interface ParserConstants {
-
-	// Define the Service Component XML Tags
-	static final String SCR_NAMESPACE = "http://www.osgi.org/xmlns/scr/v1.0.0";
-	static final String COMPONENT_ELEMENT = "component";
-	static final String IMPLEMENTATION_ELEMENT = "implementation";
-	static final String REFERENCE_ELEMENT = "reference";
-	static final String SERVICE_ELEMENT = "service";
-	static final String PROPERTY_ELEMENT = "property";
-	static final String PROPERTIES_ELEMENT = "properties";
-	static final String NAME_ATTRIBUTE = "name";
-	static final String IMMEDIATE_ATTRIBUTE = "immediate";
-	static final String VALUE_ATTRIBUTE = "value";
-	static final String TYPE_ATTRIBUTE = "type";
-	static final String ENTRY_ATTRIBUTE = "entry";
-	static final String PROVIDE_ELEMENT = "provide";
-	static final String ENABLED_ATTRIBUTE = "enabled";
-	static final String FACTORY_ATTRIBUTE = "factory";
-	static final String SERVICEFACTORY_ATTRIBUTE = "servicefactory";
-	static final String CLASS_ATTRIBUTE = "class";
-	static final String INTERFACE_ATTRIBUTE = "interface";
-	static final String CARDINALITY_ATTRIBUTE = "cardinality";
-	static final String POLICY_ATTRIBUTE = "policy";
-	static final String TARGET_ATTRIBUTE = "target";
-	static final String BIND_ATTRIBUTE = "bind";
-	static final String UNBIND_ATTRIBUTE = "unbind";
-
-	/* SAX Parser class name */
-	static final String SAX_FACTORY_CLASS = "javax.xml.parsers.SAXParserFactory"; //$NON-NLS-1$
-}
diff --git a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/ParserHandler.java b/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/ParserHandler.java
deleted file mode 100644
index 0a371fc..0000000
--- a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/ParserHandler.java
+++ /dev/null
@@ -1,175 +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.ds.parser;
-
-import java.util.List;
-import org.eclipse.equinox.ds.Log;
-import org.eclipse.equinox.ds.model.ComponentDescription;
-import org.osgi.framework.BundleContext;
-import org.xml.sax.*;
-import org.xml.sax.helpers.DefaultHandler;
-
-/**
- * ParserHandler implements the methods for the DefaultHandler of the SAX
- * parser. Each Service Component bundle contains a set of xml files which are
- * parsed.
- * 
- * @version $Revision: 1.2 $
- */
-
-class ParserHandler extends DefaultHandler {
-
-	/* set this to true to compile in debug messages */
-	private static final boolean DEBUG = false;
-
-	private DefaultHandler handler;
-	private List components;
-	protected BundleContext bundleContext;
-	private int depth;
-	private boolean error;
-
-	ParserHandler(BundleContext bundleContext, List components) {
-		this.bundleContext = bundleContext;
-		this.components = components;
-	}
-
-	public void setHandler(DefaultHandler handler) {
-		this.handler = handler;
-	}
-
-	public void addComponentDescription(ComponentDescription component) {
-		components.add(component);
-	}
-
-	public void setError(boolean error) {
-		this.error = error;
-	}
-
-	public boolean isError() {
-		return error;
-	}
-
-	public void logError(String msg) {
-		error = true;
-		Log.log(1, "[SCR] Parser Error. ", new SAXException(msg));
-	}
-
-	public void startDocument() throws SAXException {
-		handler = this;
-		depth = 0;
-	}
-
-	public void startPrefixMapping(String prefix, String uri) throws SAXException {
-
-		if (DEBUG) {
-			System.out.println("[startPrefixMapping:prefix]" + prefix);
-			System.out.println("[startPrefixMapping:uri]" + uri);
-		}
-	}
-
-	public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
-		depth++;
-
-		if (DEBUG) {
-			System.out.println("[startElement:begin]");
-			System.out.println(" [uri]" + uri);
-			System.out.println(" [localName]" + localName);
-			System.out.println(" [qName]" + qName);
-
-			int size = attributes.getLength();
-			for (int i = 0; i < size; i++) {
-				String key = attributes.getQName(i);
-				String value = attributes.getValue(i);
-				System.out.println(" [attr:" + i + ":localName]" + attributes.getLocalName(i));
-				System.out.println(" [attr:" + i + ":qName]" + attributes.getQName(i));
-				System.out.println(" [attr:" + i + ":type]" + attributes.getType(i));
-				System.out.println(" [attr:" + i + ":URI]" + attributes.getURI(i));
-				System.out.println(" [attr:" + i + ":value]" + attributes.getValue(i));
-			}
-			System.out.println("[startElement:end]");
-		}
-
-		if (handler != this) {
-			handler.startElement(uri, localName, qName, attributes);
-			return;
-		}
-
-		if (localName.equals(ParserConstants.COMPONENT_ELEMENT)) {
-			if (((depth == 1) && (uri.length() == 0)) || uri.equals(ParserConstants.SCR_NAMESPACE)) {
-				setHandler(new ComponentElement(this, attributes));
-			}
-		}
-	}
-
-	public void characters(char[] ch, int start, int length) throws SAXException {
-
-		if (DEBUG) {
-			System.out.print("[characters:begin]");
-			System.out.print(new String(ch, start, length));
-			System.out.println("[characters:end]");
-		}
-
-		if (handler != this) {
-			handler.characters(ch, start, length);
-		}
-	}
-
-	public void endElement(String uri, String localName, String qName) throws SAXException {
-
-		if (DEBUG) {
-			System.out.println("[endElement:begin]");
-			System.out.println(" [uri]" + uri);
-			System.out.println(" [localName]" + localName);
-			System.out.println(" [qName]" + qName);
-			System.out.println("[endElement:end]");
-		}
-
-		if (handler != this) {
-			handler.endElement(uri, localName, qName);
-		}
-
-		depth--;
-	}
-
-	public void endPrefixMapping(String prefix) throws SAXException {
-		if (DEBUG) {
-			System.out.println("[endPrefixMapping:prefix]" + prefix);
-		}
-	}
-
-	public void endDocument() throws SAXException {
-		if (DEBUG) {
-			System.out.println("[endDocument]");
-		}
-	}
-
-	public void warning(SAXParseException e) throws SAXException {
-		if (DEBUG) {
-			System.out.println("[warning]");
-			e.printStackTrace();
-		}
-	}
-
-	public void error(SAXParseException e) throws SAXException {
-		if (DEBUG) {
-			System.out.println("[error]");
-			e.printStackTrace();
-		}
-	}
-
-	public void fatalError(SAXParseException e) throws SAXException {
-		if (DEBUG) {
-			System.out.println("[fatalError]");
-			e.printStackTrace();
-		}
-		throw e;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/PropertiesElement.java b/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/PropertiesElement.java
deleted file mode 100644
index d14dfe8..0000000
--- a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/PropertiesElement.java
+++ /dev/null
@@ -1,50 +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.ds.parser;
-
-import org.eclipse.equinox.ds.model.ComponentDescription;
-import org.eclipse.equinox.ds.model.PropertyResourceDescription;
-import org.xml.sax.Attributes;
-
-class PropertiesElement extends ElementHandler {
-	private ComponentElement parent;
-	private PropertyResourceDescription properties;
-
-	PropertiesElement(ParserHandler root, ComponentElement parent, Attributes attributes) {
-		this.root = root;
-		this.parent = parent;
-		properties = new PropertyResourceDescription();
-
-		processAttributes(attributes);
-		
-		if (properties.getEntry() == null) {
-			root.logError("properties entry not specified");
-		}
-	}
-
-	protected void handleAttribute(String name, String value) {
-		if (name.equals(ParserConstants.ENTRY_ATTRIBUTE)) {
-			properties.setEntry(value);
-			return;
-		}
-		root.logError("unrecognized properties element attribute: " + name);
-	}
-
-	public void endElement(String uri, String localName, String qName) {
-		ComponentDescription component = parent.getComponentDescription();
-		component.addPropertyDescription(properties);
-		root.setHandler(parent);
-	}
-
-	protected String getElementName() {
-		return "properties";
-	}
-}
diff --git a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/PropertyElement.java b/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/PropertyElement.java
deleted file mode 100644
index 2351d7f..0000000
--- a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/PropertyElement.java
+++ /dev/null
@@ -1,218 +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.ds.parser;
-
-import java.util.*;
-import org.eclipse.equinox.ds.model.ComponentDescription;
-import org.eclipse.equinox.ds.model.PropertyValueDescription;
-import org.xml.sax.Attributes;
-
-class PropertyElement extends ElementHandler {
-	private ComponentElement parent;
-	private PropertyValueDescription property;
-	private List values;
-
-	PropertyElement(ParserHandler root, ComponentElement parent, Attributes attributes) {
-		this.root = root;
-		this.parent = parent;
-		property = new PropertyValueDescription();
-		values = new ArrayList();
-
-		processAttributes(attributes);
-		
-		if (property.getName() == null) {
-			root.logError("property name not specified");
-		}
-	}
-
-	protected void handleAttribute(String name, String value) {
-		if (name.equals(ParserConstants.NAME_ATTRIBUTE)) {
-			property.setName(value);
-			return;
-		}
-
-		if (name.equals(ParserConstants.VALUE_ATTRIBUTE)) {
-			property.setValue(value);
-			return;
-		}
-
-		if (name.equals(ParserConstants.TYPE_ATTRIBUTE)) {
-			property.setType(value);
-			return;
-		}
-		root.logError("unrecognized properties element attribute: " + name);
-	}
-
-	public void characters(char[] ch, int start, int length) {
-		int end = start + length;
-		int cursor = start;
-		while (cursor < end) {
-			if (ch[cursor] == '\n') {
-				charLine(ch, start, cursor - start);
-				start = cursor;
-			}
-			cursor++;
-		}
-		charLine(ch, start, cursor - start);
-	}
-
-	private void charLine(char[] ch, int start, int length) {
-		if (length > 0) {
-			String line = new String(ch, start, length).trim();
-			if (line.length() > 0) {
-				values.add(line);
-			}
-		}
-	}
-
-	public void endElement(String uri, String localName, String qName) {
-
-		int size = values.size();
-
-		// If the value attribute is specified, then body of the property
-		// element is ignored.
-		if (property.getValue() != null) {
-			if (size > 0) {
-
-				root.logError("If the value attribute is specified, the body of the property element is ignored. key = " + property.getName() + " value = " + property.getValue());
-			}
-
-			//parse the value according to the type
-			String type = property.getType();
-			if (type == null || type.equals("String")) {
-				//value is already a string
-			} else if (type.equals("Long")) {
-				property.setValue(Long.valueOf((String) property.getValue(), 10));
-			} else if (type.equals("Double")) {
-				property.setValue(Double.valueOf((String) property.getValue()));
-			} else if (type.equals("Float")) {
-				property.setValue(Float.valueOf((String) property.getValue()));
-			} else if (type.equals("Integer")) {
-				property.setValue(Integer.valueOf((String) property.getValue()));
-			} else if (type.equals("Byte")) {
-				property.setValue(Byte.valueOf((String) property.getValue(), 10));
-			} else if (type.equals("Char")) {
-				property.setValue(new Character(((String) property.getValue()).charAt(0)));
-			} else if (type.equals("Boolean")) {
-				property.setValue(Boolean.valueOf((String) property.getValue()));
-			} else if (type.equals("Short")) {
-				property.setValue(Short.valueOf((String) property.getValue(), 10));
-			}
-
-			// if characters were specified ( values are specifed in the body of
-			// the property element )
-		} else if (size > 0) {
-			// if String then store as String[]
-			if (property.getType().equals("String")) {
-				String[] result = new String[size];
-				values.toArray(result);
-				property.setValue(result);
-			} else if (property.getType().equals("Integer")) {
-				int[] result = new int[size];
-				if (values != null) {
-					Iterator it = values.iterator();
-					int i = 0;
-					while (it.hasNext()) {
-						Integer value = new Integer((String) it.next());
-						result[i++] = value.intValue();
-					}
-					property.setValue(result);
-				}
-			} else if (property.getType().equals("Long")) {
-				long[] result = new long[size];
-				if (values != null) {
-					Iterator it = values.iterator();
-					int i = 0;
-					while (it.hasNext()) {
-						Long value = new Long((String) it.next());
-						result[i++] = value.longValue();
-					}
-					property.setValue(result);
-				}
-			} else if (property.getType().equals("Double")) {
-				double[] result = new double[size];
-				if (values != null) {
-					Iterator it = values.iterator();
-					int i = 0;
-					while (it.hasNext()) {
-						Double value = new Double((String) it.next());
-						result[i++] = value.doubleValue();
-					}
-					property.setValue(result);
-				}
-			} else if (property.getType().equals("Float")) {
-				float[] result = new float[size];
-				if (values != null) {
-					Iterator it = values.iterator();
-					int i = 0;
-					while (it.hasNext()) {
-						Float value = new Float((String) it.next());
-						result[i++] = value.floatValue();
-					}
-					property.setValue(result);
-				}
-			} else if (property.getType().equals("Byte")) {
-				byte[] result = new byte[size];
-				if (values != null) {
-					Iterator it = values.iterator();
-					int i = 0;
-					while (it.hasNext()) {
-						Byte value = new Byte((String) it.next());
-						result[i++] = value.byteValue();
-					}
-					property.setValue(result);
-				}
-			} else if (property.getType().equals("Char")) {
-				char[] result = new char[size];
-				if (values != null) {
-					Iterator it = values.iterator();
-					int i = 0;
-					while (it.hasNext()) {
-						char[] value = ((String) it.next()).toCharArray();
-						result[i++] = value[0];
-					}
-					property.setValue(result);
-				}
-			} else if (property.getType().equals("Boolean")) {
-				boolean[] result = new boolean[size];
-				if (values != null) {
-					Iterator it = values.iterator();
-					int i = 0;
-					while (it.hasNext()) {
-						Boolean value = new Boolean((String) it.next());
-						result[i++] = value.booleanValue();
-					}
-					property.setValue(result);
-				}
-			} else if (property.getType().equals("Short")) {
-				short[] result = new short[size];
-				if (values != null) {
-					Iterator it = values.iterator();
-					int i = 0;
-					while (it.hasNext()) {
-						Short value = new Short((String) it.next());
-						result[i++] = value.shortValue();
-					}
-					property.setValue(result);
-				}
-			}
-
-		}
-
-		ComponentDescription component = parent.getComponentDescription();
-		component.addPropertyDescription(property);
-		root.setHandler(parent);
-	}
-
-	protected String getElementName() {
-		return "property";
-	}
-}
diff --git a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/ProvideElement.java b/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/ProvideElement.java
deleted file mode 100644
index 763a573..0000000
--- a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/ProvideElement.java
+++ /dev/null
@@ -1,51 +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.ds.parser;
-
-import org.eclipse.equinox.ds.model.ProvideDescription;
-import org.eclipse.equinox.ds.model.ServiceDescription;
-import org.xml.sax.Attributes;
-
-class ProvideElement extends ElementHandler {
-	private ServiceElement parent;
-	private ProvideDescription provide;
-
-	ProvideElement(ParserHandler root, ServiceElement parent, Attributes attributes) {
-		this.root = root;
-		this.parent = parent;
-		provide = new ProvideDescription();
-
-		processAttributes(attributes);
-
-		if (provide.getInterfacename() == null) {
-			root.logError("provide interface not specified");
-		}
-	}
-
-	protected void handleAttribute(String name, String value) {
-		if (name.equals(ParserConstants.INTERFACE_ATTRIBUTE)) {
-			provide.setInterfacename(value);
-			return;
-		}
-		root.logError("unrecognized provide element attribute: " + name);
-	}
-
-	public void endElement(String uri, String localName, String qName) {
-		ServiceDescription service = parent.getServiceDescription();
-
-		service.addProvide(provide);
-		root.setHandler(parent);
-	}
-
-	protected String getElementName() {
-		return "provide";
-	}
-}
diff --git a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/ReferenceElement.java b/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/ReferenceElement.java
deleted file mode 100644
index e2b339a..0000000
--- a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/ReferenceElement.java
+++ /dev/null
@@ -1,83 +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.ds.parser;
-
-import org.eclipse.equinox.ds.model.ComponentDescription;
-import org.eclipse.equinox.ds.model.ReferenceDescription;
-import org.xml.sax.Attributes;
-
-class ReferenceElement extends ElementHandler {
-	private ComponentElement parent;
-	private ReferenceDescription reference;
-
-	ReferenceElement(ParserHandler root, ComponentElement parent, Attributes attributes) {
-		this.root = root;
-		this.parent = parent;
-		reference = new ReferenceDescription();
-
-		processAttributes(attributes);
-
-		if (reference.getName() == null) {
-			root.logError("reference name not specified");
-		}
-		if (reference.getInterfacename() == null) {
-			root.logError("reference interface not specified");
-		}
-	}
-
-	protected void handleAttribute(String name, String value) {
-		if (name.equals(ParserConstants.NAME_ATTRIBUTE)) {
-			reference.setName(value);
-			return;
-		}
-
-		if (name.equals(ParserConstants.INTERFACE_ATTRIBUTE)) {
-			reference.setInterfacename(value);
-			return;
-		}
-
-		if (name.equals(ParserConstants.CARDINALITY_ATTRIBUTE)) {
-			reference.setCardinality(value);
-			return;
-		}
-
-		if (name.equals(ParserConstants.POLICY_ATTRIBUTE)) {
-			reference.setPolicy(value);
-			return;
-		}
-
-		if (name.equals(ParserConstants.TARGET_ATTRIBUTE)) {
-			reference.setTarget(value);
-			return;
-		}
-
-		if (name.equals(ParserConstants.BIND_ATTRIBUTE)) {
-			reference.setBind(value);
-			return;
-		}
-
-		if (name.equals(ParserConstants.UNBIND_ATTRIBUTE)) {
-			reference.setUnbind(value);
-			return;
-		}
-		root.logError("unrecognized reference element attribute: " + name);
-	}
-
-	public void endElement(String uri, String localName, String qName) {
-		ComponentDescription component = parent.getComponentDescription();
-		component.addReferenceDescription(reference);
-		root.setHandler(parent);
-	}
-
-	protected String getElementName() {
-		return "reference";
-	}
-}
diff --git a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/ServiceElement.java b/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/ServiceElement.java
deleted file mode 100644
index d6d2e39..0000000
--- a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/ServiceElement.java
+++ /dev/null
@@ -1,74 +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.ds.parser;
-
-import org.eclipse.equinox.ds.model.ComponentDescription;
-import org.eclipse.equinox.ds.model.ServiceDescription;
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
-
-class ServiceElement extends ElementHandler {
-	private ComponentElement parent;
-	private ServiceDescription service;
-
-	public ServiceElement(ParserHandler root, ComponentElement parent, Attributes attributes) {
-		this.root = root;
-		this.parent = parent;
-		service = new ServiceDescription();
-
-		processAttributes(attributes);
-	}
-
-	protected void handleAttribute(String name, String value) {
-		if (name.equals(ParserConstants.SERVICEFACTORY_ATTRIBUTE)) {
-			service.setServicefactory(value.equalsIgnoreCase("true"));
-			return;
-		}
-		root.logError("unrecognized service element attribute: " + name);
-	}
-
-	ServiceDescription getServiceDescription() {
-		return service;
-	}
-
-	public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
-		if (isSCRNamespace(uri)) {
-			if (localName.equals(ParserConstants.PROVIDE_ELEMENT)) {
-				root.setHandler(new ProvideElement(root, this, attributes));
-				return;
-			}
-		}
-		
-		super.startElement(uri, localName, qName, attributes);
-	}
-
-	public void endElement(String uri, String localName, String qName) {
-		ComponentDescription component = parent.getComponentDescription();
-		if (component.getService() != null) {
-			root.logError("more than one service element");
-		}
-
-		if (service.getProvides().length == 0) {
-			root.logError("no provide elements specified");
-		}
-
-		if ((component.getFactory() != null) && service.isServicefactory()) {
-			root.logError("component factory is incompatible with Service factory ");
-		}
-
-		component.setService(service);
-		root.setHandler(parent);
-	}
-
-	protected String getElementName() {
-		return "service";
-	}
-}
diff --git a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/XMLParserNotAvailableException.java b/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/XMLParserNotAvailableException.java
deleted file mode 100644
index 84f269d..0000000
--- a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/parser/XMLParserNotAvailableException.java
+++ /dev/null
@@ -1,22 +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.ds.parser;
-
-/**
- * Exception thrown by the Parser class when an XML Parser implementation is not 
- * available
- * 
- * @author rpatersn
- */
-public class XMLParserNotAvailableException extends Exception {
-	private static final long serialVersionUID = 7347111510184149410L;
-
-}
diff --git a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/resolver/CircularityException.java b/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/resolver/CircularityException.java
deleted file mode 100644
index 5d59173..0000000
--- a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/resolver/CircularityException.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.ds.resolver;
-
-import org.eclipse.equinox.ds.model.ComponentConfiguration;
-
-/**
- * 
- */
-class CircularityException extends Exception {
-
-	/**
-	 * Eclipse-generated <code>serialVersionUID</code>
-	 */
-	private static final long serialVersionUID = 8249461007142713618L;
-
-	private ComponentConfiguration componentConfiguration;
-
-	CircularityException(ComponentConfiguration componentConfiguration) {
-		this.componentConfiguration = componentConfiguration;
-	}
-
-	ComponentConfiguration getCircularDependency() {
-		return componentConfiguration;
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/resolver/Reference.java b/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/resolver/Reference.java
deleted file mode 100644
index 67d5292..0000000
--- a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/resolver/Reference.java
+++ /dev/null
@@ -1,247 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.ds.resolver;
-
-import java.util.*;
-import org.eclipse.equinox.ds.model.ComponentConfiguration;
-import org.eclipse.equinox.ds.model.ReferenceDescription;
-import org.osgi.framework.*;
-
-/**
- * 
- * Wrapper for a {@link ReferenceDescription} that may have
- * a different target filter set by ConfigAdmin or ComponentFactory.newInstance()
- * 
- * @see org.eclipse.equinox.ds.model.ReferenceDescription
- * @version $Revision: 1.1 $
- */
-public class Reference {
-
-	private static final String TARGET = ".target";
-	private ReferenceDescription referenceDescription;
-	private ComponentConfiguration componentConfiguration;
-	private String target;
-
-	/**
-	 * The Set of {@link ServiceReference ServiceReferences} bound to this Reference
-	 */
-	private Set serviceReferences = new HashSet();
-
-	// ServiceReference:ServiceObject that binded to this instance
-	private Map serviceReferenceToServiceObject = new Hashtable();
-
-	/**
-	 * Create a new Reference object.
-	 * 
-	 * If properties include a (reference name).target property, that overrides
-	 * the target in the {@link ReferenceDescription}.
-	 * 
-	 * @param referenceDescription
-	 * @param properties Properties for this Component Configuration
-	 */
-	Reference(ReferenceDescription referenceDescription, Hashtable properties) {
-		this.referenceDescription = referenceDescription;
-
-		//properties can override the Service Component XML
-		this.target = (String) properties.get(referenceDescription.getName() + TARGET);
-
-		this.target = this.target != null ? this.target : referenceDescription.getTarget();
-
-		// RFC 80 section 5.3.1.3:
-		// If [target] is not specified and there is no <reference-name>.target
-		// component
-		// property, then the selection filter used to select the desired
-		// service is
-		// “(objectClass=�+<interface-name>+�)�.
-		this.target = this.target != null ? this.target : "(objectClass=" + referenceDescription.getInterfacename() + ")";
-
-	}
-
-	/**
-	 * Set the Component Configuration that this reference belongs to
-	 */
-	void setComponentConfiguration(ComponentConfiguration parent) {
-		componentConfiguration = parent;
-	}
-
-	/**
-	 * Get the Component Configuration that this reference belongs to
-	 */
-	public ComponentConfiguration getComponentConfiguration() {
-		return componentConfiguration;
-	}
-
-	/**
-	 * Check if there is at least one service registered that satisfies this
-	 * reference.
-	 * 
-	 * Checks ServicePermission.GET.
-	 * 
-	 * @param context Bundle context used to call 
-	 *        {@link BundleContext#getServiceReferences(java.lang.String, java.lang.String)}
-	 * @return whether this Reference can be satisfied by the currently registered services
-	 */
-	boolean hasProvider(BundleContext context) {
-
-		// Get all service references for this target filter
-		try {
-			ServiceReference[] providers = null;
-			providers = context.getServiceReferences(referenceDescription.getInterfacename(), target);
-			// if there is no service published that this Service
-			// ComponentReferences
-			if (providers != null) {
-				return true;
-			}
-			return false;
-		} catch (InvalidSyntaxException e) {
-			//TODO log something?
-			return false;
-		}
-	}
-
-	public ReferenceDescription getReferenceDescription() {
-		return referenceDescription;
-	}
-
-	public String getTarget() {
-		return target;
-	}
-
-	/**
-	 * Check if a {@link ServiceReference} should be dynamically bound to this 
-	 * Reference.
-	 * 
-	 * @param serviceReference
-	 */
-	public boolean dynamicBindReference(ServiceReference serviceReference) {
-
-		//check policy
-		if ("static".equals(referenceDescription.getPolicy())) {
-			return false;
-		}
-
-		//check interface
-		List provideList = Arrays.asList((String[]) (serviceReference.getProperty("objectClass")));
-		if (!provideList.contains(this.getReferenceDescription().getInterfacename())) {
-			return false;
-		}
-
-		//check target filter
-		Filter filter;
-		try {
-			filter = FrameworkUtil.createFilter(target);
-		} catch (InvalidSyntaxException e) {
-			//TODO log something?
-			return false;
-		}
-		if (!filter.match(serviceReference)) {
-			return false;
-		}
-
-		//check cardinality
-		int currentRefCount = serviceReferences.size();
-		if (currentRefCount < referenceDescription.getCardinalityHigh()) {
-			return true;
-		}
-		return false;
-
-	}
-
-	/**
-	 * Check if we need to be dynamically unbound from a {@link ServiceReference}
-	 * 
-	 * @param serviceReference
-	 */
-	boolean dynamicUnbindReference(ServiceReference serviceReference) {
-
-		// nothing dynamic to do if static
-		if ("static".equals(referenceDescription.getPolicy())) {
-			return false;
-		}
-
-		// now check if the ServiceReference is found in the list of saved
-		// ServiceReferences for this reference
-		if (!serviceReferences.contains(serviceReference)) {
-			return false;
-		}
-
-		return true;
-
-	}
-
-	public void addServiceReference(ServiceReference serviceReference) {
-		serviceReferences.add(serviceReference);
-	}
-
-	public void removeServiceReference(ServiceReference serviceReference) {
-		serviceReferences.remove(serviceReference);
-		serviceReferenceToServiceObject.remove(serviceReference);
-	}
-
-	public void clearServiceReferences() {
-		serviceReferences.clear();
-		serviceReferenceToServiceObject.clear();
-	}
-
-	public Set getServiceReferences() {
-		return serviceReferences;
-	}
-
-	public boolean bindedToServiceReference(ServiceReference serviceReference) {
-		return serviceReferences.contains(serviceReference);
-	}
-
-	public void addServiceReference(ServiceReference serviceReference, Object serviceObject) {
-		addServiceReference(serviceReference);
-		serviceReferenceToServiceObject.put(serviceReference, serviceObject);
-	}
-
-	public Object getServiceObject(ServiceReference serviceReference) {
-		return serviceReferenceToServiceObject.get(serviceReference);
-	}
-
-	/**
-	 * Check if this reference can be satisfied by the service provided by one
-	 * of a list of Component Configurations
-	 * 
-	 * @param componentConfigurations a List of {@link ComponentConfiguration}s to search for providers
-	 * for this reference
-	 * @return the providing component configuration or null if none
-	 */
-	ComponentConfiguration findProviderComponentConfiguration(List componentConfigurations) {
-
-		Filter filter;
-		try {
-
-			filter = FrameworkUtil.createFilter(target);
-		} catch (InvalidSyntaxException e) {
-			//TODO log something?
-			return null;
-		}
-
-		// loop thru component configurations to search for provider of service
-		Iterator it = componentConfigurations.iterator();
-		while (it.hasNext()) {
-			ComponentConfiguration providerComponentConfiguration = (ComponentConfiguration) it.next();
-			List provideList = providerComponentConfiguration.getComponentDescription().getServicesProvided();
-
-			if (provideList.contains(this.getReferenceDescription().getInterfacename())) {
-				// check the target field
-				if (filter.match(providerComponentConfiguration.getProperties())) {
-					return providerComponentConfiguration;
-				}
-			}
-		}
-
-		return null;
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/resolver/Resolver.java b/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/resolver/Resolver.java
deleted file mode 100644
index f214c46..0000000
--- a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/resolver/Resolver.java
+++ /dev/null
@@ -1,946 +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.ds.resolver;
-
-import java.io.IOException;
-import java.util.*;
-import org.eclipse.equinox.ds.Activator;
-import org.eclipse.equinox.ds.Log;
-import org.eclipse.equinox.ds.instance.InstanceProcess;
-import org.eclipse.equinox.ds.model.*;
-import org.eclipse.equinox.ds.workqueue.WorkDispatcher;
-import org.eclipse.equinox.ds.workqueue.WorkQueue;
-import org.osgi.framework.*;
-import org.osgi.service.cm.Configuration;
-import org.osgi.service.cm.ConfigurationAdmin;
-import org.osgi.service.component.ComponentConstants;
-import org.osgi.service.component.ComponentException;
-import org.osgi.service.log.LogService;
-import org.osgi.util.tracker.ServiceTracker;
-
-/**
- * Resolver - resolves the Service Components.  This includes creating Component 
- * Configurations, resolving the required referenced services, and checking for 
- * circular dependencies.
- * 
- * The Resolver implements AllServiceListener so it can be informed about service
- * changes in the framework.
- * 
- * @version $Revision: 1.3 $
- */
-public class Resolver implements AllServiceListener, WorkDispatcher {
-
-	/* set this to true to compile in debug messages */
-	private static final boolean DEBUG = false;
-
-	/** 
-	 * next free component id.
-	 * See OSGi R4 Specification section 112.6 "Component Properties"
-	 */
-	private static long componentid;
-
-	/* ServiceTracker for configurationAdmin */
-	public ServiceTracker configAdminTracker;
-
-	/**
-	 * Service Component instances need to be built.
-	 */
-	private static final int BUILD = 1;
-
-	/**
-	 * Service Component instances to bind dynamically
-	 */
-	public static final int DYNAMICBIND = 3;
-
-	/**
-	 * Main class for the SCR
-	 */
-	private Activator main;
-
-	public InstanceProcess instanceProcess;
-
-	/**
-	 * List of {@link ComponentConfiguration}s - the currently "enabled" 
-	 * Component Configurations.
-	 */
-	public List enabledComponentConfigurations;
-
-	/**
-	 * List of {@link ComponentConfiguration}s - the currently "satisfied" 
-	 * Component Configurations.  Note that to be satisfied a Component 
-	 * Configuration must first be enabled, so this list is a subset of 
-	 * {@link Resolver#enabledComponentConfigurations enabledComponentConfigurations}.
-	 */
-	public List satisfiedComponentConfigurations;
-
-	/**
-	 * A map of name:Service Component (String):({@link ComponentDescription})
-	 */
-	public Map enabledCDsByName;
-
-	private WorkQueue workQueue;
-
-	/**
-	 * Resolver constructor
-	 * 
-	 * @param main Main class of SCR
-	 */
-	public Resolver(Activator main) {
-		this.main = main;
-
-		componentid = 1;
-
-		// for now use Main's workqueue
-		workQueue = main.workQueue;
-
-		enabledComponentConfigurations = new ArrayList();
-		satisfiedComponentConfigurations = new ArrayList();
-		enabledCDsByName = new HashMap();
-
-		configAdminTracker = new ServiceTracker(main.context, ConfigurationAdmin.class.getName(), null);
-		configAdminTracker.open();
-
-		instanceProcess = new InstanceProcess(main);
-
-		//start listening to ServiceChanged events
-		main.context.addServiceListener(this);
-
-	}
-
-	/**
-	 * Clean up the SCR is shutting down
-	 */
-	public void dispose() {
-
-		//stop listening to ServiceChanged events
-		main.context.removeServiceListener(this);
-
-		instanceProcess.dispose();
-		instanceProcess = null;
-
-		configAdminTracker.close();
-		configAdminTracker = null;
-
-		enabledComponentConfigurations = null;
-		satisfiedComponentConfigurations = null;
-		enabledCDsByName = null;
-
-	}
-
-	/**
-	 * Enable Service Components - create Component Configuration(s) for the 
-	 * Service Components and try to satisfy their dependencies.
-	 * 
-	 * <p>
-	 * For each Service Component ({@link ComponentDescription}) check 
-	 * ConfigurationAdmin for properties and create a Component Configuration 
-	 * ({@link ComponentConfiguration}).
-	 * </p>
-	 * 
-	 * <p>
-	 * If a {@link org.osgi.service.cm.ManagedServiceFactory ManagedServiceFactory}
-	 * is registered for the Service Component, we may create multiple Component
-	 * Configurations.
-	 * </p>
-	 * 
-	 * <p>
-	 * After the Component Configuration(s) are created, call 
-	 * {@link Resolver#resolve(ServiceEvent) getEligible(null)} to try to
-	 * satisfy them.
-	 * </p>
-	 * 
-	 * @param componentDescriptions - a List of {@link ComponentDescription}s to 
-	 *        be enabled 
-	 */
-	public void enableComponents(List componentDescriptions) throws ComponentException {
-
-		Iterator it = componentDescriptions.iterator();
-		while (it.hasNext()) {
-			ComponentDescription cd = (ComponentDescription) it.next();
-
-			// add to our enabled lookup list
-			enabledCDsByName.put(cd.getName(), cd);
-
-			// check for a Configuration properties for this component
-			Configuration config = null;
-			try {
-				ConfigurationAdmin configurationAdmin = (ConfigurationAdmin) configAdminTracker.getService();
-				if (configurationAdmin != null) {
-					config = configurationAdmin.getConfiguration(cd.getName(), cd.getBundleContext().getBundle().getLocation());
-				}
-			} catch (IOException e) {
-				// Log it and continue
-				Log.log(1, "[SCR] IOException when getting Configuration Properties. ", e);
-			}
-
-			// if no Configuration
-			if (config == null) {
-				// create ComponentConfiguration
-				map(cd, null);
-
-			} else {
-
-				// if ManagedServiceFactory
-				if (config.getFactoryPid() != null) {
-
-					// if ComponentFactory is specified
-					if (cd.getFactory() != null) {
-						throw new ComponentException("incompatible to specify both ComponentFactory and ManagedServiceFactory are incompatible");
-					}
-
-					Configuration[] configs = null;
-					try {
-						ConfigurationAdmin cm = (ConfigurationAdmin) configAdminTracker.getService();
-						configs = cm.listConfigurations("(service.factoryPid=" + config.getFactoryPid() + ")");
-					} catch (InvalidSyntaxException e) {
-						Log.log(1, "[SCR] InvalidSyntaxException when getting CM Configurations. ", e);
-					} catch (IOException e) {
-						Log.log(1, "[SCR] IOException when getting CM Configurations. ", e);
-					}
-
-					// for each MSF set of properties(P), map(CD,P)
-					if (configs != null) {
-						for (int i = 0; i < configs.length; i++) {
-							map(cd, configs[i].getProperties());
-						}
-					}
-				} else {
-					// if Service
-					map(cd, config.getProperties());
-				}
-			}
-		}
-		// resolve
-		resolve(null);
-	}
-
-	/**
-	 * Combine ConfigAdmin properties with a Service Component 
-	 * ({@link ComponentDescription}) to create a Component Configuration 
-	 * ({@link ComponentConfiguration}), and add it to our list of enabled 
-	 * Component Configurations ({@link Resolver#enabledComponentConfigurations}).
-	 * 
-	 * The ConfigAdmin properties are combined with the properties from the 
-	 * Service Component's XML.
-	 * 
-	 * @param cd Service Component
-	 * @param configAdminProps ConfigAdmin properties for this Component
-	 *        Configuration 
-	 */
-	public ComponentConfiguration map(ComponentDescription cd, Dictionary configAdminProps) {
-		return doMap(cd, configAdminProps, cd.getFactory() != null);
-	}
-
-	/**
-	 * Create a Component Configuration of a Service Component that has the
-	 * "factory" attribute.  
-	 * 
-	 * @see Resolver#map(ComponentDescription, Dictionary)
-	 * @see ComponentConfiguration#componentFactory
-	 */
-	public ComponentConfiguration mapFactoryInstance(ComponentDescription cd, Dictionary configAdminProps) {
-		return doMap(cd, configAdminProps, false);
-	}
-
-	private ComponentConfiguration doMap(ComponentDescription cd, Dictionary configAdminProps, boolean componentFactory) {
-
-		// Create CD+P
-
-		// calculate the component configuration's properties
-		Hashtable properties = initProperties(cd, configAdminProps);
-
-		// for each Reference Description, create a reference object
-		List references = new ArrayList();
-		Iterator it = cd.getReferenceDescriptions().iterator();
-		while (it.hasNext()) {
-			ReferenceDescription referenceDesc = (ReferenceDescription) it.next();
-
-			// create new Reference Object
-			Reference ref = new Reference(referenceDesc, properties);
-			references.add(ref);
-
-		}
-		references = !references.isEmpty() ? references : Collections.EMPTY_LIST;
-
-		ComponentConfiguration componentConfiguration = new ComponentConfiguration(cd, references, properties, componentFactory);
-
-		//for each Reference, set it's "parent" (the component configuration)
-		it = componentConfiguration.getReferences().iterator();
-		while (it.hasNext()) {
-			Reference reference = (Reference) it.next();
-
-			// set parent component configuration
-			reference.setComponentConfiguration(componentConfiguration);
-		}
-
-		cd.addComponentConfiguration(componentConfiguration);
-
-		// add CD+P to set
-		enabledComponentConfigurations.add(componentConfiguration);
-
-		return componentConfiguration;
-	}
-
-	/**
-	 * Initialize Properties for a CD+P
-	 * 
-	 * The property elements provide default or supplemental property values if
-	 * not overridden by the properties retrieved from Configuration Admin.
-	 * 
-	 * The property and properties elements are processed in top to bottom
-	 * order. This allows later elements to override property values defined by
-	 * earlier elements. There can be many property and properties elements and
-	 * they may be interleaved.
-	 * 
-	 * @return Dictionary properties
-	 */
-	private Hashtable initProperties(ComponentDescription cd, Dictionary configAdminProps) {
-
-		Hashtable properties = new Hashtable();
-
-		// 0) add Reference target properties
-		Iterator it = cd.getReferenceDescriptions().iterator();
-		while (it.hasNext()) {
-			ReferenceDescription referenceDesc = (ReferenceDescription) it.next();
-			if (referenceDesc.getTarget() != null) {
-				properties.put(referenceDesc.getName() + ".target", referenceDesc.getTarget());
-			}
-		}
-
-		// 1) get properties from Service Component XML, in parse order
-		properties.putAll(cd.getProperties());
-
-		// 2) Add configAdmin properties
-		if (configAdminProps != null) {
-			Enumeration keys = configAdminProps.keys();
-			while (keys.hasMoreElements()) {
-				Object key = keys.nextElement();
-				properties.put(key, configAdminProps.get(key));
-			}
-		}
-
-		// add component.name and component.id (cannot be overridden)
-		properties.put(ComponentConstants.COMPONENT_NAME, cd.getName());
-		properties.put(ComponentConstants.COMPONENT_ID, new Long(getNextComponentId()));
-
-		// add component.factory if it's a factory
-		if (cd.getFactory() != null) {
-			properties.put(ComponentConstants.COMPONENT_FACTORY, cd.getFactory());
-		}
-
-		// add ObjectClass so we can match target filters before actually being
-		// registered
-		List servicesProvided = cd.getServicesProvided();
-		if (!servicesProvided.isEmpty()) {
-			properties.put(Constants.OBJECTCLASS, servicesProvided.toArray(new String[servicesProvided.size()]));
-		}
-
-		return properties;
-	}
-
-	/**
-	 * Disable Service Components.
-	 * 
-	 * For each Service Component ({@link ComponentDescription}),
-	 * dispose of all of it's Component Configurations 
-	 * ({@link ComponentConfiguration}s).
-	 * 
-	 * @see Resolver#disposeComponentConfigurations(List)
-	 * 
-	 * @param componentDescriptions List of {@link ComponentConfiguration}s to
-	 *        disable
-	 */
-	public void disableComponents(List componentDescriptions) {
-
-		// Received list of CDs to disable
-		Iterator it = componentDescriptions.iterator();
-		while (it.hasNext()) {
-
-			// get the CD
-			ComponentDescription cd = (ComponentDescription) it.next();
-
-			disposeComponentConfigurations((List) ((ArrayList) cd.getComponentConfigurations()).clone());
-
-			cd.clearComponentConfigurations();
-
-			enabledCDsByName.remove(cd.getName());
-		}
-
-	}
-
-	/**
-	 * Dispose of Component Configurations ({@link ComponentConfiguration}s).
-	 * 
-	 * Remove Component Configurations from satisfied and enabled lists, and send
-	 * to InstanceProcess to be unregistered, deactivated, and unbound.
-	 * 
-	 * @see InstanceProcess#disposeComponentConfigurations(List)
-	 * 
-	 * @param componentConfigurations List of {@link ComponentConfiguration}s
-	 */
-	public void disposeComponentConfigurations(List componentConfigurations) {
-		// unregister, deactivate, and unbind
-		satisfiedComponentConfigurations.removeAll(componentConfigurations);
-		enabledComponentConfigurations.removeAll(componentConfigurations);
-		instanceProcess.disposeComponentConfigurations(componentConfigurations);
-	}
-
-	/**
-	 * Process a service change
-	 * <p>
-	 * A change has happened in the OSGi service environment, or new
-	 * Component Configurations have been added to the system.
-	 * </p>
-	 * Depending on the change, take the following actions:
-	 * <p>
-	 * If new Component Configurations were added (param event is null):
-	 *  <ol>
-	 *     <li>Check for circularity and mark cycles</li>
-	 *     <li>Send newly satisfied Component Configurations to Instance 
-	 *     process</li>
-	 *  </ol>
-	 *  </p>
-	 *  <p>
-	 * If a service was registered:
-	 * <ol>
-	 *    <li>Put "Dynamic Bind" events on the queue for any Component 
-	 *    Configurations which should be bound to the new service</li>
-	 *    <li>Send newly satisfied Component Configurations to Instance 
-	 *    process</li>
-	 * </ol>
-	 * </p>
-	 * <p>
-	 * If a service was modified:
-	 * <ol>
-	 *    <li>Synchronously dispose of all Component Configurations that 
-	 *    become unsatisfied</li>
-	 *    <li>Put "Dynamic Unbind Bind" events on the queue for any remaining 
-	 *    Component Configurations which should be unbound from the service</li>
-	 *    <li>Put "Dynamic Bind" events on the queue for any Component 
-	 *    Configurations which should be bound to the modified service</li>
-	 *    <li>Send newly satisfied Component Configurations to Instance 
-	 *    process</li>
-	 * </ol>
-	 * </p>
-	 * <p>
-	 * If a service was unregistered:
-	 * <ol>
-	 *    <li>Synchronously dispose of all Component Configurations that 
-	 *    become unsatisfied</li>
-	 *    <li>Put "Dynamic Unbind Bind" events on the queue for any remaining 
-	 *    Component Configurations which should be unbound from the service</li>
-	 * </ol>
-	 * </p>
-	 * 
-	 * @param event the service event or null if new component configurations were added to the enabled list
-	 */
-	private void resolve(ServiceEvent event) {
-
-		// if added component configurations
-		if (event == null) {
-			// we added a component configuration, so check for circularity and mark
-			// cycles
-			resolveCycles();
-
-			// get list of newly satisfied component configurations and build them
-			List newlySatisfiedComponentConfigurations = resolveSatisfied();
-			newlySatisfiedComponentConfigurations.removeAll(satisfiedComponentConfigurations);
-
-			if (!newlySatisfiedComponentConfigurations.isEmpty()) {
-				satisfiedComponentConfigurations.addAll(newlySatisfiedComponentConfigurations); // add to satisfiedComponentConfigurations before dispatch
-				workQueue.enqueueWork(this, BUILD, newlySatisfiedComponentConfigurations);
-			}
-
-		}
-		// if service registered
-		else if (event.getType() == ServiceEvent.REGISTERED) {
-
-			// dynamic bind
-			List dynamicBind = selectDynamicBind(event.getServiceReference());
-			if (!dynamicBind.isEmpty()) {
-				workQueue.enqueueWork(this, DYNAMICBIND, dynamicBind);
-			}
-
-			// get list of newly satisfied component configurations and build them
-			List newlySatisfiedComponentConfigurations = resolveSatisfied();
-			newlySatisfiedComponentConfigurations.removeAll(satisfiedComponentConfigurations);
-			if (!newlySatisfiedComponentConfigurations.isEmpty()) {
-				satisfiedComponentConfigurations.addAll(newlySatisfiedComponentConfigurations); // add to satisfiedComponentConfigurations before dispatch
-				workQueue.enqueueWork(this, BUILD, newlySatisfiedComponentConfigurations);
-			}
-
-		}
-		// if service modified
-		else if (event.getType() == ServiceEvent.MODIFIED) {
-
-			// check for newly unsatisfied components and synchronously
-			// dispose them
-			List newlyUnsatisfiedComponentConfigurations = (List) ((ArrayList) satisfiedComponentConfigurations).clone();
-			newlyUnsatisfiedComponentConfigurations.removeAll(resolveSatisfied());
-			if (!newlyUnsatisfiedComponentConfigurations.isEmpty()) {
-				satisfiedComponentConfigurations.removeAll(newlyUnsatisfiedComponentConfigurations);
-
-				instanceProcess.disposeComponentConfigurations(newlyUnsatisfiedComponentConfigurations);
-			}
-
-			// dynamic unbind
-			// check each satisfied component configuration - do we need to unbind
-			Map dynamicUnBind = selectDynamicUnBind(event.getServiceReference());
-			if (!dynamicUnBind.isEmpty()) {
-				instanceProcess.dynamicUnBind(dynamicUnBind);
-			}
-
-			// dynamic bind
-			List dynamicBind = selectDynamicBind(event.getServiceReference());
-			if (!dynamicBind.isEmpty()) {
-				workQueue.enqueueWork(this, DYNAMICBIND, dynamicBind);
-			}
-
-			// get list of newly satisfied component configurations and build them
-			List newlySatisfiedComponentConfigurations = resolveSatisfied();
-			newlySatisfiedComponentConfigurations.removeAll(satisfiedComponentConfigurations);
-			if (!newlySatisfiedComponentConfigurations.isEmpty()) {
-				satisfiedComponentConfigurations.addAll(newlySatisfiedComponentConfigurations); // add to satisfiedComponentConfigurations before dispatch
-				workQueue.enqueueWork(this, BUILD, newlySatisfiedComponentConfigurations);
-			}
-
-		}
-		// if service unregistering
-		else if (event.getType() == ServiceEvent.UNREGISTERING) {
-
-			// check for newly unsatisfied components and
-			// synchronously dispose them
-			List newlyUnsatisfiedComponentConfigurations = (List) ((ArrayList) satisfiedComponentConfigurations).clone();
-			newlyUnsatisfiedComponentConfigurations.removeAll(resolveSatisfied());
-			if (!newlyUnsatisfiedComponentConfigurations.isEmpty()) {
-				satisfiedComponentConfigurations.removeAll(newlyUnsatisfiedComponentConfigurations);
-
-				instanceProcess.disposeComponentConfigurations(newlyUnsatisfiedComponentConfigurations);
-			}
-
-			// dynamic unbind
-			Map dynamicUnBind = selectDynamicUnBind(event.getServiceReference());
-			if (!dynamicUnBind.isEmpty()) {
-				instanceProcess.dynamicUnBind(dynamicUnBind);
-			}
-
-		}
-
-	}
-
-	/**
-	 * Check if a particular component configuration is satisfied. Also checks for circularity. If
-	 * component configuration is satisfied it is added to satisfiedComponentConfigurations list, but not sent to
-	 * instance process
-	 * 
-	 * @param componentConfiguration
-	 * @return
-	 */
-	public boolean justResolve(ComponentConfiguration componentConfiguration) {
-
-		// we added a component configuration, so check for circularity and mark
-		// cycles
-		resolveCycles();
-
-		// get list of newly satisfied component configurations and build them
-		List newlySatisfiedComponentConfigurations = resolveSatisfied();
-		newlySatisfiedComponentConfigurations.removeAll(satisfiedComponentConfigurations);
-
-		if (!newlySatisfiedComponentConfigurations.contains(componentConfiguration)) {
-			return false;
-		}
-		satisfiedComponentConfigurations.add(componentConfiguration);
-		return true;
-
-	}
-
-	/**
-	 * Calculate which of the currently enabled Component Configurations 
-	 * ({@link Resolver#enabledComponentConfigurations}) are "satisfied".  
-	 * 
-	 * <p>
-	 * An "enabled" Component 
-	 * Configuration is "satisfied" if there is at least one OSGi Service
-	 * registered that has the correct interface and matches the target filter 
-	 * for each of it's required (cardinality = "1..1" or "1..n") references.
-	 * </p>
-	 * <p>
-	 * If a Component Configuration will register a service and security is 
-	 * enabled, check if the bundle it comes from has 
-	 * {@link ServicePermission#REGISTER} for that service.  If the Component
-	 * Configuration does not have the necessary permission it is not "satisfied".
-	 * </p>
-	 * @return List of {@link ComponentConfiguration}s that are "satisfied"
-	 */
-	private List resolveSatisfied() {
-		List resolvedSatisfiedComponentConfigurations = new ArrayList();
-
-		Iterator it = enabledComponentConfigurations.iterator();
-		while (it.hasNext()) {
-			ComponentConfiguration componentConfiguration = (ComponentConfiguration) it.next();
-			ComponentDescription cd = componentConfiguration.getComponentDescription();
-
-			// check if all the services needed by the component configuration are available
-			List refs = componentConfiguration.getReferences();
-			Iterator iterator = refs.iterator();
-			boolean hasProviders = true;
-			while (iterator.hasNext()) {
-				Reference reference = (Reference) iterator.next();
-				if (reference != null) {
-					if (reference.getReferenceDescription().isRequired() && !reference.hasProvider(componentConfiguration.getComponentDescription().getBundleContext())) {
-						hasProviders = false;
-						break;
-					}
-				}
-			}
-			if (!hasProviders)
-				continue;
-
-			// check if the bundle providing the service has permission to
-			// register the provided interface(s)
-			// if a service is provided
-			// TODO we can cache the ServicePermission objects
-			if (cd.getService() != null && System.getSecurityManager() != null) {
-				ProvideDescription[] provides = cd.getService().getProvides();
-				Bundle bundle = cd.getBundleContext().getBundle();
-				boolean hasPermission = true;
-				for (int i = 0; i < provides.length; i++) {
-					// make sure bundle has permission to register the service
-					if (!bundle.hasPermission(new ServicePermission(provides[i].getInterfacename(), ServicePermission.REGISTER))) {
-						hasPermission = false;
-						break;
-					}
-				}
-				if (!hasPermission)
-					continue;
-			}
-
-			// we have providers and permission - this component configuration is satisfied
-			resolvedSatisfiedComponentConfigurations.add(componentConfiguration);
-		} // end while (more enabled component configurations)
-		return resolvedSatisfiedComponentConfigurations.isEmpty() ? Collections.EMPTY_LIST : resolvedSatisfiedComponentConfigurations;
-	}
-
-	/**
-	 * Listen for service change events
-	 * 
-	 * @param event
-	 */
-	public void serviceChanged(ServiceEvent event) {
-
-		ServiceReference reference = event.getServiceReference();
-		int eventType = event.getType();
-
-		if (DEBUG) {
-			System.out.println("ServiceChanged: serviceReference = " + reference);
-			System.out.println("ServiceChanged: Event type = " + eventType + " , reference.getBundle() = " + reference.getBundle());
-		}
-
-		// if ((reference.getProperty(ComponentConstants.COMPONENT_ID) == null)
-
-		switch (eventType) {
-			case ServiceEvent.MODIFIED :
-			case ServiceEvent.REGISTERED :
-			case ServiceEvent.UNREGISTERING :
-
-				resolve(event);
-				break;
-		}
-
-	}
-
-	/**
-	 * Called asynchronously by the work queue thread to perform work.
-	 * <p>
-	 * There are two possible work actions:
-	 * <ul>
-	 *    <li>BUILD - workObject is a list of Component Configurations to be
-	 *    sent to the Instance process.  The Component Configurations have become
-	 *    satisfied.  Check that the Component Configurations are still satisfied 
-	 *    (system state may have changed while they were waiting on the work 
-	 *    queue) and send them to the instance process 
-	 *    ({@link InstanceProcess#registerComponentConfigurations(List)}).
-	 *    </li>
-	 *    <li>DYNAMICBIND - workObject is a List of References that need to be 
-	 *    dynamically bound.  Check that the Component Configurations are still 
-	 *    satisfied (system state may have changed while they were waiting on 
-	 *    the work queue) and send them to the instance process 
-	 *    ({@link InstanceProcess#dynamicBind(List)}).
-	 * </ul>
-	 * </p>
-	 * @param workAction {@link Resolver#BUILD} or {@link Resolver#DYNAMICBIND}
-	 * @param workObject a List of {@link ComponentConfiguration}s if workAction
-	 *        is {@link Resolver#BUILD} or a List of {@link Reference}s if workAction 
-	 *        is {@link Resolver#DYNAMICBIND} 
-	 * @see org.eclipse.equinox.ds.workqueue.WorkDispatcher#dispatchWork(int,
-	 *      java.lang.Object)
-	 */
-	public void dispatchWork(int workAction, Object workObject) {
-		Iterator it;
-		switch (workAction) {
-			case BUILD :
-				// only build if component configurations are still satisfied
-				List queueComponentConfigurations = (List) workObject;
-				List componentConfigurations = new ArrayList(queueComponentConfigurations.size());
-				it = queueComponentConfigurations.iterator();
-				while (it.hasNext()) {
-					ComponentConfiguration componentConfiguration = (ComponentConfiguration) it.next();
-					if (this.satisfiedComponentConfigurations.contains(componentConfiguration)) {
-						componentConfigurations.add(componentConfiguration);
-					}
-				}
-				if (!componentConfigurations.isEmpty()) {
-					instanceProcess.registerComponentConfigurations(componentConfigurations);
-				}
-				break;
-			case DYNAMICBIND :
-				// only dynamicBind if component configurations are still satisfied
-				List references = (List) workObject;
-				it = references.iterator();
-				while (it.hasNext()) {
-					if (!this.satisfiedComponentConfigurations.contains(((Reference) it.next()).getComponentConfiguration())) {
-						// modifies underlying list
-						it.remove();
-					}
-				}
-				if (!references.isEmpty()) {
-					instanceProcess.dynamicBind(references);
-				}
-				break;
-		}
-	}
-
-	/**
-	 * Calculate which of the currently satisfied component configurations 
-	 * ({@link Resolver#satisfiedComponentConfigurations}) need to be dynamically bound to an OSGi
-	 * service.
-	 * 
-	 * @param serviceReference the service
-	 * @return a List of {@link Reference}s that need to be dynamically bound 
-	 *         to this service
-	 */
-	private List selectDynamicBind(ServiceReference serviceReference) {
-		List bindList = new ArrayList();
-		Iterator it = satisfiedComponentConfigurations.iterator();
-		while (it.hasNext()) {
-			ComponentConfiguration componentConfiguration = (ComponentConfiguration) it.next();
-			List references = componentConfiguration.getReferences();
-			Iterator refIt = references.iterator();
-			while (refIt.hasNext()) {
-				Reference reference = (Reference) refIt.next();
-				if (reference.dynamicBindReference(serviceReference)) {
-					bindList.add(reference);
-				}
-			}
-		}
-		return bindList;
-	}
-
-	/**
-	 * An OSGi service is unregistering, calculate which of the satisfied 
-	 * Component Configurations need to dynamically unbind from it.
-	 * <p>
-	 *  A Component Configuration needs to dynamically unbind from a service
-	 *  if it was bound to the service and the reference it was policy="dynamic".
-	 *  </p>
-	 * @param serviceReference
-	 * @return a Map of {@link Reference}:{@link ServiceReference} to unbind
-	 */
-	private Map selectDynamicUnBind(ServiceReference serviceReference) {
-
-		Map unbindJobs = new Hashtable();
-
-		Iterator it = satisfiedComponentConfigurations.iterator();
-		while (it.hasNext()) {
-			ComponentConfiguration componentConfiguration = (ComponentConfiguration) it.next();
-			List references = componentConfiguration.getReferences();
-			Iterator it_ = references.iterator();
-			while (it_.hasNext()) {
-				Reference reference = (Reference) it_.next();
-				// Is reference dynamic and bound to this service? - must unbind
-				if (reference.dynamicUnbindReference(serviceReference)) {
-					unbindJobs.put(reference, serviceReference);
-				}
-			}
-		}
-		return unbindJobs.isEmpty() ? Collections.EMPTY_MAP : unbindJobs;
-	}
-
-	/**
-	 * Doubly-linked node used to traverse the dependency tree in order to
-	 * find cycles.
-	 *  
-	 * @version $Revision: 1.3 $
-	 */
-	static private class ReferenceComponentConfiguration {
-		public Reference ref;
-		public ComponentConfiguration producer;
-
-		protected ReferenceComponentConfiguration(Reference ref, ComponentConfiguration producer) {
-			this.ref = ref;
-			this.producer = producer;
-		}
-	}
-
-	/**
-	 * Check through the enabled list for cycles. Cycles can only exist if every
-	 * service is provided by a Service Component (not legacy OSGi). If the cycle 
-	 * has no optional dependencies, log an error and disable a Component 
-	 * Configuration in the cycle. If cycle can be "broken" by an optional 
-	 * dependency, make a note (stored in the 
-	 * {@link ComponentConfiguration#delayActivateComponentConfigurationNames} List).
-	 * 
-	 * @throws CircularityException if cycle exists with no optional
-	 *         dependencies
-	 */
-	private void resolveCycles() {
-
-		try {
-			// find the component configurations that resolve using other component configurations and record their
-			// dependencies
-			Hashtable dependencies = new Hashtable();
-			Iterator it = enabledComponentConfigurations.iterator();
-			while (it.hasNext()) {
-				ComponentConfiguration enabledComponentConfiguration = (ComponentConfiguration) it.next();
-				List dependencyList = new ArrayList();
-				Iterator refIt = enabledComponentConfiguration.getReferences().iterator();
-				while (refIt.hasNext()) {
-					Reference reference = (Reference) refIt.next();
-
-					// see if it resolves to one of the other enabled component configurations
-					ComponentConfiguration providerComponentConfiguration = reference.findProviderComponentConfiguration(enabledComponentConfigurations);
-					if (providerComponentConfiguration != null) {
-						dependencyList.add(new ReferenceComponentConfiguration(reference, providerComponentConfiguration));
-					}
-				} // end while(more references)
-
-				if (!dependencyList.isEmpty()) {
-					// component configuration resolves using some other component configurations, could be a cycle
-					dependencies.put(enabledComponentConfiguration, dependencyList);
-				} else {
-					dependencies.put(enabledComponentConfiguration, Collections.EMPTY_LIST);
-				}
-			} // end while (more enabled component configurations)
-
-			//traverse dependency tree and look for cycles
-			Set visited = new HashSet();
-			it = dependencies.keySet().iterator();
-			while (it.hasNext()) {
-				ComponentConfiguration componentConfiguration = (ComponentConfiguration) it.next();
-				if (!visited.contains(componentConfiguration)) {
-					List currentStack = new ArrayList();
-					traverseDependencies(componentConfiguration, visited, dependencies, currentStack);
-				}
-			}
-		} catch (CircularityException e) {
-			// log the error
-			Log.log(LogService.LOG_ERROR, "[SCR] Circularity Exception.", e);
-
-			// disable offending component configuration
-			enabledComponentConfigurations.remove(e.getCircularDependency());
-
-			// try again
-			resolveCycles();
-		}
-	}
-
-	/**
-	 * Recursively do a depth-first traversal of a dependency tree, looking for 
-	 * cycles.
-	 * <p>
-	 * If a cycle is found, calls 
-	 * {@link Resolver#handleDependencyCycle(ReferenceComponentConfiguration, List)}.
-	 * </p>
-	 * 
-	 * @param componentConfiguration current node in dependency tree
-	 * @param visited Set of {@link ComponentConfiguration} that are visited 
-	 *        nodes
-	 * @param dependencies Dependency tree - a Hashtable of 
-	 * ({@link ComponentConfiguration}):(List of {@link ReferenceComponentConfiguration}s)
-	 * @param currentStack List of {@link ReferenceComponentConfiguration}s - the history of our
-	 *        traversal so far (the path back to the root of the tree)
-	 * @throws CircularityException if an cycle with no optional dependencies is
-	 * found.
-	 */
-	private void traverseDependencies(ComponentConfiguration componentConfiguration, Set visited, Hashtable dependencies, List currentStack) throws CircularityException {
-
-		// the component has already been visited and it's dependencies checked
-		// for cycles
-		if (visited.contains(componentConfiguration)) {
-			return;
-		}
-
-		List refComponentConfigurations = (List) dependencies.get(componentConfiguration);
-		Iterator it = refComponentConfigurations.iterator();
-		// first, add the component configuration's dependencies
-		while (it.hasNext()) {
-
-			ReferenceComponentConfiguration refComponentConfiguration = (ReferenceComponentConfiguration) it.next();
-
-			if (currentStack.contains(refComponentConfiguration)) {
-				// may throw circularity exception
-				handleDependencyCycle(refComponentConfiguration, currentStack);
-				return;
-			}
-			currentStack.add(refComponentConfiguration);
-
-			traverseDependencies(refComponentConfiguration.producer, visited, dependencies, currentStack);
-
-			currentStack.remove(refComponentConfiguration);
-		}
-		// finally write the component configuration
-		visited.add(componentConfiguration);
-
-	}
-
-	/**
-	 * A cycle was detected. component configuration is referenced by the last element in
-	 * currentStack. Throws CircularityException if the cycle does not contain
-	 * an optional dependency, else choses a point at which to
-	 * "break" the cycle (the break point must be immediately after an
-	 * optional dependency) and adds a "cycle note".
-	 * 
-	 * @see ComponentConfiguration#delayActivateComponentConfigurationNames
-	 */
-	private void handleDependencyCycle(ReferenceComponentConfiguration refComponentConfiguration, List currentStack) throws CircularityException {
-		ListIterator cycleIterator = currentStack.listIterator(currentStack.indexOf(refComponentConfiguration));
-
-		// find an optional dependency
-		ReferenceComponentConfiguration optionalRefComponentConfiguration = null;
-		while (cycleIterator.hasNext()) {
-			ReferenceComponentConfiguration cycleRefComponentConfiguration = (ReferenceComponentConfiguration) cycleIterator.next();
-			if (!cycleRefComponentConfiguration.ref.getReferenceDescription().isRequired()) {
-				optionalRefComponentConfiguration = cycleRefComponentConfiguration;
-				break;
-			}
-		}
-
-		if (optionalRefComponentConfiguration == null) {
-			// no optional dependency
-			throw new CircularityException(refComponentConfiguration.ref.getComponentConfiguration());
-		}
-
-		// add note not to initiate activation of next dependency
-		optionalRefComponentConfiguration.ref.getComponentConfiguration().setDelayActivateComponentConfigurationName(optionalRefComponentConfiguration.producer.getComponentDescription().getName());
-	}
-
-	/**
-	 * Method to return the next available component id.
-	 * 
-	 * @return next component id.
-	 */
-	private long getNextComponentId() {
-		synchronized (this) {
-			return componentid++;
-		}
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/service/ComponentContextImpl.java b/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/service/ComponentContextImpl.java
deleted file mode 100644
index 42dc3d7..0000000
--- a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/service/ComponentContextImpl.java
+++ /dev/null
@@ -1,365 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.ds.service;
-
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.util.*;
-import org.eclipse.equinox.ds.Activator;
-import org.eclipse.equinox.ds.model.ComponentDescription;
-import org.eclipse.equinox.ds.model.ComponentConfiguration;
-import org.eclipse.equinox.ds.resolver.Reference;
-import org.osgi.framework.*;
-import org.osgi.service.component.*;
-
-/**
- * A ComponentContext object is used by a Service Component to interact with it's
- * execution context including locating services by reference name.
- * 
- * <p>
- * A component's implementation class may optionally implement an activate
- * method:
- * 
- * <pre>
- * protected void activate(ComponentContext context);
- * </pre>
- * 
- * If a component implements this method, this method will be called when the
- * component is activated to provide the component's ComponentContext object.
- * 
- * <p>
- * A component's implementation class may optionally implement a deactivate
- * method:
- * 
- * <pre>
- * protected void deactivate(ComponentContext context);
- * </pre>
- * 
- * If a component implements this method, this method will be called when the
- * component is deactivated.
- * 
- * <p>
- * The activate and deactivate methods will be called using reflection and must
- * be at least protected accessible. These methods do not need to be public
- * methods so that they do not appear as public methods on the component's
- * provided service object. The methods will be located by looking through the
- * component's implementation class hierarchy for the first declaration of the
- * method. If the method is declared protected or public, the method will
- * called.
- * 
- * @version $Revision: 1.1 $
- */
-public class ComponentContextImpl implements ComponentContext {
-
-	/** The BundleContext of the Bundle that contains the Service Component
-	 * this ComponentContextImpl is associated with */
-	BundleContext bundleContext;
-
-	/**
-	 *  Component Configuraiton instance
-	 */
-	private ComponentInstanceImpl componentInstance;
-
-	/**
-	 * Component Configuration
-	 */
-	private ComponentConfiguration componentConfiguration;
-
-	Activator main;
-
-	/**
-	 * If the {@link ComponentContextImpl#componentInstance} was created for a 
-	 * {@link org.osgi.framework.ServiceFactory#getService(org.osgi.framework.Bundle, org.osgi.framework.ServiceRegistration) ServiceFactory.getService(...)}
-	 * call, this is the bundle that is "using" this Component instance.
-	 * Else null.
-	 */
-	private Bundle usingBundle;
-
-	/**
-	 * Construct a ComponentContext object
-	 *
-	 * @param main
-	 * @param usingBundle See {@link ComponentContextImpl#usingBundle}
-	 * @param componentInstance
-	 */
-	public ComponentContextImpl(Activator main, Bundle usingBundle, ComponentInstanceImpl componentInstance) {
-		this.componentConfiguration = componentInstance.getComponentConfiguration();
-		this.componentInstance = componentInstance;
-		this.bundleContext = componentConfiguration.getComponentDescription().getBundleContext();
-		this.usingBundle = usingBundle;
-		this.main = main;
-	}
-
-	/**
-	 * Returns the component properties for this ComponentContext.
-	 * 
-	 * @return The properties for this ComponentContext. The properties are read
-	 *         only and cannot be modified.
-	 */
-	public Dictionary getProperties() {
-		return (Dictionary) componentConfiguration.getProperties().clone();
-	}
-
-	/**
-	 * Returns the service object for the specified service reference name.
-	 * 
-	 * @param name The name of a service 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 matching service is available.
-	 * @throws ComponentException If the Service Component Runtime catches an
-	 *         exception while getting the target service.
-	 */
-	public Object locateService(String name) throws ComponentException {
-
-		try {
-			// find the Reference Description with the specified name
-			Iterator references = componentConfiguration.getReferences().iterator();
-			Reference thisReference = null;
-			while (references.hasNext()) {
-				Reference reference = (Reference) references.next();
-				if (reference.getReferenceDescription().getName().equals(name)) {
-					thisReference = reference;
-					break;
-				}
-			}
-
-			if (thisReference != null) {
-				ServiceReference serviceReference = null;
-				// check to see if this reference is already bound
-				if (!thisReference.getServiceReferences().isEmpty()) {
-					// if possible, return reference we are already bound to
-					serviceReference = (ServiceReference) thisReference.getServiceReferences().iterator().next();
-				} else {
-					ServiceReference[] serviceReferences = bundleContext.getServiceReferences(thisReference.getReferenceDescription().getInterfacename(), thisReference.getTarget());
-					if (serviceReferences != null && serviceReferences.length > 0) {
-
-						// sort by service ranking and service id
-						Arrays.sort(serviceReferences);
-
-						serviceReference = serviceReferences[0];
-					}
-
-				}
-				if (serviceReference != null) {
-					Object serviceObject = main.resolver.instanceProcess.buildDispose.getService(thisReference, serviceReference);
-					thisReference.addServiceReference(serviceReference, serviceObject);
-					return serviceObject;
-				}
-			}
-
-			return null;
-
-		} catch (Exception e) {
-			throw new ComponentException(e);
-		}
-
-	}
-
-	/**
-	 * Returns the service object for the specified reference name and
-	 * <code>ServiceReference</code>.
-	 * 
-	 * @param name The name of a reference as specified in a
-	 *        <code>reference</code> element in this component's description.
-	 * @param serviceReference The <code>ServiceReference</code> to a specific bound
-	 *        service. This must be a <code>ServiceReference</code> 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
-	 *         service for the specified reference name.
-	 * @throws ComponentException If the Service Component Runtime catches an
-	 *         exception while getting the service.
-	 */
-	public Object locateService(String name, ServiceReference serviceReference) throws ComponentException {
-		try {
-			// find the Reference Description with the specified name
-			Iterator references = componentConfiguration.getReferences().iterator();
-			Reference thisReference = null;
-			while (references.hasNext()) {
-				Reference reference = (Reference) references.next();
-				if (reference.getReferenceDescription().getName().equals(name)) {
-					thisReference = reference;
-					break;
-				}
-			}
-
-			if (thisReference != null) {
-				Object serviceObject = main.resolver.instanceProcess.buildDispose.getService(thisReference, serviceReference);
-				thisReference.addServiceReference(serviceReference, serviceObject);
-				return serviceObject;
-			}
-
-			return null;
-
-		} catch (ComponentException e) {
-			throw e;
-		}
-	}
-
-	/**
-	 * Returns the service objects for the specified service reference name.
-	 * 
-	 * @param name The name of a service reference as specified in a
-	 *        <code>reference</code> 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 matching
-	 *         service is available.
-	 * @throws ComponentException If the Service Component Runtime catches an
-	 *         exception while activating a target service.
-	 */
-	public Object[] locateServices(String name) throws ComponentException {
-		try {
-			// find the Reference Description with the specified name
-			Iterator references = componentConfiguration.getReferences().iterator();
-			Reference thisReference = null;
-			while (references.hasNext()) {
-				Reference reference = (Reference) references.next();
-				if (reference.getReferenceDescription().getName().equals(name)) {
-					thisReference = reference;
-					break;
-				}
-			}
-
-			if (thisReference != null) {
-				ServiceReference[] serviceReferences = bundleContext.getServiceReferences(thisReference.getReferenceDescription().getInterfacename(), thisReference.getTarget());
-
-				if (serviceReferences != null) {
-					// sort by service ranking and service id
-					Arrays.sort(serviceReferences);
-
-					List serviceObjects = new ArrayList(serviceReferences.length);
-					for (int counter = 0; counter < serviceReferences.length; counter++) {
-						Object serviceObject = main.resolver.instanceProcess.buildDispose.getService(thisReference, serviceReferences[counter]);
-						if (serviceObject != null) {
-							serviceObjects.add(serviceObject);
-							thisReference.addServiceReference(serviceReferences[counter], serviceObject);
-						}
-					} // end for serviceReferences
-					if (!serviceObjects.isEmpty()) {
-						return serviceObjects.toArray();
-					}
-				}
-			}
-			return null;
-
-		} catch (InvalidSyntaxException e) {
-			throw new ComponentException(e.getMessage());
-		}
-	}
-
-	/**
-	 * Returns the BundleContext of the bundle which contains this component.
-	 * 
-	 * @return The BundleContext of the bundle containing this component.
-	 */
-	public BundleContext getBundleContext() {
-		return bundleContext;
-	}
-
-	/**
-	 * If the component is registered as a service using the
-	 * <code>servicefactory=&quot;true&quot;</code> attribute, then this
-	 * method returns the bundle using the service provided by this component.
-	 * <p>
-	 * This method will return <code>null</code> if the component is:
-	 * <ul>
-	 * <li>Not a service, then no bundle can be using it as a service.
-	 * <li>Is a service but did not specify the
-	 * <code>servicefactory=&quot;true&quot;</code> attribute, then all
-	 * bundles will use this component.
-	 * <li>Was created because it specified the immediate=true attribute.
-	 * </ul>
-	 * 
-	 * @return The bundle using this component as a service or <code>null</code>.
-	 */
-
-	public Bundle getUsingBundle() {
-		ComponentDescription cd = componentConfiguration.getComponentDescription();
-		if ((cd.getService() == null) || (!cd.getService().isServicefactory())) {
-			return null;
-		}
-		return usingBundle;
-	}
-
-	/**
-	 * Returns this Component Configuration instance.
-	 * 
-	 * @return The ComponentInstance object for this ComponentConfiguration.
-	 */
-	public ComponentInstance getComponentInstance() {
-		return componentInstance;
-	}
-
-	/**
-	 * 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 components in the bundle.
-	 */
-	public void enableComponent(String name) {
-		final String componentName = name;
-
-		AccessController.doPrivileged(new PrivilegedAction() {
-			public Object run() {
-				main.enableComponent(componentName, bundleContext.getBundle());
-				return null;
-			}
-		});
-
-	}
-
-	/**
-	 * Disables the specified component name. The specified component name must
-	 * be in the same bundle as this component.
-	 * 
-	 * @param name The name of a component.
-	 */
-	public void disableComponent(String name) {
-
-		final String componentName = name;
-
-		AccessController.doPrivileged(new PrivilegedAction() {
-			public Object run() {
-				main.disableComponent(componentName, bundleContext.getBundle());
-				return null; // nothing to return
-			}
-		});
-	}
-
-	/**
-	 * If this Service Component specified the
-	 * <code>service</code> element, then this method returns the service
-	 * reference of the service provided by this Component Configuration.
-	 * <p>
-	 * This method will return <code>null</code> if this Component Configuration
-	 * is not registered as a service.
-	 * 
-	 * @return The <code>ServiceReference</code> object for this component or
-	 *         <code>null</code> if this component is not registered as a
-	 *         service.
-	 */
-	public ServiceReference getServiceReference() {
-		ServiceReference serviceReference = null;
-		if (componentConfiguration.getComponentDescription().getService() != null) {
-			ServiceRegistration serviceRegistration = componentConfiguration.getServiceRegistration();
-			if (serviceRegistration != null) {
-				serviceReference = serviceRegistration.getReference();
-			}
-		}
-		return serviceReference;
-	}
-
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/service/ComponentFactoryImpl.java b/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/service/ComponentFactoryImpl.java
deleted file mode 100644
index 919db5e..0000000
--- a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/service/ComponentFactoryImpl.java
+++ /dev/null
@@ -1,89 +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.ds.service;
-
-import java.util.*;
-import org.eclipse.equinox.ds.Activator;
-import org.eclipse.equinox.ds.model.ComponentConfiguration;
-import org.osgi.service.component.*;
-
-/**
- * When a Service Component is declared with the <code>factory</code> attribute 
- * on its <code>component</code> element, the Service Component Runtime will 
- * register a ComponentFactory service to allow new component configurations 
- * to be created and activated.
- * 
- * @version $Revision: 1.4 $
- */
-public class ComponentFactoryImpl implements ComponentFactory {
-
-	private ComponentConfiguration componentConfiguration;
-	private Activator main;
-
-	/**
-	 * ComponentFactoryImpl
-	 * 
-	 * @param context the SC bundle context
-	 * @param componentDescriptionProp the ComponentDescription Object with
-	 *        Properties
-	 * @param buildDispose
-	 */
-	public ComponentFactoryImpl(ComponentConfiguration componentConfiguration, Activator main) {
-		this.componentConfiguration = componentConfiguration;
-		this.main = main;
-	}
-
-	/**
-	 * Create and activate a new component configuration. Additional properties
-	 * may be provided for the component configuration.
-	 * 
-	 * @param newProperties Additional properties for the component configuration.
-	 * @return A ComponentInstance object encapsulating an instance of the 
-	 *         component configuration. The returned Component Configuration 
-	 *         instance has been activated and, if the Service Component 
-	 *         specifies a <code>service</code> element, the Component 
-	 *         Configuration has been registered as a service.
-	 * @throws ComponentException If the Service Component Runtime is unable to
-	 *         activate the Component Configuration instance.
-	 */
-	public ComponentInstance newInstance(Dictionary newProperties) {
-
-		// merge properties
-		Hashtable properties = componentConfiguration.getProperties();
-		if (newProperties != null) {
-			properties = (Hashtable) properties.clone();
-			Enumeration propsEnum = newProperties.keys();
-			while (propsEnum.hasMoreElements()) {
-				Object key = propsEnum.nextElement();
-				properties.put(key, newProperties.get(key));
-			}
-		}
-
-		// create a new componentConfiguration (adds to resolver enabledComponentConfigurations list)
-		ComponentConfiguration newComponentConfiguration = main.resolver.mapFactoryInstance(componentConfiguration.getComponentDescription(), properties);
-
-		// try to resolve new componentConfiguration - adds to resolver's satisfied list
-		if (!main.resolver.justResolve(newComponentConfiguration)) {
-			main.resolver.enabledComponentConfigurations.remove(newComponentConfiguration); // was added by
-			// mapFactoryInstance
-			throw new ComponentException("Could not resolve instance of " + componentConfiguration + " with properties " + properties);
-		}
-
-		// if new componentConfiguration resolves, send it to instance process (will register
-		// service
-		// if it has one)
-		main.resolver.instanceProcess.registerComponentConfigurations(Collections.singletonList(newComponentConfiguration));
-
-		// Instance process will have created an instance
-		
-		return (ComponentInstance) newComponentConfiguration.getInstances().get(0);
-	}
-}
diff --git a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/service/ComponentInstanceImpl.java b/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/service/ComponentInstanceImpl.java
deleted file mode 100644
index 5f9ca4a..0000000
--- a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/service/ComponentInstanceImpl.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.ds.service;
-
-import java.util.Collections;
-import org.eclipse.equinox.ds.Activator;
-import org.eclipse.equinox.ds.model.ComponentConfiguration;
-import org.osgi.service.component.ComponentContext;
-import org.osgi.service.component.ComponentInstance;
-
-/**
- * A ComponentInstance encapsulates an instance of a component.
- * ComponentInstances are created whenever an instance of a component is
- * created.
- * 
- * @version $Revision: 1.1 $
- */
-public class ComponentInstanceImpl implements ComponentInstance {
-
-	private Object instance;
-	private Activator main;
-	private ComponentConfiguration componentConfiguration;
-	private ComponentContext componentContext;
-
-	/**
-	 * ComponentInstanceImpl
-	 * 
-	 * @param Object instance
-	 * 
-	 */
-	public ComponentInstanceImpl(Activator main, ComponentConfiguration componentConfiguration, Object instance) {
-		this.main = main;
-		this.instance = instance;
-		this.componentConfiguration = componentConfiguration;
-
-	}
-
-	public void setComponentContext(ComponentContext context) {
-		this.componentContext = context;
-	}
-
-	public ComponentContext getComponentContext() {
-		return componentContext;
-	}
-
-	/**
-	 * Dispose of this component instance. The instance will be deactivated. If
-	 * the instance has already been deactivated, this method does nothing.
-	 */
-	public void dispose() {
-		// deactivate
-		if (!componentConfiguration.isComponentFactory() && componentConfiguration.getComponentDescription().getFactory() != null) {
-			// this is a factory instance, so dispose of component configuration
-			componentConfiguration.getComponentDescription().removeComponentConfiguration(componentConfiguration);
-			main.resolver.disposeComponentConfigurations(Collections.singletonList(componentConfiguration));
-			componentConfiguration = null;
-		} else {
-			main.resolver.instanceProcess.buildDispose.disposeComponentInstance(this);
-			componentConfiguration.removeInstance(this);
-		}
-		instance = null;
-	}
-
-	/**
-	 * Returns the component instance. The instance has been activated.
-	 * 
-	 * @return The component instance or <code>null</code> if the instance has
-	 *         been deactivated.
-	 */
-	public Object getInstance() {
-		return instance;
-	}
-
-	public ComponentConfiguration getComponentConfiguration() {
-		return componentConfiguration;
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/tracker/BundleTracker.java b/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/tracker/BundleTracker.java
deleted file mode 100644
index dd85ce7..0000000
--- a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/tracker/BundleTracker.java
+++ /dev/null
@@ -1,376 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.ds.tracker;
-
-import java.util.*;
-import org.osgi.framework.*;
-
-/**
- * 
- * TODO Add Javadoc comment for this type.
- * 
- * @version $Revision: 1.2 $
- */
-public class BundleTracker implements BundleTrackerCustomizer {
-	/* set this to true to compile in debug messages */
-	private static final boolean DEBUG = false;
-
-	/**
-	 * Bundle context this <tt>BundleTracker</tt> object is tracking against.
-	 */
-	private final BundleContext context;
-
-	/**
-	 * <tt>BundleTrackerCustomizer</tt> object for this tracker.
-	 */
-	final BundleTrackerCustomizer customizer;
-
-	/**
-	 * Tracked bundles: <tt>Bundle</tt> object -> customized Object and
-	 * <tt>BundleListener</tt> object
-	 */
-	private Tracked tracked;
-
-	/**
-	 * Modification count. This field is initialized to zero by open, set to -1
-	 * by close and incremented by modified. This field is volatile since it is
-	 * accessed by multiple threads.
-	 */
-	private volatile int trackingCount = -1;
-
-	final int mask;
-
-	public BundleTracker(BundleContext context, int stateMask, BundleTrackerCustomizer customizer) {
-		this.context = context;
-		this.mask = stateMask;
-		this.customizer = (customizer == null) ? this : customizer;
-	}
-
-	public synchronized void open() {
-		if (tracked != null) {
-			return;
-		}
-		if (DEBUG) {
-			System.out.println("BundleTracker.open"); //$NON-NLS-1$
-		}
-		tracked = new Tracked();
-		trackingCount = 0;
-		Bundle[] bundles;
-		synchronized (tracked) {
-			context.addBundleListener(tracked);
-			bundles = context.getBundles();
-		}
-		/* Call tracked outside of synchronized region */
-		if (bundles != null) {
-			int length = bundles.length;
-			for (int i = 0; i < length; i++) {
-				Bundle bundle = bundles[i];
-				int state = bundle.getState();
-				if ((state & mask) != 0) {
-					tracked.track(bundle);
-				}
-			}
-		}
-	}
-
-	public synchronized void close() {
-		if (tracked == null) {
-			return;
-		}
-		if (DEBUG) {
-			System.out.println("BundleTracker.close"); //$NON-NLS-1$
-		}
-		tracked.close();
-		Bundle[] bundles = getBundles();
-		Tracked outgoing = tracked;
-		tracked = null;
-		try {
-			context.removeBundleListener(outgoing);
-		} catch (IllegalStateException e) {
-			/* In case the context was stopped. */
-		}
-		if (bundles != null) {
-			for (int i = 0; i < bundles.length; i++) {
-				outgoing.untrack(bundles[i]);
-			}
-		}
-		trackingCount = -1;
-	}
-
-	/**
-	 * @param bundle
-	 * @return bundle
-	 * @see org.eclipse.equinox.ds.tracker.BundleTrackerCustomizer#addingBundle(org.osgi.framework.Bundle)
-	 */
-	public Object addingBundle(Bundle bundle) {
-		return bundle;
-	}
-
-	/**
-	 * @param bundle
-	 * @param object
-	 * @see org.eclipse.equinox.ds.tracker.BundleTrackerCustomizer#modifiedBundle(org.osgi.framework.Bundle,
-	 *      java.lang.Object)
-	 */
-	public void modifiedBundle(Bundle bundle, Object object) {
-	}
-
-	/**
-	 * @param bundle
-	 * @param object
-	 * @see org.eclipse.equinox.ds.tracker.BundleTrackerCustomizer#removedBundle(org.osgi.framework.Bundle,
-	 *      java.lang.Object)
-	 */
-	public void removedBundle(Bundle bundle, Object object) {
-	}
-
-	/**
-	 * Called by the Tracked object whenever the set of tracked bundles is
-	 * modified. Increments the tracking count.
-	 */
-	void modified() {
-		trackingCount++; /* increment modification count */
-		if (DEBUG) {
-			System.out.println("BundleTracker.modified"); //$NON-NLS-1$
-		}
-	}
-
-	/**
-	 * Return an array of <tt>Bundle</tt> objects for all bundles being
-	 * tracked by this <tt>BundleTracker</tt> object.
-	 * 
-	 * @return Array of <tt>Bundle</tt> objects or <tt>null</tt> if no
-	 *         bundles are being tracked.
-	 */
-	private Bundle[] getBundles() {
-		Tracked s_tracked = this.tracked; /*
-		 * use local var since we are not
-		 * synchronized
-		 */
-		if (s_tracked == null) /* if BundleTracker is not open */
-		{
-			return null;
-		}
-		synchronized (s_tracked) {
-			int length = s_tracked.size();
-			if (length == 0) {
-				return null;
-			}
-			Bundle[] bundles = new Bundle[length];
-			Enumeration keys = s_tracked.keys();
-			for (int i = 0; i < length; i++) {
-				bundles[i] = (Bundle) keys.nextElement();
-			}
-			return bundles;
-		}
-	}
-
-	/**
-	 * Inner class to track bundles. If a <tt>BundleTracker</tt> object is
-	 * reused (closed then reopened), then a new Tracked object is used. This
-	 * class is a hashtable mapping <tt>Bundle</tt> object -> customized
-	 * Object. This class is the <tt>BundleListener</tt> object for the
-	 * tracker. This class is used to synchronize access to the tracked bundles.
-	 * This is not a public class. It is only for use by the implementation of
-	 * the <tt>BundleTracker</tt> class.
-	 * 
-	 */
-	class Tracked extends Hashtable implements SynchronousBundleListener {
-		/**
-		 * Eclipse-generated <code>serialVersionUID</code>
-		 */
-		private static final long serialVersionUID = -4232285292477873203L;
-
-		/**
-		 * List of Bundles in the process of being added.
-		 */
-		private List adding;
-		/**
-		 * true if the tracked object is closed. This field is volatile because
-		 * it is set by one thread and read by another.
-		 */
-		private volatile boolean closed;
-
-		/**
-		 * Tracked constructor.
-		 */
-		protected Tracked() {
-			super();
-			closed = false;
-			adding = new ArrayList(6);
-		}
-
-		/**
-		 * Called by the owning <tt>BundleTracker</tt> object when it is
-		 * closed.
-		 */
-		protected void close() {
-			closed = true;
-		}
-
-		/**
-		 * <tt>SynchronousBundleListener</tt> method for the
-		 * <tt>BundleTracker</tt> class. This method must NOT be synchronized
-		 * to avoid deadlock potential.
-		 * 
-		 * @param event <tt>BundleEvent</tt> object from the framework.
-		 */
-		public void bundleChanged(BundleEvent event) {
-			/*
-			 * Check if we had a delayed call (which could happen when we
-			 * close).
-			 */
-			if (closed) {
-				return;
-			}
-			Bundle bundle = event.getBundle();
-			int state = bundle.getState();
-			if ((state & mask) != 0) {
-				track(bundle);
-				/*
-				 * If the customizer throws an unchecked exception, it is safe
-				 * to let it propagate
-				 */
-			} else {
-				untrack(bundle);
-				/*
-				 * If the customizer throws an unchecked exception, it is safe
-				 * to let it propagate
-				 */
-			}
-		}
-
-		/**
-		 * Begin to track the referenced bundle.
-		 * 
-		 * @param bundle Bundle to be tracked.
-		 */
-		protected void track(Bundle bundle) {
-			Object object;
-			synchronized (this) {
-				object = this.get(bundle);
-			}
-			if (object != null) /* we are already tracking the bundle */
-			{
-				if (DEBUG) {
-					System.out.println("BundleTracker.Tracked.track[modified]: " + bundle); //$NON-NLS-1$
-				}
-				/* Call customizer outside of synchronized region */
-				customizer.modifiedBundle(bundle, object);
-				/*
-				 * If the customizer throws an unchecked exception, it is safe
-				 * to let it propagate
-				 */
-
-				return;
-			}
-			synchronized (this) {
-				if (adding.contains(bundle)) /*
-				 * if this bundle is already in
-				 * the process of being added.
-				 */
-				{
-					if (DEBUG) {
-						System.out.println("BundleTracker.Tracked.track[already adding]: " + bundle); //$NON-NLS-1$
-					}
-					return;
-				}
-				adding.add(bundle); /* mark this bundle is being added */
-			}
-			if (DEBUG) {
-				System.out.println("BundleTracker.Tracked.track[adding]: " + bundle); //$NON-NLS-1$
-			}
-			boolean becameUntracked = false;
-			/* Call customizer outside of synchronized region */
-			try {
-				object = customizer.addingBundle(bundle);
-				/*
-				 * If the customizer throws an unchecked exception, it will
-				 * propagate after the finally
-				 */
-			} finally {
-				synchronized (this) {
-					if (adding.remove(bundle)) /*
-					 * if the bundle was not
-					 * untracked during the
-					 * customizer callback
-					 */
-					{
-						if (object != null) {
-							this.put(bundle, object);
-							modified(); /* increment modification count */
-							notifyAll();
-						}
-					} else {
-						becameUntracked = true;
-					}
-				}
-			}
-			/*
-			 * The bundle became untracked during the customizer callback.
-			 */
-			if (becameUntracked) {
-				if (DEBUG) {
-					System.out.println("BundleTracker.Tracked.track[removed]: " + bundle); //$NON-NLS-1$
-				}
-				/* Call customizer outside of synchronized region */
-				customizer.removedBundle(bundle, object);
-				/*
-				 * If the customizer throws an unchecked exception, it is safe
-				 * to let it propagate
-				 */
-			}
-		}
-
-		/**
-		 * Discontinue tracking the bundle.
-		 * 
-		 * @param bundle Bundle to be untracked.
-		 */
-		protected void untrack(Bundle bundle) {
-			Object object;
-			synchronized (this) {
-				if (adding.remove(bundle)) /*
-				 * if the bundle is in the process
-				 * of being added
-				 */
-				{
-					if (DEBUG) {
-						System.out.println("BundleTracker.Tracked.untrack[being added]: " + bundle); //$NON-NLS-1$
-					}
-					return; /*
-					 * in case the bundle is untracked while in the
-					 * process of adding
-					 */
-				}
-				object = this.remove(bundle); /*
-				 * must remove from tracker
-				 * before calling customizer
-				 * callback
-				 */
-				if (object == null) /* are we actually tracking the bundle */
-				{
-					return;
-				}
-				modified(); /* increment modification count */
-			}
-			if (DEBUG) {
-				System.out.println("BundleTracker.Tracked.untrack[removed]: " + bundle); //$NON-NLS-1$
-			}
-			/* Call customizer outside of synchronized region */
-			customizer.removedBundle(bundle, object);
-			/*
-			 * If the customizer throws an unchecked exception, it is safe to
-			 * let it propagate
-			 */
-		}
-	}
-}
diff --git a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/tracker/BundleTrackerCustomizer.java b/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/tracker/BundleTrackerCustomizer.java
deleted file mode 100644
index b78f25e..0000000
--- a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/tracker/BundleTrackerCustomizer.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.ds.tracker;
-
-import org.osgi.framework.Bundle;
-
-/**
- * The <tt>BundleTrackerCustomizer</tt> interface allows a
- * <tt>BundleTracker</tt> object to customize the bundle objects that are
- * tracked. The <tt>BundleTrackerCustomizer</tt> object is called when a
- * bundle is being added to the <tt>BundleTracker</tt> object. The
- * <tt>BundleTrackerCustomizer</tt> can then return an object for the tracked
- * bundle. The <tt>BundleTrackerCustomizer</tt> object is also called when a
- * tracked bundle has been removed from the <tt>BundleTracker</tt> object.
- * 
- * <p>
- * The methods in this interface may be called as the result of a
- * <tt>BundleEvent</tt> being received by a <tt>BundleTracker</tt> object.
- * Since <tt>BundleEvent</tt> s are synchronously received by the
- * <tt>BundleTracker</tt>, it is highly recommended that implementations of
- * these methods do not alter bundle states while being synchronized on any
- * object.
- * 
- * @version $Revision: 1.2 $
- */
-public interface BundleTrackerCustomizer {
-	/**
-	 * A bundle is being added to the <tt>BundleTracker</tt> object.
-	 * 
-	 * <p>
-	 * This method is called before a bundle which matched the search parameters
-	 * of the <tt>BundleTracker</tt> object is added to it. This method should
-	 * return the object to be tracked for this <tt>Bundle</tt> object. The
-	 * returned object is stored in the <tt>BundleTracker</tt> object and is
-	 * available from the <tt>getObject</tt> and <tt>getObjects</tt>
-	 * methods.
-	 * 
-	 * @param bundle Bundle being added to the <tt>BundleTracker</tt> object.
-	 * @return The object to be tracked for the <tt>Bundle</tt> object or
-	 *         <tt>null</tt> if the <tt>Bundle</tt> object should not be
-	 *         tracked.
-	 */
-	public abstract Object addingBundle(Bundle bundle);
-
-	/**
-	 * A bundle tracked by the <tt>BundleTracker</tt> object has been
-	 * modified.
-	 * 
-	 * <p>
-	 * This method is called when a bundle being tracked by the
-	 * <tt>BundleTracker</tt> object has had its state modified.
-	 * 
-	 * @param bundle Bundle whose state has been modified.
-	 * @param object The object for the modified bundle.
-	 */
-	public abstract void modifiedBundle(Bundle bundle, Object object);
-
-	/**
-	 * A bundle tracked by the <tt>BundleTracker</tt> object has been removed.
-	 * 
-	 * <p>
-	 * This method is called after a bundle is no longer being tracked by the
-	 * <tt>BundleTracker</tt> object.
-	 * 
-	 * @param bundle Bundle that has been removed.
-	 * @param object The object for the removed bundle.
-	 */
-	public abstract void removedBundle(Bundle bundle, Object object);
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/workqueue/WorkDispatcher.java b/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/workqueue/WorkDispatcher.java
deleted file mode 100644
index b22b5a8..0000000
--- a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/workqueue/WorkDispatcher.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 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
- *******************************************************************************/
-
-package org.eclipse.equinox.ds.workqueue;
-
-/**
- * The WorkDispatcher interface contains the method that is called by the
- * WorkQueue to dispatch work.
- */
-
-public interface WorkDispatcher {
-	/**
-	 * This method is called once for each work item. This method can then
-	 * complete processing work on the work queue thread.
-	 * 
-	 * <p>
-	 * The WorkQueue will ignore any Throwable thrown by this method in order to
-	 * continue dispatch of the next work item.
-	 * 
-	 * @param workAction Work action value passed from the work enqueuer.
-	 * @param workObject Work object passed from the work enqueuer.
-	 */
-	public void dispatchWork(int workAction, Object workObject);
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/workqueue/WorkQueue.java b/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/workqueue/WorkQueue.java
deleted file mode 100644
index 3cfbc37..0000000
--- a/bundles/org.eclipse.equinox.ds/src/org/eclipse/equinox/ds/workqueue/WorkQueue.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 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
- *******************************************************************************/
-
-
-package org.eclipse.equinox.ds.workqueue;
-
-import org.eclipse.equinox.ds.Log;
-
-/**
- * This class is used for asynchronously dispatching work items.
- */
-
-public class WorkQueue extends Thread {
-	private static final boolean DEBUG = false;
-
-	/**
-	 * Queued is a nested class. This class represents the items which are
-	 * placed on the asynch dispatch queue. This class is private.
-	 */
-	static private class Queued {
-		/** dispatcher of this item */
-		private final WorkDispatcher dispatcher;
-		/** action for this item */
-		private final int action;
-		/** object for this item */
-		private final Object object;
-		/** next item in work queue */
-		Queued next;
-
-		/**
-		 * Constructor for work queue item
-		 * 
-		 * @param d Dispatcher for this item
-		 * @param a Action for this item
-		 * @param o Object for this item
-		 */
-		Queued(WorkDispatcher d, int a, Object o) {
-			dispatcher = d;
-			action = a;
-			object = o;
-			next = null;
-		}
-
-		void dispatch() {
-			try {
-				/*
-				 * Call the WorkDispatcher to dispatch the work.
-				 */
-				dispatcher.dispatchWork(action, object);
-			} catch (Throwable t) {
-				t.printStackTrace();
-				Log.log(1, "[SCR] Error dispatching work ", t);
-			}
-		}
-	}
-
-	/** item at the head of the work queue */
-	private Queued head;
-	/** item at the tail of the work queue */
-	private Queued tail;
-	/** if true the thread should complete it's work and terminate */
-	private volatile boolean stopping;
-
-	/**
-	 * Constructor for the work queue thread.
-	 * 
-	 * @param threadName Name of the WorkQueue
-	 */
-	public WorkQueue(String threadName) {
-		super(threadName);
-		stopping = false;
-		head = null;
-		tail = null;
-	}
-
-	/**
-	 * Finish all work and stop thread.
-	 */
-	public void closeAndJoin() {
-		stopping = true;
-		interrupt();
-		try {
-			join(); // wait for work to finish
-		} catch (InterruptedException e) {
-			e.printStackTrace();
-		}
-	}
-
-	/**
-	 * This method pulls items from the work queue and dispatches them.
-	 */
-	public void run() {
-		try {
-			while (true) {
-				Queued item = dequeueWork();
-				if (item == null) {
-					return;
-				}
-
-				item.dispatch();
-			}
-		} catch (RuntimeException e) {
-			if (DEBUG) {
-				e.printStackTrace(System.err);
-			}
-			throw e;
-		} catch (Error e) {
-			if (DEBUG) {
-				e.printStackTrace(System.err);
-			}
-			throw e;
-		}
-	}
-
-	/**
-	 * This methods takes the input parameters and creates a Queued object and
-	 * queues it. The thread is notified.
-	 * 
-	 * @param d Dispatcher for this item
-	 * @param a Action for this item
-	 * @param o Object for this item
-	 */
-	public synchronized void enqueueWork(WorkDispatcher d, int a, Object o) {
-		if (!isAlive()) { /* If the thread is not alive, throw an exception */
-			throw new IllegalStateException("work thread is not alive");
-		}
-
-		Queued item = new Queued(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 dequeueWork() {
-		while ((!stopping) && (head == null)) {
-			try {
-				wait();
-			} catch (InterruptedException e) {
-			}
-		}
-
-		if (stopping && head == null) { /* if we are stopping */
-			return null;
-		}
-
-		Queued item = head;
-		head = item.next;
-		if (head == null) {
-			tail = null;
-		}
-
-		return item;
-	}
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.equinox.event/.classpath b/bundles/org.eclipse.equinox.event/.classpath
deleted file mode 100644
index 751c8f2..0000000
--- a/bundles/org.eclipse.equinox.event/.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"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/bundles/org.eclipse.equinox.event/.cvsignore b/bundles/org.eclipse.equinox.event/.cvsignore
deleted file mode 100644
index ba077a4..0000000
--- a/bundles/org.eclipse.equinox.event/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-bin
diff --git a/bundles/org.eclipse.equinox.event/.project b/bundles/org.eclipse.equinox.event/.project
deleted file mode 100644
index 4401f7b..0000000
--- a/bundles/org.eclipse.equinox.event/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.equinox.event</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/bundles/org.eclipse.equinox.event/.settings/org.eclipse.core.resources.prefs b/bundles/org.eclipse.equinox.event/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index 16532b2..0000000
--- a/bundles/org.eclipse.equinox.event/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Tue May 25 15:00:03 EDT 2004
-encoding/<project>=ISO-8859-1
-eclipse.preferences.version=1
diff --git a/bundles/org.eclipse.equinox.event/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.equinox.event/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 95d56a4..0000000
--- a/bundles/org.eclipse.equinox.event/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,49 +0,0 @@
-#Fri Dec 16 09:20:11 CST 2005
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=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=disabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-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.overridingPackageDefaultMethod=warning
-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=ignore
-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=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
diff --git a/bundles/org.eclipse.equinox.event/META-INF/MANIFEST.MF b/bundles/org.eclipse.equinox.event/META-INF/MANIFEST.MF
deleted file mode 100644
index 5d8f2b0..0000000
--- a/bundles/org.eclipse.equinox.event/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,20 +0,0 @@
-Bundle-ManifestVersion: 2
-Bundle-Name: %bundleName
-Bundle-Version: 1.0.100.qualifier
-Bundle-SymbolicName: org.eclipse.equinox.event
-Bundle-Activator: org.eclipse.equinox.event.Activator
-Bundle-Copyright: %bundleCopyright
-Import-Package: org.eclipse.osgi.framework.eventmgr,
- org.osgi.framework,
- org.osgi.service.cm,
- org.osgi.service.event,
- org.osgi.service.log,
- org.osgi.service.upnp,
- org.osgi.service.useradmin,
- org.osgi.service.wireadmin,
- org.osgi.util.tracker
-Export-Package: org.eclipse.equinox.event; x-internal:=true,
- org.eclipse.equinox.event.mapper; x-internal:=true
-Bundle-Vendor: %bundleVendor
-Export-Service: org.osgi.service.event.EventAdmin
-Bundle-Localization: plugin
diff --git a/bundles/org.eclipse.equinox.event/about.html b/bundles/org.eclipse.equinox.event/about.html
deleted file mode 100644
index 3989f53..0000000
--- a/bundles/org.eclipse.equinox.event/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 11, 2006</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 (&quot;EPL&quot;).  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, &quot;Program&quot; 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 (&quot;Redistributor&quot;) 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>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/bundles/org.eclipse.equinox.event/build.properties b/bundles/org.eclipse.equinox.event/build.properties
deleted file mode 100644
index 8732619..0000000
--- a/bundles/org.eclipse.equinox.event/build.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-###############################################################################
-# Copyright (c) 2005 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
-###############################################################################
-bin.includes = META-INF/,\
-               plugin*.properties,\
-               about.html,\
-               .
-src.includes = about.html
-source.. = src/
-output.. = bin/
diff --git a/bundles/org.eclipse.equinox.event/plugin.properties b/bundles/org.eclipse.equinox.event/plugin.properties
deleted file mode 100644
index 2c33066..0000000
--- a/bundles/org.eclipse.equinox.event/plugin.properties
+++ /dev/null
@@ -1,13 +0,0 @@
-###############################################################################
-# Copyright (c) 2005 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
-###############################################################################
-bundleVendor = Eclipse.org
-bundleName = Event Admin
-bundleCopyright = Copyright (c) IBM Corp. 2005
diff --git a/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/Activator.java b/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/Activator.java
deleted file mode 100644
index 455b025..0000000
--- a/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/Activator.java
+++ /dev/null
@@ -1,40 +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.event;
-
-import org.eclipse.equinox.event.mapper.EventRedeliverer;
-import org.osgi.framework.BundleActivator;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceRegistration;
-
-public class Activator implements BundleActivator {
-	private EventRedeliverer    _eventRedeliverer= null;
-	private ServiceRegistration _eventAdminService = null;
-	public void start(BundleContext bundleContext) {
-		
-		_eventAdminService = bundleContext.registerService("org.osgi.service.event.EventAdmin", //$NON-NLS-1$
-				new EventAdminImpl(bundleContext),null);
-		_eventRedeliverer  = new EventRedeliverer(bundleContext);
-		_eventRedeliverer.open();
-		
-	}
-	
-	public void stop(BundleContext bundleContext) {
-		
-		_eventRedeliverer.close();
-		_eventRedeliverer=null;
-		_eventAdminService.unregister();
-		_eventAdminService=null;
-			
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/EventAdminImpl.java b/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/EventAdminImpl.java
deleted file mode 100644
index 2b7d011..0000000
--- a/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/EventAdminImpl.java
+++ /dev/null
@@ -1,367 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.event;
-
-import org.eclipse.osgi.framework.eventmgr.*;
-import org.osgi.framework.*;
-import org.osgi.service.event.*;
-
-/**
- * Implementation of org.osgi.service.event.EventAdmin. EventAdminImpl uses
- * LogProxy and org.eclipse.osgi.framework.eventmgr.EventManager. It is assumeed
- * org.eclipse.osgi.framework.eventmgr package is exported by some other bundle.
- */
-public class EventAdminImpl implements EventAdmin {
-	/**
-	 * Class EventDispatcher is used to dispatch events to EventHandlers.
-	 * Dispatch events only when the receiver bundle is ACTIVE, and the receiver
-	 * service is registered.
-	 */
-	private class EventAdminDispatcher implements EventDispatcher {
-		/**
-		 * 
-		 * Dispatches Event to EventHandlers
-		 * 
-		 * @param eventListener
-		 * @param listenerObject
-		 * @param eventAction
-		 * @param eventObject
-		 * @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) {
-			ServiceReference ref = null;
-			ref = (ServiceReference) eventListener;
-			Bundle bundle = ref.getBundle();
-			if ((bundle == null) || (bundle.getState() != Bundle.ACTIVE)) {
-				// the receiver service or bundle being not active, no need
-				// to dispatch
-				return;
-			}
-			Object serviceObject = bc.getService(ref);
-			if ((serviceObject == null)
-					|| (!(serviceObject instanceof EventHandler))) {
-				// the service being unregistered or invalid, no need to
-				// dispatch
-				return;
-			}
-			try {
-				((EventHandler) serviceObject).handleEvent((Event) eventObject);
-			}
-			catch (Throwable t) {
-				// log/handle any Throwable thrown by the listener
-				printError("Exception thrown while dispatching an Event to an EventHandler);");
-				printError(" 	Event = " + eventObject);
-				printError("  	EventHandler = " + serviceObject, t);
-			}
-		}
-	}
-
-	private BundleContext		bc;
-	private EventManager		eventManager;
-	private static final char	TOPIC_SEPARATOR	= '/';
-
-	/**
-	 * Constructer for EventAdminImpl.
-	 * 
-	 * @param bc BundleContext
-	 */
-	protected EventAdminImpl(BundleContext bc) {
-		super();
-		this.bc = bc;
-		eventManager = new EventManager(
-				"EventAdmin Async Event Dispatcher Thread");
-	}
-
-	/**
-	 * This method should be called when stopping EventAdmin service
-	 */
-	void stop() {
-		if (eventManager != null) {
-			eventManager.close();
-			eventManager = null;
-		}
-		bc = null;
-	}
-
-	/**
-	 * @param event
-	 * @see org.osgi.service.event.EventAdmin#postEvent(org.osgi.service.event.Event)
-	 */
-	public void postEvent(Event event) {
-		dispatchEvent(event, true);
-	}
-
-	/**
-	 * @param event
-	 * @see org.osgi.service.event.EventAdmin#sendEvent(org.osgi.service.event.Event)
-	 */
-	public void sendEvent(Event event) {
-		dispatchEvent(event, false);
-	}
-
-	/**
-	 * Internal main method for sendEvent() and postEvent(). Dispatching an
-	 * event to EventHandler. All exceptions are logged except when dealing with
-	 * LogEntry.
-	 * 
-	 * @param event to be delivered
-	 * @param isAsync must be set to true for syncronous event delivery, false
-	 *        for asyncronous delivery.
-	 */
-	protected void dispatchEvent(Event event, boolean isAsync) {
-		try {
-			if (eventManager == null) {
-				// EventAdmin is stopped
-				return;
-			}
-			if (event == null) {
-				printError("Null event is passed to EventAdmin. Ignored.");
-				return;
-			}
-			if (!isCallerPermittedTopicPermission(event.getTopic())) {
-				printError("Caller bundle doesn't have TopicPermission for topic="
-						+ event.getTopic());
-				return;
-			}
-			ServiceReference[] refsForEventHandler = getAllEventHandlers();
-			if (refsForEventHandler == null) {
-				//No EventHandler exists. Do nothing.
-				return;
-			}
-			EventListeners listeners = retrieveMatchedAndPermittedListeners(
-					event, refsForEventHandler);
-			if (listeners == null) {
-				//No permitted EventHandler exists. Do nothing.
-				return;
-			}
-			// 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(listeners, new EventAdminDispatcher());
-			// Deliver the event to the listeners.
-			if (isAsync) {
-				listenerQueue.dispatchEventAsynchronous(0, event);
-			}
-			else {
-				listenerQueue.dispatchEventSynchronous(0, event);
-			}
-			// Remove the listener from the listener list
-			listeners.removeAllListeners();
-		}
-		catch (Throwable t) {
-			printError("Exception thrown while dispatching an event, event = "
-					+ event, t);
-		}
-	}
-
-	/**
-	 * Filtering EventHandlers, represented by the param references, to listners
-	 * that have the same topic as the event.getTopic(), and whose Filter
-	 * property match the event when the property "Filter" is set. This method
-	 * also filters out listners that do not have appropriate TopicPermission.
-	 * Results are wrapped and put into EventListeners.
-	 * 
-	 * @param event This object is used to filter EventHandlers
-	 * @param references EventHandlers to be filtered
-	 * @return EventListeners which contains filtered EventHandlers.
-	 */
-	protected EventListeners retrieveMatchedAndPermittedListeners(Event event,
-			ServiceReference[] references) {
-		EventListeners listeners = null;
-		for (int i = 0; i < references.length; i++) {
-			ServiceReference ref = references[i];
-			if (isEventMatchingListener(event, ref)
-					&& isHandlerGrantedTopicPermission(ref, event.getTopic())) {
-				if (listeners == null)
-					listeners = new EventListeners();
-				listeners.addListener(ref, null);
-			}
-		}
-		return listeners;
-	}
-
-	/**
-	 * Checks if the EventHandler represented by the parameter ref has right
-	 * SUBSCRIBE TopicPermission.
-	 * 
-	 * @param ref This object represents ServiceReference which implement
-	 *        EventHandler
-	 * @param topic This string represents TopicPermission.
-	 * @return
-	 */
-	protected boolean isHandlerGrantedTopicPermission(ServiceReference ref,
-			String topic) {
-		Bundle bundle = ref.getBundle();
-		return bundle.hasPermission(new TopicPermission(topic,
-				TopicPermission.SUBSCRIBE));
-	}
-
-	/**
-	 * Checks if the caller bundle has right PUBLISH TopicPermision.
-	 * 
-	 * @param topic
-	 * @return true if it has the right permission, false otherwise.
-	 */
-	protected boolean isCallerPermittedTopicPermission(String topic) {
-		SecurityManager sm = System.getSecurityManager();
-		if (topic == null)
-			return false;
-		if (sm != null) {
-			TopicPermission topicPermission = new TopicPermission(topic,
-					TopicPermission.PUBLISH);
-			try {
-				sm.checkPermission(topicPermission);
-			}
-			catch (SecurityException e) {
-				return false;
-			}
-		}
-		return true;
-	}
-
-	/**
-	 * Checks if a topic filter string matches the target topic string.
-	 * 
-	 * @param topicProperty A topic filter like "company/product/*"
-	 * @param topic Target topic to be checked against like
-	 *        "company/product/topicA"
-	 * @return true if topicProperty matches topic, false if otherwise.
-	 */
-	protected boolean topicPropertyIncludes(String topicProperty, String topic) {
-		if (topicProperty.startsWith("*")) {
-			return true;
-		}
-		if (topicProperty.equals(topic)) {
-			return true;
-		}
-		int index = topicProperty.indexOf(TOPIC_SEPARATOR);
-		int index2 = topic.indexOf(TOPIC_SEPARATOR);
-		if (index == -1)
-			return false;
-		if (index2 == -1)
-			return false;
-		if (index == 0) {
-			printError("topicProperty '" + topicProperty + "'starts with '"
-					+ TOPIC_SEPARATOR + "'. Ignored.");
-			return false;
-		}
-		if (index2 == 0) {
-			printError("topic '" + topic + "'starts with '" + TOPIC_SEPARATOR
-					+ "'. Ignored.");
-			return false;
-		}
-		if (index == topicProperty.length() - 1) {
-			printError("topicProperty '" + topicProperty + "'ends with '"
-					+ TOPIC_SEPARATOR + "'. Ignored.");
-			return false;
-		}
-		if (index2 == topic.length() - 1) {
-			printError("topic '" + topic + "'ends with '" + TOPIC_SEPARATOR
-					+ "'. Ignored.");
-			return false;
-		}
-		String str = topicProperty.substring(0, index);
-		String str2 = topic.substring(0, index2);
-		if (str.equals(str2)) { // if first names of topic category match
-			String str3 = topicProperty.substring(index + 1);
-			String str4 = topic.substring(index2 + 1);
-			return topicPropertyIncludes(str3, str4); // recursive call to test
-			// the rest of the names
-		}
-		else {
-			return false;
-		}
-	}
-
-	/**
-	 * Checks if a EventHandler's SUBSCRIBE topics contains the target event's
-	 * topic. Also checks if the listener's EVENT_FILTER matches the event if
-	 * the filter property of the listener is set.
-	 * 
-	 * @param event The event to be checked against
-	 * @param ref This ServiceReference represents EventHandler to be checked
-	 * @return true if the listener matches the event
-	 */
-	protected boolean isEventMatchingListener(Event event, ServiceReference ref) {
-		String eventTopic = event.getTopic();
-		Object o = ref.getProperty(EventConstants.EVENT_TOPIC);
-		if (o == null) {
-			// means no topics, no need to investigate further
-			return false;
-		}
-		if (!(o instanceof String[])) {
-			// EVENT_TOPIC property must be String[], ignored.
-			return false;
-		}
-		String listenerTopics[] = (String[]) o;
-		boolean found = false;
-		for (int i = 0; i < listenerTopics.length; i++) {
-			if (topicPropertyIncludes(listenerTopics[i], eventTopic)) {
-				found = true;
-				break;
-			}
-		}
-		if (!found) {
-			return false;
-		}
-		Object o2 = ref.getProperty(EventConstants.EVENT_FILTER);
-		if ((o2 == null) || (!(o2 instanceof String))) {
-			// means no need to investigate further
-			return true;
-		}
-		String filterString = (String) o2;
-		try {
-			Filter filter = bc.createFilter(filterString);
-			return (event.matches(filter));
-		}
-		catch (InvalidSyntaxException e) {
-			printError("exception thrown in BundleContext.createfilter(\""
-					+ filterString + "\". Ignored.", e);
-			return false;
-		}
-	}
-
-	/**
-	 * Returns all the EventHandler's ServiceReferences that are currently
-	 * registered.
-	 * 
-	 * @return all the EventHandler's ServiceReferences that are currently
-	 *         registered.
-	 */
-	protected ServiceReference[] getAllEventHandlers() {
-		ServiceReference[] references = null;
-		try {
-			// find all the eventHandlers
-			references = bc.getServiceReferences(EventHandler.class.getName(),
-					null);
-		}
-		catch (InvalidSyntaxException e) {
-			// exception never be thrown, since filter is null in
-			// getServiceReferences() call
-		}
-		return references;
-	}
-
-	private void printError(String msg, Throwable t) {
-		System.out.println("EventAdmin: " + msg);
-		if (t != null) {
-			System.out.println("EventAdmin: exception = " + t);
-			t.printStackTrace(System.out);
-		}
-	}
-
-	private void printError(String msg) {
-		printError(msg, null);
-	}
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/BundleEventAdapter.java b/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/BundleEventAdapter.java
deleted file mode 100644
index 64848d1..0000000
--- a/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/BundleEventAdapter.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.event.mapper;
-
-import java.util.Hashtable;
-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.1 $
- */
-public class BundleEventAdapter extends EventAdapter {
-	// constants for Event topic substring
-	public static final String	HEADER		= "org/osgi/framework/BundleEvent";
-	public static final String	INSTALLED	= "INSTALLED";
-	public static final String	STOPPED		= "STOPPED";
-	public static final String	STARTED		= "STARTED";
-	public static final String	UPDATED		= "UPDATED";
-	public static final String	UNINSTALLED	= "UNINSTALLED";
-	public static final String	RESOLVED	= "RESOLVED";
-	public static final String	UNRESOLVED	= "UNRESOLVED";
-	private BundleEvent			event;
-
-	public BundleEventAdapter(BundleEvent event, EventAdmin eventAdmin) {
-		super(eventAdmin);
-		this.event = event;
-	}
-
-	/**
-	 * @return
-	 * @see org.eclipse.equinox.event.mapper.EventAdapter#convert()
-	 */
-	public Event convert() {
-		String typename = null;
-		switch (event.getType()) {
-			case BundleEvent.INSTALLED :
-				typename = INSTALLED;
-				break;
-			case BundleEvent.STOPPED :
-				typename = STOPPED;
-				break;
-			case BundleEvent.STARTED :
-				typename = STARTED;
-				break;
-			case BundleEvent.UPDATED :
-				typename = UPDATED;
-				break;
-			case BundleEvent.UNINSTALLED :
-				typename = UNINSTALLED;
-				break;
-			case BundleEvent.RESOLVED :
-				typename = RESOLVED;
-				break;
-			case BundleEvent.UNRESOLVED :
-				typename = UNRESOLVED;
-				break;
-			default :
-				// unknown events must be send as their decimal value
-				typename = ""+event.getType();
-		}
-		String topic = HEADER + Constants.TOPIC_SEPARATOR + typename;
-		Hashtable properties = new Hashtable();
-		Bundle bundle = event.getBundle();
-		if (bundle == null) {
-			throw new RuntimeException("BundleEvent.getBundle() returns null");
-		}
-		else {
-			putBundleProperties(properties, bundle);
-		}
-		properties.put(Constants.EVENT, event);
-		Event converted = new Event(topic, properties);
-		return converted;
-	}
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/ConfigurationEventAdapter.java b/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/ConfigurationEventAdapter.java
deleted file mode 100644
index a156295..0000000
--- a/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/ConfigurationEventAdapter.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.event.mapper;
-
-import java.util.Hashtable;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.cm.ConfigurationEvent;
-import org.osgi.service.event.Event;
-import org.osgi.service.event.EventAdmin;
-
-/**
- * @version $Revision: 1.1 $
- */
-public class ConfigurationEventAdapter extends EventAdapter {
-	// constants for Event topic substring
-	public static final String	HEADER			= "org/osgi/service/cm/ConfigurationEvent";
-	public static final String	CM_UPDATED		= "CM_UPDATED";
-	public static final String	CM_DELETED		= "CM_DELETED";
-	// constants for Event properties
-	public static final String	CM_FACTORY_PID	= "cm.factoryPid";
-	public static final String	CM_PID			= "cm.pid";
-	private ConfigurationEvent	event;
-
-	public ConfigurationEventAdapter(ConfigurationEvent event,
-			EventAdmin eventAdmin) {
-		super(eventAdmin);
-		this.event = event;
-	}
-
-	/**
-	 * @return
-	 * @see org.eclipse.equinox.event.mapper.EventAdapter#convert()
-	 */
-	public Event convert() {
-		String typename = null;
-		switch (event.getType()) {
-			case ConfigurationEvent.CM_UPDATED :
-				typename = CM_UPDATED;
-				break;
-			case ConfigurationEvent.CM_DELETED :
-				typename = CM_DELETED;
-				break;
-			default :
-				return null;
-		}
-		String topic = HEADER + Constants.TOPIC_SEPARATOR + typename;
-		Hashtable properties = new Hashtable();
-		ServiceReference ref = event.getReference();
-		if (ref == null) {
-			throw new RuntimeException(
-					"ServiceEvent.getServiceReference() is null");
-		}
-		properties.put(CM_PID, event.getPid());
-		if (event.getFactoryPid() != null) {
-			properties.put(CM_FACTORY_PID, event.getFactoryPid());
-		}
-		putServiceReferenceProperties(properties, ref);
-		// assert objectClass includes
-		// "org.osgi.service.cm.ConfigurationAdmin"
-		Event converted = new Event(topic, properties);
-		return converted;
-	}
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/Constants.java b/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/Constants.java
deleted file mode 100644
index c7af671..0000000
--- a/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/Constants.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.event.mapper;
-
-/**
- * @version $Revision: 1.1 $
- */
-public interface Constants {
-	// constants for Event common properties; event specific properties are
-	// defined in the corresponding event adapter.
-	public static final String	BUNDLE				= "bundle";
-	public static final String	BUNDLE_ID			= "bundle.id";
-	public static final String	BUNDLE_SYMBOLICNAME	= "bundle.symbolicName";
-	public static final String	EVENT				= "event";
-	public static final String	EXCEPTION			= "exception";
-	public static final String	EXCEPTION_CLASS		= "exception.class";
-	public static final String	EXCEPTION_MESSAGE	= "exception.message";
-	public static final String	MESSAGE				= "message";
-	public static final String	SERVICE				= "service";
-	public static final String	SERVICE_ID			= "service.id";
-	public static final String	SERVICE_OBJECTCLASS	= "service.objectClass";
-	public static final String	SERVICE_PID			= "service.pid";
-	public static final String	TIMESTAMP			= "timestamp";
-	public static final char	TOPIC_SEPARATOR		= '/';
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/EventAdapter.java b/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/EventAdapter.java
deleted file mode 100644
index 6b5517b..0000000
--- a/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/EventAdapter.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 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
- *******************************************************************************/
-
-package org.eclipse.equinox.event.mapper;
-
-import java.util.Hashtable;
-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.1 $
- */
-public abstract class EventAdapter {
-	final EventAdmin	eventAdmin;
-
-	/**
-	 * @param event
-	 * @param eventAdmin
-	 */
-	public EventAdapter(EventAdmin eventAdmin) {
-		this.eventAdmin = eventAdmin;
-	}
-
-	/**
-	 * @return
-	 */
-	public abstract Event convert();
-
-	public void redeliver() {
-		Event converted = convert();
-		if (converted != null) {
-			redeliverInternal(converted);
-		}
-	}
-
-	/**
-	 * subclasses should override this method if it wants to use sendEvent()
-	 * instead.
-	 */
-	protected void redeliverInternal(Event converted) {
-		eventAdmin.postEvent(converted);
-	}
-
-	public void putBundleProperties(Hashtable properties, Bundle bundle) {
-		// assertion bundle != null
-		properties.put(Constants.BUNDLE_ID, new Long(bundle.getBundleId()));
-		String symbolicName = bundle.getSymbolicName();
-		if (symbolicName != null) {
-			properties.put(Constants.BUNDLE_SYMBOLICNAME, symbolicName);
-		}
-		properties.put(Constants.BUNDLE, bundle);
-	}
-
-	public void putExceptionProperties(Hashtable properties, Throwable t) {
-		// assertion t != null
-		properties.put(Constants.EXCEPTION, t);
-		properties.put(Constants.EXCEPTION_CLASS, t.getClass().getName());
-		String message = t.getMessage();
-		if (message != null) {
-			properties.put(Constants.EXCEPTION_MESSAGE, t.getMessage());
-		}
-	}
-
-	public void putServiceReferenceProperties(Hashtable properties,
-			ServiceReference ref) {
-		// assertion ref != null
-		properties.put(Constants.SERVICE, ref);
-		properties.put(Constants.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(Constants.SERVICE_PID, (String) o);
-		}
-		Object o2 = ref.getProperty(org.osgi.framework.Constants.OBJECTCLASS);
-		if ((o2 != null) && (o2 instanceof String[])) {
-			properties.put(Constants.SERVICE_OBJECTCLASS, (String[]) o2);
-		}
-	}
-
-	/*
-	 * Utility function for converting classes into strings
-	 */
-	public String[] classes2strings(Class classes[]) {
-		if ((classes == null) || (classes.length == 0))
-			return null;
-		String[] strings = new String[classes.length];
-		for (int i = 0; i < classes.length; i++) {
-			strings[i] = classes[i].getName();
-		}
-		return strings;
-	}
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/EventRedeliverer.java b/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/EventRedeliverer.java
deleted file mode 100644
index 8023b40..0000000
--- a/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/EventRedeliverer.java
+++ /dev/null
@@ -1,307 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 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
- *******************************************************************************/
-
-package org.eclipse.equinox.event.mapper;
-
-import java.util.Dictionary;
-import java.util.Hashtable;
-import org.osgi.framework.*;
-import org.osgi.service.cm.ConfigurationEvent;
-import org.osgi.service.cm.ConfigurationListener;
-import org.osgi.service.event.EventAdmin;
-import org.osgi.service.log.LogEntry;
-import org.osgi.service.log.LogListener;
-import org.osgi.service.log.LogReaderService;
-import org.osgi.service.upnp.UPnPDevice;
-import org.osgi.service.upnp.UPnPEventListener;
-import org.osgi.service.upnp.UPnPService;
-import org.osgi.service.useradmin.UserAdminEvent;
-import org.osgi.service.useradmin.UserAdminListener;
-import org.osgi.service.wireadmin.WireAdminEvent;
-import org.osgi.service.wireadmin.WireAdminListener;
-import org.osgi.service.wireadmin.WireConstants;
-import org.osgi.util.tracker.ServiceTracker;
-
-/**
- * Main class for redeliver special events like FrameworkEvents via EventAdmin.
- * 
- * 
- * @version $Revision: 1.1 $
- */
-public class EventRedeliverer implements FrameworkListener, BundleListener,
-		ServiceListener, LogListener, LogReaderServiceListener,
-		ConfigurationListener, WireAdminListener, UPnPEventListener,
-		UserAdminListener {
-	private ServiceTracker			eventAdminTracker;
-	private LogReaderServiceTracker	logTracker;
-	private LogReaderService		reader;
-	private final static boolean	DEBUG	= false;
-	private BundleContext			bc;
-	private ServiceRegistration		configurationListenerReg;
-	private ServiceRegistration		wireAdminListenerReg;
-	private ServiceRegistration		upnpEventListenerReg;
-	private ServiceRegistration		userAdminListenerReg;
-
-	public EventRedeliverer(BundleContext bc) {
-		this.bc = bc;
-	}
-
-	public void close() {
-		if (logTracker != null) {
-			logTracker.close();
-			logTracker = null;
-		}
-		if (eventAdminTracker != null) {
-			eventAdminTracker.close();
-			eventAdminTracker = null;
-		}
-		if (reader != null) {
-			reader.removeLogListener(this);
-		}
-		reader = null;
-		bc.removeFrameworkListener(this);
-		bc.removeBundleListener(this);
-		bc.removeServiceListener(this);
-		if (configurationListenerReg != null) {
-			configurationListenerReg.unregister();
-			configurationListenerReg = null;
-		}
-		if (wireAdminListenerReg != null) {
-			wireAdminListenerReg.unregister();
-			wireAdminListenerReg = null;
-		}
-		if (upnpEventListenerReg != null) {
-			upnpEventListenerReg.unregister();
-			upnpEventListenerReg = null;
-		}
-		if (userAdminListenerReg != null) {
-			userAdminListenerReg.unregister();
-			userAdminListenerReg = null;
-		}
-	}
-
-	/**
-	 * prepare any service trackers and register event listeners which are
-	 * necessary to obtain events to be mapped
-	 */
-	public void open() {
-		// open ServiceTracker for EventAdmin
-		eventAdminTracker = new ServiceTracker(bc, EventAdmin.class.getName(),
-				null);
-		eventAdminTracker.open();
-		// open ServiceTracker for LogReaderService
-		logTracker = new LogReaderServiceTracker(bc, this);
-		logTracker.open();
-		// add legacy event listener for framework level event
-		bc.addFrameworkListener(this);
-		bc.addBundleListener(this);
-		bc.addServiceListener(this);
-		// register configurationListener
-		configurationListenerReg = bc.registerService(
-				ConfigurationListener.class.getName(), this, null);
-		// register WireAdminListener
-		Hashtable ht = new Hashtable();
-		// create an event mask to receive all the types of WireAdminEvent
-		Integer mask = new Integer(WireAdminEvent.WIRE_CONNECTED
-				| WireAdminEvent.WIRE_CREATED | WireAdminEvent.WIRE_DELETED
-				| WireAdminEvent.WIRE_DISCONNECTED | WireAdminEvent.WIRE_TRACE
-				| WireAdminEvent.WIRE_UPDATED
-				| WireAdminEvent.CONSUMER_EXCEPTION
-				| WireAdminEvent.PRODUCER_EXCEPTION);
-		ht.put(WireConstants.WIREADMIN_EVENTS, mask);
-		wireAdminListenerReg = bc.registerService(WireAdminListener.class
-				.getName(), this, ht);
-		// register UPnPEventListener
-		// create a Filter object to receive all the UPnP events
-		Hashtable ht2 = new Hashtable();
-		Filter filter = null;
-		try {
-			filter = bc.createFilter("(|(|(" + UPnPDevice.TYPE + "=*)("
-					+ UPnPDevice.ID + "=*))(|(" + UPnPService.TYPE + "=*)("
-					+ UPnPService.ID + "=*)))");
-		}
-		catch (InvalidSyntaxException e) {
-			System.out
-					.println("Exception thrown while trying to create Filter. "
-							+ e);
-			e.printStackTrace(System.out);
-		}
-		if (filter != null) {
-			ht2.put(UPnPEventListener.UPNP_FILTER, filter);
-			upnpEventListenerReg = bc.registerService(UPnPEventListener.class
-					.getName(), this, ht2);
-		}
-		// register usrAdminListener
-		userAdminListenerReg = bc.registerService(UserAdminListener.class
-				.getName(), this, null);
-	}
-
-	private EventAdmin getEventAdmin() {
-		if (eventAdminTracker == null)
-			return null;
-		return (EventAdmin) eventAdminTracker.getService();
-	}
-
-	/**
-	 * @param event
-	 * @see org.osgi.framework.FrameworkListener#frameworkEvent(org.osgi.framework.FrameworkEvent)
-	 */
-	public void frameworkEvent(FrameworkEvent event) {
-		EventAdmin eventAdmin = getEventAdmin();
-		if (eventAdmin != null) {
-			(new FrameworkEventAdapter(event, eventAdmin)).redeliver();
-		}
-		else {
-			printNoEventAdminError();
-		}
-	}
-
-	private void printNoEventAdminError() {
-		if (DEBUG) {
-			System.out.println(this.getClass().getName()
-					+ ": Cannot find the EventAdmin.");
-		}
-	}
-
-	/**
-	 * @param event
-	 * @see org.osgi.framework.BundleListener#bundleChanged(org.osgi.framework.BundleEvent)
-	 */
-	public void bundleChanged(BundleEvent event) {
-		EventAdmin eventAdmin = getEventAdmin();
-		if (eventAdmin != null) {
-			(new BundleEventAdapter(event, eventAdmin)).redeliver();
-		}
-		else {
-			printNoEventAdminError();
-		}
-	}
-
-	/**
-	 * @param event
-	 * @see org.osgi.framework.ServiceListener#serviceChanged(org.osgi.framework.ServiceEvent)
-	 */
-	public void serviceChanged(ServiceEvent event) {
-		EventAdmin eventAdmin = getEventAdmin();
-		if (eventAdmin != null) {
-			(new ServiceEventAdapter(event, eventAdmin)).redeliver();
-		}
-		else {
-			printNoEventAdminError();
-		}
-	}
-
-	/**
-	 * @param entry
-	 * @see org.osgi.service.log.LogListener#logged(org.osgi.service.log.LogEntry)
-	 */
-	public void logged(LogEntry entry) {
-		EventAdmin eventAdmin = getEventAdmin();
-		if (eventAdmin != null) {
-			(new LogEntryAdapter(entry, eventAdmin)).redeliver();
-		}
-		else {
-			printNoEventAdminError();
-		}
-	}
-
-	/**
-	 * @param reference
-	 * @param service
-	 * @see org.eclipse.equinox.event.mapper.LogReaderServiceListener#logReaderServiceAdding(org.osgi.framework.ServiceReference,
-	 *      org.osgi.service.log.LogReaderService)
-	 */
-	public void logReaderServiceAdding(ServiceReference reference,
-			LogReaderService service) {
-		if (reader != null) {
-			return;
-		}
-		reader = service;
-		reader.addLogListener(this);
-	}
-
-	/**
-	 * @param reference
-	 * @param service
-	 * @see org.eclipse.equinox.event.mapper.LogReaderServiceListener#logReaderServiceRemoved(org.osgi.framework.ServiceReference,
-	 *      org.osgi.service.log.LogReaderService)
-	 */
-	public void logReaderServiceRemoved(ServiceReference reference,
-			LogReaderService service) {
-		if ((reader != null) && reader.equals(service)) {
-			reader.removeLogListener(this);
-			reader = null;
-		}
-		// ungetService() will be called after returning to
-		// LogReaderServiceTracker's removedService() method.
-	}
-
-	/**
-	 * @param event
-	 * @see org.osgi.service.cm.ConfigurationListener#configurationEvent(org.osgi.service.cm.ConfigurationEvent)
-	 */
-	public void configurationEvent(ConfigurationEvent event) {
-		EventAdmin eventAdmin = getEventAdmin();
-		if (eventAdmin != null) {
-			(new ConfigurationEventAdapter(event, eventAdmin)).redeliver();
-		}
-		else {
-			printNoEventAdminError();
-		}
-	}
-
-	/**
-	 * @param event
-	 * @see org.osgi.service.wireadmin.WireAdminListener#wireAdminEvent(org.osgi.service.wireadmin.WireAdminEvent)
-	 */
-	public void wireAdminEvent(WireAdminEvent event) {
-		EventAdmin eventAdmin = getEventAdmin();
-		if (eventAdmin != null) {
-			(new WireAdminEventAdapter(event, eventAdmin)).redeliver();
-		}
-		else {
-			printNoEventAdminError();
-		}
-	}
-
-	/**
-	 * @param deviceId
-	 * @param serviceId
-	 * @param events
-	 * @see org.osgi.service.upnp.UPnPEventListener#notifyUPnPEvent(java.lang.String,
-	 *      java.lang.String, java.util.Dictionary)
-	 */
-	public void notifyUPnPEvent(String deviceId, String serviceId,
-			Dictionary events) {
-		EventAdmin eventAdmin = getEventAdmin();
-		if (eventAdmin != null) {
-			(new UPnPEventAdapter(deviceId, serviceId, events, eventAdmin))
-					.redeliver();
-		}
-		else {
-			printNoEventAdminError();
-		}
-	}
-
-	/**
-	 * @param event
-	 * @see org.osgi.service.useradmin.UserAdminListener#roleChanged(org.osgi.service.useradmin.UserAdminEvent)
-	 */
-	public void roleChanged(UserAdminEvent event) {
-		EventAdmin eventAdmin = getEventAdmin();
-		if (eventAdmin != null) {
-			(new UserAdminEventAdapter(event, eventAdmin)).redeliver();
-		}
-		else {
-			printNoEventAdminError();
-		}
-	}
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/FrameworkEventAdapter.java b/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/FrameworkEventAdapter.java
deleted file mode 100644
index ec1d48c..0000000
--- a/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/FrameworkEventAdapter.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 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
- *******************************************************************************/
-
-package org.eclipse.equinox.event.mapper;
-
-import java.util.Hashtable;
-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.1 $
- */
-public class FrameworkEventAdapter extends EventAdapter {
-	// constants for Event topic substring
-	public static final String	HEADER				= "org/osgi/framework/FrameworkEvent";
-	public static final String	STARTLEVEL_CHANGED	= "STARTLEVEL_CHANGED";
-	public static final String	STARTED				= "STARTED";
-	public static final String	PACKAGES_REFRESHED	= "PACKAGES_REFRESHED";
-	public static final String	ERROR				= "ERROR";
-	protected FrameworkEvent	event;
-
-	public FrameworkEventAdapter(FrameworkEvent event, EventAdmin eventAdmin) {
-		super(eventAdmin);
-		this.event = event;
-	}
-
-	/**
-	 * @return
-	 * @see org.eclipse.equinox.event.mapper.EventAdapter#convert()
-	 */
-	public Event convert() {
-		String typename = null;
-		switch (event.getType()) {
-			case FrameworkEvent.ERROR :
-				typename = ERROR;
-				break;
-			case FrameworkEvent.PACKAGES_REFRESHED :
-				typename = PACKAGES_REFRESHED;
-				break;
-			case FrameworkEvent.STARTED :
-				typename = STARTED;
-				break;
-			case FrameworkEvent.STARTLEVEL_CHANGED :
-				typename = STARTLEVEL_CHANGED;
-				break;
-			default :
-				return null;
-		}
-		String topic = HEADER + Constants.TOPIC_SEPARATOR + typename;
-		Hashtable properties = new Hashtable();
-		Bundle bundle = event.getBundle();
-		if (bundle != null) {
-			putBundleProperties(properties, bundle);
-		}
-		Throwable t = event.getThrowable();
-		if (t != null) {
-			putExceptionProperties(properties, t);
-		}
-		properties.put(Constants.EVENT, event);
-		Event converted = new Event(topic, properties);
-		return converted;
-	}
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/LogEntryAdapter.java b/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/LogEntryAdapter.java
deleted file mode 100644
index c65c6e8..0000000
--- a/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/LogEntryAdapter.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 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
- *******************************************************************************/
-
-package org.eclipse.equinox.event.mapper;
-
-import java.util.Hashtable;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.event.Event;
-import org.osgi.service.event.EventAdmin;
-import org.osgi.service.log.LogEntry;
-import org.osgi.service.log.LogService;
-
-/**
- * @version $Revision: 1.1 $
- */
-public class LogEntryAdapter extends EventAdapter {
-	// constants for Event topic substring
-	public static final String	TOPIC		= "org/osgi/service/log/LogEntry";
-	// constants for Event properties
-	public static final String	TIMESTAMP	= "timestamp";
-	public static final String	MESSAGE		= "message";
-	public static final String	LOG_LEVEL	= "log.level";
-	public static final String	LOG_ENTRY	= "log.entry";
-	private LogEntry			entry;
-
-	public LogEntryAdapter(LogEntry entry, EventAdmin eventAdmin) {
-		super(eventAdmin);
-		this.entry = entry;
-	}
-
-	/**
-	 * @return
-	 * @see org.eclipse.equinox.event.mapper.EventAdapter#convert()
-	 */
-	public Event convert() {
-		String topic = TOPIC;
-		int level = entry.getLevel();
-		switch (level) {
-			case LogService.LOG_ERROR:
-			case LogService.LOG_WARNING:
-			case LogService.LOG_INFO:
-			case LogService.LOG_DEBUG:
-				break;
-			default:
-				// other log levels are represented by their decimal value
-				topic += Constants.TOPIC_SEPARATOR + level;
-		}
-		Hashtable properties = new Hashtable();
-		Bundle bundle = entry.getBundle();
-		if (bundle == null) {
-			throw new RuntimeException("LogEntry.getBundle() returns null");
-		}
-		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()));
-		Event converted = new Event(topic, properties);
-		return converted;
-	}
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/LogReaderServiceListener.java b/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/LogReaderServiceListener.java
deleted file mode 100644
index adcefbd..0000000
--- a/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/LogReaderServiceListener.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 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
- *******************************************************************************/
-
-package org.eclipse.equinox.event.mapper;
-
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.log.LogReaderService;
-
-/**
- * @version $Revision: 1.1 $
- */
-public interface LogReaderServiceListener {
-	public void logReaderServiceAdding(ServiceReference reference,
-			LogReaderService service);
-
-	public void logReaderServiceRemoved(ServiceReference reference,
-			LogReaderService service);
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/LogReaderServiceTracker.java b/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/LogReaderServiceTracker.java
deleted file mode 100644
index a50d388..0000000
--- a/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/LogReaderServiceTracker.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 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
- *******************************************************************************/
-
-package org.eclipse.equinox.event.mapper;
-
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.log.LogReaderService;
-import org.osgi.util.tracker.ServiceTracker;
-
-/**
- * @version $Revision: 1.1 $
- */
-public class LogReaderServiceTracker extends ServiceTracker {
-	private final LogReaderServiceListener	listener;
-	private ServiceReference				reference;
-
-	public LogReaderServiceTracker(BundleContext context,
-			LogReaderServiceListener listener) {
-		super(context, LogReaderService.class.getName(), null);
-		this.listener = listener;
-	}
-
-	public Object addingService(ServiceReference reference) {
-		Object object = super.addingService(reference);
-		if ((object != null) && (this.reference == null)
-				&& (object instanceof LogReaderService)) {
-			this.reference = reference;
-			listener.logReaderServiceAdding(reference,
-					(LogReaderService) object);
-		}
-		return object;
-	}
-
-	public void removedService(ServiceReference reference, Object service) {
-		if ((service != null) && (this.reference.equals(reference))
-				&& (service instanceof LogReaderService)) {
-			listener.logReaderServiceRemoved(reference,
-					(LogReaderService) service);
-			this.reference = null;
-		}
-		super.removedService(reference, service);
-		//this method calls ungetService()
-	}
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/ServiceEventAdapter.java b/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/ServiceEventAdapter.java
deleted file mode 100644
index 3f1e06e..0000000
--- a/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/ServiceEventAdapter.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 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
- *******************************************************************************/
-
-package org.eclipse.equinox.event.mapper;
-
-import java.util.Hashtable;
-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.1 $
- */
-public class ServiceEventAdapter extends EventAdapter {
-	// constants for Event topic substring
-	public static final String	HEADER			= "org/osgi/framework/ServiceEvent";
-	public static final String	UNREGISTERING	= "UNREGISTERING";
-	public static final String	MODIFIED		= "MODIFIED";
-	public static final String	REGISTERED		= "REGISTERED";
-	private ServiceEvent		event;
-
-	public ServiceEventAdapter(ServiceEvent event, EventAdmin eventAdmin) {
-		super(eventAdmin);
-		this.event = event;
-	}
-
-	// override super's method to force syncronous event delivery
-	protected void redeliverInternal(Event converted) {
-		eventAdmin.sendEvent(converted);
-	}
-
-	/**
-	 * @return
-	 * @see org.eclipse.equinox.event.mapper.EventAdapter#convert()
-	 */
-	public Event convert() {
-		String typename = null;
-		switch (event.getType()) {
-			case ServiceEvent.REGISTERED :
-				typename = REGISTERED;
-				break;
-			case ServiceEvent.MODIFIED :
-				typename = MODIFIED;
-				break;
-			case ServiceEvent.UNREGISTERING :
-				typename = UNREGISTERING;
-				break;
-			default :
-				return null;
-		}
-		String topic = HEADER + Constants.TOPIC_SEPARATOR + typename;
-		Hashtable properties = new Hashtable();
-		ServiceReference ref = event.getServiceReference();
-		if (ref != null) {
-			putServiceReferenceProperties(properties, ref);
-		}
-		properties.put(Constants.EVENT, event);
-		Event converted = new Event(topic, properties);
-		return converted;
-	}
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/UPnPEventAdapter.java b/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/UPnPEventAdapter.java
deleted file mode 100644
index 8275e90..0000000
--- a/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/UPnPEventAdapter.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 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
- *******************************************************************************/
-
-package org.eclipse.equinox.event.mapper;
-
-import java.util.Dictionary;
-import java.util.Hashtable;
-import org.osgi.service.event.Event;
-import org.osgi.service.event.EventAdmin;
-
-/**
- * @version $Revision: 1.1 $
- */
-public class UPnPEventAdapter extends EventAdapter {
-	// constants for Event topic substring
-	public static final String	TOPIC			= "org/osgi/service/upnp/UPnPEvent";
-	// constants for Event properties
-	public static final String	UPNP_DEVICEID	= "upnp.deviceId";
-	public static final String	UPNP_SERVICEID	= "upnp.serviceId";
-	public static final String	UPNP_EVENTS		= "upnp.events";
-	private String				deviceId;
-	private String				serviceId;
-	private Dictionary			events;
-
-	public UPnPEventAdapter(String deviceId, String serviceId,
-			Dictionary events, EventAdmin eventAdmin) {
-		super(eventAdmin);
-		this.deviceId = deviceId;
-		this.serviceId = serviceId;
-		this.events = events;
-	}
-
-	/**
-	 * @return
-	 * @see org.eclipse.equinox.event.mapper.EventAdapter#convert()
-	 */
-	public Event convert() {
-		Hashtable properties = new Hashtable();
-		if (deviceId != null) {
-			properties.put(UPNP_DEVICEID, deviceId);
-		}
-		if (serviceId != null) {
-			properties.put(UPNP_SERVICEID, serviceId);
-		}
-		if (events != null) {
-			properties.put(UPNP_EVENTS, events);
-		}
-		Event converted = new Event(TOPIC, properties);
-		return converted;
-	}
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/UserAdminEventAdapter.java b/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/UserAdminEventAdapter.java
deleted file mode 100644
index 4780499..0000000
--- a/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/UserAdminEventAdapter.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 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
- *******************************************************************************/
-
-package org.eclipse.equinox.event.mapper;
-
-import java.util.Hashtable;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.event.Event;
-import org.osgi.service.event.EventAdmin;
-import org.osgi.service.useradmin.Role;
-import org.osgi.service.useradmin.UserAdminEvent;
-
-/**
- * @version $Revision: 1.1 $
- */
-public class UserAdminEventAdapter extends EventAdapter {
-	// constants for Event topic substring
-	public static final String	TOPIC			= "org/osgi/service/useradmin/UserAdminEvent";
-	public static final String	ROLE_CREATED	= "ROLE_CREATED";
-	public static final String	ROLE_CHANGED	= "ROLE_CHANGED";
-	public static final String	ROLE_REMOVED	= "ROLE_REMOVED";
-	// constants for Event properties
-	public static final String	ROLE			= "role";
-	public static final String	ROLE_NAME		= "role.name";
-	public static final String	ROLE_TYPE		= "role.type";
-	private UserAdminEvent		event;
-
-	public UserAdminEventAdapter(UserAdminEvent event, EventAdmin eventAdmin) {
-		super(eventAdmin);
-		this.event = event;
-	}
-
-	/**
-	 * @return
-	 * @see org.eclipse.equinox.event.mapper.EventAdapter#convert()
-	 */
-	public Event convert() {
-		String typename = null;
-		switch (event.getType()) {
-			case UserAdminEvent.ROLE_CREATED :
-				typename = ROLE_CREATED;
-				break;
-			case UserAdminEvent.ROLE_CHANGED :
-				typename = ROLE_CHANGED;
-				break;
-			case UserAdminEvent.ROLE_REMOVED :
-				typename = ROLE_REMOVED;
-				break;
-			default :
-				return null;
-		}
-		String topic = TOPIC + Constants.TOPIC_SEPARATOR + typename;
-		Hashtable properties = new Hashtable();
-		ServiceReference ref = event.getServiceReference();
-		if (ref == null) {
-			throw new RuntimeException(
-					"UserAdminEvent's getServiceReference() returns null.");
-		}
-		putServiceReferenceProperties(properties, ref);
-		Role role = event.getRole();
-		if (role == null) {
-			throw new RuntimeException(
-					"UserAdminEvent's getRole() returns null.");
-		}
-		if (role != null) {
-			properties.put(ROLE, role);
-			properties.put(ROLE_NAME, role.getName());
-			properties.put(ROLE_TYPE, new Integer(role.getType()));
-		}
-		properties.put(Constants.EVENT, event);
-		Event converted = new Event(topic, properties);
-		return converted;
-	}
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/WireAdminEventAdapter.java b/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/WireAdminEventAdapter.java
deleted file mode 100644
index 4ae3bff..0000000
--- a/bundles/org.eclipse.equinox.event/src/org/eclipse/equinox/event/mapper/WireAdminEventAdapter.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.event.mapper;
-
-import java.util.Hashtable;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.event.Event;
-import org.osgi.service.event.EventAdmin;
-import org.osgi.service.wireadmin.Wire;
-import org.osgi.service.wireadmin.WireAdminEvent;
-
-/**
- * @version $Revision: 1.1 $
- */
-public class WireAdminEventAdapter extends EventAdapter {
-	// constants for Event topic substring
-	public static final String TOPIC = "org/osgi/service/wireadmin/WireAdminEvent";
-	public static final String WIRE_CREATED = "WIRE_CREATED";
-	public static final String WIRE_CONNECTED_T = "WIRE_CONNECTED";
-	public static final String WIRE_UPDATED = "WIRE_UPDATED";
-	public static final String WIRE_TRACE = "WIRE_TRACE";
-	public static final String WIRE_DISCONNECTED = "WIRE_DISCONNECTED";
-	public static final String WIRE_DELETED = "WIRE_DELETED";
-	public static final String PRODUCER_EXCEPTION = "PRODUCER_EXCEPTION";
-	public static final String CONSUMER_EXCEPTION = "CONSUMER_EXCEPTION";
-	// constants for Event properties
-	public static final String WIRE = "wire";
-	public static final String WIRE_FLAVORS = "wire.flavors";
-	public static final String WIRE_SCOPE = "wire.scope";
-	public static final String WIRE_CONNECTED_P = "wire.connected";
-	public static final String WIRE_VALID = "wire.valid";
-	private WireAdminEvent event;
-
-	public WireAdminEventAdapter(WireAdminEvent event, EventAdmin admin) {
-		super(admin);
-		this.event = event;
-	}
-
-	/**
-	 * @return
-	 * @see org.eclipse.equinox.event.mapper.EventAdapter#convert()
-	 */
-	public Event convert() {
-		String typename = null;
-		switch (event.getType()) {
-			case WireAdminEvent.WIRE_CONNECTED :
-				typename = WIRE_CONNECTED_T;
-				break;
-			case WireAdminEvent.WIRE_CREATED :
-				typename = WIRE_CREATED;
-				break;
-			case WireAdminEvent.WIRE_UPDATED :
-				typename = WIRE_UPDATED;
-				break;
-			case WireAdminEvent.WIRE_DELETED :
-				typename = WIRE_DELETED;
-				break;
-			case WireAdminEvent.WIRE_DISCONNECTED :
-				typename = WIRE_DISCONNECTED;
-				break;
-			case WireAdminEvent.WIRE_TRACE :
-				typename = WIRE_TRACE;
-				break;
-			case WireAdminEvent.PRODUCER_EXCEPTION :
-				typename = PRODUCER_EXCEPTION;
-				break;
-			case WireAdminEvent.CONSUMER_EXCEPTION :
-				typename = CONSUMER_EXCEPTION;
-				break;
-			default :
-				return null;
-		}
-		String topic = TOPIC + Constants.TOPIC_SEPARATOR + typename;
-		Hashtable properties = new Hashtable();
-		Throwable t = event.getThrowable();
-		if (t != null) {
-			putExceptionProperties(properties, t);
-		}
-		ServiceReference ref = event.getServiceReference();
-		if (ref == null) {
-			throw new RuntimeException("WireAdminEvent's getServiceReference() returns null.");
-		}
-		putServiceReferenceProperties(properties, ref);
-		Wire wire = event.getWire();
-		if (wire != null) {
-			properties.put(WIRE, wire);
-			if (wire.getFlavors() != null) {
-				properties.put(WIRE_FLAVORS, classes2strings(wire.getFlavors()));
-			}
-			if (wire.getScope() != null) {
-				properties.put(WIRE_SCOPE, wire.getScope());
-			}
-			properties.put(WIRE_CONNECTED_P, new Boolean(wire.isConnected()));
-			properties.put(WIRE_VALID, new Boolean(wire.isValid()));
-		}
-		properties.put(Constants.EVENT, event);
-		Event converted = new Event(topic, properties);
-		return converted;
-	}
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.equinox.http/.classpath b/bundles/org.eclipse.equinox.http/.classpath
deleted file mode 100644
index 065ac06..0000000
--- a/bundles/org.eclipse.equinox.http/.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.pde.core.requiredPlugins"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/bundles/org.eclipse.equinox.http/.cvsignore b/bundles/org.eclipse.equinox.http/.cvsignore
deleted file mode 100644
index ba077a4..0000000
--- a/bundles/org.eclipse.equinox.http/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-bin
diff --git a/bundles/org.eclipse.equinox.http/.project b/bundles/org.eclipse.equinox.http/.project
deleted file mode 100644
index 61067d2..0000000
--- a/bundles/org.eclipse.equinox.http/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.equinox.http</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/bundles/org.eclipse.equinox.http/.settings/org.eclipse.core.resources.prefs b/bundles/org.eclipse.equinox.http/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index 16532b2..0000000
--- a/bundles/org.eclipse.equinox.http/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Tue May 25 15:00:03 EDT 2004
-encoding/<project>=ISO-8859-1
-eclipse.preferences.version=1
diff --git a/bundles/org.eclipse.equinox.http/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.equinox.http/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index bfb7248..0000000
--- a/bundles/org.eclipse.equinox.http/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,49 +0,0 @@
-#Fri Dec 16 09:20:21 CST 2005
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=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=disabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-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.overridingPackageDefaultMethod=warning
-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=ignore
-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=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
diff --git a/bundles/org.eclipse.equinox.http/META-INF/MANIFEST.MF b/bundles/org.eclipse.equinox.http/META-INF/MANIFEST.MF
deleted file mode 100644
index 25b5ed6..0000000
--- a/bundles/org.eclipse.equinox.http/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,22 +0,0 @@
-Bundle-ManifestVersion: 2
-Bundle-Vendor: %bundleVendor
-Bundle-Version: 1.0.100.qualifier
-Bundle-Activator: org.eclipse.equinox.http.Activator
-Bundle-Copyright: %bundleCopyright
-Bundle-SymbolicName: org.eclipse.equinox.http
-Bundle-Name: %bundleName
-Import-Package: javax.servlet,
- javax.servlet.http,
- org.osgi.framework;version="1.0",
- org.osgi.service.cm;version="1.0",
- org.osgi.service.http;version="1.1",
- org.osgi.service.log;version="1.0",
- org.osgi.util.tracker;version="1.1",
- org.eclipse.osgi.util
-Export-Package: org.eclipse.equinox.http;x-internal:=true,
- org.eclipse.equinox.http.servlet;x-internal:=true,
- org.eclipse.equinox.socket;x-internal:=true,
- org.eclipse.equinox.socket.https;x-internal:=true
-Import-Service: org.osgi.service.log.LogService
-Export-Service: org.osgi.service.http.HttpService
-Bundle-Localization: plugin
diff --git a/bundles/org.eclipse.equinox.http/OSGI-INF/l10n/bundle_en.properties b/bundles/org.eclipse.equinox.http/OSGI-INF/l10n/bundle_en.properties
deleted file mode 100644
index 28c2b23..0000000
--- a/bundles/org.eclipse.equinox.http/OSGI-INF/l10n/bundle_en.properties
+++ /dev/null
@@ -1,33 +0,0 @@
-###############################################################################
-# Copyright (c) 1999, 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
-###############################################################################
-# NLS_MESSAGEFORMAT_ALL
-MIN_THREADS=Minimum Threads
-MIN_THREADS_DESC=The minimum number of threads allotted to the Http Service
-MAX_THREADS=Maximum Threads
-MAX_THREADS_DESC=The maximum number of threads allotted to the Http Service
-THREAD_PRIORITY=Thread Priority
-THREAD_PRIORITY_DESC=The priority of the Http Service Threads
-ADDRESS=Host Address
-ADDRESS_DESC=The Host Address to listen on
-PORT_NUMBER=Port Number
-PORT_NUMBER_DESC=The port number
-PORT_SCHEME=Port Scheme
-PORT_SCHEME_DESC=The protocol
-HTTP=http
-HTTPS=https
-THREAD_TIMEOUT=Keep-Alive thread timeout
-THREAD_TIMEOUT_DESC=The number of seconds to wait for another request before reclaiming the thread
-SERVICE_RANKING=Service Ranking
-SERVICE_RANKING_DESC=The service ranking framework property
-HTTP_GEN_SETTINGS=Http Service General Settings
-HTTP_GEN_SETTINGS_DESC=The general settings for the Http Service
-HTTP_SETTINGS=Http Service Settings
-HTTP_SETTINGS_DESC=The configurable settings for each registered Http Service
diff --git a/bundles/org.eclipse.equinox.http/OSGI-INF/metatype/METADATA.XML b/bundles/org.eclipse.equinox.http/OSGI-INF/metatype/METADATA.XML
deleted file mode 100644
index 3b64d2e..0000000
--- a/bundles/org.eclipse.equinox.http/OSGI-INF/metatype/METADATA.XML
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<metatype:MetaData xmlns:metatype="http://www.osgi.org/xmlns/metatype/v1.0.0">
-  <OCD id="org.eclipse.equinox.http.Http" name="%HTTP_GEN_SETTINGS" description="%HTTP_GEN_SETTINGS_DESC">
-	<AD id="http.minThreads" type="Integer" default="4" name="%MIN_THREADS" description="%MIN_THREADS_DESC" cardinality="0" min="0" max="63" />
-	<AD id="http.maxThreads" type="Integer" default="20" name="%MAX_THREADS" description="%MAX_THREADS_DESC" cardinality="0" min="0" max="63" />
-	<AD id="http.threadPriority" type="Integer" default="5" name="%THREAD_PRIORITY" description="%THREAD_PRIORITY_DESC" cardinality="0" min="1" max="10" />
-  </OCD>	
-  <OCD id="org.eclipse.equinox.http.HttpFactory" name="%HTTP_SETTINGS" description="%HTTP_SETTINGS_DESC">
-	<AD id="http.address" type="String" default="ALL" name="%ADDRESS" description="%ADDRESS_DESC" cardinality="0" />
-	<AD id="http.port" type="Integer" default="80" name="%PORT_NUMBER" description="%PORT_NUMBER_DESC" cardinality="0" min="0" max="65535"/>
-	<AD id="http.timeout" type="Integer" default="30" name="%THREAD_TIMEOUT" description="%THREAD_TIMEOUT_DESC" cardinality="0" min="0" max="600" />
-	<AD id="service.ranking" type="Integer" default="0" name="%SERVICE_RANKING" description="%SERVICE_RANKING_DESC" cardinality="0"/>
-  </OCD>
-    <Designate pid="org.eclipse.equinox.http.Http">
-        <Object ocdref="org.eclipse.equinox.http.Http"/> 
-    </Designate> 
-    <Designate pid="org.eclipse.equinox.http.HttpFactory" factoryPid="org.eclipse.equinox.http.HttpFactory">
-        <Object ocdref="org.eclipse.equinox.http.HttpFactory"/> 
-    </Designate>
-</metatype:MetaData>
diff --git a/bundles/org.eclipse.equinox.http/about.html b/bundles/org.eclipse.equinox.http/about.html
deleted file mode 100644
index 3989f53..0000000
--- a/bundles/org.eclipse.equinox.http/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 11, 2006</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 (&quot;EPL&quot;).  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, &quot;Program&quot; 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 (&quot;Redistributor&quot;) 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>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/bundles/org.eclipse.equinox.http/build.properties b/bundles/org.eclipse.equinox.http/build.properties
deleted file mode 100644
index e0ff5d7..0000000
--- a/bundles/org.eclipse.equinox.http/build.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-###############################################################################
-# Copyright (c) 2005 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
-###############################################################################
-bin.includes = META-INF/,\
-               plugin*.properties,\
-               about.html,\
-               .,\
-               OSGI-INF/
-src.includes = about.html
-source.. = src/
-output.. = bin/
diff --git a/bundles/org.eclipse.equinox.http/plugin.properties b/bundles/org.eclipse.equinox.http/plugin.properties
deleted file mode 100644
index ad0e815..0000000
--- a/bundles/org.eclipse.equinox.http/plugin.properties
+++ /dev/null
@@ -1,13 +0,0 @@
-###############################################################################
-# Copyright (c) 2005 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
-###############################################################################
-bundleVendor = Eclipse.org
-bundleName = HTTP Service
-bundleCopyright = Copyright (c) IBM Corp. 1999, 2005
diff --git a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/Activator.java b/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/Activator.java
deleted file mode 100644
index 7cc7531..0000000
--- a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/Activator.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1999, 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.http;
-
-import org.osgi.framework.BundleActivator;
-import org.osgi.framework.BundleContext;
-
-/**
- */
-
-public class Activator implements BundleActivator {
-	/*
-	 * ----------------------------------------------------------------------
-	 *      BundleActivator Interface implementation
-	 * ----------------------------------------------------------------------
-	 */
-
-	private Http http = null;
-
-	/**
-	 * Required by BundleActivator Interface.
-	 */
-	public void start(BundleContext context) throws Exception {
-		http = new Http(context);
-		http.start();
-	}
-
-	/**
-	 * Required by BundleActivator Interface.
-	 */
-	public void stop(BundleContext context) throws Exception {
-		http.stop();
-		http.close();
-		http = null;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/DefaultHttpContext.java b/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/DefaultHttpContext.java
deleted file mode 100644
index e63e4f1..0000000
--- a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/DefaultHttpContext.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1999, 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.http;
-
-import java.io.IOException;
-import java.net.URL;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import org.osgi.framework.Bundle;
-import org.osgi.service.http.HttpContext;
-
-public class DefaultHttpContext implements HttpContext {
-
-	protected Bundle bundle;
-	protected HttpSecurityTracker securityTracker;
-
-	public DefaultHttpContext(Bundle bundle, HttpSecurityTracker securityTracker) {
-		this.bundle = bundle;
-		this.securityTracker = securityTracker;
-	}
-
-	/* Implementation defined behavior */
-	public boolean handleSecurity(HttpServletRequest request, HttpServletResponse response) throws IOException {
-		return securityTracker.handleSecurity(request, response);
-	}
-
-	/* Behavior defined by OSGi spec */
-	public URL getResource(String name) {
-		return (new SecureAction()).getBundleResource(bundle, name);
-	}
-
-	/* Behavior defined by OSGi spec */
-	public String getMimeType(String name) {
-		return null;
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/ExternalMessages.properties b/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/ExternalMessages.properties
deleted file mode 100644
index aab018d..0000000
--- a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/ExternalMessages.properties
+++ /dev/null
@@ -1,59 +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
-###############################################################################
-# NLS_MESSAGEFORMAT_ALL 
-
-HTTP_ALIAS_ALREADY_REGISTERED_EXCEPTION=Alias {0} is already registered
-HTTP_SERVLET_ALREADY_REGISTERED_EXCEPTION=This servlet object has already been registered under a different alias
-HTTP_SERVLET_NULL_EXCEPTION=This servlet object is null.
-HTTP_SERVLET_EXCEPTION=Servlet Exception
-HTTP_ALIAS_UNREGISTER_EXCEPTION=Alias could not be unregistered
-HTTP_ALIAS_INVALID_EXCEPTION=Invalid alias {0} alias must start with a "/" but not end with a "/"
-HTTP_RESOURCE_NAME_INVALID_EXCEPTION=Invalid resource name {0} name must not end with a "/"
-HTTP_SERVET_INIT_EXCEPTION=Servlet init exception
-HTTP_DEFAULT_MIME_TABLE_ERROR=An error occured processing the default MIME table
-HTTP_STATUS_CODES_TABLE_ERROR=An error occured processing the status codes table
-HTTP_STATUS_CODE_NOT_FOUND=Unsupported
-HTTP_ACCEPT_SOCKET_EXCEPTION=Error while waiting on port {0}
-HTTP_PORT_IN_USE_EXCEPTION=Port {0} is use
-HTTP_INVALID_VALUE_RANGE_EXCEPTION=Value must be between {0} and {1}
-HTTP_CONNECTION_EXCEPTION=Error handling connection
-HTTP_INVALID_SCHEME_EXCEPTION=The scheme {0} is not supported
-HTTP_NO_HEADER_LINE_READ_EXCEPTION=No header line was read
-HTTP_QUERYDATA_PARSE_EXCEPTION=Exception parsing query data
-HTTP_INVALID_HEADER_LINE_EXCEPTION=Invalid header line: {0}
-HTTP_HEADER_LINE_TOO_LONG_EXCEPTION=Header line was larger than buffer size: {0}
-HTTP_UNEXPECTED_IOEXCEPTION=An unexpected IOException occurred
-HTTP_UNEXPECTED_RUNTIMEEXCEPTION=An unexpected RuntimeException occurred
-HTTP_ONLY_SUPPORTS_2_1=HttpService only supports servlet 2.1 specification.
-HTTP_HOST_UNKNOWN=The host address "{0}" is unknown.  Defaulting to all IP addresses.
-OSGi_Http_Service_IBM_Implementation_16=OSGi Http Service - IBM Implementation
-IBM_Http_Service_37=IBM Http Service
-Jan_1=Jan
-Feb_2=Feb
-Mar_3=Mar
-Apr_4=Apr
-May_5=May
-Jun_6=Jun
-Jul_7=Jul
-Aug_8=Aug
-Sep_9=Sep
-Oct_10=Oct
-Nov_11=Nov
-Dec_12=Dec
-Sun_13=Sun
-Mon_14=Mon
-Tue_15=Tue
-Wed_16=Wed
-Thu_17=Thu
-Fri_18=Fri
-Sat_19=Sat
-HTTP_DEFAULT_PORT_FORMAT_EXCEPTION={0} value is not an integer
-HTTP_THREAD_POOL_CREATE_NUMBER_ERROR=Failed to create thread number {0}
diff --git a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/Http.java b/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/Http.java
deleted file mode 100644
index f52ac51..0000000
--- a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/Http.java
+++ /dev/null
@@ -1,206 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1999, 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.http;
-
-import java.io.IOException;
-import java.net.InetAddress;
-import java.util.Hashtable;
-import java.util.Vector;
-import org.eclipse.equinox.http.servlet.HttpSessionImpl;
-import org.eclipse.equinox.socket.ServerSocketInterface;
-import org.eclipse.equinox.socket.https.HttpsServerSocket;
-import org.eclipse.osgi.util.NLS;
-import org.osgi.framework.BundleContext;
-import org.osgi.service.log.LogService;
-
-public class Http {
-	public static final boolean DEBUG = false;
-	BundleContext context;
-	private LogTracker log = null;
-
-	protected HttpConfiguration configuration;
-
-	/** Mapping of Session ID (String) => HttpSessionImpl */
-	protected Hashtable sessions;
-
-	protected Vector servlets;
-	protected StaticDataReader dataReader;
-
-	HttpSecurityTracker securityTracker;
-
-	protected Http(BundleContext context) throws Exception {
-		this.context = context;
-
-		initialize();
-	}
-
-	/**
-	 * Initializes fields.
-	 * <p>
-	 * Added for subclassing purposes
-	 */
-	protected void initialize() throws Exception {
-		log = new LogTracker(context, System.out);
-
-		securityTracker = new HttpSecurityTracker(context);
-
-		servlets = new Vector(15);
-
-		//initialize sessions Hashtable
-		sessions = new Hashtable(15);
-
-		//get a MIMETypes object to compute MIMETypes
-		dataReader = new StaticDataReader(this);
-	}
-
-	protected void start() throws Exception {
-		if (Http.DEBUG) {
-			logDebug("Starting Http Service bundle"); //$NON-NLS-1$
-		}
-
-		try {
-			configuration = new HttpConfiguration(this);
-		} catch (IOException e) {
-			logError("Http Service failed to start -- HALTING", e); //$NON-NLS-1$
-			stop();
-			throw e;
-		}
-
-		if (Http.DEBUG) {
-			logInfo("Http Service started"); //$NON-NLS-1$
-		}
-	}
-
-	protected void stop() {
-		if (Http.DEBUG) {
-			logDebug("Stopping Http Service bundle"); //$NON-NLS-1$
-		}
-
-		if (configuration != null) {
-			configuration.close();
-			configuration = null;
-		}
-
-		if (Http.DEBUG) {
-			logDebug("Http Service stopped"); //$NON-NLS-1$
-		}
-	}
-
-	protected void close() {
-
-		if (securityTracker != null) {
-			securityTracker.close();
-			securityTracker = null;
-		}
-
-		if (log != null) {
-			log.close();
-			log = null;
-		}
-	}
-
-	/**
-	 * @param session javax.servlet.http.HttpSession
-	 */
-	public void addSession(HttpSessionImpl session) {
-		sessions.put(session.getId(), session);
-	}
-
-	public void removeSession(HttpSessionImpl session) {
-		sessions.remove(session.getId());
-	}
-
-	/**
-	 * Returns a valid session from the cache.
-	 *
-	 * @param id ID of requested session.
-	 * @return Valid session object.
-	 */
-	public HttpSessionImpl getSession(String id) {
-		HttpSessionImpl session = (HttpSessionImpl) sessions.get(id);
-
-		if ((session != null) && (session.isValid(true))) {
-			return (session); /* session is valid */
-		}
-		/* session is null or invalid and has removed itself from the cache */
-
-		return (null);
-	}
-
-	/**
-	 * @return MIMETypes
-	 */
-	public String getMimeType(String name) {
-		return (dataReader.computeMimeType(name));
-	}
-
-	/**
-	 * @return java.lang.String
-	 * @param statusCode java.lang.String
-	 */
-	public String getStatusPhrase(int statusCode) {
-		return (dataReader.computeStatusPhrase(statusCode));
-	}
-
-	public void logDebug(String message) {
-		if (Http.DEBUG) {
-			System.out.println(message);
-
-			log.log(LogService.LOG_DEBUG, message);
-		}
-	}
-
-	public void logDebug(String message, Throwable t) {
-		if (Http.DEBUG) {
-			System.out.println(message);
-			t.printStackTrace(System.out);
-
-			log.log(LogService.LOG_DEBUG, message, t);
-		}
-	}
-
-	public void logError(String message, Throwable t) {
-		if (Http.DEBUG) {
-			System.out.println(message);
-			t.printStackTrace(System.out);
-		}
-
-		log.log(LogService.LOG_ERROR, message, t);
-	}
-
-	public void logInfo(String message) {
-		if (Http.DEBUG) {
-			System.out.println(message);
-		}
-
-		log.log(LogService.LOG_INFO, message);
-	}
-
-	public void logWarning(String message, Throwable t) {
-		if (Http.DEBUG) {
-			System.out.println(message);
-			t.printStackTrace(System.out);
-		}
-
-		log.log(LogService.LOG_WARNING, message, t);
-	}
-
-	protected ServerSocketInterface createSSLServerSocket(int port, int backlog, InetAddress address) throws IOException {
-		HttpsServerSocket socket;
-		try {
-			socket = new HttpsServerSocket(context, port, backlog, address);
-		} catch (UnsupportedOperationException ex) {
-			throw new IOException(NLS.bind(HttpMsg.HTTP_INVALID_SCHEME_EXCEPTION, "https"));  //$NON-NLS-1$
-		}
-		return (socket);
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/HttpConfiguration.java b/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/HttpConfiguration.java
deleted file mode 100644
index d951600..0000000
--- a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/HttpConfiguration.java
+++ /dev/null
@@ -1,577 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1999, 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.http;
-
-import java.io.IOException;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.security.*;
-import java.util.*;
-import org.eclipse.equinox.socket.ServerSocketInterface;
-import org.eclipse.osgi.util.NLS;
-import org.osgi.framework.*;
-import org.osgi.service.cm.*;
-
-/**
- * This class is the main configuration class for Http Service. It creates the
- * thread pool and the listeners and responds to configuration changes.
- */
-
-public class HttpConfiguration implements ManagedService, ManagedServiceFactory {
-
-	/** default HttpListener object for 'http' protocol
-	 * This object is set if ConfigurationAdmin has NOT configured any
-	 * HttpListeners and we are not waiting to be configured.
-	 */
-	private HttpListener defaultHttpListener;
-	/** default HttpListener object for 'https' protocol
-	 * This object is set if ConfigurationAdmin has NOT configured any
-	 * HttpListeners and we are not waiting to be configured.
-	 */
-	private HttpListener defaultHttpsListener;
-	/** Hashtable of HttpListener object configured by the ConfigurationAdmin
-	 * Configuration PID (String) => HttpListener object
-	 */
-	Hashtable configuredListeners;
-
-	protected Http http;
-
-	protected HttpThreadPool pool;
-
-	protected final static String enviroKeyHttpPort = "org.osgi.service.http.port"; //$NON-NLS-1$
-	protected final static String enviroKeyHttpsPort = "org.osgi.service.http.port.secure"; //$NON-NLS-1$
-	protected final static String enviroKeyHttpAddress = "org.eclipse.equinox.http.address"; //$NON-NLS-1$
-
-	protected final static String HTTPSERVICEPID = "org.eclipse.equinox.http.Http"; //$NON-NLS-1$
-	protected ServiceRegistration managedService;
-	protected final static String HTTPSERVICEFACTORYPID = "org.eclipse.equinox.http.HttpFactory"; //$NON-NLS-1$
-	protected ServiceRegistration managedServiceFactory;
-
-	protected final static String keyHttpMinThreads = "http.minThreads"; //$NON-NLS-1$
-	protected final static String keyHttpMaxThreads = "http.maxThreads"; //$NON-NLS-1$
-	protected final static String keyHttpThreadPriority = "http.threadPriority"; //$NON-NLS-1$
-	protected final static String keyHttpAddress = "http.address"; //$NON-NLS-1$
-	protected final static String keyHttpPort = "http.port"; //$NON-NLS-1$
-	protected final static String keyHttpScheme = "http.scheme"; //$NON-NLS-1$
-	protected final static String keyHttpTimeout = "http.timeout"; //$NON-NLS-1$
-
-	protected static final int DEFAULT_MINTHREADS = 4;
-	protected static final int DEFAULT_MAXTHREADS = 20;
-	protected static final int DEFAULT_THREADPRIOTRITY = Thread.NORM_PRIORITY;
-	protected static String DEFAULT_HTTP_ADDRESS = "ALL"; //$NON-NLS-1$
-	protected static int DEFAULT_HTTP_PORT = 80;
-	protected static int DEFAULT_HTTPS_PORT = 443;
-	protected static final int DEFAULT_TIMEOUT = 30;
-
-	/** Current minimum number of threads in the thread pool */
-	private int minThreads = DEFAULT_MINTHREADS;
-	/** Current maximum number of threads in the thread pool */
-	private int maxThreads = DEFAULT_MAXTHREADS;
-	/** Current priority of the the threads in the thread pool */
-	private int threadPriority = DEFAULT_THREADPRIOTRITY;
-
-	private boolean active;
-
-	/**
-	 * Constructor - create the Http Configuration object and start it.
-	 */
-	protected HttpConfiguration(Http http) throws IOException {
-		this.http = http;
-		active = true;
-
-		initialize();
-	}
-
-	/**
-	 * Initializes fields.
-	 * <p>
-	 */
-	protected void initialize() {
-		setDefaultPorts();
-		pool = new HttpThreadPool(http, minThreads, maxThreads, threadPriority);
-		configuredListeners = new Hashtable(7);
-		synchronized (configuredListeners) {
-			createDefaultListeners();
-		}
-
-		registerManagedService();
-		registerManagedServiceFactory();
-	}
-
-	protected void registerManagedService() {
-		/* Register a Managed Service to handle updates to the general configuration values */
-		Hashtable properties = new Hashtable(7);
-
-		properties.put(Constants.SERVICE_VENDOR, "IBM"); //$NON-NLS-1$
-		properties.put(Constants.SERVICE_DESCRIPTION, HttpMsg.OSGi_Http_Service_IBM_Implementation_16);
-		properties.put(Constants.SERVICE_PID, HTTPSERVICEPID);
-
-		managedService = http.context.registerService(ManagedService.class.getName(), this, properties);
-	}
-
-	protected void registerManagedServiceFactory() {
-		/* Register a Managed Service Factory to handle updates to the unique configuration values */
-		Hashtable properties = new Hashtable(7);
-
-		properties.put(Constants.SERVICE_VENDOR, "IBM"); //$NON-NLS-1$
-		properties.put(Constants.SERVICE_DESCRIPTION, HttpMsg.OSGi_Http_Service_IBM_Implementation_16);
-		properties.put(Constants.SERVICE_PID, HTTPSERVICEFACTORYPID);
-
-		managedServiceFactory = http.context.registerService(ManagedServiceFactory.class.getName(), this, properties);
-	}
-
-	/**
-	 * Create default Http Listeners if requested.
-	 * <p>
-	 */
-	protected void createDefaultListeners() {
-		if (DEFAULT_HTTP_PORT != -1) {
-			try {
-				defaultHttpListener = new HttpListener(http, this, createProperties(DEFAULT_HTTP_ADDRESS, DEFAULT_HTTP_PORT, "http", 30));//$NON-NLS-1$
-			} catch (IOException e) {
-				http.logError(HttpMsg.HTTP_UNEXPECTED_IOEXCEPTION, e);
-				http.logError(HttpMsg.HTTP_UNEXPECTED_RUNTIMEEXCEPTION, e);
-			}
-		}
-
-	}
-
-	/**
-	 * Close default Http Listeners if present.
-	 * <p>
-	 */
-	protected void closeDefaultListeners() {
-		if (defaultHttpListener != null) {
-			defaultHttpListener.close();
-			defaultHttpListener = null;
-		}
-
-		if (defaultHttpsListener != null) {
-			defaultHttpsListener.close();
-			defaultHttpsListener = null;
-		}
-	}
-
-	/**
-	 * Create default Http Listeners if requested.
-	 * <p>
-	 */
-	protected void setDefaultPorts() {
-		BundleContext context = http.context;
-
-		String property = context.getProperty(enviroKeyHttpPort);
-		if (property != null) {
-			try {
-				DEFAULT_HTTP_PORT = Integer.parseInt(property);
-			} catch (NumberFormatException e) {
-				http.logWarning(NLS.bind(HttpMsg.HTTP_DEFAULT_PORT_FORMAT_EXCEPTION, enviroKeyHttpPort), e);
-			}
-		}
-
-		property = context.getProperty(enviroKeyHttpsPort);
-		if (property != null) {
-			try {
-				DEFAULT_HTTPS_PORT = Integer.parseInt(property);
-			} catch (NumberFormatException e) {
-				http.logWarning(NLS.bind(HttpMsg.HTTP_DEFAULT_PORT_FORMAT_EXCEPTION, enviroKeyHttpsPort), e);
-			}
-		}
-
-		DEFAULT_HTTP_ADDRESS = context.getProperty(enviroKeyHttpAddress);
-		if (DEFAULT_HTTP_ADDRESS == null) {
-			DEFAULT_HTTP_ADDRESS = "ALL"; //$NON-NLS-1$
-		}
-	}
-
-	protected Dictionary createProperties(String address, int port, String scheme, int socketTimeout) {
-		Hashtable properties = new Hashtable(31);
-
-		properties.put(Constants.SERVICE_VENDOR, "IBM"); //$NON-NLS-1$
-		properties.put(Constants.SERVICE_DESCRIPTION, HttpMsg.OSGi_Http_Service_IBM_Implementation_16);
-		properties.put(Constants.SERVICE_PID, "org.eclipse.equinox.http.HttpService-" + scheme); //$NON-NLS-1$
-		properties.put(keyHttpAddress, address);
-		properties.put(keyHttpPort, new Integer(port));
-		properties.put(keyHttpScheme, scheme);
-		properties.put(keyHttpTimeout, new Integer(socketTimeout));
-
-		return (properties);
-	}
-
-	protected ServerSocketInterface createServerSocket(String address, int port, String scheme) throws IOException {
-		InetAddress netAddress = null;
-		if (address != null) {
-			try {
-				netAddress = InetAddress.getByName(address);
-			} catch (UnknownHostException uhe) {
-				http.logWarning(NLS.bind(HttpMsg.HTTP_HOST_UNKNOWN, address), uhe);
-			}
-		}
-		if ("http".equalsIgnoreCase(scheme)) //$NON-NLS-1$
-		{
-			try {
-				ServerSocketInterface ssi = new HttpServerSocket(port, 50, netAddress);
-				ssi.setAddress(address);
-				return ssi;
-			} catch (IOException e) {
-				http.logError(NLS.bind(HttpMsg.HTTP_PORT_IN_USE_EXCEPTION, new Integer(port)), e);
-
-				throw e;
-			}
-		}
-
-		if ("https".equalsIgnoreCase(scheme)) //$NON-NLS-1$
-		{
-			try {
-				ServerSocketInterface ssi = http.createSSLServerSocket(port, 50, netAddress);
-				ssi.setAddress(address);
-				return ssi;
-			} catch (IOException e) {
-				http.logError(NLS.bind(HttpMsg.HTTP_PORT_IN_USE_EXCEPTION, new Integer(port)), e);
-
-				throw e;
-			}
-		}
-
-		throw new IOException(NLS.bind(HttpMsg.HTTP_INVALID_SCHEME_EXCEPTION, scheme));
-	}
-
-	void close() {
-		active = false;
-
-		managedService.unregister();
-
-		managedServiceFactory.unregister();
-
-		if (defaultHttpListener != null) {
-			defaultHttpListener.close();
-			defaultHttpListener = null;
-		}
-
-		if (defaultHttpsListener != null) {
-			defaultHttpsListener.close();
-			defaultHttpsListener = null;
-		}
-
-		Enumeration listeners = configuredListeners.elements();
-		while (listeners.hasMoreElements()) {
-			HttpListener listener = (HttpListener) listeners.nextElement();
-
-			listener.close();
-		}
-
-		pool.close();
-	}
-
-	/**
-	 * Return a descriptive name of this ManagedServiceFactory.
-	 *
-	 * @return the name for the factory, which might be localized
-	 */
-	public String getName() {
-		return HttpMsg.IBM_Http_Service_37;
-	}
-
-	/**
-	 * Create a new instance, or update the configuration of an
-	 * existing instance.
-	 *
-	 * If the PID of the <tt>Configuration</tt> object is new for the Managed Service Factory,
-	 * then create a new factory instance, using the configuration
-	 * <tt>properties</tt> provided. Else, update the service instance with the
-	 * provided <tt>properties</tt>.
-	 *
-	 * <p>If the factory instance is registered with the Framework, then
-	 * the configuration <tt>properties</tt> 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 <tt>Exception</tt>, the
-	 * Configuration Admin service must catch it and should log it.
-	 *
-	 * <p>When the implementation of updated detects any kind of
-	 * error in the configuration properties, it should create a
-	 * new {@Link ConfigurationException}which describes the problem.
-	 *
-	 * <p>The Configuration Admin service must call this method on a thread
-	 * other than the thread which necessitated the callback. This implies that
-	 * implementors of the <tt>ManagedServiceFactory</tt> class can be assured that the
-	 * callback will not take place during registration when they
-	 * execute the registration in a synchronized method.
-	 *
-	 * @param pid the PID for this configuration
-	 * @param properties the configuration properties
-	 * @throws ConfigurationException when the configuration properties are invalid
-	 */
-	public void updated(final String pid, final Dictionary properties) throws ConfigurationException {
-		if (active) {
-			String address = DEFAULT_HTTP_ADDRESS;
-			int port = DEFAULT_HTTP_PORT;
-			String scheme = "http"; //$NON-NLS-1$
-			int timeout = DEFAULT_TIMEOUT;
-
-			/* Get configuration values and validate */
-			String key = keyHttpPort;
-			Object portProperty = properties.get(key);
-			if (portProperty != null) /* if null we will just use the default */
-			{
-				if (!(portProperty instanceof Integer)) {
-					throw new ConfigurationException(key, "not an Integer"); //$NON-NLS-1$
-				}
-
-				port = ((Integer) portProperty).intValue();
-
-				if ((port < 0) || (port > 65535)) {
-					throw new ConfigurationException(key, "must be in the range 0-65535"); //$NON-NLS-1$
-				}
-			}
-
-			key = keyHttpScheme;
-			Object schemeProperty = properties.get(key);
-			if (schemeProperty != null) /* if null we will just use the default */
-			{
-				if (!(schemeProperty instanceof String)) {
-					throw new ConfigurationException(key, "not an String"); //$NON-NLS-1$
-				}
-
-				scheme = (String) schemeProperty;
-
-				if (!(scheme.equals("http") || scheme.equals("https"))) //$NON-NLS-1$ //$NON-NLS-2$
-				{
-					throw new ConfigurationException(key, "must be either http or https"); //$NON-NLS-1$
-				}
-			}
-
-			key = keyHttpAddress;
-			Object addressProperty = properties.get(key);
-			if (addressProperty != null) /* if null we will just use the default */
-			{
-				if (!(addressProperty instanceof String)) {
-					throw new ConfigurationException(key, "not an String"); //$NON-NLS-1$
-				}
-
-				address = (String) addressProperty;
-			}
-
-			key = keyHttpTimeout;
-			Object timeoutProperty = properties.get(key);
-			if (timeoutProperty != null) /* if null we will just use the default */
-			{
-				if (!(timeoutProperty instanceof Integer)) {
-					throw new ConfigurationException(key, "not an Integer"); //$NON-NLS-1$
-				}
-
-				timeout = ((Integer) timeoutProperty).intValue();
-
-				if ((timeout < 0) || (timeout > 600)) {
-					throw new ConfigurationException(key, "must be in the range 0-600"); //$NON-NLS-1$
-				}
-			}
-
-			if (schemeProperty == null) {
-				if (port == DEFAULT_HTTPS_PORT) {
-					scheme = "https"; //$NON-NLS-1$
-				}
-			} else {
-				if (portProperty == null) {
-					if (scheme.equals("https")) //$NON-NLS-1$
-					{
-						port = DEFAULT_HTTPS_PORT;
-					}
-				}
-			}
-
-			if (addressProperty == null) {
-				properties.put(keyHttpAddress, address);
-			}
-			if (schemeProperty == null) {
-				properties.put(keyHttpScheme, scheme);
-			}
-			if (portProperty == null) {
-				properties.put(keyHttpPort, new Integer(port));
-			}
-			if (timeoutProperty == null) {
-				properties.put(keyHttpTimeout, new Integer(timeout));
-			}
-
-			properties.remove("service.bundleLocation"); /* Don't want to publish this! *///$NON-NLS-1$
-			properties.put(Constants.SERVICE_VENDOR, "IBM"); //$NON-NLS-1$
-			properties.put(Constants.SERVICE_DESCRIPTION, HttpMsg.OSGi_Http_Service_IBM_Implementation_16);
-
-			/* Configuration values have been validated */
-			synchronized (configuredListeners) {
-				try {
-					AccessController.doPrivileged(new PrivilegedExceptionAction() {
-						public Object run() throws ConfigurationException {
-							if (configuredListeners.size() == 0) {
-								closeDefaultListeners();
-							}
-
-							HttpListener listener = (HttpListener) configuredListeners.get(pid);
-
-							try {
-								if (listener != null) {
-									listener.setProperties(properties);
-								} else {
-									listener = new HttpListener(http, HttpConfiguration.this, properties);
-
-									configuredListeners.put(pid, listener);
-								}
-							} catch (IOException e) {
-								http.logError(HttpMsg.HTTP_UNEXPECTED_IOEXCEPTION, e);
-
-								if (configuredListeners.size() == 0) {
-									createDefaultListeners();
-								}
-
-								throw new ConfigurationException(null, e.getMessage());
-							}
-
-							return null;
-						}
-					});
-				} catch (PrivilegedActionException pae) {
-					throw (ConfigurationException) pae.getException();
-				}
-			}
-		}
-	}
-
-	/**
-	 * Remove a factory instance.
-	 *
-	 * 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 <tt>Exception</tt>, the Configuration Admin
-	 * service must catch it and should log it.
-	 * <p> The Configuration Admin service must call this method on a thread
-	 * other than the thread which called <tt>delete()</tt> on the corresponding
-	 * <tt>Configuration</tt> object.
-	 *
-	 * @param pid the PID of the service to be removed
-	 */
-	public void deleted(final String pid) {
-		if (active) {
-			synchronized (configuredListeners) {
-				AccessController.doPrivileged(new PrivilegedAction() {
-					public Object run() {
-						HttpListener listener = (HttpListener) configuredListeners.remove(pid);
-
-						if (listener != null) {
-							listener.close();
-						}
-
-						if (configuredListeners.size() == 0) {
-							createDefaultListeners();
-						}
-
-						return null;
-					}
-				});
-			}
-		}
-	}
-
-	/**
-	 * Update the configuration for a Managed Service.
-	 *
-	 * <p>When the implementation of <tt>updated(Dictionary)</tt> detects any kind of
-	 * error in the configuration properties, it should create a
-	 * new <tt>ConfigurationException</tt> 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 <tt>Exception</tt>, the
-	 * Configuration Admin service must catch it and should log it.
-	 * <p> The Configuration Admin service must call this method on a thread
-	 * other than the thread which initiated the callback. This
-	 * implies that implementors of Managed Service can be assured
-	 * that the callback will not take place during registration
-	 * when they execute the registration in a synchronized method.
-	 *
-	 * @param properties configuration properties, or <tt>null</tt>
-	 * @throws ConfigurationException when the update fails
-	 */
-	public void updated(Dictionary properties) throws ConfigurationException {
-		/* Since updated is called asynchronously, we may have stopped
-		 * after the decision was made to call.
-		 */
-		if (active) {
-			if (properties == null) {
-				/* We have no configuration; we will just use our defaults */
-				return;
-			}
-
-			int min = minThreads;
-			int max = maxThreads;
-			int priority = threadPriority;
-
-			/* Get configuration values and validate */
-			String key = keyHttpMinThreads;
-			Object property = properties.get(key);
-			if (property != null) /* if null we will just use the default */
-			{
-				if (!(property instanceof Integer)) {
-					throw new ConfigurationException(key, "not an Integer"); //$NON-NLS-1$
-				}
-
-				min = ((Integer) property).intValue();
-
-				if ((min < 0) || (min > 63)) {
-					throw new ConfigurationException(key, "must be in the range 0-63"); //$NON-NLS-1$
-				}
-			}
-
-			key = keyHttpMaxThreads;
-			property = properties.get(key);
-			if (property != null) /* if null we will just use the default */
-			{
-				if (!(property instanceof Integer)) {
-					throw new ConfigurationException(key, "not an Integer"); //$NON-NLS-1$
-				}
-
-				max = ((Integer) property).intValue();
-
-				if ((max < 0) || (max > 63)) {
-					throw new ConfigurationException(key, "must be in the range 0-63"); //$NON-NLS-1$
-				}
-			}
-
-			key = keyHttpThreadPriority;
-			property = properties.get(key);
-			if (property != null) /* if null we will just use the default */
-			{
-				if (!(property instanceof Integer)) {
-					throw new ConfigurationException(key, "not an Integer"); //$NON-NLS-1$
-				}
-
-				priority = ((Integer) property).intValue();
-
-				if ((priority < Thread.MIN_PRIORITY) || (priority > Thread.MAX_PRIORITY)) {
-					throw new ConfigurationException(key, "must be one of the Thread defined priorities"); //$NON-NLS-1$
-				}
-			}
-
-			/* Configuration values have been validated */
-			if ((max != maxThreads) || (min != minThreads)) {
-				pool.setSize(min, max);
-
-				/* Get the values from the pool in case it adjusted them */
-				minThreads = pool.getLowerSizeLimit();
-				maxThreads = pool.getUpperSizeLimit();
-			}
-
-			if (priority != threadPriority) {
-				pool.setPriority(priority);
-				threadPriority = priority;
-			}
-		}
-	}
-}
diff --git a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/HttpConnection.java b/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/HttpConnection.java
deleted file mode 100644
index d638530..0000000
--- a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/HttpConnection.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:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.equinox.http;
-
-import java.io.IOException;
-import java.io.InterruptedIOException;
-import java.net.SocketException;
-import javax.servlet.ServletException;
-import org.eclipse.equinox.socket.SocketInterface;
-
-/* @ThreadSafe */
-public class HttpConnection implements Runnable {
-	/** Master HTTP object */
-	private final Http http;
-
-	/** socket that this thread is operating */
-	private final SocketInterface socket;
-
-	/** Listener this thread is working for */
-	private final HttpListener listener;
-
-	/** if true, we support Keep-Alive for the socket */
-	private volatile boolean supportKeepAlive;
-
-	public HttpConnection(Http http, HttpListener listenerParam, SocketInterface socketParam, int socketTimeout) {
-		this.http = http;
-		this.listener = listenerParam;
-		this.socket = socketParam;
-		boolean keepAlive;
-		if (socketTimeout > 0) {
-			try {
-				socketParam.setSoTimeout(socketTimeout);
-
-				keepAlive = true;
-			} catch (SocketException e) {
-				keepAlive = false;
-			}
-		} else {
-			keepAlive = false;
-		}
-
-		setKeepAlive(keepAlive);
-	}
-
-	public void run() {
-		boolean keepAlive = false;
-
-		try {
-			if (Http.DEBUG) {
-				http.logDebug(Thread.currentThread().getName() + ": Processing request on socket: " + socket); //$NON-NLS-1$
-			}
-
-			socket.markInactive(); /* mark inactive: we are not actively processing a request */
-
-			listener.handleConnection(socket);
-
-			keepAlive = supportKeepAlive && !socket.isClosed();
-		} catch (InterruptedIOException e) {
-			/*
-			 * A read on the socket did not complete within the timeout period.
-			 */
-			keepAlive = false;
-
-			if (Http.DEBUG) {
-				http.logDebug(Thread.currentThread().getName() + ": Read Timeout while processing connection on socket: " + socket, e); //$NON-NLS-1$
-			}
-		} catch (SocketException e) {
-			/*
-			 * Most likely the user agent closed the socket.
-			 */
-			keepAlive = false;
-
-			if (Http.DEBUG) {
-				http.logDebug(Thread.currentThread().getName() + ": Socket Exception while processing connection on socket: " + socket, e); //$NON-NLS-1$
-			}
-		}
-		// BUGBUG Need to handle UnavailableException
-		// Servlet 2.2 Section 3.3.3.2
-		// BUGBUG An unhandled exception should result in flushing the response
-		// buff and returning status code 500.
-		// Servlet 2.3 Section 9.9.2
-		catch (ServletException e) {
-			/*
-			 * The Servlet threw a ServletException.
-			 */
-			keepAlive = false;
-
-			http.logWarning(HttpMsg.HTTP_SERVLET_EXCEPTION, e);
-		} catch (IOException e) {
-			/*
-			 * The Servlet threw an IOException.
-			 */
-			keepAlive = false;
-
-			http.logWarning(HttpMsg.HTTP_CONNECTION_EXCEPTION, e);
-		} catch (Throwable t) {
-			/*
-			 * Some exception has occurred. Log it and keep the thread working.
-			 */
-			keepAlive = false;
-
-			http.logError(HttpMsg.HTTP_CONNECTION_EXCEPTION, t);
-		} finally {
-			if (!keepAlive) {
-				if (!socket.isClosed()) {
-					try {
-						if (Http.DEBUG) {
-							http.logDebug(Thread.currentThread().getName() + ": Closing socket: " + socket); //$NON-NLS-1$
-						}
-
-						socket.close();
-					} catch (IOException e) {
-						// TODO: consider logging
-					}
-				}
-			}
-		}
-	}
-
-	public void setKeepAlive(boolean keepAlive) {
-		supportKeepAlive = keepAlive;
-	}
-
-	public boolean isClosed() {
-		return socket.isClosed();
-	}
-
-	public void close() throws IOException {
-		socket.close();
-	}
-
-	public boolean isActive() {
-		return socket.isActive();
-	}
-
-	public String toString() {
-		return socket.toString();
-	}
-}
diff --git a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/HttpDate.java b/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/HttpDate.java
deleted file mode 100644
index 17fc8d0..0000000
--- a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/HttpDate.java
+++ /dev/null
@@ -1,388 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1999, 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.http;
-
-import java.util.*;
-
-/**
- * <b>HTTPDate</b> provides several services with regards to dates and date formatting.
- */
-public class HttpDate {
-
-	protected Calendar time;
-	private boolean valid = true;
-
-	private static final String[] MONTH_NAMES = {HttpMsg.Jan_1, HttpMsg.Feb_2, HttpMsg.Mar_3, HttpMsg.Apr_4, HttpMsg.May_5, HttpMsg.Jun_6, HttpMsg.Jul_7, HttpMsg.Aug_8, HttpMsg.Sep_9, HttpMsg.Oct_10, HttpMsg.Nov_11, HttpMsg.Dec_12};
-	private static final String[] WEEK_DAYS = {HttpMsg.Sun_13, HttpMsg.Mon_14, HttpMsg.Tue_15, HttpMsg.Wed_16, HttpMsg.Thu_17, HttpMsg.Fri_18, HttpMsg.Sat_19};
-
-	private static TimeZone gmt = null;
-
-	/**
-	 * Constructs an HTTPDate object representing the current time.
-	 */
-	public HttpDate() { // Now...
-		if (gmt == null) {
-			gmt = TimeZone.getTimeZone("GMT"); //$NON-NLS-1$
-		}
-		time = new GregorianCalendar(gmt);
-	}
-
-	/**
-	 * Constructs an HTTPDate object from the passed long.
-	 * @param itime the number of uSeconds since the epoch.
-	 */
-	public HttpDate(long iTime) { // Raw mill seconds
-		this();
-		time.setTime(new Date(iTime));
-	}
-
-	/**
-	 * Constructs an HTTPDate object from an RFC compliant string.
-	 * @param iString the time in a formatted string.
-	 */
-	public HttpDate(String iString) { // RFC2068 3.3.1 compliant
-		this();
-		if (iString.indexOf(",") > 0) //$NON-NLS-1$
-		{
-			if (iString.indexOf("-") > 0) //$NON-NLS-1$
-			{
-				parseRFC1036(iString);
-			} else {
-				parseRFC1123(iString);
-			}
-		} else { //asctime type
-			parseASC(iString);
-		}
-	}
-
-	/**
-	 * Constructs an HTTPDate object from the passed long.
-	 * @param itime the number of uSeconds since the epoch.
-	 */
-	public HttpDate(Date iTime) { // Raw mill seconds
-		this();
-		time.setTime(iTime);
-	}
-
-	/**
-	 * Returns the Date/Time time as an RFC 1123 formatted String
-	 */
-	public static String format(long time) {
-		return (new HttpDate(time).toString());
-	}
-
-	protected void formatDoubleDigit(StringBuffer buff, int val) {
-		if (val < 10) {
-			buff.append('0');
-		}
-
-		buff.append(val);
-	}
-
-	/**
-	 * Returns the time represented as a long.  This represents the number
-	 * of uSeconds since the epoch.
-	 * @return the time represented as a long.
-	 */
-	public long getAsLong() {
-		return (time.getTime().getTime());
-	}
-
-	/**
-	 * Returns the time represented as a string.
-	 * @return the time represented as a string.
-	 */
-	public String getAsString() {
-		return (toString());
-	}
-
-	/**
-	 * Returns the day of the month of the internal time, starting at 1
-	 * @return the day of the month.
-	 */
-	public int getDay() {
-		return (time.get(Calendar.DATE));
-	}
-
-	/**
-	 * Returns the day of the week of the internal time.
-	 * The number is in the range of 0 to 6 where 0 represents Sunday.
-	 * @return  the day of the week.
-	 */
-	public int getDayOfWeek() {
-		return (time.get(Calendar.DAY_OF_WEEK) - 1);
-	}
-
-	/**
-	 * Returns the hour of the day of the internal time. 24 Hour time
-	 * @return  the hour.
-	 */
-	public int getHour() {
-		return (time.get(Calendar.HOUR_OF_DAY));
-	}
-
-	/**
-	 * Returns the minute of the hour of the internal time.
-	 * @return  the minute.
-	 */
-	public int getMin() {
-		return (time.get(Calendar.MINUTE));
-	}
-
-	/**
-	 * Returns the month of the year of the internal time.
-	 * The number is in the range of 0 to 11 where 0 represents January.
-	 * @return  the month of the year.
-	 */
-	public int getMonth() {
-		return (time.get(Calendar.MONTH));
-	}
-
-	/**
-	 * Returns the second of the minute of the internal time.
-	 * @return  the second.
-	 */
-	public int getSec() {
-		return (time.get(Calendar.SECOND));
-	}
-
-	/**
-	 * Returns the year of the internal time.
-	 * @return  the year.
-	 */
-	public int getYear() {
-		return (time.get(Calendar.YEAR));
-	}
-
-	/**
-	 * Checks wether or not the Date this object represents is valid.
-	 *  It would be Invalid if the string used to construct the object was a NON
-	 * RFC 1123, 1036 or ASC Time conforming Date String.
-	 * @return true if this object represents a REAL date.
-	 */
-	public boolean isValid() {
-		return (valid);
-	}
-
-	protected int locateMonth(String monthString) throws NumberFormatException {
-		for (int i = 0; i < 12; i++) {
-			if (MONTH_NAMES[i].equals(monthString)) {
-				return (i);
-			}
-		}
-		throw new NumberFormatException("Invalid month: " + monthString); //$NON-NLS-1$
-	}
-
-	/**
-	 * Returns the current Date/Time as an RFC ASC Time formatted String
-	 */
-	public static String now() {
-		return (new HttpDate().toString());
-	}
-
-	protected void parseASC(String str) {
-		//ASCTIMEFMT  = "EEE MMM dD HH:MM:SS YYYY"
-		//               012345678901234567890123
-
-		int day, month, year, hour, min, sec;
-
-		parsedate: try {
-			/* ignore day */
-
-			if (str.charAt(3) != ' ') {
-				break parsedate;
-			}
-
-			month = locateMonth(str.substring(4, 7));
-
-			if (str.charAt(7) != ' ') {
-				break parsedate;
-			}
-
-			if (str.charAt(8) == ' ') {
-				day = Integer.parseInt(str.substring(9, 10));
-			} else {
-				day = Integer.parseInt(str.substring(8, 10));
-			}
-
-			if (str.charAt(10) != ' ') {
-				break parsedate;
-			}
-
-			hour = Integer.parseInt(str.substring(11, 13));
-
-			if (str.charAt(13) != ':') {
-				break parsedate;
-			}
-
-			min = Integer.parseInt(str.substring(14, 16));
-
-			if (str.charAt(16) != ':') {
-				break parsedate;
-			}
-
-			sec = Integer.parseInt(str.substring(17, 19));
-
-			if (str.charAt(19) != ' ') {
-				break parsedate;
-			}
-
-			year = Integer.parseInt(str.substring(20));
-
-			time.set(year, month, day, hour, min, sec);
-			return;
-		} catch (NumberFormatException e) {
-			valid = false;
-		}		
-	}
-
-	protected void parseRFC1036(String str) {
-		//RFC1036DATEFMT = "EEEE, DD-MMM-YY HH:MM:SS ZZZ"
-		//                        0123456789012345678901
-
-		int day, month, year, hour, min, sec;
-		parsedate: try {
-			/* skip past day */
-
-			int i = str.indexOf(", "); //$NON-NLS-1$
-
-			if (i == -1) {
-				break parsedate;
-			}
-
-			str = str.substring(i + 2);
-
-			day = Integer.parseInt(str.substring(0, 2));
-
-			if (str.charAt(2) != '-') {
-				break parsedate;
-			}
-
-			month = locateMonth(str.substring(3, 6));
-
-			if (str.charAt(6) != '-') {
-				break parsedate;
-			}
-
-			year = Integer.parseInt(str.substring(7, 9));
-			year += (year < 70) ? 2000 : 1900; /* y2k window */
-
-			if (str.charAt(9) != ' ') {
-				break parsedate;
-			}
-
-			hour = Integer.parseInt(str.substring(10, 12));
-
-			if (str.charAt(12) != ':') {
-				break parsedate;
-			}
-
-			min = Integer.parseInt(str.substring(13, 15));
-
-			if (str.charAt(15) != ':') {
-				break parsedate;
-			}
-
-			sec = Integer.parseInt(str.substring(16, 18));
-
-			if (str.charAt(18) != ' ') {
-				break parsedate;
-			}
-
-			time.set(year, month, day, hour, min, sec);
-		} catch (NumberFormatException e) {
-			valid = false;
-		}
-	}
-
-	protected void parseRFC1123(String str) {
-		//RFC1123DATEFMT = "EEE, DD MMM YYYY HH:MM:SS ZZZ"
-		//                  01234567890123456789012345678
-
-		int day, month, year, hour, min, sec;
-
-		parsedate: try {
-			/* ignore day */
-
-			if ((str.charAt(3) != ',') || (str.charAt(4) != ' ')) {
-				break parsedate;
-			}
-
-			day = Integer.parseInt(str.substring(5, 7));
-
-			if (str.charAt(7) != ' ') {
-				break parsedate;
-			}
-
-			month = locateMonth(str.substring(8, 11));
-
-			if (str.charAt(11) != ' ') {
-				break parsedate;
-			}
-
-			year = Integer.parseInt(str.substring(12, 16));
-
-			if (str.charAt(16) != ' ') {
-				break parsedate;
-			}
-
-			hour = Integer.parseInt(str.substring(17, 19));
-
-			if (str.charAt(19) != ':') {
-				break parsedate;
-			}
-
-			min = Integer.parseInt(str.substring(20, 22));
-
-			if (str.charAt(22) != ':') {
-				break parsedate;
-			}
-
-			sec = Integer.parseInt(str.substring(23, 25));
-
-			if (str.charAt(25) != ' ') {
-				break parsedate;
-			}
-
-			time.set(year, month, day, hour, min, sec);
-		} catch (NumberFormatException e) {
-			valid = false;
-		}
-
-
-	}
-
-	/**
-	 * Returns the time represented as an RFC1123 string.
-	 * @return the time represented as a string.
-	 */
-	public String toString() {
-		StringBuffer buff = new StringBuffer(30);
-		buff.append(WEEK_DAYS[getDayOfWeek()]);
-		buff.append(", "); //$NON-NLS-1$
-		formatDoubleDigit(buff, getDay());
-		buff.append(' ');
-		buff.append(MONTH_NAMES[getMonth()]);
-		buff.append(' ');
-		buff.append(getYear());
-		buff.append(' ');
-
-		formatDoubleDigit(buff, getHour());
-		buff.append(':');
-		formatDoubleDigit(buff, getMin());
-		buff.append(':');
-		formatDoubleDigit(buff, getSec());
-		buff.append(' ');
-		buff.append(time.getTimeZone().getID());
-
-		return (buff.toString());
-	}
-}
diff --git a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/HttpListener.java b/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/HttpListener.java
deleted file mode 100644
index 6f8349d..0000000
--- a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/HttpListener.java
+++ /dev/null
@@ -1,485 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1999, 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.http;
-
-import java.io.IOException;
-import java.net.InetAddress;
-import java.net.Socket;
-import java.util.*;
-
-import javax.servlet.Servlet;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletResponse;
-
-import org.eclipse.equinox.http.servlet.*;
-import org.eclipse.equinox.socket.ServerSocketInterface;
-import org.eclipse.equinox.socket.SocketInterface;
-import org.eclipse.osgi.util.NLS;
-import org.osgi.framework.*;
-import org.osgi.service.http.HttpContext;
-import org.osgi.service.http.NamespaceException;
-
-public class HttpListener extends Thread implements ServiceFactory {
-	protected Http http;
-	/** ServerSocket upon which this listener operates */
-	protected volatile ServerSocketInterface serverSocket;
-	/** Controlling HttpConfiguration object */
-	protected HttpConfiguration configuration;
-	/** if true this thread must terminate */
-	protected volatile boolean running;
-	protected ServiceRegistration service;
-	private String httpsvcClass = "org.osgi.service.http.HttpService"; //$NON-NLS-1$
-	protected Hashtable registrations;
-	/** Mapping of HttpContext => ServletContextImpl */
-	protected Hashtable servletContexts;
-	protected int socketTimeout;
-	protected Object lock = new Object();
-
-	/**
-	 * Constructor.
-	 *
-	 */
-	protected HttpListener(Http http, HttpConfiguration configuration, Dictionary properties) throws IOException {
-		this.http = http;
-		this.configuration = configuration;
-		registrations = new Hashtable(51);
-		//initialize servletContext Hashtable
-		servletContexts = new Hashtable(15);
-		setProperties(properties);
-		start();
-	}
-
-	/**
-	 * Returns true if this thread has been closed.
-	 * @return boolean
-	 */
-	public boolean isClosed() {
-		return (!running);
-	}
-
-	/**
-	 * Close this thread.
-	 */
-	public void close() {
-		running = false;
-		try {
-			setProperties(null);
-		} catch (IOException e) {
-			/* this will not occur when calling with null */
-		}
-
-		servletContexts = null;
-	}
-
-	/*
-	 * ----------------------------------------------------------------------
-	 *      ServiceFactory Interface implementation
-	 * ----------------------------------------------------------------------
-	 */
-	public Object getService(Bundle bundle, ServiceRegistration reg) {
-		return (new HttpService(this, bundle));
-	}
-
-	public void ungetService(Bundle bundle, ServiceRegistration reg, Object httpService) {
-		((HttpService) httpService).destroy();
-	}
-
-	public synchronized void setProperties(Dictionary properties) throws IOException {
-		ServerSocketInterface oldServerSocket = serverSocket;
-
-		if (properties != null) {
-			String address = (String) properties.get(HttpConfiguration.keyHttpAddress);
-			int port = ((Integer) (properties.get(HttpConfiguration.keyHttpPort))).intValue();
-			String scheme = (String) properties.get(HttpConfiguration.keyHttpScheme);
-			socketTimeout = ((Integer) (properties.get(HttpConfiguration.keyHttpTimeout))).intValue() * 1000;
-
-			if ("ALL".equalsIgnoreCase(address)) { //$NON-NLS-1$
-				address = null;
-			}
-
-			if ((serverSocket == null) || (port != serverSocket.getLocalPort()) || !scheme.equals(serverSocket.getScheme())) {
-				serverSocket = configuration.createServerSocket(address, port, scheme);
-				closeServerSocket(oldServerSocket);
-			} else if ((serverSocket.getAddress() != null && !serverSocket.getAddress().equals(address)) || (serverSocket.getAddress() == null && address != null)) {
-				serverSocket = null;
-				closeServerSocket(oldServerSocket);
-				serverSocket = configuration.createServerSocket(address, port, scheme);
-				synchronized (lock) {
-					lock.notify();
-				}
-			}
-
-			if (service == null) {
-				service = http.context.registerService(httpsvcClass, this, properties);
-			} else {
-				service.setProperties(properties);
-			}
-		} else {
-			serverSocket = null;
-			closeServerSocket(oldServerSocket);
-			service.unregister();
-			service = null;
-		}
-	}
-
-	protected Object getProperty(String key) {
-		return service.getReference().getProperty(key);
-	}
-
-	private void closeServerSocket(ServerSocketInterface oldServerSocket) {
-		if (oldServerSocket != null) {
-			try {
-				try {
-					Socket phonyClient = new Socket(InetAddress.getByName(oldServerSocket.getAddress()), oldServerSocket.getLocalPort());
-					phonyClient.close();
-				} catch (IOException e) {
-					http.logWarning(HttpMsg.HTTP_UNEXPECTED_IOEXCEPTION, e);
-				}
-			} finally {
-				try {
-					oldServerSocket.close();
-				} catch (IOException e) {
-					http.logWarning(HttpMsg.HTTP_UNEXPECTED_IOEXCEPTION, e);
-				}
-			}
-
-			configuration.pool.recallThreads();
-		}
-	}
-
-	public void run() {
-		running = true;
-
-		while (running) {
-			SocketInterface socket = null;
-
-			try {
-				if (serverSocket == null) {
-					if (running) {
-						try {
-							synchronized (lock) {
-								lock.wait(5000);
-							}
-						} catch (InterruptedException e) {
-							// ignore and check exit condition
-						}
-						if (serverSocket == null) {
-							running = false;
-							continue;
-						}
-					} else {
-						continue;
-					}
-				}
-				ServerSocketInterface tempServerSocket = this.serverSocket;
-				socket = tempServerSocket.acceptSock();
-
-				if (tempServerSocket != this.serverSocket) /* socket changed while we were waiting */
-				{
-					try {
-						socket.close();
-					} catch (IOException e) {
-						// TODO: consider logging
-					}
-
-					socket = null;
-				}
-			} catch (IOException e) {
-				if (serverSocket != null) {
-					http.logError(NLS.bind(HttpMsg.HTTP_ACCEPT_SOCKET_EXCEPTION, new Integer(serverSocket.getLocalPort())), e);
-				}
-			}
-
-			if (socket != null) {
-				HttpThread thread = configuration.pool.getThread();
-
-				if (thread != null) {
-					thread.handleConnection(new HttpConnection(http, this, socket, socketTimeout));
-				} else {
-					try {
-						socket.close();
-					} catch (Exception e) {
-						// TODO: consider logging
-					}
-				}
-			}
-		}
-	}
-
-	protected void handleConnection(SocketInterface socket) throws IOException, ServletException {
-		/* Create the servlet request and response objects */
-		HttpServletResponseImpl response = new HttpServletResponseImpl(socket, http);
-
-		HttpServletRequestImpl request = new HttpServletRequestImpl(socket, http, response);
-
-		/* After the request and response objects are successfully created,
-		 * we enter a try/finally block to ensure that the response is
-		 * always closed.
-		 */
-		try {
-			//Get the URI from socket
-			String uri = request.getRequestURI();
-			//Get Registration object associated with the request
-			Registration registration = getRegistration(uri);
-
-			while (registration != null) {
-				try {
-					if (registration.getHttpContext().handleSecurity(request, response)) {
-						//Service Request
-						registration.service(request, response);
-					}
-
-					return;
-				} catch (ResourceUnavailableException e) {
-					uri = reduceURI(uri);
-
-					if (uri == null) {
-						registration = null;
-					} else {
-						registration = getRegistration(uri);
-					}
-				}
-			}
-
-			if (registration == null) {
-				if (Http.DEBUG) {
-					http.logDebug("File " + request.getRequestURI() + //$NON-NLS-1$
-							" not found -- No Registration object"); //$NON-NLS-1$
-				}
-
-				response.sendError(HttpServletResponse.SC_NOT_FOUND);
-			}
-		} finally {
-			response.close(); /* close (and flush) the response output */
-		}
-	}
-
-	protected ResourceRegistration registerResources(Bundle bundle, String alias, String name, HttpContext httpContext) throws NamespaceException {
-		synchronized (registrations) {
-			if (Http.DEBUG) {
-				http.logDebug("HttpService -- Registering Resource --  Alias = " + //$NON-NLS-1$
-						alias + " Name = " + name); //$NON-NLS-1$
-			}
-
-			checkAlias(alias);
-
-			//check to see if name is valid
-			if (name == null)
-				throw new IllegalArgumentException(NLS.bind(HttpMsg.HTTP_RESOURCE_NAME_INVALID_EXCEPTION, name));
-			int length = name.length();
-			if (length > 1) { //we need to allow "/" and ""
-				if (name.endsWith("/")) //$NON-NLS-1$
-				{
-					throw new IllegalArgumentException(NLS.bind(HttpMsg.HTTP_RESOURCE_NAME_INVALID_EXCEPTION, name));
-				}
-			}
-
-			checkNamespace(alias);
-
-			ResourceRegistration registration = new ResourceRegistration(bundle, alias, name, httpContext, http);
-
-			registrations.put(alias, registration);
-
-			return (registration);
-		}
-	}
-
-	private void checkAlias(String alias) {
-		if (alias == null)
-			throw new IllegalArgumentException(NLS.bind(HttpMsg.HTTP_ALIAS_INVALID_EXCEPTION, alias));
-		//check to see if the alias is valid
-		if (!alias.equals("/")) //$NON-NLS-1$
-		{ //so one can register at "/"
-			if (!alias.startsWith("/") || alias.endsWith("/")) //$NON-NLS-1$ //$NON-NLS-2$
-			{
-				throw new IllegalArgumentException(NLS.bind(HttpMsg.HTTP_ALIAS_INVALID_EXCEPTION, alias));
-			}
-		}
-	}
-
-	protected ServletRegistration registerServlet(Bundle bundle, String alias, Servlet servlet, Dictionary initparams, HttpContext httpContext) throws ServletException, NamespaceException {
-		synchronized (registrations) {
-			if (Http.DEBUG) {
-				http.logDebug("HttpService -- Registering Servlet -- Alias = " + alias); //$NON-NLS-1$
-			}
-
-			checkAlias(alias);
-
-			checkNamespace(alias);
-
-			if (servlet == null) {
-				throw new IllegalArgumentException(HttpMsg.HTTP_SERVLET_NULL_EXCEPTION);
-			}
-
-			if (http.servlets.contains(servlet)) {
-				throw new ServletException(HttpMsg.HTTP_SERVLET_ALREADY_REGISTERED_EXCEPTION);
-			}
-			/* Determine the ServletContext */
-			ServletContextImpl servletContext = getServletContext(httpContext);
-			//Create registration object
-			ServletRegistration registration = new ServletRegistration(bundle, alias, servlet, httpContext, servletContext);
-
-			//call servlet's init() method
-			try {
-				servlet.init(new ServletConfigImpl(servletContext, initparams));
-			} catch (ServletException e) {
-				ungetServletContext(httpContext);
-
-				throw e;
-			} catch (Throwable t) {
-				ungetServletContext(httpContext);
-
-				throw new ServletException(HttpMsg.HTTP_SERVET_INIT_EXCEPTION, t);
-			}
-
-			http.servlets.addElement(servlet);
-			registrations.put(alias, registration);
-			return (registration);
-		}
-	}
-
-	protected void unregister(Bundle bundle, String alias) throws IllegalArgumentException {
-		synchronized (registrations) {
-			Registration registration = (Registration) registrations.get(alias);
-			if (registration != null) {
-				//this is to prevent other bundles from unregistering a bundle's resource/servlet
-				if (registration.getBundle() != bundle) {
-					registration = null;
-				}
-			}
-
-			removeRegistration(registration);
-		}
-	}
-
-	protected HttpContext createDefaultHttpContext(Bundle bundle) {
-		return (new DefaultHttpContext(bundle, http.securityTracker));
-	}
-
-	protected ServletContextImpl getServletContext(HttpContext httpContext) {
-		/* Determine the ServletContext */
-		ServletContextImpl servletContext = (ServletContextImpl) servletContexts.get(httpContext);
-
-		if (servletContext == null) {
-			servletContext = new ServletContextImpl(http, this, httpContext);
-			servletContexts.put(httpContext, servletContext);
-		}
-
-		servletContext.incrUseCount();
-
-		return (servletContext);
-	}
-
-	protected void ungetServletContext(HttpContext httpContext) {
-		ServletContextImpl servletContext = (ServletContextImpl) servletContexts.get(httpContext);
-
-		if (servletContext != null) {
-			int useCount = servletContext.decrUseCount();
-
-			if (useCount <= 0) {
-				servletContexts.remove(httpContext);
-			}
-		}
-	}
-
-	protected void destroyBundle(Bundle bundle) {
-		if (registrations != null) {
-			if (Http.DEBUG) {
-				http.logDebug("Removing bundle " + bundle + //$NON-NLS-1$
-						" from HttpListener"); //$NON-NLS-1$
-			}
-
-			synchronized (registrations) {
-				Enumeration e = registrations.elements();
-
-				while (e.hasMoreElements()) {
-					Registration reg = (Registration) e.nextElement();
-
-					if (bundle == reg.getBundle()) {
-						removeRegistration(reg);
-					}
-				}
-			}
-		}
-	}
-
-	private void checkNamespace(String uri) throws NamespaceException {
-		if (uri == null)
-			throw new IllegalArgumentException(NLS.bind(HttpMsg.HTTP_ALIAS_INVALID_EXCEPTION, uri));
-		// If alias already exists in master resource table,
-		// throw NamespaceException
-		if (registrations.get(uri) != null) {
-			throw new NamespaceException(NLS.bind(HttpMsg.HTTP_ALIAS_ALREADY_REGISTERED_EXCEPTION, uri));
-		}
-	}
-
-	public Registration getRegistration(String uri) {
-		synchronized (registrations) {
-			while (uri != null) {
-				Registration reg = (Registration) registrations.get(uri);
-
-				if (reg != null) {
-					return (reg);
-				}
-				uri = reduceURI(uri);
-			}
-			return (null);
-		}
-	}
-
-	/**
-	 * Reduce the input URI per the HttpService spec.
-	 *
-	 * @param uri input URI to be reduced.
-	 * @return Reduced URI or null if no further reduction possible.
-	 */
-	private String reduceURI(String uri) {
-		if (uri.equals("/")) //$NON-NLS-1$
-		{
-			return (null);
-		}
-
-		int index = uri.lastIndexOf('/');
-
-		if (index < 0) {
-			return (null);
-		}
-
-		if (index == 0) {
-			return ("/"); //$NON-NLS-1$
-		}
-
-		return (uri.substring(0, index));
-	}
-
-	/**
-	 * Must be called while holding the registrations lock
-	 *
-	 */
-	private void removeRegistration(Registration registration) {
-		if (registration == null) {
-			throw new IllegalArgumentException(HttpMsg.HTTP_ALIAS_UNREGISTER_EXCEPTION);
-		}
-		registrations.remove(registration.getAlias());
-		if (registration instanceof ServletRegistration) {
-			Servlet servlet = ((ServletRegistration) registration).getServlet();
-			http.servlets.removeElement(servlet);
-		}
-
-		// BUGBUG Must not call servlet.destroy while it is processing requests!
-		// Servlet 2.2 Section 3.3.4
-		registration.destroy();
-
-		if (registration instanceof ServletRegistration) {
-			ungetServletContext(registration.getHttpContext());
-		}
-	}
-}
diff --git a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/HttpMsg.java b/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/HttpMsg.java
deleted file mode 100644
index 54bfa4a..0000000
--- a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/HttpMsg.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1999, 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.http;
-
-import org.eclipse.osgi.util.NLS;
-
-public class HttpMsg extends NLS {
-	private static final String BUNDLE_NAME = "org.eclipse.equinox.http.ExternalMessages"; //$NON-NLS-1$
-
-	public static String HTTP_ALIAS_ALREADY_REGISTERED_EXCEPTION;
-	public static String HTTP_SERVLET_ALREADY_REGISTERED_EXCEPTION;
-	public static String HTTP_SERVLET_NULL_EXCEPTION;
-	public static String HTTP_SERVLET_EXCEPTION;
-	public static String HTTP_ALIAS_UNREGISTER_EXCEPTION;
-	public static String HTTP_ALIAS_INVALID_EXCEPTION;
-	public static String HTTP_RESOURCE_NAME_INVALID_EXCEPTION;
-	public static String HTTP_SERVET_INIT_EXCEPTION;
-	public static String HTTP_DEFAULT_MIME_TABLE_ERROR;
-	public static String HTTP_STATUS_CODES_TABLE_ERROR;
-	public static String HTTP_STATUS_CODE_NOT_FOUND;
-	public static String HTTP_ACCEPT_SOCKET_EXCEPTION;
-	public static String HTTP_PORT_IN_USE_EXCEPTION;
-	public static String HTTP_INVALID_VALUE_RANGE_EXCEPTION;
-	public static String HTTP_CONNECTION_EXCEPTION;
-	public static String HTTP_INVALID_SCHEME_EXCEPTION;
-	public static String HTTP_NO_HEADER_LINE_READ_EXCEPTION;
-	public static String HTTP_QUERYDATA_PARSE_EXCEPTION;
-	public static String HTTP_INVALID_HEADER_LINE_EXCEPTION;
-	public static String HTTP_HEADER_LINE_TOO_LONG_EXCEPTION;
-	public static String HTTP_UNEXPECTED_IOEXCEPTION;
-	public static String HTTP_UNEXPECTED_RUNTIMEEXCEPTION;
-	public static String HTTP_ONLY_SUPPORTS_2_1;
-	public static String HTTP_HOST_UNKNOWN;
-	public static String OSGi_Http_Service_IBM_Implementation_16;
-	public static String IBM_Http_Service_37;
-	public static String Jan_1;
-	public static String Feb_2;
-	public static String Mar_3;
-	public static String Apr_4;
-	public static String May_5;
-	public static String Jun_6;
-	public static String Jul_7;
-	public static String Aug_8;
-	public static String Sep_9;
-	public static String Oct_10;
-	public static String Nov_11;
-	public static String Dec_12;
-	public static String Sun_13;
-	public static String Mon_14;
-	public static String Tue_15;
-	public static String Wed_16;
-	public static String Thu_17;
-	public static String Fri_18;
-	public static String Sat_19;
-	public static String HTTP_DEFAULT_PORT_FORMAT_EXCEPTION;
-	public static String HTTP_THREAD_POOL_CREATE_NUMBER_ERROR;
-
-	static {
-		// initialize resource bundles
-		NLS.initializeMessages(BUNDLE_NAME, HttpMsg.class);
-	}
-}
diff --git a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/HttpSecurityTracker.java b/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/HttpSecurityTracker.java
deleted file mode 100644
index d378034..0000000
--- a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/HttpSecurityTracker.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1999, 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.http;
-
-import java.io.IOException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.InvalidSyntaxException;
-import org.osgi.service.http.HttpContext;
-import org.osgi.util.tracker.ServiceTracker;
-
-public class HttpSecurityTracker extends ServiceTracker {
-
-	protected HttpSecurityTracker(BundleContext context) throws InvalidSyntaxException {
-		super(context, context.createFilter("(&(objectClass=org.osgi.service.http.HttpContext)(org.eclipse.equinox.http.default.handleSecurity=*))"), null); //$NON-NLS-1$
-
-		open();
-	}
-
-	protected boolean handleSecurity(HttpServletRequest request, HttpServletResponse response) throws IOException {
-		HttpContext service = (HttpContext) getService();
-
-		if (service != null) {
-			return (service.handleSecurity(request, response));
-		}
-
-		return (defaultHandleSecurity(request, response));
-	}
-
-	protected boolean defaultHandleSecurity(HttpServletRequest request, HttpServletResponse response) throws IOException {
-		return (true);
-	}
-}
diff --git a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/HttpServerSocket.java b/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/HttpServerSocket.java
deleted file mode 100644
index d4ab950..0000000
--- a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/HttpServerSocket.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1999, 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.http;
-
-import java.io.IOException;
-import java.net.Socket;
-import org.eclipse.equinox.socket.ServerSocketInterface;
-import org.eclipse.equinox.socket.SocketInterface;
-
-public class HttpServerSocket extends java.net.ServerSocket implements ServerSocketInterface {
-	String address = null;
-
-	/**
-	 * HttpServerSocket constructor comment.
-	 * @param port int
-	 * @exception java.io.IOException The exception description.
-	 */
-	public HttpServerSocket(int port) throws java.io.IOException {
-		super(port);
-	}
-
-	/**
-	 * HttpServerSocket constructor comment.
-	 * @param port int
-	 * @param backlog int
-	 * @exception java.io.IOException The exception description.
-	 */
-	public HttpServerSocket(int port, int backlog) throws java.io.IOException {
-		super(port, backlog);
-	}
-
-	/**
-	 * HttpServerSocket constructor comment.
-	 * @param port int
-	 * @param backlog int
-	 * @param bindAddr java.net.InetAddress
-	 * @exception java.io.IOException The exception description.
-	 */
-	public HttpServerSocket(int port, int backlog, java.net.InetAddress bindAddr) throws java.io.IOException {
-		super(port, backlog, bindAddr);
-	}
-
-	/**
-	 * This method was created in VisualAge.
-	 */
-	public Socket accept() throws IOException {
-		return (Socket) acceptSock();
-	}
-
-	public SocketInterface acceptSock() throws IOException {
-		HttpSocket socket = new HttpSocket(getScheme());
-		implAccept(socket);
-		return (socket);
-	}
-
-	public String getScheme() {
-		return ("http"); //$NON-NLS-1$
-	}
-
-	public String getAddress() {
-		return address;
-	}
-
-	public void setAddress(String address) {
-		this.address = address;
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/HttpService.java b/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/HttpService.java
deleted file mode 100644
index 6b41e4d..0000000
--- a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/HttpService.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1999, 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.http;
-
-import javax.servlet.Servlet;
-import javax.servlet.ServletException;
-import org.osgi.framework.Bundle;
-import org.osgi.service.http.HttpContext;
-import org.osgi.service.http.NamespaceException;
-
-public class HttpService implements org.osgi.service.http.HttpService {
-	private HttpListener listener;
-	private Bundle bundle;
-
-	HttpService(HttpListener listener, Bundle bundle) {
-		this.listener = listener;
-		this.bundle = bundle;
-	}
-
-	void destroy() {
-		listener.destroyBundle(bundle);
-		listener = null;
-		bundle = null;
-	}
-
-	public void registerResources(String alias, String name, HttpContext httpContext) throws NamespaceException {
-		HttpListener tempListener = this.listener;
-
-		if (tempListener != null) {
-			if (httpContext == null) {
-				httpContext = createDefaultHttpContext();
-			}
-
-			tempListener.registerResources(bundle, alias, name, httpContext);
-		}
-	}
-
-	public void registerServlet(String alias, Servlet servlet, java.util.Dictionary initparams, HttpContext httpContext) throws ServletException, NamespaceException, IllegalArgumentException {
-		HttpListener tempListener = this.listener;
-
-		if (tempListener != null) {
-			if (httpContext == null) {
-				httpContext = createDefaultHttpContext();
-			}
-
-			tempListener.registerServlet(bundle, alias, servlet, initparams, httpContext);
-		}
-	}
-
-	public void unregister(String alias) throws IllegalArgumentException {
-		HttpListener tempListener = this.listener;
-
-		if (tempListener != null) {
-			tempListener.unregister(bundle, alias);
-		}
-	}
-
-	public HttpContext createDefaultHttpContext() {
-		HttpListener tempListener = this.listener;
-
-		if (tempListener != null) {
-			return (tempListener.createDefaultHttpContext(bundle));
-		}
-
-		return (null);
-	}
-}
diff --git a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/HttpSocket.java b/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/HttpSocket.java
deleted file mode 100644
index f1d7e49..0000000
--- a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/HttpSocket.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1999, 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.http;
-
-import java.io.*;
-import org.eclipse.equinox.socket.SocketInterface;
-
-/* @ThreadSafe */
-public class HttpSocket extends java.net.Socket implements SocketInterface {
-	private InputStream in = null;
-	private boolean closed = false;
-	private boolean active = false;
-	private final String scheme;
-
-	public HttpSocket(String sheme) {
-		super();
-		this.scheme = sheme;
-	}
-
-	public synchronized void close() throws IOException {
-		super.close();
-		//must set closed to try after calling super.close() otherwise
-		//jdk1.4 will not close the socket
-		closed = true;
-	}
-
-	/**
-	 * Wrap the real socket input stream in a buffered input stream
-	 *
-	 * @return a buffered InputStream which wraps the real input stream.
-	 * @throws IOException
-	 */
-	public synchronized InputStream getInputStream() throws IOException {
-		if (in == null) {
-			in = new BufferedInputStream(super.getInputStream());
-		}
-
-		return in;
-	}
-
-	/**
-	 * Return the scheme this socket is using.
-	 *
-	 * @return Either "http" or "https".
-	 */
-	public String getScheme() {
-		return scheme;
-	}
-
-	/**
-	 * Test to see if the socket has been closed.
-	 *
-	 * @return true if close has been called on this socket.
-	 */
-	public synchronized boolean isClosed() {
-		return closed;
-	}
-
-	/**
-	 * Test to see if the socket is active.
-	 *
-	 * @return true if markActive has been called.
-	 */
-	public synchronized boolean isActive() {
-		return active;
-	}
-
-	/**
-	 * Mark the socket active.
-	 *
-	 */
-	public synchronized void markActive() {
-		active = true;
-	}
-
-	/**
-	 * Mark the socket inactive.
-	 *
-	 */
-	public synchronized void markInactive() {
-		active = false;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/HttpThread.java b/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/HttpThread.java
deleted file mode 100644
index 823e083..0000000
--- a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/HttpThread.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1999, 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.http;
-
-import java.io.IOException;
-
-/**
- * The class provide a thread for processing HTTP requests.
- */
-/* @ThreadSafe */
-public class HttpThread extends Thread {
-	/** Master HTTP object */
-	private final Http http;
-
-	/** if true this thread must terminate */
-	private volatile boolean running;
-
-	/** Pool to which this thread belongs. */
-	private final HttpThreadPool pool;
-
-	/** connection that this thread is operating */
-	private volatile HttpConnection conn;
-
-	/** lock object to wait for work */
-	private final Object waitLock = new Object();
-
-	/**
-	 * HttpThread constructor.
-	 */
-	public HttpThread(Http http, HttpThreadPool pool, String name) {
-		super(pool, name);
-
-		this.http = http;
-		this.pool = pool;
-
-		setDaemon(true); /* mark thread as daemon thread */
-	}
-
-	/**
-	 * Returns true if this thread has been closed.
-	 * @return boolean
-	 */
-	public boolean isClosed() {
-		return (!running);
-	}
-
-	/**
-	 * Close this thread.
-	 */
-	public void close() {
-		running = false;
-
-		if (conn == null) {
-			interrupt();
-		} else {
-			try {
-				conn.close();
-			} catch (IOException e) {
-				// TODO: consider logging
-			}
-		}
-	}
-
-	/**
-	 * recall this thread.
-	 */
-	public void recall() {
-		if (Http.DEBUG) {
-			http.logDebug(getName() + ": recall on socket: " + conn); //$NON-NLS-1$
-		}
-
-		if (conn != null) {
-			conn.setKeepAlive(false);	/* disable keep alive in case the connection is currently processing a request */
-			if (!conn.isActive()) {		/* if the connection is not processing a request, close it */
-				try {
-					if (Http.DEBUG) {
-						http.logDebug(getName() + ": Closing socket: " + conn); //$NON-NLS-1$
-					}
-					conn.close();
-				} catch (IOException e) {
-					// TODO: consider logging
-				}
-			}
-		}
-	}
-
-	/**
-	 * Set the connection for this thread to process. The thread must have just been 
-	 * retreived from the thread pool.
-	 * @param connParam The HttpConnection to process.
-	 */
-	public void handleConnection(HttpConnection connParam) {
-		if (running) {
-			this.conn = connParam;
-			synchronized (waitLock) {
-				waitLock.notify();
-			}
-		}
-	}
-
-	public void run() {
-		running = true;
-
-		while (running) {
-			if (conn == null) {			/* if we have no work to do, wait in the pool */
-				synchronized (waitLock) {
-					pool.putThread(this);
-
-					try {
-						waitLock.wait();
-					} catch (InterruptedException e) {
-						// ignore and check exit condition
-					}
-				}
-			}
-
-			if (running && (conn != null)) {
-				conn.run();		/* execute the connection */
-
-				if (conn.isClosed()) {	/* if connection is closed */
-			    	conn = null;		/* go back to the pool and wait */
-			    }
-			}
-		}
-	}
-}
diff --git a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/HttpThreadPool.java b/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/HttpThreadPool.java
deleted file mode 100644
index f23a933..0000000
--- a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/HttpThreadPool.java
+++ /dev/null
@@ -1,287 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1999, 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.http;
-
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.util.Vector;
-import org.eclipse.osgi.util.NLS;
-
-/* @ThreadSafe */
-public class HttpThreadPool extends ThreadGroup {
-	/** Master HTTP object */
-	final Http http;
-
-	/** container to threads waiting for work */
-	private final Vector idleThreads;		/* @GuardedBy("this") */
-	/** container to threads which are working */
-	private final Vector activeThreads;	/* @GuardedBy("this") */
-	/** Upper bound on size of thread pool */
-	private int upper;		/* @GuardedBy("this") */
-	/** Lower bound on size of thread pool */
-	private int lower;		/* @GuardedBy("this") */
-	/** Priority of thread pool */
-	private volatile int priority;
-	/** number of threads to be terminated when they are returned to the pool */
-	private int hitCount;	/* @GuardedBy("this") */
-	/** Thread allocation number */
-	private int number;		/* @GuardedBy("this") */
-	/** prevent new threads from readjusting */
-	private int adjusting = 0;	/* @GuardedBy("this") */
-
-	/**
-	 * Constructs and populates a new thread pool with the specified thread group
-	 * identifier and the specified number of threads.
-	 *
-	 */
-	public HttpThreadPool(Http http, int lower, int upper, int priority) {
-		super("Http Service Thread Pool"); //$NON-NLS-1$
-		this.http = http;
-		idleThreads = new Vector(upper);
-		activeThreads = new Vector(upper);
-		number = 0;
-		setSize(lower, upper);
-
-		setPriority(priority);
-	}
-
-	/**
-	 * Returns the lower bound on size of thread pool.
-	 */
-	public synchronized int getLowerSizeLimit() {
-		return lower;
-	}
-
-	/**
-	 * Returns the upper bound on size of thread pool.
-	 */
-	public synchronized int getUpperSizeLimit() {
-		return upper;
-	}
-
-	/**
-	 * Sets the size of thread pool.
-	 *
-	 * @param lower the lower bounds on the size
-	 * @param upper the upper bounds on the size
-	 */
-	public synchronized void setSize(int lower, int upper) {
-		this.lower = lower;
-		this.upper = upper;
-		adjustThreadCount();
-	}
-
-	/**
-	 * Must be called while synchronized on this object.
-	 *
-	 */
-	/* @GuardedBy("this") */
-	private void adjustThreadCount() {
-		if (adjusting > 0) {
-			adjusting--;
-			return;
-		}
-		int active = activeThreads.size();
-		int idle = idleThreads.size();
-		int count = idle + active;
-
-		if (Http.DEBUG) {
-			http.logDebug("Current thread count: " + idle + " idle, " + active + " active"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-		}
-
-		if (idle < 2) {
-			count += 5;
-		} else {
-			if (idle > 10) {
-				count -= 5;
-			}
-		}
-
-		if (count > upper) {
-			count = upper;
-		}
-
-		if (count < lower) {
-			count = lower;
-		}
-
-		int delta = count - (idle + active);
-		if (Http.DEBUG) {
-			http.logDebug("New thread count: " + count + ", delta: " + delta); //$NON-NLS-1$ //$NON-NLS-2$
-		}
-
-		if (delta < 0) /* remove threads */
-		{
-			delta = -delta; /* invert sign */
-			if (delta < idle) {
-				for (int i = idle - 1; delta > 0; i--, delta--) {
-					HttpThread thread = (HttpThread) idleThreads.elementAt(i);
-					idleThreads.removeElementAt(i);
-					thread.close();
-				}
-			} else {
-				hitCount += delta - idle;
-				for (int i = 0; i < idle; i++) {
-					HttpThread thread = (HttpThread) idleThreads.elementAt(i);
-					thread.close();
-				}
-				idleThreads.removeAllElements();
-			}
-		} else {
-			if (delta > 0) /* add threads */
-			{
-				adjusting = delta; /* new threads will call this method */
-				if (delta > hitCount) {
-					delta -= hitCount;
-					hitCount = 0;
-					idleThreads.ensureCapacity(count);
-					for (int i = 0; i < delta; i++) {
-						number++;
-						final String threadName = "HttpThread_" + number;  //$NON-NLS-1$
-						try {
-							AccessController.doPrivileged(new PrivilegedAction() {
-								public Object run() {
-									HttpThread thread = new HttpThread(http, HttpThreadPool.this, threadName);
-									thread.start(); /* thread will add itself to the pool */
-									return null;
-								}
-							});
-						} catch (RuntimeException e) {
-							/* No resources to create another thread */
-							http.logError(NLS.bind(HttpMsg.HTTP_THREAD_POOL_CREATE_NUMBER_ERROR, new Integer(number)), e);
-
-							number--;
-
-							/* Readjust the upper bound of the thread pool */
-							upper -= delta - i;
-
-							break;
-						}
-					}
-				} else {
-					hitCount -= delta;
-				}
-			}
-		}
-	}
-
-	/**
-	 * Set the priority of the threads in the thread pool.
-	 *
-	 * @param priority Thread priority.
-	 */
-	public void setPriority(int priority) {
-		if ((Thread.MIN_PRIORITY <= priority) && (priority <= Thread.MAX_PRIORITY)) {
-			this.priority = priority;
-		} else {
-			throw new IllegalArgumentException(NLS.bind(HttpMsg.HTTP_INVALID_VALUE_RANGE_EXCEPTION, new Object[] {new Integer(Thread.MIN_PRIORITY), new Integer(Thread.MAX_PRIORITY)}));
-		}
-	}
-
-	/**
-	 * Returns a thread to the thread pool and notifies the pool that
-	 * a thread is available.
-	 *
-	 * @param availableThread the thread being added/returned to the pool
-	 */
-	public synchronized void putThread(HttpThread thread) {
-		if (Http.DEBUG) {
-			http.logDebug(thread.getName() + ": becoming idle"); //$NON-NLS-1$
-		}
-		
-		activeThreads.removeElement(thread);
-		
-		if (hitCount > 0) {
-			hitCount--;
-			thread.close();
-		} else {
-			if (!idleThreads.contains(thread)) {
-				idleThreads.addElement(thread);
-				notify();
-			}
-		}
-
-		adjustThreadCount();
-	}
-
-	/**
-	 * Gets the next available thread from the thread pool.  If no thread is
-	 * available, this method blocks until one becomes available or the pool is
-	 * disposed of.
-	 *
-	 * @return the next available thread; if the pool has been (or is disposed
-	 *         of while waiting), null is returned
-	 */
-	public synchronized HttpThread getThread() {
-		adjustThreadCount();
-
-		while (upper > 0) {
-			int count = idleThreads.size();
-			if (count > 0) {
-				int i = count - 1;
-
-				HttpThread thread = (HttpThread) idleThreads.elementAt(i);
-				idleThreads.removeElementAt(i);
-				if (thread.getPriority() != priority) {
-					thread.setPriority(priority);
-				}
-				activeThreads.addElement(thread);
-				//new Exception((size-i)+" Threads are at work!").printStackTrace();
-				if (Http.DEBUG) {
-					http.logDebug(thread.getName() + ": becoming active"); //$NON-NLS-1$
-				}
-
-				return thread;
-			}
-			try {
-				wait();
-			} catch (InterruptedException e) {
-				// ignore and check exit condition
-			}
-		}
-
-		return null;
-	}
-
-	/**
-	 * Remove all thread from the pool.
-	 */
-	public synchronized void close() {
-		recallThreads();
-
-		setSize(0, 0);
-		/* Notify everyone waiting for a thread */
-		notifyAll();
-
-		// destroy the threadgroup, will never go away otherwise
-		try {
-			// Need to set it to a daemon first otherwise it will not be destroyed
-			setDaemon(true);
-			destroy();
-		} catch (Exception e) {
-			// TODO: consider logging
-		}
-	}
-
-	/**
-	 * This method recalls threads that are waiting on a socket for work.
-	 * This is needed when Keep-Alive is in use and we need to
-	 * close the socket the thread is waiting on.
-	 *
-	 */
-	public synchronized void recallThreads() {
-		int count = activeThreads.size();
-		for (int i = count - 1; i >= 0; i--) {
-			HttpThread thread = (HttpThread) activeThreads.elementAt(i);
-			thread.recall();
-		}
-	}
-}
diff --git a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/LogMessages.properties b/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/LogMessages.properties
deleted file mode 100644
index 6d12a8d..0000000
--- a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/LogMessages.properties
+++ /dev/null
@@ -1,16 +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
-###############################################################################
-# NLS_MESSAGEFORMAT_ALL 
-
-Unknown_Log_level=Unknown Log Level
-Info=Log Info
-Warning=Log Warning
-Error=Log Error
diff --git a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/LogTracker.java b/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/LogTracker.java
deleted file mode 100644
index a088fa1..0000000
--- a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/LogTracker.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1998, 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.http;
-
-import java.io.PrintStream;
-import java.text.DateFormat;
-import java.util.Calendar;
-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 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 */
-	protected PrintStream out;
-
-	/** Calendar and DateFormat to user if LogService is unavailable */
-	private static Calendar calendar;
-	private static DateFormat dateFormat;
-	private String timestamp;
-
-	/**
-	 * 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;
-		calendar = Calendar.getInstance();
-		dateFormat = DateFormat.getDateTimeInstance();
-		open();
-	}
-
-	/*
-	 * ----------------------------------------------------------------------
-	 *      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(ServiceReference reference, int level, String message) {
-		log(reference, level, message, null);
-	}
-
-	public synchronized void log(ServiceReference reference, int level, String message, Throwable exception) {
-		ServiceReference[] references = getServiceReferences();
-
-		if (references != null) {
-			int size = references.length;
-
-			for (int i = 0; i < size; i++) {
-				LogService service = (LogService) 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.
-				timestamp = dateFormat.format(calendar.getTime());
-				out.print(timestamp + " "); //$NON-NLS-1$
-
-				switch (level) {
-					case LOG_DEBUG : {
-						out.print("Debug: "); //$NON-NLS-1$
-
-						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);
-				}
-			}
-		}
-	}
-}
diff --git a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/LogTrackerMsg.java b/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/LogTrackerMsg.java
deleted file mode 100644
index ad805bb..0000000
--- a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/LogTrackerMsg.java
+++ /dev/null
@@ -1,27 +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.http;
-
-import org.eclipse.osgi.util.NLS;
-
-public class LogTrackerMsg extends NLS {
-	private static final String BUNDLE_NAME = "org.eclipse.equinox.http.LogMessages"; //$NON-NLS-1$
-
-	public static String Unknown_Log_level;
-	public static String Info;
-	public static String Warning;
-	public static String Error;
-
-	static {
-		// initialize resource bundles
-		NLS.initializeMessages(BUNDLE_NAME, LogTrackerMsg.class);
-	}
-}
diff --git a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/Registration.java b/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/Registration.java
deleted file mode 100644
index dfbbf36..0000000
--- a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/Registration.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1999, 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.http;
-
-import java.io.IOException;
-import javax.servlet.*;
-import org.eclipse.equinox.http.servlet.HttpServletRequestImpl;
-import org.eclipse.equinox.http.servlet.HttpServletResponseImpl;
-import org.osgi.framework.Bundle;
-import org.osgi.service.http.HttpContext;
-
-public interface Registration {
-	public abstract Bundle getBundle();
-
-	public abstract HttpContext getHttpContext();
-
-	public abstract void destroy();
-
-	public abstract String getAlias();
-
-	public abstract void service(HttpServletRequestImpl req, HttpServletResponseImpl res) throws ServletException, IOException;
-
-	public abstract void service(ServletRequest req, ServletResponse res) throws ServletException, IOException;
-}
diff --git a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/ResourceRegistration.java b/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/ResourceRegistration.java
deleted file mode 100644
index 36e22e5..0000000
--- a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/ResourceRegistration.java
+++ /dev/null
@@ -1,230 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1999, 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.http;
-
-import java.io.*;
-import java.net.URL;
-import java.net.URLConnection;
-import javax.servlet.ServletException;
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.*;
-
-import org.eclipse.equinox.http.servlet.HttpServletRequestImpl;
-import org.eclipse.equinox.http.servlet.HttpServletResponseImpl;
-import org.osgi.framework.Bundle;
-import org.osgi.service.http.HttpContext;
-
-/**
- This class contains methods used to send requested resources a client.
- */
-public class ResourceRegistration extends HttpServlet implements Registration {
-
-	private static final long serialVersionUID = -8732464938673729607L;
-	protected Bundle bundle;
-	protected HttpContext httpContext;
-	protected String alias;
-	protected String path;
-	protected Http http;
-	protected SecureAction secureAction;
-
-	/**
-	 * The constructor
-	 */
-	protected ResourceRegistration(Bundle bundle, String alias, String path, HttpContext httpContext, Http http) {
-		this.bundle = bundle;
-		this.alias = alias;
-		this.path = path;
-		this.httpContext = httpContext;
-		this.http = http;
-
-		secureAction = new SecureAction();
-	}
-
-	public Bundle getBundle() {
-		return (bundle);
-	}
-
-	public HttpContext getHttpContext() {
-		return (httpContext);
-	}
-
-	/**
-	 * This method returns the correct MIME type of a given URI by first checking
-	 * the HttpContext::getMimeType and, if null, checking the httpservice's MIMETypes table.
-	 * @return java.lang.String
-	 * @param URI java.lang.String
-	 */
-	private String computeMimeType(String name, URLConnection conn) {
-		String mimeType = httpContext.getMimeType(name);
-		if (mimeType != null) {
-			return (mimeType);
-		}
-
-		mimeType = conn.getContentType();
-		if (mimeType != null) {
-			return (mimeType);
-		}
-
-		return (http.getMimeType(name));
-	}
-
-	public void destroy() {
-		alias = null;
-		path = null;
-	}
-
-	public String getAlias() {
-		return (alias);
-	}
-
-	/** This method is called by Http::handleConnection.  It is called when a request comes in for
-	 * a resource registered by this registration.
-	 */
-	public void service(HttpServletRequestImpl request, HttpServletResponseImpl response) throws ServletException, IOException {
-		/* set additional data for the servlet request */
-		request.init(alias, null);
-
-		super.service(request, response);
-	}
-
-	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
-		String filename = getFilename(request.getRequestURI());
-
-		URL url = httpContext.getResource(filename);
-
-		if (url == null) {
-			// We got null back from httpContext.getResource
-			// In this case we want to keep looking to see if another alias matches
-			throw new ResourceUnavailableException();
-		}
-
-		URLConnection conn = secureAction.openURL(url);
-
-		long modifiedSince = request.getDateHeader("If-Modified-Since"); //$NON-NLS-1$
-		if (modifiedSince >= 0) {
-			long modified = conn.getLastModified();
-			if ((modified > 0) && (modifiedSince >= modified)) {
-				response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
-				return;
-			}
-		}
-
-		InputStream in;
-		try {
-			in = conn.getInputStream();
-		} catch (IOException ex) {
-			response.sendError(HttpServletResponse.SC_NOT_FOUND);
-			return;
-		}
-
-		try {
-			int contentlength = conn.getContentLength();
-			if (contentlength >= 0) {
-				response.setContentLength(contentlength);
-			}
-
-			String mimeType = computeMimeType(filename, conn);
-			response.setContentType(mimeType);
-
-			// We want to use a writer if we are sending text
-			if (mimeType.startsWith("text/")) //$NON-NLS-1$
-			{
-				PrintWriter writer = response.getWriter();
-
-				writer.flush(); /* write the headers and unbuffer the output */
-
-				BufferedReader reader = new BufferedReader(new InputStreamReader(in));
-
-				char buffer[] = new char[4096];
-				int read;
-				while ((read = reader.read(buffer, 0, buffer.length)) != -1) {
-					writer.write(buffer, 0, read);
-				}
-			} else {
-				ServletOutputStream out = response.getOutputStream();
-
-				out.flush(); /* write the headers and unbuffer the output */
-
-				byte buffer[] = new byte[4096];
-				int read;
-				while ((read = in.read(buffer, 0, buffer.length)) != -1) {
-					out.write(buffer, 0, read);
-				}
-			}
-		} finally {
-			in.close();
-		}
-	}
-
-	protected void doHead(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-		String filename = getFilename(request.getRequestURI());
-
-		URL url = httpContext.getResource(filename);
-
-		if (url == null) {
-			// We got null back from httpContext.getResource
-			// In this case we want to keep looking to see if another alias matches
-			throw new ResourceUnavailableException();
-		}
-		URLConnection conn = secureAction.openURL(url);
-		int contentlength = conn.getContentLength();
-		if (contentlength >= 0) {
-			response.setContentLength(contentlength);
-
-			String mimeType = computeMimeType(filename, conn);
-			response.setContentType(mimeType);
-		} else {
-			super.doHead(request, response);
-		}
-	}
-
-	protected String getFilename(String filename) {
-		//If the requested URI is equal to the Registeration's alias, send the file
-		//corresponding to the alias.  Otherwise, we have request for a file in an
-		//registered directory (the file was not directly registered itself).
-		if (filename.equals(alias)) {
-			filename = path;
-		} else {
-			// The file we re looking for is the registered resource (alias) + the rest of the
-			// filename that is not part of the registered resource.  For example, if we export
-			// /a to /tmp and we have a request for /a/b/foo.txt, then /tmp is our directory
-			// (file.toString()) and /b/foo.txt is the rest.
-			// The result is that we open the file /tmp/b/foo.txt.
-
-			int aliaslen = alias.length();
-			int pathlen = path.length();
-
-			if (pathlen == 1) /* path == "/" */
-			{
-				if (aliaslen > 1) /* alias != "/" */
-				{
-					filename = filename.substring(aliaslen);
-				}
-			} else /* path != "/" */
-			{
-				StringBuffer buf = new StringBuffer(aliaslen + pathlen);
-				buf.append(path);
-
-				if (aliaslen == 1) /* alias == "/" */
-				{
-					buf.append(filename);
-				} else /* alias != "/" */
-				{
-					buf.append(filename.substring(aliaslen));
-				}
-
-				filename = buf.toString();
-			}
-		}
-
-		return (filename);
-	}
-}
diff --git a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/ResourceUnavailableException.java b/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/ResourceUnavailableException.java
deleted file mode 100644
index a333340..0000000
--- a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/ResourceUnavailableException.java
+++ /dev/null
@@ -1,15 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1999, 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.http;
-
-public class ResourceUnavailableException extends RuntimeException {
-	private static final long serialVersionUID = 4662869318092654517L;
-}
diff --git a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/SSLTracker.java b/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/SSLTracker.java
deleted file mode 100644
index 264e409..0000000
--- a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/SSLTracker.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1999, 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.http;
-
-import org.osgi.framework.BundleContext;
-import org.osgi.util.tracker.ServiceTracker;
-
-public class SSLTracker extends ServiceTracker {
-	protected static final String sslsvcClass = "com.ibm.osg.service.ssl.SSLService"; //ssl //$NON-NLS-1$
-
-	protected SSLTracker(BundleContext context) {
-		super(context, sslsvcClass, null);
-
-		open();
-	}
-
-	//BUGBUG need to handle opening and closing of HTTPS port!
-	// e.g. httpAcceptor.createSSLListener();
-}
diff --git a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/SecureAction.java b/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/SecureAction.java
deleted file mode 100644
index a97dfc5..0000000
--- a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/SecureAction.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.http;
-
-import java.io.IOException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.security.*;
-import org.osgi.framework.Bundle;
-
-/**
- * Utility class to execute common privileged code.
- */
-public class SecureAction {
-	// make sure we use the correct controlContext;
-	private AccessControlContext controlContext;
-
-	/**
-	 * Constructs a new SecureAction object.  The constructed SecureAction object 
-	 * uses the caller's AccessControlContext to perform security checks 
-	 */
-	public SecureAction() {
-		// save the control context to be used.
-		this.controlContext = AccessController.getContext();
-	}
-
-	/**
-	 * Gets a resource from a bundle.
-	 * @param bundle the bundle to get the resource from
-	 * @param name The name of the resource
-	 * @return The URL of the resource
-	 */
-	
-	public URL getBundleResource(final Bundle bundle, final String name) {
-		if (System.getSecurityManager() == null)
-		     return bundle.getResource(name);
-		return (URL) AccessController.doPrivileged(new PrivilegedAction() {
-			public Object run() {
-				return bundle.getResource(name);
-			}
-		}, controlContext);
-	}
-	
-	public URLConnection openURL(final URL url) throws IOException {
-		if (System.getSecurityManager() == null)
-		    return open(url);
-		try {	
-			return (URLConnection) AccessController.doPrivileged(new PrivilegedExceptionAction() {
-				public Object run() throws IOException {
-					return open(url);
-				}
-			}, controlContext);  
-		} catch(PrivilegedActionException ex) {
-			throw (IOException) ex.getException();
-		}
-	}  
-	
-	URLConnection open(final URL url)throws IOException
-	{
-		URLConnection connection = url.openConnection();
-        connection.connect(); /* establish connection to check permissions */
-        return connection;
-	}
-	
-	/**
-	 * Returns a system property.  Same as calling
-	 * System.getProperty(String,String).
-	 * @param property the property key.
-	 * @param def the default value if the property key does not exist.
-	 * @return the value of the property or the def value if the property
-	 * does not exist.
-	 */
-	public String getProperty(final String property, final String def) {
-		if (System.getSecurityManager() == null)
-			return System.getProperty(property, def);
-		return (String) AccessController.doPrivileged(new PrivilegedAction() {
-			public Object run() {
-				return System.getProperty(property, def);
-			}
-		}, controlContext);
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/ServletRegistration.java b/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/ServletRegistration.java
deleted file mode 100644
index cd99c75..0000000
--- a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/ServletRegistration.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1999, 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.http;
-
-import java.io.IOException;
-import java.security.AccessControlContext;
-import java.security.AccessController;
-import javax.servlet.*;
-import org.eclipse.equinox.http.servlet.*;
-import org.osgi.framework.Bundle;
-import org.osgi.service.http.HttpContext;
-
-public class ServletRegistration implements Registration {
-	protected Bundle bundle;
-	protected HttpContext httpContext;
-	protected String alias;
-	protected Servlet servlet;
-	protected ServletContextImpl servletContext;
-	protected AccessControlContext accessControlContext;
-
-	protected ServletRegistration(Bundle bundle, String alias, Servlet servlet, HttpContext httpContext, ServletContextImpl servletContext) {
-		this.bundle = bundle;
-		this.alias = alias;
-		this.servlet = servlet;
-		this.httpContext = httpContext;
-		this.servletContext = servletContext;
-		// The constructor is called on the calling bundle's thread, therefore this
-		// should capture the AccessControlContext for the calling bundle.
-		accessControlContext = AccessController.getContext();
-	}
-
-	public Bundle getBundle() {
-		return (bundle);
-	}
-
-	public HttpContext getHttpContext() {
-		return (httpContext);
-	}
-
-	public void destroy() {
-		if (servlet != null) {
-			servlet.destroy();
-		}
-
-		this.alias = null;
-		this.servlet = null;
-	}
-
-	public java.lang.String getAlias() {
-		return (alias);
-	}
-
-	/**
-	 * This is to provide the request dispatcher direct access to the servlet for a
-	 * RequestDispatcher.include call
-	 * @return javax.servlet.Servlet
-	 */
-	public Servlet getServlet() {
-		return (servlet);
-	}
-
-	public void service(HttpServletRequestImpl request, HttpServletResponseImpl response) throws ServletException, IOException {
-		/* set additional data for the servlet request */
-		request.init(alias, servletContext);
-
-		service((ServletRequest) request, (ServletResponse) response);
-	}
-
-	public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
-		if (servlet instanceof SingleThreadModel) {
-			synchronized (this) {
-				servlet.service(request, response);
-			}
-		} else {
-			servlet.service(request, response);
-		}
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/StaticDataReader.java b/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/StaticDataReader.java
deleted file mode 100644
index be77cf6..0000000
--- a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/StaticDataReader.java
+++ /dev/null
@@ -1,228 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1999, 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.http;
-
-import java.io.*;
-import java.util.Hashtable;
-import java.util.StringTokenizer;
-
-public class StaticDataReader {
-	protected Http http;
-	protected static final String defaultMimeType = "application/octet-stream"; //$NON-NLS-1$
-	protected static final String defaultMimeTable = "mime.types"; //$NON-NLS-1$
-	protected static final String defaultStatusCodes = "status.codes"; //$NON-NLS-1$
-
-	/** file extentsions (String) => MIME type (String) */
-	protected Hashtable mimeTypes;
-
-	/** status code (Integer) => status phrase (String) */
-	protected Hashtable statusCodes;
-
-	/**
-	 * Construct mime table from a standard mime.types file.
-	 */
-	public StaticDataReader(Http http) {
-		this.http = http;
-
-		InputStream in = getClass().getResourceAsStream(defaultMimeTable);
-		mimeTypes = parseMimeTypes(in);
-
-		in = getClass().getResourceAsStream(defaultStatusCodes);
-		statusCodes = parseStatusCodes(in);
-
-	}
-
-	/**
-	 * Determine the mime type of a file based on the file extension.
-	 * This method is more convenient to use than getMIMEType because
-	 * takes a filename as an argument.  It is also able to discern that
-	 * files which are directories, such as
-	 * http://www.ibm.com/  are assumed to be HTML, rather than appOctet.
-	 *
-	 * @param String filename - the name of the file, which must
-	 * not be null.
-	 * @returns String - the mime type of the file.
-	 */
-	public String computeMimeType(String filename) {
-		int i = filename.lastIndexOf('.');
-
-		if (i >= 0) {
-			return (getMimeType(filename.substring(i + 1)));
-		}
-
-		return (getMimeType(filename));
-	}
-
-	/**
-	 * This method was created in VisualAge.
-	 * @return java.lang.String
-	 * @param statusCode int
-	 */
-	public String computeStatusPhrase(int statusCode) {
-		String statusPhrase = (String) statusCodes.get(new Integer(statusCode));
-		if (statusPhrase != null) {
-			return (statusPhrase);
-		}
-
-		return (HttpMsg.HTTP_STATUS_CODE_NOT_FOUND);
-	}
-
-	private String getMimeType(String extension) {
-		String type = (String) mimeTypes.get(extension.toLowerCase());
-
-		if (type != null) {
-			return (type);
-		}
-
-		return (defaultMimeType);
-	}
-
-	/**
-	 * Parses the default MIME type table.
-	 *
-	 * @return Default MIME type Hashtable
-	 */
-	private Hashtable parseMimeTypes(InputStream in) {
-		Hashtable resultMimeTypes = new Hashtable();
-
-		if (in != null) {
-			try {
-				BufferedReader rdr = new BufferedReader(new InputStreamReader(in, "8859_1")); //$NON-NLS-1$
-				while (true) {
-					String line = rdr.readLine();
-					if (line == null) /* EOF */
-					{
-						break;
-					}
-
-					if ((line.length() != 0) && (line.charAt(0) != '#')) { // skip comments and blank lines
-						StringTokenizer tokens = new StringTokenizer(line);
-						String type = tokens.nextToken();
-						while (tokens.hasMoreTokens()) {
-							String ext = tokens.nextToken();
-							resultMimeTypes.put(ext.toLowerCase(), type);
-						}
-					}
-				}
-			} catch (Exception e) {
-				http.logError(HttpMsg.HTTP_DEFAULT_MIME_TABLE_ERROR, e);
-			} finally {
-				try {
-					in.close();
-				} catch (IOException e) {
-					// TODO: consider logging
-				}
-			}
-		}
-
-		return (resultMimeTypes);
-	}
-
-	/**
-	 * This method was created in VisualAge.
-	 */
-	private Hashtable parseStatusCodes(InputStream in) {
-		Hashtable resultStatusCodes = new Hashtable();
-
-		if (in != null) {
-			try {
-				BufferedReader rdr = new BufferedReader(new InputStreamReader(in, "8859_1")); //$NON-NLS-1$
-				while (true) {
-					String line = rdr.readLine();
-					if (line == null) /* EOF */
-					{
-						break;
-					}
-
-					if ((line.length() != 0) && (line.charAt(0) != '#')) { // skip comments and blank lines
-						int space = line.indexOf(' ');
-						Integer status = new Integer(line.substring(0, space));
-						String statusPhrase = line.substring(space + 1);
-						resultStatusCodes.put(status, statusPhrase);
-					}
-				}
-			} catch (Exception e) {
-				http.logError(HttpMsg.HTTP_STATUS_CODES_TABLE_ERROR, e);
-			} finally {
-				try {
-					in.close();
-				} catch (IOException e) {
-					// TODO: consider logging
-				}
-			}
-		}
-
-		return (resultStatusCodes);
-	}
-
-	/* TODO: Consider Removing this method
-	 * Read alias data and populate a Hashtable.
-	 * The inputstream is always closed.
-	 *
-	 * @param in InputStream from which to read alias data.
-	 * @return Hashtable of aliases.
-	 */
-	/*
-	private static Hashtable parseAliases(InputStream in) {
-		Hashtable aliases = new Hashtable(37);
-
-		if (in != null) {
-			try {
-				try {
-					BufferedReader br = new BufferedReader(new InputStreamReader(in, "8859_1")); //$NON-NLS-1$
-
-					while (true) {
-						String line = br.readLine();
-
-						if (line == null) // EOF
-						{
-							break; // done
-						}
-
-						Tokenizer tokenizer = new Tokenizer(line);
-
-						String master = tokenizer.getString("#"); //$NON-NLS-1$
-
-						if (master != null) {
-							master = master.toUpperCase();
-
-							aliases.put(master, master);
-
-							parseloop: while (true) {
-								String alias = tokenizer.getString("#"); //$NON-NLS-1$
-
-								if (alias == null) {
-									break parseloop;
-								}
-
-								aliases.put(alias.toUpperCase(), master);
-							}
-						}
-					}
-				} catch (IOException e) {
-					if (Http.DEBUG) {
-						e.printStackTrace();
-					}
-				}
-			} finally {
-				try {
-					in.close();
-				} catch (IOException ee) {
-					// TODO: consider logging
-				}
-			}
-		}
-
-		return (aliases);
-	}
-	*/
-
-}
diff --git a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/Tokenizer.java b/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/Tokenizer.java
deleted file mode 100644
index 76dd589..0000000
--- a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/Tokenizer.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1999, 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.http;
-
-public class Tokenizer {
-	private char value[];
-	private int max;
-	private int cursor;
-
-	public Tokenizer(String value) {
-		this.value = value.toCharArray();
-		max = this.value.length;
-		cursor = 0;
-	}
-
-	public char getChar() {
-		int cur = cursor;
-		if (cur < max) {
-			cursor = cur + 1;
-			return (value[cur]);
-		}
-		return ('\0'); /* end of value */
-	}
-
-	public String getString(String terminals) {
-		skipWhiteSpace();
-		char[] val = value;
-		int cur = cursor;
-
-		if (cur < max) {
-			if (val[cur] == '\"') /* if a quoted string */
-			{
-				cur++; /* skip quote */
-				char c = '\0';
-				int begin = cur;
-				for (; cur < max; cur++) {
-					c = val[cur];
-					if (c == '\"') {
-						break;
-					}
-				}
-				int count = cur - begin;
-				if (c == '\"') {
-					cur++;
-				}
-				cursor = cur;
-				if (count > 0) {
-					skipWhiteSpace();
-					return (new String(val, begin, count));
-				}
-			} else /* not a quoted string; same as token */
-			{
-				int begin = cur;
-				for (; cur < max; cur++) {
-					char c = val[cur];
-					if ((c == ' ') || (c == '\t') || (terminals.indexOf(c) != -1)) {
-						break;
-					}
-				}
-				cursor = cur;
-				int count = cur - begin;
-				if (count > 0) {
-					skipWhiteSpace();
-					return (new String(val, begin, count));
-				}
-			}
-		}
-		return (null);
-	}
-
-	public String getToken(String terminals) {
-		skipWhiteSpace();
-		char[] val = value;
-		int cur = cursor;
-
-		int begin = cur;
-		for (; cur < max; cur++) {
-			char c = val[cur];
-			if ((c == ' ') || (c == '\t') || (terminals.indexOf(c) != -1)) {
-				break;
-			}
-		}
-		cursor = cur;
-		int count = cur - begin;
-		if (count > 0) {
-			skipWhiteSpace();
-			return (new String(val, begin, count));
-		}
-		return (null);
-	}
-
-	private void skipWhiteSpace() {
-		char[] val = value;
-		int cur = cursor;
-
-		for (; cur < max; cur++) {
-			char c = val[cur];
-			if ((c == ' ') || (c == '\t')) {
-				continue;
-			}
-			break;
-		}
-		cursor = cur;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/URI.java b/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/URI.java
deleted file mode 100644
index 8eec1e9..0000000
--- a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/URI.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1999, 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.http;
-
-import java.io.UnsupportedEncodingException;
-
-public class URI {
-	/**
-	 * Takes an encoded string and decodes it
-	 * @param input encoded String
-	 * @param charset The charset to use convert escaped characters
-	 * @return Decoded String.
-	 */
-	public static String decode(String input, String charset) {
-		if (input == null) {
-			return null;
-		}
-
-		return decode(input, 0, input.length(), charset);
-	}
-
-	/**
-	 * Takes an encoded string and decodes it
-	 * @param input encoded String (must not be null)
-	 * @param begin the beginning index, inclusive.
-	 * @param end   the ending index, exclusive.
-	 * @param charset The charset to use convert escaped characters
-	 * @return Decoded String.
-	 */
-	public static String decode(String input, int begin, int end, String charset) {
-		if (input == null) {
-			return (null);
-		}
-
-		int index = input.indexOf('%', begin);
-		if ((index == -1) || (index >= end)) {
-			return input.substring(begin, end).replace('+', ' ');
-		}
-
-		int size = end - begin;
-		StringBuffer result = new StringBuffer(size);
-		byte[] bytes = new byte[size];
-		int length = 0;
-
-		for (int i = begin; i < end; i++) {
-			char c = input.charAt(i);
-
-			if (c == '%') {
-				if (i + 2 >= end) {
-					throw new IllegalArgumentException();
-				}
-
-				i++;
-				int digit = Character.digit(input.charAt(i), 16);
-				if (digit == -1) {
-					throw new IllegalArgumentException();
-				}
-				int value = (digit << 4);
-
-				i++;
-				digit = Character.digit(input.charAt(i), 16);
-				if (digit == -1) {
-					throw new IllegalArgumentException();
-				}
-				value |= digit;
-
-				bytes[length] = (byte) value;
-				length++;
-			} else {
-				if (length > 0) {
-					result.append(convert(bytes, 0, length, charset));
-
-					length = 0;
-				}
-
-				if (c == '+') {
-					c = ' ';
-				}
-
-				result.append(c);
-			}
-		}
-
-		if (length > 0) {
-			result.append(convert(bytes, 0, length, charset));
-
-			length = 0;
-		}
-
-		return result.toString();
-	}
-
-	/**
-	 * Convert bytes to a String using the supplied charset.
-	 * @param input Array of bytes to convert.
-	 * @param offset the beginning index, inclusive.
-	 * @param length number of bytes to convert.
-	 * @param charset The charset to use convert the bytes.
-	 * @return String containing converted bytes.
-	 */
-	public static String convert(byte[] input, int offset, int length, String charset) {
-		if (charset != null) {
-			try {
-				return new String(input, offset, length, charset);
-			} catch (UnsupportedEncodingException e) {
-				/* if the supplied charset is invalid,
-				 * fall through to use 8859_1.
-				 */
-			}
-		}
-
-		try {
-			return new String(input, offset, length, "8859_1"); //$NON-NLS-1$
-		} catch (UnsupportedEncodingException e) {
-			/* in the unlikely event 8859_1 is not present */
-			return new String(input, offset, length);
-		}
-	}
-}
diff --git a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/mime.types b/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/mime.types
deleted file mode 100644
index 764b0ae..0000000
--- a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/mime.types
+++ /dev/null
@@ -1,44 +0,0 @@
-###############################################################################
-# Copyright (c) 2005 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
-###############################################################################
-
-# mime.types
-# This file contains the default mapping of file extension to MIME types.
-# This file must be encoded in ISO-8859-1.
-# Extension are processed in a case insensitive manner.
-
-# MIME type			Extension
-
-application/octet-stream	bin dms lha lzh exe class
-application/x-gtar		gtar
-application/x-javascript	js
-application/x-tar		tar
-application/x-tcl		tcl
-application/zip			zip jar jxe
-application/pdf			pdf
-audio/basic			au snd
-audio/midi			mid midi kar
-audio/mpeg			mpga mp2 mp3
-audio/x-aiff			aif aiff aifc
-audio/x-wav			wav
-image/gif			gif
-image/png			png
-image/jpeg			jpeg jpg jpe
-image/vnd.map.wbmp              wbmp
-model/vrml			wrl vrml
-text/html			html htm
-text/plain			asc txt
-text/richtext			rtx
-text/rtf			rtf
-text/sgml			sgml sgm
-text/xml			xml
-text/css			css
-text/vnd.map.wml                wml
-video/mpeg			mpeg mpg mpe
diff --git a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/servlet/HttpServletRequestImpl.java b/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/servlet/HttpServletRequestImpl.java
deleted file mode 100644
index a7fd6a5..0000000
--- a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/servlet/HttpServletRequestImpl.java
+++ /dev/null
@@ -1,1444 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1999, 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.http.servlet;
-
-import java.io.*;
-import java.security.Principal;
-import java.util.*;
-import javax.servlet.RequestDispatcher;
-import javax.servlet.ServletInputStream;
-import javax.servlet.http.*;
-
-import org.eclipse.equinox.http.*;
-import org.eclipse.equinox.socket.SocketInterface;
-import org.eclipse.osgi.util.NLS;
-import org.osgi.service.http.HttpContext;
-
-/**
- * Implementation of the HttpServletRequest interface
- *
- * Per Servlet 2.2 Section 3.3.3.3, this object need not be thread-safe.
- */
-
-public class HttpServletRequestImpl implements HttpServletRequest {
-
-	protected Http http;
-	protected HttpServletResponseImpl response;
-	protected SocketInterface socket;
-	protected ServletInputStreamImpl servletInputStream;
-	protected String scheme;
-	protected String authType = null;
-	protected String remoteUser = null;
-
-	protected int contentLength = -2;
-	protected String contentType = null;
-	protected String serverName = null;
-
-	protected Hashtable parameters = null;
-	protected Hashtable attributes = null;
-	protected BufferedReader reader = null;
-	protected ServletInputStream inputstream = null;
-	protected Cookie[] cookies;
-
-	//request-line variables
-	protected String method = null;
-	protected String reqURI = null; /* URI decoded */
-	protected String protocol = null;
-	protected String servletPath = null;
-	protected String pathInfo = null; /* URI decoded */
-	protected String queryString = null;
-	protected String charset = null;
-
-	protected Hashtable headers = null;
-	protected HttpSessionImpl session;
-	protected String requestedSessionId = null;
-	protected ServletContextImpl servletContext;
-
-	protected boolean parsedQueryData = false;
-
-	public HttpServletRequestImpl(SocketInterface socket, Http http, HttpServletResponseImpl response) throws IOException {
-		this.response = response;
-		this.socket = socket;
-		this.http = http;
-		scheme = socket.getScheme();
-
-		servletInputStream = new ServletInputStreamImpl(socket.getInputStream());
-
-		response.setRequest(this);
-
-		parseHeaders(); /* allocate headers Hashtable */
-	}
-
-	/**
-	 * Initialize additional request data.
-	 *
-	 * @param servletPathParam URI alias for this request
-	 * @param servletContextParam ServletContext for this request
-	 */
-	public void init(String servletPathParam, ServletContextImpl servletContextParam) {
-		// BUGBUG Need to deal with context path
-		// Servlet 2.2 Section 5.4
-		this.servletPath = servletPathParam;
-		this.servletContext = servletContextParam;
-
-		String tempPathInfo = reqURI.substring(servletPathParam.length());
-		if ((tempPathInfo.length() == 0) || tempPathInfo.equals("/")) //$NON-NLS-1$
-		{
-			/* leave as null */
-		} else {
-			this.pathInfo = tempPathInfo;
-		}
-
-		if (authType == null) {
-			Object obj = getAttribute(HttpContext.AUTHENTICATION_TYPE);
-			if (obj instanceof String) {
-				authType = (String) obj;
-			}
-		}
-
-		if (remoteUser == null) {
-			Object obj = getAttribute(HttpContext.REMOTE_USER);
-			if (obj instanceof String) {
-				remoteUser = (String) obj;
-			}
-		}
-	}
-
-	/**
-	 * Returns the value of the named attribute of the request, or
-	 * null if the attribute does not exist.  This method allows
-	 * access to request information not already provided by the other
-	 * methods in this interface.  Attribute names should follow the
-	 * same convention as package names.
-	 * The following predefined attributes are provided.
-	 *
-	 * <TABLE BORDER>
-	 * <tr>
-	 *	<th>Attribute Name</th>
-	 *	<th>Attribute Type</th>
-	 *	<th>Description</th>
-	 *	</tr>
-	 *
-	 * <tr>
-	 *	<td VALIGN=TOP>javax.net.ssl.cipher_suite</td>
-	 *	<td VALIGN=TOP>string</td>
-	 *	<td>The string name of the SSL cipher suite in use, if the
-	 *		request was made using SSL</td>
-	 *	</tr>
-	 *
-	 * <tr>
-	 *	<td VALIGN=TOP>javax.net.ssl.peer_certificates</td>
-	 *	<td VALIGN=TOP>array of javax.security.cert.X509Certificate</td>
-	 *	<td>The chain of X.509 certificates which authenticates the client.
-	 *		This is only available when SSL is used with client
-	 *		authentication is used.</td>
-	 *	</tr>
-	 *
-	 * <tr>
-	 *	<td VALIGN=TOP>javax.net.ssl.session</td>
-	 *	<td VALIGN=TOP>javax.net.ssl.SSLSession</td>
-	 *	<td>An SSL session object, if the request was made using SSL.</td>
-	 *	</tr>
-	 *
-	 * </TABLE>
-	 *
-	 * <BR>
-	 * <P>The package (and hence attribute) names beginning with java.*,
-	 * and javax.* are reserved for use by Javasoft. Similarly, com.sun.*
-	 * is reserved for use by Sun Microsystems.
-	 *
-	 * @param name the name of the attribute whose value is required
-	 */
-	public Object getAttribute(String name) {
-		if (attributes != null) {
-			return (attributes.get(name));
-		}
-		return (null);
-	}
-
-	/**
-	 * Returns an enumeration of attribute names contained in this request.
-	 */
-
-	public Enumeration getAttributeNames() {
-		if (attributes != null) {
-			return (attributes.keys());
-		}
-		return (new Vector(0).elements());
-	}
-
-	/**
-	 * Gets the authentication scheme of this request.  Same as the CGI
-	 * variable AUTH_TYPE.
-	 *
-	 * @return this request's authentication scheme, or null if none.
-	 */
-	public String getAuthType() {
-		return (authType);
-	}
-
-	/**
-	 * Returns the character set encoding for the input of this request.
-	 */
-	public String getCharacterEncoding() {
-		if (contentType == null) {
-			getContentType(); /* parse the content type */
-		}
-
-		return (charset);
-	}
-
-	/**
-	 * Returns the size of the request entity data, or -1 if not known.
-	 * Same as the CGI variable CONTENT_LENGTH.
-	 */
-	public int getContentLength() {
-		if (contentLength == -2) {
-			contentLength = getIntHeaderUpper("CONTENT-LENGTH"); //$NON-NLS-1$
-		}
-		return (contentLength);
-	}
-
-	/**
-	 * Returns the Internet Media Type of the request entity data, or
-	 * null if not known. Same as the CGI variable CONTENT_TYPE.
-	 */
-
-	public String getContentType() {
-		if (contentType == null) {
-			contentType = getHeaderUpper("CONTENT-TYPE"); //$NON-NLS-1$
-
-			if (contentType != null) {
-				int index = contentType.indexOf(';', 0);
-				if (index >= 0) {
-					Tokenizer tokenizer = new Tokenizer(contentType);
-
-					// TODO: verify next statement. It was String mimetype = tokenizer.getToken(";"); 
-					tokenizer.getToken(";"); //$NON-NLS-1$
-					tokenizer.getChar(); /* eat semicolon */
-
-					parseloop: while (true) {
-						String attribute = tokenizer.getToken("="); //$NON-NLS-1$
-						char c = tokenizer.getChar();
-
-						if (c != '=') {
-							break parseloop; /* invalid content type */
-						}
-
-						String value = tokenizer.getString(";"); //$NON-NLS-1$
-						c = tokenizer.getChar();
-
-						if ("charset".equalsIgnoreCase(attribute)) //$NON-NLS-1$
-						{
-							charset = value;
-						}
-
-						if (c == '\0') {
-							break parseloop;
-						}
-					}
-				}
-			}
-		}
-
-		return (contentType);
-	}
-
-	/**
-	 * Gets an array of cookies found in this request.  If no cookies are present, an empty
-	 * array was returned.
-	 * @return the array of cookies found in this request
-	 */
-	public Cookie[] getCookies() {
-		parseCookies();
-
-		return ((Cookie[]) cookies.clone());
-	}
-
-	/**
-	 * Gets the value of the requested date header field of this
-	 * request.  If the header can't be converted to a date, the method
-	 * throws an IllegalArgumentException.  The case of the header
-	 * field name is ignored.
-	 *
-	 * From HTTP/1.1 RFC 2616
-	 * 3.3.1 Full Date
-	 *
-	 *    HTTP applications have historically allowed three different formats
-	 *    for the representation of date/time stamps:
-	 *
-	 *       Sun, 06 Nov 1994 08:49:37 GMT  ; RFC 822, updated by RFC 1123
-	 *       Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036
-	 *       Sun Nov  6 08:49:37 1994       ; ANSI C's asctime() format
-	 *
-	 *    The first format is preferred as an Internet standard and represents
-	 *    a fixed-length subset of that defined by RFC 1123 [8] (an update to
-	 *    RFC 822 [9]). The second format is in common use, but is based on the
-	 *    obsolete RFC 850 [12] date format and lacks a four-digit year.
-	 *    HTTP/1.1 clients and servers that parse the date value MUST accept
-	 *    all three formats (for compatibility with HTTP/1.0), though they MUST
-	 *    only generate the RFC 1123 format for representing HTTP-date values
-	 *    in header fields. See section 19.3 for further information.
-	 *
-	 *       Note: Recipients of date values are encouraged to be robust in
-	 *       accepting date values that may have been sent by non-HTTP
-	 *       applications, as is sometimes the case when retrieving or posting
-	 *       messages via proxies/gateways to SMTP or NNTP.
-	 *
-	 *    All HTTP date/time stamps MUST be represented in Greenwich Mean Time
-	 *    (GMT), without exception. For the purposes of HTTP, GMT is exactly
-	 *    equal to UTC (Coordinated Universal Time). This is indicated in the
-	 *    first two formats by the inclusion of "GMT" as the three-letter
-	 *    abbreviation for time zone, and MUST be assumed when reading the
-	 *    asctime format. HTTP-date is case sensitive and MUST NOT include
-	 *    additional LWS beyond that specifically included as SP in the
-	 *    grammar.
-	 *
-	 *        HTTP-date    = rfc1123-date | rfc850-date | asctime-date
-	 *        rfc1123-date = wkday "," SP date1 SP time SP "GMT"
-	 *        rfc850-date  = weekday "," SP date2 SP time SP "GMT"
-	 *        asctime-date = wkday SP date3 SP time SP 4DIGIT
-	 *        date1        = 2DIGIT SP month SP 4DIGIT
-	 *                       ; day month year (e.g., 02 Jun 1982)
-	 *        date2        = 2DIGIT "-" month "-" 2DIGIT
-	 *                       ; day-month-year (e.g., 02-Jun-82)
-	 *        date3        = month SP ( 2DIGIT | ( SP 1DIGIT ))
-	 *                       ; month day (e.g., Jun  2)
-	 *        time         = 2DIGIT ":" 2DIGIT ":" 2DIGIT
-	 *                       ; 00:00:00 - 23:59:59
-	 *        wkday        = "Mon" | "Tue" | "Wed"
-	 *                     | "Thu" | "Fri" | "Sat" | "Sun"
-	 *        weekday      = "Monday" | "Tuesday" | "Wednesday"
-	 *                     | "Thursday" | "Friday" | "Saturday" | "Sunday"
-	 *        month        = "Jan" | "Feb" | "Mar" | "Apr"
-	 *                     | "May" | "Jun" | "Jul" | "Aug"
-	 *                     | "Sep" | "Oct" | "Nov" | "Dec"
-	 *
-	 *       Note: HTTP requirements for the date/time stamp format apply only
-	 *       to their usage within the protocol stream. Clients and servers are
-	 *       not required to use these formats for user presentation, request
-	 *       logging, etc.
-	 *
-	 * @param name the String containing the name of the requested
-	 * header field
-	 * @return the value the requested date header field, or -1 if not
-	 * found.
-	 */
-	public long getDateHeader(String name) {
-		//headers are stored as strings and must be converted
-		String date = getHeader(name);
-
-		if (date != null) {
-			HttpDate d = new HttpDate(date);
-
-			if (d.isValid()) {
-				return (d.getAsLong()); // Parsed OK, so get the value as a Long
-			}
-			throw new IllegalArgumentException();
-		}
-
-		return (-1);
-	}
-
-	/**
-	 * Gets the value of the requested header field of this request.
-	 * The case of the header field name is ignored.
-	 *
-	 * @param name the String containing the name of the requested
-	 * header field
-	 * @return the value of the requested header field, or null if not
-	 * known.
-	 */
-
-	//This should be case insensitive
-	public String getHeader(String name) {
-		return ((String) headers.get(name.toUpperCase()));
-	}
-
-	/**
-	 * Gets the header names for this request.
-	 *
-	 * @return an enumeration of strings representing the header names
-	 * for this request. Some server implementations do not allow
-	 * headers to be accessed in this way, in which case this method
-	 * will return null.
-	 */
-	public Enumeration getHeaderNames() {
-		return (headers.keys());
-	}
-
-	protected String getHeaderUpper(String name) {
-		return ((String) headers.get(name));
-	}
-
-	/**
-	 * Returns an input stream for reading binary data in the request body.
-	 *
-	 * @see getReader
-	 * @exception IllegalStateException if getReader has been
-	 *	called on this same request.
-	 * @exception IOException on other I/O related errors.
-	 */
-	public ServletInputStream getInputStream() {
-		if (inputstream == null) {
-			synchronized (this) {
-				if (inputstream == null) {
-					if (reader != null) {
-						throw new IllegalStateException();
-					}
-
-					inputstream = servletInputStream.getServletInputStream(getContentLength());
-				}
-			}
-		}
-
-		return (inputstream);
-	}
-
-	/**
-	 * Gets the value of the specified integer header field of this
-	 * request.  The case of the header field name is ignored.  If the
-	 * header can't be converted to an integer, the method throws a
-	 * NumberFormatException.
-	 *
-	 * @param name the String containing the name of the requested
-	 * header field
-	 * @return the value of the requested header field, or -1 if not
-	 * found.
-	 */
-
-	//This lookup is case insensitive
-	public int getIntHeader(String name) {
-		String value = getHeader(name);
-
-		if (value != null) {
-			return (Integer.parseInt(value));
-		}
-
-		return (-1);
-	}
-
-	protected int getIntHeaderUpper(String name) {
-		String value = getHeaderUpper(name);
-
-		if (value != null) {
-			return (Integer.parseInt(value));
-		}
-
-		return (-1);
-	}
-
-	/**
-	 * Gets the HTTP method (for example, GET, POST, PUT) with which
-	 * this request was made. Same as the CGI variable REQUEST_METHOD.
-	 *
-	 * @return the HTTP method with which this request was made
-	 */
-	public String getMethod() {
-		return (method);
-	}
-
-	/**
-	 * Returns a string containing the lone value of the specified
-	 * parameter, or null if the parameter does not exist. For example,
-	 * in an HTTP servlet this method would return the value of the
-	 * specified query string parameter. Servlet writers should use
-	 * this method only when they are sure that there is only one value
-	 * for the parameter.  If the parameter has (or could have)
-	 * multiple values, servlet writers should use
-	 * getParameterValues. If a multiple valued parameter name is
-	 * passed as an argument, the return value is implementation
-	 * dependent.
-	 *
-	 * @see #getParameterValues
-	 *
-	 * @param name the name of the parameter whose value is required.
-	 */
-	public String getParameter(String name) {
-		String[] values = getParameterValues(name);
-
-		if ((values != null) && (values.length > 0)) {
-			return (values[0]);
-		}
-
-		return (null);
-	}
-
-	/**
-	 * Returns the parameter names for this request as an enumeration
-	 * of strings, or an empty enumeration if there are no parameters
-	 * or the input stream is empty.  The input stream would be empty
-	 * if all the data had been read from the stream returned by the
-	 * method getInputStream.
-	 */
-	public Enumeration getParameterNames() {
-		if (!parsedQueryData) {
-			parseQueryData();
-		}
-
-		if (parameters != null) {
-			return (parameters.keys());
-		}
-
-		return (new Vector(0).elements());
-	}
-
-	/**
-	 * Returns the values of the specified parameter for the request as
-	 * an array of strings, or null if the named parameter does not
-	 * exist. For example, in an HTTP servlet this method would return
-	 * the values of the specified query string or posted form as an
-	 * array of strings.
-	 *
-	 * @param name the name of the parameter whose value is required.
-	 * @see javax.servlet.ServletRequest#getParameter
-	 */
-	public String[] getParameterValues(String name) {
-		if (!parsedQueryData) {
-			parseQueryData();
-		}
-
-		if (parameters != null) {
-			return ((String[]) parameters.get(name));
-		}
-
-		return (null);
-	}
-
-	/**
-	 * Gets any optional extra path information following the servlet
-	 * path of this request's URI, but immediately preceding its query
-	 * string. Same as the CGI variable PATH_INFO.
-	 *
-	 * @return the optional path information following the servlet
-	 * path, but before the query string, in this request's URI; null
-	 * if this request's URI contains no extra path information
-	 */
-	public String getPathInfo() {
-		return (pathInfo);
-	}
-
-	/**
-	 * Gets any optional extra path information following the servlet
-	 * path of this request's URI, but immediately preceding its query
-	 * string, and translates it to a real path.  Similar to the CGI
-	 * variable PATH_TRANSLATED
-	 *
-	 * @return extra path information translated to a real path or null
-	 * if no extra path information is in the request's URI
-	 */
-	public String getPathTranslated() {
-		// JSP 1.0 Section B.5
-		return servletContext.getRealPath(getPathInfo());
-	}
-
-	/**
-	 * Returns the protocol and version of the request as a string of
-	 * the form <code>&lt;protocol&gt;/&lt;major version&gt;.&lt;minor
-	 * version&gt</code>.  Same as the CGI variable SERVER_PROTOCOL.
-	 */
-	public String getProtocol() {
-		return (protocol);
-	}
-
-	/**
-	 * Gets any query string that is part of the HTTP request URI.
-	 * Same as the CGI variable QUERY_STRING.
-	 *
-	 * @return query string that is part of this request's URI, or null
-	 * if it contains no query string
-	 */
-	public String getQueryString() {
-		return (queryString);
-	}
-
-	/**
-	 * Returns a buffered reader for reading text in the request body.
-	 * This translates character set encodings as appropriate.
-	 *
-	 * @see getInputStream
-	 *
-	 * @exception UnsupportedEncodingException if the character set encoding
-	 *  is unsupported, so the text can't be correctly decoded.
-	 * @exception IllegalStateException if getInputStream has been
-	 *	called on this same request.
-	 * @exception IOException on other I/O related errors.
-	 */
-	public BufferedReader getReader() {
-		if (reader == null) {
-			synchronized (this) {
-				if (reader == null) {
-					if (inputstream != null) {
-						throw new IllegalStateException();
-					}
-
-					// BUGBUG Must create reader with charset getCharacterEncoding or iso-8859-1 if null.
-					// Servlet 2.3 Section 4.9
-					reader = new BufferedReader(new InputStreamReader(servletInputStream.getServletInputStream(getContentLength())));
-				}
-			}
-		}
-
-		return (reader);
-	}
-
-	/**
-	 * Applies alias rules to the specified virtual path and returns
-	 * the corresponding real path, or null if the translation can not
-	 * be performed for any reason.  For example, an HTTP servlet would
-	 * resolve the path using the virtual docroot, if virtual hosting
-	 * is enabled, and with the default docroot otherwise.  Calling
-	 * this method with the string "/" as an argument returns the
-	 * document root.
-	 *
-	 * @param path the virtual path to be translated to a real path
-	 * *deprecated
-	 */
-	public String getRealPath(String path) {
-		return servletContext.getRealPath(path);
-	}
-
-	/**
-	 * Returns the IP address of the agent that sent the request.
-	 * Same as the CGI variable REMOTE_ADDR.
-	 */
-	public String getRemoteAddr() {
-		return (socket.getInetAddress().getHostAddress());
-	}
-
-	/**
-	 * Returns the fully qualified host name of the agent that sent the
-	 * request. Same as the CGI variable REMOTE_HOST.
-	 */
-	public String getRemoteHost() {
-		return (socket.getInetAddress().getHostName());
-	}
-
-	/**
-	 * Gets the name of the user making this request.  The user name is
-	 * set with HTTP authentication.  Whether the user name will
-	 * continue to be sent with each subsequent communication is
-	 * browser-dependent.  Same as the CGI variable REMOTE_USER.
-	 *
-	 * @return the name of the user making this request, or null if not
-	 * known.
-	 */
-	public String getRemoteUser() {
-		return (remoteUser);
-	}
-
-	/**
-	 * Returns the session id specified with this request.  This may differ from
-	 * the session id in the current session if the session id given by the
-	 * client was invalid for whatever reason and a new session was created.
-	 * This method will return null if the request does not have a session
-	 * associated with it.
-	 *
-	 * @return the session id specified by this request, or null if the
-	 * request did not specify a session id
-	 *
-	 * @see #isRequestedSessionIdValid */
-	public String getRequestedSessionId() {
-		parseCookies(); /* allocate cookies array */
-
-		if (requestedSessionId == null) {
-			String sessionCookieName = HttpSessionImpl.sessionCookieName;
-			int numCookies = cookies.length;
-			for (int i = 0; i < numCookies; i++) {
-				Cookie cookie = cookies[i];
-				if (sessionCookieName.equals(cookie.getName())) {
-					requestedSessionId = cookie.getValue();
-					break;
-				}
-			}
-		}
-
-		return (requestedSessionId);
-	}
-
-	/**
-	 * Gets, from the first line of the HTTP request, the part of this
-	 * request's URI that is to the left of any query string.
-	 * For example,
-	 *
-	 * <blockquote>
-	 * <table>
-	 * <tr align=left><th>First line of HTTP request<th>
-	 * <th>Return from <code>getRequestURI</code>
-	 * <tr><td>POST /some/path.html HTTP/1.1<td><td>/some/path.html
-	 * <tr><td>GET http://foo.bar/a.html HTTP/1.0
-	 * <td><td>http://foo.bar/a.html
-	 * <tr><td>HEAD /xyz?a=b HTTP/1.1<td><td>/xyz
-	 * </table>
-	 * </blockquote>
-	 *
-	 * <p>To reconstruct a URL with a URL scheme and host, use the
-	 * method javax.servlet.http.HttpUtils.getRequestURL, which returns
-	 * a StringBuffer.
-	 *
-	 * @return this request's URI
-	 * @see javax.servlet.http.HttpUtils#getRequestURL
-	 */
-	public String getRequestURI() {
-		// BUGBUG this should probably be URI encoded?
-		// Servlet 2.2 Section 5.4
-		return (reqURI);
-	}
-
-	/**
-	 * Returns the scheme of the URL used in this request, for example
-	 * "http", "https", or "ftp".  Different schemes have different
-	 * rules for constructing URLs, as noted in RFC 1738.  The URL used
-	 * to create a request may be reconstructed using this scheme, the
-	 * server name and port, and additional information such as URIs.
-	 */
-	public String getScheme() {
-		return (scheme);
-	}
-
-	/**
-	 * Returns the host name of the server that received the request.
-	 * Same as the CGI variable SERVER_NAME.
-	 */
-	public String getServerName() {
-
-		if (serverName == null) {
-			String value = getHeaderUpper("HOST"); //$NON-NLS-1$
-			if (value != null) {
-				int n = value.indexOf(':');
-				if (n < 0) {
-					serverName = value;
-				} else {
-					serverName = value.substring(0, n).trim();
-				}
-			} else {
-				serverName = socket.getLocalAddress().getHostName();
-			}
-		}
-		return serverName;
-	}
-
-	/**
-	 * Returns the port number on which this request was received.
-	 * Same as the CGI variable SERVER_PORT.
-	 */
-	public int getServerPort() {
-		return (socket.getLocalPort());
-	}
-
-	/**
-	 * Gets the part of this request's URI that refers to the servlet
-	 * being invoked. Analogous to the CGI variable SCRIPT_NAME.
-	 *
-	 * @return the servlet being invoked, as contained in this
-	 * request's URI
-	 */
-	public String getServletPath() {
-		return (servletPath);
-	}
-
-	/**
-	 * Returns the current valid session associated with this request.
-	 * A session will be created for the
-	 * request if there is not already a session associated with the request.
-	 *
-	 * To ensure the session is properly
-	 * maintained, the servlet developer must call this method before the
-	 * response is committed.
-	 *
-	 * @return the session associated with this request.
-	 */
-	public HttpSession getSession() {
-		return (getSession(true));
-	}
-
-	/**
-	 * Returns the current valid session associated with this request.
-	 * If there is not already a session associated with the request,
-	 * a session will be created for the request only
-	 * if the argument is true.
-	 *
-	 * To ensure the session is properly
-	 * maintained, the servlet developer must call this method before the
-	 * response is committed.
-	 *
-	 * If the create flag is set to false and no session
-	 * is associated with this request, then this method will return null.
-	 *
-	 * <p><b>Note</b>: to ensure the session is properly maintained,
-	 * the servlet developer must call this method (at least once)
-	 * before any output is written to the response.
-	 *
-	 * <p>Additionally, application-writers need to be aware that newly
-	 * created sessions (that is, sessions for which
-	 * <code>HttpSession.isNew</code> returns true) do not have any
-	 * application-specific state.
-	 *
-	 * @return the session associated with this request or null if
-	 * create was false and no valid session is associated
-	 * with this request.
-	 */
-	public synchronized HttpSession getSession(boolean create) {
-		if (session != null) /* if session cached in this request */
-		{
-			/* test to see if the session is still valid */
-			if (session.isValid(false)) {
-				return (session);
-			}
-
-			session = null; /* dereference invalid session */
-		} else {
-			/* Session is not cached in this request
-			 * Check to see if the client requested a session id.
-			 */
-
-			String sessionId = getRequestedSessionId();
-			if (sessionId != null) {
-				session = http.getSession(sessionId);
-
-				if (session != null) /* valid session in cache */
-				{
-					return (session);
-				}
-			}
-		}
-
-		// we didn't get a valid session, so create one if desired
-		if (create) {
-			session = new HttpSessionImpl(http);
-			response.addCookie(session.getCookie());
-			return (session);
-		}
-
-		// Nothing we did produced a valid session, and the caller
-		// didn't ask us to create one.
-		return (null);
-	}
-
-	/**
-	 * Checks whether the session id specified by this request came in
-	 * as a cookie.  (The requested session may not be one returned by
-	 * the <code>getSession</code> method.)
-	 *
-	 * @return true if the session id specified by this request came in
-	 * as a cookie; false otherwise
-	 *
-	 * @see #getSession
-	 */
-	public boolean isRequestedSessionIdFromCookie() {
-		/* We always use cookies. If there is a requestedSessionId,
-		 * it came from a Cookie.
-		 */
-		return (getRequestedSessionId() != null);
-	}
-
-	/**
-	 * Checks whether the session id specified by this request came in
-	 * as part of the URL.  (The requested session may not be the one
-	 * returned by the <code>getSession</code> method.)
-	 *
-	 * @return true if the session id specified by the request for this
-	 * session came in as part of the URL; false otherwise
-	 *
-	 * @see #getSession
-	 *
-	 * @deprecated use isRequestSessionIdFromURL() instead
-	 */
-	public boolean isRequestedSessionIdFromUrl() {
-		return (isRequestedSessionIdFromURL());
-	}
-
-	/**
-	 * Checks whether the session id specified by this request came in
-	 * as part of the URL.  (The requested session may not be the one
-	 * returned by the <code>getSession</code> method.)
-	 *
-	 * @return true if the session id specified by the request for this
-	 * session came in as part of the URL; false otherwise
-	 *
-	 * @see #getSession
-	 */
-
-	public boolean isRequestedSessionIdFromURL() {
-		/* We do not support URL rewriting. We use cookies. */
-		return (false);
-	}
-
-	/**
-	 * This method checks whether this request is associated with a session
-	 * that is currently valid.  If the session used by the request is not valid,
-	 * it will not be returned via the getSession method.
-	 *
-	 * @return true if the request session is valid.
-	 *
-	 * @see #getRequestedSessionId
-	 * @see javax.servlet.http.HttpSessionContext
-	 * @see #getSession
-	 */
-	public boolean isRequestedSessionIdValid() {
-		HttpSession currentSession = getSession(false); /* get current session, if any */
-
-		if (currentSession != null) /* if there is a session, see if it the requested session */
-		{
-			return (currentSession.getId().equals(getRequestedSessionId()));
-		}
-
-		return (false);
-	}
-
-	protected synchronized void parseCookies() {
-		if (cookies == null) {
-			nocookies: {
-				String cookieHeader = getHeaderUpper("COOKIE"); //$NON-NLS-1$
-				if (cookieHeader == null) {
-					break nocookies;
-				}
-				Vector cookieVector = new Vector(20);
-				int cookieVersion = 0;
-
-				//parse through cookie header for all cookies
-
-				Tokenizer tokenizer = new Tokenizer(cookieHeader);
-
-				String name = tokenizer.getToken("="); //$NON-NLS-1$
-				char c = tokenizer.getChar();
-				String value;
-
-				if (name.equals("$Version")) //$NON-NLS-1$
-				{
-					if (c != '=') {
-						if (Http.DEBUG) {
-							http.logDebug("Cookie parse error", new Exception()); //$NON-NLS-1$
-						}
-						break nocookies;
-					}
-
-					value = tokenizer.getString(";,"); //$NON-NLS-1$
-
-					try {
-						cookieVersion = Integer.parseInt(value);
-					} catch (NumberFormatException e) {
-						if (Http.DEBUG) {
-							http.logDebug("Cookie version error", e); //$NON-NLS-1$
-						}
-					}
-
-					name = null;
-				}
-
-				parseloop: while (true) {
-					if (name == null) {
-						name = tokenizer.getToken("="); //$NON-NLS-1$
-						c = tokenizer.getChar();
-					}
-
-					if (c != '=') {
-						if (Http.DEBUG) {
-							http.logDebug("Cookie parse error", new Exception()); //$NON-NLS-1$
-						}
-						break nocookies;
-					}
-
-					value = tokenizer.getString(";,"); //$NON-NLS-1$
-					c = tokenizer.getChar();
-
-					Cookie cookie;
-					try {
-						cookie = new Cookie(name, value);
-					} catch (IllegalArgumentException e) {
-						if (Http.DEBUG) {
-							http.logDebug("Cookie constructor error", e); //$NON-NLS-1$
-						}
-						break nocookies;
-					}
-					cookie.setVersion(cookieVersion);
-
-					cookieVector.addElement(cookie);
-
-					if (c == '\0') {
-						break parseloop;
-					}
-
-					name = tokenizer.getToken("="); //$NON-NLS-1$
-					c = tokenizer.getChar();
-					if (name.equals("$Path")) //$NON-NLS-1$
-					{
-						if (c != '=') {
-							if (Http.DEBUG) {
-								http.logDebug("Cookie parse error", new Exception()); //$NON-NLS-1$
-							}
-							break nocookies;
-						}
-						cookie.setPath(tokenizer.getString(";,")); //$NON-NLS-1$
-
-						c = tokenizer.getChar();
-						if (c == '\0') {
-							break parseloop;
-						}
-
-						name = tokenizer.getToken("="); //$NON-NLS-1$
-						c = tokenizer.getChar();
-					}
-
-					if (name.equals("$Domain")) //$NON-NLS-1$
-					{
-						if (c != '=') {
-							if (Http.DEBUG) {
-								http.logDebug("Cookie parse error", new Exception()); //$NON-NLS-1$
-							}
-							break nocookies;
-						}
-						cookie.setDomain(tokenizer.getString(";,")); //$NON-NLS-1$
-
-						c = tokenizer.getChar();
-						if (c == '\0') {
-							break parseloop;
-						}
-
-						name = null;
-					}
-				}
-
-				if (cookieVector.size() > 0) {
-					cookies = new Cookie[cookieVector.size()];
-					cookieVector.copyInto(cookies);
-					return;
-				}
-			}
-
-			cookies = new Cookie[0];
-		}
-	}
-
-	protected void parseHeaders() throws IOException {
-		headers = new Hashtable(31);
-		byte[] buffer = new byte[4096];
-
-		/* The first line in an http request is always the request-line. */
-		String line = readHeaderLine(buffer);
-
-		if (line.length() == 0) {
-			throw new InterruptedIOException(HttpMsg.HTTP_NO_HEADER_LINE_READ_EXCEPTION);
-		}
-
-		socket.markActive(); /* indicate we are processing a request */
-
-		parseRequestLine(line);
-
-		/* Now we get to the headers. */
-		// BUGBUG Headers can be repeated! getHeader must return the first header
-		// in the request. The (2.2) getHeaders method can be used to get all
-		// the headers' values.
-		// Servlet 2.2 Section 5.3
-		boolean firstLine = true;
-		String header = null;
-		StringBuffer value = new StringBuffer(256);
-		while (true) {
-			line = readHeaderLine(buffer);
-
-			if (line.length() == 0) { //End of headers
-				if (!firstLine) /* flush last line */
-				{
-					headers.put(header, value.toString().trim());
-				}
-				break;
-			}
-
-			//          System.out.println(line);
-
-			char c = line.charAt(0);
-			if ((c == ' ') || (c == '\t')) /* continuation */
-			{
-				if (firstLine) /* if no previous line */
-				{
-					throw new IOException(NLS.bind(HttpMsg.HTTP_INVALID_HEADER_LINE_EXCEPTION, line));
-				}
-				value.append(line.substring(1));
-				continue;
-			}
-
-			if (!firstLine) {
-				headers.put(header, value.toString().trim());
-				value.setLength(0); /* clear StringBuffer */
-			}
-
-			//use ':' as a delimeter to separate the key and the value
-			int colon = line.indexOf(':', 0);
-
-			// Our keys are saved as upper case so we can do case-insensitive
-			// searches on them.
-			header = line.substring(0, colon).toUpperCase();
-			value.append(line.substring(colon + 1));
-			firstLine = false;
-		}//while
-	}
-
-	/**
-	 * This methods MUST only be called by one of the getParameter methods
-	 * Servlet 2.2 Section 5.1
-	 */
-	protected synchronized void parseQueryData() {
-		if (!parsedQueryData) {
-			try {
-				/* Request parameters must come from BOTH the query string
-				 * and the POST data. Query string must be processed before POST data.
-				 * Servlet 2.2 Section 5.1.
-				 */
-
-				if (queryString != null) {
-					if (parameters == null) {
-						parameters = new Hashtable();
-					}
-
-					parseQueryString(parameters, queryString, null);
-				}
-
-				/* POST data must only be read if the following conditions are
-				 * true
-				 * 1. getScheme is "http" or "https"
-				 * 2. getMethod is "POST"
-				 * 3. getContextType is "application/x-www-form-urlencoded"
-				 * 4. servlet calls getParameter* method.
-				 * Servlet 2.2 Section 5.1
-				 */
-				String content_type = getContentType();
-
-				if (content_type != null) {
-					int index = content_type.indexOf(';', 0);
-					if (index >= 0) {
-						content_type = content_type.substring(0, index).trim();
-					}
-				}
-
-				if ("POST".equals(method) && //$NON-NLS-1$
-						("http".equals(scheme) || "https".equals(scheme)) && //$NON-NLS-1$ //$NON-NLS-2$
-						"application/x-www-form-urlencoded".equals(content_type) //$NON-NLS-1$
-				) {
-					int content_length = getContentLength();
-					if (content_length > 0) {
-						//                      System.out.println("Read POST data");
-						/* Read the post data from the ServletInputStream */
-						ServletInputStream in = getInputStream();
-						byte buffer[] = new byte[content_length];
-						int bytesRead = 0;
-						while (bytesRead < content_length) {
-							int count;
-
-							try {
-								count = in.read(buffer, bytesRead, content_length - bytesRead);
-							} catch (IOException e) {
-								throw new IllegalArgumentException();
-							}
-
-							if (count < 1) {
-								break;
-							}
-
-							bytesRead += count;
-						}
-
-						String encoding = getCharacterEncoding();
-
-						/* Must use charset getCharacterEncoding or iso-8859-1 if null.
-						 * Servlet 2.3 Section 4.9
-						 */
-
-						String postData = URI.convert(buffer, 0, bytesRead, encoding);
-
-						if (parameters == null) {
-							parameters = new Hashtable();
-						}
-
-						parseQueryString(parameters, postData, encoding);
-					}
-				}
-			} catch (Exception e) {
-				//Bad query string, ignore, log and continue
-				http.logError(HttpMsg.HTTP_QUERYDATA_PARSE_EXCEPTION, e);
-			}
-
-			parsedQueryData = true;
-		}
-	}
-
-	/**
-	 * Parses a query string and builds a hashtable of key-value
-	 * pairs, where the values are arrays of strings.  The query string
-	 * should have the form of a string packaged by the GET or POST
-	 * method.  (For example, it should have its key-value pairs
-	 * delimited by ampersands (&) and its keys separated from its
-	 * values by equal signs (=).)
-	 *
-	 * <p> A key can appear one or more times in the query string.
-	 * Each time a key appears, its corresponding value is inserted
-	 * into its string array in the hash table.  (So keys that appear
-	 * once in the query string have, in the hash table, a string array
-	 * of length one as their value, keys that appear twice have a
-	 * string array of length two, etc.)
-	 *
-	 * <p> When the keys and values are moved into the hashtable, any
-	 * plus signs (+) are returned to spaces and characters sent in
-	 * hexadecimal notation (%xx) are converted back to characters.
-	 *
-	 * @param data query string to be parsed
-	 * @param result a hashtable built from the parsed key-value pairs; the
-	 *.hashtable's values are arrays of strings
-	 * @exception IllegalArgumentException if the query string is
-	 * invalid.
-	 */
-	protected void parseQueryString(Hashtable result, String data, String encoding) {
-		if (data == null) {
-			throw new IllegalArgumentException();
-		}
-
-		//      System.out.println("Querystring: " + data);
-
-		data = data.trim(); /* Strip CRLF if present */
-
-		int len = data.length();
-
-		if (len >= 0) {
-			int begin = 0;
-
-			while (true) {
-				int end = data.indexOf('&', begin);
-				if (end == -1) {
-					end = len;
-				}
-
-				int equals = data.indexOf('=', begin);
-
-				String key;
-				String value;
-				if ((equals >= end) || (equals == -1)) {
-					key = URI.decode(data, begin, end, encoding);
-					value = ""; //$NON-NLS-1$
-				} else {
-					key = URI.decode(data, begin, equals, encoding);
-					value = URI.decode(data, equals + 1, end, encoding);
-				}
-
-				String[] values = (String[]) result.get(key);
-
-				if (values == null) {
-					values = new String[1];
-					values[0] = value;
-					result.put(key, values);
-				} else {
-					int length = values.length;
-					String[] newvalues = new String[length + 1];
-					System.arraycopy(values, 0, newvalues, 0, length);
-					newvalues[length] = value;
-					result.put(key, newvalues);
-				}
-
-				if (end == len) {
-					break;
-				}
-
-				begin = end + 1;
-			}
-		}
-	}
-
-	/**
-	 * This method was created in VisualAge.
-	 * @return java.lang.String
-	 * @param requestLine java.lang.String
-	 */
-	protected void parseRequestLine(String requestLine) {
-		if (Http.DEBUG) {
-			http.logDebug("Http Request Line=\"" + requestLine + "\""); //$NON-NLS-1$ //$NON-NLS-2$
-		}
-		//      System.out.println("Http Request Line=\"" + requestLine + "\"");
-
-		int space = requestLine.indexOf(' ', 0);
-		method = requestLine.substring(0, space);
-
-		int nextspace = requestLine.lastIndexOf(' ');
-		protocol = requestLine.substring(nextspace + 1);
-
-		int query = requestLine.indexOf('?', space + 1);
-
-		if ((query >= nextspace) || (query == -1)) {
-			reqURI = URI.decode(requestLine, space + 1, nextspace, null);
-		} else {
-			reqURI = URI.decode(requestLine, space + 1, query, null);
-			queryString = requestLine.substring(query + 1, nextspace);
-		}
-	}
-
-	/**
-	 * This method is only used by the constructor (albiet indirectly)
-	 * @return java.lang.String
-	 */
-	protected String readHeaderLine(byte[] buffer) throws IOException {
-		int read = servletInputStream.readLine(buffer, 0, buffer.length);
-		if (read <= 0) {
-			throw new InterruptedIOException(HttpMsg.HTTP_NO_HEADER_LINE_READ_EXCEPTION);
-		}
-
-		// BUGBUG should use 8859_1 encoding to make string
-		/* create String from byte array using 0 for high byte of chars */
-		String line = URI.convert(buffer, 0, read, null);
-
-		if (line.endsWith("\n")) //$NON-NLS-1$
-		{
-			return (line.trim()); /* trim removes trailing CRLF */
-		}
-
-		try {
-			response.sendError(HttpServletResponse.SC_REQUEST_ENTITY_TOO_LARGE);
-		} finally {
-			response.close();
-		}
-
-		throw new IOException(NLS.bind(HttpMsg.HTTP_HEADER_LINE_TOO_LONG_EXCEPTION, new Integer(buffer.length)));
-	}
-
-	/**
-	 * This method places an attribute into the request for later use by
-	 * other objects which will have access to this request object such as
-	 * nested servlets.
-	 *
-	 * @param name Attribute name
-	 * @param object Attribute value
-	 */
-	public void setAttribute(String name, Object val) {
-		if (attributes == null) {
-			synchronized (this) {
-				if (attributes == null) {
-					attributes = new Hashtable(31);
-				}
-			}
-		}
-
-		if (val == null) {
-			attributes.remove(name);
-		} else {
-			attributes.put(name, val);
-		}
-	}
-
-	/**
-	 * @see javax.servlet.http.HttpServletRequest#getContextPath()
-	 */
-	public String getContextPath() throws UnsupportedOperationException {
-		throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-	}
-
-	/**
-	 * @see javax.servlet.http.HttpServletRequest#getHeaders(String)
-	 */
-	public Enumeration getHeaders(String name) throws UnsupportedOperationException {
-		throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-	}
-
-	/**
-	 * @see javax.servlet.http.HttpServletRequest#getRequestURL()
-	 */
-	public StringBuffer getRequestURL() throws UnsupportedOperationException {
-		throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-	}
-
-	/**
-	 * @see javax.servlet.http.HttpServletRequest#getUserPrincipal()
-	 */
-	public Principal getUserPrincipal() throws UnsupportedOperationException {
-		throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-	}
-
-	/**
-	 * @see javax.servlet.http.HttpServletRequest#isUserInRole(String)
-	 */
-	public boolean isUserInRole(String role) throws UnsupportedOperationException {
-		throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-	}
-
-	/**
-	 * @see javax.servlet.ServletRequest#getLocale()
-	 */
-	public Locale getLocale() throws UnsupportedOperationException {
-		throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-	}
-
-	/**
-	 * @see javax.servlet.ServletRequest#getLocales()
-	 */
-	public Enumeration getLocales() throws UnsupportedOperationException {
-		throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-	}
-
-	/**
-	 * @see javax.servlet.ServletRequest#getParameterMap()
-	 */
-	public Map getParameterMap() throws UnsupportedOperationException {
-		throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-	}
-
-	/**
-	 * @see javax.servlet.ServletRequest#getRequestDispatcher(String)
-	 */
-	public RequestDispatcher getRequestDispatcher(String path) throws UnsupportedOperationException {
-		throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-	}
-
-	/**
-	 * @see javax.servlet.ServletRequest#isSecure()
-	 */
-	public boolean isSecure() throws UnsupportedOperationException {
-		throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-	}
-
-	/**
-	 * @see javax.servlet.ServletRequest#removeAttribute(String)
-	 */
-	public void removeAttribute(String name) throws UnsupportedOperationException {
-		throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-	}
-
-	/**
-	 * @see javax.servlet.ServletRequest#setCharacterEncoding(String)
-	 */
-	public void setCharacterEncoding(String env) throws UnsupportedEncodingException, UnsupportedOperationException {
-		throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-	}
-
-	/* For compilation only.  Will not implement.
-	 * 
-	 */
-	public String getLocalAddr() {
-		//return(socket.getInetAddress().getLocalHost().getHostAddress());
-		throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-	}
-
-	/* For compilation only.  Will not implement.
-	 * 
-	 */
-	public String getLocalName() {
-		//return(socket.getInetAddress().getLocalHost().getHostName());
-		throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-	}
-
-	/* For compilation only.  Will not implement.
-	 * 
-	 */
-	public int getLocalPort() {
-		throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-	}
-
-	/* For compilation only.  Will not implement.
-	 * 
-	 */
-	public int getRemotePort() {
-		throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-	}
-}
diff --git a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/servlet/HttpServletResponseImpl.java b/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/servlet/HttpServletResponseImpl.java
deleted file mode 100644
index 463c735..0000000
--- a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/servlet/HttpServletResponseImpl.java
+++ /dev/null
@@ -1,861 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1999, 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.http.servlet;
-
-import java.io.*;
-import java.util.*;
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletResponse;
-import org.eclipse.equinox.http.*;
-import org.eclipse.equinox.socket.SocketInterface;
-
-/**
- * The implementation of the HttpServletResponse interface.
- *
- * Per Servlet 2.2 Section 3.3.3.3, this object need not be thread-safe.
- **/
-
-public class HttpServletResponseImpl implements HttpServletResponse {
-	private Http http;
-	protected HttpServletRequestImpl request;
-	private SocketInterface socket;
-	protected ServletOutputStreamImpl servletOutputStream;
-	protected String charset = null;
-	protected static final String defaultCharset = "ISO-8859-1"; //$NON-NLS-1$
-
-	protected int contentLength = 0;
-	protected String contentType = null;
-	protected Vector cookies = null;
-	protected Hashtable headers = null;
-	protected int status = SC_OK;
-	protected String statusString = "OK"; //$NON-NLS-1$
-
-	private boolean gotOutputStream = false;
-	protected PrintWriter writer = null;
-
-	private boolean keepAlive = false;
-
-	public HttpServletResponseImpl(SocketInterface socket, Http http) throws IOException {
-		this.http = http;
-		this.socket = socket;
-		servletOutputStream = new ServletOutputStreamImpl(socket.getOutputStream(), this);
-	}
-
-	/**
-	 * Called by the request in its constructor.
-	 */
-	protected void setRequest(HttpServletRequestImpl request) {
-		this.request = request;
-	}
-
-	/**
-	 * Adds the specified cookie to the response.  It can be called
-	 * multiple times to set more than one cookie.
-	 *
-	 * @param cookie the Cookie to return to the client
-	 */
-	public void addCookie(Cookie cookie) {
-		if (cookies == null) {
-			synchronized (this) {
-				if (cookies == null) {
-					cookies = new Vector(20);
-				}
-			}
-		}
-
-		synchronized (cookies) {
-			if (!cookies.contains(cookie)) {
-				//System.out.println("addCookie: "+cookie.getName()+"="+cookie.getValue());
-				cookies.addElement(cookie);
-			}
-		}
-
-		//http.logDebug("ServletResponse::addCookie:  added cookie "+cookie.getName());
-	}
-
-	/**
-	 * Checks whether the response message header has a field with
-	 * the specified name.
-	 *
-	 * @param name the header field name
-	 * @return true if the response message header has a field with
-	 * the specified name; false otherwise
-	 */
-	public boolean containsHeader(String name) {
-		if (headers == null) {
-			return (false);
-		}
-
-		Object value = headers.get(name);
-
-		if (value != null) {
-			return (true);
-		}
-
-		Enumeration headerEnumeration = headers.keys();
-
-		while (headerEnumeration.hasMoreElements()) {
-			String key = (String) headerEnumeration.nextElement();
-
-			if (name.equalsIgnoreCase(key)) {
-				return (true);
-			}
-		}
-
-		return (false);
-	}
-
-	/**
-	 * Encodes the specified URL for use in the
-	 * <code>sendRedirect</code> method or, if encoding is not needed,
-	 * returns the URL unchanged.  The implementation of this method
-	 * should include the logic to determine whether the session ID
-	 * needs to be encoded in the URL.  Because the rules for making
-	 * this determination differ from those used to decide whether to
-	 * encode a normal link, this method is seperate from the
-	 * <code>encodeUrl</code> method.
-	 *
-	 * <p>All URLs sent to the HttpServletResponse.sendRedirect
-	 * method should be run through this method.  Otherwise, URL
-	 * rewriting cannot be used with browsers which do not support
-	 * cookies.
-	 *
-	 * @param url the url to be encoded.
-	 * @return the encoded URL if encoding is needed; the unchanged URL
-	 * otherwise.
-	 * deprecated
-	 *
-	 * @see #sendRedirect
-	 * @see #encodeUrl
-	 */
-
-	public String encodeRedirectUrl(String url) {
-		return (encodeRedirectURL(url));
-	}
-
-	/**
-	 * Encodes the specified URL for use in the
-	 * <code>sendRedirect</code> method or, if encoding is not needed,
-	 * returns the URL unchanged.  The implementation of this method
-	 * should include the logic to determine whether the session ID
-	 * needs to be encoded in the URL.  Because the rules for making
-	 * this determination differ from those used to decide whether to
-	 * encode a normal link, this method is seperate from the
-	 * <code>encodeUrl</code> method.
-	 *
-	 * <p>All URLs sent to the HttpServletResponse.sendRedirect
-	 * method should be run through this method.  Otherwise, URL
-	 * rewriting canont be used with browsers which do not support
-	 * cookies.
-	 *
-	 * <p>After this method is called, the response should be considered
-	 * to be committed and should not be written to.
-	 *
-	 * @param url the url to be encoded.
-	 * @return the encoded URL if encoding is needed; the unchanged URL
-	 * otherwise.
-	 *
-	 * @see #sendRedirect
-	 * @see #encodeUrl
-	 */
-
-	public String encodeRedirectURL(String url) {
-		return (url);
-	}
-
-	/**
-	 * Encodes the specified URL by including the session ID in it,
-	 * or, if encoding is not needed, returns the URL unchanged.
-	 * The implementation of this method should include the logic to
-	 * determine whether the session ID needs to be encoded in the URL.
-	 * For example, if the browser supports cookies, or session
-	 * tracking is turned off, URL encoding is unnecessary.
-	 *
-	 * <p>All URLs emitted by a Servlet should be run through this
-	 * method.  Otherwise, URL rewriting cannot be used with browsers
-	 * which do not support cookies.
-	 *
-	 * @param url the url to be encoded.
-	 * @return the encoded URL if encoding is needed; the unchanged URL
-	 * otherwise.
-	 * deprecated
-	 */
-	public String encodeUrl(String url) {
-		return (encodeURL(url));
-	}
-
-	/**
-	 * Encodes the specified URL by including the session ID in it,
-	 * or, if encoding is not needed, returns the URL unchanged.
-	 * The implementation of this method should include the logic to
-	 * determine whether the session ID needs to be encoded in the URL.
-	 * For example, if the browser supports cookies, or session
-	 * tracking is turned off, URL encoding is unnecessary.
-	 *
-	 * <p>All URLs emitted by a Servlet should be run through this
-	 * method.  Otherwise, URL rewriting cannot be used with browsers
-	 * which do not support cookies.
-	 *
-	 * @param url the url to be encoded.
-	 * @return the encoded URL if encoding is needed; the unchanged URL
-	 * otherwise.
-	 */
-
-	public String encodeURL(String url) {
-		return (url);
-	}
-
-	/**
-	 * Close the response output.
-	 *
-	 */
-	public void close() {
-		if (writer != null) {
-			writer.close();
-		} else {
-			try {
-				servletOutputStream.close();
-			} catch (IOException e) {
-				// TODO: consider logging
-			}
-		}
-
-		if (!keepAlive) /* if the no Keep-Alive, then close socket */
-		{
-			try {
-				socket.close();
-			} catch (IOException e) {
-				// TODO: consider logging
-			}
-		}
-	}
-
-	/**
-	 * Returns the character set encoding used for this MIME body.
-	 * The character encoding is either the one specified in the
-	 * assigned content type, or one which the client understands
-	 * as specified in the Accept-Charset header of the request.
-	 * If no charset can be determined, it defaults to the
-	 * value of the System property 'file.encoding' if that
-	 * is a supported character set. If it is not supported, then
-	 * we use <tt>ISO-8859-1</tt> as the character set.
-	 */
-	public String getCharacterEncoding() {
-		if (charset == null) {
-			OutputStream dummy = new ByteArrayOutputStream();
-			// BUGBUG Per the spec, the default charset is ISO8859_1
-			// Servlet 2.3 Section 5.4
-
-			/* Get the default file encoding charset */
-			String fileEncoding = (new SecureAction()).getProperty("file.encoding", defaultCharset); //$NON-NLS-1$
-			if ((fileEncoding == null) || (fileEncoding.length() < 1)) {
-				fileEncoding = defaultCharset;
-			}
-			String fileEncodingAlias = null;
-
-			/* We need to look at Accept-Charset from the request to
-			 * select the encoding charset.
-			 */
-			String accept = request.getHeaderUpper("ACCEPT-CHARSET"); //$NON-NLS-1$
-
-			if (accept != null) {
-				/*
-				 * We prefer the file.encoding charset if specified
-				 * in the Accept-Charset and supported by the JRE. Otherwise,
-				 * we simply select the first value supported by the
-				 * JRE. We do not support the q value in Accept-Charset.
-				 */
-
-				Tokenizer tokenizer = new Tokenizer(accept);
-
-				parseloop: while (true) {
-					String acceptCharset = tokenizer.getToken(",;"); //$NON-NLS-1$
-
-					if (!acceptCharset.equals("*")) //$NON-NLS-1$
-					{
-						try /* is charset valid? */
-						{
-							String encodingAlias = new OutputStreamWriter(dummy, acceptCharset).getEncoding();
-
-							if (charset == null) /* charset has not been set */
-							{
-								charset = acceptCharset;
-							} else {
-								if (fileEncodingAlias == null) {
-									try {
-										fileEncodingAlias = new OutputStreamWriter(dummy, fileEncoding).getEncoding();
-									} catch (UnsupportedEncodingException ee) {
-										// TODO: consider logging
-									}
-								}
-
-								if (encodingAlias.equals(fileEncodingAlias)) {
-									charset = acceptCharset; /* prefer the file.encoding charset */
-
-									break parseloop;
-								}
-							}
-						} catch (UnsupportedEncodingException e) {
-							/* charset is not supported */
-						}
-					}
-
-					char c = tokenizer.getChar();
-
-					if (c == ';') {
-						tokenizer.getToken(","); /* ignore q value *///$NON-NLS-1$
-						c = tokenizer.getChar();
-					}
-
-					if (c == '\0') {
-						break parseloop;
-					}
-				}
-			}
-
-			if (charset == null) /* if Accept-Charset did not produce a valid charset */
-			{
-				charset = fileEncoding;
-
-				try /* is charset valid? */
-				{
-					new OutputStreamWriter(dummy, charset);
-				} catch (UnsupportedEncodingException e) {
-					/* charset is not supported */
-					charset = defaultCharset;
-				}
-			}
-		}
-
-		return (charset);
-	}
-
-	/**
-	 * Returns an output stream for writing binary response data.
-	 *
-	 * @see getWriter
-	 * @exception IllegalStateException if getWriter has been
-	 *	called on this same request.
-	 * @exception IOException if an I/O exception has occurred
-	 */
-	public ServletOutputStream getOutputStream() {
-		if (!gotOutputStream) {
-			synchronized (this) {
-				if (writer != null) {
-					throw new IllegalStateException();
-				}
-				gotOutputStream = true;
-			}
-		}
-
-		return (servletOutputStream);
-	}
-
-	/**
-	 * Returns a print writer for writing formatted text responses.  The
-	 * MIME type of the response will be modified, if necessary, to reflect
-	 * the character encoding used, through the <em>charset=...</em>
-	 * property.  This means that the content type must be set before
-	 * calling this method.
-	 *
-	 * @see getOutputStream
-	 * @see setContentType
-	 *
-	 * @exception UnsupportedEncodingException if no such charset can
-	 * be provided
-	 * @exception IllegalStateException if getOutputStream has been
-	 *	called on this same request.
-	 * @exception IOException on other errors.
-	 */
-	public PrintWriter getWriter() throws IOException {
-		if (writer == null) {
-			synchronized (this) {
-				if (writer == null) {
-					if (gotOutputStream) {
-						throw new IllegalStateException();
-					}
-
-					String encoding = getCharacterEncoding();
-
-					writer = new ServletPrintWriter(servletOutputStream, encoding);
-
-					if (contentType == null) {
-						// BUGBUG Must not set a default content type.
-						// Servlet 2.3 Section 5.3
-						contentType = "text/plain; charset=" + encoding; //$NON-NLS-1$
-
-						setHeader("Content-Type", contentType); //$NON-NLS-1$
-					} else {
-						if (contentType.toLowerCase().indexOf("charset=") == -1) // 99372 //$NON-NLS-1$
-						{
-							contentType = contentType + "; charset=" + encoding; //$NON-NLS-1$
-
-							setHeader("Content-Type", contentType); //$NON-NLS-1$
-						}
-					}
-				}
-			}
-		}
-
-		return (writer);
-	}
-
-	boolean gotStreamOrWriter() {
-		return (writer != null || gotOutputStream);
-	}
-
-	/**
-	 * Sends an error response to the client using the specified
-	 * status code and a default message.
-	 * @param sc the status code
-	 * @exception IOException If an I/O error has occurred.
-	 */
-	public void sendError(int statusCode) throws IOException {
-		// BUGBUG Must clear buffer if response has not yet been committed
-		// or throw an IllegalStateException.
-		sendError(statusCode, http.getStatusPhrase(statusCode));
-	}
-
-	/**
-	 * Sends an error response to the client using the specified status
-	 * code and descriptive message.  If setStatus has previously been
-	 * called, it is reset to the error status code.  The message is
-	 * sent as the body of an HTML page, which is returned to the user
-	 * to describe the problem.  The page is sent with a default HTML
-	 * header; the message is enclosed in simple body tags
-	 * (&lt;body&gt;&lt;/body&gt;).
-	 *
-	 * @param sc the status code
-	 * @param msg the detail message
-	 * @exception IOException If an I/O error has occurred.
-	 */
-	public void sendError(int sc, String msg) throws IOException {
-		// BUGBUG Must clear buffer if response has not yet been committed
-		// or throw an IllegalStateException.
-		status = sc;
-		statusString = msg;
-
-		if (Http.DEBUG) {
-			http.logDebug("Error: " + sc + " - " + msg); //$NON-NLS-1$ //$NON-NLS-2$
-		}
-
-		servletOutputStream.print("<html><body><h3>"); //$NON-NLS-1$
-		servletOutputStream.print(sc);
-		servletOutputStream.print(" - "); //$NON-NLS-1$
-		servletOutputStream.print(msg);
-		servletOutputStream.print("</h3></body></html>"); //$NON-NLS-1$
-		servletOutputStream.close(); /* commit and close the response */
-
-	}
-
-	/**
-	 * Sends a temporary redirect response to the client using the
-	 * specified redirect location URL.  The URL must be absolute (for
-	 * example, <code><em>https://hostname/path/file.html</em></code>).
-	 * Relative URLs are not permitted here.
-	 *
-	 * @param location the redirect location URL
-	 * @exception IOException If an I/O error has occurred.
-	 */
-	public void sendRedirect(String location) throws IOException {
-		// BUGBUG The input URL may be relative. We must translate to
-		// a fully qualified URL (it should already have been encoded).
-		// If this cannot be done, throw an IllegalArgument exception.
-		// BUGBUG Must clear buffer if response has not yet been committed
-		// or throw an IllegalStateException.
-		setStatus(SC_MOVED_TEMPORARILY);
-		setHeader("Location", location); //$NON-NLS-1$
-		servletOutputStream.close(); /* commit and close the response */
-	}
-
-	/**
-	 * Sets the content length for this response.
-	 *
-	 * @param len the content length
-	 */
-
-	public void setContentLength(int len) {
-		// BUGBUG response should be considered commited and closed
-		// when content length has been written.
-		// Not sure if content length is bytes or chars?
-		contentLength = len;
-		setIntHeader("Content-Length", len); //$NON-NLS-1$
-	}
-
-	/**
-	 * Sets the content type for this response.  This type may later
-	 * be implicitly modified by addition of properties such as the MIME
-	 * <em>charset=&lt;value&gt;</em> if the service finds it necessary,
-	 * and the appropriate media type property has not been set.
-	 *
-	 * <p>This response property may only be assigned one time.  If a
-	 * writer is to be used to write a text response, this method must
-	 * be called before the method <code>getWriter</code>.  If an
-	 * output stream will be used to write a response, this method must
-	 * be called before the output stream is used to write response
-	 * data.
-	 *
-	 * @param type the content's MIME type
-	 * @see getOutputStream
-	 * @see getWriter */
-	public void setContentType(String type) {
-		if (contentType == null) {
-			synchronized (this) {
-				if (contentType == null) {
-					contentType = type;
-
-					setHeader("Content-Type", type); //$NON-NLS-1$
-
-					int index = type.indexOf(';', 0);
-					if (index >= 0) {
-						Tokenizer tokenizer = new Tokenizer(type);
-
-						// TODO: verify next statement. It was String mimetype = tokenizer.getToken(";"); 
-						tokenizer.getToken(";"); //$NON-NLS-1$
-						tokenizer.getChar(); /* eat semicolon */
-
-						parseloop: while (true) {
-							String attribute = tokenizer.getToken("="); //$NON-NLS-1$
-							char c = tokenizer.getChar();
-
-							if (c != '=') {
-								break parseloop; /* invalid content type */
-							}
-
-							String value = tokenizer.getString(";"); //$NON-NLS-1$
-							c = tokenizer.getChar();
-
-							if ("charset".equalsIgnoreCase(attribute)) //$NON-NLS-1$
-							{
-								charset = value;
-							}
-
-							if (c == '\0') {
-								break parseloop;
-							}
-						}
-					}
-				}
-			}
-		}
-	}
-
-	/**
-	 * This method was created in VisualAge.
-	 */
-	protected void setCookies() {
-		if (cookies == null) {
-			return;
-		}
-
-		int numCookies = cookies.size();
-
-		if (numCookies > 0) {
-			StringBuffer value = new StringBuffer(256);
-
-			for (int i = 0; i < numCookies; i++) {
-				Cookie cookie = (Cookie) cookies.elementAt(i);
-
-				if (i > 0) {
-					value.append(',');
-				}
-
-				value.append(cookie.getName());
-				value.append("=\""); //$NON-NLS-1$
-				value.append(cookie.getValue());
-				value.append('\"');
-				if ((cookie.getVersion()) != 0) {
-					value.append(";Version="); //$NON-NLS-1$
-					value.append(cookie.getVersion());
-				}
-				if ((cookie.getComment()) != null) {
-					value.append(";Comment=\""); //$NON-NLS-1$
-					value.append(cookie.getComment());
-					value.append('\"');
-				}
-				if ((cookie.getDomain()) != null) {
-					value.append(";Domain=\""); //$NON-NLS-1$
-					value.append(cookie.getDomain());
-					value.append('\"');
-				}
-				if ((cookie.getMaxAge()) != -1) {
-					value.append(";Max-Age=\""); //$NON-NLS-1$
-					value.append(cookie.getMaxAge());
-					value.append('\"');
-				}
-				if ((cookie.getPath()) != null) {
-					value.append(";Path=\""); //$NON-NLS-1$
-					value.append(cookie.getPath());
-					value.append('\"');
-				}
-				if (cookie.getSecure()) {
-					value.append(";Secure"); //$NON-NLS-1$
-				}
-			}
-
-			setHeader("Set-Cookie", value.toString()); //$NON-NLS-1$
-			//System.out.println("Set-Cookie: "+value.toString());
-		}
-	}
-
-	/**
-	 *
-	 * Adds a field to the response header with the given name and
-	 * date-valued field.  The date is specified in terms of
-	 * milliseconds since the epoch.  If the date field had already
-	 * been set, the new value overwrites the previous one.  The
-	 * <code>containsHeader</code> method can be used to test for the
-	 * presence of a header before setting its value.
-	 *
-	 * @param name the name of the header field
-	 * @param value the header field's date value
-	 *
-	 * @see #containsHeader
-	 */
-	public void setDateHeader(String name, long date) {
-		HttpDate d = new HttpDate(date);
-		setHeader(name, d.toString());
-	}
-
-	/**
-	 *
-	 * Adds a field to the response header with the given name and value.
-	 * If the field had already been set, the new value overwrites the
-	 * previous one.  The <code>containsHeader</code> method can be
-	 * used to test for the presence of a header before setting its
-	 * value.
-	 *
-	 * @param name the name of the header field
-	 * @param value the header field's value
-	 *
-	 * @see #containsHeader
-	 */
-	public void setHeader(String name, String value) {
-		// BUGBUG Headers set after the response is committed must be ignored
-		// Servlet 2.2 Section 6.2
-		if (headers == null) {
-			synchronized (this) {
-				if (headers == null) {
-					headers = new Hashtable(31);
-				}
-			}
-		}
-		headers.put(name, value);
-	}
-
-	/**
-	 * Adds a field to the response header with the given name and
-	 * integer value.  If the field had already been set, the new value
-	 * overwrites the previous one.  The <code>containsHeader</code>
-	 * method can be used to test for the presence of a header before
-	 * setting its value.
-	 *
-	 * @param name the name of the header field
-	 * @param value the header field's integer value
-	 *
-	 * @see #containsHeader
-	 */
-	public void setIntHeader(String name, int value) {
-		setHeader(name, String.valueOf(value));
-	}
-
-	/**
-	 * Sets the status code for this response.  This method is used to
-	 * set the return status code when there is no error (for example,
-	 * for the status codes SC_OK or SC_MOVED_TEMPORARILY).  If there
-	 * is an error, the <code>sendError</code> method should be used
-	 * instead.
-	 *
-	 * @param sc the status code
-	 *
-	 * @see #sendError
-	 */
-	public void setStatus(int statusCode) {
-		status = statusCode;
-		statusString = http.getStatusPhrase(statusCode);
-	}
-
-	/**
-	 * Sets the status code and message for this response.  If the
-	 * field had already been set, the new value overwrites the
-	 * previous one.  The message is sent as the body of an HTML
-	 * page, which is returned to the user to describe the problem.
-	 * The page is sent with a default HTML header; the message
-	 * is enclosed in simple body tags (&lt;body&gt;&lt;/body&gt;).
-	 *
-	 * @param sc the status code
-	 * @param sm the status message
-	 * deprecated
-	 */
-	public void setStatus(int si, String ss) {
-		status = si;
-		statusString = ss;
-
-	}
-
-	/**
-	 * Write the response headers to the ServletOutputStream.
-	 *
-	 * @param length Content length of the of the buffered content
-	 * or -1 if the length is unknown.
-	 */
-	void writeHeaders(int length) throws IOException {
-		setCookies();
-
-		if ((length != -1) && !containsHeader("Content-Length")) //$NON-NLS-1$
-		{
-			setContentLength(length);
-		}
-
-		if (containsHeader("Content-Length")) //$NON-NLS-1$
-		{
-			String requestConnection = request.getHeaderUpper("CONNECTION"); //$NON-NLS-1$
-
-			if (requestConnection != null) {
-				if (requestConnection.toLowerCase().indexOf("keep-alive") >= 0) //$NON-NLS-1$
-				{
-					setHeader("Connection", "Keep-Alive"); //$NON-NLS-1$ //$NON-NLS-2$
-
-					keepAlive = true;
-				}
-			}
-		}
-
-		if (!keepAlive) {
-			setHeader("Connection", "close"); //$NON-NLS-1$ //$NON-NLS-2$
-		}
-
-		servletOutputStream.print("HTTP/1.0 "); //$NON-NLS-1$
-		servletOutputStream.print(status);
-		servletOutputStream.print(" "); //$NON-NLS-1$
-		servletOutputStream.println(statusString);
-
-		//      System.out.print("HTTP/1.0 ");
-		//      System.out.print(status);
-		//      System.out.print(" ");
-		//      System.out.println(statusString);
-
-		/* Write response headers */
-		if (headers != null) {
-			Enumeration headerEnumeration = headers.keys();
-			while (headerEnumeration.hasMoreElements()) {
-				String name = (String) headerEnumeration.nextElement();
-				String value = (String) headers.get(name);
-				servletOutputStream.print(name);
-				servletOutputStream.print(": "); //$NON-NLS-1$
-				servletOutputStream.println(value);
-
-				//              System.out.print(name);
-				//              System.out.print(": ");
-				//              System.out.println(value);
-			}
-		}
-
-		servletOutputStream.println(); /* Terminate the headers */
-
-		//      System.out.println();
-	}
-
-	/**
-	 * @see javax.servlet.http.HttpServletResponse#addDateHeader(String, long)
-	 */
-	public void addDateHeader(String name, long date) throws UnsupportedOperationException {
-		throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-	}
-
-	/**
-	 * @see javax.servlet.http.HttpServletResponse#addHeader(String, String)
-	 */
-	public void addHeader(String name, String value) throws UnsupportedOperationException {
-		throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-	}
-
-	/**
-	 * @see javax.servlet.http.HttpServletResponse#addIntHeader(String, int)
-	 */
-	public void addIntHeader(String name, int value) throws UnsupportedOperationException {
-		throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-	}
-
-	/**
-	 * @see javax.servlet.ServletResponse#flushBuffer()
-	 */
-	public void flushBuffer() throws IOException, UnsupportedOperationException {
-		throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-	}
-
-	/**
-	 * @see javax.servlet.ServletResponse#getBufferSize()
-	 */
-	public int getBufferSize() throws UnsupportedOperationException {
-		throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-	}
-
-	/**
-	 * @see javax.servlet.ServletResponse#getLocale()
-	 */
-	public Locale getLocale() throws UnsupportedOperationException {
-		throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-	}
-
-	/**
-	 * @see javax.servlet.ServletResponse#isCommitted()
-	 */
-	public boolean isCommitted() throws UnsupportedOperationException {
-		throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-	}
-
-	/**
-	 * @see javax.servlet.ServletResponse#reset()
-	 */
-	public void reset() throws UnsupportedOperationException {
-		throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-	}
-
-	/**
-	 * @see javax.servlet.ServletResponse#resetBuffer()
-	 */
-	public void resetBuffer() throws UnsupportedOperationException {
-		throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-	}
-
-	/**
-	 * @see javax.servlet.ServletResponse#setBufferSize(int)
-	 */
-	public void setBufferSize(int size) throws UnsupportedOperationException {
-		throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-	}
-
-	/**
-	 * @see javax.servlet.ServletResponse#setLocale(Locale)
-	 */
-	public void setLocale(Locale loc) throws UnsupportedOperationException {
-		throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-	}
-
-	/* JavaServlet 2.4 API - For compilation only.  Will not implement.
-	 * 
-	 */
-	public String getContentType() {
-		//return contentType;
-		throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-	}
-
-	/* For compilation only.  Will not implement.
-	 * 
-	 */
-	public void setCharacterEncoding(String arg0) {
-		//this.contentType = contentType;
-		throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-
-	}
-}
diff --git a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/servlet/HttpSessionContextImpl.java b/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/servlet/HttpSessionContextImpl.java
deleted file mode 100644
index 10c519d..0000000
--- a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/servlet/HttpSessionContextImpl.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1999, 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.http.servlet;
-
-import java.util.Enumeration;
-import java.util.Vector;
-import javax.servlet.http.HttpSession;
-import javax.servlet.http.HttpSessionContext;
-
-/**
- * A HttpSessionContext is a grouping of HttpSessions associated with a single
- * entity. This interface gives servlets access to
- * methods for listing the IDs and for retrieving a session based on its ID.
- *
- * <p>Servlets get the HttpSessionContext object by calling the
- * getSessionContext()
- * method of HttpSession.
- *
- * @see HttpSession
- * @deprecated
- */
-public class HttpSessionContextImpl implements HttpSessionContext {
-
-	/**
-	 * Returns an enumeration of all of the session IDs in this context.
-	 *
-	 * @return an enumeration of all session IDs in this context
-	 * @deprecated
-	 */
-	public Enumeration getIds() {
-		return ((new Vector(0)).elements());
-	}
-
-	/**
-	 * Returns the session bound to the specified session ID.
-	 *
-	 * @param sessionID the ID of a particular session object
-	 * @return the session name. Returns null if the session ID does not refer
-	 * to a valid session.
-	 * @deprecated
-	 */
-	public HttpSession getSession(String sessionId) {
-		return (null);
-	}
-}
diff --git a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/servlet/HttpSessionImpl.java b/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/servlet/HttpSessionImpl.java
deleted file mode 100644
index 11704fd..0000000
--- a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/servlet/HttpSessionImpl.java
+++ /dev/null
@@ -1,501 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1999, 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.http.servlet;
-
-import java.util.Enumeration;
-import java.util.Hashtable;
-import javax.servlet.ServletContext;
-import javax.servlet.http.*;
-import org.eclipse.equinox.http.Http;
-import org.eclipse.equinox.http.HttpMsg;
-
-/**
- * The implementation of the HttpSession interface.
- *
- * <pre>
- *
- * //Get the session object - "request" represents the HTTP servlet request
- * HttpSession session = request.getSession(true);
- * <BR>
- * //Get the session data value - an Integer object is read from
- * //the session, incremented, then written back to the session.
- * //sessiontest.counter identifies values in the session
- * Integer ival = (Integer) session.getValue("sessiontest.counter");
- * if (ival==null)
- *     ival = new Integer(1);
- * else
- *     ival = new Integer(ival.intValue() + 1);
- * session.putValue("sessiontest.counter", ival);
- *
- * </pre>
- *
- * <P> When an application layer stores or removes data from the
- * session, the session layer checks whether the object implements
- * HttpSessionBindingListener.  If it does, then the object is notified
- * that it has been bound or unbound from the session.
- *
- * <P>An implementation of HttpSession represents the server's view
- * of the session. The server considers a session to be new until
- * it has been joined by the
- * client.  Until the client joins the session, the isNew method
- * returns true. A value of true can indicate one of these three cases:
- * <UL>
- * <LI>the client does not yet know about the session
- * <LI>the session has not yet begun
- * <LI>the client chooses not to join the session. This case will occur
- * if the client supports
- * only cookies and chooses to reject any cookies sent by the server.
- * If the server supports URL rewriting, this case will not commonly occur.
- * </UL>
- *
- * <P>It is the responsibility of developers
- * to design their applications to account for situations where a client
- * has not joined a session. For example, in the following code
- * snippet isNew is called to determine whether a session is new. If it
- * is, the server will require the client to start a session by directing
- * the client to a welcome page <tt>welcomeURL</tt> where
- * a user might be required to enter some information and send it to the
- * server before gaining access to
- * subsequent pages.
- *
- * <pre>
- * //Get the session object - "request" represents the HTTP servlet request
- * HttpSession session = request.getSession(true);
- * <BR>
- * //insist that the client starts a session
- * //before access to data is allowed
- * //"response" represents the HTTP servlet response
- * if (session.isNew()) {
- *     response.sendRedirect (welcomeURL);
- * }
- *
- * </pre>
- *
- * @see HttpSessionBindingListener
- * @see HttpSessionContext
- *
- */
-
-public class HttpSessionImpl implements HttpSession {
-	protected Http http;
-	protected String sessionId;
-	protected Hashtable values;
-	protected long creationTime; /* milliseconds */
-	protected long lastAccess; /* milliseconds */
-	protected boolean isValid;
-	protected boolean canExpire;
-	protected Cookie cookie;
-	protected long maxInactive; /* milliseconds */
-	// BUGBUG cookie name MUST be "JSESSIONID"
-	// Servlet 2.2 Section 7.1.2
-	protected static final String sessionCookieName = "org.eclipse.equinox.http.session"; //$NON-NLS-1$
-
-	protected HttpSessionImpl(Http http) {
-		this.http = http;
-		lastAccess = -1;
-		maxInactive = -1;
-		canExpire = false;
-		isValid = true;
-		sessionId = String.valueOf(hashCode());
-		values = new Hashtable();
-		creationTime = System.currentTimeMillis();
-		cookie = new Cookie(sessionCookieName, sessionId);
-		// BUGBUG Sessions should be ServletContext specific. That is
-		// the ServletContext should manage the sessions.
-		// Servlet 2.2 Section 7.3
-		http.addSession(this);
-	}
-
-	/**
-	 * Return the cookie associated with this session.
-	 *
-	 * @return Session cookie
-	 */
-	protected Cookie getCookie() {
-		return (cookie);
-	}
-
-	/**
-	 * Returns the time at which this session representation was created,
-	 * in milliseconds since midnight, January 1, 1970 UTC.
-	 *
-	 * @return the time when the session was created
-	 */
-	public long getCreationTime() {
-		return (creationTime);
-	}
-
-	/**
-	 * Returns the identifier assigned to this session. An HttpSession's
-	 * identifier is a unique string that is created and maintained by
-	 * HttpSessionContext.
-	 *
-	 * @return the identifier assigned to this session
-	 */
-	public String getId() {
-		return (sessionId);
-	}
-
-	/**
-	 * Returns the last time the client sent a request carrying the identifier
-	 * assigned to the session, or -1 if the session is new. Time is expressed
-	 * as milliseconds since midnight, January 1,
-	 * 1970 UTC.
-	 *
-	 * Application level operations, such as getting or setting a value
-	 * associated with the session, do not affect the access time.
-	 *
-	 * <P> This information is particularly useful in session management
-	 * policies.  For example,
-	 * <UL>
-	 * <LI>a session manager could leave all sessions
-	 * which have not been used in a long time
-	 * in a given context.
-	 * <LI>the sessions can be sorted according to age to optimize some task.
-	 * </UL>
-	 *
-	 * @return the last time the client sent a request carrying the identifier
-	 * assigned to the session
-	 */
-	public long getLastAccessedTime() {
-		return (lastAccess);
-	}
-
-	/**
-	 * Returns the maximum amount of time, in seconds, that a session is
-	 * guaranteed to be maintained in the servlet engine without a request from
-	 * the client.  After the maximum inactive time, the session may be expired
-	 * by the servlet engine.  If this session will not expire, this method will
-	 * return -1.  This method should throw an IllegalStateException if it is
-	 * called after this session has been invalidated.
-	 *
-	 * @return
-	 * @throws IllegalStateException
-	 */
-	public int getMaxInactiveInterval() {
-		checkValid();
-
-		if (canExpire) {
-			return ((int) (maxInactive / 1000L));
-		}
-		return (-1);
-	}
-
-	/**
-	 * Sets the amount of time that a session can be inactive
-	 * before the servlet engine is allowed to expire it.
-	 *
-	 * @param interval Time in seconds.
-	 */
-	public void setMaxInactiveInterval(int interval) {
-		if (isValid) {
-			if (interval == -1) {
-				maxInactive = -1;
-				canExpire = false;
-			} else {
-				if (interval < 0) {
-					throw new IllegalArgumentException("negative value"); //$NON-NLS-1$
-				}
-				maxInactive = interval * 1000L;
-				canExpire = true;
-			}
-		}
-	}
-
-	/**
-	 * Returns the context object within which sessions on the server are held.
-	 *
-	 * This method has been deprecated as all the methods of HttpSessionContext
-	 * are deprecated.  This method should now return an object which has an
-	 * empty implementation of the HttpSessionContext interface.
-	 *
-	 * @return An empty implementation of the HttpSessionContext interface.
-	 * @deprecated As of Servlet version 2.1.
-	 */
-	public HttpSessionContext getSessionContext() {
-		return (new HttpSessionContextImpl());
-	}
-
-	/**
-	 * Returns the object bound to the given name in the session's
-	 * application layer data.  Returns null if there is no such binding.
-	 *
-	 * @param name the name of the binding to find
-	 * @return the value bound to that name, or null if the binding does
-	 * not exist.
-	 * @exception IllegalStateException if an attempt is made to access
-	 * HttpSession's session data after it has been invalidated
-	 */
-	public Object getValue(String name) {
-		checkValid();
-
-		return (values.get(name));
-	}
-
-	/**
-	 * Returns an array of the names of all the application layer
-	 * data objects bound into the session. For example, if you want to delete
-	 * all of the data objects bound into the session, use this method to
-	 * obtain their names.
-	 *
-	 * @return an array containing the names of all of the application layer
-	 * data objects bound into the session
-	 * @exception IllegalStateException if an attempt is made to access
-	 * session data after the session has been invalidated
-	 */
-	public String[] getValueNames() {
-		checkValid();
-
-		return (getValueNames0());
-	}
-
-	private String[] getValueNames0() {
-		synchronized (values) {
-			int size = values.size();
-			String[] names = new String[size];
-
-			if (size > 0) {
-				int i = 0;
-				Enumeration valueEnumeration = values.keys();
-				while (valueEnumeration.hasMoreElements()) {
-					names[i] = (String) valueEnumeration.nextElement();
-					i++;
-				}
-			}
-
-			return (names);
-		}
-	}
-
-	/**
-	 * Causes this representation of the session to be invalidated and removed
-	 * from its context.
-	 *
-	 */
-	public synchronized void invalidate() {
-		if (isValid) {
-			/*
-			 * Remove session.
-			 */
-			http.removeSession(this);
-
-			/*
-			 * Unbind values.
-			 */
-			String[] names = getValueNames0();
-			int size = names.length;
-
-			for (int i = 0; i < size; i++) {
-				String name = names[i];
-
-				Object oldValue = values.remove(name);
-
-				unbound(name, oldValue);
-			}
-
-			/*
-			 * invalidate session
-			 */
-			isValid = false;
-			values = null;
-			canExpire = false;
-		}
-	}
-
-	/**
-	 * A session is considered to be "new" if it has been created by the server,
-	 * but the client has not yet acknowledged joining the session. For example,
-	 * if the server supported only cookie-based sessions and the client had
-	 * completely disabled the use of cookies, then calls to
-	 * HttpServletRequest.getSession() would
-	 * always return "new" sessions.
-	 *
-	 * @return true if the session has been created by the server but the
-	 * client has not yet acknowledged joining the session; false otherwise
-	 * @exception IllegalStateException if an attempt is made to access
-	 * session data after the session has been invalidated
-	 */
-	public boolean isNew() {
-		checkValid();
-
-		return (lastAccess == -1);
-	}
-
-	/**
-	 * Binds the specified object into the session's application layer data
-	 * with the given name.  Any existing binding with the same name is
-	 * replaced.  New (or existing) values that implement the
-	 * HttpSessionBindingListener interface will call its
-	 * valueBound() method.
-	 *
-	 * @param name the name to which the data object will be bound.  This
-	 * parameter cannot be null.
-	 * @param value the data object to be bound.  This parameter cannot be null.
-	 * @exception IllegalStateException if an attempt is made to access
-	 * session data after the session has been invalidated
-	 */
-	public void putValue(String name, Object value) {
-		checkValid();
-
-		Object oldValue = values.put(name, value);
-
-		unbound(name, oldValue);
-
-		// BUGBUG valueBound must be called before the object is available
-		// via getValue.
-		// Servlet 2.2 Section 7.4
-		bound(name, value);
-	}
-
-	/**
-	 * Notify HttpSessionBindingListener of valueBound event.
-	 *
-	 * @param name the name to which the data object will be bound.  This
-	 * parameter cannot be null.
-	 * @param value the data object to be bound.  This parameter cannot be null.
-	 */
-	private void bound(String name, Object value) {
-		if (value instanceof HttpSessionBindingListener) {
-			HttpSessionBindingEvent e = new HttpSessionBindingEvent(this, name);
-
-			try {
-				((HttpSessionBindingListener) value).valueBound(e);
-			} catch (Throwable t) {
-				if (Http.DEBUG) {
-					http.logDebug("HttpSessionImpl.putValue event exception", t); //$NON-NLS-1$
-				}
-			}
-		}
-	}
-
-	/**
-	 * Removes the object bound to the given name in the session's
-	 * application layer data.  Does nothing if there is no object
-	 * bound to the given name.  The value that implements the
-	 * HttpSessionBindingListener interface will call its
-	 * valueUnbound() method.
-	 *
-	 * @param name the name of the object to remove
-	 * @exception IllegalStateException if an attempt is made to access
-	 * session data after the session has been invalidated
-	 */
-	public void removeValue(String name) {
-		checkValid();
-
-		Object oldValue = values.remove(name);
-
-		unbound(name, oldValue);
-	}
-
-	/**
-	 * Notify HttpSessionBindingListener of valueUnbound event.
-	 *
-	 * @param name the name to which the data object will be bound.  This
-	 * parameter cannot be null.
-	 * @param value the data object to be bound.
-	 */
-	private void unbound(String name, Object value) {
-		if (value instanceof HttpSessionBindingListener) {
-			HttpSessionBindingEvent e = new HttpSessionBindingEvent(this, name);
-
-			try {
-				((HttpSessionBindingListener) value).valueUnbound(e);
-			} catch (Throwable t) {
-				if (Http.DEBUG) {
-					http.logDebug("HttpSessionImpl.removeValue event exception", t); //$NON-NLS-1$
-				}
-			}
-		}
-	}
-
-	/**
-	 * If the session has expired, invalidate it.
-	 * If access it true and the session is valid, update
-	 * the lastAccess time.
-	 *
-	 * @return true if the session is valid.
-	 */
-	public boolean isValid(boolean access) {
-		if (canExpire) {
-			long currentTime = System.currentTimeMillis();
-
-			long compareTime = (lastAccess == -1) ? creationTime : lastAccess;
-
-			if ((currentTime - compareTime) > maxInactive) {
-				invalidate();
-			}
-		}
-
-		if (access && isValid) {
-			lastAccess = System.currentTimeMillis();
-		}
-
-		return (isValid);
-	}
-
-	/**
-	 * If the session has expired, invalidate it.
-	 * If the session is invalid, throw an IllegalStateException
-	 *
-	 * @throws IllegalStateException.
-	 */
-	private void checkValid() {
-		if (canExpire) {
-			long currentTime = System.currentTimeMillis();
-
-			long compareTime = (lastAccess == -1) ? creationTime : lastAccess;
-
-			if ((currentTime - compareTime) > maxInactive) {
-				invalidate();
-			}
-		}
-
-		if (!isValid) {
-			throw new IllegalStateException("HttpSession has been invalidated"); //$NON-NLS-1$
-		}
-	}
-
-	/**
-	 * @see javax.servlet.http.HttpSession#getAttribute(String)
-	 */
-	public Object getAttribute(String name) throws UnsupportedOperationException {
-		throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-	}
-
-	/**
-	 * @see javax.servlet.http.HttpSession#getAttributeNames()
-	 */
-	public Enumeration getAttributeNames() throws UnsupportedOperationException {
-		throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-	}
-
-	/**
-	 * @see javax.servlet.http.HttpSession#getServletContext()
-	 */
-	public ServletContext getServletContext() throws UnsupportedOperationException {
-		throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-	}
-
-	/**
-	 * @see javax.servlet.http.HttpSession#removeAttribute(String)
-	 */
-	public void removeAttribute(String name) throws UnsupportedOperationException {
-		throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-	}
-
-	/**
-	 * @see javax.servlet.http.HttpSession#setAttribute(String, Object)
-	 */
-	public void setAttribute(String name, Object value) throws UnsupportedOperationException {
-		throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/servlet/RequestDispatcherImpl.java b/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/servlet/RequestDispatcherImpl.java
deleted file mode 100644
index 05d97f8..0000000
--- a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/servlet/RequestDispatcherImpl.java
+++ /dev/null
@@ -1,294 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1999, 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.http.servlet;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.util.Locale;
-import javax.servlet.*;
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletResponse;
-import org.eclipse.equinox.http.HttpMsg;
-import org.eclipse.equinox.http.Registration;
-
-public class RequestDispatcherImpl implements RequestDispatcher {
-	protected Registration reg;
-	protected String requestURI;
-
-	class Response implements HttpServletResponse {
-		protected ServletResponse response;
-
-		protected Response(ServletResponse response) {
-			this.response = response;
-		}
-
-		public String getCharacterEncoding() {
-			return (null);
-		}
-
-		public PrintWriter getWriter() throws IOException {
-			return (response.getWriter());
-		}
-
-		public ServletOutputStream getOutputStream() throws IOException {
-			return (response.getOutputStream());
-		}
-
-		public String encodeRedirectURL(String url) {
-			return (null);
-		}
-
-		public String encodeRedirectUrl(String url) {
-			return (null);
-		}
-
-		public String encodeURL(String url) {
-			return (null);
-		}
-
-		public String encodeUrl(String url) {
-			return (null);
-		}
-
-		public void sendRedirect(String url) {
-			// do nothing
-		}
-
-		public boolean containsHeader(String header) {
-			return (false);
-		}
-
-		public void addCookie(Cookie cookie) {
-			// do nothing
-		}
-
-		public void sendError(int errorCode) {
-			// do nothing
-		}
-
-		public void sendError(int errorCode, String error) {
-			// do nothing
-		}
-
-		public void setContentLength(int length) {
-			// do nothing
-		}
-
-		public void setContentType(String contentType) {
-			// do nothing
-		}
-
-		public void setStatus(int status) {
-			// do nothing
-		}
-
-		public void setStatus(int status, String statusPhrase) {
-			// do nothing
-		}
-
-		public void setHeader(String key, String value) {
-			// do nothing
-		}
-
-		public void setIntHeader(String key, int value) {
-			// do nothing
-		}
-
-		public void setDateHeader(String key, long date) {
-			// do nothing
-		}
-
-		/**
-		 * @see javax.servlet.http.HttpServletResponse#addDateHeader(String, long)
-		 */
-		public void addDateHeader(String name, long date) throws UnsupportedOperationException {
-			throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-		}
-
-		/**
-		 * @see javax.servlet.http.HttpServletResponse#addHeader(String, String)
-		 */
-		public void addHeader(String name, String value) throws UnsupportedOperationException {
-			throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-		}
-
-		/**
-		 * @see javax.servlet.http.HttpServletResponse#addIntHeader(String, int)
-		 */
-		public void addIntHeader(String name, int value) throws UnsupportedOperationException {
-			throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-		}
-
-		/**
-		 * @see javax.servlet.ServletResponse#flushBuffer()
-		 */
-		public void flushBuffer() throws IOException, UnsupportedOperationException {
-			throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-		}
-
-		/**
-		 * @see javax.servlet.ServletResponse#getBufferSize()
-		 */
-		public int getBufferSize() throws UnsupportedOperationException {
-			throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-		}
-
-		/**
-		 * @see javax.servlet.ServletResponse#getLocale()
-		 */
-		public Locale getLocale() throws UnsupportedOperationException {
-			throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-		}
-
-		/**
-		 * @see javax.servlet.ServletResponse#isCommitted()
-		 */
-		public boolean isCommitted() throws UnsupportedOperationException {
-			throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-		}
-
-		/**
-		 * @see javax.servlet.ServletResponse#reset()
-		 */
-		public void reset() throws UnsupportedOperationException {
-			throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-		}
-
-		/**
-		 * @see javax.servlet.ServletResponse#resetBuffer()
-		 */
-		public void resetBuffer() throws UnsupportedOperationException {
-			throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-		}
-
-		/**
-		 * @see javax.servlet.ServletResponse#setBufferSize(int)
-		 */
-		public void setBufferSize(int size) throws UnsupportedOperationException {
-			throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-		}
-
-		/**
-		 * @see javax.servlet.ServletResponse#setLocale(Locale)
-		 */
-		public void setLocale(Locale loc) throws UnsupportedOperationException {
-			throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-		}
-
-		/* 
-		 * JavaServlet 2.4 API - For complilation only - Not Implemented
-		 */
-		public String getContentType() {
-			throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-		}
-
-		/* 
-		 * JavaServlet 2.4 API - For complilation only - Not Implemented
-		 */
-		public void setCharacterEncoding(String arg0) {
-			throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-
-		}
-
-	}
-
-	public RequestDispatcherImpl(Registration reg, String requestURI) {
-		this.reg = reg;
-		this.requestURI = requestURI;
-	}
-
-	/**
-	 * Used for forwarding a request from this servlet to another
-	 * resource on the server. This method is useful when one servlet
-	 * does preliminary processing of a request and wants to let
-	 * another object generate the response.
-	 *
-	 * <p>The <tt>request</tt> object passed to the target object
-	 * will have its request URL path and other path parameters
-	 * adjusted to reflect the target URL path of the target ojbect.
-	 *
-	 * <p>You cannot use this method if a <tt>ServletOutputStream</tt>
-	 * object or <tt>PrintWriter</tt> object has been obtained from
-	 * the response. In that case, the method throws an
-	 * <tt>IllegalStateException</tt>
-	 *
-	 * @param request the client's request on the servlet
-	 * @param response the client's response from the servlet
-	 * @exception ServletException if a servlet exception is thrown by the
-	 *            target servlet
-	 * @exception IOException if an I/O Exception occurs
-	 * @exception IllegalStateException if the ServletOutputStream or a writer
-	 *            had allready been obtained from the response object
-	 */
-	public void forward(ServletRequest req, ServletResponse res) throws ServletException, IOException {
-		// BUGBUG If the response has already been committed, then an
-		// IllegalStateException must be thrown. Otherwise, the response
-		// buffer must be cleared before calling.
-		// Servlet 2.2 Section 8.4
-		try {
-			HttpServletRequestImpl request = (HttpServletRequestImpl) req;
-			HttpServletResponseImpl response = (HttpServletResponseImpl) res;
-
-			if (response.gotStreamOrWriter()) {
-				throw new IllegalStateException();
-			}
-
-			String newRequestLine = request.getMethod() + " " + requestURI + " " + request.getProtocol(); //$NON-NLS-1$ //$NON-NLS-2$
-			request.parseRequestLine(newRequestLine);
-
-			reg.service(request, response);
-
-			// BUGBUG Response must be committed and closed before returning.
-			// Servlet 2.2 Section 8.4
-		} catch (ClassCastException e) {
-			throw new ServletException(HttpMsg.HTTP_SERVLET_EXCEPTION, e);
-		}
-	}
-
-	/**
-	 * Used for including the content generated by another server
-	 * resource in the body of a response. In essence, this method
-	 * enables programmatic server side includes.
-	 *
-	 * <p>The request object passed to the target object will reflect
-	 * the request URL path and path info of the calling request.
-	 * The response object only has access to the calling servlet's
-	 * <tt>ServletOutputStream</tt> object or <tt>PrintWriter</tt>
-	 * object.
-	 *
-	 * <p>An included servlet cannot set headers. If the included
-	 * servlet calls a method that may need to set headers (such as
-	 * sessions might need to), the method is not guaranteed to work.
-	 * As a servlet developer, you must ensure that any methods
-	 * that might need direct access to headers are properly resolved.
-	 * To ensure that a session works correctly, start the session
-	 * outside of the included servlet, even if you use session tracking.
-	 *
-	 * @param request the client's request on the servlet
-	 * @param response the client's response from the servlet
-	 * @exception ServletException if a servlet exception is thrown by the
-	 *            target servlet
-	 * @exception IOException if the ServletOutputStream or a writer
-	 *            had already been obtained from the response object
-	 */
-	public void include(ServletRequest req, ServletResponse res) throws ServletException, IOException {
-		// BUGBUG need to set javax.servlet.include.* request
-		// attributes before calling.
-		// Servlet 2.2 Section 8.3.1
-		try {
-			ServletResponse response = new Response(res);
-
-			reg.service(req, response);
-		} catch (ClassCastException e) {
-			throw new ServletException(HttpMsg.HTTP_SERVLET_EXCEPTION, e);
-		}
-	}
-}
diff --git a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/servlet/ServletConfigImpl.java b/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/servlet/ServletConfigImpl.java
deleted file mode 100644
index dea55d0..0000000
--- a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/servlet/ServletConfigImpl.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1999, 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.http.servlet;
-
-import java.util.*;
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletContext;
-import org.eclipse.equinox.http.HttpMsg;
-
-public class ServletConfigImpl implements ServletConfig {
-	protected ServletContext servletContext;
-	protected Dictionary initParams;
-
-	public ServletConfigImpl(ServletContext context, Dictionary params) {
-		servletContext = context;
-		initParams = params;
-	}
-
-	/**
-	 *
-	 * Returns a string containing the value of the named
-	 * initialization parameter of the servlet, or null if the
-	 * parameter does not exist.  Init parameters have a single string
-	 * value; it is the responsibility of the servlet writer to
-	 * interpret the string.
-	 *
-	 * @param name the name of the parameter whose value is requested
-	 */
-	public String getInitParameter(String name) {
-		if (initParams != null) {
-			return ((String) initParams.get(name));
-		}
-		return (null);
-	}
-
-	/**
-	 * Returns the names of the servlet's initialization parameters
-	 * as an enumeration of strings, or an empty enumeration if there
-	 * are no initialization parameters.
-	 */
-	public Enumeration getInitParameterNames() {
-		if (initParams != null) {
-			return (initParams.keys());
-		}
-		return (new Vector(0).elements());
-	}
-
-	/**
-	 * Returns the context for the servlet.
-	 */
-
-	public ServletContext getServletContext() {
-		return (servletContext);
-	}
-
-	/**
-	 * @see javax.servlet.ServletConfig#getServletName()
-	 */
-	public String getServletName() throws UnsupportedOperationException {
-		throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/servlet/ServletContextImpl.java b/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/servlet/ServletContextImpl.java
deleted file mode 100644
index 7d4c4aa..0000000
--- a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/servlet/ServletContextImpl.java
+++ /dev/null
@@ -1,446 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1999, 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.http.servlet;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.*;
-import javax.servlet.*;
-import org.eclipse.equinox.http.*;
-import org.osgi.service.http.HttpContext;
-
-public class ServletContextImpl implements ServletContext {
-	protected Hashtable attributes = null;
-	protected Http http;
-	protected HttpListener listener;
-	protected HttpContext httpContext;
-	protected int useCount;
-
-	public ServletContextImpl(Http http, HttpListener listener, HttpContext httpContext) {
-		this.http = http;
-		this.listener = listener;
-		this.httpContext = httpContext;
-		useCount = 0;
-	}
-
-	public int incrUseCount() {
-		useCount++;
-
-		return (useCount);
-	}
-
-	public int decrUseCount() {
-		useCount--;
-
-		return (useCount);
-	}
-
-	/**
-	 * Returns the value of the named attribute of the network service,
-	 * or null if the attribute does not exist.  This method allows
-	 * access to additional information about the service, not already
-	 * provided by the other methods in this interface. Attribute names
-	 * should follow the same convention as package names.  The package
-	 * names java.* and javax.* are reserved for use by Javasoft, and
-	 * com.sun.* is reserved for use by Sun Microsystems.
-	 *
-	 * @param name the name of the attribute whose value is required
-	 * @return the value of the attribute, or null if the attribute
-	 * does not exist.
-	 */
-	public Object getAttribute(String name) {
-		if (attributes != null) {
-			return (attributes.get(name));
-		}
-
-		return (null);
-	}
-
-	/**
-	 * Returns an enumeration of the attribute names present in this
-	 * context.
-	 */
-
-	public Enumeration getAttributeNames() {
-		if (attributes != null) {
-			return (attributes.keys());
-		}
-
-		return ((new Vector(0).elements()));
-	}
-
-	/**
-	 * Returns a <tt>ServletContext</tt> object for a particular
-	 * URL path. This allows servlets to potentially gain access
-	 * to the resources and to obtain <tt>RequestDispatcher</tt>
-	 * objects from the target context.
-	 *
-	 * <p>In security concious environments, the servlet engine
-	 * may always return null for any given URL path.
-	 *
-	 * @param uripath
-	 */
-
-	//We should be the only ServletContext out there.
-	public ServletContext getContext(String uripath) {
-		Registration reg = listener.getRegistration(uripath);
-
-		if (reg == null) {
-			return (null);
-		}
-
-		if (httpContext != reg.getHttpContext()) {
-			return (null);
-		}
-
-		return (this);
-	}
-
-	/**
-	 * Returns the major version of the servlet API that this
-	 * servlet engine supports. All 2.1 compliant implementations
-	 * must return the integer 2 from this method.
-	 *
-	 * @return 2
-	 */
-
-	public int getMajorVersion() {
-		return (2);
-	}
-
-	/**
-	 * Returns the mime type of the specified file, or null if not known.
-	 * @param file name of the file whose mime type is required
-	 */
-	public String getMimeType(String file) {
-		String mimeType = httpContext.getMimeType(file);
-		if (mimeType != null)
-			return (mimeType);
-		return (http.getMimeType(file));
-	}
-
-	/**
-	 * Returns the minor version of the servlet API that this
-	 * servlet engine supports. All 2.1 compliant implementations
-	 * must return the integer 1 from this method.
-	 *
-	 * @return 1
-	 */
-
-	public int getMinorVersion() {
-		return (1);
-	}
-
-	/**
-	 * Applies alias rules to the specified virtual path in URL path
-	 * format, that is, <tt>/dir/dir/file.ext</tt>. Returns a
-	 * String representing the corresponding real path in the
-	 * format that is appropriate for the operating system the
-	 * servlet engine is running under (including the proper path
-	 * separators).
-	 *
-	 * <p>This method returns null if the translation could not
-	 * be performed for any reason.
-	 *
-	 * @param path the virtual path to be translated into a real path
-	 */
-
-	public String getRealPath(String path) {
-		/* We always return null because our web applications
-		 * originate in bundles and there is no path on the local
-		 * file system for the bundles contents.
-		 */
-		return (null);
-	}
-
-	/**
-	 * Returns a <tt>RequestDispatcher</tt> object for the specified
-	 * URL path if the context knows of an active source (such as
-	 * a servlet, JSP page, CGI script, etc) of content for the
-	 * particular path. This format of the URL path must be of the
-	 * form <tt>/dir/dir/file.ext</tt>. The servlet engine is responsible
-	 * for implementing whatever functionality is required to
-	 * wrap the target source with an implementation of the
-	 * <tt>RequestDispatcher</tt> interface.
-	 *
-	 * <p>This method will return null if the context cannot provide
-	 * a dispatcher for the path provided.
-	 *
-	 * @param urlpath Path to use to look up the target server resource
-	 * @see RequestDispatcher
-	 */
-	public RequestDispatcher getRequestDispatcher(String urlpath) {
-		// BUGBUG need to support query string in the urlpath
-		// Servlet 2.2 Section 8.1.1
-
-		if (Http.DEBUG) {
-			http.logDebug(" getRequestDispatcher: " + urlpath); //$NON-NLS-1$
-		}
-
-		Registration reg = listener.getRegistration(urlpath);
-
-		if (reg == null) {
-			return (null);
-		}
-
-		if (httpContext != reg.getHttpContext()) {
-			return (null);
-		}
-
-		return (new RequestDispatcherImpl(reg, urlpath));
-	}
-
-	/**
-	 * Returns a URL object of a resource that is mapped to a
-	 * corresponding URL path. The URL path must be of the form
-	 * <tt>/dir/dir/file.ext</tt>. This method allows a servlet
-	 * to access content to be served from the servlet engines
-	 * document space in a system independent manner. Resources
-	 * could be located on the local file system, a remote
-	 * file system, a database, or a remote network site.
-	 *
-	 * <p>This method may return null if there is no resource
-	 * mapped to the given URL path.
-	 *
-	 * <p>The servlet engine must implement whatever URL handlers
-	 * and <tt>URLConnection</tt> objects are necessary to access
-	 * the given content.
-	 *
-	 * <p>This method does not fill the same purpose as the
-	 * <tt>getResource</tt> method of <tt>java.lang.Class</tt>.
-	 * The method in <tt>java.lang.Class</tt> looks up resources
-	 * based on class loader. This method allows servlet engines
-	 * to make resources avaialble to a servlet from any source
-	 * without regards to class loaders, location, etc.
-	 *
-	 * @param path Path of the content resource
-	 * @exception MalformedURLException if the resource path is
-	 * not properly formed.
-	 */
-
-	public URL getResource(String path) throws MalformedURLException {
-		return (httpContext.getResource(path));
-
-	}
-
-	/**
-	 * Returns an <tt>InputStream</tt> object allowing access to
-	 * a resource that is mapped to a corresponding URL path. The
-	 * URL path must be of the form <tt>/dir/dir/file.ext</tt>.
-	 *
-	 * <p>Note that meta-information such as content length and
-	 * content type that are available when using the
-	 * <tt>getResource</tt> method of this class are lost when
-	 * using this method.
-	 *
-	 * <p>This method may return null if there is no resource
-	 * mapped to the given URL path.
-	 * <p>The servlet engine must implement whatever URL handlers
-	 * and <tt>URLConnection</tt> objects are necessary to access
-	 * the given content.
-	 *
-	 * <p>This method does not fill the same purpose as the
-	 * <tt>getResourceAsStream</tt> method of <tt>java.lang.Class</tt>.
-	 * The method in <tt>java.lang.Class</tt> looks up resources
-	 * based on class loader. This method allows servlet engines
-	 * to make resources avaialble to a servlet from any source
-	 * without regards to class loaders, location, etc.
-	 *
-	 * @param name
-	 */
-
-	public InputStream getResourceAsStream(String path) {
-		try {
-			URL url = httpContext.getResource(path);
-			if (url != null)
-				return url.openStream();
-		} catch (IOException ex) {
-			// TODO: consider logging
-		}
-		return null;
-	}
-
-	/**
-	 * Returns the name and version of the network service under which
-	 * the servlet is running. The form of this string must begin with
-	 * <tt>&lt;servername&gt;/&lt;versionnumber&gt;</tt>. For example
-	 * the Java Web Server could return a string of the form
-	 * <tt>Java Web Server/1.1.3</tt>. Other optional information
-	 * can be returned in parenthesis after the primary string. For
-	 * example, <tt>Java Web Server/1.1.3 (JDK 1.1.6; Windows NT 4.0 x86)
-	 * </tt>.
-	 */
-	public String getServerInfo() {
-		return ("Equinox HttpService/1.0"); //$NON-NLS-1$
-	}
-
-	/**
-	 * Originally defined to return a servlet from the context
-	 * with the specified name. This method has been deprecated and
-	 * only remains to preserve binary compatibility.
-	 * This method will always return null.
-	 *
-	 * @deprecated This method has been deprecated for
-	 * servlet lifecycle reasons. This method will be permanently
-	 * removed in a future version of the Servlet API.
-	 */
-	public Servlet getServlet(String name) {
-		return (null);
-	}
-
-	/**
-	 * Originally defined to return an <tt>Enumeration</tt> of
-	 * <tt>String</tt> objects containing all the servlet names
-	 * known to this context.
-	 * This method has been deprecated and only remains to preserve
-	 * binary compatibility. This methd must always return an
-	 * empty enumeration.
-	 *
-	 * @deprecated This method has been deprecated for
-	 * servlet lifecycle reasons. This method will be permanently
-	 * removed in a future version of the Servlet API.
-	 */
-	public Enumeration getServletNames() {
-		return ((new Vector(0).elements()));
-	}
-
-	/**
-	 * Originally defined to return an <tt>Enumeration</tt> of
-	 * <tt>Servlet</tt> objects containing all the servlets
-	 * known to this context.
-	 * This method has been deprecated and only remains to preserve
-	 * binary compatibility. This method must always return an empty
-	 * enumeration.
-	 *
-	 * @deprecated This method has been deprecated for
-	 * servlet lifecycle reasons. This method will be permanently
-	 * removed in a future version of the Servlet API.
-	 */
-	public Enumeration getServlets() {
-		return ((new Vector(0).elements()));
-	}
-
-	/**
-	 * Logs the specified message and a stack trace of the given
-	 * exception to the context's log. The
-	 * name and type of the servlet log is servlet engine specific,
-	 * but is normally an event log.
-	 *
-	 * @param exception the exception to be written
-	 * @param msg the message to be written
-	 *
-	 * @deprecated Use log(String message, Throwable t) instead
-	 */
-	public void log(Exception exception, String msg) {
-		log(msg, exception);
-	}
-
-	/**
-	 * Logs the specified message to the context's log. The
-	 * name and type of the servlet log is servlet engine specific,
-	 * but is normally an event log.
-	 *
-	 * @param msg the message to be written
-	 */
-	public void log(String msg) {
-		http.logInfo(msg);
-	}
-
-	/**
-	 * Logs the specified message and a stack trace of the given
-	 * <tt>Throwable</tt> object to the context's log. The
-	 * name and type of the servlet log is servlet engine specific,
-	 * but is normally an event log.
-	 *
-	 * @param msg the message to be written
-	 * @param throwable the exception to be written
-	 */
-
-	public void log(String message, Throwable throwable) {
-		http.logError(message, throwable);
-	}
-
-	/**
-	 * Removes the attribute from the context that is bound to a particular
-	 * name.
-	 *
-	 * @param name the name of the attribute to remove from the context
-	 */
-
-	public void removeAttribute(String name) {
-		if (attributes != null) {
-			attributes.remove(name);
-		}
-	}
-
-	/**
-	 * Binds an object to a given name in this context. If an object
-	 * is allready bound into the context with the given name,
-	 * it will be replaced.
-	 *
-	 * Attribute names should follow the same convention as package names.
-	 * Names matching java.*, javax.*, and sun.* are reserved for
-	 * definition by this specification or by the reference implementation.
-	 *
-	 * @param name the name of the attribute to store
-	 * @param value the value of the attribute
-	 */
-
-	public void setAttribute(String name, Object object) {
-		if (attributes == null) {
-			synchronized (this) {
-				if (attributes == null) {
-					attributes = new Hashtable(31);
-				}
-			}
-		}
-
-		attributes.put(name, object);
-	}
-
-	/**
-	 * @see javax.servlet.ServletContext#getInitParameter(String)
-	 */
-	public String getInitParameter(String name) throws UnsupportedOperationException {
-		throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-	}
-
-	/**
-	 * @see javax.servlet.ServletContext#getInitParameterNames()
-	 */
-	public Enumeration getInitParameterNames() throws UnsupportedOperationException {
-		throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-	}
-
-	/**
-	 * @see javax.servlet.ServletContext#getNamedDispatcher(String)
-	 */
-	public RequestDispatcher getNamedDispatcher(String name) throws UnsupportedOperationException {
-		throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-	}
-
-	/**
-	 * @see javax.servlet.ServletContext#getResourcePaths(String)
-	 */
-	public Set getResourcePaths(String path) throws UnsupportedOperationException {
-		throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-	}
-
-	/**
-	 * @see javax.servlet.ServletContext#getServletContextName()
-	 */
-	public String getServletContextName() throws UnsupportedOperationException {
-		throw new UnsupportedOperationException(HttpMsg.HTTP_ONLY_SUPPORTS_2_1);
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/servlet/ServletInputStreamImpl.java b/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/servlet/ServletInputStreamImpl.java
deleted file mode 100644
index 37c326f..0000000
--- a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/servlet/ServletInputStreamImpl.java
+++ /dev/null
@@ -1,515 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1999, 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.http.servlet;
-
-import java.io.IOException;
-import java.io.InputStream;
-import javax.servlet.ServletInputStream;
-
-/**
- * An input stream for reading servlet requests, it provides an
- * efficient readLine method.  This is an abstract class, to be
- * implemented by a network services writer.  For some application
- * protocols, such as the HTTP POST and PUT methods, servlet writers
- * use the input stream to get data from clients.  They access the
- * input stream via the ServletRequest's getInputStream method,
- * available from within the servlet's service method.  Subclasses of
- * ServletInputStream must provide an implementation of the read()
- * method.
- *
- * <p>
- * This InputStream Object just forwards all requests to the real InputStream object
- * It is intended that that would be the real Sock InputStream.  This has some
- * problems if we ever need to restart the stream with another Servlet/etc, so this
- * may need to change some day change.
- */
-public class ServletInputStreamImpl extends ServletInputStream {
-	private InputStream in;
-	private ServletInputStream servletInputStream = null;
-
-	protected ServletInputStreamImpl(InputStream in) {
-		super();
-		this.in = in;
-	}
-
-	private void checkOpen() throws IOException {
-		if (in == null) {
-			throw new IOException("ServletInputStream closed"); //$NON-NLS-1$
-		}
-	}
-
-	/**
-	 * Returns the number of bytes that can be read from this input
-	 * stream without blocking. The available method of
-	 * <code>InputStream</code> returns <code>0</code>. This method
-	 * <B>should</B> be overridden by subclasses.
-	 *
-	 * @return     the number of bytes that can be read from this input stream
-	 *             without blocking.
-	 * @exception  IOException  if an I/O error occurs.
-	 * @since	   JDK1.0
-	 */
-	public int available() throws IOException {
-		checkOpen();
-
-		return in.available();
-	}
-
-	/**
-	 * Closes this input stream and releases any system resources
-	 * associated with the stream.
-	 * <p>
-	 * The <code>close</code> method of <code>InputStream</code> does nothing.
-	 *
-	 * @exception  IOException  if an I/O error occurs.
-	 * @since      JDK1.0
-	 */
-	public void close() throws IOException {
-		in = null;
-	}
-
-	/**
-	 * Return the ServletInputStream to use for reading data after the
-	 * HTTP headers have been read. If a Content-Length header is available
-	 *
-	 * @param len Content-Length of InputStream
-	 * @return InputStream for use by servlets
-	 * @exception
-	 */
-	ServletInputStream getServletInputStream(int len) {
-		if (servletInputStream == null) {
-			synchronized (this) {
-				if (servletInputStream == null) {
-					if (len > 0) {
-						servletInputStream = new ContentLength(this, len);
-					} else {
-						servletInputStream = this;
-					}
-				}
-			}
-		}
-
-		return servletInputStream;
-	}
-
-	/**
-	 * Marks the current position in this input stream. A subsequent
-	 * call to the <code>reset</code> method repositions this stream at
-	 * the last marked position so that subsequent reads re-read the same
-	 * bytes.
-	 * <p>
-	 * The <code>readlimit</code> arguments tells this input stream to
-	 * allow that many bytes to be read before the mark position gets
-	 * invalidated.
-	 * <p>
-	 * The <code>mark</code> method of <code>InputStream</code> does nothing.
-	 *
-	 * @param   readlimit   the maximum limit of bytes that can be read before
-	 *                      the mark position becomes invalid.
-	 * @see     java.io.InputStream#reset()
-	 * @since   JDK1.0
-	 */
-	public void mark(int readLimit) {
-		in.mark(readLimit);
-	}
-
-	/**
-	 * Tests if this input stream supports the <code>mark</code>
-	 * and <code>reset</code> methods. The <code>markSupported</code>
-	 * method of <code>InputStream</code> returns <code>false</code>.
-	 *
-	 * @return  <code>true</code> if this true type supports the mark and reset
-	 *          method; <code>false</code> otherwise.
-	 * @see     java.io.InputStream#mark(int)
-	 * @see     java.io.InputStream#reset()
-	 * @since   JDK1.0
-	 */
-	public boolean markSupported() {
-		return in.markSupported();
-	}
-
-	/**
-	 * Reads the next byte of data from this input stream. The value
-	 * byte is returned as an <code>int</code> in the range
-	 * <code>0</code> to <code>255</code>. If no byte is available
-	 * because the end of the stream has been reached, the value
-	 * <code>-1</code> is returned. This method blocks until input data
-	 * is available, the end of the stream is detected, or an exception
-	 * is thrown.
-	 * <p>
-	 * A subclass must provide an implementation of this method.
-	 *
-	 * @return     the next byte of data, or <code>-1</code> if the end of the
-	 *             stream is reached.
-	 * @exception  IOException  if an I/O error occurs.
-	 * @since      JDK1.0
-	 */
-	public int read() throws IOException {
-		checkOpen();
-
-		return in.read();
-	}
-
-	/**
-	 * Reads up to <code>b.length</code> bytes of data from this input
-	 * stream into an array of bytes.
-	 * <p>
-	 * The <code>read</code> method of <code>InputStream</code> calls
-	 * the <code>read</code> method of three arguments with the arguments
-	 * <code>b</code>, <code>0</code>, and <code>b.length</code>.
-	 *
-	 * @param      b   the buffer into which the data is read.
-	 * @return     the total number of bytes read into the buffer, or
-	 *             <code>-1</code> is there is no more data because the end of
-	 *             the stream has been reached.
-	 * @exception  IOException  if an I/O error occurs.
-	 * @see        java.io.InputStream#read(byte[], int, int)
-	 * @since      JDK1.0
-	 */
-	public int read(byte[] b) throws IOException {
-		checkOpen();
-
-		return in.read(b, 0, b.length);
-	}
-
-	/**
-	 * Reads up to <code>len</code> bytes of data from this input stream
-	 * into an array of bytes. This method blocks until some input is
-	 * available. If the argument <code>b</code> is <code>null</code>, a
-	 * <code>NullPointerException</code> is thrown.
-	 * <p>
-	 * The <code>read</code> method of <code>InputStream</code> reads a
-	 * single byte at a time using the read method of zero arguments to
-	 * fill in the array. Subclasses are encouraged to provide a more
-	 * efficient implementation of this method.
-	 *
-	 * @param      b     the buffer into which the data is read.
-	 * @param      off   the start offset of the data.
-	 * @param      len   the maximum number of bytes read.
-	 * @return     the total number of bytes read into the buffer, or
-	 *             <code>-1</code> if there is no more data because the end of
-	 *             the stream has been reached.
-	 * @exception  IOException  if an I/O error occurs.
-	 * @see        java.io.InputStream#read()
-	 * @since      JDK1.0
-	 */
-	public int read(byte[] b, int off, int len) throws IOException {
-		checkOpen();
-
-		return in.read(b, off, len);
-	}
-
-	/**
-	 * Repositions this stream to the position at the time the
-	 * <code>mark</code> method was last called on this input stream.
-	 * <p>
-	 * The <code>reset</code> method of <code>InputStream</code> throws
-	 * an <code>IOException</code>, because input streams, by default, do
-	 * not support <code>mark</code> and <code>reset</code>.
-	 * <p>
-	 * Stream marks are intended to be used in
-	 * situations where you need to read ahead a little to see what's in
-	 * the stream. Often this is most easily done by invoking some
-	 * general parser. If the stream is of the type handled by the
-	 * parser, it just chugs along happily. If the stream is not of
-	 * that type, the parser should toss an exception when it fails,
-	 * which, if it happens within readlimit bytes, allows the outer
-	 * code to reset the stream and try another parser.
-	 *
-	 * @exception  IOException  if this stream has not been marked or if the
-	 *               mark has been invalidated.
-	 * @see     java.io.InputStream#mark(int)
-	 * @see     java.io.IOException
-	 * @since   JDK1.0
-	 */
-	public void reset() throws IOException {
-		checkOpen();
-
-		in.reset();
-	}
-
-	/**
-	 * Skips over and discards <code>n</code> bytes of data from this
-	 * input stream. The <code>skip</code> method may, for a variety of
-	 * reasons, end up skipping over some smaller number of bytes,
-	 * possibly <code>0</code>. The actual number of bytes skipped is
-	 * returned.
-	 * <p>
-	 * The <code>skip</code> method of <code>InputStream</code> creates
-	 * a byte array of length <code>n</code> and then reads into it until
-	 * <code>n</code> bytes have been read or the end of the stream has
-	 * been reached. Subclasses are encouraged to provide a more
-	 * efficient implementation of this method.
-	 *
-	 * @param      n   the number of bytes to be skipped.
-	 * @return     the actual number of bytes skipped.
-	 * @exception  IOException  if an I/O error occurs.
-	 * @since      JDK1.0
-	 */
-	public long skip(long len) throws IOException {
-		checkOpen();
-
-		return in.skip(len);
-	}
-
-	/**
-	 * ServletInputStream which limit readable data to the specified content length.
-	 * After the number of bytes have been read, EOF(-1) is returned from the read
-	 * method.
-	 *
-	 */
-	static class ContentLength extends ServletInputStream {
-		private int contentLength;
-		private int mark;
-		private ServletInputStream in;
-
-		ContentLength(ServletInputStream in, int len) {
-			super();
-			this.in = in;
-			contentLength = len;
-			mark = len;
-		}
-
-		/**
-		 * Returns the number of bytes that can be read from this input
-		 * stream without blocking. The available method of
-		 * <code>InputStream</code> returns <code>0</code>. This method
-		 * <B>should</B> be overridden by subclasses.
-		 *
-		 * @return     the number of bytes that can be read from this input stream
-		 *             without blocking.
-		 * @exception  IOException  if an I/O error occurs.
-		 * @since	   JDK1.0
-		 */
-		public int available() throws IOException {
-			int avail = in.available();
-
-			if (contentLength < avail) {
-				return contentLength;
-			}
-
-			return avail;
-		}
-
-		/**
-		 * Closes this input stream and releases any system resources
-		 * associated with the stream.
-		 * <p>
-		 * The <code>close</code> method of <code>InputStream</code> does nothing.
-		 *
-		 * @exception  IOException  if an I/O error occurs.
-		 * @since      JDK1.0
-		 */
-		public void close() throws IOException {
-			in.close();
-		}
-
-		/**
-		 * Marks the current position in this input stream. A subsequent
-		 * call to the <code>reset</code> method repositions this stream at
-		 * the last marked position so that subsequent reads re-read the same
-		 * bytes.
-		 * <p>
-		 * The <code>readlimit</code> arguments tells this input stream to
-		 * allow that many bytes to be read before the mark position gets
-		 * invalidated.
-		 * <p>
-		 * The <code>mark</code> method of <code>InputStream</code> does nothing.
-		 *
-		 * @param   readlimit   the maximum limit of bytes that can be read before
-		 *                      the mark position becomes invalid.
-		 * @see     java.io.InputStream#reset()
-		 * @since   JDK1.0
-		 */
-		public void mark(int readLimit) {
-			in.mark(readLimit);
-
-			mark = contentLength;
-		}
-
-		/**
-		 * Tests if this input stream supports the <code>mark</code>
-		 * and <code>reset</code> methods. The <code>markSupported</code>
-		 * method of <code>InputStream</code> returns <code>false</code>.
-		 *
-		 * @return  <code>true</code> if this true type supports the mark and reset
-		 *          method; <code>false</code> otherwise.
-		 * @see     java.io.InputStream#mark(int)
-		 * @see     java.io.InputStream#reset()
-		 * @since   JDK1.0
-		 */
-		public boolean markSupported() {
-			return in.markSupported();
-		}
-
-		/**
-		 * Reads the next byte of data from this input stream. The value
-		 * byte is returned as an <code>int</code> in the range
-		 * <code>0</code> to <code>255</code>. If no byte is available
-		 * because the end of the stream has been reached, the value
-		 * <code>-1</code> is returned. This method blocks until input data
-		 * is available, the end of the stream is detected, or an exception
-		 * is thrown.
-		 * <p>
-		 * A subclass must provide an implementation of this method.
-		 *
-		 * @return     the next byte of data, or <code>-1</code> if the end of the
-		 *             stream is reached.
-		 * @exception  IOException  if an I/O error occurs.
-		 * @since      JDK1.0
-		 */
-		public int read() throws IOException {
-			if (contentLength <= 0) {
-				return -1;
-			}
-
-			int read = in.read();
-
-			contentLength--;
-
-			return read;
-		}
-
-		/**
-		 * Reads up to <code>b.length</code> bytes of data from this input
-		 * stream into an array of bytes.
-		 * <p>
-		 * The <code>read</code> method of <code>InputStream</code> calls
-		 * the <code>read</code> method of three arguments with the arguments
-		 * <code>b</code>, <code>0</code>, and <code>b.length</code>.
-		 *
-		 * @param      b   the buffer into which the data is read.
-		 * @return     the total number of bytes read into the buffer, or
-		 *             <code>-1</code> is there is no more data because the end of
-		 *             the stream has been reached.
-		 * @exception  IOException  if an I/O error occurs.
-		 * @see        java.io.InputStream#read(byte[], int, int)
-		 * @since      JDK1.0
-		 */
-		public int read(byte[] b) throws IOException {
-			if (contentLength <= 0) {
-				return -1;
-			}
-
-			int len = b.length;
-
-			if (contentLength < len) {
-				len = contentLength;
-			}
-
-			int read = in.read(b, 0, len);
-
-			contentLength -= read;
-
-			return read;
-		}
-
-		/**
-		 * Reads up to <code>len</code> bytes of data from this input stream
-		 * into an array of bytes. This method blocks until some input is
-		 * available. If the argument <code>b</code> is <code>null</code>, a
-		 * <code>NullPointerException</code> is thrown.
-		 * <p>
-		 * The <code>read</code> method of <code>InputStream</code> reads a
-		 * single byte at a time using the read method of zero arguments to
-		 * fill in the array. Subclasses are encouraged to provide a more
-		 * efficient implementation of this method.
-		 *
-		 * @param      b     the buffer into which the data is read.
-		 * @param      off   the start offset of the data.
-		 * @param      len   the maximum number of bytes read.
-		 * @return     the total number of bytes read into the buffer, or
-		 *             <code>-1</code> if there is no more data because the end of
-		 *             the stream has been reached.
-		 * @exception  IOException  if an I/O error occurs.
-		 * @see        java.io.InputStream#read()
-		 * @since      JDK1.0
-		 */
-		public int read(byte[] b, int off, int len) throws IOException {
-			if (contentLength <= 0) {
-				return -1;
-			}
-
-			if (contentLength < len) {
-				len = contentLength;
-			}
-
-			int read = in.read(b, off, len);
-
-			contentLength -= read;
-
-			return read;
-		}
-
-		/**
-		 * Repositions this stream to the position at the time the
-		 * <code>mark</code> method was last called on this input stream.
-		 * <p>
-		 * The <code>reset</code> method of <code>InputStream</code> throws
-		 * an <code>IOException</code>, because input streams, by default, do
-		 * not support <code>mark</code> and <code>reset</code>.
-		 * <p>
-		 * Stream marks are intended to be used in
-		 * situations where you need to read ahead a little to see what's in
-		 * the stream. Often this is most easily done by invoking some
-		 * general parser. If the stream is of the type handled by the
-		 * parser, it just chugs along happily. If the stream is not of
-		 * that type, the parser should toss an exception when it fails,
-		 * which, if it happens within readlimit bytes, allows the outer
-		 * code to reset the stream and try another parser.
-		 *
-		 * @exception  IOException  if this stream has not been marked or if the
-		 *               mark has been invalidated.
-		 * @see     java.io.InputStream#mark(int)
-		 * @see     java.io.IOException
-		 * @since   JDK1.0
-		 */
-		public void reset() throws IOException {
-			in.reset();
-
-			contentLength = mark;
-		}
-
-		/**
-		 * Skips over and discards <code>n</code> bytes of data from this
-		 * input stream. The <code>skip</code> method may, for a variety of
-		 * reasons, end up skipping over some smaller number of bytes,
-		 * possibly <code>0</code>. The actual number of bytes skipped is
-		 * returned.
-		 * <p>
-		 * The <code>skip</code> method of <code>InputStream</code> creates
-		 * a byte array of length <code>n</code> and then reads into it until
-		 * <code>n</code> bytes have been read or the end of the stream has
-		 * been reached. Subclasses are encouraged to provide a more
-		 * efficient implementation of this method.
-		 *
-		 * @param      n   the number of bytes to be skipped.
-		 * @return     the actual number of bytes skipped.
-		 * @exception  IOException  if an I/O error occurs.
-		 * @since      JDK1.0
-		 */
-		public long skip(long len) throws IOException {
-			if (contentLength <= 0) {
-				return 0;
-			}
-
-			if (contentLength < len) {
-				len = contentLength;
-			}
-
-			long skipped = in.skip(len);
-
-			contentLength -= skipped;
-
-			return skipped;
-		}
-	}
-}
diff --git a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/servlet/ServletOutputStreamImpl.java b/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/servlet/ServletOutputStreamImpl.java
deleted file mode 100644
index ae62e5e..0000000
--- a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/servlet/ServletOutputStreamImpl.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1999, 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.http.servlet;
-
-import java.io.*;
-import javax.servlet.ServletOutputStream;
-
-/**
- * The implementation of javax.servlet.ServletOutputStream.
- *
- * When a flush or close method is called on an implementation of this class, any
- * data buffered by the servlet engine is sent to the client and the response is
- * considered to be "committed". Note that calling close on an object of this type
- * doesn't necessarily close the underlying socket stream.
- */
-
-//BUGBUG - override print methods for better performance!!!!
-class ServletOutputStreamImpl extends ServletOutputStream {
-	/** Actual output stream */
-	private OutputStream realOut;
-
-	/** response object */
-	private HttpServletResponseImpl response;
-
-	/** false if the ServletOutputStream has been closed */
-	private boolean open;
-
-	/** Place to buffer the output data */
-	private ByteArrayOutputStream buffer;
-
-	/** Place to buffer the output data */
-	private OutputStream out;
-
-	/** true if we need to write the response headers */
-	private boolean writeHeaders;
-
-	/** true if the flush method should flush */
-	private boolean flush;
-
-	/** true if this ServletOutputStream is closing */
-	private boolean closing;
-
-	ServletOutputStreamImpl(OutputStream realOut, HttpServletResponseImpl response) {
-		this.realOut = realOut;
-		this.response = response;
-
-		// BUGBUG Make the default buffer size configurable.
-		buffer = new ByteArrayOutputStream(8192); /* start with a 8k buffer */
-		out = buffer; /* begin with buffer */
-		open = true;
-		writeHeaders = true;
-		closing = false;
-		flush = true;
-	}
-
-	/**
-	 * This method is called by a wrapper to disable normal flush
-	 * function until the close method is called.
-	 */
-	synchronized void disableFlush() {
-		flush = false; /* disable flush until we are closed */
-	}
-
-	public synchronized void close() throws IOException {
-		if (open) {
-			closing = true; /* allow content size to be calculated */
-			flush = true; /* enable normal flush function */
-
-			flush();
-
-			open = false; /* disable this ServletOutputStream */
-		}
-	}
-
-	public synchronized void flush() throws IOException {
-		if (open) {
-			if (writeHeaders) {
-				if (flush) {
-					/* These must be set before calling writeHeaders */
-					writeHeaders = false;
-					out = realOut;
-
-					/* write the response headers */
-					response.writeHeaders(closing ? buffer.size() : -1);
-
-					/* copy the buffered output to the real OutputStream */
-					buffer.writeTo(out);
-
-					/* dereference buffer so it may be garbage collected */
-					buffer = null;
-
-					out.flush();
-				}
-			} else {
-				out.flush();
-			}
-		} else {
-			throw new IOException("closed"); //$NON-NLS-1$
-		}
-	}
-
-	public synchronized void write(byte[] bytes) throws IOException {
-		if (open) {
-			out.write(bytes, 0, bytes.length);
-		} else {
-			throw new IOException("closed"); //$NON-NLS-1$
-		}
-	}
-
-	public synchronized void write(byte[] bytes, int off, int len) throws IOException {
-		if (open) {
-			out.write(bytes, off, len);
-		} else {
-			throw new IOException("closed"); //$NON-NLS-1$
-		}
-	}
-
-	public synchronized void write(int b) throws IOException {
-		if (open) {
-			out.write(b);
-		} else {
-			throw new IOException("closed"); //$NON-NLS-1$
-		}
-	}
-}
diff --git a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/servlet/ServletPrintWriter.java b/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/servlet/ServletPrintWriter.java
deleted file mode 100644
index e4c1bb5..0000000
--- a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/servlet/ServletPrintWriter.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1999, 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.http.servlet;
-
-import java.io.*;
-
-/**
- * PrintWriter subclass for servlets. This class wraps a
- * ServletOutputStream to support Content-Length generation.
- */
-class ServletPrintWriter extends PrintWriter {
-	/** underlying ServletOutputStream */
-	private ServletOutputStreamImpl out;
-
-	/**
-	 * Create the PrintWriter w/o autoflush for the specified encoding.
-	 *
-	 * @param out Underlying ServletOutputStream.
-	 * @param encoding Encoding to use for the
-	 * @throws UnsupportedEncodingException if the encoding is not supported.
-	 */
-	ServletPrintWriter(ServletOutputStreamImpl out, String encoding) throws UnsupportedEncodingException {
-		super(new OutputStreamWriter(out, encoding), false);
-
-		this.out = out;
-	}
-
-	/**
-	 * Close this PrintWriter.
-	 *
-	 * Tell the underlying ServletOutputStream we are closing.
-	 */
-	public void close() {
-		out.disableFlush(); /* disable flush operation until closed */
-
-		super.close();
-	}
-}
diff --git a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/status.codes b/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/status.codes
deleted file mode 100644
index bb4fe9c..0000000
--- a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/http/status.codes
+++ /dev/null
@@ -1,52 +0,0 @@
-###############################################################################
-# Copyright (c) 2005 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
-###############################################################################
-
-# This file is used by the web server to provide a mapping of status code to
-# status phrases.
-# Format: StatusCode StatusPhrase
-
-100 Continue
-101 Switching Protocols
-200 OK
-201 Created
-202 Accepted
-203 Non-Authoritative Information
-204 No Content
-205 Reset Content
-206 Partial Content
-300 Multiple Choices
-301 Moved Permanently
-302 Moved Temporarily
-303 See Other
-304 Not Modified
-305 Use Proxy
-400 Bad Request
-401 Unauthorized
-402 Payment Required
-403 Forbidden
-404 Not Found
-405 Method Not Allowed
-406 Not Acceptable
-407 Proxy Authentication Required
-408 Request Time-out
-409 Conflict
-410 Gone
-411 Length Required
-412 Precondition Failed
-413 Request Entity Too Large
-414 Request-URI Too Large
-415 Unsupported Media Type
-500 Internal Server Error
-501 Not Implemented
-502 Bad Gateway
-503 Service Unavailable
-504 Gateway Time-out
-505 HTTP Version not supported
diff --git a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/socket/ServerSocketInterface.java b/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/socket/ServerSocketInterface.java
deleted file mode 100644
index fd4addf..0000000
--- a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/socket/ServerSocketInterface.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1999, 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.socket;
-
-/** ServerSocketInterface.java
- *
- *
- */
-
-import java.io.IOException;
-
-public interface ServerSocketInterface {
-	public SocketInterface acceptSock() throws IOException;
-
-	public void close() throws IOException;
-
-	public void setAddress(String address);
-
-	public String getAddress();
-
-	public int getLocalPort();
-
-	public String getScheme();
-}
diff --git a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/socket/SocketInterface.java b/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/socket/SocketInterface.java
deleted file mode 100644
index b84bd14..0000000
--- a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/socket/SocketInterface.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1999, 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.socket;
-
-/** SocketInterface.java
- *
- *
- */
-
-import java.io.*;
-import java.net.InetAddress;
-import java.net.SocketException;
-
-public interface SocketInterface {
-	/* Standard java.net.Socket methods */
-	public void close() throws IOException;
-
-	public InetAddress getInetAddress();
-
-	public InetAddress getLocalAddress();
-
-	public int getLocalPort();
-
-	public InputStream getInputStream() throws IOException;
-
-	public OutputStream getOutputStream() throws IOException;
-
-	public void setSoTimeout(int timeout) throws SocketException;
-
-	public int getSoTimeout() throws SocketException;
-
-	/* Http Methods */
-	/**
-	 * Return the scheme this socket is using.
-	 *
-	 * @return Either "http" or "https".
-	 */
-	public String getScheme();
-
-	/**
-	 * Test to see if the socket has been closed.
-	 *
-	 * @return true if close has been called on this socket.
-	 */
-	public boolean isClosed();
-
-	/**
-	 * Test to see if the socket is active.
-	 *
-	 * @return true if markActive has been called.
-	 */
-	public boolean isActive();
-
-	/**
-	 * Mark the socket active.
-	 *
-	 */
-	public void markActive();
-
-	/**
-	 * Mark the socket inactive.
-	 *
-	 */
-	public void markInactive();
-}
diff --git a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/socket/https/HttpsServerSocket.java b/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/socket/https/HttpsServerSocket.java
deleted file mode 100644
index 57b9ca5..0000000
--- a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/socket/https/HttpsServerSocket.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1999, 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.socket.https;
-
-import java.io.IOException;
-import java.net.*;
-import javax.net.ServerSocketFactory;
-import org.eclipse.equinox.socket.ServerSocketInterface;
-import org.eclipse.equinox.socket.SocketInterface;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
-import org.osgi.util.tracker.ServiceTracker;
-import org.osgi.util.tracker.ServiceTrackerCustomizer;
-
-public class HttpsServerSocket implements ServerSocketInterface, ServiceTrackerCustomizer {
-
-	protected String address = null;
-	protected BundleContext context = null;
-	protected int port = 443;
-	protected int backlog = 50;
-	protected InetAddress bindAddr = null;
-
-	protected ServiceTracker st = null;
-	protected ServerSocketFactory ssf = null;
-	protected ServerSocket ss = null;
-	protected ServerSocket dummyss = null;
-
-	/**
-	 * Constructor for HttpsServerSockets
-	 */
-	public HttpsServerSocket(BundleContext context, int port) throws IOException {
-		this(context, port, 50);
-	}
-
-	/**
-	 * HttpServerSocket constructor comment.
-	 * @param port int
-	 * @param backlog int
-	 * @exception java.io.IOException The exception description.
-	 */
-	public HttpsServerSocket(BundleContext context, int port, int backlog) throws java.io.IOException {
-		this(context, port, backlog, null);
-	}
-
-	/**
-	 * HttpServerSocket constructor comment.
-	 * @param port int
-	 * @param backlog int
-	 * @param bindAddr java.net.InetAddress
-	 * @exception java.io.IOException The exception description.
-	 */
-	public HttpsServerSocket(BundleContext context, int port, int backlog, InetAddress bindAddr) throws java.io.IOException {
-		this.context = context;
-		this.port = port;
-		this.backlog = backlog;
-		this.bindAddr = bindAddr;
-		// Try to configure a normal ServerSocket with the settings to see
-		// if the ServerSocket can be created.  If no exception is thrown
-		// then the port is available
-		dummyss = new ServerSocket(port, backlog, bindAddr);
-
-		st = new ServiceTracker(context, "javax.net.ssl.SSLServerSocketFactory", this); //$NON-NLS-1$
-		st.open();
-	}
-
-	/**
-	 * @see ServerSocketInterface#acceptSock()
-	 */
-	public synchronized SocketInterface acceptSock() throws IOException {
-		while (this.ssf == null) {
-			try {
-				wait();
-			} catch (InterruptedException e) {
-				throw new IOException();
-			}
-		}
-		if (ss == null) {
-			if (dummyss != null) {
-				dummyss.close();
-				dummyss = null;
-			}
-			ss = ssf.createServerSocket(port, backlog, bindAddr);
-		}
-		Socket socket = ss.accept();
-		return new HttpsSocket(socket);
-	}
-
-	/**
-	 * @see ServerSocketInterface#close()
-	 */
-	public void close() throws IOException {
-		if (ss != null) {
-			ss.close();
-		}
-	}
-
-	/**
-	 * @see ServerSocketInterface#getLocalPort()
-	 */
-	public int getLocalPort() {
-		if (ss != null) {
-			return ss.getLocalPort();
-		}
-		return 0;
-	}
-
-	/**
-	 * @see ServerSocketInterface#getScheme()
-	 */
-	public String getScheme() {
-		return ("https"); //$NON-NLS-1$
-	}
-
-	public String getAddress() {
-		return address;
-	}
-
-	public void setAddress(String address) {
-		this.address = address;
-	}
-
-	public synchronized Object addingService(ServiceReference reference) {
-		if (ssf == null) {
-			ssf = (ServerSocketFactory) context.getService(reference);
-			notify();
-			return ssf;
-		}
-		return null;
-	}
-
-	public void modifiedService(ServiceReference reference, Object service) {
-		// do nothing
-	}
-
-	public synchronized void removedService(ServiceReference reference, Object service) {
-		ssf = null;
-		if (ss != null) {
-			try {
-				ss.close();
-			} catch (IOException e) {
-				// TODO: consider logging
-			}
-			ss = null;
-		}
-		context.ungetService(reference);
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/socket/https/HttpsSocket.java b/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/socket/https/HttpsSocket.java
deleted file mode 100644
index 082015b..0000000
--- a/bundles/org.eclipse.equinox.http/src/org/eclipse/equinox/socket/https/HttpsSocket.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1999, 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.socket.https;
-
-import java.io.*;
-import java.net.*;
-import org.eclipse.equinox.socket.SocketInterface;
-
-public class HttpsSocket implements SocketInterface {
-	protected Socket socket;
-	protected boolean closed = false;
-	private boolean active = false;
-	private InputStream in = null;
-
-	public HttpsSocket(Socket socket) {
-		this.socket = socket;
-	}
-
-	public void close() throws IOException {
-		closed = true;
-		socket.close();
-	}
-
-	public InetAddress getInetAddress() {
-		return socket.getInetAddress();
-	}
-
-	public InetAddress getLocalAddress() {
-		return socket.getLocalAddress();
-	}
-
-	public int getLocalPort() {
-		return socket.getLocalPort();
-	}
-
-	/**
-	 * Wrap the real socket input stream in a buffered input stream
-	 *
-	 * @return a buffered InputStream which wraps the real input stream.
-	 * @throws IOException
-	 */
-	public InputStream getInputStream() throws IOException {
-		if (in == null) {
-			synchronized (this) {
-				if (in == null) {
-					in = new BufferedInputStream(socket.getInputStream());
-				}
-			}
-		}
-
-		return in;
-	}
-
-	public OutputStream getOutputStream() throws IOException {
-		return socket.getOutputStream();
-	}
-
-	public void setSoTimeout(int timeout) throws SocketException {
-		socket.setSoTimeout(timeout);
-	}
-
-	public int getSoTimeout() throws SocketException {
-		return socket.getSoTimeout();
-	}
-
-	/**
-	 * Return the scheme this socket is using.
-	 *
-	 * @return "https".
-	 */
-	public String getScheme() {
-		return "https"; //$NON-NLS-1$
-	}
-
-	/**
-	 * Test to see if the socket is closed.
-	 *
-	 * @return true if close has been called.
-	 */
-	public boolean isClosed() {
-		return closed;
-	}
-
-	/**
-	 * Test to see if the socket is active.
-	 *
-	 * @return true if markActive has been called.
-	 */
-	public boolean isActive() {
-		return active;
-	}
-
-	/**
-	 * Mark the socket active.
-	 *
-	 */
-	public void markActive() {
-		active = true;
-	}
-
-	/**
-	 * Mark the socket inactive.
-	 *
-	 */
-	public void markInactive() {
-		active = false;
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.log/.classpath b/bundles/org.eclipse.equinox.log/.classpath
deleted file mode 100644
index 1fa3e68..0000000
--- a/bundles/org.eclipse.equinox.log/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/bundles/org.eclipse.equinox.log/.cvsignore b/bundles/org.eclipse.equinox.log/.cvsignore
deleted file mode 100644
index ba077a4..0000000
--- a/bundles/org.eclipse.equinox.log/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-bin
diff --git a/bundles/org.eclipse.equinox.log/.project b/bundles/org.eclipse.equinox.log/.project
deleted file mode 100644
index 3c43dd1..0000000
--- a/bundles/org.eclipse.equinox.log/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.equinox.log</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.jdt.core.javanature</nature>
-		<nature>org.eclipse.pde.PluginNature</nature>
-	</natures>
-</projectDescription>
diff --git a/bundles/org.eclipse.equinox.log/.settings/org.eclipse.core.resources.prefs b/bundles/org.eclipse.equinox.log/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index 16532b2..0000000
--- a/bundles/org.eclipse.equinox.log/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Tue May 25 15:00:03 EDT 2004
-encoding/<project>=ISO-8859-1
-eclipse.preferences.version=1
diff --git a/bundles/org.eclipse.equinox.log/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.equinox.log/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 53241a7..0000000
--- a/bundles/org.eclipse.equinox.log/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,49 +0,0 @@
-#Fri Dec 16 09:20:31 CST 2005
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=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=disabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-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.overridingPackageDefaultMethod=warning
-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=ignore
-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=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
diff --git a/bundles/org.eclipse.equinox.log/META-INF/MANIFEST.MF b/bundles/org.eclipse.equinox.log/META-INF/MANIFEST.MF
deleted file mode 100644
index 9e82592..0000000
--- a/bundles/org.eclipse.equinox.log/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,16 +0,0 @@
-Bundle-ManifestVersion: 2
-Bundle-Vendor: %bundleVendor
-Bundle-Version: 1.0.100.qualifier
-Bundle-Activator: org.eclipse.equinox.log.Activator
-Bundle-Copyright: %bundleCopyright
-Bundle-SymbolicName: org.eclipse.equinox.log
-Bundle-Name: %bundleName
-Export-Service: org.osgi.service.log.LogReaderService,
- org.osgi.service.log.LogService
-Import-Package: org.eclipse.osgi.framework.eventmgr,
- org.osgi.framework;version="1.1",
- org.osgi.service.cm;version="1.0",
- org.osgi.service.log;version="1.2",
- org.eclipse.osgi.util
-Export-Package: org.eclipse.equinox.log;x-internal:=true
-Bundle-Localization: plugin
diff --git a/bundles/org.eclipse.equinox.log/OSGI-INF/l10n/bundle_en.properties b/bundles/org.eclipse.equinox.log/OSGI-INF/l10n/bundle_en.properties
deleted file mode 100644
index 8bf86e2..0000000
--- a/bundles/org.eclipse.equinox.log/OSGI-INF/l10n/bundle_en.properties
+++ /dev/null
@@ -1,21 +0,0 @@
-###############################################################################
-# Copyright (c) 1999, 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
-###############################################################################
-# NLS_MESSAGEFORMAT_ALL
-LOG_SIZE=Log Size
-LOG_SIZE_DESC=The size of the log, in number of entries
-LOG_THRESHOLD=The level of logging
-LOG_THRESHOLD_DESC=The minimum severity level of logged messages
-ERROR=Error
-WARNING=Warning
-INFO=Informational
-DEBUG=Debug
-LOG_SETTINGS=Log Service Settings
-LOG_SETTINGS_DESC=The Log Service settings that may be configured
diff --git a/bundles/org.eclipse.equinox.log/OSGI-INF/metatype/METADATA.XML b/bundles/org.eclipse.equinox.log/OSGI-INF/metatype/METADATA.XML
deleted file mode 100644
index 006da53..0000000
--- a/bundles/org.eclipse.equinox.log/OSGI-INF/metatype/METADATA.XML
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<metatype:MetaData xmlns:metatype="http://www.osgi.org/xmlns/metatype/v1.0.0">
-	<OCD id="org.eclipse.equinox.log.Log" name="%LOG_SETTINGS" description="%LOG_SETTINGS_DESC">
-	 <AD id="log.size" name="%LOG_SIZE" type="Integer" default="100" cardinality="0" min="10" max="2000" description="%LOG_SIZE_DESC" required="true"/>
-	 <AD id="log.threshold" name="%LOG_THRESHOLD" type="Integer" default="4" cardinality="0" min="1" max="4" description="%LOG_THRESHOLD_DESC" required="true">
-        <Option label= "%ERROR" value="1"/>
-        <Option label= "%WARNING" value="2"/>
-		<Option label= "%INFO" value="3"/>
-		<Option label= "%DEBUG" value="4"/>
-	 </AD>
-    </OCD>
-    <Designate pid="org.eclipse.equinox.log.Log">
-        <Object ocdref="org.eclipse.equinox.log.Log"/> 
-    </Designate> 
-</metatype:MetaData>
diff --git a/bundles/org.eclipse.equinox.log/about.html b/bundles/org.eclipse.equinox.log/about.html
deleted file mode 100644
index 3989f53..0000000
--- a/bundles/org.eclipse.equinox.log/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 11, 2006</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 (&quot;EPL&quot;).  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, &quot;Program&quot; 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 (&quot;Redistributor&quot;) 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>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/bundles/org.eclipse.equinox.log/build.properties b/bundles/org.eclipse.equinox.log/build.properties
deleted file mode 100644
index e0ff5d7..0000000
--- a/bundles/org.eclipse.equinox.log/build.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-###############################################################################
-# Copyright (c) 2005 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
-###############################################################################
-bin.includes = META-INF/,\
-               plugin*.properties,\
-               about.html,\
-               .,\
-               OSGI-INF/
-src.includes = about.html
-source.. = src/
-output.. = bin/
diff --git a/bundles/org.eclipse.equinox.log/plugin.properties b/bundles/org.eclipse.equinox.log/plugin.properties
deleted file mode 100644
index 09d7869..0000000
--- a/bundles/org.eclipse.equinox.log/plugin.properties
+++ /dev/null
@@ -1,13 +0,0 @@
-###############################################################################
-# Copyright (c) 2005 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
-###############################################################################
-bundleVendor = Eclipse.org
-bundleName = Log Service
-bundleCopyright = Copyright (c) IBM Corp. 1999, 2005
diff --git a/bundles/org.eclipse.equinox.log/src/org/eclipse/equinox/log/Activator.java b/bundles/org.eclipse.equinox.log/src/org/eclipse/equinox/log/Activator.java
deleted file mode 100644
index b3aa520..0000000
--- a/bundles/org.eclipse.equinox.log/src/org/eclipse/equinox/log/Activator.java
+++ /dev/null
@@ -1,533 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1999, 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.log;
-
-import java.util.*;
-import org.eclipse.osgi.framework.eventmgr.*;
-import org.eclipse.osgi.util.NLS;
-import org.osgi.framework.*;
-import org.osgi.service.cm.ConfigurationException;
-import org.osgi.service.cm.ManagedService;
-import org.osgi.service.log.LogService;
-
-/**
- * An array of LogEntries which wraps when full.
- */
-public class Activator implements BundleActivator, EventDispatcher, BundleListener, FrameworkListener, ServiceListener, ManagedService {
-	protected BundleContext context;
-
-	/** List of LogReaderServices for bundle's LogEntry listeners. */
-	protected EventListeners logEvent;
-	/** EventManager for event delivery. */
-	protected EventManager eventManager;
-
-	protected ServiceRegistration logservice;
-	protected ServiceRegistration logreaderservice;
-	protected ServiceRegistration logmanagedservice;
-
-	/** default log size value */
-	protected static final int DEFAULT_LOG_SIZE = 100;
-
-	/** default log threshold value */
-	protected static final int DEFAULT_LOG_THRESHOLD = LogService.LOG_DEBUG;
-
-	/** current logsize value */
-	protected int logSize = DEFAULT_LOG_SIZE;
-	/** current logthreshold value */
-	protected int logThreshold = DEFAULT_LOG_THRESHOLD;
-
-	protected LogEntry[] logEntries;
-	protected int head;
-	protected int tail;
-
-	/** The timestamp of the last log entry (to avoid duplicates). */
-	protected long lastTimestamp = 0;
-
-	/** key into properties for logsize value */
-	protected static final String keyLogSize = "log.size"; //$NON-NLS-1$
-	/** key into properties for log threshold value */
-	protected static final String keyLogThreshold = "log.threshold"; //$NON-NLS-1$
-	/** Pid that log service uses when it registers a CM Managed Service */
-	protected static final String LOGSERVICEPID = "org.eclipse.equinox.log.Log"; //$NON-NLS-1$
-
-	/**
-	 * BundleActivator.start method. We can now initialize the bundle
-	 * and register the services.
-	 *
-	 */
-	public void start(BundleContext bundleContext) {
-		this.context = bundleContext;
-
-		eventManager = new EventManager("Log Event Dispatcher"); //$NON-NLS-1$
-		logEvent = new EventListeners();
-
-		logEntries = new LogEntry[logSize];
-		head = 0;
-		tail = 0;
-		String initmessage = NLS.bind(LogMsg.Log_created_Log_Size, String.valueOf(logSize), String.valueOf(logThreshold));
-		logEntries[0] = new LogEntry(LogService.LOG_INFO, initmessage, bundleContext.getBundle(), null, null);
-
-		bundleContext.addBundleListener(this);
-		bundleContext.addServiceListener(this);
-		bundleContext.addFrameworkListener(this);
-
-		registerLogService();
-		registerLogReaderService();
-
-		registerManagedService();
-	}
-
-	/**
-	 * BundleActivator.stop method. We must now clean up and terminate
-	 * execution.
-	 *
-	 */
-	public synchronized void stop(BundleContext bundleContext) {
-		if (logmanagedservice != null) {
-			logmanagedservice.unregister();
-			logmanagedservice = null;
-		}
-
-		/* remove my listeners before unregistering myself */
-		this.context.removeBundleListener(this);
-		this.context.removeServiceListener(this);
-		this.context.removeFrameworkListener(this);
-
-		if (logservice != null) {
-			logservice.unregister();
-			logservice = null;
-		}
-		if (logreaderservice != null) {
-			logreaderservice.unregister();
-			logreaderservice = null;
-		}
-
-		/* destroy my event manager */
-		if (logEvent != null) {
-			logEvent.removeAllListeners();
-			logEvent = null;
-		}
-
-		if (eventManager != null) {
-			eventManager.close();
-			eventManager = null;
-		}
-
-		logEntries = null;
-
-		this.context = null;
-	}
-
-	/**
-	 *  Log a bundle message.  This is used internally by all of the public
-	 *  log() methods as the common point through which all logging must
-	 *  go through.
-	 *  @param level The severity of the message.  (Should be one of the four
-	 *               predefined severities.)
-	 *  @param message Human readable string describing the condition.
-	 *  @param context The BundleContext creating the log entry
-	 *  @param sd The ServiceDescription of the service that this message
-	 *  is associated with.
-	 *  @param exception The exception that reflects the condition.
-	 */
-	protected void log(int level, String message, Bundle bundle, ServiceReference reference, Throwable exception)
-
-	{
-		LogEntry logentry = new LogEntry(level, message, bundle, reference, exception);
-
-		synchronized (this) {
-			if (context == null) {
-				return;
-			}
-
-			// Make the timestamp unique, log listener's might use it as a key
-			if (logentry.time <= lastTimestamp) {
-				logentry.time = ++lastTimestamp;
-			} else {
-				lastTimestamp = logentry.time;
-			}
-
-			if (level <= logThreshold) { /* if level is within logging threshold */
-				addLogEntry(logentry);
-			}
-		}
-
-		/* queue to hold set of listeners */
-		ListenerQueue listeners = new ListenerQueue(eventManager);
-
-		/* queue to hold set of BundleContexts w/ listeners */
-		ListenerQueue contexts = new ListenerQueue(eventManager);
-
-		/* add set of BundleContexts w/ listeners to queue */
-		contexts.queueListeners(logEvent, this);
-
-		/* synchronously dispatch to populate listeners queue */
-		contexts.dispatchEventSynchronous(0, listeners);
-
-		/* dispatch event to set of listeners */
-		listeners.dispatchEventAsynchronous(0, logentry);
-	}
-
-	public void dispatchEvent(Object l, Object lo, int action, Object object) {
-		LogReaderService logreader = (LogReaderService) l;
-
-		EventListeners listeners = logreader.logEvent;
-
-		if (listeners != null) {
-			ListenerQueue queue = (ListenerQueue) object;
-
-			queue.queueListeners(listeners, logreader);
-		}
-	}
-
-	/**
-	 * This method must be called while synchronized.
-	 *
-	 */
-	protected void addLogEntry(LogEntry logentry) {
-		tail = (tail + 1) % logSize;
-		logEntries[tail] = logentry;
-		if (head == tail) {
-			head = (head + 1) % logSize;
-		}
-	}
-
-	protected synchronized Enumeration logEntries() {
-		final int tempHead = this.head;
-		final int tempTail = this.tail;
-		final int templogSize = this.logSize;
-		final LogEntry[] tempLogEntries = this.logEntries;
-
-		return (new Enumeration() {
-			private int item;
-			private LogEntry[] enumentries;
-
-			{
-				// The array is created in the log reader's memory space
-				if (tempHead <= tempTail) {
-					item = tempTail - tempHead + 1;
-					enumentries = new LogEntry[item];
-					System.arraycopy(tempLogEntries, tempHead, enumentries, 0, item);
-				} else { // log is full
-					int firstcopy = templogSize - tempHead;
-					item = firstcopy + tempTail + 1;
-					enumentries = new LogEntry[item];
-					System.arraycopy(tempLogEntries, tempHead, enumentries, 0, firstcopy);
-					System.arraycopy(tempLogEntries, 0, enumentries, firstcopy, item - firstcopy);
-				}
-			}
-
-			public boolean hasMoreElements() {
-				if (item > 0) {
-					return (true);
-				}
-				enumentries = null; /* release the storage */
-				return (false);
-			}
-
-			/** Returns an Object of type LogEntry */
-			public Object nextElement() {
-				if (item > 0) {
-					item--;
-					LogEntry entry = (enumentries[item]).copy();
-					enumentries[item] = null; /* release the storage as we go */
-					return (entry);
-				}
-				enumentries = null; /* release the storage */
-				throw new NoSuchElementException();
-			}
-		});
-	}
-
-	/**
-	 * BundleListener.bundleChanged method.
-	 *
-	 */
-	public void bundleChanged(BundleEvent event) {
-		log(LogService.LOG_INFO, getBundleEventTypeName(event.getType()), event.getBundle(), null, null);
-	}
-
-	/**
-	 * ServiceListener.serviceChanged method.
-	 *
-	 */
-	public void serviceChanged(ServiceEvent event) {
-		ServiceReference reference = event.getServiceReference();
-
-		int eventType = event.getType();
-
-		int logType = (eventType == ServiceEvent.MODIFIED) ? LogService.LOG_DEBUG : LogService.LOG_INFO;
-
-		log(logType, getServiceEventTypeName(eventType), reference.getBundle(), reference, null);
-	}
-
-	/**
-	 * FrameworkListener.frameworkEvent method.
-	 *
-	 */
-	public void frameworkEvent(FrameworkEvent event) {
-		int type = event.getType();
-
-		if (type == FrameworkEvent.ERROR) {
-			log(LogService.LOG_ERROR, getFrameworkEventTypeName(type), event.getBundle(), null, event.getThrowable());
-		} else {
-			log(LogService.LOG_INFO, getFrameworkEventTypeName(type), event.getBundle(), null, null);
-		}
-	}
-
-	/**
-	 * Convert BundleEvent type to a string.
-	 *
-	 */
-	protected 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 (NLS.bind(LogMsg.BundleEvent, Integer.toHexString(type)));
-		}
-	}
-
-	/**
-	 * Convert ServiceEvent type to a string.
-	 *
-	 */
-	protected 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 (NLS.bind(LogMsg.ServiceEvent, Integer.toHexString(type)));
-		}
-	}
-
-	/**
-	 * Convert FrameworkEvent type to a string.
-	 *
-	 */
-	protected 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 (NLS.bind(LogMsg.FrameworkEvent, Integer.toHexString(type)));
-		}
-	}
-
-	/**
-	 * Update the configuration for a ManagedService.
-	 *
-	 * <p> When the implementation of updated(Dictionary) detects any kind of
-	 * error in the configuration properties, it should create a
-	 * new 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 Exception, the
-	 * ConfigurationAdmin must catch it and should log it.
-	 * <p> The ConfigurationAdmin must call this method on a thread
-	 * other than the thread which initiated the call-back. This
-	 * implies that implementors of ManagedService can be assured
-	 * that the call-back will not take place during registration
-	 * when they execute the registration in a synchronized method.
-	 *
-	 * @param properties configuration properties, or null
-	 * @throws ConfigurationException when the update fails
-	 **/
-	public synchronized void updated(Dictionary properties) throws ConfigurationException {
-		/* Since updated is called asynchronously, we may have stopped
-		 * after the decision was made to call.
-		 */
-		if (context != null) {
-			if (properties == null) {
-				/* We have no configuration; we will just use our defaults */
-				return;
-			}
-
-			int size = logSize;
-			int threshold = logThreshold;
-
-			/* Get configuration values and validate */
-			Object property = properties.get(keyLogSize);
-			if (property != null) /* if null we will just use the default */
-			{
-				if (!(property instanceof Integer)) {
-					throw new ConfigurationException(keyLogSize, "not an Integer"); //$NON-NLS-1$
-				}
-
-				size = ((Integer) property).intValue();
-
-				if ((size < 10) || (size > 2000)) {
-					throw new ConfigurationException(keyLogSize, "must be in the range 10-2000"); //$NON-NLS-1$
-				}
-			}
-
-			property = properties.get(keyLogThreshold);
-			if (property != null) /* if null we will just use the default */
-			{
-				if (!(property instanceof Integer)) {
-					throw new ConfigurationException(keyLogThreshold, "not an Integer"); //$NON-NLS-1$
-				}
-
-				threshold = ((Integer) property).intValue();
-
-				if ((threshold < LogService.LOG_ERROR) || (threshold > LogService.LOG_DEBUG)) {
-					throw new ConfigurationException(keyLogThreshold, "must be one of the LogService defined Log levels"); //$NON-NLS-1$
-				}
-			}
-
-			/* Configuration values have been validated */
-			if (size != logSize) {
-				updateLogSize(size);
-			}
-
-			if (threshold != logThreshold) {
-				updateLogThreshold(threshold);
-			}
-		}
-	}
-
-	/**
-	 * This method must be called while synchronized.
-	 *
-	 */
-	private void updateLogSize(int size) {
-		LogEntry[] newlog = new LogEntry[size];
-
-		if (head <= tail) { /* log is not full */
-			int count = tail - head + 1;
-			if (size > count) { /* is new log bigger? */
-				System.arraycopy(logEntries, head, newlog, 0, count);
-				tail = count - 1;
-			} else { /* new log smaller */
-				System.arraycopy(logEntries, head + count - size, newlog, 0, size);
-				tail = size - 1;
-			}
-		} else { /* log is full */
-			int count = tail + 1 + logSize - head;
-			if (size > count) { /* is new log bigger? */
-				int boundary = logSize - head;
-				System.arraycopy(logEntries, head, newlog, 0, boundary);
-				System.arraycopy(logEntries, 0, newlog, boundary, count - boundary);
-				tail = count - 1;
-			} else { /* new log smaller */
-				if ((tail + 1) < size) { /* is log big enough to hold first half? */
-					int boundary = size - (tail + 1);
-					System.arraycopy(logEntries, logSize - boundary, newlog, 0, boundary);
-					System.arraycopy(logEntries, 0, newlog, boundary, tail + 1);
-				} else {
-					System.arraycopy(logEntries, tail + 1 - size, newlog, 0, size); //9626
-				}
-				tail = size - 1;
-			}
-		}
-
-		logEntries = newlog;
-		logSize = size;
-
-		head = 0;
-
-		String changemessage = NLS.bind(LogMsg.Log_modified_Log_Size, String.valueOf(logSize));
-
-		log(LogService.LOG_INFO, changemessage, context.getBundle(), null, null);
-	}
-
-	/**
-	 * This method must be called while synchronized.
-	 *
-	 */
-	private void updateLogThreshold(int threshold) {
-		logThreshold = threshold;
-
-		String changemessage = NLS.bind(LogMsg.Log_modified_Log_Threshold, String.valueOf(logThreshold));
-
-		log(LogService.LOG_INFO, changemessage, context.getBundle(), null, null);
-	}
-
-	protected void registerManagedService() {
-		/* Register a Managed Service to handle updates to the Log configuration values */
-		Hashtable properties = new Hashtable(7);
-
-		properties.put(Constants.SERVICE_VENDOR, "IBM"); //$NON-NLS-1$
-		properties.put(Constants.SERVICE_DESCRIPTION, LogMsg.OSGi_Log_Service_IBM_Implementation);
-		properties.put(Constants.SERVICE_PID, LOGSERVICEPID);
-
-		logmanagedservice = context.registerService(ManagedService.class.getName(), this, properties);
-	}
-
-	private void registerLogService() {
-		Hashtable properties = new Hashtable(7);
-
-		properties.put(Constants.SERVICE_VENDOR, "IBM"); //$NON-NLS-1$
-		properties.put(Constants.SERVICE_DESCRIPTION, LogMsg.OSGi_Log_Service_IBM_Implementation);
-		properties.put(Constants.SERVICE_PID, LogServiceImpl.class.getName());
-
-		logservice = context.registerService(LogService.class.getName(), new LogServiceFactory(this), properties);
-
-	}
-
-	private void registerLogReaderService() {
-		Hashtable properties = new Hashtable(7);
-
-		properties.put(Constants.SERVICE_VENDOR, "IBM"); //$NON-NLS-1$
-		properties.put(Constants.SERVICE_DESCRIPTION, LogMsg.OSGi_Log_Service_IBM_Implementation);
-		properties.put(Constants.SERVICE_PID, LogReaderService.class.getName());
-
-		logreaderservice = context.registerService(org.osgi.service.log.LogReaderService.class.getName(), new LogReaderServiceFactory(this), properties);
-	}
-}
diff --git a/bundles/org.eclipse.equinox.log/src/org/eclipse/equinox/log/ExternalMessages.properties b/bundles/org.eclipse.equinox.log/src/org/eclipse/equinox/log/ExternalMessages.properties
deleted file mode 100644
index afe1d75..0000000
--- a/bundles/org.eclipse.equinox.log/src/org/eclipse/equinox/log/ExternalMessages.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-###############################################################################
-# Copyright (c) 1999, 2005 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
-###############################################################################
-# NLS_MESSAGEFORMAT_ALL 
-
-Log_created_Log_Size=Log created; Log Size={0}; Log Threshold={1}
-Log_modified_Log_Size=Log modified; Log Size={0}
-Log_modified_Log_Threshold=Log modified; Log Threshold={0}
-OSGi_Log_Service_IBM_Implementation=OSGi Log Service - IBM Implementation
-BundleEvent=BundleEvent {0}
-ServiceEvent=ServiceEvent {0}
-FrameworkEvent=FrameworkEvent {0}
\ No newline at end of file
diff --git a/bundles/org.eclipse.equinox.log/src/org/eclipse/equinox/log/LogEntry.java b/bundles/org.eclipse.equinox.log/src/org/eclipse/equinox/log/LogEntry.java
deleted file mode 100644
index d4b5ee0..0000000
--- a/bundles/org.eclipse.equinox.log/src/org/eclipse/equinox/log/LogEntry.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1999, 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.log;
-
-import org.osgi.framework.Bundle;
-import org.osgi.framework.ServiceReference;
-
-/**
- * The memory space aware LogEntry implementation.
- */
-public class LogEntry implements org.osgi.service.log.LogEntry, Cloneable {
-	/**
-	 * The severity of the log entry that should be one of the
-	 * four levels defined in the <code>LogService</code> interface.
-	 */
-	protected int level;
-
-	/** The <code>System.currentTimeMillis()</code> the entry was made. */
-	protected long time;
-
-	/** The bundle that created the log entry. */
-	protected Bundle bundle;
-
-	/** The service reference that caused the log entry. */
-	protected ServiceReference serviceReference;
-
-	/** The log message. */
-	protected String message;
-
-	/**
-	 * The copy of the exception that caused the log
-	 * or <code>null</code>.
-	 */
-	protected LoggedException loggedException;
-
-	/**
-	 * Creates a log entry,
-	 *
-	 * @param	level		the severity (one of 4 as defined by LogService)
-	 * @param	message		the message text
-	 * @param	bundle		the bundle that created the entry
-	 * @param	reference	the reference to the service associated with the entry
-	 * @param	exception	the exception that caused that log entry or <code>null</code>
-	 */
-	protected LogEntry(int level, String message, Bundle bundle, ServiceReference reference, Throwable exception) {
-		this.time = System.currentTimeMillis();
-		this.level = level;
-
-		// make a copy of the message so it lives in this memory space
-		if (message != null) {
-			this.message = new String(message.toCharArray());
-		}
-
-		this.bundle = bundle;
-		this.serviceReference = reference;
-
-		// Make a copy of the exception in this memory space
-		if (exception != null) {
-			this.loggedException = new LoggedException(exception);
-		}
-	}
-
-	/**
-	 * Returns the bundle that created this log entry.
-	 */
-	public Bundle getBundle() {
-		return (bundle);
-	}
-
-	/**
-	 * Returns the service that this log entry is associated with.
-	 */
-	public ServiceReference getServiceReference() {
-		return (serviceReference);
-	}
-
-	/**
-	 * Returns the severity of the log entry.
-	 * Should be one of the four levels defined in LogService.
-	 */
-	public int getLevel() {
-		return (level);
-	}
-
-	/**
-	 * Returns the human readable message that was
-	 * recorded with this log entry.
-	 */
-	public String getMessage() {
-		return (message);
-	}
-
-	/**
-	 * Returns the exception that was recorded with this log entry.
-	 * 
-	 * A {@link LoggedException) that contains information about
-	 * the original exception is returned.
-	 */
-	public Throwable getException() {
-		return (loggedException);
-	}
-
-	/**
-	 * Returns the time log entry was created.
-	 */
-	public long getTime() {
-		return (time);
-	}
-
-	/**
-	 * Returns a copy of this log entry. The copy will contain
-	 * references to clopies of the internal data, not references 
-	 * to the original internal data of this <code>LogEntry</code> object. 
-	 *
-	 * @return  A deep copy of this log entry.
-	 */
-	public LogEntry copy() {
-		LogEntry copy = new LogEntry(level, message, bundle, serviceReference, loggedException);
-		copy.time = time;
-		return (copy);
-	}
-}
diff --git a/bundles/org.eclipse.equinox.log/src/org/eclipse/equinox/log/LogMsg.java b/bundles/org.eclipse.equinox.log/src/org/eclipse/equinox/log/LogMsg.java
deleted file mode 100644
index d7a8d52..0000000
--- a/bundles/org.eclipse.equinox.log/src/org/eclipse/equinox/log/LogMsg.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.log;
-
-import org.eclipse.osgi.util.NLS;
-
-public class LogMsg extends NLS {
-	private static final String BUNDLE_NAME = "org.eclipse.equinox.log.ExternalMessages"; //$NON-NLS-1$
-
-	public static String Log_created_Log_Size;
-	public static String Log_modified_Log_Size;
-	public static String Log_modified_Log_Threshold;
-	public static String OSGi_Log_Service_IBM_Implementation;
-	public static String BundleEvent;
-	public static String ServiceEvent;
-	public static String FrameworkEvent;
-
-	static {
-		// initialize resource bundles
-		NLS.initializeMessages(BUNDLE_NAME, LogMsg.class);
-	}
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.equinox.log/src/org/eclipse/equinox/log/LogReaderService.java b/bundles/org.eclipse.equinox.log/src/org/eclipse/equinox/log/LogReaderService.java
deleted file mode 100644
index bda13d6..0000000
--- a/bundles/org.eclipse.equinox.log/src/org/eclipse/equinox/log/LogReaderService.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1999, 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.log;
-
-import java.util.Enumeration;
-import java.util.Vector;
-import org.eclipse.osgi.framework.eventmgr.EventDispatcher;
-import org.eclipse.osgi.framework.eventmgr.EventListeners;
-import org.osgi.framework.Bundle;
-import org.osgi.service.log.LogListener;
-
-/**
- * LogReaderService class.
- */
-
-public class LogReaderService implements org.osgi.service.log.LogReaderService, EventDispatcher {
-	protected Activator log;
-	protected Bundle bundle;
-	protected EventListeners logEvent;
-
-	protected LogReaderService(Activator log, Bundle bundle) {
-		this.log = log;
-		this.bundle = bundle;
-		logEvent = null;
-	}
-
-	protected void close() {
-		Activator tempLog = this.log;
-		this.log = null;
-		this.bundle = null;
-
-		if (logEvent != null) {
-			tempLog.logEvent.removeListener(this);
-			logEvent.removeAllListeners();
-			logEvent = null;
-		}
-	}
-
-	public void dispatchEvent(Object l, Object lo, int action, Object object) {
-		Activator tempLog = this.log;
-
-		if (tempLog == null) {
-			return;
-		}
-
-		LogListener listener = (LogListener) lo;
-		listener.logged(((LogEntry) object).copy());
-	}
-
-	/*
-	 * ----------------------------------------------------------------------
-	 *      LogReaderService Interface implementation
-	 * ----------------------------------------------------------------------
-	 */
-
-	/**
-	 *  Subscribe to log events.  The LogListener will get a callback each
-	 *  time a message is logged.  The requester must have Admin permission.
-	 */
-	public void addLogListener(LogListener listener) {
-		Activator tempLog = this.log;
-
-		if (tempLog == null) {
-			return;
-		}
-
-		synchronized (tempLog.logEvent) {
-			if (logEvent == null) {
-				logEvent = new EventListeners();
-				tempLog.logEvent.addListener(this, this);
-			} else {
-				logEvent.removeListener(listener);
-			}
-
-			logEvent.addListener(listener, listener);
-		}
-	}
-
-	/**
-	 *  Unsubscribe to log events. The requester must have Admin permission.
-	 */
-	public void removeLogListener(LogListener listener) {
-		Activator tempLog = this.log;
-
-		if (tempLog == null) {
-			return;
-		}
-
-		if (logEvent != null) {
-			synchronized (tempLog.logEvent) {
-				logEvent.removeListener(listener);
-			}
-		}
-	}
-
-	/**
-	 *  Returns an enumeration of the last log messages.  Each element will
-	 *  be of type LogEntry.  Whether the enumeration is of all the logs since
-	 *  bootup or the recent past is implementation specific.  Also whether
-	 *  informational and debug entries are included in the logging interval
-	 *  is implementation specific.  The requester must have Admin permission.
-	 */
-	public Enumeration getLog() {
-		Activator tempLog = this.log;
-
-		if (tempLog == null) {
-			return (new Vector(0).elements());
-		}
-
-		return (tempLog.logEntries());
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.log/src/org/eclipse/equinox/log/LogReaderServiceFactory.java b/bundles/org.eclipse.equinox.log/src/org/eclipse/equinox/log/LogReaderServiceFactory.java
deleted file mode 100644
index b7fa92a..0000000
--- a/bundles/org.eclipse.equinox.log/src/org/eclipse/equinox/log/LogReaderServiceFactory.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1999, 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.log;
-
-import org.osgi.framework.*;
-
-/**
- * LogReaderServiceFactory class.
- */
-
-public class LogReaderServiceFactory implements ServiceFactory {
-	protected Activator log;
-
-	protected LogReaderServiceFactory(Activator log) {
-		this.log = log;
-	}
-
-	/**
-	 * ServiceFactory.getService method.
-	 */
-	public Object getService(Bundle bundle, ServiceRegistration registration) {
-		return (new LogReaderService(log, bundle));
-	}
-
-	/**
-	 * ServiceFactory.ungetService method.
-	 */
-	public void ungetService(Bundle bundle, ServiceRegistration registration, Object service) {
-		((LogReaderService) service).close();
-	}
-}
diff --git a/bundles/org.eclipse.equinox.log/src/org/eclipse/equinox/log/LogServiceFactory.java b/bundles/org.eclipse.equinox.log/src/org/eclipse/equinox/log/LogServiceFactory.java
deleted file mode 100644
index fa6a4e9..0000000
--- a/bundles/org.eclipse.equinox.log/src/org/eclipse/equinox/log/LogServiceFactory.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1999, 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.log;
-
-import org.osgi.framework.*;
-
-/**
- * LogServiceFactory class.
- */
-
-public class LogServiceFactory implements ServiceFactory {
-	protected Activator log;
-
-	protected LogServiceFactory(Activator log) {
-		this.log = log;
-	}
-
-	/**
-	 * ServiceFactory.getService method.
-	 */
-	public Object getService(Bundle bundle, ServiceRegistration registration) {
-		return (new LogServiceImpl(log, bundle));
-	}
-
-	/**
-	 * ServiceFactory.ungetService method.
-	 */
-	public void ungetService(Bundle bundle, ServiceRegistration registration, Object service) {
-		((LogServiceImpl) service).close();
-	}
-}
diff --git a/bundles/org.eclipse.equinox.log/src/org/eclipse/equinox/log/LogServiceImpl.java b/bundles/org.eclipse.equinox.log/src/org/eclipse/equinox/log/LogServiceImpl.java
deleted file mode 100644
index 69aaed1..0000000
--- a/bundles/org.eclipse.equinox.log/src/org/eclipse/equinox/log/LogServiceImpl.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1999, 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.log;
-
-import org.osgi.framework.Bundle;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.log.LogService;
-
-/**
- * LogServiceImpl class.
- */
-
-public class LogServiceImpl implements LogService {
-	protected Activator log;
-	protected Bundle bundle;
-
-	protected LogServiceImpl(Activator log, Bundle bundle) {
-		this.log = log;
-		this.bundle = bundle;
-	}
-
-	protected void close() {
-		log = null;
-		bundle = null;
-	}
-
-	/*
-	 * ----------------------------------------------------------------------
-	 *      LogService Interface implementation
-	 * ----------------------------------------------------------------------
-	 */
-
-	/**
-	 * Required by LogService Interface.
-	 * Log a bundle message.  The ServiceDescription field and the
-	 * Throwable field of the LogEntry will be set to null.
-	 * @param int level - The severity of the message.  (Should be one of the
-	 * four predefined severities.)
-	 * @param String message - Human readable string describing the condition.
-	 */
-	public void log(int level, String message) {
-		Activator tempLog = this.log;
-
-		if (tempLog == null) {
-			return;
-		}
-
-		tempLog.log(level, message, bundle, null, null);
-	}
-
-	/**
-	 * Required by LogService Interface.
-	 * Log a bundle message.  The ServiceDescription field
-	 * of the LogEntry will be set to null.
-	 * @param int level - The severity of the message.  (Should be one of the
-	 * four predefined severities.)
-	 * @param String message - Human readable string describing the condition.
-	 * @param Throwable exception - The exception that reflects the condition.
-	 */
-	public void log(int level, String message, Throwable exception) {
-		Activator tempLog = this.log;
-
-		if (tempLog == null) {
-			return;
-		}
-
-		tempLog.log(level, message, bundle, null, exception);
-	}
-
-	/**
-	 * Required by LogService Interface.
-	 * Log a message associated with a specific bundle service.  The
-	 * Throwable field of the LogEntry will be set to null.
-	 * @param reference The ServiceReference of the service that this message
-	 * is associated with.
-	 * @param level The severity of the message.  (Should be one of the
-	 * four predefined severities.)
-	 * @param message Human readable string describing the condition.
-	 */
-	public void log(ServiceReference reference, int level, String message) {
-		Activator tempLog = this.log;
-
-		if (tempLog == null) {
-			return;
-		}
-
-		tempLog.log(level, message, bundle, reference, null);
-	}
-
-	/**
-	 * Required by LogService Interface.
-	 * Log a bundle message.
-	 * @param reference The ServiceReference of the service that this message
-	 * is associated with.
-	 * @param level The severity of the message.  (Should be one of the
-	 * four predefined severities.)
-	 * @param message Human readable string describing the condition.
-	 * @param exception The exception that reflects the condition.
-	 */
-	public void log(ServiceReference reference, int level, String message, Throwable exception) {
-		Activator tempLog = this.log;
-
-		if (tempLog == null) {
-			return;
-		}
-
-		tempLog.log(level, message, bundle, reference, exception);
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.log/src/org/eclipse/equinox/log/LoggedException.java b/bundles/org.eclipse.equinox.log/src/org/eclipse/equinox/log/LoggedException.java
deleted file mode 100644
index 22789d5..0000000
--- a/bundles/org.eclipse.equinox.log/src/org/eclipse/equinox/log/LoggedException.java
+++ /dev/null
@@ -1,204 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1999, 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.log;
-
-import java.io.*;
-import java.lang.reflect.*;
-
-/**
- * Encapsulate an <code>Exception</code>
- * or <code>Error</code> in a logging message.
- * <p>
- * The stack trace information of a <code>Throwable</code>
- * is transient and therefore this information is lost
- * if the throwable is serialized or cloned.<br>
- * This class extracts the stack trace information from the throwable
- * and keeps it for later retrieval.
- * <p>
- * The <code>Throwable</code> instance itself and any nested exceptions
- * are not kept in the <code>LoggedException</code> for 2 reasons:<ol>
- * <li>so no reference to that throwable is kept that would prevent
- *  the removal of the memory space that hosts the throwable
- *  with <em>NOFORCE</em>.</li>
- * <li>the class of the throwable can be removed from the
- *  system and the class loader segments can be freed.</li>
- * </ol>
- * <p>
- */
-
-/* This class MUST be public for nested exception printing to work */
-public class LoggedException extends Throwable implements Cloneable {
-
-	private static final long serialVersionUID = -7432693545895678645L;
-
-	/** The fully qualified name of exception or error type. */
-	String exceptionClassName;
-
-	/**
-	 * The detail message.
-	 * Don't use super class field because we need to be able to
-	 * copy it into another memory space.
-	 */
-	String message;
-
-	/**
-	 * The stack trace.
-	 * The super class field is transient.
-	 */
-	String stackTrace;
-
-	/**
-	 * The nested exception if any.
-	 */
-	LoggedException nestedException;
-
-	/**
-	 * Creates a wrapper of the given <code>Throwable</code>,
-	 *
-	 * @param	t		the exception or error
-	 */
-	public LoggedException(Throwable t) {
-		super();
-
-		// copy original exception message
-		if (t.getMessage() != null) {
-			message = new String(t.getMessage().toCharArray());
-		}
-		if (t instanceof LoggedException) {
-			LoggedException lex = (LoggedException) t;
-			exceptionClassName = lex.exceptionClassName;
-			// copy stack trace
-			stackTrace = new String(lex.stackTrace.toCharArray());
-		} else {
-			exceptionClassName = t.getClass().getName();
-			// save stack trace
-			ByteArrayOutputStream baos = new ByteArrayOutputStream();
-			PrintStream s = new PrintStream(baos);
-			t.printStackTrace(s);
-			s.close();
-			stackTrace = baos.toString();
-
-		}
-		// copy original exception class name
-		exceptionClassName = new String(exceptionClassName.toCharArray());
-
-		// search for a nested exception
-
-		//      Field[] fields = t.getClass().getFields();
-		//      for (int i = 0; i < fields.length; i++) {
-		//      	try {
-		//      		Object o = fields[i].get(t);
-		//      		if (o != null && o instanceof Throwable) {
-		//      			nestedException = new LoggedException((Throwable) o);
-		//      			break;
-		//      		}
-		//      	} catch (IllegalAccessException e) {}
-		//      }
-
-		Method[] methods = t.getClass().getMethods();
-
-		int size = methods.length;
-		Class throwable = Throwable.class;
-
-		for (int i = 0; i < size; i++) {
-			Method method = methods[i];
-
-			if (Modifier.isPublic(method.getModifiers()) && method.getName().startsWith("get") && //$NON-NLS-1$
-					throwable.isAssignableFrom(method.getReturnType()) && (method.getParameterTypes().length == 0)) {
-				try {
-					Throwable nested = (Throwable) method.invoke(t, null);
-
-					if ((nested != null) && (nested != t)) {
-						nestedException = new LoggedException(nested);
-						break;
-					}
-				} catch (IllegalAccessException e) {
-					// TODO: Consider wrapping and throwing a RuntimeException
-				} catch (InvocationTargetException e) {
-					// TODO: Consider wrapping and throwing a RuntimeException					
-				}
-			}
-		}
-	}
-
-	/**
-	 * Does nothing.
-	 * <p>
-	 * This is a wrapper of an <code>Exception</code> or <code>Error</code>.
-	 * Hence it does not need it's own stack trace filled in.
-	 */
-	public Throwable fillInStackTrace() {
-		return this;
-	}
-
-	/**
-	 * Returns the class name of the original
-	 * <code>Exception</code> or <code>Error</code>.
-	 */
-	public String getExceptionClassName() {
-		return exceptionClassName;
-	}
-
-	/**
-	 * Returns the human readable message describing the condition
-	 * of the original <code>Exception</code> or <code>Error</code>.
-	 */
-	public String getMessage() {
-		return message;
-	}
-
-	/**
-	 * Returns the nested <code>LoggedException</code>
-	 * or <code>null/code> if there is none.
-	 */
-	public Throwable getNestedException() {
-		return nestedException;
-	}
-
-	/**
-	 * Prints the backtrace of the original <code>Exception</code> or <code>Error</code>.
-	 */
-	public void printStackTrace() {
-		printStackTrace(System.err);
-	}
-
-	/**
-	 * Prints the backtrace of the original <code>Exception</code> or <code>Error</code>.
-	 */
-	public void printStackTrace(PrintStream s) {
-		synchronized (s) {
-			s.println(stackTrace);
-		}
-	}
-
-	/**
-	 * Prints the backtrace of the original <code>Exception</code> or <code>Error</code>.
-	 */
-	public void printStackTrace(PrintWriter w) {
-		synchronized (w) {
-			w.println(stackTrace);
-		}
-	}
-
-	/**
-	 * Returns a string representation of the original
-	 * <code>Exception</code> or <code>Error</code>.
-	 *
-	 * @return	The string representation of the receiver.
-	 */
-	public String toString() {
-		if (message == null) {
-			return exceptionClassName;
-		}
-		int length = exceptionClassName.length() + message.length() + 2;
-		return new StringBuffer(length).append(exceptionClassName).append(": ").append(message).toString(); //$NON-NLS-1$
-	}
-}
diff --git a/bundles/org.eclipse.equinox.metatype/.classpath b/bundles/org.eclipse.equinox.metatype/.classpath
deleted file mode 100644
index 751c8f2..0000000
--- a/bundles/org.eclipse.equinox.metatype/.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"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/bundles/org.eclipse.equinox.metatype/.cvsignore b/bundles/org.eclipse.equinox.metatype/.cvsignore
deleted file mode 100644
index ba077a4..0000000
--- a/bundles/org.eclipse.equinox.metatype/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-bin
diff --git a/bundles/org.eclipse.equinox.metatype/.project b/bundles/org.eclipse.equinox.metatype/.project
deleted file mode 100644
index eeb18ab..0000000
--- a/bundles/org.eclipse.equinox.metatype/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.equinox.metatype</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/bundles/org.eclipse.equinox.metatype/.settings/org.eclipse.core.resources.prefs b/bundles/org.eclipse.equinox.metatype/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index 16532b2..0000000
--- a/bundles/org.eclipse.equinox.metatype/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Tue May 25 15:00:03 EDT 2004
-encoding/<project>=ISO-8859-1
-eclipse.preferences.version=1
diff --git a/bundles/org.eclipse.equinox.metatype/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.equinox.metatype/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 1d39c60..0000000
--- a/bundles/org.eclipse.equinox.metatype/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,49 +0,0 @@
-#Fri Dec 16 09:20:40 CST 2005
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=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=disabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-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.overridingPackageDefaultMethod=warning
-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=ignore
-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=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
diff --git a/bundles/org.eclipse.equinox.metatype/META-INF/MANIFEST.MF b/bundles/org.eclipse.equinox.metatype/META-INF/MANIFEST.MF
deleted file mode 100644
index af095af..0000000
--- a/bundles/org.eclipse.equinox.metatype/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,19 +0,0 @@
-Bundle-ManifestVersion: 2
-Bundle-Name: %bundleName
-Bundle-Version: 1.0.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,
- 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
diff --git a/bundles/org.eclipse.equinox.metatype/about.html b/bundles/org.eclipse.equinox.metatype/about.html
deleted file mode 100644
index 3989f53..0000000
--- a/bundles/org.eclipse.equinox.metatype/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 11, 2006</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 (&quot;EPL&quot;).  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, &quot;Program&quot; 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 (&quot;Redistributor&quot;) 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>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/bundles/org.eclipse.equinox.metatype/build.properties b/bundles/org.eclipse.equinox.metatype/build.properties
deleted file mode 100644
index 8732619..0000000
--- a/bundles/org.eclipse.equinox.metatype/build.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-###############################################################################
-# Copyright (c) 2005 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
-###############################################################################
-bin.includes = META-INF/,\
-               plugin*.properties,\
-               about.html,\
-               .
-src.includes = about.html
-source.. = src/
-output.. = bin/
diff --git a/bundles/org.eclipse.equinox.metatype/plugin.properties b/bundles/org.eclipse.equinox.metatype/plugin.properties
deleted file mode 100644
index 6c80694..0000000
--- a/bundles/org.eclipse.equinox.metatype/plugin.properties
+++ /dev/null
@@ -1,13 +0,0 @@
-###############################################################################
-# Copyright (c) 2005 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
-###############################################################################
-bundleVendor = Eclipse.org
-bundleName = Meta Type
-bundleCopyright = Copyright (c) IBM Corp. 2005
diff --git a/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/Activator.java b/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/Activator.java
deleted file mode 100644
index 2dab4e0..0000000
--- a/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/Activator.java
+++ /dev/null
@@ -1,157 +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.security.AccessController;
-import java.security.PrivilegedAction;
-import java.util.Hashtable;
-import javax.xml.parsers.SAXParserFactory;
-import org.osgi.framework.*;
-import org.osgi.service.packageadmin.PackageAdmin;
-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();
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
-	 */
-	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$
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
-	 */
-	public void stop(BundleContext context) throws Exception {
-
-		Logging.debug("====== Meta Type Service stoping ! ====="); //$NON-NLS-1$
-		_parserTracker.close();
-		_parserTracker = null;
-		FragmentUtils.packageAdmin = null;
-		context = null;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.osgi.util.tracker.ServiceTrackerCustomizer#addingService(org.osgi.framework.ServiceReference)
-	 */
-	public Object addingService(ServiceReference ref) {
-
-		SAXParserFactory parserFactory = (SAXParserFactory) _context.getService(ref);
-		synchronized (lock) {
-			if (_mts == null) {
-				// Save this parserFactory as the currently used parserFactory
-				_currentParserFactory = parserFactory;
-				registerMetaTypeService();
-			}
-		}
-		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;
-
-				if (_mtsReg != null) {
-					_mtsReg.unregister();
-					_mtsReg = null;
-					_context.removeBundleListener(_mts);
-					_mts = null;
-				}
-				// 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();
-				}
-			}
-		}
-		_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;
-			}
-		});
-	}
-}
diff --git a/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/AttributeDefinitionImpl.java b/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/AttributeDefinitionImpl.java
deleted file mode 100644
index 5174fdd..0000000
--- a/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/AttributeDefinitionImpl.java
+++ /dev/null
@@ -1,486 +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.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.metatype.AttributeDefinition;
-
-/**
- * Implementation of AttributeDefintion
- */
-public class AttributeDefinitionImpl extends LocalizationElement implements AttributeDefinition, Cloneable {
-
-	String _name;
-	String _id;
-	String _description;
-	int _cardinality = 0;
-	int _dataType;
-	Object _minValue = null;
-	Object _maxValue = null;
-	boolean _isRequired = true;
-
-	String[] _defaults = null;
-	Vector _dfts_vector = new Vector(7);
-	Vector _values = new Vector(7);
-	Vector _labels = new Vector(7);
-
-	/**
-	 * Constructor of class AttributeDefinitionImpl.
-	 */
-	public AttributeDefinitionImpl(String id, String name, String description, int type, int cardinality, Object min, Object max, boolean isRequired, String localization) {
-
-		this._id = id;
-		this._name = name;
-		this._description = description;
-		this._dataType = type;
-		this._cardinality = cardinality;
-		this._minValue = min;
-		this._maxValue = max;
-		this._isRequired = isRequired;
-		this._localization = localization;
-	}
-
-	/*
-	 * 
-	 */
-	public synchronized Object clone() {
-
-		AttributeDefinitionImpl ad = new AttributeDefinitionImpl(_id, _name, _description, _dataType, _cardinality, _minValue, _maxValue, _isRequired, _localization);
-
-		if (_defaults != null) {
-			ad.setDefaultValue((String[]) _defaults.clone(), false);
-		}
-		if ((_labels != null) && (_values != null)) {
-			ad.setOption((Vector) _labels.clone(), (Vector) _values.clone(), false);
-		}
-
-		return ad;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.osgi.service.metatype.AttributeDefinition#getName()
-	 */
-	public String getName() {
-		return getLocalized(_name);
-	}
-
-	/**
-	 * Method to set the name of AttributeDefinition.
-	 */
-	void setName(String name) {
-		this._name = name;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.osgi.service.metatype.AttributeDefinition#getID()
-	 */
-	public String getID() {
-		return _id;
-	}
-
-	/**
-	 * Method to set the ID of AttributeDefinition.
-	 */
-	void setID(String id) {
-		this._id = id;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.osgi.service.metatype.AttributeDefinition#getDescription()
-	 */
-	public String getDescription() {
-		return getLocalized(_description);
-	}
-
-	/**
-	 * Method to set the description of AttributeDefinition.
-	 */
-	void setDescription(String description) {
-		this._description = description;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.osgi.service.metatype.AttributeDefinition#getCardinality()
-	 */
-	public int getCardinality() {
-		return _cardinality;
-	}
-
-	/**
-	 * Method to set the cardinality of AttributeDefinition.
-	 */
-	void setCardinality(int cardinality) {
-		this._cardinality = cardinality;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.osgi.service.metatype.AttributeDefinition#getType()
-	 */
-	public int getType() {
-		return _dataType;
-	}
-
-	/**
-	 * Method to set the data type of AttributeDefinition.
-	 */
-	void setType(int type) {
-		this._dataType = type;
-	}
-
-	/**
-	 * Method to get the required flag of AttributeDefinition.
-	 */
-	boolean isRequired() {
-		return _isRequired;
-	}
-
-	/**
-	 * Method to set the required flag of AttributeDefinition.
-	 */
-	void setRequired(boolean isRequired) {
-		this._isRequired = isRequired;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.osgi.service.metatype.AttributeDefinition#getOptionLabels()
-	 */
-	public String[] getOptionLabels() {
-
-		if ((_labels == null) || (_labels.size() == 0)) {
-			return null;
-		}
-
-		String[] returnedLabels = new String[_labels.size()];
-		Enumeration labelKeys = _labels.elements();
-		int i = 0;
-		while (labelKeys.hasMoreElements()) {
-			String labelKey = (String) labelKeys.nextElement();
-			returnedLabels[i] = getLocalized(labelKey);
-			i++;
-		}
-		return returnedLabels;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.osgi.service.metatype.AttributeDefinition#getOptionValues()
-	 */
-	public String[] getOptionValues() {
-
-		if ((_values == null) || (_values.size() == 0)) {
-			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;
-	}
-
-	/**
-	 * Method to set the Option values of AttributeDefinition.
-	 */
-	void setOption(Vector labels, Vector values, boolean needValidation) {
-
-		if ((labels == null) || (values == null)) {
-			Logging.log(Logging.ERROR, this, "setOption(Vector, Vector, boolean)", //$NON-NLS-1$
-					MetaTypeMsg.NULL_OPTIONS);
-			return;
-		}
-
-		if (labels.size() != values.size()) {
-			Logging.log(Logging.ERROR, this, "setOption(Vector, Vector, boolean)", //$NON-NLS-1$
-					MetaTypeMsg.INCONSISTENT_OPTIONS);
-			return;
-		}
-
-		_labels = labels;
-		_values = values;
-
-		if (needValidation) {
-			for (int index = 0; index < _labels.size(); index++) {
-				String reason = validate((String) _values.get(index));
-				if ((reason != null) && reason.length() > 0) {
-					Logging.log(Logging.WARN, NLS.bind(MetaTypeMsg.INVALID_OPTIONS, _values.get(index), reason));
-					_labels.remove(index);
-					_values.remove(index);
-					index--; // Because this one has been removed.
-				}
-			}
-		}
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.osgi.service.metatype.AttributeDefinition#getDefaultValue()
-	 */
-	public String[] getDefaultValue() {
-		return _defaults;
-	}
-
-	/**
-	 * Method to set the default value of AttributeDefinition.
-	 * 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);
-	}
-
-	/**
-	 * Method to set the default value of AttributeDefinition.
-	 * The given parameter is a String array of multi values.
-	 */
-	void setDefaultValue(String[] defaults, boolean needValidation) {
-
-		_defaults = defaults;
-		// Do we also need to make sure if defaults are validated?
-	}
-
-	/**
-	 * Method to set the validation value - min of AttributeDefinition.
-	 */
-	void setMinValue(Object minValue) {
-		this._minValue = minValue;
-	}
-
-	/**
-	 * Method to set the validation value - max of AttributeDefinition.
-	 */
-	void setMaxValue(Object maxValue) {
-		this._maxValue = maxValue;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @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$
-	}
-}
diff --git a/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/DataParser.java b/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/DataParser.java
deleted file mode 100644
index 46d66a3..0000000
--- a/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/DataParser.java
+++ /dev/null
@@ -1,921 +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.*;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-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.metatype.AttributeDefinition;
-import org.xml.sax.*;
-import org.xml.sax.helpers.DefaultHandler;
-
-/**
- * Meta XML Data Parser
- */
-public class DataParser {
-	private static final String METADATA = "MetaData"; //$NON-NLS-1$
-	private static final String LOCALIZATION = "localization"; //$NON-NLS-1$
-	private static final String OCD = "OCD"; //$NON-NLS-1$
-	private static final String ICON = "Icon"; //$NON-NLS-1$
-	private static final String AD = "AD"; //$NON-NLS-1$
-	private static final String CARDINALITY = "cardinality"; //$NON-NLS-1$
-	private static final String OPTION = "Option"; //$NON-NLS-1$
-	private static final String LABEL = "label"; //$NON-NLS-1$
-	private static final String VALUE = "value"; //$NON-NLS-1$
-	private static final String MIN = "min"; //$NON-NLS-1$
-	private static final String MAX = "max"; //$NON-NLS-1$
-	private static final String TYPE = "type"; //$NON-NLS-1$
-	private static final String SIZE = "size"; //$NON-NLS-1$
-	private static final String ID = "id"; //$NON-NLS-1$
-	private static final String NAME = "name"; //$NON-NLS-1$
-	private static final String DESCRIPTION = "description"; //$NON-NLS-1$
-	private static final String RESOURCE = "resource"; //$NON-NLS-1$
-	private static final String PID = "pid"; //$NON-NLS-1$
-	private static final String DEFAULT = "default"; //$NON-NLS-1$
-	private static final String ADREF = "adref"; //$NON-NLS-1$
-	private static final String CONTENT = "content"; //$NON-NLS-1$
-	private static final String FACTORY = "factoryPid"; //$NON-NLS-1$
-	private static final String BUNDLE = "bundle"; //$NON-NLS-1$
-	private static final String OPTIONAL = "optional"; //$NON-NLS-1$
-	private static final String OBJECT = "Object"; //$NON-NLS-1$
-	private static final String OCDREF = "ocdref"; //$NON-NLS-1$
-	private static final String ATTRIBUTE = "Attribute"; //$NON-NLS-1$
-	private static final String DESIGNATE = "Designate"; //$NON-NLS-1$
-	private static final String MERGE = "merge"; //$NON-NLS-1$
-	private static final String REQUIRED = "required"; //$NON-NLS-1$
-
-	private static final String INTEGER = "Integer"; //$NON-NLS-1$
-	private static final String STRING = "String"; //$NON-NLS-1$
-	private static final String FLOAT = "Float"; //$NON-NLS-1$
-	private static final String DOUBLE = "Double"; //$NON-NLS-1$
-	private static final String BYTE = "Byte"; //$NON-NLS-1$
-	private static final String LONG = "Long"; //$NON-NLS-1$
-	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$
-
-	protected Bundle _dp_bundle;
-	protected URL _dp_url;
-	protected SAXParserFactory _dp_parserFactory;
-	protected XMLReader _dp_xmlReader;
-
-	// DesignateHanders in DataParser class
-	Vector _dp_designateHandlers = new Vector(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);
-	// Localization in DataParser class
-	String _dp_localization;
-
-	/*
-	 * Constructor of class DataParser.
-	 */
-	public DataParser(Bundle bundle, URL url, SAXParserFactory parserFactory) {
-
-		this._dp_bundle = bundle;
-		this._dp_url = url;
-		this._dp_parserFactory = parserFactory;
-		parserFactory.setValidating(false);
-	}
-
-	/*
-	 * Main method to parse specific MetaData file.
-	 */
-	public Hashtable doParse() {
-
-		try {
-			SAXParser saxParser = _dp_parserFactory.newSAXParser();
-			_dp_xmlReader = saxParser.getXMLReader();
-			_dp_xmlReader.setContentHandler(new RootHandler());
-			_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$					
-			_dp_xmlReader.parse(isource);
-		} catch (ParserConfigurationException pce) {
-			pce.printStackTrace();
-			return null;
-		} catch (SAXException saxe) {
-			saxe.printStackTrace();
-			return null;
-		} catch (IOException ioe) {
-			ioe.printStackTrace();
-			return null;
-		}
-		return _dp_pid_to_OCDs_;
-	}
-
-	/*
-	 * Convert String for expected data type.
-	 */
-	static Object convert(String value, int type) {
-
-		if (value == null) {
-			return null;
-		}
-
-		switch (type) {
-			case AttributeDefinition.STRING :
-				// Both the min and max of STRING are Integers.
-				return new Integer(value);
-			case AttributeDefinition.LONG :
-				return new Long(value);
-			case AttributeDefinition.INTEGER :
-				return new Integer(value);
-			case AttributeDefinition.SHORT :
-				return new Short(value);
-			case AttributeDefinition.CHARACTER :
-				return new Character(value.charAt(0));
-			case AttributeDefinition.BYTE :
-				return new Byte(value);
-			case AttributeDefinition.DOUBLE :
-				return new Double(value);
-			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;
-				}
-			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;
-				}
-			case AttributeDefinition.BOOLEAN :
-				return new Boolean(value);
-			default :
-				// Unknown data type
-				return null;
-		}
-	}
-
-	/**
-	 * Abstract of all Handlers.
-	 */
-	private class AbstractHandler extends DefaultHandler {
-
-		protected ContentHandler _doc_handler;
-		protected boolean _isParsedDataValid = true;
-
-		public AbstractHandler(ContentHandler parentHandler) {
-
-			this._doc_handler = parentHandler;
-			_dp_xmlReader.setContentHandler(this);
-		}
-
-		public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
-
-			throw new SAXException(NLS.bind(MetaTypeMsg.UNEXPECTED_ELEMENT, qName));
-		}
-
-		public void characters(char[] buf, int start, int end) throws SAXException {
-
-			String s = new String(buf, start, end).trim();
-			if (s.length() > 0) {
-				throw new SAXException(NLS.bind(MetaTypeMsg.UNEXPECTED_TEXT, s));
-			}
-		}
-
-		/**
-		 * Called when this element and all elements nested into it have been
-		 * handled.
-		 */
-		protected void finished() throws SAXException {
-			// do nothing by default
-		}
-
-		public void endElement(String namespaceURI, String localName, String qName) throws SAXException {
-
-			finished();
-			// Let parent resume handling SAX events
-			_dp_xmlReader.setContentHandler(_doc_handler);
-		}
-	}
-
-	/**
-	 * Handler for the root element.
-	 */
-	private class RootHandler extends DefaultHandler {
-
-		public RootHandler() {
-			super();
-		}
-
-		public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
-
-			Logging.log(Logging.TRACE, "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));
-			}
-		}
-
-		public void setDocumentLocator(Locator locator) {
-			// do nothing
-		}
-	}
-
-	/**
-	 * Handler for the MetaData element.
-	 */
-	private class MetaDataHandler extends AbstractHandler {
-
-		public MetaDataHandler(ContentHandler handler) {
-			super(handler);
-		}
-
-		public void init(String name, Attributes attributes) throws SAXException {
-
-			Logging.log(Logging.TRACE, "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.
-			}
-			// The global variable "_dp_localization" will be used within
-			// OcdHandler and AttributeDefinitionHandler later.
-		}
-
-		public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
-
-			Logging.log(Logging.TRACE, "Here is MetaDataHandler:startElement():" //$NON-NLS-1$
-					+ qName);
-			String name = getName(localName, qName);
-			if (name.equalsIgnoreCase(DESIGNATE)) {
-				DesignateHandler designateHandler = new DesignateHandler(this);
-				designateHandler.init(name, atts);
-				if (designateHandler._isParsedDataValid) {
-					_dp_designateHandlers.addElement(designateHandler);
-				}
-			} else if (name.equalsIgnoreCase(OCD)) {
-				OcdHandler ocdHandler = new OcdHandler(this);
-				ocdHandler.init(name, atts, _dp_OCDs);
-			} else {
-				Logging.log(Logging.WARN, NLS.bind(MetaTypeMsg.UNEXPECTED_ELEMENT, name));
-			}
-		}
-
-		protected void finished() throws SAXException {
-
-			Logging.log(Logging.TRACE, "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));
-				return;
-			}
-			Enumeration designateHandlerKeys = _dp_designateHandlers.elements();
-			while (designateHandlerKeys.hasMoreElements()) {
-				DesignateHandler designateHandler = (DesignateHandler) designateHandlerKeys.nextElement();
-
-				ObjectClassDefinitionImpl ocd = (ObjectClassDefinitionImpl) _dp_OCDs.get(designateHandler._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);
-					}
-				} else {
-					Logging.log(Logging.ERROR, this, "finished()", //$NON-NLS-1$
-							NLS.bind(MetaTypeMsg.OCD_ID_NOT_FOUND, designateHandler._ocdref));
-				}
-			}
-		}
-	}
-
-	/**
-	 * Handler for the ObjectClassDefinition element.
-	 */
-	private class OcdHandler extends AbstractHandler {
-
-		Hashtable _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);
-
-		public OcdHandler(ContentHandler handler) {
-			super(handler);
-		}
-
-		public void init(String name, Attributes atts, Hashtable ocds_hashtable) throws SAXException {
-
-			Logging.log(Logging.TRACE, "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));
-				return;
-			}
-
-			String ocd_description_val = atts.getValue(DESCRIPTION);
-			if (ocd_description_val == null) {
-				// Not a problem, because DESCRIPTION is an optional attribute.
-			}
-
-			_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));
-				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 {
-
-			Logging.log(Logging.TRACE, "Here is OcdHandler:startElement():" //$NON-NLS-1$
-					+ qName);
-			if (!_isParsedDataValid)
-				return;
-
-			String name = getName(localName, qName);
-			if (name.equalsIgnoreCase(AD)) {
-				AttributeDefinitionHandler attributeDefHandler = new AttributeDefinitionHandler(this);
-				attributeDefHandler.init(name, atts, _ad_vector);
-			} else if (name.equalsIgnoreCase(ICON)) {
-				IconHandler iconHandler = new IconHandler(this);
-				iconHandler.init(name, atts);
-				if (iconHandler._isParsedDataValid) {
-					// Because XML schema allows at most one icon for
-					// one OCD, if more than one icons are read from 
-					// MetaData, then only the final icon will be kept.
-					_ocd.setIcon(iconHandler._icon);
-				}
-			} else {
-				Logging.log(Logging.WARN, NLS.bind(MetaTypeMsg.UNEXPECTED_ELEMENT, name));
-			}
-		}
-
-		protected void finished() throws SAXException {
-
-			Logging.log(Logging.TRACE, "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));
-				return;
-			}
-			// OCD gets all parsed ADs.
-			Enumeration adKey = _ad_vector.elements();
-			while (adKey.hasMoreElements()) {
-				AttributeDefinitionImpl ad = (AttributeDefinitionImpl) adKey.nextElement();
-				_ocd.addAttributeDefinition(ad, ad._isRequired);
-			}
-
-			_parent_OCDs_hashtable.put(_refID, _ocd);
-		}
-	}
-
-	/**
-	 * Handler for the Icon element.
-	 */
-	private class IconHandler extends AbstractHandler {
-
-		Icon _icon;
-
-		public IconHandler(ContentHandler handler) {
-			super(handler);
-		}
-
-		public void init(String name, Attributes atts) throws SAXException {
-
-			Logging.log(Logging.TRACE, "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));
-				return;
-			}
-
-			String icon_size_val = atts.getValue(SIZE);
-			if (icon_size_val == null) {
-				// Not a problem, because SIZE is an optional attribute.
-				icon_size_val = "0"; //$NON-NLS-1$
-			} else if (icon_size_val.equalsIgnoreCase("")) { //$NON-NLS-1$
-				icon_size_val = "0"; //$NON-NLS-1$
-			}
-
-			_icon = new Icon(icon_resource_val, Integer.parseInt(icon_size_val), _dp_bundle);
-		}
-	}
-
-	/**
-	 * Handler for the Attribute element.
-	 */
-	private class AttributeDefinitionHandler extends AbstractHandler {
-
-		AttributeDefinitionImpl _ad;
-		int _dataType;
-
-		Vector _parent_ADs_vector;
-		Vector _optionLabel_vector = new Vector(7);
-		Vector _optionValue_vector = new Vector(7);
-
-		public AttributeDefinitionHandler(ContentHandler handler) {
-			super(handler);
-		}
-
-		public void init(String name, Attributes atts, Vector ad_vector) throws SAXException {
-
-			Logging.log(Logging.TRACE, "Here is AttributeDefinitionHandler():init()"); //$NON-NLS-1$
-			_parent_ADs_vector = ad_vector;
-
-			String ad_name_val = atts.getValue(NAME);
-			if (ad_name_val == null) {
-				// Not a problem, because NAME is an optional attribute.
-			}
-
-			String ad_description_val = atts.getValue(DESCRIPTION);
-			if (ad_description_val == null) {
-				// Not a problem, because DESCRIPTION is an optional attribute.
-			}
-
-			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));
-				return;
-			}
-
-			String ad_type_val = atts.getValue(TYPE);
-			if (ad_type_val.equalsIgnoreCase(STRING)) {
-				_dataType = AttributeDefinition.STRING;
-			} else if (ad_type_val.equalsIgnoreCase(LONG)) {
-				_dataType = AttributeDefinition.LONG;
-			} else if (ad_type_val.equalsIgnoreCase(DOUBLE)) {
-				_dataType = AttributeDefinition.DOUBLE;
-			} else if (ad_type_val.equalsIgnoreCase(FLOAT)) {
-				_dataType = AttributeDefinition.FLOAT;
-			} else if (ad_type_val.equalsIgnoreCase(INTEGER)) {
-				_dataType = AttributeDefinition.INTEGER;
-			} else if (ad_type_val.equalsIgnoreCase(BYTE)) {
-				_dataType = AttributeDefinition.BYTE;
-			} else if (ad_type_val.equalsIgnoreCase(CHAR)) {
-				_dataType = AttributeDefinition.CHARACTER;
-			} else if (ad_type_val.equalsIgnoreCase(BOOLEAN)) {
-				_dataType = AttributeDefinition.BOOLEAN;
-			} else if (ad_type_val.equalsIgnoreCase(SHORT)) {
-				_dataType = AttributeDefinition.SHORT;
-			} else {
-				_isParsedDataValid = false;
-				Logging.log(Logging.ERROR, this, "init(String, Attributes, Vector)", //$NON-NLS-1$
-						NLS.bind(MetaTypeMsg.MISSING_ATTRIBUTE, TYPE, name));
-				return;
-
-			}
-
-			String ad_cardinality_str = atts.getValue(CARDINALITY);
-			int ad_cardinality_val = 0;
-			if (ad_cardinality_str == null) {
-				// Not a problem, because CARDINALITY is an optional attribute.
-				// And the default value is 0.
-			} else {
-				ad_cardinality_val = Integer.parseInt(ad_cardinality_str);
-			}
-
-			String ad_min_val = atts.getValue(MIN);
-			if (ad_min_val == null) {
-				// Not a problem, because MIN is an optional attribute.
-			}
-
-			String ad_max_val = atts.getValue(MAX);
-			if (ad_max_val == null) {
-				// Not a problem, because MAX is an optional attribute.
-			}
-
-			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);
-			if (ad_required_val == null) {
-				// Not a problem, because REQUIRED is an optional attribute.
-				// And the default value is 'true'.
-				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);
-
-			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);
-			}
-		}
-
-		public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
-
-			Logging.log(Logging.TRACE, "Here is AttributeDefinitionHandler:startElement():" //$NON-NLS-1$
-					+ qName);
-			if (!_isParsedDataValid)
-				return;
-
-			String name = getName(localName, qName);
-			if (name.equalsIgnoreCase(OPTION)) {
-				OptionHandler optionHandler = new OptionHandler(this);
-				optionHandler.init(name, atts);
-				if (optionHandler._isParsedDataValid) {
-					// Only add valid Option
-					_optionLabel_vector.addElement(optionHandler._label_val);
-					_optionValue_vector.addElement(optionHandler._value_val);
-				}
-			} else {
-				Logging.log(Logging.WARN, NLS.bind(MetaTypeMsg.UNEXPECTED_ELEMENT, name));
-			}
-		}
-
-		protected void finished() throws SAXException {
-
-			Logging.log(Logging.TRACE, "Here is AttributeDefinitionHandler():finished()"); //$NON-NLS-1$
-			if (!_isParsedDataValid)
-				return;
-
-			_ad.setOption(_optionLabel_vector, _optionValue_vector, true);
-			_parent_ADs_vector.addElement(_ad);
-		}
-	}
-
-	/**
-	 * Handler for the Option element.
-	 */
-	private class OptionHandler extends AbstractHandler {
-
-		String _label_val;
-		String _value_val;
-
-		public OptionHandler(ContentHandler handler) {
-			super(handler);
-		}
-
-		public void init(String name, Attributes atts) throws SAXException {
-
-			Logging.log(Logging.TRACE, "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));
-				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));
-				return;
-			}
-		}
-	}
-
-	//	/**
-	//	 * Handler for the Simple Value element.
-	//	 */
-	//	private class SimpleValueHandler extends AbstractHandler {
-	//
-	//		StringBuffer	_buffer	= new StringBuffer();
-	//		Vector			_parent_value_vector;
-	//		String			_elementName;
-	//
-	//		public SimpleValueHandler(ContentHandler handler) {
-	//			super(handler);
-	//		}
-	//
-	//		public void init(String name, Attributes atts, Vector value_vector)
-	//				throws SAXException {
-	//
-	//			Logging.log(Logging.TRACE,
-	//					"Here is SimpleValueHandler():init()"); //$NON-NLS-1$
-	//			_elementName = name;
-	//			_parent_value_vector = value_vector;
-	//		}
-	//
-	//		protected void finished() throws SAXException {
-	//
-	//			Logging.log(Logging.TRACE,
-	//					"Here is SimpleValueHandler():finished()"); //$NON-NLS-1$
-	//			if (_parent_value_vector != null) {
-	//				_parent_value_vector.addElement(_buffer.toString());
-	//			}
-	//		}
-	//
-	//		public void characters(char buf[], int offset, int len)
-	//				throws SAXException {
-	//
-	//			Logging.log(Logging.TRACE,
-	//					"Here is SimpleValueHandler(" //$NON-NLS-1$
-	//					+ _elementName
-	//					+ "):characters():[" //$NON-NLS-1$
-	//					+ new String(buf, offset, len)
-	//					+ "]"); //$NON-NLS-1$
-	//			_buffer.append(new String(buf, offset, len));
-	//		}
-	//	}
-
-	/**
-	 * Handler for the Designate element.
-	 */
-	private class DesignateHandler extends AbstractHandler {
-
-		String _pid_val = null;
-		String _factory_val = null;
-		String _bundle_val = null; // Only used by RFC94
-		boolean _optional_val = false; // Only used by RFC94
-		boolean _merge_val = false; // Only used by RFC94
-
-		// Referenced OCD ID
-		String _ocdref;
-
-		public DesignateHandler(ContentHandler handler) {
-			super(handler);
-		}
-
-		public void init(String name, Attributes atts) throws SAXException {
-
-			Logging.log(Logging.TRACE, "Here is DesignateHandler():init()"); //$NON-NLS-1$
-			_pid_val = atts.getValue(PID);
-			if (_pid_val == null) {
-				_isParsedDataValid = false;
-				Logging.log(Logging.ERROR, this, "init(String, Attributes)", //$NON-NLS-1$
-						NLS.bind(MetaTypeMsg.MISSING_ATTRIBUTE, PID, name));
-				return;
-			}
-			_factory_val = atts.getValue(FACTORY);
-
-			_bundle_val = atts.getValue(BUNDLE);
-			if (_bundle_val == null) {
-				// Not a problem because BUNDLE is an optional attribute.
-			}
-
-			String optional_str = atts.getValue(OPTIONAL);
-			if (optional_str == null) {
-				// Not a problem, because OPTIONAL is an optional attribute.
-				// The default value is "false".
-				_optional_val = false;
-			} else {
-				_optional_val = Boolean.valueOf(optional_str).booleanValue();
-			}
-
-			String merge_str = atts.getValue(MERGE);
-			if (merge_str == null) {
-				// Not a problem, because MERGE is an optional attribute.
-				// The default value is "false".
-				_merge_val = false;
-			} else {
-				_merge_val = Boolean.valueOf(merge_str).booleanValue();
-			}
-		}
-
-		public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
-
-			Logging.log(Logging.TRACE, "Here is DesignateHandler:startElement():" //$NON-NLS-1$
-					+ qName);
-			if (!_isParsedDataValid)
-				return;
-
-			String name = getName(localName, qName);
-			if (name.equalsIgnoreCase(OBJECT)) {
-				ObjectHandler objectHandler = new ObjectHandler(this);
-				objectHandler.init(name, atts);
-				if (objectHandler._isParsedDataValid) {
-					_ocdref = objectHandler._ocdref;
-				}
-			} else {
-				Logging.log(Logging.WARN, NLS.bind(MetaTypeMsg.UNEXPECTED_ELEMENT, name));
-			}
-		}
-
-		protected void finished() throws SAXException {
-
-			Logging.log(Logging.TRACE, "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));
-				return;
-
-			}
-		}
-	}
-
-	/**
-	 * Handler for the Object element.
-	 */
-	private class ObjectHandler extends AbstractHandler {
-
-		String _ocdref;
-
-		public ObjectHandler(ContentHandler handler) {
-			super(handler);
-		}
-
-		public void init(String name, Attributes atts) throws SAXException {
-
-			Logging.log(Logging.TRACE, "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));
-				return;
-			}
-		}
-
-		public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
-
-			Logging.log(Logging.TRACE, "Here is ObjectHandler:startElement():" //$NON-NLS-1$
-					+ qName);
-			if (!_isParsedDataValid)
-				return;
-
-			String name = getName(localName, qName);
-			if (name.equalsIgnoreCase(ATTRIBUTE)) {
-				AttributeHandler attributeHandler = new AttributeHandler(this);
-				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));
-			}
-		}
-	}
-
-	/**
-	 * Handler for the Attribute element.
-	 * 
-	 * This Handler is only used by RFC94.
-	 */
-	private class AttributeHandler extends AbstractHandler {
-
-		String _adref_val;
-		String _content_val;
-
-		public AttributeHandler(ContentHandler handler) {
-			super(handler);
-		}
-
-		public void init(String name, Attributes atts) throws SAXException {
-
-			Logging.log(Logging.TRACE, "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));
-				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));
-				return;
-			}
-		}
-	}
-
-	/**
-	 * Error Handler to report errors and warnings
-	 */
-	private static class MyErrorHandler implements ErrorHandler {
-
-		/** Error handler output goes here */
-		private PrintStream _out;
-
-		MyErrorHandler(PrintStream out) {
-			this._out = out;
-		}
-
-		/**
-		 * Returns a string describing parse exception details
-		 */
-		private String getParseExceptionInfo(SAXParseException spe) {
-			String systemId = spe.getSystemId();
-			if (systemId == null) {
-				systemId = "null"; //$NON-NLS-1$
-			}
-			String info = "URI=" + systemId + //$NON-NLS-1$
-					" Line=" + spe.getLineNumber() + //$NON-NLS-1$
-					": " + spe.getMessage(); //$NON-NLS-1$
-
-			return info;
-		}
-
-		// The following methods are standard SAX ErrorHandler methods.
-		// See SAX documentation for more info.
-
-		public void warning(SAXParseException spe) throws SAXException {
-			_out.println("Warning: " + getParseExceptionInfo(spe)); //$NON-NLS-1$
-		}
-
-		public void error(SAXParseException spe) throws SAXException {
-			String message = "Error: " + getParseExceptionInfo(spe); //$NON-NLS-1$
-			throw new SAXException(message);
-		}
-
-		public void fatalError(SAXParseException spe) throws SAXException {
-			String message = "Fatal Error: " + getParseExceptionInfo(spe); //$NON-NLS-1$
-			throw new SAXException(message);
-		}
-	}
-
-	public static String getName(String localName, String qName) {
-		if (localName != null && localName.length() > 0) {
-			return localName;
-		}
-
-		int nameSpaceIndex = qName.indexOf(":"); //$NON-NLS-1$
-		return nameSpaceIndex == -1 ? qName : qName.substring(nameSpaceIndex + 1);
-	}
-}
diff --git a/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/ExternalMessages.properties b/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/ExternalMessages.properties
deleted file mode 100644
index 9bcf925..0000000
--- a/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/ExternalMessages.properties
+++ /dev/null
@@ -1,33 +0,0 @@
-###############################################################################
-# Copyright (c) 2005 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
-###############################################################################
-#External Messages for EN locale
-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}.
-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.
-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}.
-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
diff --git a/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/FragmentUtils.java b/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/FragmentUtils.java
deleted file mode 100644
index 10c464e..0000000
--- a/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/FragmentUtils.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.metatype;
-
-import java.net.URL;
-import java.util.*;
-import org.osgi.framework.Bundle;
-import org.osgi.service.packageadmin.PackageAdmin;
-
-/*
- * 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);
-		}
-	}
-
-	/*
-	 * 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);
-		}
-		return result.size() == 0 ? null : (URL[]) result.toArray(new URL[result.size()]);
-	}
-}
diff --git a/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/Icon.java b/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/Icon.java
deleted file mode 100644
index 8817f8c..0000000
--- a/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/Icon.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.metatype;
-
-import org.osgi.framework.Bundle;
-
-/**
- * Represents an Icon with a name and a size
- */
-class Icon implements Cloneable {
-
-	private String _fileName;
-	private int _size;
-	private Bundle _bundle;
-
-	/**
-	 * Constructor of class Icon.
-	 */
-	public Icon(String fileName, int size, Bundle bundle) {
-
-		this._fileName = fileName;
-		this._size = size;
-		this._bundle = bundle;
-	}
-
-	/**
-	 * Constructor of class Icon.
-	 */
-	public Icon(String fileName, Bundle bundle) {
-
-		// Integer.MIN_VALUE signifies size was not specified
-		this(fileName, Integer.MIN_VALUE, bundle);
-	}
-
-	/*
-	 * 
-	 */
-	public synchronized Object clone() {
-		return new Icon(this._fileName, this._size, this._bundle);
-	}
-
-	/**
-	 * Method to get the icon's file name.
-	 */
-	String getIconName() {
-		return _fileName;
-	}
-
-	/**
-	 * returns the size specified when the icon was created
-	 * 
-	 * @return size or Integer.MIN_VALUE if no size was specified
-	 */
-	int getIconSize() {
-		return _size;
-	}
-
-	/**
-	 * Method to get the bundle having this Icon.
-	 */
-	Bundle getIconBundle() {
-		return _bundle;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/LocalizationElement.java b/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/LocalizationElement.java
deleted file mode 100644
index 6b3bda4..0000000
--- a/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/LocalizationElement.java
+++ /dev/null
@@ -1,55 +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.util.MissingResourceException;
-import java.util.ResourceBundle;
-
-public class LocalizationElement {
-
-	public static final char KEY_SIGN = '%';
-	String _localization = null;
-	ResourceBundle _rb;
-
-	/**
-	 * Internal method
-	 */
-	void setResourceBundle(ResourceBundle rb) {
-		this._rb = rb;
-	}
-
-	/**
-	 * Method to get the localized text of inputed String.
-	 */
-	String getLocalized(String key) {
-
-		if (key == null) {
-			return null;
-		}
-
-		if ((key.charAt(0) == KEY_SIGN) && (key.length() > 1)) {
-			if (_rb != null) {
-				try {
-					String transfered = _rb.getString(key.substring(1));
-					if (transfered != null) {
-						return transfered;
-					}
-				} catch (MissingResourceException mre) {
-					// Nothing found for this key.
-				}
-			}
-			// If no localization file available or no localized value found
-			// for the key, then return the raw data without the key-sign.
-			return key.substring(1);
-		}
-		return key;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/Logging.java b/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/Logging.java
deleted file mode 100644
index cf26501..0000000
--- a/bundles/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/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/MetaTypeInformationImpl.java b/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/MetaTypeInformationImpl.java
deleted file mode 100644
index 546026b..0000000
--- a/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/MetaTypeInformationImpl.java
+++ /dev/null
@@ -1,87 +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.util.Enumeration;
-import java.util.Vector;
-import javax.xml.parsers.SAXParserFactory;
-import org.osgi.framework.Bundle;
-import org.osgi.service.metatype.MetaTypeInformation;
-
-/**
- * Implementation of MetaTypeProvider
- * <p>
- * Extension of MetaTypeProvider
- * <p>
- * Provides methods to:
- * <p> - getPids() get the Pids for a given Locale
- * <p> - getFactoryPids() get the Factory Pids for a given Locale
- * <p>
- */
-public class MetaTypeInformationImpl extends MetaTypeProviderImpl implements MetaTypeInformation {
-
-	/**
-	 * Constructor of class MetaTypeInformationImpl.
-	 */
-	MetaTypeInformationImpl(Bundle bundle, SAXParserFactory parserFactory) throws java.io.IOException {
-		super(bundle, parserFactory);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.osgi.service.metatype.MetaTypeInformation#getPids()
-	 */
-	public String[] getPids() {
-
-		if (_allPidOCDs.size() == 0) {
-			return new String[0];
-		}
-
-		Vector pids = new Vector(7);
-		Enumeration e = _allPidOCDs.keys();
-		while (e.hasMoreElements()) {
-			pids.addElement(e.nextElement());
-		}
-
-		String[] retvalue = new String[pids.size()];
-		pids.toArray(retvalue);
-		return retvalue;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.osgi.service.metatype.MetaTypeInformation#getFactoryPids()
-	 */
-	public String[] getFactoryPids() {
-		if (_allFPidOCDs.size() == 0) {
-			return new String[0];
-		}
-		Vector fpids = new Vector(7);
-		Enumeration e = _allFPidOCDs.keys();
-		while (e.hasMoreElements()) {
-			fpids.addElement(e.nextElement());
-		}
-		String[] retvalue = new String[fpids.size()];
-		fpids.toArray(retvalue);
-		return retvalue;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.osgi.service.metatype.MetaTypeInformation#getBundle()
-	 */
-	public Bundle getBundle() {
-		return this._bundle;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/MetaTypeMsg.java b/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/MetaTypeMsg.java
deleted file mode 100644
index b3ffee6..0000000
--- a/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/MetaTypeMsg.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.metatype;
-
-import org.eclipse.osgi.util.NLS;
-
-public class MetaTypeMsg extends NLS {
-	private static final String BUNDLE_NAME = "org.eclipse.equinox.metatype.ExternalMessages"; //$NON-NLS-1$
-
-	public static String SERVICE_DESCRIPTION;
-
-	public static String UNEXPECTED_ELEMENT;
-	public static String UNEXPECTED_TEXT;
-	public static String MISSING_ATTRIBUTE;
-	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 NULL_OPTIONS;
-	public static String INCONSISTENT_OPTIONS;
-	public static String INVALID_OPTIONS;
-	public static String INVALID_DEFAULTS;
-
-	public static String METADATA_NOT_FOUND;
-	public static String ASK_INVALID_LOCALE;
-	public static String TOKENIZER_GOT_INVALID_DATA;
-
-	static {
-		// initialize resource bundles
-		NLS.initializeMessages(BUNDLE_NAME, MetaTypeMsg.class);
-	}
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/MetaTypeProviderImpl.java b/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/MetaTypeProviderImpl.java
deleted file mode 100644
index 61527c0..0000000
--- a/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/MetaTypeProviderImpl.java
+++ /dev/null
@@ -1,240 +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.IOException;
-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.service.metatype.*;
-
-/**
- * Implementation of MetaTypeProvider
- */
-public class MetaTypeProviderImpl implements MetaTypeProvider {
-
-	public static final String METADATA_NOT_FOUND = "METADATA_NOT_FOUND"; //$NON-NLS-1$
-	public static final String OCD_ID_NOT_FOUND = "OCD_ID_NOT_FOUND"; //$NON-NLS-1$
-	public static final String ASK_INVALID_LOCALE = "ASK_INVALID_LOCALE"; //$NON-NLS-1$
-
-	public static final String META_FILE_EXT = ".XML"; //$NON-NLS-1$
-	public static final String RESOURCE_FILE_CONN = "_"; //$NON-NLS-1$
-	public static final String RESOURCE_FILE_EXT = ".properties"; //$NON-NLS-1$
-	public static final char DIRECTORY_SEP = '/';
-
-	Bundle _bundle;
-
-	Hashtable _allPidOCDs = new Hashtable(7);
-	Hashtable _allFPidOCDs = new Hashtable(7);
-
-	String[] _locales;
-	boolean _isThereMeta = false;
-
-	/**
-	 * Constructor of class MetaTypeProviderImpl.
-	 */
-	MetaTypeProviderImpl(Bundle bundle, SAXParserFactory parserFactory) throws IOException {
-
-		this._bundle = bundle;
-
-		// 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()));
-		}
-	}
-
-	/**
-	 * This method should do the following:
-	 * <p> - Obtain a SAX parser from the XML Parser Service:
-	 * <p>
-	 * 
-	 * <pre>	</pre>
-	 * 
-	 * The parser may be SAX 1 (eXML) or SAX 2 (XML4J). It should attempt to use
-	 * a SAX2 parser by instantiating an XMLReader and extending DefaultHandler
-	 * BUT if that fails it should fall back to instantiating a SAX1 Parser and
-	 * extending HandlerBase.
-	 * <p> - Pass the parser the URL for the bundle's METADATA.XML file
-	 * <p> - Handle the callbacks from the parser and build the appropriate
-	 * MetaType objects - ObjectClassDefinitions & AttributeDefinitions
-	 * 
-	 * @param bundle The bundle object for which the metadata should be read
-	 * @param parserFactory The bundle object for which the metadata should be
-	 *        read
-	 * @return void
-	 * @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
-					}
-				}
-			} // End of if(urls!=null)
-		} // End of while
-
-		return isThereMetaHere;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.osgi.service.metatype.MetaTypeProvider#getObjectClassDefinition(java.lang.String,
-	 *      java.lang.String)
-	 */
-	public ObjectClassDefinition getObjectClassDefinition(String pid, String locale) {
-
-		if (isInvalidLocale(locale)) {
-			throw new IllegalArgumentException(NLS.bind(MetaTypeMsg.ASK_INVALID_LOCALE, pid, locale));
-		}
-
-		ObjectClassDefinitionImpl ocd;
-		if (_allPidOCDs.containsKey(pid)) {
-			ocd = (ObjectClassDefinitionImpl) ((ObjectClassDefinitionImpl) _allPidOCDs.get(pid)).clone();
-			ocd.setResourceBundle(locale, _bundle);
-			return ocd;
-		} else if (_allFPidOCDs.containsKey(pid)) {
-			ocd = (ObjectClassDefinitionImpl) ((ObjectClassDefinitionImpl) _allFPidOCDs.get(pid)).clone();
-			ocd.setResourceBundle(locale, _bundle);
-			return ocd;
-		} else {
-			throw new IllegalArgumentException(NLS.bind(MetaTypeMsg.OCD_ID_NOT_FOUND, pid));
-		}
-	}
-
-	/**
-	 * Internal Method - Check if the locale is invalid.
-	 */
-	public boolean isInvalidLocale(String locale) {
-
-		// Just a simple and quick check here.
-		if (locale == null || locale.length() == 0)
-			return false;
-
-		int idx_first = locale.indexOf(ObjectClassDefinitionImpl.LOCALE_SEP);
-		int idx_second = locale.lastIndexOf(ObjectClassDefinitionImpl.LOCALE_SEP);
-		if (idx_first == -1 && locale.length() == 2)
-			// It is format of only language.
-			return false;
-		if ((idx_first == 2) && (idx_second == 5 || idx_second == 2))
-			// It is format of language + "_" + country [ + "_" + variation ].
-			return false;
-		return true;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.osgi.service.metatype.MetaTypeProvider#getLocales()
-	 */
-	public synchronized String[] getLocales() {
-
-		if (_locales != null)
-			return checkForDefault(_locales);
-
-		Vector localizationFiles = new Vector(7);
-		// get all the localization resources for PIDS
-		Enumeration ocds = _allPidOCDs.elements();
-		while (ocds.hasMoreElements()) {
-			ObjectClassDefinitionImpl ocd = (ObjectClassDefinitionImpl) 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();
-			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();
-		while (eLocalizationFiles.hasMoreElements()) {
-			String localizationFile = (String) eLocalizationFiles.nextElement();
-			int iSlash = localizationFile.lastIndexOf(DIRECTORY_SEP);
-			String baseDir;
-			String baseFileName;
-			if (iSlash < 0) {
-				baseDir = ""; //$NON-NLS-1$
-			} 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()));
-				}
-			}
-		}
-		_locales = (String[]) locales.toArray(new String[locales.size()]);
-		return checkForDefault(_locales);
-	}
-
-	/**
-	 * Internal Method - checkForDefault
-	 */
-	private String[] checkForDefault(String[] locales) {
-
-		if (locales == null || locales.length == 0 || (locales.length == 1 && Locale.getDefault().toString().equals(locales[0])))
-			return null;
-		return locales;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/MetaTypeProviderTracker.java b/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/MetaTypeProviderTracker.java
deleted file mode 100644
index 37bacc7..0000000
--- a/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/MetaTypeProviderTracker.java
+++ /dev/null
@@ -1,143 +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.util.ArrayList;
-import org.osgi.framework.*;
-import org.osgi.service.cm.ManagedServiceFactory;
-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;
-
-	/**
-	 * 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.
-	 */
-	public MetaTypeProviderTracker(BundleContext context, Bundle bundle) {
-		this._context = context;
-		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);
-		}
-	}
-
-	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();
-		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()]);
-	}
-
-	public String[] getPids() {
-		return getPids(false);
-	}
-
-	public String[] getFactoryPids() {
-		return getPids(true);
-	}
-
-	public Bundle getBundle() {
-		return _bundle;
-	}
-
-	public ObjectClassDefinition getObjectClassDefinition(String id, String locale) {
-		if (_bundle.getState() != Bundle.ACTIVE)
-			return null; // return none if not active
-		MetaTypeProviderWrapper[] wrappers = getMetaTypeProviders();
-		for (int i = 0; i < wrappers.length; i++) {
-			if (id.equals(wrappers[i].pid))
-				// found a matching pid now call the actual provider
-				return wrappers[i].provider.getObjectClassDefinition(id, locale);
-		}
-		return null;
-	}
-
-	public String[] getLocales() {
-		if (_bundle.getState() != Bundle.ACTIVE)
-			return new String[0]; // return none if not active
-		MetaTypeProviderWrapper[] wrappers = getMetaTypeProviders();
-		ArrayList locales = new ArrayList();
-		// collect all the unique locales from all providers we found
-		for (int i = 0; i < wrappers.length; i++) {
-			String[] wrappedLocales = wrappers[i].provider.getLocales();
-			if (wrappedLocales == null)
-				continue;
-			for (int j = 0; j < wrappedLocales.length; j++)
-				if (!locales.contains(wrappedLocales[j]))
-					locales.add(wrappedLocales[j]);
-		}
-		return (String[]) locales.toArray(new String[locales.size()]);
-	}
-
-	private MetaTypeProviderWrapper[] getMetaTypeProviders() {
-		ServiceReference[] refs = _tracker.getServiceReferences();
-		if (refs == null)
-			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]);
-				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));
-				}
-				// 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()]);
-	}
-
-	// this is a simple class just used to temporarily store information about a provider
-	public class MetaTypeProviderWrapper {
-		MetaTypeProvider provider;
-		String pid;
-		boolean factory;
-
-		MetaTypeProviderWrapper(MetaTypeProvider provider, String pid, boolean factory) {
-			this.provider = provider;
-			this.pid = pid;
-			this.factory = factory;
-		}
-	}
-}
diff --git a/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/MetaTypeServiceImpl.java b/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/MetaTypeServiceImpl.java
deleted file mode 100644
index 7b4db21..0000000
--- a/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/MetaTypeServiceImpl.java
+++ /dev/null
@@ -1,107 +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.IOException;
-import java.security.*;
-import java.util.Hashtable;
-import javax.xml.parsers.SAXParserFactory;
-import org.osgi.framework.*;
-import org.osgi.service.metatype.MetaTypeInformation;
-import org.osgi.service.metatype.MetaTypeService;
-
-/**
- * Implementation of MetaTypeService
- */
-public class MetaTypeServiceImpl implements MetaTypeService, SynchronousBundleListener {
-
-	BundleContext _context;
-	SAXParserFactory _parserFactory;
-	private Hashtable _mtps = new Hashtable(7);
-
-	/**
-	 * Constructor of class MetaTypeServiceImpl.
-	 */
-	public MetaTypeServiceImpl(BundleContext context, SAXParserFactory parserFactory) {
-		this._context = context;
-		this._parserFactory = parserFactory;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.osgi.service.metatype.MetaTypeService#getMetaTypeInformation(org.osgi.framework.Bundle)
-	 */
-	public MetaTypeInformation getMetaTypeInformation(Bundle bundle) {
-
-		MetaTypeInformation mti;
-		try {
-			mti = getMetaTypeProvider(bundle);
-		} catch (IOException e) {
-			Logging.log(Logging.ERROR, "IOException in MetaTypeInformation:getMetaTypeInformation(Bundle bundle)"); //$NON-NLS-1$
-			e.printStackTrace();
-			mti = null;
-		}
-		return mti;
-	}
-
-	/**
-	 * Internal Method - to get MetaTypeProvider object.
-	 */
-	private MetaTypeInformation getMetaTypeProvider(final Bundle b) throws java.io.IOException {
-
-		try {
-			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);
-						if (!impl._isThereMeta)
-							return new MetaTypeProviderTracker(_context, b);
-						return impl;
-					}
-				});
-				_mtps.put(bID, mti);
-				return mti;
-			}
-		} catch (PrivilegedActionException pae) {
-			throw (IOException) pae.getException();
-		}
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.osgi.framework.BundleListener#bundleChanged(org.osgi.framework.BundleEvent)
-	 */
-	public void bundleChanged(BundleEvent event) {
-
-		int type = event.getType();
-		Long bID = new Long(event.getBundle().getBundleId());
-
-		switch (type) {
-			case BundleEvent.UPDATED :
-			case BundleEvent.UNINSTALLED :
-				_mtps.remove(bID);
-				break;
-			case BundleEvent.INSTALLED :
-			case BundleEvent.RESOLVED :
-			case BundleEvent.STARTED :
-			case BundleEvent.STOPPED :
-			case BundleEvent.UNRESOLVED :
-			default :
-				break;
-		}
-	}
-}
diff --git a/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/ObjectClassDefinitionImpl.java b/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/ObjectClassDefinitionImpl.java
deleted file mode 100644
index 7d70e2a..0000000
--- a/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/ObjectClassDefinitionImpl.java
+++ /dev/null
@@ -1,323 +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.IOException;
-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;
-
-/**
- * Implementation of 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;
-	String _id;
-	String _description;
-
-	int _type;
-	Vector _required = new Vector(7);
-	Vector _optional = new Vector(7);
-	Icon _icon;
-
-	/*
-	 * Constructor of class ObjectClassDefinitionImpl.
-	 */
-	public ObjectClassDefinitionImpl(String name, String description, String id, String localization) {
-
-		this._name = name;
-		this._description = description;
-		this._id = id;
-		this._localization = localization;
-	}
-
-	/*
-	 * Constructor of class ObjectClassDefinitionImpl.
-	 */
-	public ObjectClassDefinitionImpl(String name, String description, String id, int type, String localization) {
-
-		this._name = name;
-		this._id = id;
-		this._description = description;
-		this._type = type;
-		this._localization = localization;
-	}
-
-	/*
-	 * 
-	 */
-	public synchronized Object clone() {
-
-		ObjectClassDefinitionImpl ocd = new ObjectClassDefinitionImpl(_name, _description, _id, _type, _localization);
-		for (int i = 0; i < _required.size(); i++) {
-			AttributeDefinitionImpl ad = (AttributeDefinitionImpl) _required.elementAt(i);
-			ocd.addAttributeDefinition((AttributeDefinitionImpl) ad.clone(), true);
-		}
-		for (int i = 0; i < _optional.size(); i++) {
-			AttributeDefinitionImpl ad = (AttributeDefinitionImpl) _optional.elementAt(i);
-			ocd.addAttributeDefinition((AttributeDefinitionImpl) ad.clone(), false);
-		}
-		if (_icon != null) {
-			ocd.setIcon((Icon) _icon.clone());
-		}
-		return ocd;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.osgi.service.metatype.ObjectClassDefinition#getName()
-	 */
-	public String getName() {
-		return getLocalized(_name);
-	}
-
-	/**
-	 * Method to set the name of ObjectClassDefinition.
-	 */
-	void setName(String name) {
-		this._name = name;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.osgi.service.metatype.ObjectClassDefinition#getID()
-	 */
-	public String getID() {
-		return _id;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.osgi.service.metatype.ObjectClassDefinition#getDescription()
-	 */
-	public String getDescription() {
-		return getLocalized(_description);
-	}
-
-	/*
-	 * Method to set the description of ObjectClassDefinition.
-	 */
-	void setDescription(String description) {
-		this._description = description;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.osgi.service.metatype.ObjectClassDefinition#getAttributeDefinitions(int)
-	 */
-	public AttributeDefinition[] getAttributeDefinitions(int filter) {
-
-		AttributeDefinition[] atts;
-		switch (filter) {
-			case REQUIRED :
-				atts = new AttributeDefinition[_required.size()];
-				_required.toArray(atts);
-				return atts;
-			case OPTIONAL :
-				atts = new AttributeDefinition[_optional.size()];
-				_optional.toArray(atts);
-				return atts;
-			case ALL :
-			default :
-				atts = new AttributeDefinition[_required.size() + _optional.size()];
-				Enumeration e = _required.elements();
-				int i = 0;
-				while (e.hasMoreElements()) {
-					atts[i] = (AttributeDefinition) e.nextElement();
-					i++;
-				}
-				e = _optional.elements();
-				while (e.hasMoreElements()) {
-					atts[i] = (AttributeDefinition) e.nextElement();
-					i++;
-				}
-				return atts;
-		}
-	}
-
-	/*
-	 * Method to add one new AD to ObjectClassDefinition.
-	 */
-	public void addAttributeDefinition(AttributeDefinition ad, boolean isRequired) {
-
-		if (isRequired) {
-			_required.addElement(ad);
-		} else {
-			_optional.addElement(ad);
-		}
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.osgi.service.metatype.ObjectClassDefinition#getIcon(int)
-	 */
-	public InputStream getIcon(int sizeHint) throws IOException {
-
-		if ((_icon == null) || (_icon.getIconSize() != sizeHint)) {
-			return null;
-		}
-		Bundle b = _icon.getIconBundle();
-		URL[] urls = FragmentUtils.findEntries(b, getLocalized(_icon.getIconName()));
-		if (urls != null && urls.length > 0) {
-			return urls[0].openStream();
-		}
-		return null;
-	}
-
-	/**
-	 * Method to set the icon of ObjectClassDefinition.
-	 */
-	public 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();
-		while (allADReqs.hasMoreElements()) {
-			AttributeDefinitionImpl ad = (AttributeDefinitionImpl) allADReqs.nextElement();
-			ad.setResourceBundle(_rb);
-		}
-
-		Enumeration allADOpts = _optional.elements();
-		while (allADOpts.hasMoreElements()) {
-			AttributeDefinitionImpl ad = (AttributeDefinitionImpl) allADOpts.nextElement();
-			ad.setResourceBundle(_rb);
-		}
-	}
-
-	/*
-	 * Internal Method - to get resource bundle.
-	 */
-	private ResourceBundle getResourceBundle(String locale, final Bundle bundle) {
-
-		String resourceBase = (_localization == null ? Constants.BUNDLE_LOCALIZATION_DEFAULT_BASENAME : _localization);
-
-		// There are seven searching candidates possible:
-		// baseName + 
-		//		"_" + language1 + "_" + country1 + "_" + variation1	+ ".properties"
-		// or	"_" + language1 + "_" + country1					+ ".properties"
-		// or	"_" + language1										+ ".properties"
-		// or	"_" + language2 + "_" + country2 + "_" + variation2	+ ".properties"
-		// or	"_" + language2 + "_" + country2					+ ".properties"
-		// or	"_" + language2										+ ".properties"
-		// or	""													+ ".properties"
-		//
-		// Where language1[_country1[_variation1]] is the requested locale,
-		// and language2[_country2[_variation2]] is the default locale.
-
-		String[] searchCandidates = new String[7];
-
-		// Candidates from passed locale:
-		if (locale != null && locale.length() > 0) {
-			int idx1_first = locale.indexOf(LOCALE_SEP);
-			if (idx1_first == -1) {
-				// locale has only language.
-				searchCandidates[2] = MetaTypeProviderImpl.RESOURCE_FILE_CONN + locale;
-			} else {
-				// locale has at least language and country.
-				searchCandidates[2] = MetaTypeProviderImpl.RESOURCE_FILE_CONN + locale.substring(0, idx1_first);
-				int idx1_second = locale.indexOf(LOCALE_SEP, idx1_first + 1);
-				if (idx1_second == -1) {
-					// locale just has both language and country.
-					searchCandidates[1] = MetaTypeProviderImpl.RESOURCE_FILE_CONN + locale;
-				} else {
-					// locale has language, country, and variation all.
-					searchCandidates[1] = MetaTypeProviderImpl.RESOURCE_FILE_CONN + locale.substring(0, idx1_second);
-					searchCandidates[0] = MetaTypeProviderImpl.RESOURCE_FILE_CONN + locale;
-				}
-			}
-		}
-
-		// Candidates from Locale.getDefault():
-		String defaultLocale = Locale.getDefault().toString();
-		int idx2_first = defaultLocale.indexOf(LOCALE_SEP);
-		int idx2_second = defaultLocale.indexOf(LOCALE_SEP, idx2_first + 1);
-		if (idx2_second != -1) {
-			// default-locale is format of [language]_[country]_variation.
-			searchCandidates[3] = MetaTypeProviderImpl.RESOURCE_FILE_CONN + defaultLocale;
-			if (searchCandidates[3].equalsIgnoreCase(searchCandidates[0])) {
-				searchCandidates[3] = null;
-			}
-		}
-		if ((idx2_first != -1) && (idx2_second != idx2_first + 1)) {
-			// default-locale is format of [language]_country[_variation].
-			searchCandidates[4] = MetaTypeProviderImpl.RESOURCE_FILE_CONN + ((idx2_second == -1) ? defaultLocale : defaultLocale.substring(0, idx2_second));
-			if (searchCandidates[4].equalsIgnoreCase(searchCandidates[1])) {
-				searchCandidates[4] = null;
-			}
-		}
-		if ((idx2_first == -1) && (defaultLocale.length() > 0)) {
-			// default-locale has only language.
-			searchCandidates[5] = MetaTypeProviderImpl.RESOURCE_FILE_CONN + defaultLocale;
-		} else if (idx2_first > 0) {
-			// default-locale is format of language_[...].
-			searchCandidates[5] = MetaTypeProviderImpl.RESOURCE_FILE_CONN + defaultLocale.substring(0, idx2_first);
-		}
-		if (searchCandidates[5] != null && searchCandidates[5].equalsIgnoreCase(searchCandidates[2])) {
-			searchCandidates[5] = null;
-		}
-
-		// The final candidate.
-		searchCandidates[6] = ""; //$NON-NLS-1$
-
-		URL resourceUrl = null;
-		URL[] urls = null;
-
-		for (int idx = 0; (idx < searchCandidates.length) && (resourceUrl == null); idx++) {
-			urls = (searchCandidates[idx] == null ? null : FragmentUtils.findEntries(bundle, resourceBase + searchCandidates[idx] + MetaTypeProviderImpl.RESOURCE_FILE_EXT));
-			if (urls != null && urls.length > 0)
-				resourceUrl = urls[0];
-		}
-
-		if (resourceUrl != null) {
-			try {
-				return new PropertyResourceBundle(resourceUrl.openStream());
-			} catch (IOException ioe) {
-				// Exception when creating PropertyResourceBundle object.
-			}
-		}
-		return null;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/ValueTokenizer.java b/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/ValueTokenizer.java
deleted file mode 100644
index 51032b1..0000000
--- a/bundles/org.eclipse.equinox.metatype/src/org/eclipse/equinox/metatype/ValueTokenizer.java
+++ /dev/null
@@ -1,76 +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.util.Vector;
-
-public class ValueTokenizer {
-
-	private static final char SEPARATE = ',';
-	private static final char CONTROL = '\\';
-
-	Vector _value_vector = new Vector(7);
-
-	/*
-	 * 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) {
-					if (i + 1 < values_str.length()) {
-						buffer.append(values_str.charAt(++i));
-						continue;
-					}
-					// 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());
-		}
-	}
-
-	/*
-	 * Method to return values as Vector.
-	 */
-	public Vector getValuesAsVector() {
-		return _value_vector;
-	}
-
-	/*
-	 * Method to return values as String[] or null.
-	 */
-	public String[] getValuesAsArray() {
-
-		String[] value_array = null;
-		if ((_value_vector != null) && (_value_vector.size() != 0)) {
-
-			value_array = new String[_value_vector.size()];
-			_value_vector.toArray(value_array);
-		}
-
-		return value_array;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.preferences/.classpath b/bundles/org.eclipse.equinox.preferences/.classpath
deleted file mode 100644
index ce0c7a5..0000000
--- a/bundles/org.eclipse.equinox.preferences/.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/CDC-1.0%Foundation-1.0"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/bundles/org.eclipse.equinox.preferences/.cvsignore b/bundles/org.eclipse.equinox.preferences/.cvsignore
deleted file mode 100644
index ba077a4..0000000
--- a/bundles/org.eclipse.equinox.preferences/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-bin
diff --git a/bundles/org.eclipse.equinox.preferences/.options b/bundles/org.eclipse.equinox.preferences/.options
deleted file mode 100644
index c676c7c..0000000
--- a/bundles/org.eclipse.equinox.preferences/.options
+++ /dev/null
@@ -1,6 +0,0 @@
-# Debugging options for the org.eclipse.equinox.preferences plugin
-
-# Turn on debugging for preferences
-org.eclipse.equinox.preferences/general=false
-org.eclipse.equinox.preferences/get=false
-org.eclipse.equinox.preferences/set=false
diff --git a/bundles/org.eclipse.equinox.preferences/.project b/bundles/org.eclipse.equinox.preferences/.project
deleted file mode 100644
index 0ccb375..0000000
--- a/bundles/org.eclipse.equinox.preferences/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.equinox.preferences</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/bundles/org.eclipse.equinox.preferences/.settings/org.eclipse.core.resources.prefs b/bundles/org.eclipse.equinox.preferences/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index 16532b2..0000000
--- a/bundles/org.eclipse.equinox.preferences/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Tue May 25 15:00:03 EDT 2004
-encoding/<project>=ISO-8859-1
-eclipse.preferences.version=1
diff --git a/bundles/org.eclipse.equinox.preferences/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.equinox.preferences/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 56cd28a..0000000
--- a/bundles/org.eclipse.equinox.preferences/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,7 +0,0 @@
-#Wed Apr 19 17:13:49 EDT 2006
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.1
-org.eclipse.jdt.core.compiler.compliance=1.3
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=ignore
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=ignore
-org.eclipse.jdt.core.compiler.source=1.3
diff --git a/bundles/org.eclipse.equinox.preferences/META-INF/MANIFEST.MF b/bundles/org.eclipse.equinox.preferences/META-INF/MANIFEST.MF
deleted file mode 100644
index 771f0a8..0000000
--- a/bundles/org.eclipse.equinox.preferences/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,25 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %pluginName
-Bundle-SymbolicName: org.eclipse.equinox.preferences; singleton:=true
-Bundle-Version: 3.2.100.qualifier
-Bundle-Activator: org.eclipse.core.internal.preferences.Activator
-Bundle-Vendor: %providerName
-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)";resolution:=optional
-Export-Package: org.eclipse.core.internal.preferences;x-friends:="org.eclipse.core.resources,org.eclipse.core.runtime",
- org.eclipse.core.internal.preferences.exchange;x-friends:="org.eclipse.core.runtime",
- org.eclipse.core.runtime.preferences,
- org.osgi.service.prefs;version="1.1"
-Eclipse-LazyStart: true; exceptions="org.eclipse.core.internal.preferences.exchange"
-Import-Package: org.eclipse.osgi.framework.log,
- org.eclipse.osgi.service.datalocation,
- org.eclipse.osgi.service.debug,
- org.eclipse.osgi.service.environment,
- org.eclipse.osgi.util,
- org.osgi.framework,
- org.osgi.service.packageadmin,
- org.osgi.util.tracker
-Bundle-RequiredExecutionEnvironment: CDC-1.0/Foundation-1.0,
- J2SE-1.3
diff --git a/bundles/org.eclipse.equinox.preferences/about.html b/bundles/org.eclipse.equinox.preferences/about.html
deleted file mode 100644
index 8d1c4af..0000000
--- a/bundles/org.eclipse.equinox.preferences/about.html
+++ /dev/null
@@ -1,69 +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 25, 2006</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 (&quot;EPL&quot;).  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, &quot;Program&quot; 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 (&quot;Redistributor&quot;) 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&rsquo;s license for 
-terms and conditions of use.</p>
-
-<h4>OSGi Materials</h4>
-
-<p>All files in the following sub-directories (and their sub-directories):</p>
-
-<ul>
- <li>org/osgi</li>
-</ul>
-
-<p>shall be defined as the &quot;OSGi Materials.&quot;  The OSGi Materials are:</p>
-
-<blockquote>
-Copyright (c) 2000, 2006
-<br /><br />
-OSGi Alliance
-Bishop Ranch 6<br/>
-2400 Camino Ramon, Suite 375<br/>
-San Ramon, CA 94583 USA
-<br /><br />
-All Rights Reserved.
-</blockquote>
-
-<p>The OSGi Materials are provided to you under 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>Implementation of certain elements of the OSGi Materials may be subject to third party intellectual property rights, including without limitation, patent rights (such a third party may
-or may not be a member of the OSGi Alliance).  The OSGi Alliance and its members are not responsible and shall not be held responsible in any manner for identifying or failing to identify any or all such third party
-intellectual property rights.</p>
-
-<small>OSGi&trade; is a trademark, registered trademark, or service mark of The OSGi Alliance in the US and other countries. Java is a trademark,
-registered trademark, or service mark of Sun Microsystems, Inc. in the US and other countries. All other trademarks, registered trademarks, or
-service marks used in the Content are the property of their respective owners and are hereby recognized.</small>
-
-<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>
diff --git a/bundles/org.eclipse.equinox.preferences/about_files/LICENSE-2.0.txt b/bundles/org.eclipse.equinox.preferences/about_files/LICENSE-2.0.txt
deleted file mode 100644
index d645695..0000000
--- a/bundles/org.eclipse.equinox.preferences/about_files/LICENSE-2.0.txt
+++ /dev/null
@@ -1,202 +0,0 @@
-
-                                 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.
diff --git a/bundles/org.eclipse.equinox.preferences/build.properties b/bundles/org.eclipse.equinox.preferences/build.properties
deleted file mode 100644
index ae70233..0000000
--- a/bundles/org.eclipse.equinox.preferences/build.properties
+++ /dev/null
@@ -1,22 +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
-###############################################################################
-source.. = src/
-output.. = bin/
-bin.includes = META-INF/,\
-               .,\
-               plugin.xml,\
-               plugin.properties,\
-               .options,\
-               about.html,\
-               about_files/
-src.includes = about.html,\
-               schema/,\
-               about_files/
diff --git a/bundles/org.eclipse.equinox.preferences/plugin.properties b/bundles/org.eclipse.equinox.preferences/plugin.properties
deleted file mode 100644
index 85acdaa..0000000
--- a/bundles/org.eclipse.equinox.preferences/plugin.properties
+++ /dev/null
@@ -1,14 +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
-###############################################################################
-pluginName = Eclipse Preferences Mechanism
-providerName = Eclipse.org
-preferencesExtPtName = Platform Preferences
-preferencesName=Preferences
diff --git a/bundles/org.eclipse.equinox.preferences/plugin.xml b/bundles/org.eclipse.equinox.preferences/plugin.xml
deleted file mode 100644
index ceaa752..0000000
--- a/bundles/org.eclipse.equinox.preferences/plugin.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-<plugin>
-   <extension-point id="preferences" name="%preferencesName" schema="schema/preferences.exsd"/>
-</plugin>
diff --git a/bundles/org.eclipse.equinox.preferences/schema/preferences.exsd b/bundles/org.eclipse.equinox.preferences/schema/preferences.exsd
deleted file mode 100644
index abc45db..0000000
--- a/bundles/org.eclipse.equinox.preferences/schema/preferences.exsd
+++ /dev/null
@@ -1,174 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- Schema file written by PDE -->
-<schema targetNamespace="org.eclipse.core.runtime">
-<annotation>
-      <appInfo>
-         <meta.schema plugin="org.eclipse.core.runtime" id="preferences" name="Preferences"/>
-      </appInfo>
-      <documentation>
-         The preferences extension point allows plug-ins to add new preference scopes to the Eclipse preference mechanism as well as specify the class to run to initialize default preference values at runtime.
-      </documentation>
-   </annotation>
-
-   <element name="extension">
-      <complexType>
-         <sequence>
-            <element ref="scope" minOccurs="0" maxOccurs="unbounded"/>
-            <element ref="initializer" minOccurs="0" maxOccurs="unbounded"/>
-            <element ref="modifier" minOccurs="0" 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="scope">
-      <annotation>
-         <documentation>
-            Element describing a client&apos;s definiton of a new preference scope.
-         </documentation>
-      </annotation>
-      <complexType>
-         <attribute name="name" type="string" use="required">
-            <annotation>
-               <documentation>
-                  The name of the scope.
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="class" type="string" use="required">
-            <annotation>
-               <documentation>
-                  The name of the class.
-               </documentation>
-               <appInfo>
-                  <meta.attribute kind="java" basedOn="IScope"/>
-               </appInfo>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <element name="initializer">
-      <annotation>
-         <documentation>
-            Element which defines the class to use for runtime preference initialization.
-         </documentation>
-      </annotation>
-      <complexType>
-         <attribute name="class" type="string" use="required">
-            <annotation>
-               <documentation>
-                  The name of the class.
-               </documentation>
-               <appInfo>
-                  <meta.attribute kind="java" basedOn="org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer"/>
-               </appInfo>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <element name="modifier">
-      <annotation>
-         <documentation>
-            Element which defines the class to use for preference modification listening.
-         </documentation>
-      </annotation>
-      <complexType>
-         <attribute name="class" type="string" use="required">
-            <annotation>
-               <documentation>
-                  The name of the class.
-               </documentation>
-               <appInfo>
-                  <meta.attribute kind="java" basedOn="org.eclipse.core.runtime.preferences.PreferenceModifyListener"/>
-               </appInfo>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="since"/>
-      </appInfo>
-      <documentation>
-         3.0
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="examples"/>
-      </appInfo>
-      <documentation>
-         Following is an example of a preference scope declaration.  This example declares that this plug-in will provide a preference implementation for the scope &quot;foo&quot;. It also declares that when the default values are loaded for this plug-in, the class &quot;MyPreferenceInitializer&quot; contains code to be run to initialize preference default values at runtime.
-&lt;p&gt;
-   &lt;pre&gt;
-      &lt;extension point=&quot;org.eclipse.core.runtime.preferences&quot;&gt;
-         &lt;scope name=&quot;foo&quot; class=&quot;com.example.FooPrefs&quot;/&gt;
-         &lt;initializer class=&quot;com.example.MyPreferenceInitializer&quot;/&gt;
-         &lt;modifier class=&quot;com.example.MyModifyListener&quot;/&gt;
-      &lt;/extension&gt;
-   &lt;/pre&gt;
-&lt;/p&gt;
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="apiInfo"/>
-      </appInfo>
-      <documentation>
-         The preference service (obtained by calling &lt;code&gt;org.eclipse.core.runtime.Platform.getPreferencesService()&lt;/code&gt;) is the hook into the Eclipse preference mechanism.
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="implementation"/>
-      </appInfo>
-      <documentation>
-         The org.eclipse.core.runtime plug-in provides preference implementations for the &quot;configuration&quot;, &quot;instance&quot;, and &quot;default&quot; scopes.  The org.eclipse.core.resources plug-in provides an implementation for &quot;project&quot; preferences.
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="copyright"/>
-      </appInfo>
-      <documentation>
-         Copyright (c) 2004, 2006 IBM Corporation and others.&lt;br&gt;
-All rights reserved. This program and the accompanying materials are made 
-available under the terms of the Eclipse Public License v1.0 which 
-accompanies 
-this distribution, and is available at 
-&lt;a 
-href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;
-      </documentation>
-   </annotation>
-
-</schema>
diff --git a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/AbstractScope.java b/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/AbstractScope.java
deleted file mode 100644
index 1b5ebd8..0000000
--- a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/AbstractScope.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*******************************************************************************
- * 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
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.core.internal.preferences;
-
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.preferences.IEclipsePreferences;
-import org.eclipse.core.runtime.preferences.IScopeContext;
-
-/**
- * Abstract super-class for scope context object contributed
- * by the Platform.
- * 
- * @since 3.0
- */
-public abstract class AbstractScope implements IScopeContext {
-
-	/*
-	 * @see org.eclipse.core.runtime.preferences.IScopeContext#getName()
-	 */
-	public abstract String getName();
-
-	/*
-	 * Default path hierarchy for nodes is /<scope>/<qualifier>.
-	 * 
-	 * @see org.eclipse.core.runtime.preferences.IScopeContext#getNode(java.lang.String)
-	 */
-	public IEclipsePreferences getNode(String qualifier) {
-		if (qualifier == null)
-			throw new IllegalArgumentException();
-		return (IEclipsePreferences) PreferencesService.getDefault().getRootNode().node(getName()).node(qualifier);
-	}
-
-	/*
-	 * @see org.eclipse.core.runtime.preferences.IScopeContext#getLocation()
-	 */
-	public abstract IPath getLocation();
-
-	/* (non-Javadoc)
-	 * @see java.lang.Object#equals(java.lang.Object)
-	 */
-	public boolean equals(Object obj) {
-		if (this == obj)
-			return true;
-		if (!(obj instanceof IScopeContext))
-			return false;
-		IScopeContext other = (IScopeContext) obj;
-		if (!getName().equals(other.getName()))
-			return false;
-		IPath location = getLocation();
-		return location == null ? other.getLocation() == null : location.equals(other.getLocation());
-	}
-
-	/* (non-Javadoc)
-	 * @see java.lang.Object#hashCode()
-	 */
-	public int hashCode() {
-		return getName().hashCode();
-	}
-}
diff --git a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/Activator.java b/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/Activator.java
deleted file mode 100644
index 832817c..0000000
--- a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/Activator.java
+++ /dev/null
@@ -1,164 +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.core.internal.preferences;
-
-import java.util.Hashtable;
-import org.eclipse.core.internal.runtime.RuntimeLog;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.preferences.IPreferencesService;
-import org.eclipse.osgi.service.environment.EnvironmentInfo;
-import org.osgi.framework.*;
-import org.osgi.util.tracker.ServiceTracker;
-import org.osgi.util.tracker.ServiceTrackerCustomizer;
-
-/**
- * The Preferences bundle activator.
- */
-public class Activator implements BundleActivator, ServiceTrackerCustomizer {
-
-	public static final String PI_PREFERENCES = "org.eclipse.equinox.preferences"; //$NON-NLS-1$
-
-	/**
-	 * Eclipse property. Set to <code>false</code> to avoid registering JobManager
-	 * as an OSGi service.
-	 */
-	private static final String PROP_REGISTER_PERF_SERVICE = "eclipse.service.pref"; //$NON-NLS-1$
-	
-	/**
-	 * Track the registry service - only register preference service if the registry is 
-	 * available
-	 */
-	private ServiceTracker registryServiceTracker;
-
-	/**
-	 * The bundle associated this plug-in
-	 */
-	private static BundleContext bundleContext;
-
-	/**
-	 * This plugin provides a Preferences service.
-	 */
-	private ServiceRegistration preferencesService = null;
-
-	/**
-	 * This plugin provides the OSGi Preferences service.
-	 */
-	private ServiceRegistration osgiPreferencesService = null;
-
-	/* (non-Javadoc)
-	 * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
-	 */
-	public void start(BundleContext context) throws Exception {
-		bundleContext = context;
-		// 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());
-			osgiPreferencesService = bundleContext.registerService(org.osgi.service.prefs.PreferencesService.class.getName(), new OSGiPreferencesServiceManager(bundleContext), null);
-		}
-		// use the string for the class name here in case the registry isn't around
-		registryServiceTracker = new ServiceTracker(bundleContext, "org.eclipse.core.runtime.IExtensionRegistry", this); //$NON-NLS-1$
-		registryServiceTracker.open();
-	}
-
-	/* (non-Javadoc)
-	 * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
-	 */
-	public void stop(BundleContext context) throws Exception {
-		PreferencesOSGiUtils.getDefault().closeServices();
-		if (registryServiceTracker != null) {
-			registryServiceTracker.close();
-			registryServiceTracker = null;
-		}
-		if (preferencesService != null) {
-			preferencesService.unregister();
-			preferencesService = null;
-		}
-		if (osgiPreferencesService != null) {
-			osgiPreferencesService.unregister();
-			osgiPreferencesService = null;
-		}
-		bundleContext = null;
-	}
-
-	static BundleContext getContext() {
-		return bundleContext;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.osgi.util.tracker.ServiceTrackerCustomizer#addingService(org.osgi.framework.ServiceReference)
-	 */
-	public synchronized Object addingService(ServiceReference reference) {
-		Object service = bundleContext.getService(reference);
-		// this check is important as it avoids early loading of PreferenceServiceRegistryHelper and allows
-		// this bundle to operate with out necessarily resolving against the registry
-		if (service != null) {
-			try {
-				Object helper = new PreferenceServiceRegistryHelper(PreferencesService.getDefault(), service);
-				PreferencesService.getDefault().setRegistryHelper(helper);
-			} catch (Exception e) {
-				RuntimeLog.log(new Status(IStatus.ERROR, PI_PREFERENCES, 0, PrefsMessages.noRegistry, e));
-			} catch (NoClassDefFoundError error) {
-				// Normally this catch would not be needed since we should never see the
-				// IExtensionRegistry service without resolving against registry.
-				// However, the check is very lenient with split packages and this can happen when
-				// the preferences bundle is already resolved at the time the registry bundle is installed.
-				// For this case we ignore the error. When refreshed the bundle will be rewired correctly.
-				// null is returned because we don't want to track this particular service reference.
-				return null;
-			}
-		}
-		//return the registry service so we track it
-		return service;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.osgi.util.tracker.ServiceTrackerCustomizer#modifiedService(org.osgi.framework.ServiceReference, java.lang.Object)
-	 */
-	public void modifiedService(ServiceReference reference, Object service) {
-	}
-
-	/* (non-Javadoc)
-	 * @see org.osgi.util.tracker.ServiceTrackerCustomizer#removedService(org.osgi.framework.ServiceReference, java.lang.Object)
-	 */
-	public synchronized void removedService(ServiceReference reference, Object service) {
-		PreferencesService.getDefault().setRegistryHelper(null);
-		bundleContext.ungetService(reference);
-	}
-
-	/**
-	 * Look for the plug-in customization file.
-	 * @param args - command line arguments
-	 */
-	private void processCommandLine() {
-		ServiceTracker environmentTracker = new ServiceTracker(bundleContext, EnvironmentInfo.class.getName(), null);
-		environmentTracker.open();
-		EnvironmentInfo environmentInfo = (EnvironmentInfo) environmentTracker.getService();
-		environmentTracker.close();
-		if (environmentInfo == null)
-			return;
-		String[] args = environmentInfo.getNonFrameworkArgs();
-		if (args == null || args.length == 0)
-			return;
-
-		for (int i = 0; i < args.length; i++) {
-			if (args[i].equalsIgnoreCase(IPreferencesConstants.PLUGIN_CUSTOMIZATION)) {
-				if (args.length > i + 1) // make sure the file name is actually there
-					DefaultPreferences.pluginCustomizationFile = args[i + 1];
-				break; // only interested in this one
-			}
-		}
-	}
-}
diff --git a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/Base64.java b/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/Base64.java
deleted file mode 100644
index 1cf55d3..0000000
--- a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/Base64.java
+++ /dev/null
@@ -1,198 +0,0 @@
-/*******************************************************************************
- * 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
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.core.internal.preferences;
-
-public class Base64 {
-
-	private static final byte equalSign = (byte) '=';
-
-	static char digits[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', //
-			'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', //
-			'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', //
-			'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/'};
-
-	/**
-	 * This method decodes the byte array in base 64 encoding into a char array
-	 * Base 64 encoding has to be according to the specification given by the
-	 * RFC 1521 (5.2).
-	 * 
-	 * @param data the encoded byte array
-	 * @return the decoded byte array
-	 */
-	public static byte[] decode(byte[] data) {
-		if (data.length == 0)
-			return data;
-		int lastRealDataIndex = data.length - 1;
-		while (data[lastRealDataIndex] == equalSign)
-			lastRealDataIndex--;
-		// original data digit is 8 bits long, but base64 digit is 6 bits long
-		int padBytes = data.length - 1 - lastRealDataIndex;
-		int byteLength = data.length * 6 / 8 - padBytes;
-		byte[] result = new byte[byteLength];
-		// Each 4 bytes of input (encoded) we end up with 3 bytes of output
-		int dataIndex = 0;
-		int resultIndex = 0;
-		int allBits = 0;
-		// how many result chunks we can process before getting to pad bytes
-		int resultChunks = (lastRealDataIndex + 1) / 4;
-		for (int i = 0; i < resultChunks; i++) {
-			allBits = 0;
-			// Loop 4 times gathering input bits (4 * 6 = 24)
-			for (int j = 0; j < 4; j++)
-				allBits = (allBits << 6) | decodeDigit(data[dataIndex++]);
-			// Loop 3 times generating output bits (3 * 8 = 24)
-			for (int j = resultIndex + 2; j >= resultIndex; j--) {
-				result[j] = (byte) (allBits & 0xff); // Bottom 8 bits
-				allBits = allBits >>> 8;
-			}
-			resultIndex += 3; // processed 3 result bytes
-		}
-		// Now we do the extra bytes in case the original (non-encoded) data
-		// was not multiple of 3 bytes
-		switch (padBytes) {
-			case 1 :
-				// 1 pad byte means 3 (4-1) extra Base64 bytes of input, 18
-				// bits, of which only 16 are meaningful
-				// Or: 2 bytes of result data
-				allBits = 0;
-				// Loop 3 times gathering input bits
-				for (int j = 0; j < 3; j++)
-					allBits = (allBits << 6) | decodeDigit(data[dataIndex++]);
-				// NOTE - The code below ends up being equivalent to allBits =
-				// allBits>>>2
-				// But we code it in a non-optimized way for clarity
-				// The 4th, missing 6 bits are all 0
-				allBits = allBits << 6;
-				// The 3rd, missing 8 bits are all 0
-				allBits = allBits >>> 8;
-				// Loop 2 times generating output bits
-				for (int j = resultIndex + 1; j >= resultIndex; j--) {
-					result[j] = (byte) (allBits & 0xff); // Bottom 8
-					// bits
-					allBits = allBits >>> 8;
-				}
-				break;
-			case 2 :
-				// 2 pad bytes mean 2 (4-2) extra Base64 bytes of input, 12 bits
-				// of data, of which only 8 are meaningful
-				// Or: 1 byte of result data
-				allBits = 0;
-				// Loop 2 times gathering input bits
-				for (int j = 0; j < 2; j++)
-					allBits = (allBits << 6) | decodeDigit(data[dataIndex++]);
-				// NOTE - The code below ends up being equivalent to allBits =
-				// allBits>>>4
-				// But we code it in a non-optimized way for clarity
-				// The 3rd and 4th, missing 6 bits are all 0
-				allBits = allBits << 6;
-				allBits = allBits << 6;
-				// The 3rd and 4th, missing 8 bits are all 0
-				allBits = allBits >>> 8;
-				allBits = allBits >>> 8;
-				result[resultIndex] = (byte) (allBits & 0xff); // Bottom
-				// 8
-				// bits
-				break;
-		}
-		return result;
-	}
-
-	/**
-	 * This method converts a Base 64 digit to its numeric value.
-	 * 
-	 * @param data digit (character) to convert
-	 * @return value for the digit
-	 */
-	static int decodeDigit(byte data) {
-		char charData = (char) data;
-		if (charData <= 'Z' && charData >= 'A')
-			return charData - 'A';
-		if (charData <= 'z' && charData >= 'a')
-			return charData - 'a' + 26;
-		if (charData <= '9' && charData >= '0')
-			return charData - '0' + 52;
-		switch (charData) {
-			case '+' :
-				return 62;
-			case '/' :
-				return 63;
-			default :
-				throw new IllegalArgumentException("Invalid char to decode: " + data); //$NON-NLS-1$
-		}
-	}
-
-	/**
-	 * This method encodes the byte array into a char array in base 64 according
-	 * to the specification given by the RFC 1521 (5.2).
-	 * 
-	 * @param data the encoded char array
-	 * @return the byte array that needs to be encoded
-	 */
-	public static byte[] encode(byte[] data) {
-		int sourceChunks = data.length / 3;
-		int len = ((data.length + 2) / 3) * 4;
-		byte[] result = new byte[len];
-		int extraBytes = data.length - (sourceChunks * 3);
-		// Each 4 bytes of input (encoded) we end up with 3 bytes of output
-		int dataIndex = 0;
-		int resultIndex = 0;
-		int allBits = 0;
-		for (int i = 0; i < sourceChunks; i++) {
-			allBits = 0;
-			// Loop 3 times gathering input bits (3 * 8 = 24)
-			for (int j = 0; j < 3; j++)
-				allBits = (allBits << 8) | (data[dataIndex++] & 0xff);
-			// Loop 4 times generating output bits (4 * 6 = 24)
-			for (int j = resultIndex + 3; j >= resultIndex; j--) {
-				result[j] = (byte) digits[(allBits & 0x3f)]; // Bottom
-				// 6
-				// bits
-				allBits = allBits >>> 6;
-			}
-			resultIndex += 4; // processed 4 result bytes
-		}
-		// Now we do the extra bytes in case the original (non-encoded) data
-		// is not multiple of 4 bytes
-		switch (extraBytes) {
-			case 1 :
-				allBits = data[dataIndex++]; // actual byte
-				allBits = allBits << 8; // 8 bits of zeroes
-				allBits = allBits << 8; // 8 bits of zeroes
-				// Loop 4 times generating output bits (4 * 6 = 24)
-				for (int j = resultIndex + 3; j >= resultIndex; j--) {
-					result[j] = (byte) digits[(allBits & 0x3f)]; // Bottom
-					// 6
-					// bits
-					allBits = allBits >>> 6;
-				}
-				// 2 pad tags
-				result[result.length - 1] = (byte) '=';
-				result[result.length - 2] = (byte) '=';
-				break;
-			case 2 :
-				allBits = data[dataIndex++]; // actual byte
-				allBits = (allBits << 8) | (data[dataIndex++] & 0xff); // actual
-				// byte
-				allBits = allBits << 8; // 8 bits of zeroes
-				// Loop 4 times generating output bits (4 * 6 = 24)
-				for (int j = resultIndex + 3; j >= resultIndex; j--) {
-					result[j] = (byte) digits[(allBits & 0x3f)]; // Bottom
-					// 6
-					// bits
-					allBits = allBits >>> 6;
-				}
-				// 1 pad tag
-				result[result.length - 1] = (byte) '=';
-				break;
-		}
-		return result;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/ConfigurationPreferences.java b/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/ConfigurationPreferences.java
deleted file mode 100644
index 3d002b0..0000000
--- a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/ConfigurationPreferences.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*******************************************************************************
- * 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
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.core.internal.preferences;
-
-import java.net.URL;
-import java.util.HashSet;
-import java.util.Set;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.core.runtime.preferences.IEclipsePreferences;
-
-/**
- * @since 3.0
- */
-public class ConfigurationPreferences extends EclipsePreferences {
-
-	// cached values
-	private int segmentCount;
-	private String qualifier;
-	private IPath location;
-	private IEclipsePreferences loadLevel;
-	// cache which nodes have been loaded from disk
-	private static Set loadedNodes = new HashSet();
-	private static boolean initialized = false;
-	private static IPath baseLocation;
-
-	static {
-		URL url = PreferencesOSGiUtils.getDefault().getConfigurationLocation().getURL();
-		if (url != null)
-			baseLocation = new Path(url.getFile());
-	}
-
-	/**
-	 * Default constructor. Should only be called by #createExecutableExtension.
-	 */
-	public ConfigurationPreferences() {
-		this(null, null);
-	}
-
-	private ConfigurationPreferences(EclipsePreferences parent, String name) {
-		super(parent, name);
-
-		initializeChildren();
-
-		// cache the segment count
-		String path = absolutePath();
-		segmentCount = getSegmentCount(path);
-		if (segmentCount < 2)
-			return;
-
-		// cache the qualifier
-		qualifier = getSegment(path, 1);
-
-		// cache the location
-		if (qualifier == null)
-			return;
-		if (baseLocation != null)
-			location = computeLocation(baseLocation, qualifier);
-	}
-
-	protected IPath getLocation() {
-		return location;
-	}
-
-	protected boolean isAlreadyLoaded(IEclipsePreferences node) {
-		return loadedNodes.contains(node.name());
-	}
-
-	protected void loaded() {
-		loadedNodes.add(name());
-	}
-
-	/*
-	 * Return the node at which these preferences are loaded/saved.
-	 */
-	protected IEclipsePreferences getLoadLevel() {
-		if (loadLevel == null) {
-			if (qualifier == null)
-				return null;
-			// Make it relative to this node rather than navigating to it from the root.
-			// Walk backwards up the tree starting at this node.
-			// This is important to avoid a chicken/egg thing on startup.
-			IEclipsePreferences node = this;
-			for (int i = 2; i < segmentCount; i++)
-				node = (EclipsePreferences) node.parent();
-			loadLevel = node;
-		}
-		return loadLevel;
-	}
-
-	protected void initializeChildren() {
-		if (initialized || parent == null)
-			return;
-		try {
-			synchronized (this) {
-				if (baseLocation == null)
-					return;
-				String[] names = computeChildren(baseLocation);
-				for (int i = 0; i < names.length; i++)
-					addChild(names[i], null);
-			}
-		} finally {
-			initialized = true;
-		}
-	}
-
-	protected EclipsePreferences internalCreate(EclipsePreferences nodeParent, String nodeName, Object context) {
-		return new ConfigurationPreferences(nodeParent, nodeName);
-	}
-}
diff --git a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/DefaultPreferences.java b/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/DefaultPreferences.java
deleted file mode 100644
index 1ec791d..0000000
--- a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/DefaultPreferences.java
+++ /dev/null
@@ -1,312 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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.preferences;
-
-import java.io.*;
-import java.lang.ref.WeakReference;
-import java.net.URL;
-import java.util.*;
-import org.eclipse.core.internal.preferences.exchange.IProductPreferencesService;
-import org.eclipse.core.internal.runtime.RuntimeLog;
-import org.eclipse.core.runtime.*;
-import org.eclipse.core.runtime.preferences.*;
-import org.eclipse.osgi.util.NLS;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.osgi.util.tracker.ServiceTracker;
-
-/**
- * @since 3.0
- */
-public class DefaultPreferences extends EclipsePreferences {
-	// cache which nodes have been loaded from disk
-	private static Set loadedNodes = new HashSet();
-	private static final String KEY_PREFIX = "%"; //$NON-NLS-1$
-	private static final String KEY_DOUBLE_PREFIX = "%%"; //$NON-NLS-1$
-	private static final IPath NL_DIR = new Path("$nl$"); //$NON-NLS-1$
-
-	private static final String PROPERTIES_FILE_EXTENSION = "properties"; //$NON-NLS-1$
-	private static Properties productCustomization;
-	private static Properties productTranslation;
-	private static Properties commandLineCustomization;
-	private EclipsePreferences loadLevel;
-
-	// cached values
-	private String qualifier;
-	private int segmentCount;
-	private WeakReference pluginReference;
-
-	public static String pluginCustomizationFile = null;
-
-	/**
-	 * Default constructor for this class.
-	 */
-	public DefaultPreferences() {
-		this(null, null);
-	}
-
-	private DefaultPreferences(EclipsePreferences parent, String name, Object context) {
-		this(parent, name);
-		this.pluginReference = new WeakReference(context);
-	}
-
-	private DefaultPreferences(EclipsePreferences parent, String name) {
-		super(parent, name);
-
-		if (parent instanceof DefaultPreferences)
-			this.pluginReference = ((DefaultPreferences) parent).pluginReference;
-
-		// cache the segment count
-		String path = absolutePath();
-		segmentCount = getSegmentCount(path);
-		if (segmentCount < 2)
-			return;
-
-		// cache the qualifier
-		qualifier = getSegment(path, 1);
-	}
-
-	/*
-	 * Apply the values set in the bundle's install directory.
-	 * 
-	 * In Eclipse 2.1 this is equivalent to:
-	 *		/eclipse/plugins/<pluginID>/prefs.ini
-	 */
-	private void applyBundleDefaults() {
-		Bundle bundle = PreferencesOSGiUtils.getDefault().getBundle(name());
-		if (bundle == null)
-			return;
-		URL url = FileLocator.find(bundle, new Path(IPreferencesConstants.PREFERENCES_DEFAULT_OVERRIDE_FILE_NAME), null);
-		if (url == null) {
-			if (EclipsePreferences.DEBUG_PREFERENCE_GENERAL)
-				PrefsMessages.message("Preference default override file not found for bundle: " + bundle.getSymbolicName()); //$NON-NLS-1$
-			return;
-		}
-		URL transURL = FileLocator.find(bundle, NL_DIR.append(IPreferencesConstants.PREFERENCES_DEFAULT_OVERRIDE_BASE_NAME).addFileExtension(PROPERTIES_FILE_EXTENSION), null);
-		if (transURL == null && EclipsePreferences.DEBUG_PREFERENCE_GENERAL)
-			PrefsMessages.message("Preference translation file not found for bundle: " + bundle.getSymbolicName()); //$NON-NLS-1$
-		applyDefaults(name(), loadProperties(url), loadProperties(transURL));
-	}
-
-	/*
-	 * Apply the default values as specified in the file
-	 * as an argument on the command-line.
-	 */
-	private void applyCommandLineDefaults() {
-		// prime the cache the first time
-		if (commandLineCustomization == null) {
-			String filename = pluginCustomizationFile;
-			if (filename == null) {
-				if (EclipsePreferences.DEBUG_PREFERENCE_GENERAL)
-					PrefsMessages.message("Command-line preferences customization file not specified."); //$NON-NLS-1$
-				return;
-			}
-			if (EclipsePreferences.DEBUG_PREFERENCE_GENERAL)
-				PrefsMessages.message("Using command-line preference customization file: " + filename); //$NON-NLS-1$
-			commandLineCustomization = loadProperties(filename);
-		}
-		applyDefaults(null, commandLineCustomization, null);
-	}
-
-	/*
-	 * If the qualifier is null then the file is of the format:
-	 * 	pluginID/key=value
-	 * otherwise the file is of the format:
-	 * 	key=value
-	 */
-	private void applyDefaults(String id, Properties defaultValues, Properties translations) {
-		for (Enumeration e = defaultValues.keys(); e.hasMoreElements();) {
-			String fullKey = (String) e.nextElement();
-			String value = defaultValues.getProperty(fullKey);
-			if (value == null)
-				continue;
-			IPath childPath = new Path(fullKey);
-			String key = childPath.lastSegment();
-			childPath = childPath.removeLastSegments(1);
-			String localQualifier = id;
-			if (id == null) {
-				localQualifier = childPath.segment(0);
-				childPath = childPath.removeFirstSegments(1);
-			}
-			if (name().equals(localQualifier)) {
-				value = translatePreference(value, translations);
-				if (EclipsePreferences.DEBUG_PREFERENCE_SET)
-					PrefsMessages.message("Setting default preference: " + (new Path(absolutePath()).append(childPath).append(key)) + '=' + value); //$NON-NLS-1$
-				((EclipsePreferences) internalNode(childPath.toString(), false, null)).internalPut(key, value);
-			}
-		}
-	}
-
-	public IEclipsePreferences node(String childName, Object context) {
-		return internalNode(childName, true, context);
-	}
-
-	/*
-	 * Runtime defaults are the ones which are specified in code at runtime. 
-	 * 
-	 * In the Eclipse 2.1 world they were the ones which were specified in the
-	 * over-ridden Plugin#initializeDefaultPluginPreferences() method.
-	 * 
-	 * In Eclipse 3.0 they are set in the code which is indicated by the
-	 * extension to the plug-in default customizer extension point.
-	 */
-	private void applyRuntimeDefaults() {
-		WeakReference ref = PreferencesService.getDefault().applyRuntimeDefaults(name(), pluginReference);
-		if (ref != null)
-			pluginReference = ref;
-	}
-
-	/*
-	 * Apply the default values as specified by the file
-	 * in the product extension.
-	 * 
-	 * In Eclipse 2.1 this is equivalent to the plugin_customization.ini
-	 * file in the primary feature's plug-in directory.
-	 */
-	private void applyProductDefaults() {
-		// prime the cache the first time
-		if (productCustomization == null) {
-			BundleContext context = Activator.getContext();
-			if (context != null) {
-				ServiceTracker productTracker = new ServiceTracker(context, IProductPreferencesService.class.getName(), null);
-				productTracker.open();
-				IProductPreferencesService productSpecials = (IProductPreferencesService) productTracker.getService();
-				if (productSpecials != null) {
-					productCustomization = productSpecials.getProductCustomization();
-					productTranslation = productSpecials.getProductTranslation();
-				}
-				productTracker.close();
-			} else
-				PrefsMessages.message("Product-specified preferences called before plugin is started"); //$NON-NLS-1$
-		}
-		applyDefaults(null, productCustomization, productTranslation);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.osgi.service.prefs.Preferences#flush()
-	 */
-	public void flush() {
-		// default values are not persisted
-	}
-
-	protected IEclipsePreferences getLoadLevel() {
-		if (loadLevel == null) {
-			if (qualifier == null)
-				return null;
-			// Make it relative to this node rather than navigating to it from the root.
-			// Walk backwards up the tree starting at this node.
-			// This is important to avoid a chicken/egg thing on startup.
-			EclipsePreferences node = this;
-			for (int i = 2; i < segmentCount; i++)
-				node = (EclipsePreferences) node.parent();
-			loadLevel = node;
-		}
-		return loadLevel;
-	}
-
-	protected EclipsePreferences internalCreate(EclipsePreferences nodeParent, String nodeName, Object context) {
-		return new DefaultPreferences(nodeParent, nodeName, context);
-	}
-
-	protected boolean isAlreadyLoaded(IEclipsePreferences node) {
-		return loadedNodes.contains(node.name());
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.internal.preferences.EclipsePreferences#load()
-	 */
-	protected void load() {
-		loadDefaults();
-	}
-
-	private void loadDefaults() {
-		applyRuntimeDefaults();
-		applyBundleDefaults();
-		applyProductDefaults();
-		applyCommandLineDefaults();
-	}
-
-	private Properties loadProperties(URL url) {
-		Properties result = new Properties();
-		if (url == null)
-			return result;
-		InputStream input = null;
-		try {
-			input = url.openStream();
-			result.load(input);
-		} catch (IOException e) {
-			if (EclipsePreferences.DEBUG_PREFERENCE_GENERAL) {
-				PrefsMessages.message("Problem opening stream to preference customization file: " + url); //$NON-NLS-1$
-				e.printStackTrace();
-			}
-		} finally {
-			if (input != null)
-				try {
-					input.close();
-				} catch (IOException e) {
-					// ignore
-				}
-		}
-		return result;
-	}
-
-	private Properties loadProperties(String filename) {
-		Properties result = new Properties();
-		InputStream input = null;
-		try {
-			input = new BufferedInputStream(new FileInputStream(filename));
-			result.load(input);
-		} catch (FileNotFoundException e) {
-			if (EclipsePreferences.DEBUG_PREFERENCE_GENERAL)
-				PrefsMessages.message("Preference customization file not found: " + filename); //$NON-NLS-1$
-		} catch (IOException e) {
-			String message = NLS.bind(PrefsMessages.preferences_loadException, filename);
-			IStatus status = new Status(IStatus.ERROR, PrefsMessages.OWNER_NAME, IStatus.ERROR, message, e);
-			RuntimeLog.log(status);
-		} finally {
-			if (input != null)
-				try {
-					input.close();
-				} catch (IOException e) {
-					// ignore
-				}
-		}
-		return result;
-	}
-
-	protected void loaded() {
-		loadedNodes.add(name());
-	}
-
-	/* (non-Javadoc)
-	 * @see org.osgi.service.prefs.Preferences#sync()
-	 */
-	public void sync() {
-		// default values are not persisted
-	}
-
-	/**
-	 * Takes a preference value and a related resource bundle and
-	 * returns the translated version of this value (if one exists).
-	 */
-	private String translatePreference(String value, Properties props) {
-		value = value.trim();
-		if (props == null || value.startsWith(KEY_DOUBLE_PREFIX))
-			return value;
-		if (value.startsWith(KEY_PREFIX)) {
-			int ix = value.indexOf(" "); //$NON-NLS-1$
-			String key = ix == -1 ? value.substring(1) : value.substring(1, ix);
-			String dflt = ix == -1 ? value : value.substring(ix + 1);
-			return props.getProperty(key, dflt);
-		}
-		return value;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/EclipsePreferences.java b/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/EclipsePreferences.java
deleted file mode 100644
index f89fd60..0000000
--- a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/EclipsePreferences.java
+++ /dev/null
@@ -1,1167 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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
- *     Julian Chen - fix for bug #92572, jclRM
- *******************************************************************************/
-package org.eclipse.core.internal.preferences;
-
-import java.io.*;
-import java.util.*;
-import org.eclipse.core.internal.runtime.RuntimeLog;
-import org.eclipse.core.runtime.*;
-import org.eclipse.core.runtime.preferences.*;
-import org.eclipse.osgi.util.NLS;
-import org.osgi.service.prefs.BackingStoreException;
-import org.osgi.service.prefs.Preferences;
-
-/**
- * Represents a node in the Eclipse preference node hierarchy. This class
- * is used as a default implementation/super class for those nodes which
- * belong to scopes which are contributed by the Platform.
- * 
- * Implementation notes:
- * 
- *  - For thread safety, we always synchronize on the node object when writing
- * the children or properties fields.  Must ensure we don't synchronize when calling
- * client code such as listeners.
- * 
- * @since 3.0
- */
-public class EclipsePreferences implements IEclipsePreferences, IScope {
-
-	public static final String DEFAULT_PREFERENCES_DIRNAME = ".settings"; //$NON-NLS-1$
-	public static final String PREFS_FILE_EXTENSION = "prefs"; //$NON-NLS-1$
-	protected static final IEclipsePreferences[] EMPTY_NODE_ARRAY = new IEclipsePreferences[0];
-	protected static final String[] EMPTY_STRING_ARRAY = new String[0];
-	private static final String FALSE = "false"; //$NON-NLS-1$
-	private static final String TRUE = "true"; //$NON-NLS-1$
-	protected static final String VERSION_KEY = "eclipse.preferences.version"; //$NON-NLS-1$
-	protected static final String VERSION_VALUE = "1"; //$NON-NLS-1$
-	protected static final String PATH_SEPARATOR = String.valueOf(IPath.SEPARATOR);
-	protected static final String DOUBLE_SLASH = "//"; //$NON-NLS-1$
-	protected static final String EMPTY_STRING = ""; //$NON-NLS-1$
-
-	private String cachedPath;
-	protected Map children;
-	protected boolean dirty = false;
-	protected boolean loading = false;
-	protected final String name;
-	// the parent of an EclipsePreference node is always an EclipsePreference node. (or null)
-	protected final EclipsePreferences parent;
-	protected ImmutableMap properties = ImmutableMap.EMPTY;
-	protected boolean removed = false;
-	private ListenerList nodeChangeListeners;
-	private ListenerList preferenceChangeListeners;
-
-	public static boolean DEBUG_PREFERENCE_GENERAL = false;
-	public static boolean DEBUG_PREFERENCE_SET = false;
-	public static boolean DEBUG_PREFERENCE_GET = false;
-
-	protected final static String debugPluginName = "org.eclipse.equinox.preferences"; //$NON-NLS-1$
-
-	static {
-		DEBUG_PREFERENCE_GENERAL = PreferencesOSGiUtils.getDefault().getBooleanDebugOption(debugPluginName + "/general", false); //$NON-NLS-1$
-		DEBUG_PREFERENCE_SET = PreferencesOSGiUtils.getDefault().getBooleanDebugOption(debugPluginName + "/set", false); //$NON-NLS-1$
-		DEBUG_PREFERENCE_GET = PreferencesOSGiUtils.getDefault().getBooleanDebugOption(debugPluginName + "/get", false); //$NON-NLS-1$
-	}
-
-	public EclipsePreferences() {
-		this(null, null);
-	}
-
-	protected EclipsePreferences(EclipsePreferences parent, String name) {
-		super();
-		this.parent = parent;
-		this.name = name;
-	}
-
-	/*
-	 * @see org.osgi.service.prefs.Preferences#absolutePath()
-	 */
-	public String absolutePath() {
-		if (cachedPath == null) {
-			if (parent == null)
-				cachedPath = PATH_SEPARATOR;
-			else {
-				String parentPath = parent.absolutePath();
-				// if the parent is the root then we don't have to add a separator
-				// between the parent path and our path
-				if (parentPath.length() == 1)
-					cachedPath = parentPath + name();
-				else
-					cachedPath = parentPath + PATH_SEPARATOR + name();
-			}
-		}
-		return cachedPath;
-	}
-
-	public void accept(IPreferenceNodeVisitor visitor) throws BackingStoreException {
-		if (!visitor.visit(this))
-			return;
-		IEclipsePreferences[] toVisit = getChildren(true);
-		for (int i = 0; i < toVisit.length; i++)
-			toVisit[i].accept(visitor);
-	}
-
-	protected synchronized IEclipsePreferences addChild(String childName, IEclipsePreferences child) {
-		//Thread safety: synchronize method to protect modification of children field
-		if (children == null)
-			children = Collections.synchronizedMap(new HashMap());
-		children.put(childName, child == null ? (Object) childName : child);
-		return child;
-	}
-
-	/*
-	 * @see org.eclipse.core.runtime.IEclipsePreferences#addNodeChangeListener(org.eclipse.core.runtime.IEclipsePreferences.INodeChangeListener)
-	 */
-	public void addNodeChangeListener(INodeChangeListener listener) {
-		checkRemoved();
-		if (nodeChangeListeners == null)
-			nodeChangeListeners = new ListenerList();
-		nodeChangeListeners.add(listener);
-		if (DEBUG_PREFERENCE_GENERAL)
-			PrefsMessages.message("Added preference node change listener: " + listener + " to: " + absolutePath()); //$NON-NLS-1$ //$NON-NLS-2$
-	}
-
-	/*
-	 * @see org.eclipse.core.runtime.IEclipsePreferences#addPreferenceChangeListener(org.eclipse.core.runtime.IEclipsePreferences.IPreferenceChangeListener)
-	 */
-	public void addPreferenceChangeListener(IPreferenceChangeListener listener) {
-		checkRemoved();
-		if (preferenceChangeListeners == null)
-			preferenceChangeListeners = new ListenerList();
-		preferenceChangeListeners.add(listener);
-		if (DEBUG_PREFERENCE_GENERAL)
-			PrefsMessages.message("Added preference property change listener: " + listener + " to: " + absolutePath()); //$NON-NLS-1$ //$NON-NLS-2$
-	}
-
-	private IEclipsePreferences calculateRoot() {
-		IEclipsePreferences result = this;
-		while (result.parent() != null)
-			result = (IEclipsePreferences) result.parent();
-		return result;
-	}
-
-	/*
-	 * Convenience method for throwing an exception when methods
-	 * are called on a removed node.
-	 */
-	protected void checkRemoved() {
-		if (removed)
-			throw new IllegalStateException(NLS.bind(PrefsMessages.preferences_removedNode, name));
-	}
-
-	/*
-	 * @see org.osgi.service.prefs.Preferences#childrenNames()
-	 */
-	public String[] childrenNames() {
-		// illegal state if this node has been removed
-		checkRemoved();
-		return internalChildNames();
-	}
-
-	protected String[] internalChildNames() {
-		Map temp = children;
-		if (temp == null || temp.size() == 0)
-			return EMPTY_STRING_ARRAY;
-		return (String[]) temp.keySet().toArray(EMPTY_STRING_ARRAY);
-	}
-
-	/*
-	 * @see org.osgi.service.prefs.Preferences#clear()
-	 */
-	public void clear() {
-		// illegal state if this node has been removed
-		checkRemoved();
-		// call each one separately (instead of Properties.clear) so
-		// clients get change notification
-		String[] keys = properties.keys();
-		for (int i = 0; i < keys.length; i++)
-			remove(keys[i]);
-		makeDirty();
-	}
-
-	protected String[] computeChildren(IPath root) {
-		if (root == null)
-			return EMPTY_STRING_ARRAY;
-		IPath dir = root.append(DEFAULT_PREFERENCES_DIRNAME);
-		final ArrayList result = new ArrayList();
-		final String extension = '.' + PREFS_FILE_EXTENSION;
-		File file = dir.toFile();
-		File[] totalFiles = file.listFiles();
-		if (totalFiles != null) {
-			for (int i = 0; i < totalFiles.length; i++) {
-				if (totalFiles[i].isFile()) {
-					String filename = totalFiles[i].getName();
-					if (filename.endsWith(extension)) {
-						String shortName = filename.substring(0, filename.length() - extension.length());
-						result.add(shortName);
-					}
-				}
-			}
-		}
-		return (String[]) result.toArray(EMPTY_STRING_ARRAY);
-	}
-
-	protected IPath computeLocation(IPath root, String qualifier) {
-		return root == null ? null : root.append(DEFAULT_PREFERENCES_DIRNAME).append(qualifier).addFileExtension(PREFS_FILE_EXTENSION);
-	}
-
-	/*
-	 * Version 1 (current version)
-	 * path/key=value
-	 */
-	protected static void convertFromProperties(EclipsePreferences node, Properties table, boolean notify) {
-		String version = table.getProperty(VERSION_KEY);
-		if (version == null || !VERSION_VALUE.equals(version)) {
-			// ignore for now
-		}
-		table.remove(VERSION_KEY);
-		for (Iterator i = table.keySet().iterator(); i.hasNext();) {
-			String fullKey = (String) i.next();
-			String value = table.getProperty(fullKey);
-			if (value != null) {
-				String[] splitPath = decodePath(fullKey);
-				String path = splitPath[0];
-				path = makeRelative(path);
-				String key = splitPath[1];
-				if (DEBUG_PREFERENCE_SET)
-					PrefsMessages.message("Setting preference: " + path + '/' + key + '=' + value); //$NON-NLS-1$
-				//use internal methods to avoid notifying listeners
-				EclipsePreferences childNode = (EclipsePreferences) node.internalNode(path, false, null);
-				String oldValue = childNode.internalPut(key, value);
-				// notify listeners if applicable
-				if (notify && !value.equals(oldValue))
-					node.firePreferenceEvent(key, oldValue, value);
-			}
-		}
-		PreferencesService.getDefault().shareStrings();
-	}
-
-	/* 
-	 * Helper method to convert this node to a Properties file suitable
-	 * for persistence.
-	 */
-	protected Properties convertToProperties(Properties result, String prefix) throws BackingStoreException {
-		// add the key/value pairs from this node
-		boolean addSeparator = prefix.length() != 0;
-		//thread safety: copy reference in case of concurrent change
-		ImmutableMap temp = properties;
-		String[] keys = temp.keys();
-		for (int i = 0, imax = keys.length; i < imax; i++) {
-			String value = temp.get(keys[i]);
-			if (value != null)
-				result.put(encodePath(prefix, keys[i]), value);
-		}
-		// recursively add the child information
-		IEclipsePreferences[] childNodes = getChildren(true);
-		for (int i = 0; i < childNodes.length; i++) {
-			EclipsePreferences child = (EclipsePreferences) childNodes[i];
-			String fullPath = addSeparator ? prefix + PATH_SEPARATOR + child.name() : child.name();
-			child.convertToProperties(result, fullPath);
-		}
-		PreferencesService.getDefault().shareStrings();
-		return result;
-	}
-
-	/*
-	 * @see org.eclipse.core.runtime.preferences.IScope#create(org.eclipse.core.runtime.preferences.IEclipsePreferences)
-	 */
-	public IEclipsePreferences create(IEclipsePreferences nodeParent, String nodeName) {
-		return create((EclipsePreferences) nodeParent, nodeName, null);
-	}
-
-	protected boolean isLoading() {
-		return loading;
-	}
-
-	protected void setLoading(boolean isLoading) {
-		loading = isLoading;
-	}
-
-	public IEclipsePreferences create(EclipsePreferences nodeParent, String nodeName, Object context) {
-		EclipsePreferences result = internalCreate(nodeParent, nodeName, context);
-		nodeParent.addChild(nodeName, result);
-		IEclipsePreferences loadLevel = result.getLoadLevel();
-
-		// if this node or a parent node is not the load level then return
-		if (loadLevel == null)
-			return result;
-
-		// if the result node is not a load level, then a child must be
-		if (result != loadLevel)
-			return result;
-
-		// the result node is a load level
-		if (isAlreadyLoaded(result) || result.isLoading())
-			return result;
-		try {
-			result.setLoading(true);
-			result.loadLegacy();
-			result.load();
-			result.loaded();
-			result.flush();
-		} catch (BackingStoreException e) {
-			IPath location = result.getLocation();
-			String message = NLS.bind(PrefsMessages.preferences_loadException, location == null ? EMPTY_STRING : location.toString());
-			IStatus status = new Status(IStatus.ERROR, PrefsMessages.OWNER_NAME, IStatus.ERROR, message, e);
-			RuntimeLog.log(status);
-		} finally {
-			result.setLoading(false);
-		}
-		return result;
-	}
-
-	/*
-	 * @see org.osgi.service.prefs.Preferences#flush()
-	 */
-	public void flush() throws BackingStoreException {
-		// illegal state if this node has been removed
-		checkRemoved();
-
-		IEclipsePreferences loadLevel = getLoadLevel();
-
-		// if this node or a parent is not the load level, then flush the children
-		if (loadLevel == null) {
-			String[] childrenNames = childrenNames();
-			for (int i = 0; i < childrenNames.length; i++)
-				node(childrenNames[i]).flush();
-			return;
-		}
-
-		// a parent is the load level for this node
-		if (this != loadLevel) {
-			loadLevel.flush();
-			return;
-		}
-
-		// this node is a load level
-		// any work to do?
-		if (!dirty)
-			return;
-		//remove dirty bit before saving, to ensure that concurrent 
-		//changes during save mark the store as dirty
-		dirty = false;
-		try {
-			save();
-		} catch (BackingStoreException e) {
-			//mark it dirty again because the save failed
-			dirty = true;
-			throw e;
-		}
-	}
-
-	/*
-	 * @see org.osgi.service.prefs.Preferences#get(java.lang.String, java.lang.String)
-	 */
-	public String get(String key, String defaultValue) {
-		String value = internalGet(key);
-		return value == null ? defaultValue : value;
-	}
-
-	/*
-	 * @see org.osgi.service.prefs.Preferences#getBoolean(java.lang.String, boolean)
-	 */
-	public boolean getBoolean(String key, boolean defaultValue) {
-		String value = internalGet(key);
-		return value == null ? defaultValue : TRUE.equalsIgnoreCase(value);
-	}
-
-	/*
-	 * @see org.osgi.service.prefs.Preferences#getByteArray(java.lang.String, byte[])
-	 */
-	public byte[] getByteArray(String key, byte[] defaultValue) {
-		String value = internalGet(key);
-		return value == null ? defaultValue : Base64.decode(value.getBytes());
-	}
-
-	/*
-	 * Return a boolean value indicating whether or not a child with the given
-	 * name is known to this node.
-	 */
-	protected synchronized boolean childExists(String childName) {
-		if (children == null)
-			return false;
-		return children.get(childName) != null;
-	}
-
-	/**
-	 * Thread safe way to obtain a child for a given key. Returns the child
-	 * that matches the given key, or null if there is no matching child.
-	 */
-	protected IEclipsePreferences getChild(String key, Object context, boolean create) {
-		synchronized (this) {
-			if (children == null)
-				return null;
-			Object value = children.get(key);
-			if (value == null)
-				return null;
-			if (value instanceof IEclipsePreferences)
-				return (IEclipsePreferences) value;
-			// if we aren't supposed to create this node, then 
-			// just return null
-			if (!create)
-				return null;
-		}
-		return addChild(key, create(this, key, context));
-	}
-
-	/**
-	 * Thread safe way to obtain all children of this node. Never returns null.
-	 */
-	protected IEclipsePreferences[] getChildren(boolean create) {
-		ArrayList result = new ArrayList();
-		String[] names = internalChildNames();
-		for (int i = 0; i < names.length; i++) {
-			IEclipsePreferences child = getChild(names[i], null, create);
-			if (child != null)
-				result.add(child);
-		}
-		return (IEclipsePreferences[]) result.toArray(EMPTY_NODE_ARRAY);
-	}
-
-	/*
-	 * @see org.osgi.service.prefs.Preferences#getDouble(java.lang.String, double)
-	 */
-	public double getDouble(String key, double defaultValue) {
-		String value = internalGet(key);
-		double result = defaultValue;
-		if (value != null)
-			try {
-				result = Double.parseDouble(value);
-			} catch (NumberFormatException e) {
-				// use default
-			}
-		return result;
-	}
-
-	/*
-	 * @see org.osgi.service.prefs.Preferences#getFloat(java.lang.String, float)
-	 */
-	public float getFloat(String key, float defaultValue) {
-		String value = internalGet(key);
-		float result = defaultValue;
-		if (value != null)
-			try {
-				result = Float.parseFloat(value);
-			} catch (NumberFormatException e) {
-				// use default
-			}
-		return result;
-	}
-
-	/*
-	 * @see org.osgi.service.prefs.Preferences#getInt(java.lang.String, int)
-	 */
-	public int getInt(String key, int defaultValue) {
-		String value = internalGet(key);
-		int result = defaultValue;
-		if (value != null)
-			try {
-				result = Integer.parseInt(value);
-			} catch (NumberFormatException e) {
-				// use default
-			}
-		return result;
-	}
-
-	protected IEclipsePreferences getLoadLevel() {
-		return null;
-	}
-
-	/*
-	 * Subclasses to over-ride
-	 */
-	protected IPath getLocation() {
-		return null;
-	}
-
-	/*
-	 * @see org.osgi.service.prefs.Preferences#getLong(java.lang.String, long)
-	 */
-	public long getLong(String key, long defaultValue) {
-		String value = internalGet(key);
-		long result = defaultValue;
-		if (value != null)
-			try {
-				result = Long.parseLong(value);
-			} catch (NumberFormatException e) {
-				// use default
-			}
-		return result;
-	}
-
-	protected EclipsePreferences internalCreate(EclipsePreferences nodeParent, String nodeName, Object context) {
-		return new EclipsePreferences(nodeParent, nodeName);
-	}
-
-	/**
-	 * Returns the existing value at the given key, or null if
-	 * no such value exists.
-	 */
-	protected String internalGet(String key) {
-		// throw NPE if key is null
-		if (key == null)
-			throw new NullPointerException();
-		// illegal state if this node has been removed
-		checkRemoved();
-		String result = properties.get(key);
-		if (DEBUG_PREFERENCE_GET)
-			PrefsMessages.message("Getting preference value: " + absolutePath() + '/' + key + "->" + result); //$NON-NLS-1$ //$NON-NLS-2$
-		return result;
-	}
-
-	/**
-	 * Implements the node(String) method, and optionally notifies listeners.
-	 */
-	protected IEclipsePreferences internalNode(String path, boolean notify, Object context) {
-
-		// illegal state if this node has been removed
-		checkRemoved();
-
-		// short circuit this node
-		if (path.length() == 0)
-			return this;
-
-		// if we have an absolute path use the root relative to 
-		// this node instead of the global root
-		// in case we have a different hierarchy. (e.g. export)
-		if (path.charAt(0) == IPath.SEPARATOR)
-			return (IEclipsePreferences) calculateRoot().node(path.substring(1));
-
-		int index = path.indexOf(IPath.SEPARATOR);
-		String key = index == -1 ? path : path.substring(0, index);
-		boolean added = false;
-		IEclipsePreferences child = getChild(key, context, true);
-		if (child == null) {
-			child = create(this, key, context);
-			added = true;
-		}
-		// notify listeners if a child was added
-		if (added && notify)
-			fireNodeEvent(new NodeChangeEvent(this, child), true);
-		return (IEclipsePreferences) child.node(index == -1 ? EMPTY_STRING : path.substring(index + 1));
-	}
-
-	/**
-	 * Stores the given (key,value) pair, performing lazy initialization of the
-	 * properties field if necessary. Returns the old value for the given key,
-	 * or null if no value existed.
-	 */
-	protected String internalPut(String key, String newValue) {
-		// illegal state if this node has been removed
-		checkRemoved();
-		String oldValue = properties.get(key);
-		if (oldValue != null && oldValue.equals(newValue))
-			return oldValue;
-		if (DEBUG_PREFERENCE_SET)
-			PrefsMessages.message("Setting preference: " + absolutePath() + '/' + key + '=' + newValue); //$NON-NLS-1$
-		properties = properties.put(key, newValue);
-		return oldValue;
-	}
-
-	/*
-	 * Subclasses to over-ride.
-	 */
-	protected boolean isAlreadyLoaded(IEclipsePreferences node) {
-		return true;
-	}
-
-	/*
-	 * @see org.osgi.service.prefs.Preferences#keys()
-	 */
-	public String[] keys() {
-		// illegal state if this node has been removed
-		checkRemoved();
-		return properties.keys();
-	}
-
-	protected void load() throws BackingStoreException {
-		load(getLocation());
-	}
-
-	protected static Properties loadProperties(IPath location) throws BackingStoreException {
-		if (DEBUG_PREFERENCE_GENERAL)
-			PrefsMessages.message("Loading preferences from file: " + location); //$NON-NLS-1$
-		InputStream input = null;
-		Properties result = new Properties();
-		try {
-			input = new BufferedInputStream(new FileInputStream(location.toFile()));
-			result.load(input);
-		} catch (FileNotFoundException e) {
-			// file doesn't exist but that's ok.
-			if (DEBUG_PREFERENCE_GENERAL)
-				PrefsMessages.message("Preference file does not exist: " + location); //$NON-NLS-1$
-			return result;
-		} catch (IOException e) {
-			String message = NLS.bind(PrefsMessages.preferences_loadException, location);
-			log(new Status(IStatus.INFO, PrefsMessages.OWNER_NAME, IStatus.INFO, message, e));
-			throw new BackingStoreException(message);
-		} finally {
-			if (input != null)
-				try {
-					input.close();
-				} catch (IOException e) {
-					// ignore
-				}
-		}
-		return result;
-	}
-
-	protected void load(IPath location) throws BackingStoreException {
-		if (location == null) {
-			if (DEBUG_PREFERENCE_GENERAL)
-				PrefsMessages.message("Unable to determine location of preference file for node: " + absolutePath()); //$NON-NLS-1$
-			return;
-		}
-		Properties fromDisk = loadProperties(location);
-		convertFromProperties(this, fromDisk, false);
-	}
-
-	protected void loaded() {
-		// do nothing
-	}
-
-	protected void loadLegacy() {
-		// sub-classes to over-ride if necessary
-	}
-
-	public static void log(IStatus status) {
-		RuntimeLog.log(status);
-	}
-
-	protected void makeDirty() {
-		EclipsePreferences node = this;
-		while (node != null && !node.removed) {
-			node.dirty = true;
-			node = (EclipsePreferences) node.parent();
-		}
-	}
-
-	public boolean isDirty() {
-		return dirty;
-	}
-
-	/*
-	 * @see org.osgi.service.prefs.Preferences#name()
-	 */
-	public String name() {
-		return name;
-	}
-
-	/*
-	 * @see org.osgi.service.prefs.Preferences#node(java.lang.String)
-	 */
-	public Preferences node(String pathName) {
-		return internalNode(pathName, true, null);
-	}
-
-	protected void fireNodeEvent(final NodeChangeEvent event, final boolean added) {
-		if (nodeChangeListeners == null)
-			return;
-		Object[] listeners = nodeChangeListeners.getListeners();
-		for (int i = 0; i < listeners.length; i++) {
-			final INodeChangeListener listener = (INodeChangeListener) listeners[i];
-			ISafeRunnable job = new ISafeRunnable() {
-				public void handleException(Throwable exception) {
-					// already logged in Platform#run()
-				}
-
-				public void run() throws Exception {
-					if (added)
-						listener.added(event);
-					else
-						listener.removed(event);
-				}
-			};
-			SafeRunner.run(job);
-		}
-	}
-
-	/*
-	 * @see org.osgi.service.prefs.Preferences#nodeExists(java.lang.String)
-	 */
-	public boolean nodeExists(String path) throws BackingStoreException {
-		// short circuit for checking this node
-		if (path.length() == 0)
-			return !removed;
-
-		// illegal state if this node has been removed.
-		// do this AFTER checking for the empty string.
-		checkRemoved();
-
-		// use the root relative to this node instead of the global root
-		// in case we have a different hierarchy. (e.g. export)
-		if (path.charAt(0) == IPath.SEPARATOR)
-			return calculateRoot().nodeExists(path.substring(1));
-
-		int index = path.indexOf(IPath.SEPARATOR);
-		boolean noSlash = index == -1;
-
-		// if we are looking for a simple child then just look in the table and return
-		if (noSlash)
-			return childExists(path);
-
-		// otherwise load the parent of the child and then recursively ask
-		String childName = path.substring(0, index);
-		if (!childExists(childName))
-			return false;
-		IEclipsePreferences child = getChild(childName, null, true);
-		if (child == null)
-			return false;
-		return child.nodeExists(path.substring(index + 1));
-	}
-
-	/*
-	 * @see org.osgi.service.prefs.Preferences#parent()
-	 */
-	public Preferences parent() {
-		// illegal state if this node has been removed
-		checkRemoved();
-		return parent;
-	}
-
-	/*
-	 * Convenience method for notifying preference change listeners.
-	 */
-	protected void firePreferenceEvent(String key, Object oldValue, Object newValue) {
-		if (preferenceChangeListeners == null)
-			return;
-		Object[] listeners = preferenceChangeListeners.getListeners();
-		final PreferenceChangeEvent event = new PreferenceChangeEvent(this, key, oldValue, newValue);
-		for (int i = 0; i < listeners.length; i++) {
-			final IPreferenceChangeListener listener = (IPreferenceChangeListener) listeners[i];
-			ISafeRunnable job = new ISafeRunnable() {
-				public void handleException(Throwable exception) {
-					// already logged in Platform#run()
-				}
-
-				public void run() throws Exception {
-					listener.preferenceChange(event);
-				}
-			};
-			SafeRunner.run(job);
-		}
-	}
-
-	/*
-	 * @see org.osgi.service.prefs.Preferences#put(java.lang.String, java.lang.String)
-	 */
-	public void put(String key, String newValue) {
-		if (key == null || newValue == null)
-			throw new NullPointerException();
-		String oldValue = internalPut(key, newValue);
-		if (!newValue.equals(oldValue)) {
-			makeDirty();
-			firePreferenceEvent(key, oldValue, newValue);
-		}
-	}
-
-	/*
-	 * @see org.osgi.service.prefs.Preferences#putBoolean(java.lang.String, boolean)
-	 */
-	public void putBoolean(String key, boolean value) {
-		if (key == null)
-			throw new NullPointerException();
-		String newValue = value ? TRUE : FALSE;
-		String oldValue = internalPut(key, newValue);
-		if (!newValue.equals(oldValue)) {
-			makeDirty();
-			firePreferenceEvent(key, oldValue, newValue);
-		}
-	}
-
-	/*
-	 * @see org.osgi.service.prefs.Preferences#putByteArray(java.lang.String, byte[])
-	 */
-	public void putByteArray(String key, byte[] value) {
-		if (key == null || value == null)
-			throw new NullPointerException();
-		String newValue = new String(Base64.encode(value));
-		String oldValue = internalPut(key, newValue);
-		if (!newValue.equals(oldValue)) {
-			makeDirty();
-			firePreferenceEvent(key, oldValue, newValue);
-		}
-	}
-
-	/*
-	 * @see org.osgi.service.prefs.Preferences#putDouble(java.lang.String, double)
-	 */
-	public void putDouble(String key, double value) {
-		if (key == null)
-			throw new NullPointerException();
-		String newValue = Double.toString(value);
-		String oldValue = internalPut(key, newValue);
-		if (!newValue.equals(oldValue)) {
-			makeDirty();
-			firePreferenceEvent(key, oldValue, newValue);
-		}
-	}
-
-	/*
-	 * @see org.osgi.service.prefs.Preferences#putFloat(java.lang.String, float)
-	 */
-	public void putFloat(String key, float value) {
-		if (key == null)
-			throw new NullPointerException();
-		String newValue = Float.toString(value);
-		String oldValue = internalPut(key, newValue);
-		if (!newValue.equals(oldValue)) {
-			makeDirty();
-			firePreferenceEvent(key, oldValue, newValue);
-		}
-	}
-
-	/*
-	 * @see org.osgi.service.prefs.Preferences#putInt(java.lang.String, int)
-	 */
-	public void putInt(String key, int value) {
-		if (key == null)
-			throw new NullPointerException();
-		String newValue = Integer.toString(value);
-		String oldValue = internalPut(key, newValue);
-		if (!newValue.equals(oldValue)) {
-			makeDirty();
-			firePreferenceEvent(key, oldValue, newValue);
-		}
-	}
-
-	/*
-	 * @see org.osgi.service.prefs.Preferences#putLong(java.lang.String, long)
-	 */
-	public void putLong(String key, long value) {
-		if (key == null)
-			throw new NullPointerException();
-		String newValue = Long.toString(value);
-		String oldValue = internalPut(key, newValue);
-		if (!newValue.equals(oldValue)) {
-			makeDirty();
-			firePreferenceEvent(key, oldValue, newValue);
-		}
-	}
-
-	/*
-	 * @see org.osgi.service.prefs.Preferences#remove(java.lang.String)
-	 */
-	public void remove(String key) {
-		String oldValue = properties.get(key);
-		if (oldValue == null)
-			return;
-		properties = properties.removeKey(key);
-		makeDirty();
-		firePreferenceEvent(key, oldValue, null);
-	}
-
-	/*
-	 * @see org.osgi.service.prefs.Preferences#removeNode()
-	 */
-	public void removeNode() throws BackingStoreException {
-		// illegal state if this node has been removed
-		checkRemoved();
-		// clear all the property values. do it "the long way" so 
-		// everyone gets notification
-		String[] keys = keys();
-		for (int i = 0; i < keys.length; i++)
-			remove(keys[i]);
-		// don't remove the global root or the scope root from the 
-		// parent but remove all its children
-		if (parent != null && !(parent instanceof RootPreferences)) {
-			// remove the node from the parent's collection and notify listeners
-			removed = true;
-			parent.removeNode(this);
-		}
-		IEclipsePreferences[] childNodes = getChildren(false);
-		for (int i = 0; i < childNodes.length; i++)
-			try {
-				childNodes[i].removeNode();
-			} catch (IllegalStateException e) {
-				// ignore since we only get this exception if we have already
-				// been removed. no work to do.
-			}
-	}
-
-	/*
-	 * Remove the child from the collection and notify the listeners if something
-	 * was actually removed.
-	 */
-	protected void removeNode(IEclipsePreferences child) {
-		boolean wasRemoved = false;
-		synchronized (this) {
-			if (children != null) {
-				wasRemoved = children.remove(child.name()) != null;
-				if (wasRemoved)
-					makeDirty();
-				if (children.isEmpty())
-					children = null;
-			}
-		}
-		if (wasRemoved)
-			fireNodeEvent(new NodeChangeEvent(this, child), false);
-	}
-
-	/*
-	 * Remove non-initialized node from the collection.
-	 */
-	protected void removeNode(String key) {
-		synchronized (this) {
-			if (children != null) {
-				boolean wasRemoved = children.remove(key) != null;
-				if (wasRemoved)
-					makeDirty();
-				if (children.isEmpty())
-					children = null;
-			}
-		}
-	}
-
-	/*
-	 * @see org.eclipse.core.runtime.IEclipsePreferences#removeNodeChangeListener(org.eclipse.core.runtime.IEclipsePreferences.removeNodeChangeListener)
-	 */
-	public void removeNodeChangeListener(INodeChangeListener listener) {
-		checkRemoved();
-		if (nodeChangeListeners == null)
-			return;
-		nodeChangeListeners.remove(listener);
-		if (nodeChangeListeners.size() == 0)
-			nodeChangeListeners = null;
-		if (DEBUG_PREFERENCE_GENERAL)
-			PrefsMessages.message("Removed preference node change listener: " + listener + " from: " + absolutePath()); //$NON-NLS-1$ //$NON-NLS-2$
-	}
-
-	/*
-	 * @see org.eclipse.core.runtime.IEclipsePreferences#removePreferenceChangeListener(org.eclipse.core.runtime.IEclipsePreferences.IPreferenceChangeListener)
-	 */
-	public void removePreferenceChangeListener(IPreferenceChangeListener listener) {
-		checkRemoved();
-		if (preferenceChangeListeners == null)
-			return;
-		preferenceChangeListeners.remove(listener);
-		if (preferenceChangeListeners.size() == 0)
-			preferenceChangeListeners = null;
-		if (DEBUG_PREFERENCE_GENERAL)
-			PrefsMessages.message("Removed preference property change listener: " + listener + " from: " + absolutePath()); //$NON-NLS-1$ //$NON-NLS-2$
-	}
-
-	protected void save() throws BackingStoreException {
-		save(getLocation());
-	}
-
-	protected void save(IPath location) throws BackingStoreException {
-		if (location == null) {
-			if (DEBUG_PREFERENCE_GENERAL)
-				PrefsMessages.message("Unable to determine location of preference file for node: " + absolutePath()); //$NON-NLS-1$
-			return;
-		}
-		if (DEBUG_PREFERENCE_GENERAL)
-			PrefsMessages.message("Saving preferences to file: " + location); //$NON-NLS-1$
-		Properties table = convertToProperties(new Properties(), EMPTY_STRING);
-		if (table.isEmpty()) {
-			// nothing to save. delete existing file if one exists.
-			if (location.toFile().exists() && !location.toFile().delete()) {
-				String message = NLS.bind(PrefsMessages.preferences_failedDelete, location);
-				log(new Status(IStatus.WARNING, PrefsMessages.OWNER_NAME, IStatus.WARNING, message, null));
-			}
-			return;
-		}
-		table.put(VERSION_KEY, VERSION_VALUE);
-		OutputStream output = null;
-		FileOutputStream fos = null;
-		try {
-			// create the parent dirs if they don't exist
-			File parentFile = location.toFile().getParentFile();
-			if (parentFile == null)
-				return;
-			parentFile.mkdirs();
-			// set append to be false so we overwrite current settings.
-			fos = new FileOutputStream(location.toOSString(), false);
-			output = new BufferedOutputStream(fos);
-			table.store(output, null);
-			output.flush();
-			fos.getFD().sync();
-		} catch (IOException e) {
-			String message = NLS.bind(PrefsMessages.preferences_saveException, location);
-			log(new Status(IStatus.ERROR, PrefsMessages.OWNER_NAME, IStatus.ERROR, message, e));
-			throw new BackingStoreException(message);
-		} finally {
-			if (output != null)
-				try {
-					output.close();
-				} catch (IOException e) {
-					// ignore
-				}
-		}
-	}
-
-	/**
-	 * Traverses the preference hierarchy rooted at this node, and adds
-	 * all preference key and value strings to the provided pool.  If an added
-	 * string was already in the pool, all references will be replaced with the
-	 * canonical copy of the string.
-	 * 
-	 * @param pool The pool to share strings in
-	 */
-	public void shareStrings(StringPool pool) {
-		properties.shareStrings(pool);
-		IEclipsePreferences[] myChildren = getChildren(false);
-		for (int i = 0; i < myChildren.length; i++)
-			if (myChildren[i] instanceof EclipsePreferences)
-				((EclipsePreferences) myChildren[i]).shareStrings(pool);
-	}
-
-	/*
-	 * Encode the given path and key combo to a form which is suitable for
-	 * persisting or using when searching. If the key contains a slash character
-	 * then we must use a double-slash to indicate the end of the 
-	 * path/the beginning of the key.
-	 */
-	public static String encodePath(String path, String key) {
-		String result;
-		int pathLength = path == null ? 0 : path.length();
-		if (key.indexOf(IPath.SEPARATOR) == -1) {
-			if (pathLength == 0)
-				result = key;
-			else
-				result = path + IPath.SEPARATOR + key;
-		} else {
-			if (pathLength == 0)
-				result = DOUBLE_SLASH + key;
-			else
-				result = path + DOUBLE_SLASH + key;
-		}
-		return result;
-	}
-
-	/*
-	 * Return the segment from the given path or null.
-	 * "segment" parameter is 0-based.
-	 */
-	public static String getSegment(String path, int segment) {
-		int start = path.indexOf(IPath.SEPARATOR) == 0 ? 1 : 0;
-		int end = path.indexOf(IPath.SEPARATOR, start);
-		if (end == path.length() - 1)
-			end = -1;
-		for (int i = 0; i < segment; i++) {
-			if (end == -1)
-				return null;
-			start = end + 1;
-			end = path.indexOf(IPath.SEPARATOR, start);
-		}
-		if (end == -1)
-			end = path.length();
-		return path.substring(start, end);
-	}
-
-	public static int getSegmentCount(String path) {
-		StringTokenizer tokenizer = new StringTokenizer(path, String.valueOf(IPath.SEPARATOR));
-		return tokenizer.countTokens();
-	}
-
-	/*
-	 * Return a relative path
-	 */
-	public static String makeRelative(String path) {
-		String result = path;
-		if (path == null)
-			return EMPTY_STRING;
-		if (path.length() > 0 && path.charAt(0) == IPath.SEPARATOR)
-			result = path.length() == 0 ? EMPTY_STRING : path.substring(1);
-		return result;
-	}
-
-	/*
-	 * Return a 2 element String array.
-	 * 	element 0 - the path
-	 * 	element 1 - the key
-	 * The path may be null.
-	 * The key is never null.
-	 */
-	public static String[] decodePath(String fullPath) {
-		String key = null;
-		String path = null;
-
-		// check to see if we have an indicator which tells us where the path ends
-		int index = fullPath.indexOf(DOUBLE_SLASH);
-		if (index == -1) {
-			// we don't have a double-slash telling us where the path ends 
-			// so the path is up to the last slash character
-			int lastIndex = fullPath.lastIndexOf(IPath.SEPARATOR);
-			if (lastIndex == -1) {
-				key = fullPath;
-			} else {
-				path = fullPath.substring(0, lastIndex);
-				key = fullPath.substring(lastIndex + 1);
-			}
-		} else {
-			// the child path is up to the double-slash and the key
-			// is the string after it
-			path = fullPath.substring(0, index);
-			key = fullPath.substring(index + 2);
-		}
-
-		// adjust if we have an absolute path
-		if (path != null)
-			if (path.length() == 0)
-				path = null;
-			else if (path.charAt(0) == IPath.SEPARATOR)
-				path = path.substring(1);
-
-		return new String[] {path, key};
-	}
-
-	/*
-	 * @see org.osgi.service.prefs.Preferences#sync()
-	 */
-
-	public void sync() throws BackingStoreException {
-		// illegal state if this node has been removed
-		checkRemoved();
-		IEclipsePreferences node = getLoadLevel();
-		if (node == null) {
-			if (DEBUG_PREFERENCE_GENERAL)
-				PrefsMessages.message("Preference node is not a load root: " + absolutePath()); //$NON-NLS-1$
-			return;
-		}
-		if (node instanceof EclipsePreferences) {
-			((EclipsePreferences) node).load();
-			node.flush();
-		}
-	}
-
-	public String toDeepDebugString() {
-		final StringBuffer buffer = new StringBuffer();
-		IPreferenceNodeVisitor visitor = new IPreferenceNodeVisitor() {
-			public boolean visit(IEclipsePreferences node) throws BackingStoreException {
-				buffer.append(node);
-				buffer.append('\n');
-				String[] keys = node.keys();
-				for (int i = 0; i < keys.length; i++) {
-					buffer.append(node.absolutePath());
-					buffer.append(PATH_SEPARATOR);
-					buffer.append(keys[i]);
-					buffer.append('=');
-					buffer.append(node.get(keys[i], "*default*")); //$NON-NLS-1$
-					buffer.append('\n');
-				}
-				return true;
-			}
-		};
-		try {
-			accept(visitor);
-		} catch (BackingStoreException e) {
-			System.out.println("Exception while calling #toDeepDebugString()"); //$NON-NLS-1$
-			e.printStackTrace();
-		}
-		return buffer.toString();
-	}
-
-	public String toString() {
-		return absolutePath();
-	}
-}
diff --git a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/ExportedPreferences.java b/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/ExportedPreferences.java
deleted file mode 100644
index 38d6f26..0000000
--- a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/ExportedPreferences.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*******************************************************************************
- * 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
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.core.internal.preferences;
-
-import org.eclipse.core.runtime.preferences.IExportedPreferences;
-
-/**
- * @since 3.0
- */
-public class ExportedPreferences extends EclipsePreferences implements IExportedPreferences {
-
-	private boolean isExportRoot = false;
-	private String version;
-
-	public static IExportedPreferences newRoot() {
-		return new ExportedPreferences(null, ""); //$NON-NLS-1$
-	}
-
-	protected ExportedPreferences(EclipsePreferences parent, String name) {
-		super(parent, name);
-	}
-
-	/*
-	 * @see org.eclipse.core.runtime.preferences.IExportedPreferences#isExportRoot()
-	 */
-	public boolean isExportRoot() {
-		return isExportRoot;
-	}
-
-	/*
-	 * Internal method called only by the import/export mechanism.
-	 */
-	public void setExportRoot() {
-		isExportRoot = true;
-	}
-
-	/*
-	 * Internal method called only by the import/export mechanism to
-	 * validate bundle versions.
-	 */
-	public String getVersion() {
-		return version;
-	}
-
-	/*
-	 * Internal method called only by the import/export mechanism to
-	 * validate bundle versions.
-	 */
-	public void setVersion(String version) {
-		this.version = version;
-	}
-
-	protected EclipsePreferences internalCreate(EclipsePreferences nodeParent, String nodeName, Object context) {
-		return new ExportedPreferences(nodeParent, nodeName);
-	}
-
-	/*
-	 * Return a string representation of this object. To be used for 
-	 * debugging purposes only.
-	 */
-	public String toString() {
-		StringBuffer buffer = new StringBuffer();
-		if (isExportRoot)
-			buffer.append("* "); //$NON-NLS-1$
-		buffer.append(absolutePath());
-		if (version != null)
-			buffer.append(" (" + version + ')'); //$NON-NLS-1$
-		return buffer.toString();
-	}
-}
diff --git a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/IPreferencesConstants.java b/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/IPreferencesConstants.java
deleted file mode 100644
index dfd4868..0000000
--- a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/IPreferencesConstants.java
+++ /dev/null
@@ -1,58 +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.core.internal.preferences;
-
-/**
- * Container for the constants used by this plugin. 
- * @since org.eclipse.equinox.preferences 1.0
- */
-public interface IPreferencesConstants {
-	/**
-	 * Backward compatibilty: name of the original runtime plugin
-	 */
-	public static final String RUNTIME_NAME = "org.eclipse.core.runtime"; //$NON-NLS-1$
-
-	/**
-	 * Name of this plugin
-	 */
-	public static final String PREFERS_NAME = "org.eclipse.equinox.preferences"; //$NON-NLS-1$
-
-	/**
-	 * Command line options
-	 */
-	public static final String PLUGIN_CUSTOMIZATION = "-plugincustomization"; //$NON-NLS-1$
-
-	/**
-	 * This is the base filename used to construct the name of the preference
-	 * file and the name of the preference translation file.
-	 */
-	public static final String PREFERENCES_DEFAULT_OVERRIDE_BASE_NAME = "preferences"; //$NON-NLS-1$
-
-	/**
-	 * The name of the file (value <code>"preferences.ini"</code>) in a
-	 * plug-in's (read-only) directory that, when present, contains values that
-	 * override the normal default values for this plug-in's preferences.
-	 * <p>
-	 * The format of the file is as per <code>java.io.Properties</code> where
-	 * the keys are property names and values are strings.
-	 * </p>
-	 */
-	public static final String PREFERENCES_DEFAULT_OVERRIDE_FILE_NAME = PREFERENCES_DEFAULT_OVERRIDE_BASE_NAME + ".ini"; //$NON-NLS-1$
-
-	/** 
-	 * The simple identifier constant (value "<code>preferences</code>") of
-	 * the extension point of the Core Runtime plug-in where plug-ins declare
-	 * extensions to the preference facility. A plug-in may define any number
-	 * of preference extensions.
-	 */
-	public static final String PT_PREFERENCES = "preferences"; //$NON-NLS-1$
-
-}
diff --git a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/ImmutableMap.java b/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/ImmutableMap.java
deleted file mode 100644
index 183c695..0000000
--- a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/ImmutableMap.java
+++ /dev/null
@@ -1,279 +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
- *******************************************************************************/
-package org.eclipse.core.internal.preferences;
-
-import org.eclipse.core.internal.preferences.StringPool;
-
-/**
- * Hash table of {String --> String}.
- * 
- * This map handles collisions using linear probing.  When elements are
- * removed, the entire table is rehashed.  Thus this map has good space
- * characteristics, good insertion and iteration performance, but slower
- * removal performance than a HashMap.
- * <p>
- * This map is thread safe because it is immutable.  All methods that modify
- * the map create and return a new map, rather than modifying the receiver.
- */
-public abstract class ImmutableMap implements Cloneable {
-	static class ArrayMap extends ImmutableMap {
-		private static final float LOAD_FACTOR = 0.45f;
-		/**
-		 * number of elements in the table
-		 */
-		private int elementSize;
-
-		/**
-		 * The table keys
-		 */
-		private String[] keyTable;
-
-		private int threshold;
-		private String[] valueTable;
-
-		private ArrayMap() {
-			this(16);
-		}
-
-		ArrayMap(int size) {
-			this.elementSize = 0;
-			//table size must always be a power of two
-			int tableLen = 1;
-			while (tableLen < size)
-				tableLen *= 2;
-			this.keyTable = new String[tableLen];
-			this.valueTable = new String[tableLen];
-			this.threshold = (int) (tableLen * LOAD_FACTOR);
-		}
-
-		public String get(String key) {
-			int lengthMask = keyTable.length - 1;
-			int index = key.hashCode() & lengthMask;
-			String currentKey;
-			while ((currentKey = keyTable[index]) != null) {
-				if (currentKey.equals(key))
-					return valueTable[index];
-				index = (index + 1) & lengthMask;
-			}
-			return null;
-		}
-
-		/**
-		 * This method destructively adds the key/value pair to the table.
-		 * The caller must ensure the table has an empty slot before calling
-		 * this method.
-		 * @param key
-		 * @param value
-		 */
-		protected void internalPut(String key, String value) {
-			int lengthMask = keyTable.length - 1;
-			int index = key.hashCode() & lengthMask;
-			String currentKey;
-			while ((currentKey = keyTable[index]) != null) {
-				if (currentKey.equals(key)) {
-					valueTable[index] = value;
-					return;
-				}
-				index = (index + 1) & lengthMask;
-			}
-			keyTable[index] = key;
-			valueTable[index] = value;
-			++elementSize;
-		}
-
-		/**
-		 * Returns an array of all keys in this map.
-		 */
-		public String[] keys() {
-			if (elementSize == 0)
-				return EMPTY_STRING_ARRAY;
-			String[] result = new String[elementSize];
-			int next = 0;
-			for (int i = 0; i < keyTable.length; i++)
-				if (keyTable[i] != null)
-					result[next++] = keyTable[i];
-			return result;
-		}
-
-		public ImmutableMap put(String key, String value) {
-			ArrayMap result;
-			final int oldLen = keyTable.length;
-			if (elementSize + 1 > threshold) {
-				//rehash case
-				String currentKey;
-				result = new ArrayMap(oldLen * 2);
-				for (int i = oldLen; --i >= 0;)
-					if ((currentKey = keyTable[i]) != null)
-						result.internalPut(currentKey, valueTable[i]);
-			} else {
-				result = new ArrayMap(oldLen);
-				System.arraycopy(this.keyTable, 0, result.keyTable, 0, this.keyTable.length);
-				System.arraycopy(this.valueTable, 0, result.valueTable, 0, this.valueTable.length);
-				result.elementSize = this.elementSize;
-			}
-			result.internalPut(key, value);
-			return result;
-		}
-
-		public ImmutableMap removeKey(String key) {
-			final int lengthMask = keyTable.length - 1;
-			int index = key.hashCode() & lengthMask;
-			String currentKey;
-			while ((currentKey = keyTable[index]) != null) {
-				if (currentKey.equals(key)) {
-					if (elementSize <= 1)
-						return EMPTY;
-					//return a new map that includes all keys except the current one
-					ImmutableMap result = createMap((int) (elementSize / LOAD_FACTOR));
-					for (int i = 0; i < index; i++)
-						if ((currentKey = keyTable[i]) != null)
-							result.internalPut(currentKey, valueTable[i]);
-					for (int i = index + 1; i <= lengthMask; i++)
-						if ((currentKey = keyTable[i]) != null)
-							result.internalPut(currentKey, valueTable[i]);
-					return result;
-				}
-				index = (index + 1) & lengthMask;
-			}
-			return this;
-		}
-
-		/* (non-Javadoc
-		 * Method declared on IStringPoolParticipant
-		 */
-		public void shareStrings(StringPool set) {
-			//copy elements for thread safety
-			String[] array = keyTable;
-			if (array == null)
-				return;
-			for (int i = 0; i < array.length; i++) {
-				String o = array[i];
-				if (o != null)
-					array[i] = set.add(o);
-			}
-			array = valueTable;
-			if (array == null)
-				return;
-			for (int i = 0; i < array.length; i++) {
-				String o = array[i];
-				if (o != null)
-					array[i] = set.add(o);
-			}
-		}
-
-		public int size() {
-			return elementSize;
-		}
-
-	}
-
-	static class EmptyMap extends ImmutableMap {
-		public String get(String value) {
-			return null;
-		}
-
-		public ImmutableMap removeKey(String key) {
-			return this;
-		}
-		
-		protected void internalPut(String key, String value) {
-			throw new IllegalStateException();//cannot put elements in the empty map
-		}
-
-		public String[] keys() {
-			return EMPTY_STRING_ARRAY;
-		}
-
-		public ImmutableMap put(String key, String value) {
-			ImmutableMap result = createMap(4);
-			result.internalPut(key, value);
-			return result;
-		}
-
-		public int size() {
-			return 0;
-		}
-	}
-
-	/**
-	 * The empty hash map.  Since instances are immutable, the empty map
-	 * can be a singleton, with accessor methods optimized for the empty map case.
-	 */
-	public static final ImmutableMap EMPTY = new EmptyMap();
-
-	protected static final String[] EMPTY_STRING_ARRAY = new String[0];
-
-	/**
-	 * Returns the value associated with this key in the map, or 
-	 * <code>null</code> if the key is not present in the map.
-	 * @param key
-	 * @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;
-		return new ArrayMap(i);
-	}
-
-	/**
-	 * Destructively adds a key/value pair to this map. The caller must ensure
-	 * there is enough room in this map to proceed.
-	 * 
-	 * @param key
-	 * @param value
-	 */
-	protected abstract void internalPut(String key, String value);
-
-	/**
-	 * Returns an array of all keys in this map.
-	 */
-	public abstract String[] keys();
-
-	/**
-	 * Returns a new map that is equal to this one, except with the given
-	 * key/value pair added.
-	 * 
-	 * @param key
-	 * @param value
-	 * @return The map containing the given key/value pair
-	 */
-	public abstract ImmutableMap put(String key, String value);
-
-	/**
-	 * Returns a map that is equal to this one, except without the given
-	 * key.
-	 * @param key
-	 * @return A map with the given key removed
-	 */
-	public abstract ImmutableMap removeKey(String key);
-
-	/* (non-Javadoc
-	 * Method declared on IStringPoolParticipant
-	 */
-	public void shareStrings(StringPool set) {
-	}
-
-	/**
-	 * Returns the number of keys in this map.
-	 * @return the number of keys in this map.
-	 */
-	public abstract int size();
-
-	public String toString() {
-		StringBuffer s = new StringBuffer();
-		String[] keys = keys();
-		for (int i = 0, length = keys.length; i < length; i++)
-			s.append(keys[i]).append(" -> ").append(get(keys[i])).append("\n"); //$NON-NLS-2$ //$NON-NLS-1$
-		return s.toString();
-	}
-}
diff --git a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/InstancePreferences.java b/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/InstancePreferences.java
deleted file mode 100644
index 333f83f..0000000
--- a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/InstancePreferences.java
+++ /dev/null
@@ -1,211 +0,0 @@
-/*******************************************************************************
- * 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
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.core.internal.preferences;
-
-import java.io.*;
-import java.util.*;
-import org.eclipse.core.internal.runtime.MetaDataKeeper;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.core.runtime.preferences.IEclipsePreferences;
-import org.eclipse.osgi.service.datalocation.Location;
-
-/**
- * @since 3.0
- */
-public class InstancePreferences extends EclipsePreferences {
-
-	// cached values
-	private String qualifier;
-	private int segmentCount;
-	private IEclipsePreferences loadLevel;
-	private IPath location;
-	// cache which nodes have been loaded from disk
-	private static Set loadedNodes = new HashSet();
-	private static boolean initialized = false;
-	private static IPath baseLocation;
-
-	private static IPath getBaseLocation() {
-		// If we are running with -data=@none we won't have an instance location.
-		// By leaving the value of baseLocation as null we still allow the users
-		// to set preferences in this scope but the values will not be persisted
-		// to disk when #flush() is called.
-		if (baseLocation == null) {
-			Location instanceLocation = PreferencesOSGiUtils.getDefault().getInstanceLocation();
-			if (instanceLocation != null && (instanceLocation.isSet() || instanceLocation.allowsDefault()))
-				baseLocation = MetaDataKeeper.getMetaArea().getStateLocation(IPreferencesConstants.RUNTIME_NAME);
-		}
-		return baseLocation;
-	}
-
-	/**
-	 * Default constructor. Should only be called by #createExecutableExtension.
-	 */
-	public InstancePreferences() {
-		this(null, null);
-	}
-
-	private InstancePreferences(EclipsePreferences parent, String name) {
-		super(parent, name);
-
-		initializeChildren();
-
-		// cache the segment count
-		String path = absolutePath();
-		segmentCount = getSegmentCount(path);
-		if (segmentCount < 2)
-			return;
-
-		// cache the qualifier
-		qualifier = getSegment(path, 1);
-
-		// don't cache the location until later in case instance prefs are
-		// accessed before the instance location is set.
-	}
-
-	protected boolean isAlreadyLoaded(IEclipsePreferences node) {
-		return loadedNodes.contains(node.name());
-	}
-
-	protected void loaded() {
-		loadedNodes.add(name());
-	}
-
-	/**
-	 * Load the Eclipse 2.1 preferences for the given bundle. If a file
-	 * doesn't exist then assume that conversion has already occurred
-	 * and do nothing.
-	 */
-	protected void loadLegacy() {
-		IPath path = new Path(absolutePath());
-		if (path.segmentCount() != 2)
-			return;
-		// If we are running with -data=@none we won't have an instance location.
-		if (PreferencesOSGiUtils.getDefault().getInstanceLocation() == null) {
-			if (EclipsePreferences.DEBUG_PREFERENCE_GENERAL)
-				PrefsMessages.message("Cannot load Legacy plug-in preferences since instance location is not set."); //$NON-NLS-1$
-			return;
-		}
-		String bundleName = path.segment(1);
-		// the preferences file is located in the plug-in's state area at a well-known name
-		// don't need to create the directory if there are no preferences to load
-		File prefFile = null;
-		Location instanceLocation = PreferencesOSGiUtils.getDefault().getInstanceLocation();
-		if (instanceLocation != null && instanceLocation.isSet())
-			prefFile = MetaDataKeeper.getMetaArea().getPreferenceLocation(bundleName, false).toFile();
-		if (prefFile == null) {
-			if (EclipsePreferences.DEBUG_PREFERENCE_GENERAL)
-				PrefsMessages.message("Cannot load legacy values because instance location is not set."); //$NON-NLS-1$
-			return;
-		}
-		if (!prefFile.exists()) {
-			// no preference file - that's fine
-			if (EclipsePreferences.DEBUG_PREFERENCE_GENERAL)
-				PrefsMessages.message("Legacy plug-in preference file not found: " + prefFile); //$NON-NLS-1$
-			return;
-		}
-
-		if (EclipsePreferences.DEBUG_PREFERENCE_GENERAL)
-			PrefsMessages.message("Loading legacy preferences from " + prefFile); //$NON-NLS-1$
-
-		// load preferences from file
-		InputStream input = null;
-		Properties values = new Properties();
-		try {
-			input = new BufferedInputStream(new FileInputStream(prefFile));
-			values.load(input);
-		} catch (IOException e) {
-			// problems loading preference store - quietly ignore
-			if (EclipsePreferences.DEBUG_PREFERENCE_GENERAL)
-				PrefsMessages.message("IOException encountered loading legacy preference file " + prefFile); //$NON-NLS-1$
-			return;
-		} finally {
-			if (input != null) {
-				try {
-					input.close();
-				} catch (IOException e) {
-					// ignore problems with close
-					if (EclipsePreferences.DEBUG_PREFERENCE_GENERAL) {
-						PrefsMessages.message("IOException encountered closing legacy preference file " + prefFile); //$NON-NLS-1$
-						e.printStackTrace();
-					}
-				}
-			}
-		}
-
-		// Store values in the preferences object
-		for (Iterator i = values.keySet().iterator(); i.hasNext();) {
-			String key = (String) i.next();
-			String value = values.getProperty(key);
-			// value shouldn't be null but check just in case...
-			if (value != null) {
-				if (EclipsePreferences.DEBUG_PREFERENCE_GENERAL)
-					PrefsMessages.message("Loaded legacy preference: " + key + " -> " + value); //$NON-NLS-1$ //$NON-NLS-2$
-				// call these 2 methods rather than #put() so we don't send out unnecessary notification
-				Object oldValue = internalPut(key, value);
-				if (!value.equals(oldValue))
-					makeDirty();
-			}
-		}
-
-		// Delete the old file so we don't try and load it next time. 
-		if (!prefFile.delete())
-			//Only print out message in failure case if we are debugging.
-			if (EclipsePreferences.DEBUG_PREFERENCE_GENERAL)
-				PrefsMessages.message("Unable to delete legacy preferences file: " + prefFile); //$NON-NLS-1$
-	}
-
-	protected IPath getLocation() {
-		if (location == null)
-			location = computeLocation(getBaseLocation(), qualifier);
-		return location;
-	}
-
-	/*
-	 * Return the node at which these preferences are loaded/saved.
-	 */
-	protected IEclipsePreferences getLoadLevel() {
-		if (loadLevel == null) {
-			if (qualifier == null)
-				return null;
-			// Make it relative to this node rather than navigating to it from the root.
-			// Walk backwards up the tree starting at this node.
-			// This is important to avoid a chicken/egg thing on startup.
-			IEclipsePreferences node = this;
-			for (int i = 2; i < segmentCount; i++)
-				node = (IEclipsePreferences) node.parent();
-			loadLevel = node;
-		}
-		return loadLevel;
-	}
-
-	/*
-	 * Initialize the children for the root of this node. Store the names as
-	 * keys in the children table so we can lazily load them later.
-	 */
-	protected void initializeChildren() {
-		if (initialized || parent == null)
-			return;
-		try {
-			synchronized (this) {
-				String[] names = computeChildren(getBaseLocation());
-				for (int i = 0; i < names.length; i++)
-					addChild(names[i], null);
-			}
-		} finally {
-			initialized = true;
-		}
-	}
-
-	protected EclipsePreferences internalCreate(EclipsePreferences nodeParent, String nodeName, Object context) {
-		return new InstancePreferences(nodeParent, nodeName);
-	}
-}
diff --git a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/ListenerRegistry.java b/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/ListenerRegistry.java
deleted file mode 100644
index 73570e9..0000000
--- a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/ListenerRegistry.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*******************************************************************************
- * 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
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.core.internal.preferences;
-
-import org.eclipse.core.runtime.ListenerList;
-
-/**
- * A class which holds onto a listener list object for a given path.
- * Typically the path is the absolute path of a preference node.
- * 
- * @since 3.1
- */
-public class ListenerRegistry {
-
-	/**
-	 * Specialized map-like data structure for storing change listeners. 
-	 */
-	private static class ListenerMap {
-		private static final int GROW_SIZE = 10;
-		String[] keys;
-		ListenerList[] values;
-
-		/**
-		 * Create a map of exactly the specified size.
-		 */
-		ListenerMap(int size) {
-			super();
-			this.keys = new String[size];
-			this.values = new ListenerList[size];
-		}
-
-		/**
-		 * Return the listener list associated with the given key,
-		 * or <code>null</code> if it doesn't exist.
-		 */
-		ListenerList get(String key) {
-			if (key == null)
-				throw new NullPointerException();
-			for (int i = 0; i < keys.length; i++)
-				if (key.equals(keys[i]))
-					return values[i];
-			return null;
-		}
-
-		/**
-		 * Associate the given listener list with the specified key. Overwrite
-		 * an existing association, if applicable.
-		 */
-		void put(String key, ListenerList value) {
-			if (key == null)
-				throw new NullPointerException();
-			if (value == null) {
-				remove(key);
-				return;
-			}
-			// replace if exists, keeping track of an empty position
-			int emptyIndex = -1;
-			for (int i = 0; i < keys.length; i++) {
-				String existing = keys[i];
-				if (existing == null) {
-					emptyIndex = i;
-					continue;
-				}
-				if (existing.equals(key)) {
-					values[i] = value;
-					return;
-				}
-			}
-			if (emptyIndex == -1)
-				emptyIndex = grow();
-			keys[emptyIndex] = key;
-			values[emptyIndex] = value;
-		}
-
-		/*
-		 * Make the backing arrays larger
-		 */
-		private int grow() {
-			int size = keys.length;
-			String[] tempKeys = new String[size + GROW_SIZE];
-			System.arraycopy(keys, 0, tempKeys, 0, size);
-			keys = tempKeys;
-			ListenerList[] tempValues = new ListenerList[size + GROW_SIZE];
-			System.arraycopy(values, 0, tempValues, 0, size);
-			values = tempValues;
-			return size;
-		}
-
-		/**
-		 * Remove the association specified by the given key.
-		 * Do nothing if none exists.
-		 * 
-		 * Note: Should consider shrinking the array. Hold off for now
-		 * as we don't expect #remove to be a common code path.
-		 */
-		void remove(String key) {
-			if (key == null)
-				throw new NullPointerException();
-			for (int i = 0; i < keys.length; i++)
-				if (key.equals(keys[i])) {
-					keys[i] = null;
-					values[i] = null;
-					return;
-				}
-		}
-	}
-
-	static final Object[] EMPTY_LIST = new Object[0];
-	ListenerMap registry = new ListenerMap(25);
-
-	/**
-	 * Return the listeners for this path or an empty list if none.
-	 */
-	public synchronized Object[] getListeners(String path) {
-		ListenerList list = registry.get(path);
-		return list == null ? EMPTY_LIST : list.getListeners();
-	}
-
-	/**
-	 * Add the given listener to the listeners registered for this path.
-	 * If the listener already exists, then do nothing.
-	 */
-	public synchronized void add(String path, Object listener) {
-		ListenerList list = registry.get(path);
-		if (list == null)
-			list = new ListenerList(ListenerList.IDENTITY);
-		list.add(listener);
-		registry.put(path, list);
-	}
-
-	/**
-	 * Remove the given listener from this path's collection of 
-	 * listeners. If it is not associated with this path, then do nothing.
-	 */
-	public synchronized void remove(String path, Object listener) {
-		ListenerList list = registry.get(path);
-		if (list == null)
-			return;
-		list.remove(listener);
-		if (list.isEmpty())
-			registry.remove(path);
-	}
-
-	/**
-	 * Remove all of the listeners registered under the given path.
-	 */
-	public synchronized void clear(String path) {
-		registry.remove(path);
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/LookupOrder.java b/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/LookupOrder.java
deleted file mode 100644
index 4d87991..0000000
--- a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/LookupOrder.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*******************************************************************************
- * 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
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.core.internal.preferences;
-
-/**
- * Object used to store the look-up order for preference
- * scope searching.
- * 
- * @since 3.0
- */
-public class LookupOrder {
-
-	private String[] order;
-
-	LookupOrder(String[] order) {
-		for (int i = 0; i < order.length; i++)
-			if (order[i] == null)
-				throw new IllegalArgumentException();
-		this.order = order;
-	}
-
-	public String[] getOrder() {
-		return order;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/OSGiPreferencesServiceImpl.java b/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/OSGiPreferencesServiceImpl.java
deleted file mode 100644
index 30f5586..0000000
--- a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/OSGiPreferencesServiceImpl.java
+++ /dev/null
@@ -1,256 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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.preferences;
-
-import org.eclipse.core.runtime.preferences.IEclipsePreferences;
-import org.osgi.service.prefs.*;
-import org.osgi.service.prefs.PreferencesService;
-
-/**
- * <p>
- * Implements OSGi PreferencesService using the Eclipse preference system.
- * </p>
- * 
- * <p>
- * Note: Eclipse preferences are accessible through the OSGi Preferences API and vice
- *  versa.
- * </p>
- */
-public class OSGiPreferencesServiceImpl implements PreferencesService {
-
-	/**
-	 * Adaptor that implements OSGi Preferences interface on top of EclipsePreferences.
-	 * Creates a "local root" since OSGi preferences have lots of roots but eclipse
-	 * only has one.
-	 */
-	private static final class OSGiLocalRootPreferences implements Preferences {
-
-		//The "local" root of this preference tree (not the real Eclipse root)
-		private Preferences root;
-
-		//the node this node is wrappering
-		private Preferences wrapped;
-
-		private OSGiLocalRootPreferences(Preferences root) {
-			this(root, root);
-		}
-
-		private OSGiLocalRootPreferences(Preferences wrapped, Preferences root) {
-			this.root = root;
-			this.wrapped = wrapped;
-		}
-
-		/**
-		 * If pathName is absolute make it "absolute" with respect to this root.
-		 * If pathName is relative, just return it
-		 * @param pathName
-		 * @return
-		 */
-		private String fixPath(String pathName) {
-			if (pathName.startsWith("/")) {
-				if (pathName.equals("/")) {
-					return root.absolutePath();
-				} else {
-					//fix absolute path
-					return root.absolutePath().concat(pathName);
-				}
-			} else {
-				//pass-through relative path
-				return pathName;
-			}
-		}
-
-		/**
-		 * Override node(String pathName) to be more strict about forbidden names - 
-		 * EclipsePreferences implementation does a best-effort instead of throwing 
-		 * {@link IllegalArgumentException}.
-		 */
-		public Preferences node(String pathName) {
-			pathName = fixPath(pathName);
-
-			if ((pathName.length() > 1 && pathName.endsWith("/")) //$NON-NLS-1$
-					|| pathName.indexOf("//") != -1) { //$NON-NLS-1$				
-				throw new IllegalArgumentException();
-			}
-			return new OSGiLocalRootPreferences(wrapped.node(pathName), root);
-		}
-
-		/**
-		 * <p>
-		 * Override getByteArray(String key, byte [] defaultValue) to be more strict when
-		 * decoding byte values.  EclipsePreferences implementation pads bytes if they are not 4
-		 * bytes long, but the OSGi TCK expects this function to return null if the length of 
-		 * the byte array is not an even multiple of 4. 
-		 * </p>
-		 * <p>
-		 * Also catches any decoding exceptions and returns the default value instead of 
-		 * propagating the exception.
-		 * </p>
-		 */
-		public byte[] getByteArray(String key, byte[] defaultValue) {
-			String value = wrapped.get(key, null);
-			byte[] byteArray = null;
-			if (value != null) {
-				byte[] encodedBytes = value.getBytes();
-				if (encodedBytes.length % 4 == 0) {
-					try {
-						byteArray = Base64.decode(encodedBytes);
-					} catch (Exception e) {
-						//do not raise exception - return defaultValue
-					}
-				}
-			}
-			return byteArray == null ? defaultValue : byteArray;
-		}
-
-		public Preferences parent() {
-			if (wrapped == root) {
-				try {
-					if (!wrapped.nodeExists("")) {
-						throw new IllegalStateException();
-					}
-				} catch (BackingStoreException e) {
-					//best effort
-				}
-				return null;
-			} else {
-				return new OSGiLocalRootPreferences(wrapped.parent(), root);
-			}
-		}
-
-		public boolean nodeExists(String pathName) throws BackingStoreException {
-			return wrapped.nodeExists(fixPath(pathName));
-		}
-
-		public String absolutePath() {
-			if (wrapped == root) {
-				return "/";
-			} else {
-				return wrapped.absolutePath().substring(root.absolutePath().length(), wrapped.absolutePath().length());
-			}
-		}
-
-		public String name() {
-			if (wrapped == root) {
-				return "";
-			} else {
-				return wrapped.name();
-			}
-		}
-
-		//delegate to wrapped preference
-		public void put(String key, String value) {
-			wrapped.put(key, value);
-		}
-
-		public String get(String key, String def) {
-			return wrapped.get(key, def);
-		}
-
-		public void remove(String key) {
-			wrapped.remove(key);
-		}
-
-		public void clear() throws BackingStoreException {
-			wrapped.clear();
-		}
-
-		public void putInt(String key, int value) {
-			wrapped.putInt(key, value);
-		}
-
-		public int getInt(String key, int def) {
-			return wrapped.getInt(key, def);
-		}
-
-		public void putLong(String key, long value) {
-			wrapped.putLong(key, value);
-		}
-
-		public long getLong(String key, long def) {
-			return wrapped.getLong(key, def);
-		}
-
-		public void putBoolean(String key, boolean value) {
-			wrapped.putBoolean(key, value);
-		}
-
-		public boolean getBoolean(String key, boolean def) {
-			return wrapped.getBoolean(key, def);
-		}
-
-		public void putFloat(String key, float value) {
-			wrapped.putFloat(key, value);
-		}
-
-		public float getFloat(String key, float def) {
-			return wrapped.getFloat(key, def);
-		}
-
-		public void putDouble(String key, double value) {
-			wrapped.putDouble(key, value);
-		}
-
-		public double getDouble(String key, double def) {
-			return wrapped.getDouble(key, def);
-		}
-
-		public void putByteArray(String key, byte[] value) {
-			wrapped.putByteArray(key, value);
-		}
-
-		public String[] keys() throws BackingStoreException {
-			return wrapped.keys();
-		}
-
-		public String[] childrenNames() throws BackingStoreException {
-			return wrapped.childrenNames();
-		}
-
-		public void removeNode() throws BackingStoreException {
-			wrapped.removeNode();
-		}
-
-		public void flush() throws BackingStoreException {
-			wrapped.flush();
-		}
-
-		public void sync() throws BackingStoreException {
-			wrapped.sync();
-		}
-
-	} //end static inner class OSGiLocalRootPreferences
-
-	private IEclipsePreferences bundlePreferences;
-
-	OSGiPreferencesServiceImpl(IEclipsePreferences bundlePreferences) {
-		this.bundlePreferences = bundlePreferences;
-	}
-
-	public Preferences getSystemPreferences() {
-		return new OSGiLocalRootPreferences(bundlePreferences.node("system"));
-	}
-
-	public Preferences getUserPreferences(String name) {
-		return new OSGiLocalRootPreferences(bundlePreferences.node("user/" + name));
-	}
-
-	public String[] getUsers() {
-		String[] users = null;
-		try {
-			users = bundlePreferences.node("user").childrenNames();
-		} catch (BackingStoreException e) {
-			//best effort
-		}
-		return users == null ? new String[0] : users;
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/OSGiPreferencesServiceManager.java b/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/OSGiPreferencesServiceManager.java
deleted file mode 100644
index aec3a06..0000000
--- a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/OSGiPreferencesServiceManager.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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.preferences;
-
-import java.util.Set;
-import java.util.TreeSet;
-import org.eclipse.core.runtime.preferences.ConfigurationScope;
-import org.osgi.framework.*;
-import org.osgi.service.prefs.BackingStoreException;
-import org.osgi.service.prefs.Preferences;
-
-/**
- * <p>
- * Class used to manage OSGi Preferences Service.  Creates a new OSGiPreferencesServiceImpl
- * object for every bundle that gets the Preferences Service.  When a bundle ungets the 
- * Preference Service, it's preferences are flushed to disk.
- * </p>
- * <p>
- * Also deletes saved preferences for bundles which are uninstalled.
- * </p>
- */
-public class OSGiPreferencesServiceManager implements ServiceFactory, BundleListener {
-
-	private static final String ORG_ECLIPSE_CORE_INTERNAL_PREFERENCES_OSGI = "org.eclipse.core.internal.preferences.osgi"; //$NON-NLS-1$
-
-	//keys are bundles that use OSGi prefs
-	private Preferences prefBundles;
-
-	public OSGiPreferencesServiceManager(BundleContext context) {
-
-		context.addBundleListener(this);
-
-		//prefBundles = new InstanceScope().getNode(ORG_ECLIPSE_CORE_INTERNAL_PREFERENCES_OSGI);
-		prefBundles = new ConfigurationScope().getNode(ORG_ECLIPSE_CORE_INTERNAL_PREFERENCES_OSGI);
-
-		//clean up prefs for bundles that have been uninstalled
-		try {
-
-			//get list of currently installed bundles
-			Bundle[] allBundles = context.getBundles();
-			Set bundleQualifiers = new TreeSet();
-			for (int i = 0; i < allBundles.length; i++) {
-				bundleQualifiers.add(getQualifier(allBundles[i]));
-			}
-
-			//get list of bundles we created prefs for
-			String[] prefsBundles = prefBundles.keys();
-
-			//remove prefs nodes for bundles that are no longer installed
-			for (int i = 0; i < prefsBundles.length; i++) {
-				if (!bundleQualifiers.contains(prefsBundles[i])) {
-					removePrefs(prefsBundles[i]);
-				}
-			}
-
-		} catch (BackingStoreException e) {
-			//best effort
-		}
-	}
-
-	/**
-	 * Creates a new OSGiPreferencesServiceImpl for each bundle.
-	 */
-	public Object getService(Bundle bundle, ServiceRegistration registration) {
-		String qualifier = getQualifier(bundle);
-		//remember we created prefs for this bundle
-		prefBundles.put(qualifier, ""); //$NON-NLS-1$
-		try {
-			prefBundles.flush();
-		} catch (BackingStoreException e) {
-			//best effort
-		}
-		//return new OSGiPreferencesServiceImpl(new InstanceScope().getNode(getQualifier(bundle)));
-		return new OSGiPreferencesServiceImpl(new ConfigurationScope().getNode(getQualifier(bundle)));
-	}
-
-	/**
-	 * Store preferences per bundle id
-	 */
-	private String getQualifier(Bundle bundle) {
-		String qualifier = "org.eclipse.core.runtime.preferences.OSGiPreferences." + bundle.getBundleId(); //$NON-NLS-1$		
-		return qualifier;
-	}
-
-	/**
-	 * Flush the bundle's preferences.
-	 */
-	public void ungetService(Bundle bundle, ServiceRegistration registration, Object service) {
-		try {
-			//new InstanceScope().getNode(getQualifier(bundle)).flush();
-			new ConfigurationScope().getNode(getQualifier(bundle)).flush();
-		} catch (BackingStoreException e) {
-			//best effort
-		}
-	}
-
-	/**
-	 * If a bundle is uninstalled, delete all of it's preferences from the disk.
-	 */
-	public void bundleChanged(BundleEvent event) {
-		if (event.getType() == BundleEvent.UNINSTALLED) {
-			try {
-				removePrefs(getQualifier(event.getBundle()));
-			} catch (BackingStoreException e) {
-				//best effort
-			}
-		}
-
-	}
-
-	protected void removePrefs(String qualifier) throws BackingStoreException {
-		//remove bundle's prefs
-		//new InstanceScope().getNode(qualifier).removeNode();
-		new ConfigurationScope().getNode(qualifier).removeNode();
-
-		//remove from our list of bundles with prefs
-		prefBundles.remove(qualifier);
-		prefBundles.flush();
-	}
-}
diff --git a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/PreferenceServiceRegistryHelper.java b/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/PreferenceServiceRegistryHelper.java
deleted file mode 100644
index b3a4ac5..0000000
--- a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/PreferenceServiceRegistryHelper.java
+++ /dev/null
@@ -1,313 +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.preferences;
-
-import java.lang.ref.WeakReference;
-import java.util.*;
-import org.eclipse.core.internal.preferences.exchange.ILegacyPreferences;
-import org.eclipse.core.internal.runtime.RuntimeLog;
-import org.eclipse.core.runtime.*;
-import org.eclipse.core.runtime.preferences.*;
-import org.eclipse.osgi.util.NLS;
-import org.osgi.framework.Bundle;
-
-/**
- * Class which handles all registry-related work for the preferences. This code has
- * been separated into a separate class to ensure that the preferences will be able
- * to run without the registry being present.
- */
-public class PreferenceServiceRegistryHelper implements IRegistryChangeListener {
-
-	private static final String ELEMENT_INITIALIZER = "initializer"; //$NON-NLS-1$
-	private static final String ATTRIBUTE_NAME = "name"; //$NON-NLS-1$
-	private static final String ATTRIBUTE_CLASS = "class"; //$NON-NLS-1$
-	private static final String ELEMENT_SCOPE = "scope"; //$NON-NLS-1$
-	private static final String ELEMENT_MODIFIER = "modifier"; //$NON-NLS-1$
-	// Store this around for performance
-	private final static IExtension[] EMPTY_EXTENSION_ARRAY = new IExtension[0];
-	private static final Map scopeRegistry = Collections.synchronizedMap(new HashMap());
-	private ListenerList modifyListeners;
-	private PreferencesService service;
-	private IExtensionRegistry registry;
-
-	/*
-	 * Create and return an IStatus object with ERROR severity and the
-	 * given message and exception.
-	 */
-	private static IStatus createStatusError(String message, Exception e) {
-		return new Status(IStatus.ERROR, PrefsMessages.OWNER_NAME, IStatus.ERROR, message, e);
-	}
-
-	/*
-	 * Create and return an IStatus object with WARNING severity and the
-	 * given message and exception.
-	 */
-	private static IStatus createStatusWarning(String message, Exception e) {
-		return new Status(IStatus.WARNING, PrefsMessages.OWNER_NAME, IStatus.WARNING, message, e);
-	}
-
-	/*
-	 * Log the given status.
-	 */
-	private static void log(IStatus status) {
-		RuntimeLog.log(status);
-	}
-
-	/*
-	 * Constructor for the class.
-	 */
-	public PreferenceServiceRegistryHelper(PreferencesService service, Object registryObject) {
-		super();
-		this.service = service;
-		this.registry = (IExtensionRegistry) registryObject;
-		initializeScopes();
-		registry.addRegistryChangeListener(this);
-	}
-	
-	void stop() {
-		registry.removeRegistryChangeListener(this);
-	}
-
-	/*
-	 * Add the given configuration element into our list of preference modify listeners.
-	 */
-	private void addModifyListener(IConfigurationElement element) {
-		String key = element.getAttribute(ATTRIBUTE_CLASS);
-		if (key == null) {
-			String message = NLS.bind(PrefsMessages.preferences_missingClassAttribute, element.getDeclaringExtension().getUniqueIdentifier());
-			log(new Status(IStatus.ERROR, PrefsMessages.OWNER_NAME, IStatus.ERROR, message, null));
-			return;
-		}
-		try {
-			Object listener = element.createExecutableExtension(ATTRIBUTE_CLASS);
-			if (!(listener instanceof PreferenceModifyListener)) {
-				log(new Status(IStatus.ERROR, PrefsMessages.OWNER_NAME, IStatus.ERROR, PrefsMessages.preferences_classCastListener, null));
-				return;
-			}
-			modifyListeners.add(listener);
-		} catch (CoreException e) {
-			log(e.getStatus());
-		}
-	}
-
-	/*
-	 * Apply the runtime defaults for the bundle with the given name. Check
-	 * to see if there is a preference initializer registered and if so, then run it. 
-	 * Otherwise call the legacy Plugin preference initialization code.
-	 */
-	public WeakReference applyRuntimeDefaults(String name, WeakReference pluginReference) {
-		IExtension[] extensions = getPrefExtensions();
-		if (extensions.length == 0) {
-			if (EclipsePreferences.DEBUG_PREFERENCE_GENERAL)
-				PrefsMessages.message("Skipping runtime default preference customization."); //$NON-NLS-1$
-			return null;
-		}
-		boolean foundInitializer = false;
-		for (int i = 0; i < extensions.length; i++) {
-			IConfigurationElement[] elements = extensions[i].getConfigurationElements();
-			for (int j = 0; j < elements.length; j++)
-				if (ELEMENT_INITIALIZER.equals(elements[j].getName())) {
-					if (name.equals(elements[j].getContributor().getName())) {
-						if (EclipsePreferences.DEBUG_PREFERENCE_GENERAL) {
-							IExtension theExtension = elements[j].getDeclaringExtension();
-							String extensionNamespace = theExtension.getContributor().getName();
-							Bundle underlyingBundle = PreferencesOSGiUtils.getDefault().getBundle(extensionNamespace);
-							String ownerName;
-							if (underlyingBundle != null)
-								ownerName = underlyingBundle.getSymbolicName();
-							else
-								ownerName = extensionNamespace;
-							PrefsMessages.message("Running default preference customization as defined by: " + ownerName); //$NON-NLS-1$
-						}
-						runInitializer(elements[j]);
-						// don't return yet in case we have multiple initializers registered
-						foundInitializer = true;
-					}
-				}
-		}
-		if (foundInitializer)
-			return null;
-
-		// TODO this means that we don't call the legacy Plugin code if the registry isn't present.
-		// I don't think this is the desired behaviour
-
-		// Do legacy plugin preference initialization
-		Object plugin = pluginReference.get();
-		ILegacyPreferences initService = PreferencesOSGiUtils.getDefault().getLegacyPreferences();
-		if (initService != null)
-			plugin = initService.init(plugin, name);
-		return new WeakReference(plugin);
-	}
-
-	/*
-	 * Create a new child node with the given parent. Look up the name
-	 * in the registry as it may map to a configuration element. This is done
-	 * for lazy initialization of user-contributed scopes.
-	 */
-	public IEclipsePreferences createNode(RootPreferences parent, String name) {
-		IScope scope = null;
-		Object value = scopeRegistry.get(name);
-		if (value instanceof IConfigurationElement) {
-			try {
-				scope = (IScope) ((IConfigurationElement) value).createExecutableExtension(ATTRIBUTE_CLASS);
-				scopeRegistry.put(name, scope);
-			} catch (ClassCastException e) {
-				log(createStatusError(PrefsMessages.preferences_classCastScope, e));
-				return new EclipsePreferences(parent, name);
-			} catch (CoreException e) {
-				log(e.getStatus());
-				return new EclipsePreferences(parent, name);
-			}
-		} else
-			scope = (IScope) value;
-		return scope.create(parent, name);
-	}
-
-	/*
-	 * Return a list of the preference modify listeners. They are called during preference
-	 * import and given the chance to modify the imported tree.
-	 */
-	public PreferenceModifyListener[] getModifyListeners() {
-		if (modifyListeners == null) {
-			modifyListeners = new ListenerList();
-			IExtension[] extensions = getPrefExtensions();
-			for (int i = 0; i < extensions.length; i++) {
-				IConfigurationElement[] elements = extensions[i].getConfigurationElements();
-				for (int j = 0; j < elements.length; j++)
-					if (ELEMENT_MODIFIER.equalsIgnoreCase(elements[j].getName()))
-						addModifyListener(elements[j]);
-			}
-		}
-		Object[] source = modifyListeners.getListeners();
-		PreferenceModifyListener[] result = new PreferenceModifyListener[source.length];
-		System.arraycopy(source, 0, result, 0, source.length);
-		return result;
-	}
-
-	/*
-	 * Return a list of the extensions which are plugged into the preference
-	 * extension point.
-	 */
-	private IExtension[] getPrefExtensions() {
-		IExtension[] extensionsOld = EMPTY_EXTENSION_ARRAY;
-		IExtension[] extensionsNew = EMPTY_EXTENSION_ARRAY;
-		// "old"
-		IExtensionPoint pointOld = registry.getExtensionPoint(IPreferencesConstants.RUNTIME_NAME, IPreferencesConstants.PT_PREFERENCES);
-		if (pointOld != null)
-			extensionsOld = pointOld.getExtensions();
-		// "new"
-		IExtensionPoint pointNew = registry.getExtensionPoint(IPreferencesConstants.PREFERS_NAME, IPreferencesConstants.PT_PREFERENCES);
-		if (pointNew != null)
-			extensionsNew = pointNew.getExtensions();
-		// combine
-		IExtension[] extensions = new IExtension[extensionsOld.length + extensionsNew.length];
-		System.arraycopy(extensionsOld, 0, extensions, 0, extensionsOld.length);
-		System.arraycopy(extensionsNew, 0, extensions, extensionsOld.length, extensionsNew.length);
-
-		if (extensions.length == 0) {
-			if (EclipsePreferences.DEBUG_PREFERENCE_GENERAL)
-				PrefsMessages.message("No extensions for org.eclipse.core.contenttype."); //$NON-NLS-1$
-		}
-
-		return extensions;
-	}
-
-	/*
-	 * See who is plugged into the extension point.
-	 */
-	private void initializeScopes() {
-		IExtension[] extensions = getPrefExtensions();
-		for (int i = 0; i < extensions.length; i++) {
-			IConfigurationElement[] elements = extensions[i].getConfigurationElements();
-			for (int j = 0; j < elements.length; j++)
-				if (ELEMENT_SCOPE.equalsIgnoreCase(elements[j].getName()))
-					scopeAdded(elements[j]);
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.runtime.IRegistryChangeListener#registryChanged(org.eclipse.core.runtime.IRegistryChangeEvent)
-	 */
-	public void registryChanged(IRegistryChangeEvent event) {
-		IExtensionDelta[] deltasOld = event.getExtensionDeltas(IPreferencesConstants.RUNTIME_NAME, IPreferencesConstants.PT_PREFERENCES);
-		IExtensionDelta[] deltasNew = event.getExtensionDeltas(IPreferencesConstants.PREFERS_NAME, IPreferencesConstants.PT_PREFERENCES);
-		IExtensionDelta[] deltas = new IExtensionDelta[deltasOld.length + deltasNew.length];
-		System.arraycopy(deltasOld, 0, deltas, 0, deltasOld.length);
-		System.arraycopy(deltasNew, 0, deltas, deltasOld.length, deltasNew.length);
-
-		if (deltas.length == 0)
-			return;
-		// dynamically adjust the registered scopes
-		for (int i = 0; i < deltas.length; i++) {
-			IConfigurationElement[] elements = deltas[i].getExtension().getConfigurationElements();
-			for (int j = 0; j < elements.length; j++) {
-				switch (deltas[i].getKind()) {
-					case IExtensionDelta.ADDED :
-						if (ELEMENT_SCOPE.equalsIgnoreCase(elements[j].getName()))
-							scopeAdded(elements[j]);
-						break;
-					case IExtensionDelta.REMOVED :
-						String scope = elements[j].getAttribute(ATTRIBUTE_NAME);
-						if (scope != null)
-							scopeRemoved(scope);
-						break;
-				}
-			}
-		}
-		// initialize the preference modify listeners
-		modifyListeners = null;
-	}
-
-	/*
-	 * Run the preference initializer as specified by the given configuration element.
-	 */
-	private void runInitializer(IConfigurationElement element) {
-		AbstractPreferenceInitializer initializer = null;
-		try {
-			initializer = (AbstractPreferenceInitializer) element.createExecutableExtension(ATTRIBUTE_CLASS);
-			initializer.initializeDefaultPreferences();
-		} catch (ClassCastException e) {
-			IStatus status = new Status(IStatus.ERROR, PrefsMessages.OWNER_NAME, IStatus.ERROR, PrefsMessages.preferences_invalidExtensionSuperclass, e);
-			log(status);
-		} catch (CoreException e) {
-			log(e.getStatus());
-		}
-	}
-
-	/*
-	 * A preference scope defined by the given element was added to the extension 
-	 * registry. Add it to our registry and make it a child of the root.
-	 */
-	private void scopeAdded(IConfigurationElement element) {
-		String key = element.getAttribute(ATTRIBUTE_NAME);
-		if (key == null) {
-			String message = NLS.bind(PrefsMessages.preferences_missingScopeAttribute, element.getDeclaringExtension().getUniqueIdentifier());
-			log(createStatusWarning(message, null));
-			return;
-		}
-		scopeRegistry.put(key, element);
-		((RootPreferences) service.getRootNode()).addChild(key, null);
-	}
-
-	/*
-	 * A preference scope with the given name was removed from the extension
-	 * registry. Remove the node and its children from the preference tree.
-	 */
-	private void scopeRemoved(String key) {
-		IEclipsePreferences node = (IEclipsePreferences) ((RootPreferences) service.getRootNode()).getNode(key, false);
-		if (node != null)
-			((RootPreferences) service.getRootNode()).removeNode(node);
-		else
-			((RootPreferences) service.getRootNode()).removeNode(key);
-		scopeRegistry.remove(key);
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/PreferencesOSGiUtils.java b/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/PreferencesOSGiUtils.java
deleted file mode 100644
index c42d5af..0000000
--- a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/PreferencesOSGiUtils.java
+++ /dev/null
@@ -1,161 +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.core.internal.preferences;
-
-import org.eclipse.core.internal.preferences.exchange.ILegacyPreferences;
-import org.eclipse.osgi.service.datalocation.Location;
-import org.eclipse.osgi.service.debug.DebugOptions;
-import org.osgi.framework.*;
-import org.osgi.service.packageadmin.PackageAdmin;
-import org.osgi.util.tracker.ServiceTracker;
-
-/**
- * This class contains a set of helper OSGI methods for the Preferences plugin.
- * The closeServices() method should be called before the plugin is stopped. 
- * 
- * @since org.eclipse.equinox.preferences 3.2
- */
-public class PreferencesOSGiUtils {
-	private ServiceTracker initTracker = null;
-	private ServiceTracker debugTracker = null;
-	private ServiceTracker bundleTracker = null;
-	private ServiceTracker configurationLocationTracker = null;
-	private ServiceTracker instanceLocationTracker = null;
-
-	private static final PreferencesOSGiUtils singleton = new PreferencesOSGiUtils();
-
-	public static PreferencesOSGiUtils getDefault() {
-		return singleton;
-	}
-
-	/**
-	 * Private constructor to block instance creation.
-	 */
-	private PreferencesOSGiUtils() {
-		super();
-	}
-
-	void openServices() {
-		BundleContext context = Activator.getContext();
-		if (context == null) {
-			if (EclipsePreferences.DEBUG_PREFERENCE_GENERAL)
-				PrefsMessages.message("PreferencesOSGiUtils called before plugin started"); //$NON-NLS-1$
-			return;
-		}
-
-		initTracker = new ServiceTracker(context, ILegacyPreferences.class.getName(), null);
-		initTracker.open(true);
-
-		debugTracker = new ServiceTracker(context, DebugOptions.class.getName(), null);
-		debugTracker.open();
-
-		bundleTracker = new ServiceTracker(context, PackageAdmin.class.getName(), null);
-		bundleTracker.open();
-
-		// locations
-
-		Filter filter = null;
-		try {
-			filter = context.createFilter(Location.CONFIGURATION_FILTER);
-		} catch (InvalidSyntaxException e) {
-			// ignore this.  It should never happen as we have tested the above format.
-		}
-		configurationLocationTracker = new ServiceTracker(context, filter, null);
-		configurationLocationTracker.open();
-
-		try {
-			filter = context.createFilter(Location.INSTANCE_FILTER);
-		} catch (InvalidSyntaxException e) {
-			// ignore this.  It should never happen as we have tested the above format.
-		}
-		instanceLocationTracker = new ServiceTracker(context, filter, null);
-		instanceLocationTracker.open();
-	}
-
-	void closeServices() {
-		if (initTracker != null) {
-			initTracker.close();
-			initTracker = null;
-		}
-		if (debugTracker != null) {
-			debugTracker.close();
-			debugTracker = null;
-		}
-		if (bundleTracker != null) {
-			bundleTracker.close();
-			bundleTracker = null;
-		}
-		if (configurationLocationTracker != null) {
-			configurationLocationTracker.close();
-			configurationLocationTracker = null;
-		}
-		if (instanceLocationTracker != null) {
-			instanceLocationTracker.close();
-			instanceLocationTracker = null;
-		}
-	}
-
-	public ILegacyPreferences getLegacyPreferences() {
-		if (initTracker != null)
-			return (ILegacyPreferences) initTracker.getService();
-		if (EclipsePreferences.DEBUG_PREFERENCE_GENERAL)
-			PrefsMessages.message("Legacy preference tracker is not set"); //$NON-NLS-1$
-		return null;
-	}
-
-	public boolean getBooleanDebugOption(String option, boolean defaultValue) {
-		if (debugTracker == null) {
-			if (EclipsePreferences.DEBUG_PREFERENCE_GENERAL)
-				PrefsMessages.message("Debug tracker is not set"); //$NON-NLS-1$
-			return defaultValue;
-		}
-		DebugOptions options = (DebugOptions) debugTracker.getService();
-		if (options != null) {
-			String value = options.getOption(option);
-			if (value != null)
-				return value.equalsIgnoreCase("true"); //$NON-NLS-1$
-		}
-		return defaultValue;
-	}
-
-	public Bundle getBundle(String bundleName) {
-		if (bundleTracker == null) {
-			if (EclipsePreferences.DEBUG_PREFERENCE_GENERAL)
-				PrefsMessages.message("Bundle tracker is not set"); //$NON-NLS-1$
-			return null;
-		}
-		PackageAdmin packageAdmin = (PackageAdmin) bundleTracker.getService();
-		if (packageAdmin == null)
-			return null;
-		Bundle[] bundles = packageAdmin.getBundles(bundleName, 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;
-	}
-
-	public Location getConfigurationLocation() {
-		if (configurationLocationTracker != null)
-			return (Location) configurationLocationTracker.getService();
-		return null;
-	}
-
-	public Location getInstanceLocation() {
-		if (instanceLocationTracker != null)
-			return (Location) instanceLocationTracker.getService();
-		return null;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/PreferencesService.java b/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/PreferencesService.java
deleted file mode 100644
index 982974b..0000000
--- a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/PreferencesService.java
+++ /dev/null
@@ -1,1019 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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.preferences;
-
-import java.io.*;
-import java.lang.ref.WeakReference;
-import java.util.*;
-import org.eclipse.core.internal.runtime.RuntimeLog;
-import org.eclipse.core.runtime.*;
-import org.eclipse.core.runtime.preferences.*;
-import org.eclipse.osgi.util.NLS;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.Constants;
-import org.osgi.service.prefs.BackingStoreException;
-import org.osgi.service.prefs.Preferences;
-
-/**
- * @since 3.0
- */
-public class PreferencesService implements IPreferencesService {
-	/**
-	 * The interval between passes over the preference tree to canonicalize
-	 * strings.
-	 */
-	private static final long STRING_SHARING_INTERVAL = 300000;
-
-	// 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, //
-			ConfigurationScope.SCOPE, //
-			DefaultScope.SCOPE};
-	private static final char EXPORT_ROOT_PREFIX = '!';
-	private static final char BUNDLE_VERSION_PREFIX = '@';
-	private static final float EXPORT_VERSION = 3;
-	private static final String VERSION_KEY = "file_export_version"; //$NON-NLS-1$
-	private static final String EMPTY_STRING = ""; //$NON-NLS-1$
-
-	private static PreferencesService instance;
-	static final RootPreferences root = new RootPreferences();
-	private static final Map defaultsRegistry = Collections.synchronizedMap(new HashMap());
-	private Object registryHelper = null;
-	private Map defaultScopes = new HashMap();
-
-	/**
-	 * The last time analysis was done to remove duplicate strings
-	 */
-	private long lastStringSharing = 0;
-
-	/*
-	 * Create and return an IStatus object with ERROR severity and the
-	 * given message and exception.
-	 */
-	private static IStatus createStatusError(String message, Exception e) {
-		return new Status(IStatus.ERROR, PrefsMessages.OWNER_NAME, IStatus.ERROR, message, e);
-	}
-
-	/*
-	 * Return the instance.
-	 */
-	public static PreferencesService getDefault() {
-		if (instance == null)
-			instance = new PreferencesService();
-		return instance;
-	}
-
-	static void log(IStatus status) {
-		RuntimeLog.log(status);
-	}
-
-	PreferencesService() {
-		super();
-		initializeDefaultScopes();
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.runtime.preferences.IPreferencesService#applyPreferences(org.eclipse.core.runtime.preferences.IEclipsePreferences, org.eclipse.core.runtime.preferences.IPreferenceFilter[])
-	 */
-	public void applyPreferences(IEclipsePreferences tree, IPreferenceFilter[] filters) throws CoreException {
-		if (filters == null || filters.length == 0)
-			return;
-		try {
-			internalApply(tree, filters);
-			//this typically causes a major change to the preference tree, so force string sharing
-			lastStringSharing = 0;
-			shareStrings();
-		} catch (BackingStoreException e) {
-			throw new CoreException(createStatusError(PrefsMessages.preferences_applyProblems, e));
-		}
-	}
-
-	/*
-	 * @see org.eclipse.core.runtime.preferences.IPreferencesService#applyPreferences(org.eclipse.core.runtime.preferences.IExportedPreferences)
-	 */
-	public IStatus applyPreferences(IExportedPreferences preferences) throws CoreException {
-		// TODO investigate refactoring to merge with new #apply(IEclipsePreferences, IPreferenceFilter[]) APIs
-		if (preferences == null)
-			throw new IllegalArgumentException();
-
-		if (EclipsePreferences.DEBUG_PREFERENCE_GENERAL)
-			PrefsMessages.message("Applying exported preferences: " + ((ExportedPreferences) preferences).toDeepDebugString()); //$NON-NLS-1$
-
-		final MultiStatus result = new MultiStatus(PrefsMessages.OWNER_NAME, IStatus.OK, PrefsMessages.preferences_applyProblems, null);
-
-		IEclipsePreferences modifiedNode = firePreApplyEvent(preferences);
-
-		// create a visitor to apply the given set of preferences
-		IPreferenceNodeVisitor visitor = new IPreferenceNodeVisitor() {
-			public boolean visit(IEclipsePreferences node) throws BackingStoreException {
-				IEclipsePreferences globalNode;
-				if (node.parent() == null)
-					globalNode = root;
-				else
-					globalNode = (IEclipsePreferences) root.node(node.absolutePath());
-				ExportedPreferences epNode = (ExportedPreferences) node;
-
-				// if this node is an export root then we need to remove 
-				// it from the global preferences before continuing.
-				boolean removed = false;
-				if (epNode.isExportRoot()) {
-					if (EclipsePreferences.DEBUG_PREFERENCE_GENERAL)
-						PrefsMessages.message("Found export root: " + epNode.absolutePath()); //$NON-NLS-1$
-					// TODO should only have to do this if any of my children have properties to set
-					globalNode.removeNode();
-					removed = true;
-				}
-
-				// iterate over the preferences in this node and set them
-				// in the global space.
-				String[] keys = epNode.properties.keys();
-				if (keys.length > 0) {
-					// if this node was removed then we need to create a new one
-					if (removed)
-						globalNode = (IEclipsePreferences) root.node(node.absolutePath());
-					for (int i = 0; i < keys.length; i++) {
-						String key = keys[i];
-						// intern strings we import because some people
-						// in their property change listeners use identity
-						// instead of equals. See bug 20193 and 20534.
-						key = key.intern();
-						String value = node.get(key, null);
-						if (value != null) {
-							if (EclipsePreferences.DEBUG_PREFERENCE_SET)
-								PrefsMessages.message("Setting: " + globalNode.absolutePath() + '/' + key + '=' + value); //$NON-NLS-1$
-							globalNode.put(key, value);
-						}
-					}
-				}
-
-				// keep visiting children
-				return true;
-			}
-		};
-
-		try {
-			// start by visiting the root
-			modifiedNode.accept(visitor);
-		} catch (BackingStoreException e) {
-			throw new CoreException(createStatusError(PrefsMessages.preferences_applyProblems, e));
-		}
-
-		// save the preferences
-		try {
-			getRootNode().node(modifiedNode.absolutePath()).flush();
-		} catch (BackingStoreException e) {
-			throw new CoreException(createStatusError(PrefsMessages.preferences_saveProblems, e));
-		}
-
-		if (EclipsePreferences.DEBUG_PREFERENCE_GENERAL)
-			PrefsMessages.message("Current list of all settings: " + ((EclipsePreferences) getRootNode()).toDeepDebugString()); //$NON-NLS-1$
-		//this typically causes a major change to the preference tree, so force string sharing
-		lastStringSharing = 0;
-		shareStrings();
-		return result;
-	}
-
-	private boolean containsKeys(IEclipsePreferences aRoot) throws BackingStoreException {
-		final boolean result[] = new boolean[] {false};
-		IPreferenceNodeVisitor visitor = new IPreferenceNodeVisitor() {
-			public boolean visit(IEclipsePreferences node) throws BackingStoreException {
-				if (node.keys().length != 0)
-					result[0] = true;
-				return !result[0];
-			}
-		};
-		aRoot.accept(visitor);
-		return result[0];
-	}
-
-	/*
-	 * Convert the given properties file from legacy format to 
-	 * one which is Eclipse 3.0 compliant. 
-	 * 
-	 * Convert the plug-in version indicator entries to export roots.
-	 */
-	private Properties convertFromLegacy(Properties properties) {
-		Properties result = new Properties();
-		String prefix = IPath.SEPARATOR + InstanceScope.SCOPE + IPath.SEPARATOR;
-		for (Iterator i = properties.keySet().iterator(); i.hasNext();) {
-			String key = (String) i.next();
-			String value = properties.getProperty(key);
-			if (value != null) {
-				int index = key.indexOf(IPath.SEPARATOR);
-				if (index == -1) {
-					result.put(BUNDLE_VERSION_PREFIX + key, value);
-					result.put(EXPORT_ROOT_PREFIX + prefix + key, EMPTY_STRING);
-				} else {
-					String path = key.substring(0, index);
-					key = key.substring(index + 1);
-					result.put(EclipsePreferences.encodePath(prefix + path, key), value);
-				}
-			}
-		}
-		return result;
-	}
-
-	/*
-	 * Convert the given properties file into a node hierarchy suitable for
-	 * importing.
-	 */
-	private IExportedPreferences convertFromProperties(Properties properties) {
-		IExportedPreferences result = ExportedPreferences.newRoot();
-		for (Iterator i = properties.keySet().iterator(); i.hasNext();) {
-			String path = (String) i.next();
-			String value = properties.getProperty(path);
-			if (path.charAt(0) == EXPORT_ROOT_PREFIX) {
-				ExportedPreferences current = (ExportedPreferences) result.node(path.substring(1));
-				current.setExportRoot();
-			} else if (path.charAt(0) == BUNDLE_VERSION_PREFIX) {
-				ExportedPreferences current = (ExportedPreferences) result.node(InstanceScope.SCOPE).node(path.substring(1));
-				current.setVersion(value);
-			} else {
-				String[] decoded = EclipsePreferences.decodePath(path);
-				path = decoded[0] == null ? EMPTY_STRING : decoded[0];
-				ExportedPreferences current = (ExportedPreferences) result.node(path);
-				String key = decoded[1];
-				current.put(key, value);
-			}
-		}
-		if (EclipsePreferences.DEBUG_PREFERENCE_GENERAL)
-			PrefsMessages.message("Converted preferences file to IExportedPreferences tree: " + ((ExportedPreferences) result).toDeepDebugString()); //$NON-NLS-1$
-		return result;
-	}
-
-	/*
-	 * excludesList is guaranteed not to be null
-	 */
-	private Properties convertToProperties(IEclipsePreferences preferences, final String[] excludesList) throws BackingStoreException {
-		final Properties result = new Properties();
-		final int baseLength = preferences.absolutePath().length();
-
-		// create a visitor to do the export
-		IPreferenceNodeVisitor visitor = new IPreferenceNodeVisitor() {
-			public boolean visit(IEclipsePreferences node) throws BackingStoreException {
-				// don't store defaults
-				String absolutePath = node.absolutePath();
-				String scope = getScope(absolutePath);
-				if (DefaultScope.SCOPE.equals(scope))
-					return false;
-				String path = absolutePath.length() <= baseLength ? EMPTY_STRING : EclipsePreferences.makeRelative(absolutePath.substring(baseLength));
-				// check the excludes list to see if this node should be considered
-				for (int i = 0; i < excludesList.length; i++) {
-					String exclusion = EclipsePreferences.makeRelative(excludesList[i]);
-					if (path.startsWith(exclusion))
-						return false;
-				}
-				boolean needToAddVersion = InstanceScope.SCOPE.equals(scope);
-				// check the excludes list for each preference
-				String[] keys = node.keys();
-				for (int i = 0; i < keys.length; i++) {
-					String key = keys[i];
-					boolean ignore = false;
-					for (int j = 0; !ignore && j < excludesList.length; j++)
-						if (EclipsePreferences.encodePath(path, key).startsWith(EclipsePreferences.makeRelative(excludesList[j])))
-							ignore = true;
-					if (!ignore) {
-						String value = node.get(key, null);
-						if (value != null) {
-							if (needToAddVersion) {
-								String bundle = getBundleName(absolutePath);
-								if (bundle != null) {
-									String version = getBundleVersion(bundle);
-									if (version != null)
-										result.put(BUNDLE_VERSION_PREFIX + bundle, version);
-								}
-								needToAddVersion = false;
-							}
-							result.put(EclipsePreferences.encodePath(absolutePath, key), value);
-						}
-					}
-				}
-				return true;
-			}
-		};
-
-		// start by visiting the root that we were passed in
-		preferences.accept(visitor);
-
-		// return the properties object
-		return result;
-	}
-
-	/**
-	 * Copy key/value pairs from the source to the destination. If the key list is null
-	 * then copy all associations. 
-	 * 
-	 * If the depth is 0, then this operation is performed only on the source node. Otherwise
-	 * it is performed on the source node's subtree.
-	 * 
-	 * @param depth one of 0 or -1
-	 */
-	void copyFromTo(Preferences source, Preferences destination, String[] keys, int depth) throws BackingStoreException {
-		String[] keysToCopy = keys == null ? source.keys() : keys;
-		for (int i = 0; i < keysToCopy.length; i++) {
-			String value = source.get(keysToCopy[i], null);
-			if (value != null)
-				destination.put(keysToCopy[i], value);
-		}
-		if (depth == 0)
-			return;
-		String[] children = source.childrenNames();
-		for (int i = 0; i < children.length; i++)
-			copyFromTo(source.node(children[i]), destination.node(children[i]), keys, depth);
-	}
-
-	public WeakReference applyRuntimeDefaults(String name, WeakReference pluginReference) {
-		if (registryHelper == null)
-			return null;
-		return ((PreferenceServiceRegistryHelper) registryHelper).applyRuntimeDefaults(name, pluginReference);
-	}
-
-	private void initializeDefaultScopes() {
-		defaultScopes.put(DefaultScope.SCOPE, new DefaultPreferences());
-		root.addChild(DefaultScope.SCOPE, null);
-		defaultScopes.put(InstanceScope.SCOPE, new InstancePreferences());
-		root.addChild(InstanceScope.SCOPE, null);
-		defaultScopes.put(ConfigurationScope.SCOPE, new ConfigurationPreferences());
-		root.addChild(ConfigurationScope.SCOPE, null);
-	}
-
-	public IEclipsePreferences createNode(String key) {
-		IScope scope = (IScope) defaultScopes.get(key);
-		if (scope == null) {
-			if (registryHelper == null)
-				return new EclipsePreferences(root, key);
-			return ((PreferenceServiceRegistryHelper) registryHelper).createNode(root, key);
-		}
-		return scope.create(root, key);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.runtime.preferences.IPreferencesService#exportPreferences(IEclipsePreferences, IPreferenceFilter[], OutputStream)
-	 */
-	public void exportPreferences(IEclipsePreferences node, IPreferenceFilter[] filters, OutputStream stream) throws CoreException {
-		if (filters == null || filters.length == 0)
-			return;
-		try {
-			internalExport(node, filters, stream);
-		} catch (BackingStoreException e) {
-			throw new CoreException(createStatusError(PrefsMessages.preferences_exportProblems, e));
-		}
-	}
-
-	/*
-	 * @see org.eclipse.core.runtime.preferences.IPreferencesService#exportPreferences(org.eclipse.core.runtime.preferences.IEclipsePreferences, java.io.OutputStream, java.lang.String[])
-	 */
-	public IStatus exportPreferences(IEclipsePreferences node, OutputStream output, String[] excludesList) throws CoreException {
-		// TODO investigate refactoring to merge with new #export(IEclipsePreferences, IPreferenceFilter[]) APIs
-		if (node == null || output == null)
-			throw new IllegalArgumentException();
-		Properties properties = null;
-		if (excludesList == null)
-			excludesList = new String[0];
-		try {
-			properties = convertToProperties(node, excludesList);
-			if (properties.isEmpty())
-				return Status.OK_STATUS;
-			properties.put(VERSION_KEY, Float.toString(EXPORT_VERSION));
-			properties.put(EXPORT_ROOT_PREFIX + node.absolutePath(), EMPTY_STRING);
-		} catch (BackingStoreException e) {
-			throw new CoreException(createStatusError(e.getMessage(), e));
-		}
-		try {
-			properties.store(output, null);
-		} catch (IOException e) {
-			throw new CoreException(createStatusError(PrefsMessages.preferences_exportProblems, e));
-		}
-		return Status.OK_STATUS;
-	}
-
-	/*
-	 * Give clients a chance to modify the tree before it is applied globally 
-	 */
-	private IEclipsePreferences firePreApplyEvent(IEclipsePreferences tree) {
-		if (registryHelper == null)
-			return tree;
-		final IEclipsePreferences[] result = new IEclipsePreferences[] {tree};
-		PreferenceModifyListener[] listeners = ((PreferenceServiceRegistryHelper) registryHelper).getModifyListeners();
-		for (int i = 0; i < listeners.length; i++) {
-			final PreferenceModifyListener listener = listeners[i];
-			ISafeRunnable job = new ISafeRunnable() {
-				public void handleException(Throwable exception) {
-					// already logged in Platform#run()
-				}
-
-				public void run() throws Exception {
-					result[0] = listener.preApply(result[0]);
-				}
-			};
-			SafeRunner.run(job);
-		}
-		return result[0];
-	}
-
-	/*
-	 * @see org.eclipse.core.runtime.preferences.IPreferencesService#get(java.lang.String, java.lang.String, org.osgi.service.prefs.Preferences[])
-	 */
-	public String get(String key, String defaultValue, Preferences[] nodes) {
-		if (nodes == null)
-			return defaultValue;
-		for (int i = 0; i < nodes.length; i++) {
-			Preferences node = nodes[i];
-			if (node != null) {
-				String result = node.get(key, null);
-				if (result != null)
-					return result;
-			}
-		}
-		return defaultValue;
-	}
-
-	/*
-	 * @see org.eclipse.core.runtime.preferences.IPreferencesService#getBoolean(java.lang.String, java.lang.String, boolean, org.eclipse.core.runtime.preferences.IScope[])
-	 */
-	public boolean getBoolean(String qualifier, String key, boolean defaultValue, IScopeContext[] scopes) {
-		String result = get(EclipsePreferences.decodePath(key)[1], null, getNodes(qualifier, key, scopes));
-		return result == null ? defaultValue : Boolean.valueOf(result).booleanValue();
-	}
-
-	/*
-	 * Return the name of the bundle from the given path.
-	 * It is assumed that that path is:
-	 * - absolute
-	 * - in the instance scope
-	 */
-	String getBundleName(String path) {
-		if (path.length() == 0 || path.charAt(0) != IPath.SEPARATOR)
-			return null;
-		int first = path.indexOf(IPath.SEPARATOR, 1);
-		if (first == -1)
-			return null;
-		int second = path.indexOf(IPath.SEPARATOR, first + 1);
-		return second == -1 ? path.substring(first + 1) : path.substring(first + 1, second);
-	}
-
-	/*
-	 * Return the version for the bundle with the given name. Return null if it
-	 * is not known or there is a problem.
-	 */
-	String getBundleVersion(String bundleName) {
-		Bundle bundle = PreferencesOSGiUtils.getDefault().getBundle(bundleName);
-		if (bundle != null) {
-			Object version = bundle.getHeaders(EMPTY_STRING).get(Constants.BUNDLE_VERSION);
-			if (version != null && version instanceof String)
-				return (String) version;
-		}
-		return null;
-	}
-
-	/*
-	 * @see org.eclipse.core.runtime.preferences.IPreferencesService#getByteArray(java.lang.String, java.lang.String, byte[], org.eclipse.core.runtime.preferences.IScope[])
-	 */
-	public byte[] getByteArray(String qualifier, String key, byte[] defaultValue, IScopeContext[] scopes) {
-		String result = get(EclipsePreferences.decodePath(key)[1], null, getNodes(qualifier, key, scopes));
-		return result == null ? defaultValue : result.getBytes();
-	}
-
-	/*
-	 * @see org.eclipse.core.runtime.preferences.IPreferencesService#getDefaultLookupOrder(java.lang.String, java.lang.String)
-	 */
-	public String[] getDefaultLookupOrder(String qualifier, String key) {
-		LookupOrder order = (LookupOrder) defaultsRegistry.get(getRegistryKey(qualifier, key));
-		return order == null ? null : order.getOrder();
-	}
-
-	/*
-	 * @see org.eclipse.core.runtime.preferences.IPreferencesService#getDouble(java.lang.String, java.lang.String, double, org.eclipse.core.runtime.preferences.IScope[])
-	 */
-	public double getDouble(String qualifier, String key, double defaultValue, IScopeContext[] scopes) {
-		String value = get(EclipsePreferences.decodePath(key)[1], null, getNodes(qualifier, key, scopes));
-		if (value == null)
-			return defaultValue;
-		try {
-			return Double.parseDouble(value);
-		} catch (NumberFormatException e) {
-			return defaultValue;
-		}
-	}
-
-	/*
-	 * @see org.eclipse.core.runtime.preferences.IPreferencesService#getFloat(java.lang.String, java.lang.String, float, org.eclipse.core.runtime.preferences.IScope[])
-	 */
-	public float getFloat(String qualifier, String key, float defaultValue, IScopeContext[] scopes) {
-		String value = get(EclipsePreferences.decodePath(key)[1], null, getNodes(qualifier, key, scopes));
-		if (value == null)
-			return defaultValue;
-		try {
-			return Float.parseFloat(value);
-		} catch (NumberFormatException e) {
-			return defaultValue;
-		}
-	}
-
-	/*
-	 * @see org.eclipse.core.runtime.preferences.IPreferencesService#getInt(java.lang.String, java.lang.String, int, org.eclipse.core.runtime.preferences.IScope[])
-	 */
-	public int getInt(String qualifier, String key, int defaultValue, IScopeContext[] scopes) {
-		String value = get(EclipsePreferences.decodePath(key)[1], null, getNodes(qualifier, key, scopes));
-		if (value == null)
-			return defaultValue;
-		try {
-			return Integer.parseInt(value);
-		} catch (NumberFormatException e) {
-			return defaultValue;
-		}
-	}
-
-	/*
-	 * @see org.eclipse.core.runtime.preferences.IPreferencesService#getRootNode()
-	 */
-
-	/*
-	 * @see org.eclipse.core.runtime.preferences.IPreferencesService#getLong(java.lang.String, java.lang.String, long, org.eclipse.core.runtime.preferences.IScope[])
-	 */
-	public long getLong(String qualifier, String key, long defaultValue, IScopeContext[] scopes) {
-		String value = get(EclipsePreferences.decodePath(key)[1], null, getNodes(qualifier, key, scopes));
-		if (value == null)
-			return defaultValue;
-		try {
-			return Long.parseLong(value);
-		} catch (NumberFormatException e) {
-			return defaultValue;
-		}
-	}
-
-	/*
-	 * @see org.eclipse.core.runtime.preferences.IPreferencesService#getLookupOrder(java.lang.String, java.lang.String)
-	 */
-	public String[] getLookupOrder(String qualifier, String key) {
-		String[] order = getDefaultLookupOrder(qualifier, key);
-		// if there wasn't an exact match based on both qualifier and simple name
-		// then do a lookup based only on the qualifier
-		if (order == null && key != null)
-			order = getDefaultLookupOrder(qualifier, null);
-		if (order == null)
-			order = DEFAULT_DEFAULT_LOOKUP_ORDER;
-		return order;
-	}
-
-	private Preferences[] getNodes(String qualifier, String key, IScopeContext[] contexts) {
-		String[] order = getLookupOrder(qualifier, key);
-		String childPath = EclipsePreferences.makeRelative(EclipsePreferences.decodePath(key)[0]);
-		ArrayList result = new ArrayList();
-		for (int i = 0; i < order.length; i++) {
-			String scopeString = order[i];
-			boolean found = false;
-			for (int j = 0; contexts != null && j < contexts.length; j++) {
-				IScopeContext context = contexts[j];
-				if (context != null && context.getName().equals(scopeString)) {
-					Preferences node = context.getNode(qualifier);
-					if (node != null) {
-						found = true;
-						if (childPath != null)
-							node = node.node(childPath);
-						result.add(node);
-					}
-				}
-			}
-			if (!found) {
-				Preferences node = getRootNode().node(scopeString).node(qualifier);
-				if (childPath != null)
-					node = node.node(childPath);
-				result.add(node);
-			}
-			found = false;
-		}
-		return (Preferences[]) result.toArray(new Preferences[result.size()]);
-	}
-
-	/*
-	 * Convert the given qualifier and key into a key to use in the look-up registry.
-	 */
-	private String getRegistryKey(String qualifier, String key) {
-		if (qualifier == null)
-			throw new IllegalArgumentException();
-		if (key == null)
-			return qualifier;
-		return qualifier + '/' + key;
-	}
-
-	public IEclipsePreferences getRootNode() {
-		return root;
-	}
-
-	/*
-	 * Return the string which is the scope for the given path.
-	 * Return the empty string if it cannot be determined.
-	 */
-	String getScope(String path) {
-		if (path == null || path.length() == 0)
-			return EMPTY_STRING;
-		int startIndex = path.indexOf(IPath.SEPARATOR);
-		if (startIndex == -1)
-			return path;
-		if (path.length() == 1)
-			return EMPTY_STRING;
-		int endIndex = path.indexOf(IPath.SEPARATOR, startIndex + 1);
-		if (endIndex == -1)
-			endIndex = path.length();
-		return path.substring(startIndex + 1, endIndex);
-	}
-
-	/*
-	 * @see org.eclipse.core.runtime.preferences.IPreferencesService#getString(java.lang.String, java.lang.String, java.lang.String, org.eclipse.core.runtime.preferences.IScope[])
-	 */
-	public String getString(String qualifier, String key, String defaultValue, IScopeContext[] scopes) {
-		return get(EclipsePreferences.decodePath(key)[1], defaultValue, getNodes(qualifier, key, scopes));
-	}
-
-	/*
-	 * @see org.eclipse.core.runtime.preferences.IPreferencesService#importPreferences(java.io.InputStream)
-	 */
-	public IStatus importPreferences(InputStream input) throws CoreException {
-		if (EclipsePreferences.DEBUG_PREFERENCE_GENERAL)
-			PrefsMessages.message("Importing preferences..."); //$NON-NLS-1$
-		return applyPreferences(readPreferences(input));
-	}
-
-	/**
-	 * Filter the given tree so it only contains values which apply to the specified filters
-	 * then apply the resulting tree to the main preference tree.
-	 */
-	private void internalApply(IEclipsePreferences tree, IPreferenceFilter[] filters) throws BackingStoreException {
-		ArrayList trees = new ArrayList();
-		for (int i = 0; i < filters.length; i++)
-			trees.add(trimTree(tree, filters[i]));
-		// merge the union of the matching filters
-		IEclipsePreferences toApply = mergeTrees((IEclipsePreferences[]) trees.toArray(new IEclipsePreferences[trees.size()]));
-
-		// fire an event to give people a chance to modify the tree
-		toApply = firePreApplyEvent(toApply);
-
-		// actually apply the settings
-		IPreferenceNodeVisitor visitor = new IPreferenceNodeVisitor() {
-			public boolean visit(IEclipsePreferences node) throws BackingStoreException {
-				String[] keys = node.keys();
-				if (keys.length == 0)
-					return true;
-				copyFromTo(node, getRootNode().node(node.absolutePath()), keys, 0);
-				return true;
-			}
-		};
-		toApply.accept(visitor);
-	}
-
-	/**
-	 * Take the preference tree and trim it so it only holds values applying to the given filters.
-	 * Then export the resulting tree to the given output stream.
-	 */
-	private void internalExport(IEclipsePreferences node, IPreferenceFilter filters[], OutputStream output) throws BackingStoreException, CoreException {
-		ArrayList trees = new ArrayList();
-		for (int i = 0; i < filters.length; i++)
-			trees.add(trimTree(node, filters[i]));
-		IEclipsePreferences toExport = mergeTrees((IEclipsePreferences[]) trees.toArray(new IEclipsePreferences[trees.size()]));
-		exportPreferences(toExport, output, (String[]) null);
-	}
-
-	/*
-	 * Return true if the given tree contains information that the specified filter is interested
-	 * in, and false otherwise.
-	 */
-	private boolean internalMatches(IEclipsePreferences tree, IPreferenceFilter filter) throws BackingStoreException {
-		String[] scopes = filter.getScopes();
-		if (scopes == null)
-			throw new IllegalArgumentException();
-		String treePath = tree.absolutePath();
-		// see if this node is applicable by going over all our scopes
-		for (int i = 0; i < scopes.length; i++) {
-			String scope = scopes[i];
-			Map mapping = filter.getMapping(scope);
-			// if the mapping is null then we match everything
-			if (mapping == null) {
-				// if we are the root check to see if the scope exists
-				if (tree.parent() == null && tree.nodeExists(scope))
-					return containsKeys((IEclipsePreferences) tree.node(scope));
-				// otherwise check to see if we are in the right scope
-				if (scopeMatches(scope, tree) && containsKeys(tree))
-					return true;
-				continue;
-			}
-			// iterate over the list of declared nodes
-			for (Iterator iter = mapping.keySet().iterator(); iter.hasNext();) {
-				String nodePath = (String) iter.next();
-				String nodeFullPath = '/' + scope + '/' + nodePath;
-				// if this subtree isn't in a hierarchy we are interested in, then go to the next one
-				if (!nodeFullPath.startsWith(treePath))
-					continue;
-				// get the child node
-				String childPath = nodeFullPath.substring(treePath.length());
-				childPath = EclipsePreferences.makeRelative(childPath);
-				if (tree.nodeExists(childPath)) {
-					PreferenceFilterEntry[] entries;
-					// protect against wrong classes since this is user-code
-					try {
-						entries = (PreferenceFilterEntry[]) mapping.get(nodePath);
-					} catch (ClassCastException e) {
-						log(createStatusError(PrefsMessages.preferences_classCastFilterEntry, e));
-						continue;
-					}
-					// if there are no entries defined then we return false even if we
-					// are supposed to match on the existence of the node as a whole (bug 88820)
-					Preferences child = tree.node(childPath);
-					if (entries == null)
-						return child.keys().length != 0 || child.childrenNames().length != 0;
-					// otherwise check to see if we have any applicable keys
-					for (int j = 0; j < entries.length; j++) {
-						if (entries[j] != null && child.get(entries[j].getKey(), null) != null)
-							return true;
-					}
-				}
-			}
-		}
-		return false;
-	}
-
-	/*
-	 * Internal method that collects the matching filters for the given tree and returns them.
-	 */
-	private IPreferenceFilter[] internalMatches(IEclipsePreferences tree, IPreferenceFilter[] filters) throws BackingStoreException {
-		ArrayList result = new ArrayList();
-		for (int i = 0; i < filters.length; i++)
-			if (internalMatches(tree, filters[i]))
-				result.add(filters[i]);
-		return (IPreferenceFilter[]) result.toArray(new IPreferenceFilter[result.size()]);
-	}
-
-	/*
-	 * Returns a boolean value indicating whether or not the given Properties
-	 * object is the result of a preference export previous to Eclipse 3.0.
-	 * 
-	 * Check the contents of the file. In Eclipse 3.0 we printed out a file
-	 * version key.
-	 */
-	private boolean isLegacy(Properties properties) {
-		return properties.getProperty(VERSION_KEY) == null;
-	}
-
-	/* (non-Javadoc)
-	 * @see IPreferencesService#matches(IEclipsePreferences, IPreferenceFilter[])
-	 */
-	public IPreferenceFilter[] matches(IEclipsePreferences tree, IPreferenceFilter[] filters) throws CoreException {
-		if (filters == null || filters.length == 0)
-			return new IPreferenceFilter[0];
-		try {
-			return internalMatches(tree, filters);
-		} catch (BackingStoreException e) {
-			throw new CoreException(createStatusError(PrefsMessages.preferences_matching, e));
-		}
-	}
-
-	private IEclipsePreferences mergeTrees(IEclipsePreferences[] trees) throws BackingStoreException {
-		if (trees.length == 1)
-			return trees[0];
-		final IEclipsePreferences result = ExportedPreferences.newRoot();
-		if (trees.length == 0)
-			return result;
-		IPreferenceNodeVisitor visitor = new IPreferenceNodeVisitor() {
-			public boolean visit(IEclipsePreferences node) throws BackingStoreException {
-				Preferences destination = result.node(node.absolutePath());
-				copyFromTo(node, destination, null, 0);
-				return true;
-			}
-		};
-		for (int i = 0; i < trees.length; i++)
-			trees[i].accept(visitor);
-		return result;
-	}
-
-	/*
-	 * @see org.eclipse.core.runtime.preferences.IPreferencesService#readPreferences(java.io.InputStream)
-	 */
-	public IExportedPreferences readPreferences(InputStream input) throws CoreException {
-		if (input == null)
-			throw new IllegalArgumentException();
-
-		if (EclipsePreferences.DEBUG_PREFERENCE_GENERAL)
-			PrefsMessages.message("Reading preferences from stream..."); //$NON-NLS-1$
-
-		// read the file into a properties object
-		Properties properties = new Properties();
-		try {
-			properties.load(input);
-		} catch (IOException e) {
-			throw new CoreException(createStatusError(PrefsMessages.preferences_importProblems, e));
-		} finally {
-			try {
-				input.close();
-			} catch (IOException e) {
-				// ignore
-			}
-		}
-
-		// an empty file is an invalid file format
-		if (properties.isEmpty())
-			throw new CoreException(createStatusError(PrefsMessages.preferences_invalidFileFormat, null));
-
-		// manipulate the file if it from a legacy preference export
-		if (isLegacy(properties)) {
-			if (EclipsePreferences.DEBUG_PREFERENCE_GENERAL)
-				PrefsMessages.message("Read legacy preferences file, converting to 3.0 format..."); //$NON-NLS-1$
-			properties = convertFromLegacy(properties);
-		} else {
-			if (EclipsePreferences.DEBUG_PREFERENCE_GENERAL)
-				PrefsMessages.message("Read preferences file."); //$NON-NLS-1$
-			properties.remove(VERSION_KEY);
-		}
-
-		// convert the Properties object into an object to return
-		return convertFromProperties(properties);
-	}
-
-	/**
-	 * Return true if the given node is in the specified scope and false otherwise.
-	 */
-	private boolean scopeMatches(String scope, IEclipsePreferences tree) {
-		// the root isn't in any scope
-		if (tree.parent() == null)
-			return false;
-		// fancy math to get the first segment of the path
-		String path = tree.absolutePath();
-		int index = path.indexOf('/', 1);
-		String sub = path.substring(1, index == -1 ? path.length() : index);
-		return scope.equals(sub);
-	}
-
-	/*
-	 * @see org.eclipse.core.runtime.preferences.IPreferencesService#setDefaultLookupOrder(java.lang.String, java.lang.String, java.lang.String[])
-	 */
-	public void setDefaultLookupOrder(String qualifier, String key, String[] order) {
-		String registryKey = getRegistryKey(qualifier, key);
-		if (order == null)
-			defaultsRegistry.remove(registryKey);
-		else {
-			LookupOrder obj = new LookupOrder(order);
-			defaultsRegistry.put(registryKey, obj);
-		}
-	}
-
-	public void setRegistryHelper(Object registryHelper) {
-		if (this.registryHelper != null && this.registryHelper != registryHelper)
-			((PreferenceServiceRegistryHelper) this.registryHelper).stop();
-		this.registryHelper = registryHelper;
-	}
-
-	/**
-	 * Shares all duplicate equal strings referenced by the preference service.
-	 */
-	void shareStrings() {
-		long now = System.currentTimeMillis();
-		if (now - lastStringSharing < STRING_SHARING_INTERVAL)
-			return;
-		StringPool pool = new StringPool();
-		root.shareStrings(pool);
-		if (EclipsePreferences.DEBUG_PREFERENCE_GENERAL)
-			System.out.println("Preference string sharing saved: " + pool.getSavedStringCount()); //$NON-NLS-1$
-		lastStringSharing = now;
-	}
-
-	/*
-	 * Return a tree which contains only nodes and keys which are applicable to the given filter.
-	 */
-	private IEclipsePreferences trimTree(IEclipsePreferences tree, IPreferenceFilter filter) throws BackingStoreException {
-		IEclipsePreferences result = (IEclipsePreferences) ExportedPreferences.newRoot().node(tree.absolutePath());
-		String[] scopes = filter.getScopes();
-		if (scopes == null)
-			throw new IllegalArgumentException();
-		String treePath = tree.absolutePath();
-		// see if this node is applicable by going over all our scopes
-		for (int i = 0; i < scopes.length; i++) {
-			String scope = scopes[i];
-			Map mapping = filter.getMapping(scope);
-			// if the mapping is null then copy everything if the scope matches
-			if (mapping == null) {
-				// if we are the root node then check our children
-				if (tree.parent() == null && tree.nodeExists(scope))
-					copyFromTo(tree.node(scope), result.node(scope), null, -1);
-				// ensure we are in the correct scope
-				else if (scopeMatches(scope, tree))
-					copyFromTo(tree, result, null, -1);
-				continue;
-			}
-			// iterate over the list of declared nodes
-			for (Iterator iter = mapping.keySet().iterator(); iter.hasNext();) {
-				String nodePath = (String) iter.next();
-				String nodeFullPath = '/' + scope + '/' + nodePath;
-				// if this subtree isn't in a hierarchy we are interested in, then go to the next one
-				if (!nodeFullPath.startsWith(treePath))
-					continue;
-				// get the child node
-				String childPath = nodeFullPath.substring(treePath.length());
-				childPath = EclipsePreferences.makeRelative(childPath);
-				if (tree.nodeExists(childPath)) {
-					PreferenceFilterEntry[] entries;
-					// protect against wrong classes since this is passed in by the user
-					try {
-						entries = (PreferenceFilterEntry[]) mapping.get(nodePath);
-					} catch (ClassCastException e) {
-						log(createStatusError(PrefsMessages.preferences_classCastFilterEntry, e));
-						continue;
-					}
-					String[] keys = null;
-					if (entries != null) {
-						ArrayList list = new ArrayList();
-						for (int j = 0; j < entries.length; j++) {
-							if (entries[j] != null)
-								list.add(entries[j].getKey());
-						}
-						keys = (String[]) list.toArray(new String[list.size()]);
-					}
-					// do infinite depth if there are no keys specified since the parent matched.
-					copyFromTo(tree.node(childPath), result.node(childPath), keys, keys == null ? -1 : 0);
-				}
-			}
-		}
-		return result;
-	}
-
-	/**
-	 * Compares two plugin version identifiers to see if their preferences
-	 * are compatible.  If they are not compatible, a warning message is 
-	 * added to the given multi-status, according to the following rules:
-	 * 
-	 * - plugins that differ in service number: no status
-	 * - plugins that differ in minor version: WARNING status
-	 * - plugins that differ in major version:
-	 * 	- where installed plugin is newer: WARNING status
-	 * 	- where installed plugin is older: ERROR status
-	 * @param bundle the name of the bundle
-	 * @param pref The version identifier of the preferences to be loaded
-	 * @param installed The version identifier of the installed plugin
-	 */
-	IStatus validatePluginVersions(String bundle, PluginVersionIdentifier pref, PluginVersionIdentifier installed) {
-		if (installed.getMajorComponent() == pref.getMajorComponent() && installed.getMinorComponent() == pref.getMinorComponent())
-			return null;
-		int severity;
-		if (installed.getMajorComponent() < pref.getMajorComponent())
-			severity = IStatus.ERROR;
-		else
-			severity = IStatus.WARNING;
-		String msg = NLS.bind(PrefsMessages.preferences_incompatible, (new Object[] {pref, bundle, installed}));
-		return new Status(severity, PrefsMessages.OWNER_NAME, 1, msg, null);
-	}
-
-	public IStatus validateVersions(IPath path) {
-		final MultiStatus result = new MultiStatus(PrefsMessages.OWNER_NAME, IStatus.INFO, PrefsMessages.preferences_validate, null);
-		IPreferenceNodeVisitor visitor = new IPreferenceNodeVisitor() {
-			public boolean visit(IEclipsePreferences node) {
-				if (!(node instanceof ExportedPreferences))
-					return false;
-
-				// calculate the version in the file
-				ExportedPreferences realNode = (ExportedPreferences) node;
-				String version = realNode.getVersion();
-				if (version == null || !PluginVersionIdentifier.validateVersion(version).isOK())
-					return true;
-				PluginVersionIdentifier versionInFile = new PluginVersionIdentifier(version);
-
-				// calculate the version of the installed bundle
-				String bundleName = getBundleName(node.absolutePath());
-				if (bundleName == null)
-					return true;
-				String stringVersion = getBundleVersion(bundleName);
-				if (stringVersion == null || !PluginVersionIdentifier.validateVersion(stringVersion).isOK())
-					return true;
-				PluginVersionIdentifier versionInMemory = new PluginVersionIdentifier(stringVersion);
-
-				// verify the versions based on the matching rules
-				IStatus verification = validatePluginVersions(bundleName, versionInFile, versionInMemory);
-				if (verification != null)
-					result.add(verification);
-
-				return true;
-			}
-		};
-
-		InputStream input = null;
-		try {
-			input = new BufferedInputStream(new FileInputStream(path.toFile()));
-			IExportedPreferences prefs = readPreferences(input);
-			prefs.accept(visitor);
-		} catch (FileNotFoundException e) {
-			// ignore...if the file does not exist then all is OK
-		} catch (CoreException e) {
-			result.add(createStatusError(PrefsMessages.preferences_validationException, e));
-		} catch (BackingStoreException e) {
-			result.add(createStatusError(PrefsMessages.preferences_validationException, e));
-		}
-		return result;
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/PrefsMessages.java b/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/PrefsMessages.java
deleted file mode 100644
index 5eb2f24..0000000
--- a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/PrefsMessages.java
+++ /dev/null
@@ -1,71 +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 - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.core.internal.preferences;
-
-import java.util.Date;
-import org.eclipse.osgi.util.NLS;
-
-// Runtime plugin message catalog
-public class PrefsMessages extends NLS {
-	/**
-	 * The unique identifier constant of this plug-in.
-	 */
-	public static final String OWNER_NAME = "org.eclipse.equinox.preferences"; //$NON-NLS-1$
-
-	private static final String BUNDLE_NAME = "org.eclipse.core.internal.preferences.messages"; //$NON-NLS-1$
-
-	// Preferences
-	public static String preferences_applyProblems;
-	public static String preferences_classCastScope;
-	public static String preferences_classCastListener;
-	public static String preferences_classCastFilterEntry;
-	public static String preferences_errorWriting;
-	public static String preferences_exportProblems;
-	public static String preferences_failedDelete;
-	public static String preferences_fileNotFound;
-	public static String preferences_importProblems;
-	public static String preferences_incompatible;
-	public static String preferences_invalidExtensionSuperclass;
-	public static String preferences_invalidFileFormat;
-	public static String preferences_loadException;
-	public static String preferences_matching;
-	public static String preferences_missingClassAttribute;
-	public static String preferences_missingScopeAttribute;
-	public static String noRegistry;
-	public static String preferences_removedNode;
-	public static String preferences_saveException;
-	public static String preferences_saveProblems;
-	public static String preferences_validate;
-	public static String preferences_validationException;
-
-	static {
-		// load message values from bundle file
-		reloadMessages();
-	}
-
-	public static void reloadMessages() {
-		NLS.initializeMessages(BUNDLE_NAME, PrefsMessages.class);
-	}
-
-	/**
-	 * Print a debug message to the console. 
-	 * Pre-pend the message with the current date and the name of the current thread.
-	 */
-	public static void message(String message) {
-		StringBuffer buffer = new StringBuffer();
-		buffer.append(new Date(System.currentTimeMillis()));
-		buffer.append(" - ["); //$NON-NLS-1$
-		buffer.append(Thread.currentThread().getName());
-		buffer.append("] "); //$NON-NLS-1$
-		buffer.append(message);
-		System.out.println(buffer.toString());
-	}
-}
diff --git a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/RootPreferences.java b/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/RootPreferences.java
deleted file mode 100644
index 26e59a1..0000000
--- a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/RootPreferences.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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.preferences;
-
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.preferences.IEclipsePreferences;
-import org.osgi.service.prefs.BackingStoreException;
-import org.osgi.service.prefs.Preferences;
-
-/**
- * @since 3.0
- */
-public class RootPreferences extends EclipsePreferences {
-
-	/**
-	 * Default constructor.
-	 */
-	public RootPreferences() {
-		super(null, ""); //$NON-NLS-1$
-	}
-
-	/*
-	 * @see org.osgi.service.prefs.Preferences#flush()
-	 */
-	public void flush() throws BackingStoreException {
-		// flush all children
-		BackingStoreException exception = null;
-		String[] names = childrenNames();
-		for (int i = 0; i < names.length; i++) {
-			try {
-				node(names[i]).flush();
-			} catch (BackingStoreException e) {
-				// store the first exception we get and still try and flush
-				// the rest of the children.
-				if (exception == null)
-					exception = e;
-			}
-		}
-		if (exception != null)
-			throw exception;
-	}
-
-	/*
-	 * @see EclipsePreferences#getChild(String, Plugin)
-	 */
-	protected synchronized IEclipsePreferences getChild(String key, Object context) {
-		Object value = null;
-		IEclipsePreferences child = null;
-		if (children != null)
-			value = children.get(key);
-		if (value != null) {
-			if (value instanceof IEclipsePreferences)
-				return (IEclipsePreferences) value;
-			//lazy initialization
-			child = PreferencesService.getDefault().createNode(key);
-			addChild(key, child);
-		}
-		return child;
-	}
-
-	/*
-	 * @see EclipsePreferences#getChildren()
-	 */
-	protected synchronized IEclipsePreferences[] getChildren() {
-		//must perform lazy initialization of child nodes
-		String[] childNames = childrenNames();
-		IEclipsePreferences[] childNodes = new IEclipsePreferences[childNames.length];
-		for (int i = 0; i < childNames.length; i++)
-			childNodes[i] = getChild(childNames[i], null);
-		return childNodes;
-	}
-
-	/*
-	 * @see Preferences#node(String)
-	 */
-	public Preferences node(String path) {
-		return getNode(path, true); // create if not found
-	}
-
-	public Preferences getNode(String path, boolean create) {
-		if (path.length() == 0 || (path.length() == 1 && path.charAt(0) == IPath.SEPARATOR))
-			return this;
-		int startIndex = path.charAt(0) == IPath.SEPARATOR ? 1 : 0;
-		int endIndex = path.indexOf(IPath.SEPARATOR, startIndex + 1);
-		String scope = path.substring(startIndex, endIndex == -1 ? path.length() : endIndex);
-		IEclipsePreferences child;
-		if (create) {
-			child = getChild(scope, null);
-			if (child == null) {
-				child = new EclipsePreferences(this, scope);
-				addChild(scope, child);
-			}
-		} else {
-			child = getChild(scope, null, false);
-			if (child == null)
-				return null;
-		}
-		return child.node(endIndex == -1 ? "" : path.substring(endIndex + 1)); //$NON-NLS-1$
-	}
-
-	/*
-	 * @see org.osgi.service.prefs.Preferences#sync()
-	 */
-	public void sync() throws BackingStoreException {
-		// sync all children
-		BackingStoreException exception = null;
-		String[] names = childrenNames();
-		for (int i = 0; i < names.length; i++) {
-			try {
-				node(names[i]).sync();
-			} catch (BackingStoreException e) {
-				// store the first exception we get and still try and sync
-				// the rest of the children.
-				if (exception == null)
-					exception = e;
-			}
-		}
-		if (exception != null)
-			throw exception;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/StringPool.java b/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/StringPool.java
deleted file mode 100644
index 5d361aa..0000000
--- a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/StringPool.java
+++ /dev/null
@@ -1,68 +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 - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.core.internal.preferences;
-
-import java.util.HashMap;
-
-/**
- * A string pool is used for sharing strings in a way that eliminates duplicate
- * equal strings.  A string pool instance can be maintained over a long period
- * of time, or used as a temporary structure during a string sharing pass over
- * a data structure.
- * <p>
- * This class is not intended to be subclassed by clients.
- * </p>
- * 
- * Note: This class is copied from org.eclipse.core.resources
- * 
- * @since 3.1
- */
-public final class StringPool {
-	private int savings;
-	private final HashMap map = new HashMap();
-
-	/**
-	 * Adds a <code>String</code> to the pool.  Returns a <code>String</code>
-	 * that is equal to the argument but that is unique within this pool.
-	 * @param string The string to add to the pool
-	 * @return A string that is equal to the argument.
-	 */
-	public String add(String string) {
-		if (string == null)
-			return string;
-		Object result = map.get(string);
-		if (result != null) {
-			if (result != string)
-				savings += 44 + 2 * string.length();
-			return (String) result;
-		}
-		map.put(string, string);
-		return string;
-	}
-
-	/**
-	 * Returns an estimate of the size in bytes that was saved by sharing strings in 
-	 * the pool.  In particular, this returns the size of all strings that were added to the
-	 * pool after an equal string had already been added.  This value can be used
-	 * to estimate the effectiveness of a string sharing operation, in order to 
-	 * determine if or when it should be performed again.
-	 * 
-	 * In some cases this does not precisely represent the number of bytes that 
-	 * were saved.  For example, say the pool already contains string S1.  Now 
-	 * string S2, which is equal to S1 but not identical, is added to the pool five 
-	 * times. This method will return the size of string S2 multiplied by the 
-	 * number of times it was added, even though the actual savings in this case
-	 * is only the size of a single copy of S2.
-	 */
-	public int getSavedStringCount() {
-		return savings;
-	}
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/exchange/ILegacyPreferences.java b/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/exchange/ILegacyPreferences.java
deleted file mode 100644
index 34f93ae..0000000
--- a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/exchange/ILegacyPreferences.java
+++ /dev/null
@@ -1,29 +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.core.internal.preferences.exchange;
-
-/**
- * Provides initialization of the legacy preferences as described in
- * the Plugin class.
- * 
- * @depreceated
- */
-public interface ILegacyPreferences {
-	/**
-	 * The method tries to initialize the preferences using the legacy Plugin method.
-	 * 
-	 * @param object - plugin to initialize
-	 * @param name - ID of the plugin to be initialized
-	 * 
-	 * @see Plugin#initializeDefaultPluginPreferences
-	 */
-	public Object init(Object object, String name);
-}
diff --git a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/exchange/IProductPreferencesService.java b/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/exchange/IProductPreferencesService.java
deleted file mode 100644
index e4b20d9..0000000
--- a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/exchange/IProductPreferencesService.java
+++ /dev/null
@@ -1,38 +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.core.internal.preferences.exchange;
-
-import java.util.Properties;
-
-/**
- * A product can customize preferences by implementing this service.
- * 
- * This interface is likely going to change as the application model is introduced
- * in which point it might be kept for backward compatibility or removed entirely.
- * 
- * @since org.eclipse.equinox.common 3.2
- */
-public interface IProductPreferencesService {
-
-	/**
-	 * Returns properties specified in the product customization file.
-	 * 
-	 * @return default preferences specified by the product. 
-	 */
-	public Properties getProductCustomization();
-
-	/**
-	 * Returns translations for the customized properties.
-	 *  
-	 * @return translation table for default preferences
-	 */
-	public Properties getProductTranslation();
-}
diff --git a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/messages.properties b/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/messages.properties
deleted file mode 100644
index a097e26..0000000
--- a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/messages.properties
+++ /dev/null
@@ -1,35 +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
-###############################################################################
-### Runtime preferences plugin messages
-
-### Preferences
-preferences_applyProblems=Problems applying preference changes.
-preferences_classCastScope=Extensions to org.eclipse.core.runtime.preferences extension point must implement the IScope interface.
-preferences_classCastListener=Preference modify listeners must subclass the PreferenceModifyListener class.
-preferences_classCastFilterEntry=Preference filter mappings must be instances of the class PreferenceFilterEntry.
-preferences_errorWriting=Error writing preference file {0}. {1}
-preferences_exportProblems=Problems exporting preferences.
-preferences_failedDelete=Failed to delete preferences file: {0}.
-preferences_fileNotFound=Preference export file not found: {0}.
-preferences_importProblems=Problems importing preferences.
-preferences_incompatible=The preference file contains preferences for version \"{0}\" of plug-in \"{1}\", but version \"{2}\" is currently installed.
-preferences_invalidExtensionSuperclass=Extension does not extend class AbstractPreferenceInitializer.
-preferences_invalidFileFormat=Invalid preference file format.
-preferences_loadException=Exception loading preferences from: {0}.
-preferences_matching=Exception while matching preference filters.
-preferences_missingClassAttribute= Missing \"class\" attribute in \"preference\" element in extension declaration for: {0}.
-preferences_missingScopeAttribute= Missing \"scope\" attribute in \"preference\" element in extension declaration for: {0}.
-noRegistry=Exception installing preference registry helper.
-preferences_removedNode=Preference node \"{0}\" has been removed.
-preferences_saveException=Exception saving preferences to: {0}.
-preferences_saveProblems=Problems saving preferences.
-preferences_validate=Some preferences may not be compatible with the currently installed plug-ins.
-preferences_validationException=Exception while validating bundle versions.
diff --git a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/AbstractPreferenceInitializer.java b/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/AbstractPreferenceInitializer.java
deleted file mode 100644
index 5387407..0000000
--- a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/AbstractPreferenceInitializer.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*******************************************************************************
- * 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
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.core.runtime.preferences;
-
-/**
- * Abstract class used to aid in default preference value initialization.
- * Clients who extend the <code>org.eclipse.core.runtime.preferences</code> 
- * extension point are able to specify a class within an <code>initializer</code>
- * element. 
- * 
- * @since 3.0
- */
-public abstract class AbstractPreferenceInitializer {
-
-	/**
-	 * Default constructor for the class.
-	 */
-	public AbstractPreferenceInitializer() {
-		super();
-	}
-
-	/**
-	 * This method is called by the preference initializer to initialize default
-	 * preference values. Clients should get the correct node for their 
-	 * bundle and then set the default values on it. For example:
-	 * <pre>
-	 *			public void initializeDefaultPreferences() {
-	 *				Preferences node = new DefaultScope().getNode("my.bundle.id");
-	 *				node.put(key, value);
-	 *			}
-	 * </pre>
-	 * <p>
-	 * <em>Note: Clients should only set default preference values for their
-	 * own bundle.</em>
-	 * </p>
-	 * <p>
-	 * <em>Note:</em> Clients should not call this method. It will be called
-	 * automatically by the preference initializer when the appropriate default
-	 * preference node is accessed.
-	 * </p>
-	 */
-	public abstract void initializeDefaultPreferences();
-
-}
diff --git a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/ConfigurationScope.java b/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/ConfigurationScope.java
deleted file mode 100644
index a6b092e..0000000
--- a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/ConfigurationScope.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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.runtime.preferences;
-
-import java.net.URL;
-import org.eclipse.core.internal.preferences.AbstractScope;
-import org.eclipse.core.internal.preferences.PreferencesOSGiUtils;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.osgi.service.datalocation.Location;
-
-/**
- * Object representing the configuration scope in the Eclipse preferences
- * hierarchy. Can be used as a context for searching for preference
- * values (in the IPreferencesService APIs) or for determining the 
- * correct preference node to set values in the store.
- * <p>
- * Configuration preferences are stored on a per configuration basis in the
- * platform's configuration area. (The configuration area typically
- * contains the list of plug-ins available for use, various settings
- * (those shared across different instances of the same configuration)
- * and any other such data needed by plug-ins.)
- * </p>
- * <p>
- * The path for preferences defined in the configuration scope hierarchy
- * is as follows: <code>/configuration/&lt;qualifier&gt;</code>
- * </p>
- * <p>
- * This class is not intended to be subclassed. This class may be instantiated.
- * </p>
- * @see Location#CONFIGURATION_FILTER
- * @since 3.0
- */
-public final class ConfigurationScope extends AbstractScope implements IScopeContext {
-
-	/**
-	 * String constant (value of <code>"configuration"</code>) used for the 
-	 * scope name for the configuration preference scope.
-	 */
-	public static final String SCOPE = "configuration"; //$NON-NLS-1$
-
-	/**
-	 * Create and return a new configuration scope instance.
-	 */
-	public ConfigurationScope() {
-		super();
-	}
-
-	/*
-	 * @see org.eclipse.core.runtime.preferences.IScopeContext#getName()
-	 */
-	public String getName() {
-		return SCOPE;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.runtime.preferences.IScopeContext#getNode(java.lang.String)
-	 */
-	public IEclipsePreferences getNode(String qualifier) {
-		return super.getNode(qualifier);
-	}
-
-	/*
-	 * @see org.eclipse.core.runtime.preferences.IScopeContext#getLocation()
-	 */
-	public IPath getLocation() {
-		IPath result = null;
-		Location location = PreferencesOSGiUtils.getDefault().getConfigurationLocation();
-		if (!location.isReadOnly()) {
-			URL url = location.getURL();
-			if (url != null) {
-				result = new Path(url.getFile());
-				if (result.isEmpty())
-					result = null;
-			}
-		}
-		return result;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/DefaultScope.java b/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/DefaultScope.java
deleted file mode 100644
index 6acc393..0000000
--- a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/DefaultScope.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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.runtime.preferences;
-
-import org.eclipse.core.internal.preferences.AbstractScope;
-import org.eclipse.core.runtime.IPath;
-
-/**
- * Object representing the default scope in the Eclipse preferences
- * hierarchy. Can be used as a context for searching for preference
- * values (in the IPreferencesService APIs) or for determining the 
- * correct preference node to set values in the store.
- * <p>
- * Default preferences are not persisted to disk.
- * </p>
- * <p>
- * The path for preferences defined in the default scope hierarchy
- * is as follows: <code>/default/&lt;qualifier&gt;</code>
- * </p>
- * <p>
- * Note about product preference customization:
- * Clients who define their own {@link org.eclipse.core.runtime.IProduct} 
- * are able to specify a product key of "<code>preferenceCustomization</code>".
- * (defined as a constant in {@link org.eclipse.ui.branding.IProductConstants})
- * Its value is either a {@link java.net.URL} or a file-system path to a 
- * file whose contents are used to customize default preferences. 
- * </p>
- * <p>
- * This class is not intended to be subclassed. This class may be instantiated.
- * </p>
- * @since 3.0
- */
-public final class DefaultScope extends AbstractScope implements IScopeContext {
-
-	/**
-	 * String constant (value of <code>"default"</code>) used for the 
-	 * scope name for the default preference scope.
-	 */
-	public static final String SCOPE = "default"; //$NON-NLS-1$
-
-	/**
-	 * Create and return a new default scope instance.
-	 */
-	public DefaultScope() {
-		super();
-	}
-
-	/*
-	 * @see org.eclipse.core.runtime.preferences.IScopeContext#getName()
-	 */
-	public String getName() {
-		return SCOPE;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.runtime.preferences.IScopeContext#getNode(java.lang.String)
-	 */
-	public IEclipsePreferences getNode(String qualifier) {
-		return super.getNode(qualifier);
-	}
-
-	/*
-	 * @see org.eclipse.core.runtime.preferences.IScopeContext#getLocation()
-	 */
-	public IPath getLocation() {
-		// We don't persist defaults so return null.
-		return null;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/IEclipsePreferences.java b/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/IEclipsePreferences.java
deleted file mode 100644
index f6ca286..0000000
--- a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/IEclipsePreferences.java
+++ /dev/null
@@ -1,316 +0,0 @@
-/*******************************************************************************
- * 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
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.core.runtime.preferences;
-
-import java.util.EventObject;
-import org.osgi.service.prefs.BackingStoreException;
-import org.osgi.service.prefs.Preferences;
-
-/**
- * This interface describes Eclipse extensions to the preference
- * story. It provides means for both preference and node change
- * listeners.
- * <p>
- * Clients may implement this interface.
- * </p>
- * 
- * @see org.osgi.service.prefs.Preferences
- * @since 3.0
- */
-public interface IEclipsePreferences extends Preferences {
-
-	/**
-	 * An event object which describes the details of a change in the 
-	 * preference node hierarchy. The child node is the one which 
-	 * was added or removed.
-	 * 
-	 * @see IEclipsePreferences.INodeChangeListener
-	 * @since 3.0
-	 */
-	public final class NodeChangeEvent extends EventObject {
-		/**
-		 * All serializable objects should have a stable serialVersionUID
-		 */
-		private static final long serialVersionUID = 1L;
-
-		private Preferences child;
-
-		/**
-		 * Constructor for a new node change event object.
-		 * 
-		 * @param parent the parent node
-		 * @param child the child node
-		 */
-		public NodeChangeEvent(Preferences parent, Preferences child) {
-			super(parent);
-			this.child = child;
-		}
-
-		/**
-		 * Return the parent node for this event. This is the parent
-		 * of the node which was added or removed.
-		 * 
-		 * @return the parent node
-		 */
-		public Preferences getParent() {
-			return (Preferences) getSource();
-		}
-
-		/**
-		 * Return the child node for this event. This is the node
-		 * which was added or removed.
-		 * <p>
-		 * Note: The child node may have been removed as a result of
-		 * the bundle supplying its implementation being un-installed. In this case
-		 * the only method which can safely be called on the child is #name().
-		 * </p>
-		 * @return the child node
-		 */
-		public Preferences getChild() {
-			return child;
-		}
-	}
-
-	/**
-	 * A listener to be used to receive preference node change events.
-	 * <p>
-	 * Clients may implement this interface.
-	 * </p>
-	 * 
-	 * @since 3.0
-	 */
-	public interface INodeChangeListener {
-
-		/**
-		 * Notification that a child node was added to the preference hierarchy.
-		 * The given event must not be <code>null</code>.
-		 * 
-		 * @param event an event specifying the details about the new node
-		 * @see IEclipsePreferences.NodeChangeEvent
-		 * @see IEclipsePreferences#addNodeChangeListener(IEclipsePreferences.INodeChangeListener)
-		 * @see IEclipsePreferences#removeNodeChangeListener(IEclipsePreferences.INodeChangeListener)
-		 */
-		public void added(NodeChangeEvent event);
-
-		/**
-		 * Notification that a child node was removed from the preference hierarchy.
-		 * The given event must not be <code>null</code>.
-		 * 
-		 * @param event an event specifying the details about the removed node
-		 * @see IEclipsePreferences.NodeChangeEvent
-		 * @see IEclipsePreferences#addNodeChangeListener(IEclipsePreferences.INodeChangeListener)
-		 * @see IEclipsePreferences#removeNodeChangeListener(IEclipsePreferences.INodeChangeListener)
-		 */
-		public void removed(NodeChangeEvent event);
-	}
-
-	/**
-	 * An event object describing the details of a change to a preference
-	 * in the preference store.
-	 * 
-	 * @see IEclipsePreferences.IPreferenceChangeListener
-	 * @since 3.0
-	 */
-	public final class PreferenceChangeEvent extends EventObject {
-		/**
-		 * All serializable objects should have a stable serialVersionUID
-		 */
-		private static final long serialVersionUID = 1L;
-
-		private String key;
-		private Object newValue;
-		private Object oldValue;
-
-		/**
-		 * Constructor for a new preference change event. The node and the
-		 * key must not be <code>null</code>. The old and new preference
-		 * values must be either a <code>String</code> or <code>null</code>.
-		 * 
-		 * @param node the node on which the change occurred
-		 * @param key the preference key
-		 * @param oldValue the old preference value, as a <code>String</code> 
-		 * 	or <code>null</code>
-		 * @param newValue the new preference value, as a <code>String</code>
-		 * 	or <code>null</code>
-		 */
-		public PreferenceChangeEvent(Object node, String key, Object oldValue, Object newValue) {
-			super(node);
-			if (key == null || !(node instanceof Preferences))
-				throw new IllegalArgumentException();
-			this.key = key;
-			this.newValue = newValue;
-			this.oldValue = oldValue;
-		}
-
-		/**
-		 * Return the preference node on which the change occurred.
-		 * Must not be <code>null</code>.
-		 * 
-		 * @return the node
-		 */
-		public Preferences getNode() {
-			return (Preferences) source;
-		}
-
-		/**
-		 * Return the key of the preference which was changed.
-		 * Must not be <code>null</code>.
-		 * 
-		 * @return the preference key
-		 */
-		public String getKey() {
-			return key;
-		}
-
-		/**
-		 * Return the new value for the preference encoded as a 
-		 * <code>String</code>, or <code>null</code> if the 
-		 * preference was removed.
-		 * 
-		 * @return the new value or <code>null</code>
-		 */
-		public Object getNewValue() {
-			return newValue;
-		}
-
-		/**
-		 * Return the old value for the preference encoded as a 
-		 * <code>String</code>, or <code>null</code> if the 
-		 * preference was removed or if it cannot be determined.
-		 * 
-		 * @return the old value or <code>null</code>
-		 */
-		public Object getOldValue() {
-			return oldValue;
-		}
-	}
-
-	/**
-	 * A listener used to receive changes to preference values in the preference store.
-	 * <p>
-	 * Clients may implement this interface.
-	 * </p>
-	 * 
-	 * @since 3.0
-	 */
-	public interface IPreferenceChangeListener {
-
-		/**
-		 * Notification that a preference value has changed in the preference store.
-		 * The given event object describes the change details and must not
-		 * be <code>null</code>.
-		 * 
-		 * @param event the event details
-		 * @see IEclipsePreferences.PreferenceChangeEvent
-		 * @see IEclipsePreferences#addPreferenceChangeListener(IEclipsePreferences.IPreferenceChangeListener)
-		 * @see IEclipsePreferences#removePreferenceChangeListener(IEclipsePreferences.IPreferenceChangeListener)
-		 */
-		public void preferenceChange(PreferenceChangeEvent event);
-	}
-
-	/**
-	 * Register the given listener for changes to this node. Duplicate calls
-	 * to this method with the same listener will have no effect. The given
-	 * listener argument must not be <code>null</code>.
-	 *  
-	 * @param listener the node change listener to add
-	 * @throws IllegalStateException if this node or an ancestor has been removed
-	 * @see #removeNodeChangeListener(IEclipsePreferences.INodeChangeListener)
-	 * @see IEclipsePreferences.INodeChangeListener
-	 */
-	public void addNodeChangeListener(INodeChangeListener listener);
-
-	/**
-	 * De-register the given listener from receiving event change notifications
-	 * for this node. Calling this method with a listener which is not registered
-	 * has no effect. The given listener argument must not be <code>null</code>.
-	 * 
-	 * @param listener the node change listener to remove
-	 * @throws IllegalStateException if this node or an ancestor has been removed
-	 * @see #addNodeChangeListener(IEclipsePreferences.INodeChangeListener)
-	 * @see IEclipsePreferences.INodeChangeListener
-	 */
-	public void removeNodeChangeListener(INodeChangeListener listener);
-
-	/**
-	 * Register the given listener for notification of preference 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 listener the preference change listener to register
-	 * @throws IllegalStateException if this node or an ancestor has been removed
-	 * @see #removePreferenceChangeListener(IEclipsePreferences.IPreferenceChangeListener)
-	 * @see IEclipsePreferences.IPreferenceChangeListener
-	 */
-	public void addPreferenceChangeListener(IPreferenceChangeListener listener);
-
-	/**
-	 * De-register the given listener from receiving notification of preference 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 listener the preference change listener to remove
-	 * @throws IllegalStateException if this node or an ancestor has been removed
-	 * @see #addPreferenceChangeListener(IEclipsePreferences.IPreferenceChangeListener)
-	 * @see IEclipsePreferences.IPreferenceChangeListener
-	 */
-	public void removePreferenceChangeListener(IPreferenceChangeListener listener);
-
-	/**
-	 * Remove this node from the preference hierarchy. If this node is the scope
-	 * root, then do not remove this node, only remove this node's children.
-	 * <p>
-	 * Functionally equivalent to calling {@link Preferences#removeNode()}. 
-	 * See the spec of {@link Preferences#removeNode()} for more details. 
-	 * </p>
-	 * <p>
-	 * Implementors must send the appropriate {@link NodeChangeEvent}
-	 * to listeners who are registered on this node's parent.
-	 * </p>
-	 * <p>
-	 * When this node is removed, its associated preference and node change 
-	 * listeners should be removed as well.
-	 * </p>
-	 * @throws BackingStoreException if there was a problem removing this node
-	 * @see org.osgi.service.prefs.Preferences#removeNode()
-	 * @see NodeChangeEvent
-	 */
-	public void removeNode() throws BackingStoreException;
-
-	/**
-	 * Return the preferences node with the given path. The given path must
-	 * not be <code>null</code>.
-	 * <p>
-	 * See the spec of {@link Preferences#node(String)} for more details. 
-	 * </p>
-	 * <p>
-	 * Note that if the node does not yet exist and is created, then the appropriate
-	 * {@link NodeChangeEvent} must be sent to listeners who are
-	 * registered at this node.
-	 * </p>
-	 * @param path the path of the node
-	 * @return the node
-	 * @see org.osgi.service.prefs.Preferences#node(String)
-	 * @see NodeChangeEvent
-	 */
-	public Preferences node(String path);
-
-	/**
-	 * Accepts the given visitor. The visitor's <code>visit</code> method 
-	 * is called with this node. If the visitor returns <code>true</code>, 
-	 * this method visits this node's children.
-	 *
-	 * @param visitor the visitor
-	 * @see IPreferenceNodeVisitor#visit(IEclipsePreferences)
-	 * @throws BackingStoreException
-	 */
-	public void accept(IPreferenceNodeVisitor visitor) throws BackingStoreException;
-}
diff --git a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/IExportedPreferences.java b/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/IExportedPreferences.java
deleted file mode 100644
index 41f4777..0000000
--- a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/IExportedPreferences.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*******************************************************************************
- * 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
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.core.runtime.preferences;
-
-/**
- * Represents a node in the preference hierarchy which is used in
- * the import/export mechanism.
- * <p>
- * This interface is not intended to be implemented by clients.
- * </p>
- * @since 3.0
- */
-public interface IExportedPreferences extends IEclipsePreferences {
-
-	/**
-	 * Return <code>true</code> if this node was an export root
-	 * when the preferences were exported, and <code>false</code>
-	 * otherwise.  This information is used during the import to clear
-	 * nodes when importing a node's (and its children's) preferences.
-	 * 
-	 * @return <code>true</code> if this node is an export root
-	 * 	and <code>false</code> otherwise
-	 */
-	public boolean isExportRoot();
-
-}
diff --git a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/IPreferenceFilter.java b/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/IPreferenceFilter.java
deleted file mode 100644
index ff44b1c..0000000
--- a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/IPreferenceFilter.java
+++ /dev/null
@@ -1,77 +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
- *******************************************************************************/
-package org.eclipse.core.runtime.preferences;
-
-import java.util.Map;
-
-/**
- * Preference filters are used to describe the relationship between the
- * preference tree and a data set when importing/exporting preferences.
- * <p>
- * For instance, a client is able to create a preference filter describing
- * which preference nodes/keys should be used when exporting the
- * "Key Bindings" preferences. When the export happens, the tree is
- * trimmed and only the applicable preferences will be exported.
- * </p>
- * <p>
- * Clients may implement this interface.
- * </p>
- * 
- * @since 3.1
- */
-public interface IPreferenceFilter {
-
-	/**
-	 * Return an array of scopes that this preference filter is applicable for. The list
-	 * of scopes must not be <code>null</code>.
-	 * <p>
-	 * For example: 
-	 * <code>new String[] {InstanceScope.SCOPE, ConfigurationScope.SCOPE};</code>
-	 * </p>
-	 * 
-	 * @return the array of scopes
-	 */
-	public String[] getScopes();
-
-	/**
-	 * Return a mapping which defines the nodes and keys that this filter
-	 * applies to. 
-	 * <p>
-	 * If the map is <code>null</code> then this filter is applicable for all
-	 * nodes within the scope. The map can also be <code>null</code> if 
-	 * the given scope is not known to this filter.
-	 * </p>
-	 * <p>
-	 * The keys in the table are Strings and describe the node path. The values are 
-	 * an optional array of {@link PreferenceFilterEntry} objects describing the list of 
-	 * applicable keys in that node. If the value is null then the whole node is 
-	 * considered applicable.
-	 * </p>
-	 * <p>
-	 * key: <code>String</code> (node)<br>
-	 * value: <code>PreferenceFilterEntry[]</code> or <code>null</code> (preference keys)<br>
-	 * </p>
-	 * <p>
-	 * For example:
-	 * <pre>
-	 * "org.eclipse.core.resources" -> null
-	 * "org.eclipse.ui" -> new PreferenceFilterEntry[] {
-	 * 		new PreferenceFilterEntry("DEFAULT_PERSPECTIVE_LOCATION"), 
-	 * 		new PreferenceFilterEntry("SHOW_INTRO_ON_STARTUP")}
-	 * </pre>
-	 * </p>
-	 * 
-	 * @return the mapping table
-	 * @see PreferenceFilterEntry
-	 */
-	public Map getMapping(String scope);
-
-}
diff --git a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/IPreferenceNodeVisitor.java b/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/IPreferenceNodeVisitor.java
deleted file mode 100644
index 28733cc..0000000
--- a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/IPreferenceNodeVisitor.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*******************************************************************************
- * 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
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.core.runtime.preferences;
-
-import org.osgi.service.prefs.BackingStoreException;
-
-/** 
- * This interface is implemented by objects that visit preference nodes.
- * <p> 
- * Usage:
- * <pre>
- * class Visitor implements IPreferenceNodeVisitor {
- *    public boolean visit(IEclipsePreferences node) {
- *       // your code here
- *       return true;
- *    }
- * }
- * IEclipsePreferences root = ...;
- * root.accept(new Visitor());
- * </pre>
- * </p><p>
- * Clients may implement this interface.
- * </p>
- *
- * @see IEclipsePreferences#accept(IPreferenceNodeVisitor)
- * @since 3.0
- */
-public interface IPreferenceNodeVisitor {
-
-	/** 
-	 * Visits the given preference node.
-	 *
-	 * @param node the node to visit
-	 * @return <code>true</code> if the node's children should
-	 *		be visited; <code>false</code> if they should be skipped
-	 * @throws BackingStoreException
-	 */
-	public boolean visit(IEclipsePreferences node) throws BackingStoreException;
-}
diff --git a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/IPreferencesService.java b/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/IPreferencesService.java
deleted file mode 100644
index 1428700..0000000
--- a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/IPreferencesService.java
+++ /dev/null
@@ -1,618 +0,0 @@
-/*******************************************************************************
- * 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
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.core.runtime.preferences;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IStatus;
-import org.osgi.service.prefs.Preferences;
-
-/**
- * The preference service provides facilities for dealing with the default scope
- * precedence lookup order, querying the preference store for values using this order,
- * accessing the root of the preference store node hierarchy, and importing/exporting
- * preferences.
- * <p>
- * The default-default preference search look-up order as defined by the platform
- * is: project, instance, configuration, default.
- * </p><p>
- * This interface is not intended to be implemented by clients.
- * </p>
- * @since 3.0
- */
-public interface IPreferencesService {
-
-	/**
-	 * Lookup the given key in the specified preference nodes in the given order.
-	 * Return the value from the first node the key is found in. If the key is not
-	 * defined in any of the given nodes, then return the specified default value.
-	 * <p>
-	 * Immediately returns the default value if the node list is <code>null</code>.
-	 * If any of the individual entries in the node list are <code>null</code> then
-	 * skip over them and move on to the next node in the list.
-	 * </p>
-	 * @param key the preference key
-	 * @param defaultValue the default value
-	 * @param nodes the list of nodes to search, or <code>null</code>
-	 * @return the stored preference value or the specified default value 
-	 * @see org.osgi.service.prefs.Preferences
-	 */
-	public String get(String key, String defaultValue, Preferences[] nodes);
-
-	/**
-	 * Return the value stored in the preference store for the given key. 
-	 * If the key is not defined then return the specified default value. 
-	 * Use the canonical scope lookup order for finding the preference value. 
-	 * <p>
-	 * The semantics of this method are to calculate the appropriate 
-	 * {@link Preferences} nodes in the preference hierarchy to use
-	 * and then call the {@link #get(String, String, Preferences[])} 
-	 * method. The order of the nodes is calculated by consulting the default 
-	 * scope lookup order as set by {@link #setDefaultLookupOrder(String, String, String[])}.
-	 * </p><p>
-	 * The specified key may either refer to a simple key or be the concatenation of the 
-	 * path of a child node and key. If the key contains a slash ("/") character, then a 
-	 * double-slash must be used to denote the end of they child path and the beginning 
-	 * of the key. Otherwise it is assumed that the key is the last segment of the path.
-	 * The following are some examples of keys and their meanings:
-	 * <ul>
-	 * <li>"a" - look for a value for the property "a"
-	 * <li>"//a" - look for a value for the property "a"
-	 * <li>"///a" - look for a value for the property "/a"
-	 * <li>"//a//b" - look for a value for the property "a//b"
-	 * <li>"a/b/c" - look in the child node "a/b" for property "c"
-	 * <li>"/a/b/c" - look in the child node "a/b" for property "c"
-	 * <li>"/a/b//c" - look in the child node "a/b" for the property "c"
-	 * <li>"a/b//c/d" - look in the child node "a/b" for the property "c/d"
-	 * <li>"/a/b//c/d" - look in the child node "a/b" for the property "c/d"
-	 * <li>"/a/b//c//d" - look in the child node "a/b" for the property "c//d"
-	 * </ul>
-	 * </p><p>
-	 * Callers may specify an array of scope context objects to aid in the 
-	 * determination of the correct nodes. For each entry in the lookup 
-	 * order, the array of contexts is consulted and if one matching the 
-	 * scope exists, then it is used to calculate the node. Otherwise a
-	 * default calculation algorithm is used. 
-	 * </p><p>
-	 * An example of a qualifier for an Eclipse 2.1 preference is the
-	 * plug-in identifier. (e.g. "org.eclipse.core.resources" for "description.autobuild")
-	 * </p>
-	 * @param qualifier a namespace qualifier for the preference
-	 * @param key the name of the preference (optionally including its path)
-	 * @param defaultValue the value to use if the preference is not defined
-	 * @param contexts optional context objects to help scopes determine which nodes to search, or <code>null</code>
-	 * @return the value of the preference or the given default value
-	 * @see IScopeContext
-	 * @see #get(java.lang.String, java.lang.String, org.osgi.service.prefs.Preferences[])
-	 * @see #getLookupOrder(java.lang.String, java.lang.String)
-	 * @see #getDefaultLookupOrder(java.lang.String, java.lang.String)
-	 */
-	public boolean getBoolean(String qualifier, String key, boolean defaultValue, IScopeContext[] contexts);
-
-	/**
-	 * Return the value stored in the preference store for the given key. 
-	 * If the key is not defined then return the specified default value. 
-	 * Use the canonical scope lookup order for finding the preference value. 
-	 * <p>
-	 * The semantics of this method are to calculate the appropriate 
-	 * {@link Preferences} nodes in the preference hierarchy to use
-	 * and then call the {@link #get(String, String, Preferences[])} 
-	 * method. The order of the nodes is calculated by consulting the default 
-	 * scope lookup order as set by {@link #setDefaultLookupOrder(String, String, String[])}.
-	 * </p><p>
-	 * The specified key may either refer to a simple key or be the concatenation of the 
-	 * path of a child node and key. If the key contains a slash ("/") character, then a 
-	 * double-slash must be used to denote the end of they child path and the beginning 
-	 * of the key. Otherwise it is assumed that the key is the last segment of the path.
-	 * The following are some examples of keys and their meanings:
-	 * <ul>
-	 * <li>"a" - look for a value for the property "a"
-	 * <li>"//a" - look for a value for the property "a"
-	 * <li>"///a" - look for a value for the property "/a"
-	 * <li>"//a//b" - look for a value for the property "a//b"
-	 * <li>"a/b/c" - look in the child node "a/b" for property "c"
-	 * <li>"/a/b/c" - look in the child node "a/b" for property "c"
-	 * <li>"/a/b//c" - look in the child node "a/b" for the property "c"
-	 * <li>"a/b//c/d" - look in the child node "a/b" for the property "c/d"
-	 * <li>"/a/b//c/d" - look in the child node "a/b" for the property "c/d"
-	 * <li>"/a/b//c//d" - look in the child node "a/b" for the property "c//d"
-	 * </ul>
-	 * </p><p>
-	 * Callers may specify an array of scope context objects to aid in the 
-	 * determination of the correct nodes. For each entry in the lookup 
-	 * order, the array of contexts is consulted and if one matching the 
-	 * scope exists, then it is used to calculate the node. Otherwise a
-	 * default calculation algorithm is used. 
-	 * </p><p>
-	 * An example of a qualifier for an Eclipse 2.1 preference is the
-	 * plug-in identifier. (e.g. "org.eclipse.core.resources" for "description.autobuild")
-	 * </p>
-	 * @param qualifier a namespace qualifier for the preference
-	 * @param key the name of the preference (optionally including its path)
-	 * @param defaultValue the value to use if the preference is not defined
-	 * @param contexts optional context objects to help scopes determine which nodes to search, or <code>null</code>
-	 * @return the value of the preference or the given default value
-	 * @see IScopeContext
-	 * @see #get(java.lang.String, java.lang.String, org.osgi.service.prefs.Preferences[])
-	 * @see #getLookupOrder(java.lang.String, java.lang.String)
-	 * @see #getDefaultLookupOrder(java.lang.String, java.lang.String)
-	 */
-	public byte[] getByteArray(String qualifier, String key, byte[] defaultValue, IScopeContext[] contexts);
-
-	/**
-	 * Return the value stored in the preference store for the given key. 
-	 * If the key is not defined then return the specified default value. 
-	 * Use the canonical scope lookup order for finding the preference value. 
-	 * <p>
-	 * The semantics of this method are to calculate the appropriate 
-	 * {@link Preferences} nodes in the preference hierarchy to use
-	 * and then call the {@link #get(String, String, Preferences[])} 
-	 * method. The order of the nodes is calculated by consulting the default 
-	 * scope lookup order as set by {@link #setDefaultLookupOrder(String, String, String[])}.
-	 * </p><p>
-	 * The specified key may either refer to a simple key or be the concatenation of the 
-	 * path of a child node and key. If the key contains a slash ("/") character, then a 
-	 * double-slash must be used to denote the end of they child path and the beginning 
-	 * of the key. Otherwise it is assumed that the key is the last segment of the path.
-	 * The following are some examples of keys and their meanings:
-	 * <ul>
-	 * <li>"a" - look for a value for the property "a"
-	 * <li>"//a" - look for a value for the property "a"
-	 * <li>"///a" - look for a value for the property "/a"
-	 * <li>"//a//b" - look for a value for the property "a//b"
-	 * <li>"a/b/c" - look in the child node "a/b" for property "c"
-	 * <li>"/a/b/c" - look in the child node "a/b" for property "c"
-	 * <li>"/a/b//c" - look in the child node "a/b" for the property "c"
-	 * <li>"a/b//c/d" - look in the child node "a/b" for the property "c/d"
-	 * <li>"/a/b//c/d" - look in the child node "a/b" for the property "c/d"
-	 * <li>"/a/b//c//d" - look in the child node "a/b" for the property "c//d"
-	 * </ul>
-	 * </p><p>
-	 * Callers may specify an array of scope context objects to aid in the 
-	 * determination of the correct nodes. For each entry in the lookup 
-	 * order, the array of contexts is consulted and if one matching the 
-	 * scope exists, then it is used to calculate the node. Otherwise a
-	 * default calculation algorithm is used. 
-	 * </p><p>
-	 * An example of a qualifier for an Eclipse 2.1 preference is the
-	 * plug-in identifier. (e.g. "org.eclipse.core.resources" for "description.autobuild")
-	 * </p>
-	 * @param qualifier a namespace qualifier for the preference
-	 * @param key the name of the preference (optionally including its path)
-	 * @param defaultValue the value to use if the preference is not defined
-	 * @param contexts optional context objects to help scopes determine which nodes to search, or <code>null</code>
-	 * @return the value of the preference or the given default value
-	 * @see IScopeContext
-	 * @see #get(java.lang.String, java.lang.String, org.osgi.service.prefs.Preferences[])
-	 * @see #getLookupOrder(java.lang.String, java.lang.String)
-	 * @see #getDefaultLookupOrder(java.lang.String, java.lang.String)
-	 */
-	public double getDouble(String qualifier, String key, double defaultValue, IScopeContext[] contexts);
-
-	/**
-	 * Return the value stored in the preference store for the given key. 
-	 * If the key is not defined then return the specified default value. 
-	 * Use the canonical scope lookup order for finding the preference value. 
-	 * <p>
-	 * The semantics of this method are to calculate the appropriate 
-	 * {@link Preferences} nodes in the preference hierarchy to use
-	 * and then call the {@link #get(String, String, Preferences[])} 
-	 * method. The order of the nodes is calculated by consulting the default 
-	 * scope lookup order as set by {@link #setDefaultLookupOrder(String, String, String[])}.
-	 * </p><p>
-	 * The specified key may either refer to a simple key or be the concatenation of the 
-	 * path of a child node and key. If the key contains a slash ("/") character, then a 
-	 * double-slash must be used to denote the end of they child path and the beginning 
-	 * of the key. Otherwise it is assumed that the key is the last segment of the path.
-	 * The following are some examples of keys and their meanings:
-	 * <ul>
-	 * <li>"a" - look for a value for the property "a"
-	 * <li>"//a" - look for a value for the property "a"
-	 * <li>"///a" - look for a value for the property "/a"
-	 * <li>"//a//b" - look for a value for the property "a//b"
-	 * <li>"a/b/c" - look in the child node "a/b" for property "c"
-	 * <li>"/a/b/c" - look in the child node "a/b" for property "c"
-	 * <li>"/a/b//c" - look in the child node "a/b" for the property "c"
-	 * <li>"a/b//c/d" - look in the child node "a/b" for the property "c/d"
-	 * <li>"/a/b//c/d" - look in the child node "a/b" for the property "c/d"
-	 * <li>"/a/b//c//d" - look in the child node "a/b" for the property "c//d"
-	 * </ul>
-	 * </p><p>
-	 * Callers may specify an array of scope context objects to aid in the 
-	 * determination of the correct nodes. For each entry in the lookup 
-	 * order, the array of contexts is consulted and if one matching the 
-	 * scope exists, then it is used to calculate the node. Otherwise a
-	 * default calculation algorithm is used. 
-	 * </p><p>
-	 * An example of a qualifier for an Eclipse 2.1 preference is the
-	 * plug-in identifier. (e.g. "org.eclipse.core.resources" for "description.autobuild")
-	 * </p>
-	 * @param qualifier a namespace qualifier for the preference
-	 * @param key the name of the preference (optionally including its path)
-	 * @param defaultValue the value to use if the preference is not defined
-	 * @param contexts optional context objects to help scopes determine which nodes to search, or <code>null</code>
-	 * @return the value of the preference or the given default value
-	 * @see IScopeContext
-	 * @see #get(java.lang.String, java.lang.String, org.osgi.service.prefs.Preferences[])
-	 * @see #getLookupOrder(java.lang.String, java.lang.String)
-	 * @see #getDefaultLookupOrder(java.lang.String, java.lang.String)
-	 */
-	public float getFloat(String qualifier, String key, float defaultValue, IScopeContext[] contexts);
-
-	/**
-	 * Return the value stored in the preference store for the given key. 
-	 * If the key is not defined then return the specified default value. 
-	 * Use the canonical scope lookup order for finding the preference value. 
-	 * <p>
-	 * The semantics of this method are to calculate the appropriate 
-	 * {@link Preferences} nodes in the preference hierarchy to use
-	 * and then call the {@link #get(String, String, Preferences[])} 
-	 * method. The order of the nodes is calculated by consulting the default 
-	 * scope lookup order as set by {@link #setDefaultLookupOrder(String, String, String[])}.
-	 * </p><p>
-	 * The specified key may either refer to a simple key or be the concatenation of the 
-	 * path of a child node and key. If the key contains a slash ("/") character, then a 
-	 * double-slash must be used to denote the end of they child path and the beginning 
-	 * of the key. Otherwise it is assumed that the key is the last segment of the path.
-	 * The following are some examples of keys and their meanings:
-	 * <ul>
-	 * <li>"a" - look for a value for the property "a"
-	 * <li>"//a" - look for a value for the property "a"
-	 * <li>"///a" - look for a value for the property "/a"
-	 * <li>"//a//b" - look for a value for the property "a//b"
-	 * <li>"a/b/c" - look in the child node "a/b" for property "c"
-	 * <li>"/a/b/c" - look in the child node "a/b" for property "c"
-	 * <li>"/a/b//c" - look in the child node "a/b" for the property "c"
-	 * <li>"a/b//c/d" - look in the child node "a/b" for the property "c/d"
-	 * <li>"/a/b//c/d" - look in the child node "a/b" for the property "c/d"
-	 * <li>"/a/b//c//d" - look in the child node "a/b" for the property "c//d"
-	 * </ul>
-	 * </p><p>
-	 * Callers may specify an array of scope context objects to aid in the 
-	 * determination of the correct nodes. For each entry in the lookup 
-	 * order, the array of contexts is consulted and if one matching the 
-	 * scope exists, then it is used to calculate the node. Otherwise a
-	 * default calculation algorithm is used. 
-	 * </p><p>
-	 * An example of a qualifier for an Eclipse 2.1 preference is the
-	 * plug-in identifier. (e.g. "org.eclipse.core.resources" for "description.autobuild")
-	 * </p>
-	 * @param qualifier a namespace qualifier for the preference
-	 * @param key the name of the preference (optionally including its path)
-	 * @param defaultValue the value to use if the preference is not defined
-	 * @param contexts optional context objects to help scopes determine which nodes to search, or <code>null</code>
-	 * @return the value of the preference or the given default value
-	 * @see IScopeContext
-	 * @see #get(java.lang.String, java.lang.String, org.osgi.service.prefs.Preferences[])
-	 * @see #getLookupOrder(java.lang.String, java.lang.String)
-	 * @see #getDefaultLookupOrder(java.lang.String, java.lang.String)
-	 */
-	public int getInt(String qualifier, String key, int defaultValue, IScopeContext[] contexts);
-
-	/**
-	 * Return the value stored in the preference store for the given key. 
-	 * If the key is not defined then return the specified default value. 
-	 * Use the canonical scope lookup order for finding the preference value. 
-	 * <p>
-	 * The semantics of this method are to calculate the appropriate 
-	 * {@link Preferences} nodes in the preference hierarchy to use
-	 * and then call the {@link #get(String, String, Preferences[])} 
-	 * method. The order of the nodes is calculated by consulting the default 
-	 * scope lookup order as set by {@link #setDefaultLookupOrder(String, String, String[])}.
-	 * </p><p>
-	 * The specified key may either refer to a simple key or be the concatenation of the 
-	 * path of a child node and key. If the key contains a slash ("/") character, then a 
-	 * double-slash must be used to denote the end of they child path and the beginning 
-	 * of the key. Otherwise it is assumed that the key is the last segment of the path.
-	 * The following are some examples of keys and their meanings:
-	 * <ul>
-	 * <li>"a" - look for a value for the property "a"
-	 * <li>"//a" - look for a value for the property "a"
-	 * <li>"///a" - look for a value for the property "/a"
-	 * <li>"//a//b" - look for a value for the property "a//b"
-	 * <li>"a/b/c" - look in the child node "a/b" for property "c"
-	 * <li>"/a/b/c" - look in the child node "a/b" for property "c"
-	 * <li>"/a/b//c" - look in the child node "a/b" for the property "c"
-	 * <li>"a/b//c/d" - look in the child node "a/b" for the property "c/d"
-	 * <li>"/a/b//c/d" - look in the child node "a/b" for the property "c/d"
-	 * <li>"/a/b//c//d" - look in the child node "a/b" for the property "c//d"
-	 * </ul>
-	 * </p><p>
-	 * Callers may specify an array of scope context objects to aid in the 
-	 * determination of the correct nodes. For each entry in the lookup 
-	 * order, the array of contexts is consulted and if one matching the 
-	 * scope exists, then it is used to calculate the node. Otherwise a
-	 * default calculation algorithm is used. 
-	 * </p><p>
-	 * An example of a qualifier for an Eclipse 2.1 preference is the
-	 * plug-in identifier. (e.g. "org.eclipse.core.resources" for "description.autobuild")
-	 * </p>
-	 * @param qualifier a namespace qualifier for the preference
-	 * @param key the name of the preference (optionally including its path)
-	 * @param defaultValue the value to use if the preference is not defined
-	 * @param contexts optional context objects to help scopes determine which nodes to search, or <code>null</code>
-	 * @return the value of the preference or the given default value
-	 * @see IScopeContext
-	 * @see #get(java.lang.String, java.lang.String, org.osgi.service.prefs.Preferences[])
-	 * @see #getLookupOrder(java.lang.String, java.lang.String)
-	 * @see #getDefaultLookupOrder(java.lang.String, java.lang.String)
-	 */
-	public long getLong(String qualifier, String key, long defaultValue, IScopeContext[] contexts);
-
-	/**
-	 * Return the value stored in the preference store for the given key. 
-	 * If the key is not defined then return the specified default value. 
-	 * Use the canonical scope lookup order for finding the preference value. 
-	 * <p>
-	 * The semantics of this method are to calculate the appropriate 
-	 * {@link Preferences} nodes in the preference hierarchy to use
-	 * and then call the {@link #get(String, String, Preferences[])} 
-	 * method. The order of the nodes is calculated by consulting the default 
-	 * scope lookup order as set by {@link #setDefaultLookupOrder(String, String, String[])}.
-	 * </p><p>
-	 * The specified key may either refer to a simple key or be the concatenation of the 
-	 * path of a child node and key. If the key contains a slash ("/") character, then a 
-	 * double-slash must be used to denote the end of they child path and the beginning 
-	 * of the key. Otherwise it is assumed that the key is the last segment of the path.
-	 * The following are some examples of keys and their meanings:
-	 * <ul>
-	 * <li>"a" - look for a value for the property "a"
-	 * <li>"//a" - look for a value for the property "a"
-	 * <li>"///a" - look for a value for the property "/a"
-	 * <li>"//a//b" - look for a value for the property "a//b"
-	 * <li>"a/b/c" - look in the child node "a/b" for property "c"
-	 * <li>"/a/b/c" - look in the child node "a/b" for property "c"
-	 * <li>"/a/b//c" - look in the child node "a/b" for the property "c"
-	 * <li>"a/b//c/d" - look in the child node "a/b" for the property "c/d"
-	 * <li>"/a/b//c/d" - look in the child node "a/b" for the property "c/d"
-	 * <li>"/a/b//c//d" - look in the child node "a/b" for the property "c//d"
-	 * </ul>
-	 * </p><p>
-	 * Callers may specify an array of scope context objects to aid in the 
-	 * determination of the correct nodes. For each entry in the lookup 
-	 * order, the array of contexts is consulted and if one matching the 
-	 * scope exists, then it is used to calculate the node. Otherwise a
-	 * default calculation algorithm is used. 
-	 * </p><p>
-	 * An example of a qualifier for an Eclipse 2.1 preference is the
-	 * plug-in identifier. (e.g. "org.eclipse.core.resources" for "description.autobuild")
-	 * </p>
-	 * @param qualifier a namespace qualifier for the preference
-	 * @param key the name of the preference (optionally including its path)
-	 * @param defaultValue the value to use if the preference is not defined
-	 * @param contexts optional context objects to help scopes determine which nodes to search, or <code>null</code>
-	 * @return the value of the preference or the given default value
-	 * @see IScopeContext
-	 * @see #get(java.lang.String, java.lang.String, org.osgi.service.prefs.Preferences[])
-	 * @see #getLookupOrder(java.lang.String, java.lang.String)
-	 * @see #getDefaultLookupOrder(java.lang.String, java.lang.String)
-	 */
-	public String getString(String qualifier, String key, String defaultValue, IScopeContext[] contexts);
-
-	/**
-	 * Return the root node of the Eclipse preference hierarchy.
-	 * 
-	 * @return the root of the hierarchy
-	 */
-	public IEclipsePreferences getRootNode();
-
-	/**
-	 * Exports all preferences for the given preference node and all its children to the specified
-	 * output stream. It is the responsibility of the client to close the given output stream.
-	 * <p>
-	 * If the given export list is <code>null</code> then all preferences for all sub-nodes
-	 * of the given node are exported to the given stream. Otherwise the export list is
-	 * consulted before exporting each preference value. If there is a string match then
-	 * the preference is not exported. The exclusion can also occur at a per-node level. 
-	 * Wild cards are <em>not</em> accepted in the excludes list as a basic String compare
-	 * is done. The basic algorithm is similar to the following:
-	 * <pre>
-	 * String fullPath = node.absolutePath() + '/' + key;
-	 * if (!fullPath.startsWith(excludesList[i]))
-	 * 	// export preference
-	 * </pre>
-	 * </p>
-	 * <p>
-	 * The values stored in the resulting stream are suitable for later being read by the
-	 * by {@link #importPreferences(InputStream)} or {@link #readPreferences(InputStream)} methods.
-	 * </p>
-	 * @param node the node to treat as the root of the export
-	 * @param output the stream to write to
-	 * @param excludesList a list of path prefixes to exclude from the export, or <code>null</code>
-	 * @return a status object describing success or detailing failure reasons
-	 * @throws CoreException if there was a problem exporting the preferences
-	 * @throws IllegalArgumentException if the node or stream is <code>null</code>
-	 * @see #importPreferences(java.io.InputStream)
-	 * @see #readPreferences(InputStream)
-	 */
-	public IStatus exportPreferences(IEclipsePreferences node, OutputStream output, String[] excludesList) throws CoreException;
-
-	/**
-	 * Loads preferences from the given file and stores them in the preferences store.
-	 * Existing values are over-ridden by those from the stream. The stream must not be
-	 * <code>null</code> and is closed upon return from this method.
-	 * <p>
-	 * This file must have been written by the 
-	 * {@link #exportPreferences(IEclipsePreferences, OutputStream, String[])} 
-	 * method.
-	 * </p>
-	 * <p>
-	 * This method is equivalent to calling <code>applyPreferences(readPreferences(input));</code>.
-	 * </p>
-	 * @param input the stream to load the preferences from
-	 * @return a status object describing success or detailing failure reasons
-	 * @throws CoreException if there are problems importing the preferences
-	 * @throws IllegalArgumentException if the stream is <code>null</code>
-	 * @see #exportPreferences(IEclipsePreferences, OutputStream, String[])
-	 */
-	public IStatus importPreferences(InputStream input) throws CoreException;
-
-	/**
-	 * Take the given preference tree and apply it to the Eclipse
-	 * global preference hierarchy. If a node is an export root, then 
-	 * remove it from the global tree before adding any preferences
-	 * contained in it or its children. The given preferences object
-	 * must not be <code>null</code>.
-	 * <p>
-	 * Before the tree is applied to the global preference tree,
-	 * the registered <code>PreferenceModifyListener</code> objects
-	 * are called and given the opportunity to modify the tree.
-	 * </p>
-	 * 
-	 * @param preferences the preferences to apply globally
-	 * @return status object indicating success or failure
-	 * @throws IllegalArgumentException if the preferences are <code>null</code>
-	 * @throws CoreException if there are problems applying the preferences
-	 * @see PreferenceModifyListener
-	 */
-	public IStatus applyPreferences(IExportedPreferences preferences) throws CoreException;
-
-	/**
-	 * Read from the given input stream and create a node hierarchy
-	 * representing the preferences and their values. The given input stream
-	 * must not be <code>null</code>. The result of this function is suitable
-	 * for passing as an argument to {@link #applyPreferences(IExportedPreferences)}.
-	 * <p>
-	 * It is assumed the contents of the input stream have been written by
-	 * {@link #exportPreferences(IEclipsePreferences, OutputStream, String[])}.
-	 * </p>
-	 * @param input the input stream to read from
-	 * @return the node hierarchy representing the stream contents
-	 * @throws IllegalArgumentException if the given stream is null
-	 * @throws CoreException if there are problems reading the preferences
-	 * @see #exportPreferences(IEclipsePreferences, OutputStream, String[])
-	 * @see #applyPreferences(IExportedPreferences)
-	 */
-	public IExportedPreferences readPreferences(InputStream input) throws CoreException;
-
-	/**
-	 * Return an array with the default lookup order for the preference keyed by the given
-	 * qualifier and simple name. Return <code>null</code> if no default has been set.
-	 * <p>
-	 * The lookup order returned is based on an exact match to the specified qualifier
-	 * and simple name. For instance, if the given key is non-<code>null</code> and
-	 * no default lookup order is found, the default lookup order for the qualifier (and a
-	 * <code>null</code> key) is <em>NOT</em> returned. Clients should call
-	 * {@link #getLookupOrder(String, String)} if they desire this behavior.
-	 * </p>
-	 * @param qualifier the namespace qualifier for the preference
-	 * @param key the preference name or <code>null</code>
-	 * @return the scope order or <code>null</code>
-	 * @see #setDefaultLookupOrder(String, String, String[])
-	 * @see #getLookupOrder(String, String)
-	 */
-	public String[] getDefaultLookupOrder(String qualifier, String key);
-
-	/**
-	 * Return an array with the lookup order for the preference keyed by the given
-	 * qualifier and simple name. 
-	 * <p>
-	 * First do an exact match lookup with the given qualifier and simple name. If a match
-	 * is found then return it. Otherwise if the key is non-<code>null</code> then
-	 * do a lookup based on only the qualifier and return the set value. 
-	 * Return the default-default order as defined by the platform if no order has been set.
-	 * </p>
-	 * @param qualifier the namespace qualifier for the preference
-	 * @param key the preference name or <code>null</code>
-	 * @return the scope order 
-	 * @throws IllegalArgumentException if the qualifier is <code>null</code>
-	 * @see #getDefaultLookupOrder(String, String)
-	 * @see #setDefaultLookupOrder(String, String, String[])
-	 */
-	public String[] getLookupOrder(String qualifier, String key);
-
-	/**
-	 * Set the default scope lookup order for the preference keyed by the given
-	 * qualifier and simple name. If the given order is <code>null</code> then the set
-	 * ordering (if it exists) is removed.
-	 * <p>
-	 * If the given simple name is <code>null</code> then set the given lookup
-	 * order to be used for all keys with the given qualifier.
-	 * </p><p>
-	 * Note that the default lookup order is not persisted across platform invocations. 
-	 * </p>
-	 * @param qualifier the namespace qualifier for the preference
-	 * @param key the preference name or <code>null</code>
-	 * @param order the lookup order or <code>null</code>
-	 * @throws IllegalArgumentException
-	 * <ul>
-	 * <li>if the qualifier is <code>null</code></li>
-	 * <li>if an entry in the order array is <code>null</code> (the array itself is 
-	 * allowed to be <code>null</code></li>
-	 * </ul>
-	 * @see #getDefaultLookupOrder(String, String)
-	 */
-	public void setDefaultLookupOrder(String qualifier, String key, String[] order);
-
-	/**
-	 * Export the preference tree rooted at the given node, to the specified output
-	 * stream. Apply the given list of preference filters, only exporting
-	 * preference node and keys which are applicable to at least one filter in the list.
-	 * <p>
-	 * The given node and output stream must not be <code>null</code>.
-	 * If the list of filters is <code>null</code> or empty then do nothing.
-	 * </p>
-	 * <p>
-	 * It is the responsibility of the client to close the given output stream.
-	 * </p>
-	 * 
-	 * @param node the tree to export
-	 * @param filters the list of filters to export
-	 * @param output the stream to export to
-	 * @throws CoreException
-	 * @see #exportPreferences(IEclipsePreferences, OutputStream, String[])
-	 * @see #readPreferences(InputStream)
-	 * @see #applyPreferences(IEclipsePreferences, IPreferenceFilter[])
-	 * @see #applyPreferences(IExportedPreferences)
-	 * @see IPreferenceFilter
-	 * @since 3.1
-	 */
-	public void exportPreferences(IEclipsePreferences node, IPreferenceFilter[] filters, OutputStream output) throws CoreException;
-
-	/**
-	 * Return a list of filters which match the given tree and is a subset of the given
-	 * filter list. If the specified list of filters is <code>null</code>, empty, or there 
-	 * are no matches, then return an empty list.
-	 * 
-	 * @param node the tree to match against
-	 * @param filters the list of filters to match against
-	 * @return the array of matching transfers
-	 * @throws CoreException
-	 * @see IPreferenceFilter
-	 * @since 3.1
-	 */
-	public IPreferenceFilter[] matches(IEclipsePreferences node, IPreferenceFilter[] filters) throws CoreException;
-
-	/**
-	 * Apply the preference tree rooted at the given node, to the system's preference tree.
-	 * The list of preference filters will act as a filter and only preferences in the tree which
-	 * apply to at least one filter in the list, will be applied.
-	 * <p>
-	 * If the list of filters is <code>null</code> or empty then do nothing.
-	 * </p>
-	 * <p>
-	 * Before the tree is applied to the global preference tree,
-	 * the registered <code>PreferenceModifyListener</code> objects
-	 * are called and given the opportunity to modify the tree.
-	 * </p>
-	 * 
-	 * @param node the tree to consider applying
-	 * @param filters the filters to use
-	 * @throws CoreException
-	 * @see #applyPreferences(IExportedPreferences)
-	 * @see #readPreferences(InputStream)
-	 * @see IPreferenceFilter
-	 * @see PreferenceModifyListener
-	 * @since 3.1
-	 */
-	public void applyPreferences(IEclipsePreferences node, IPreferenceFilter[] filters) throws CoreException;
-}
diff --git a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/IScope.java b/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/IScope.java
deleted file mode 100644
index 07a56d6..0000000
--- a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/IScope.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*******************************************************************************
- * 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
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.core.runtime.preferences;
-
-/**
- * Clients contributing a scope to the Eclipse preference system must 
- * implement this interface to aid Eclipse in creating a new node for the
- * hierarchy.
- * <p>
- * Clients may implement this interface.
- * </p>
- * @since 3.0
- */
-public interface IScope {
-
-	/**
-	 * Create and return a new preference node with the given parent and name.
-	 * Must not return <code>null</code>. Clients are able to create a new node
-	 * in memory or load the node's contents from the backing store. Neither the
-	 * parent or name arguments should be <code>null</code>.
-	 * <p>
-	 * Implementors should note that the node might not have been added to the
-	 * child list of the parent yet, and therefore might not be able to be referenced
-	 * through navigation from the root node. 
-	 * </p>
-	 * @param parent the node's parent
-	 * @param name the name of the node
-	 * @return the new node
-	 */
-	public IEclipsePreferences create(IEclipsePreferences parent, String name);
-}
diff --git a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/IScopeContext.java b/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/IScopeContext.java
deleted file mode 100644
index 9e9021b..0000000
--- a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/IScopeContext.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*******************************************************************************
- * 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
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.core.runtime.preferences;
-
-import org.eclipse.core.runtime.IPath;
-
-/**
- * Clients implement this interface to provide context to a 
- * particular scope. Instances of implementations of this interface are 
- * passed to the {@link IPreferencesService} for use in 
- * preference searching.
- * <p>
- * Clients may implement this interface.
- * </p>
- * 
- * @see IPreferencesService
- * @since 3.0
- */
-public interface IScopeContext {
-
-	/**
-	 * Return the name of the scope that this context is associated with. 
-	 * Must not be <code>null</code>.
-	 * 
-	 * @return the name of the scope
-	 */
-	public String getName();
-
-	/**
-	 * Return the preferences node that contains the preferences for the
-	 * given qualifier or <code>null</code> if the node cannot be determined.
-	 * The given qualifier must not be <code>null</code> but may be a path 
-	 * to a sub-node within the scope.
-	 * <p>
-	 * An example of a qualifier in Eclipse 2.1 would be the plug-in identifier that 
-	 * the preference is associated with (e.g. the "org.eclipse.core.resources" 
-	 * plug-in defines the "description.autobuild" preference).
-	 * </p><p>
-	 * This method can be used to determine the appropriate preferences node
-	 * to aid in setting key/value pairs. For instance: 
-	 * <code>new InstanceScope().getNode("org.eclipse.core.resources");</code>
-	 * returns the preference node in the instance scope where the preferences
-	 * for "org.eclipse.core.resources" are stored.
-	 * </p>
-	 * @param qualifier a qualifier for the preference name
-	 * @return the node containing the plug-in preferences or <code>null</code>
-	 * @see IPreferencesService
-	 */
-	public IEclipsePreferences getNode(String qualifier);
-
-	/**
-	 * Return a path to a location in the file-system where clients are able
-	 * to write files that will have the same sharing/scope properties as
-	 * preferences defined in this scope.
-	 * <p>
-	 * Implementors may return <code>null</code> if the location is not known,
-	 * is unavailable, or is not applicable to this scope.
-	 * </p>
-	 * @return a writable location in the file system or <code>null</code>
-	 */
-	public IPath getLocation();
-}
diff --git a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/InstanceScope.java b/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/InstanceScope.java
deleted file mode 100644
index ddec0ea..0000000
--- a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/InstanceScope.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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.runtime.preferences;
-
-import org.eclipse.core.internal.preferences.AbstractScope;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.osgi.service.datalocation.Location;
-
-/**
- * Object representing the instance scope in the Eclipse preferences
- * hierarchy. Can be used as a context for searching for preference
- * values (in the IPreferencesService APIs) or for determining the 
- * correct preference node to set values in the store.
- * <p>
- * Instance preferences are stored on a per instance basis in the
- * platform's instance area as specified by the {@link Location} class
- * and the {@link Location#INSTANCE_FILTER} filter.
- * </p><p>
- * The path for preferences defined in the instance scope hierarchy
- * is as follows: <code>/instance/&lt;qualifier&gt;</code>
- * </p>
- * <p>
- * This class is not intended to be subclassed. This class may be instantiated.
- * </p>
- * @see Location#INSTANCE_FILTER
- * @since 3.0
- */
-public final class InstanceScope extends AbstractScope implements IScopeContext {
-
-	/**
-	 * String constant (value of <code>"instance"</code>) used for the 
-	 * scope name for the instance preference scope.
-	 */
-	public static final String SCOPE = "instance"; //$NON-NLS-1$
-
-	/**
-	 * Create and return a new instance scope instance.
-	 */
-	public InstanceScope() {
-		super();
-	}
-
-	/*
-	 * @see org.eclipse.core.runtime.preferences.IScopeContext#getLocation()
-	 */
-	public IPath getLocation() {
-		// Return null. The instance location usually corresponds to the state
-		// location of the bundle and we don't know what bundle we are dealing with.
-		return null;
-	}
-
-	/*
-	 * @see org.eclipse.core.runtime.preferences.IScopeContext#getName()
-	 */
-	public String getName() {
-		return SCOPE;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.runtime.preferences.IScopeContext#getNode(java.lang.String)
-	 */
-	public IEclipsePreferences getNode(String qualifier) {
-		return super.getNode(qualifier);
-	}
-}
diff --git a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/PreferenceFilterEntry.java b/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/PreferenceFilterEntry.java
deleted file mode 100644
index dc6470f..0000000
--- a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/PreferenceFilterEntry.java
+++ /dev/null
@@ -1,47 +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
- *******************************************************************************/
-package org.eclipse.core.runtime.preferences;
-
-/**
- * Class which represents and preference filter entry to be used during preference
- * import/export (for example).
- * 
- * @since 3.1
- * @see org.eclipse.core.runtime.preferences.IPreferenceFilter
- */
-public final class PreferenceFilterEntry {
-
-	private String key;
-
-	/**
-	 * Constructor for the class. Create a new preference filter entry with the given 
-	 * key. The key must <em>not</em> be <code>null</code> or empty. 
-	 * 
-	 * @param key the name of the preference key
-	 */
-	public PreferenceFilterEntry(String key) {
-		super();
-		if (key == null || key.length() == 0)
-			throw new IllegalArgumentException();
-		this.key = key;
-	}
-
-	/**
-	 * Return the name of the preference key for this filter entry.
-	 * It will <em>not</em> return <code>null</code> or the
-	 * empty string.
-	 * 
-	 * @return the name of the preference key
-	 */
-	public String getKey() {
-		return key;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/PreferenceModifyListener.java b/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/PreferenceModifyListener.java
deleted file mode 100644
index 7149a3a..0000000
--- a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/PreferenceModifyListener.java
+++ /dev/null
@@ -1,49 +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
- *******************************************************************************/
-package org.eclipse.core.runtime.preferences;
-
-/**
- * This class provides a hook into the preference service before particular operations
- * on the global preference tree. Preference modify listeners are registered with 
- * the preference service via XML and the <code>org.eclipse.core.runtime.preferences</code>
- * extension point.
- * <p>
- * Clients may subclass this type.
- * </p>
- * 
- * @since 3.1
- */
-public abstract class PreferenceModifyListener {
-
-	/**
-	 * Clients are given the opportunity to modify the given tree before it is applied 
-	 * to the global preference tree. Clients should return the tree which should be
-	 * applied globally. The tree passed in will not be <code>null</code> and clients
-	 * <em>must not</em> return a <code>null</code> tree.
-	 * <p>
-	 * This method is called by the preference service from within calls to 
-	 * {@link IPreferencesService#applyPreferences(IExportedPreferences)} or
-	 * {@link IPreferencesService#applyPreferences(IEclipsePreferences, IPreferenceFilter[])}.
-	 * </p>
-	 * <p>
-	 * A typical action for clients to perform would be to intercept the incoming preference tree,
-	 * migrate old preference values to new ones, and then return the new tree.
-	 * </p>
-	 * 
-	 * @param node the tree to modify
-	 * @return the tree to apply to the global preferences
-	 */
-	public IEclipsePreferences preApply(IEclipsePreferences node) {
-		// default implementation makes no modifications
-		return node;
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/package.html b/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/package.html
deleted file mode 100644
index 7c88d88..0000000
--- a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/runtime/preferences/package.html
+++ /dev/null
@@ -1,17 +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>Package-level Javadoc</title>
-</head>
-<body>
-Provides core support for Eclipse preferences.
-<h2>
-Package Specification</h2>
-<p>
-This package specifies API for defining and accessing preferences in the runtime.
-<p>
-@since 3.0
-<p>
-</body>
-</html>
diff --git a/bundles/org.eclipse.equinox.preferences/src/org/osgi/service/prefs/BackingStoreException.java b/bundles/org.eclipse.equinox.preferences/src/org/osgi/service/prefs/BackingStoreException.java
deleted file mode 100644
index 7a182d7..0000000
--- a/bundles/org.eclipse.equinox.preferences/src/org/osgi/service/prefs/BackingStoreException.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * $Header: /cvshome/build/org.osgi.service.prefs/src/org/osgi/service/prefs/BackingStoreException.java,v 1.12 2006/07/11 13:15:55 hargrave Exp $
- * 
- * Copyright (c) OSGi Alliance (2001, 2006). 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.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: 1.12 $
- */
-public class BackingStoreException extends Exception {
-    static final long serialVersionUID = -1415637364122829574L;
-	/**
-	 * Nested exception.
-	 */
-	private final Throwable	cause;
-
-	/**
-	 * Constructs a <code>BackingStoreException</code> with the specified detail
-	 * message.
-	 * 
-	 * @param s The detail message.
-	 */
-	public BackingStoreException(String s) {
-		super(s);
-		this.cause = null;
-	}
-	
-	/**
-	 * Constructs a <code>BackingStoreException</code> with the specified detail
-	 * message.
-	 * 
-	 * @param s The detail message.
-	 * @param cause The cause of the exception. May be <code>null</code>.
-	 * @since 1.1 
-	 */
-	public BackingStoreException(String s, Throwable cause) {
-		super(s);
-		this.cause = cause;
-	}
-	
-	/**
-	 * Returns the cause of this exception or <code>null</code> if no cause was
-	 * specified when this exception was created.
-	 * 
-	 * @return The cause of this exception or <code>null</code> if no cause was
-	 *         specified.
-	 * @since 1.1 
-	 */
-	public Throwable getCause() {
-		return cause;
-	}
-
-	/**
-	 * The cause of this exception can only be set when constructed.
-	 * 
-	 * @param cause Cause of the exception.
-	 * @return This object.
-	 * @throws java.lang.IllegalStateException This method will always throw an
-	 *         <code>IllegalStateException</code> since the cause of this
-	 *         exception can only be set when constructed.
-	 * @since 1.1 
-	 */
-	public Throwable initCause(Throwable cause) {
-		throw new IllegalStateException();
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.preferences/src/org/osgi/service/prefs/Preferences.java b/bundles/org.eclipse.equinox.preferences/src/org/osgi/service/prefs/Preferences.java
deleted file mode 100644
index c3a6cd0..0000000
--- a/bundles/org.eclipse.equinox.preferences/src/org/osgi/service/prefs/Preferences.java
+++ /dev/null
@@ -1,702 +0,0 @@
-/*
- * $Header: /cvshome/build/org.osgi.service.prefs/src/org/osgi/service/prefs/Preferences.java,v 1.11 2006/07/11 00:54:04 hargrave Exp $
- * 
- * Copyright (c) OSGi Alliance (2001, 2006). 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.prefs;
-
-/**
- * A node in a hierarchical collection of preference data.
- * 
- * <p>
- * This interface allows applications to store and retrieve user and system
- * preference data. This data is stored persistently in an
- * implementation-dependent backing store. Typical implementations include flat
- * files, OS-specific registries, directory servers and SQL databases.
- * 
- * <p>
- * For each bundle, there is a separate tree of nodes for each user, and one for
- * system preferences. The precise description of "user" and "system" will vary
- * from one bundle to another. Typical information stored in the user preference
- * tree might include font choice, and color choice for a bundle which interacts
- * with the user via a servlet. Typical information stored in the system
- * preference tree might include installation data, or things like high score
- * information for a game program.
- * 
- * <p>
- * Nodes in a preference tree are named in a similar fashion to directories in a
- * hierarchical file system. Every node in a preference tree has a <i>node name
- * </i> (which is not necessarily unique), a unique <i>absolute path name </i>,
- * 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 ("").
- * 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>&lt;node name&gt;
- * </i>. All other nodes have absolute path names of <i>&lt;parent's absolute
- * path name&gt; </i> <code> + "/" + </code> <i>&lt;node name&gt; </i>. Note that
- * all absolute path names begin with the slash character.
- * 
- * <p>
- * A node <i>n </i>'s path name relative to its ancestor <i>a </i> is simply the
- * string that must be appended to <i>a </i>'s absolute path name in order to
- * form <i>n </i>'s absolute path name, with the initial slash character (if
- * present) removed. Note that:
- * <ul>
- * <li>No relative path names begin with the slash character.
- * <li>Every node's path name relative to itself is the empty string.
- * <li>Every node's path name relative to its parent is its node name (except
- * for the root node, which does not have a parent).
- * <li>Every node's path name relative to the root is its absolute path name
- * with the initial slash character removed.
- * </ul>
- * 
- * <p>
- * Note finally that:
- * <ul>
- * <li>No path name contains multiple consecutive slash characters.
- * <li>No path name with the exception of the root's absolute path name end in
- * the slash character.
- * <li>Any string that conforms to these two rules is a valid path name.
- * </ul>
- * 
- * <p>
- * Each <code>Preference</code> 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.
- * 
- * <p>
- * All node name and property name comparisons are case-sensitive.
- * 
- * <p>
- * 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
- * to the backing store.
- * 
- * <p>
- * Implementations must automatically attempt to flush to the backing store any
- * pending updates for a bundle's preferences when the bundle is stopped or
- * otherwise ungets the Preferences Service.
- * 
- * <p>
- * The methods in this class may be invoked concurrently by multiple threads in
- * a single Java Virtual Machine (JVM) without the need for external
- * synchronization, and the results will be equivalent to some serial execution.
- * If this class is used concurrently <i>by multiple JVMs </i> that store their
- * preference data in the same backing store, the data store will not be
- * corrupted, but no other guarantees are made concerning the consistency of the
- * preference data.
- * 
- * 
- * @version $Revision: 1.11 $
- */
-public interface Preferences {
-	/**
-	 * Associates the specified value with the specified key in this node.
-	 * 
-	 * @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 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
-	 * node. Returns the specified default if there is no value associated with
-	 * the <code>key</code>, 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
-	 *        inaccessible.
-	 * @return the value associated with <code>key</code>, or <code>def</code> if
-	 *         no value is associated with <code>key</code>.
-	 * @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.)
-	 */
-	public String get(String key, String def);
-
-	/**
-	 * Removes the value associated with the specified <code>key</code> in this
-	 * node, if any.
-	 * 
-	 * @param key key whose mapping is to be removed from this node.
-	 * @see #get(String,String)
-	 * @throws IllegalStateException if this node (or an ancestor) has been
-	 *         removed with the {@link #removeNode()} method.
-	 */
-	public void remove(String key);
-
-	/**
-	 * Removes all of the properties (key-value associations) in this node. This
-	 * call has no effect on any descendants of this node.
-	 * 
-	 * @throws BackingStoreException if this operation cannot be completed due
-	 *         to a failure in the backing store, or inability to communicate
-	 *         with it.
-	 * @throws IllegalStateException if this node (or an ancestor) has been
-	 *         removed with the {@link #removeNode()} method.
-	 * @see #remove(String)
-	 */
-	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
-	 * 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
-	 * 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.
-	 * 
-	 * @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>.
-	 * @throws IllegalStateException if this node (or an ancestor) has been
-	 *         removed with the {@link #removeNode()} method.
-	 * @see #getInt(String,int)
-	 */
-	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
-	 * 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>.
-	 * @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
-	 *        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>.
-	 * @throws IllegalStateException if this node (or an ancestor) has been
-	 *         removed with the {@link #removeNode()} method.
-	 * @see #putInt(String,int)
-	 * @see #get(String,String)
-	 */
-	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>.
-	 * 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>
-	 *        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>.
-	 * @throws IllegalStateException if this node (or an ancestor) has been
-	 *         removed with the {@link #removeNode()} method.
-	 * @see #getLong(String,long)
-	 */
-	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
-	 * 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 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
-	 *        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>.
-	 * @throws IllegalStateException if this node (or an ancestor) has been
-	 *         removed with the {@link #removeNode()} method.
-	 * @see #putLong(String,long)
-	 * @see #get(String,String)
-	 */
-	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
-	 * 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>)
-	 * type.
-	 * 
-	 * @param key <code>key</code> 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>.
-	 * @throws IllegalStateException if this node (or an ancestor) has been
-	 *         removed with the {@link #removeNode()} method.
-	 * @see #getBoolean(String,boolean)
-	 * @see #get(String,String)
-	 */
-	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"
-	 * 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
-	 * 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 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
-	 *        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>.
-	 * @throws IllegalStateException if this node (or an ancestor) has been
-	 *         removed with the {@link #removeNode()} method.
-	 * @see #get(String,String)
-	 * @see #putBoolean(String,boolean)
-	 */
-	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
-	 * 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.
-	 * 
-	 * @param key <code>key</code> 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>.
-	 * @throws IllegalStateException if this node (or an ancestor) has been
-	 *         removed with the {@link #removeNode()} method.
-	 * @see #getFloat(String,float)
-	 */
-	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.
-	 * 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 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
-	 *        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
-	 *         associated value does not exist or cannot be interpreted as a
-	 *         <code>float</code> 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>.
-	 * @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
-	 * 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>)
-	 * type.
-	 * 
-	 * @param key <code>key</code> 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>.
-	 * @throws IllegalStateException if this node (or an ancestor) has been
-	 *         removed with the {@link #removeNode()} method.
-	 * @see #getDouble(String,double)
-	 */
-	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.
-	 * 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 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
-	 *        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.
-	 * @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>.
-	 * @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
-	 * 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.
-	 * This method is intended for use in conjunction with the
-	 * {@link #getByteArray} method.
-	 * 
-	 * <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>
-	 *        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>.
-	 * @throws IllegalStateException if this node (or an ancestor) has been
-	 *         removed with the {@link #removeNode()} method.
-	 * @see #getByteArray(String,byte[])
-	 * @see #get(String,String)
-	 */
-	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
-	 * 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
-	 * extraneous characters are permitted. This method is intended for use in
-	 * conjunction with the {@link #putByteArray} 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
-	 * 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 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
-	 *        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.)
-	 * @throws IllegalStateException if this node (or an ancestor) has been
-	 *         removed with the {@link #removeNode()} method.
-	 * @see #get(String,String)
-	 * @see #putByteArray(String,byte[])
-	 */
-	public byte[] getByteArray(String key, byte[] def);
-
-	/**
-	 * 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>!)
-	 * 
-	 * @return an array of the keys that have an associated value in this node.
-	 * @throws BackingStoreException if this operation cannot be completed due
-	 *         to a failure in the backing store, or inability to communicate
-	 *         with it.
-	 * @throws IllegalStateException if this node (or an ancestor) has been
-	 *         removed with the {@link #removeNode()} method.
-	 */
-	public String[] keys() throws BackingStoreException;
-
-	/**
-	 * 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>!)
-	 * 
-	 * @return the names of the children of this node.
-	 * @throws BackingStoreException if this operation cannot be completed due
-	 *         to a failure in the backing store, or inability to communicate
-	 *         with it.
-	 * @throws IllegalStateException if this node (or an ancestor) has been
-	 *         removed with the {@link #removeNode()} method.
-	 */
-	public String[] childrenNames() throws BackingStoreException;
-
-	/**
-	 * Returns the parent of this node, or <code>null</code> if this is the root.
-	 * 
-	 * @return the parent of this node.
-	 * @throws IllegalStateException if this node (or an ancestor) has been
-	 *         removed with the {@link #removeNode()} method.
-	 */
-	public Preferences parent();
-
-	/**
-	 * Returns a named <code>Preferences</code> 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>)
-	 * 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>)
-	 * 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
-	 * node (or one of its descendants).
-	 * 
-	 * @param pathName the path name of the <code>Preferences</code> object to
-	 *        return.
-	 * @return the specified <code>Preferences</code> 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>.
-	 * @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
-	 * 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
-	 * 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.
-	 * 
-	 * @param pathName the path name of the node whose existence is to be
-	 *        checked.
-	 * @return true if the specified node exists.
-	 * @throws BackingStoreException if this operation cannot be completed due
-	 *         to a failure in the backing store, or inability to communicate
-	 *         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>).
-	 * @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).
-	 */
-	public boolean nodeExists(String pathName)
-			throws BackingStoreException;
-
-	/**
-	 * 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>.)
-	 * 
-	 * <p>
-	 * The removal is not guaranteed to be persistent until the <code>flush</code>
-	 * method is called on the parent of this node.
-	 * 
-	 * @throws IllegalStateException if this node (or an ancestor) has already
-	 *         been removed with the {@link #removeNode()} method.
-	 * @throws BackingStoreException if this operation cannot be completed due
-	 *         to a failure in the backing store, or inability to communicate
-	 *         with it.
-	 * @see #flush()
-	 */
-	public void removeNode() throws BackingStoreException;
-
-	/**
-	 * Returns this node's name, relative to its parent.
-	 * 
-	 * @return this node's name, relative to its parent.
-	 */
-	public String name();
-
-	/**
-	 * Returns this node's absolute path name. Note that:
-	 * <ul>
-	 * <li>Root node - The path name of the root node is <code>"/"</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>
-	 * 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.
-	 * </ul>
-	 * 
-	 * @return this node's absolute path name.
-	 */
-	public String absolutePath();
-
-	/**
-	 * Forces any changes in the contents of this node and its descendants to
-	 * the persistent store.
-	 * 
-	 * <p>
-	 * Once this method returns successfully, it is safe to assume that all
-	 * changes made in the subtree rooted at this node prior to the method
-	 * invocation have become permanent.
-	 * 
-	 * <p>
-	 * Implementations are free to flush changes into the persistent store at
-	 * any time. They do not need to wait for this method to be called.
-	 * 
-	 * <p>
-	 * When a flush occurs on a newly created node, it is made persistent, as
-	 * are any ancestors (and descendants) that have yet to be made persistent.
-	 * Note however that any properties value changes in ancestors are <i>not
-	 * </i> guaranteed to be made persistent.
-	 * 
-	 * @throws BackingStoreException if this operation cannot be completed due
-	 *         to a failure in the backing store, or inability to communicate
-	 *         with it.
-	 * @throws IllegalStateException if this node (or an ancestor) has been
-	 *         removed with the {@link #removeNode()} method.
-	 * @see #sync()
-	 */
-	public void flush() throws BackingStoreException;
-
-	/**
-	 * 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
-	 * 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.
-	 * 
-	 * @throws BackingStoreException if this operation cannot be completed due
-	 *         to a failure in the backing store, or inability to communicate
-	 *         with it.
-	 * @throws IllegalStateException if this node (or an ancestor) has been
-	 *         removed with the {@link #removeNode()} method.
-	 * @see #flush()
-	 */
-	public void sync() throws BackingStoreException;
-}
diff --git a/bundles/org.eclipse.equinox.preferences/src/org/osgi/service/prefs/PreferencesService.java b/bundles/org.eclipse.equinox.preferences/src/org/osgi/service/prefs/PreferencesService.java
deleted file mode 100644
index 19c1e34..0000000
--- a/bundles/org.eclipse.equinox.preferences/src/org/osgi/service/prefs/PreferencesService.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * $Header: /cvshome/build/org.osgi.service.prefs/src/org/osgi/service/prefs/PreferencesService.java,v 1.10 2006/06/16 16:31:30 hargrave Exp $
- * 
- * Copyright (c) OSGi Alliance (2001, 2006). 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.prefs;
-
-/**
- * The Preferences Service.
- * 
- * <p>
- * Each bundle using this service has its own set of preference trees: one for
- * system preferences, and one for each user.
- * 
- * <p>
- * A <code>PreferencesService</code> 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.
- *  
- */
-public interface PreferencesService {
-	/**
-	 * Returns the root system node for the calling bundle.
-	 * 
-	 * @return The root system node for the calling bundle.
-	 */
-	public Preferences getSystemPreferences();
-
-	/**
-	 * Returns the root node for the specified user and the calling bundle.
-	 * 
-	 * @param name The user for which to return the preference root node. 
-	 * @return The root node for the specified user and the calling bundle.
-	 */
-	public Preferences getUserPreferences(String name);
-
-	/**
-	 * Returns the names of users for which node trees exist.
-	 * 
-	 * @return The names of users for which node trees exist.
-	 */
-	public String[] getUsers();
-}
diff --git a/bundles/org.eclipse.equinox.registry/.classpath b/bundles/org.eclipse.equinox.registry/.classpath
deleted file mode 100644
index ce73933..0000000
--- a/bundles/org.eclipse.equinox.registry/.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.4"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/bundles/org.eclipse.equinox.registry/.cvsignore b/bundles/org.eclipse.equinox.registry/.cvsignore
deleted file mode 100644
index ba077a4..0000000
--- a/bundles/org.eclipse.equinox.registry/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-bin
diff --git a/bundles/org.eclipse.equinox.registry/.options b/bundles/org.eclipse.equinox.registry/.options
deleted file mode 100644
index d08d974..0000000
--- a/bundles/org.eclipse.equinox.registry/.options
+++ /dev/null
@@ -1,4 +0,0 @@
-# Turn on debugging for the registry.
-org.eclipse.equinox.registry/debug=false
-# Extension registry change events
-org.eclipse.equinox.registry/debug/events=false
diff --git a/bundles/org.eclipse.equinox.registry/.project b/bundles/org.eclipse.equinox.registry/.project
deleted file mode 100644
index 0696648..0000000
--- a/bundles/org.eclipse.equinox.registry/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.equinox.registry</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/bundles/org.eclipse.equinox.registry/.settings/org.eclipse.core.resources.prefs b/bundles/org.eclipse.equinox.registry/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index 16532b2..0000000
--- a/bundles/org.eclipse.equinox.registry/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Tue May 25 15:00:03 EDT 2004
-encoding/<project>=ISO-8859-1
-eclipse.preferences.version=1
diff --git a/bundles/org.eclipse.equinox.registry/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.equinox.registry/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 5effb29..0000000
--- a/bundles/org.eclipse.equinox.registry/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,7 +0,0 @@
-#Wed Apr 19 17:13:49 EDT 2006
-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=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
-org.eclipse.jdt.core.compiler.source=1.3
diff --git a/bundles/org.eclipse.equinox.registry/META-INF/MANIFEST.MF b/bundles/org.eclipse.equinox.registry/META-INF/MANIFEST.MF
deleted file mode 100644
index b2fa0fb..0000000
--- a/bundles/org.eclipse.equinox.registry/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,35 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %pluginName
-Bundle-SymbolicName: org.eclipse.equinox.registry; singleton:=true
-Bundle-Version: 3.2.100.qualifier
-Bundle-Localization: plugin
-Export-Package: org.eclipse.core.internal.registry;x-friends:="org.eclipse.core.runtime",
- org.eclipse.core.internal.registry.osgi;x-friends:="org.eclipse.core.runtime",
- org.eclipse.core.internal.registry.spi;x-internal:=true,
- org.eclipse.core.runtime; registry="split"; mandatory:="registry",
- org.eclipse.core.runtime.dynamichelpers,
- org.eclipse.core.runtime.spi
-Require-Bundle: org.eclipse.equinox.common;bundle-version="[3.2.0,4.0.0)"
-Bundle-Vendor: %providerName
-Bundle-Activator: org.eclipse.core.internal.registry.osgi.Activator
-Import-Package: javax.xml.parsers,
- org.eclipse.core.runtime.jobs;resolution:=optional,
- org.eclipse.osgi.framework.console;resolution:=optional,
- org.eclipse.osgi.service.datalocation,
- org.eclipse.osgi.service.debug,
- org.eclipse.osgi.service.environment;resolution:=optional,
- org.eclipse.osgi.service.resolver;resolution:=optional,
- org.eclipse.osgi.storagemanager,
- org.eclipse.osgi.util,
- org.osgi.framework,
- org.osgi.service.packageadmin,
- org.osgi.util.tracker,
- org.xml.sax,
- org.xml.sax.helpers
-Eclipse-ExtensibleAPI: true
-Bundle-ClassPath: runtime_registry_compatibility.jar, .
-Eclipse-LazyStart: true
-Bundle-RequiredExecutionEnvironment: J2SE-1.4,
- CDC-1.0/Foundation-1.0,
- J2SE-1.3
diff --git a/bundles/org.eclipse.equinox.registry/about.html b/bundles/org.eclipse.equinox.registry/about.html
deleted file mode 100644
index 174731c..0000000
--- a/bundles/org.eclipse.equinox.registry/about.html
+++ /dev/null
@@ -1,60 +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 25, 2006</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 (&quot;EPL&quot;).  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, &quot;Program&quot; 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 (&quot;Redistributor&quot;) 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&rsquo;s license for 
-terms and conditions of use.</p>
-
-<h4>Jakarta Commons Collections</h4>
-<p>The plug-in includes software developed by The Apache Software Foundation as part of the Jakarta Commons Collections project.</p>
-
-<p>The Jakarta Commons Collections binary code can be found in the plug-in JAR in the following files:</p>
-
-<ul>
- <li>org\eclipse\core\internal\registry\ReferenceMap.class</li>
-</ul>
-
-<p>The Jakarta Commons Collections source code can be found in src.zip in the following files:</p>
-
-<ul>
- <li>org\eclipse\core\internal\registry\ReferenceMap.java</li>
-</ul>
-
-<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 names &quot;Jakarta&quot; and  &quot;Apache Software Foundation&quot; 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@apache.org">apache@apache.org</a>.</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>
-
-</body>
-</html>
diff --git a/bundles/org.eclipse.equinox.registry/about_files/LICENSE-2.0.txt b/bundles/org.eclipse.equinox.registry/about_files/LICENSE-2.0.txt
deleted file mode 100644
index d645695..0000000
--- a/bundles/org.eclipse.equinox.registry/about_files/LICENSE-2.0.txt
+++ /dev/null
@@ -1,202 +0,0 @@
-
-                                 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.
diff --git a/bundles/org.eclipse.equinox.registry/about_files/NOTICE.txt b/bundles/org.eclipse.equinox.registry/about_files/NOTICE.txt
deleted file mode 100644
index 3f59805..0000000
--- a/bundles/org.eclipse.equinox.registry/about_files/NOTICE.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-This product includes software developed by
-The Apache Software Foundation (http://www.apache.org/).
diff --git a/bundles/org.eclipse.equinox.registry/build.properties b/bundles/org.eclipse.equinox.registry/build.properties
deleted file mode 100644
index e5ecec7..0000000
--- a/bundles/org.eclipse.equinox.registry/build.properties
+++ /dev/null
@@ -1,21 +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
-###############################################################################
-source.. = src/
-output.. = bin/
-bin.includes = META-INF/,\
-               .,\
-               .options,\
-               plugin.properties,\
-               about.html,\
-               about_files/
-src.includes = about.html,\
-               about_files/
-jre.compilation.profile = J2SE-1.4
diff --git a/bundles/org.eclipse.equinox.registry/plugin.properties b/bundles/org.eclipse.equinox.registry/plugin.properties
deleted file mode 100644
index 780c86f..0000000
--- a/bundles/org.eclipse.equinox.registry/plugin.properties
+++ /dev/null
@@ -1,12 +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
-###############################################################################
-pluginName = Extension Registry Support
-providerName = Eclipse.org
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/BaseExtensionHandle.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/BaseExtensionHandle.java
deleted file mode 100644
index 1dda8b6..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/BaseExtensionHandle.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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.registry;
-
-import org.eclipse.core.runtime.*;
-
-/**
- * This is the copy of the ExtensionHandle minus the getDeclaringPluginDescriptor()
- * method that was moved into compatibility plugin.
- * 
- * This class should not be used directly. Use ExtensionHandle instead.
- * 
- * @since org.eclipse.equinox.registry 3.2 
- */
-public class BaseExtensionHandle extends Handle implements IExtension {
-
-	public BaseExtensionHandle(IObjectManager objectManager, int id) {
-		super(objectManager, id);
-	}
-
-	protected Extension getExtension() {
-		return (Extension) objectManager.getObject(getId(), RegistryObjectManager.EXTENSION);
-	}
-
-	protected boolean shouldPersist() {
-		return getExtension().shouldPersist();
-	}
-
-	// Method left for backward compatiblity only
-	public String getNamespace() {
-		return getContributor().getName();
-	}
-
-	public String getNamespaceIdentifier() {
-		return getExtension().getNamespaceIdentifier();
-	}
-
-	public IContributor getContributor() {
-		return getExtension().getContributor();
-	}
-	
-	String getContributorId() {
-		return getExtension().getContributorId();
-	}
-
-	public String getExtensionPointUniqueIdentifier() {
-		return getExtension().getExtensionPointIdentifier();
-	}
-
-	public String getLabel() {
-		return getExtension().getLabel();
-	}
-
-	public String getSimpleIdentifier() {
-		return getExtension().getSimpleIdentifier();
-	}
-
-	public String getUniqueIdentifier() {
-		return getExtension().getUniqueIdentifier();
-	}
-
-	public IConfigurationElement[] getConfigurationElements() {
-		return (IConfigurationElement[]) objectManager.getHandles(getExtension().getRawChildren(), RegistryObjectManager.CONFIGURATION_ELEMENT);
-	}
-
-	RegistryObject getObject() {
-		return getExtension();
-	}
-
-	public boolean isValid() {
-		try {
-			getExtension();
-		} catch (InvalidRegistryObjectException e) {
-			return false;
-		}
-		return true;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/BaseExtensionPointHandle.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/BaseExtensionPointHandle.java
deleted file mode 100644
index b6ad27b..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/BaseExtensionPointHandle.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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.registry;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import org.eclipse.core.runtime.*;
-
-/**
- * This is the copy of the ExtensionPointHandle minus the getDeclaringPluginDescriptor()
- * method that was moved into compatibility plugin.
- * 
- * This class should not be used directly. Use ExtensionPointHandle instead.
- * 
- * @since org.eclipse.equinox.registry 3.2 
- */
-public class BaseExtensionPointHandle extends Handle implements IExtensionPoint {
-
-	public BaseExtensionPointHandle(IObjectManager objectManager, int id) {
-		super(objectManager, id);
-	}
-
-	public IExtension[] getExtensions() {
-		return (IExtension[]) objectManager.getHandles(getExtensionPoint().getRawChildren(), RegistryObjectManager.EXTENSION);
-	}
-
-	// This method is left for backward compatibility only
-	public String getNamespace() {
-		return getContributor().getName();
-	}
-	
-	public String getNamespaceIdentifier() {
-		return getExtensionPoint().getNamespace();
-	}
-	
-	public IContributor getContributor() {
-		return getExtensionPoint().getContributor();
-	}
-
-	protected boolean shouldPersist() {
-		return getExtensionPoint().shouldPersist();
-	}
-
-	public IExtension getExtension(String extensionId) {
-		if (extensionId == null)
-			return null;
-		int[] children = getExtensionPoint().getRawChildren();
-		for (int i = 0; i < children.length; i++) {
-			//	Here we directly get the object because it avoids the creation of garbage and because we'll need the object anyway to compare the value
-			if (extensionId.equals(((Extension) objectManager.getObject(children[i], RegistryObjectManager.EXTENSION)).getUniqueIdentifier()))
-				return (ExtensionHandle) objectManager.getHandle(children[i], RegistryObjectManager.EXTENSION);
-		}
-		return null;
-	}
-
-	public IConfigurationElement[] getConfigurationElements() {
-		//get the actual extension objects since we'll need to get the configuration elements information.
-		Extension[] tmpExtensions = (Extension[]) objectManager.getObjects(getExtensionPoint().getRawChildren(), RegistryObjectManager.EXTENSION);
-		if (tmpExtensions.length == 0)
-			return ConfigurationElementHandle.EMPTY_ARRAY;
-
-		ArrayList result = new ArrayList();
-		for (int i = 0; i < tmpExtensions.length; i++) {
-			result.addAll(Arrays.asList(objectManager.getHandles(tmpExtensions[i].getRawChildren(), RegistryObjectManager.CONFIGURATION_ELEMENT)));
-		}
-		return (IConfigurationElement[]) result.toArray(new IConfigurationElement[result.size()]);
-	}
-
-	public String getLabel() {
-		return getExtensionPoint().getLabel();
-	}
-
-	public String getSchemaReference() {
-		return getExtensionPoint().getSchemaReference();
-	}
-
-	public String getSimpleIdentifier() {
-		return getExtensionPoint().getSimpleIdentifier();
-	}
-
-	public String getUniqueIdentifier() {
-		return getExtensionPoint().getUniqueIdentifier();
-	}
-
-	RegistryObject getObject() {
-		return getExtensionPoint();
-	}
-
-	protected ExtensionPoint getExtensionPoint() {
-		return (ExtensionPoint) objectManager.getObject(getId(), RegistryObjectManager.EXTENSION_POINT);
-	}
-
-	public boolean isValid() {
-		try {
-			getExtensionPoint();
-		} catch (InvalidRegistryObjectException e) {
-			return false;
-		}
-		return true;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/BufferedRandomInputStream.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/BufferedRandomInputStream.java
deleted file mode 100644
index db0abec..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/BufferedRandomInputStream.java
+++ /dev/null
@@ -1,145 +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.core.internal.registry;
-
-import java.io.*;
-
-/**
- * Provides buffered read from a java.io.RandomAccessFile.
- */
-public class BufferedRandomInputStream extends InputStream {
-
-	private RandomAccessFile inputFile;
-	private String filePath; // Canonical path to the underlying file used for logging
-	private int buffer_size; // Current size of the buffer 
-	private int buffer_pos; // Current read position in the buffer
-	/**
-	 * The absolute position in the file where the buffered region starts.
-	 */
-	private long buffer_start = 0;
-
-	/**
-	 * The current value of the RAF's file pointer.
-	 */
-	private long file_pointer;
-
-	private byte buffer[];
-
-	public BufferedRandomInputStream(File file) throws IOException {
-		this(file, 2048); // default buffer size
-	}
-
-	public BufferedRandomInputStream(File file, int bufferSize) throws IOException {
-		filePath = file.getCanonicalPath();
-		inputFile = new RandomAccessFile(file, "r"); //$NON-NLS-1$
-		buffer = new byte[bufferSize];
-		file_pointer = 0;
-		resetBuffer();
-	}
-
-	private void resetBuffer() {
-		buffer_pos = 0;
-		buffer_size = 0;
-		buffer_start = 0;
-	}
-
-	private int fillBuffer() throws IOException {
-		buffer_pos = 0;
-		buffer_start = file_pointer;
-		buffer_size = inputFile.read(buffer, 0, buffer.length);
-		file_pointer += buffer_size;
-		return buffer_size;
-	}
-
-	public int read() throws IOException {
-		if (buffer_pos >= buffer_size) {
-			if (fillBuffer() <= 0)
-				return -1;
-		}
-		return buffer[buffer_pos++] & 0xFF;
-	}
-
-	public int read(byte b[], int off, int len) throws IOException {
-		int available = buffer_size - buffer_pos;
-		if (available < 0)
-			return -1;
-		//the buffer contains all the bytes we need, so copy over and return
-		if (len <= available) {
-			System.arraycopy(buffer, buffer_pos, b, off, len);
-			buffer_pos += len;
-			return len;
-		}
-		// Use portion remaining in the buffer
-		System.arraycopy(buffer, buffer_pos, b, off, available);
-		if (fillBuffer() <= 0)
-			return available;
-		//recursive call to read again until we have the bytes we need
-		return available + read(b, off + available, len - available);
-	}
-
-	public long skip(long n) throws IOException {
-		if (n <= 0)
-			return 0;
-
-		int available = buffer_size - buffer_pos;
-		if (n <= available) {
-			buffer_pos += n;
-			return n;
-		}
-		resetBuffer();
-		final int skipped = inputFile.skipBytes((int) (n - available));
-		file_pointer += skipped;
-		return available + skipped;
-	}
-
-	public int available() throws IOException {
-		return (buffer_size - buffer_pos);
-	}
-
-	public void close() throws IOException {
-		inputFile.close();
-		inputFile = null;
-		buffer = null;
-	}
-
-	public String toString() {
-		return filePath;
-	}
-
-	/**
-	 * Supplies functionality of the {@link java.io.RandomAccessFile#seek(long)} in
-	 * a buffer-friendly manner.
-	 * 
-	 * @param pos offset
-	 * @throws IOException
-	 */
-	public void seek(long pos) throws IOException {
-		if (pos >= buffer_start && pos < buffer_start + buffer_size) {
-			//seeking within the current buffer
-			buffer_pos = (int) (pos - buffer_start);
-		} else {
-			//seeking outside the buffer - just discard the buffer
-			inputFile.seek(pos);
-			file_pointer = pos;
-			resetBuffer();
-		}
-	}
-
-	/**
-	 * Supplies functionality of the {@link java.io.RandomAccessFile#length()}.
-	 * @return file length
-	 * @throws IOException
-	 */
-	public long length() throws IOException {
-		return inputFile.length();
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ConfigurationElement.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ConfigurationElement.java
deleted file mode 100644
index 9f973b9..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ConfigurationElement.java
+++ /dev/null
@@ -1,267 +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.core.internal.registry;
-
-import java.util.Hashtable;
-import org.eclipse.core.runtime.*;
-import org.eclipse.core.runtime.spi.RegistryContributor;
-import org.eclipse.osgi.util.NLS;
-
-/**
- * An object which represents the user-defined contents of an extension
- * in a plug-in manifest.
- */
-public class ConfigurationElement extends RegistryObject {
-	static final ConfigurationElement[] EMPTY_ARRAY = new ConfigurationElement[0];
-
-	//The id of the parent element. It can be a configuration element or an extension
-	int parentId;
-	byte parentType; //This value is only interesting when running from cache.
-
-	//Store the properties and the value of the configuration element.
-	//The format is the following: 
-	//	[p1, v1, p2, v2, configurationElementValue]
-	//If the array size is even, there is no "configurationElementValue (ie getValue returns null)".
-	//The properties and their values are alternated (v1 is the value of p1). 
-	private String[] propertiesAndValue;
-
-	//The name of the configuration element
-	private String name;
-
-	//ID of the actual contributor of this element 
-	//This value can be null when the element is loaded from disk and the owner has been uninstalled.
-	//This happens when the configuration is obtained from a delta containing removed extension.
-	private String contributorId;
-
-	protected ConfigurationElement(ExtensionRegistry registry, boolean persist) {
-		super(registry, persist);
-	}
-
-	protected ConfigurationElement(int self, String contributorId, String name, String[] propertiesAndValue, int[] children, int extraDataOffset, int parent, byte parentType, ExtensionRegistry registry, boolean persist) {
-		super(registry, persist);
-
-		setObjectId(self);
-		this.contributorId = contributorId;
-		this.name = name;
-		this.propertiesAndValue = propertiesAndValue;
-		setRawChildren(children);
-		setExtraDataOffset(extraDataOffset);
-		parentId = parent;
-		this.parentType = parentType;
-	}
-
-	void throwException(String message, Throwable exception) throws CoreException {
-		throw new CoreException(new Status(IStatus.ERROR, RegistryMessages.OWNER_NAME, IRegistryConstants.PLUGIN_ERROR, message, exception));
-	}
-
-	protected String getValue() {
-		return getValueAsIs();
-	}
-
-	String getValueAsIs() {
-		if (propertiesAndValue.length != 0 && propertiesAndValue.length % 2 == 1)
-			return propertiesAndValue[propertiesAndValue.length - 1];
-		return null;
-	}
-
-	public String getAttribute(String attrName) {
-		return getAttributeAsIs(attrName);
-	}
-
-	String getAttributeAsIs(String attrName) {
-		if (propertiesAndValue.length <= 1)
-			return null;
-		int size = propertiesAndValue.length - (propertiesAndValue.length % 2);
-		for (int i = 0; i < size; i += 2) {
-			if (propertiesAndValue[i].equals(attrName))
-				return propertiesAndValue[i + 1];
-		}
-		return null;
-	}
-
-	protected String[] getAttributeNames() {
-		if (propertiesAndValue.length <= 1)
-			return RegistryObjectManager.EMPTY_STRING_ARRAY;
-
-		int size = propertiesAndValue.length / 2;
-		String[] result = new String[size];
-		for (int i = 0; i < size; i++) {
-			result[i] = propertiesAndValue[i * 2];
-		}
-		return result;
-	}
-
-	void setProperties(String[] value) {
-		propertiesAndValue = value;
-	}
-
-	protected String[] getPropertiesAndValue() {
-		return propertiesAndValue;
-	}
-
-	void setValue(String value) {
-		if (propertiesAndValue.length == 0) {
-			propertiesAndValue = new String[] {value};
-			return;
-		}
-		if (propertiesAndValue.length % 2 == 1) {
-			propertiesAndValue[propertiesAndValue.length - 1] = value;
-			return;
-		}
-		String[] newPropertiesAndValue = new String[propertiesAndValue.length + 1];
-		System.arraycopy(propertiesAndValue, 0, newPropertiesAndValue, 0, propertiesAndValue.length);
-		newPropertiesAndValue[propertiesAndValue.length] = value;
-		propertiesAndValue = newPropertiesAndValue;
-	}
-
-	void setContributorId(String id) {
-		this.contributorId = id;
-	}
-
-	protected String getContributorId() {
-		return contributorId;
-	}
-
-	public ConfigurationElement[] getChildren(String childrenName) {
-		if (getRawChildren().length == 0)
-			return ConfigurationElement.EMPTY_ARRAY;
-
-		ConfigurationElement[] result = new ConfigurationElement[1]; //Most of the time there is only one match
-		int idx = 0;
-		RegistryObjectManager objectManager = registry.getObjectManager();
-		for (int i = 0; i < children.length; i++) {
-			ConfigurationElement toTest = (ConfigurationElement) objectManager.getObject(children[i], noExtraData() ? RegistryObjectManager.CONFIGURATION_ELEMENT : RegistryObjectManager.THIRDLEVEL_CONFIGURATION_ELEMENT);
-			if (toTest.name.equals(childrenName)) {
-				if (idx != 0) {
-					ConfigurationElement[] copy = new ConfigurationElement[result.length + 1];
-					System.arraycopy(result, 0, copy, 0, result.length);
-					result = copy;
-				}
-				result[idx++] = toTest;
-			}
-		}
-		if (idx == 0)
-			result = ConfigurationElement.EMPTY_ARRAY;
-		return result;
-	}
-
-	void setParentId(int objectId) {
-		parentId = objectId;
-	}
-
-	protected String getName() {
-		return name;
-	}
-
-	void setName(String name) {
-		this.name = name;
-	}
-
-	void setParentType(byte type) {
-		parentType = type;
-	}
-
-	public IContributor getContributor() {
-		return registry.getObjectManager().getContributor(contributorId);
-	}
-
-	protected Object createExecutableExtension(String attributeName) throws CoreException {
-		String prop = null;
-		String executable;
-		String contributorName = null;
-		String className = null;
-		Object initData = null;
-		int i;
-
-		if (attributeName != null)
-			prop = getAttribute(attributeName);
-		else {
-			// property not specified, try as element value
-			prop = getValue();
-			if (prop != null) {
-				prop = prop.trim();
-				if (prop.equals("")) //$NON-NLS-1$
-					prop = null;
-			}
-		}
-
-		if (prop == null) {
-			// property not defined, try as a child element
-			ConfigurationElement[] exec;
-			ConfigurationElement[] parms;
-			ConfigurationElement element;
-			Hashtable initParms;
-			String pname;
-
-			exec = getChildren(attributeName);
-			if (exec.length != 0) {
-				element = exec[0]; // assumes single definition
-				contributorName = element.getAttribute("plugin"); //$NON-NLS-1$
-				className = element.getAttribute("class"); //$NON-NLS-1$
-				parms = element.getChildren("parameter"); //$NON-NLS-1$
-				if (parms.length != 0) {
-					initParms = new Hashtable(parms.length + 1);
-					for (i = 0; i < parms.length; i++) {
-						pname = parms[i].getAttribute("name"); //$NON-NLS-1$
-						if (pname != null)
-							initParms.put(pname, parms[i].getAttribute("value")); //$NON-NLS-1$
-					}
-					if (!initParms.isEmpty())
-						initData = initParms;
-				}
-			} else {
-				// specified name is not a simple attribute nor child element
-				throwException(NLS.bind(RegistryMessages.exExt_extDefNotFound, attributeName), null);
-			}
-		} else {
-			// simple property or element value, parse it into its components
-			i = prop.indexOf(':');
-			if (i != -1) {
-				executable = prop.substring(0, i).trim();
-				initData = prop.substring(i + 1).trim();
-			} else
-				executable = prop;
-
-			i = executable.indexOf('/');
-			if (i != -1) {
-				contributorName = executable.substring(0, i).trim();
-				className = executable.substring(i + 1).trim();
-			} else
-				className = executable;
-		}
-
-		// create a new instance
-		RegistryContributor defaultContributor = registry.getObjectManager().getContributor(contributorId); 
-		Object result = registry.createExecutableExtension(defaultContributor, className, contributorName);
-
-		// Check if we have extension adapter and initialize;
-		// Make the call even if the initialization string is null
-		try {
-			// We need to take into account both "old" and "new" style executable extensions 
-			ConfigurationElementHandle confElementHandle = new ConfigurationElementHandle(registry.getObjectManager(), getObjectId());
-			if (result instanceof IExecutableExtension)
-				((IExecutableExtension) result).setInitializationData(confElementHandle, attributeName, initData);
-		} catch (CoreException ce) {
-			// user code threw exception
-			throw ce;
-		} catch (Exception te) {
-			// user code caused exception
-			throwException(NLS.bind(RegistryMessages.plugin_initObjectError, getContributor().getName(), className), te);
-		}
-
-		// Deal with executable extension factories.
-		if (result instanceof IExecutableExtensionFactory)
-			result = ((IExecutableExtensionFactory) result).create();
-
-		return result;
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ConfigurationElementHandle.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ConfigurationElementHandle.java
deleted file mode 100644
index 0469d83..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ConfigurationElementHandle.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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.registry;
-
-import org.eclipse.core.runtime.*;
-
-/**
- * @since 3.1 
- */
-public class ConfigurationElementHandle extends Handle implements IConfigurationElement {
-	static final ConfigurationElementHandle[] EMPTY_ARRAY = new ConfigurationElementHandle[0];
-
-	public ConfigurationElementHandle(IObjectManager objectManager, int id) {
-		super(objectManager, id);
-	}
-
-	protected ConfigurationElement getConfigurationElement() {
-		return (ConfigurationElement) objectManager.getObject(getId(), RegistryObjectManager.CONFIGURATION_ELEMENT);
-	}
-
-	protected boolean shouldPersist() {
-		return getConfigurationElement().shouldPersist();
-	}
-
-	public String getAttribute(String propertyName) {
-		return getConfigurationElement().getAttribute(propertyName);
-	}
-
-	public String[] getAttributeNames() {
-		return getConfigurationElement().getAttributeNames();
-	}
-
-	public IConfigurationElement[] getChildren() {
-		ConfigurationElement actualCe = getConfigurationElement();
-		if (actualCe.noExtraData()) {
-			return (IConfigurationElement[]) objectManager.getHandles(actualCe.getRawChildren(), RegistryObjectManager.CONFIGURATION_ELEMENT);
-		}
-		return (IConfigurationElement[]) objectManager.getHandles(actualCe.getRawChildren(), RegistryObjectManager.THIRDLEVEL_CONFIGURATION_ELEMENT);
-	}
-
-	public Object createExecutableExtension(String propertyName) throws CoreException {
-		try {
-			return getConfigurationElement().createExecutableExtension(propertyName);
-		} catch (InvalidRegistryObjectException e) {
-			Status status = new Status(IStatus.ERROR, RegistryMessages.OWNER_NAME, IRegistryConstants.PLUGIN_ERROR, "Invalid registry object", e); //$NON-NLS-1$
-			if (objectManager instanceof RegistryObjectManager)
-				((RegistryObjectManager) objectManager).getRegistry().log(status);
-			throw new CoreException(status);
-		}
-	}
-
-	public String getAttributeAsIs(String name) {
-		return getConfigurationElement().getAttributeAsIs(name);
-	}
-
-	public IConfigurationElement[] getChildren(String name) {
-		ConfigurationElement actualCE = getConfigurationElement();
-		ConfigurationElement[] children = (ConfigurationElement[]) objectManager.getObjects(actualCE.getRawChildren(), actualCE.noExtraData() ? RegistryObjectManager.CONFIGURATION_ELEMENT : RegistryObjectManager.THIRDLEVEL_CONFIGURATION_ELEMENT);
-		if (children.length == 0)
-			return ConfigurationElementHandle.EMPTY_ARRAY;
-
-		IConfigurationElement[] result = new IConfigurationElement[1];
-		int idx = 0;
-		for (int i = 0; i < children.length; i++) {
-			if (children[i].getName().equals(name)) {
-				if (idx != 0) {
-					IConfigurationElement[] copy = new IConfigurationElement[result.length + 1];
-					System.arraycopy(result, 0, copy, 0, result.length);
-					result = copy;
-				}
-				result[idx++] = (IConfigurationElement) objectManager.getHandle(children[i].getObjectId(), actualCE.noExtraData() ? RegistryObjectManager.CONFIGURATION_ELEMENT : RegistryObjectManager.THIRDLEVEL_CONFIGURATION_ELEMENT);
-			}
-		}
-		if (idx == 0)
-			return ConfigurationElementHandle.EMPTY_ARRAY;
-		return result;
-	}
-
-	public IExtension getDeclaringExtension() {
-		Object result = this;
-		while (!((result = ((ConfigurationElementHandle) result).getParent()) instanceof ExtensionHandle)) { /*do nothing*/
-		}
-		return (IExtension) result;
-	}
-
-	public String getName() {
-		return getConfigurationElement().getName();
-	}
-
-	public Object getParent() {
-		ConfigurationElement actualCe = getConfigurationElement();
-		return objectManager.getHandle(actualCe.parentId, actualCe.parentType);
-	}
-
-	public String getValue() {
-		return getConfigurationElement().getValue();
-	}
-
-	public String getValueAsIs() {
-		return getConfigurationElement().getValueAsIs();
-	}
-
-	RegistryObject getObject() {
-		return getConfigurationElement();
-	}
-
-	// Method left for backward compatibility only
-	public String getNamespace() {
-		return getContributor().getName();
-	}
-
-	public String getNamespaceIdentifier() {
-		// namespace name is determined by the contributing extension
-		return getDeclaringExtension().getNamespaceIdentifier();
-	}
-
-	public IContributor getContributor() {
-		return getConfigurationElement().getContributor();
-	}
-
-	public boolean isValid() {
-		try {
-			getConfigurationElement();
-		} catch (InvalidRegistryObjectException e) {
-			return false;
-		}
-		return true;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/Contribution.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/Contribution.java
deleted file mode 100644
index 7d1a8ca..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/Contribution.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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.registry;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.InvalidRegistryObjectException;
-
-// This object is used to keep track on a contributor basis of the extension and extension points being contributed.
-// It is mainly used on removal so we can quickly  find objects to remove.
-// Each contribution is made in the context of a namespace.  
-public class Contribution implements KeyedElement {
-	static final int[] EMPTY_CHILDREN = new int[] {0, 0};
-
-	//The registry that owns this object
-	protected ExtensionRegistry registry;
-
-	// The actual contributor of the contribution
-	final protected String contributorId;
-
-	// Value is derived from the contributorId and cached for performance
-	private String defaultNamespace = null;
-
-	// indicates if this contribution needs to be saved in the registry cache
-	protected boolean persist;
-
-	// This array stores the identifiers of both the extension points and the extensions.
-	// The array has always a minimum size of 2.
-	// The first element of the array is the number of extension points and the second the number of extensions. 
-	// [numberOfExtensionPoints, numberOfExtensions, extensionPoint#1, extensionPoint#2, extensionPoint..., ext#1, ext#2, ext#3, ... ].
-	// The size of the array is 2 + (numberOfExtensionPoints +  numberOfExtensions).
-	private int[] children = EMPTY_CHILDREN;
-	static final public byte EXTENSION_POINT = 0;
-	static final public byte EXTENSION = 1;
-
-	protected Contribution(String contributorId, ExtensionRegistry registry, boolean persist) {
-		this.contributorId = contributorId;
-		this.registry = registry;
-		this.persist = persist;
-	}
-
-	void mergeContribution(Contribution addContribution) {
-		Assert.isTrue(contributorId.equals(addContribution.contributorId));
-		Assert.isTrue(registry == addContribution.registry);
-
-		// persist?
-		// Old New Result
-		//  F   F   F
-		//  F   T   T	=> needs to be adjusted
-		//  T   F   T 
-		//  T   T   T
-		if (shouldPersist() != addContribution.shouldPersist())
-			persist = true;
-
-		int[] existing = getRawChildren();
-		int[] addition = addContribution.getRawChildren();
-
-		int extensionPoints = existing[EXTENSION_POINT] + addition[EXTENSION_POINT];
-		int extensions = existing[EXTENSION] + addition[EXTENSION];
-		int[] allChildren = new int[2 + extensionPoints + extensions];
-
-		allChildren[EXTENSION_POINT] = extensionPoints;
-		System.arraycopy(existing, 2, allChildren, 2, existing[EXTENSION_POINT]);
-		System.arraycopy(addition, 2, allChildren, 2 + existing[EXTENSION_POINT], addition[EXTENSION_POINT]);
-		allChildren[EXTENSION] = extensions;
-		System.arraycopy(existing, 2 + existing[EXTENSION_POINT], allChildren, 2 + extensionPoints, existing[EXTENSION]);
-		System.arraycopy(addition, 2 + addition[EXTENSION_POINT], allChildren, 2 + extensionPoints + existing[EXTENSION], addition[EXTENSION]);
-
-		children = allChildren;
-	}
-
-	void setRawChildren(int[] children) {
-		this.children = children;
-	}
-
-	protected String getContributorId() {
-		return contributorId;
-	}
-
-	protected int[] getRawChildren() {
-		return children;
-	}
-
-	protected int[] getExtensions() {
-		int[] results = new int[children[EXTENSION]];
-		System.arraycopy(children, 2 + children[EXTENSION_POINT], results, 0, children[EXTENSION]);
-		return results;
-	}
-
-	protected int[] getExtensionPoints() {
-		int[] results = new int[children[EXTENSION_POINT]];
-		System.arraycopy(children, 2, results, 0, children[EXTENSION_POINT]);
-		return results;
-	}
-
-	public String getDefaultNamespace() {
-		if (defaultNamespace == null)
-			defaultNamespace = registry.getObjectManager().getContributor(contributorId).getName();
-		return defaultNamespace;
-	}
-
-	public String toString() {
-		return "Contribution: " + contributorId + " in namespace" + getDefaultNamespace(); //$NON-NLS-1$ //$NON-NLS-2$
-	}
-
-	//Implements the KeyedElement interface
-	public int getKeyHashCode() {
-		return getKey().hashCode();
-	}
-
-	public Object getKey() {
-		return contributorId;
-	}
-
-	public boolean compare(KeyedElement other) {
-		return contributorId.equals(((Contribution) other).contributorId);
-	}
-
-	public boolean shouldPersist() {
-		return persist;
-	}
-
-	public void unlinkChild(int id) {
-		// find index of the child being unlinked:
-		int index = -1;
-		for (int i = 2; i < children.length; i++) {
-			if (children[i] == id) {
-				index = i;
-				break;
-			}
-		}
-		if (index == -1)
-			throw new InvalidRegistryObjectException();
-
-		// copy all array except one element at index
-		int[] result = new int[children.length - 1];
-		System.arraycopy(children, 0, result, 0, index);
-		System.arraycopy(children, index + 1, result, index, children.length - index - 1);
-
-		// fix sizes
-		if (index < children[EXTENSION_POINT] + 2)
-			result[EXTENSION_POINT]--;
-		else
-			result[EXTENSION]--;
-
-		children = result;
-	}
-
-	/**
-	 * Contribution is empty if it has no children.
-	 */
-	public boolean isEmpty() {
-		return (children[EXTENSION_POINT] == 0 || children[EXTENSION] == 0);
-	}
-
-	/**
-	 * Find if this contribution has a children with ID = id.
-	 * @param id possible ID of the child
-	 * @return true: contribution has this child
-	 */
-	public boolean hasChild(int id) {
-		for (int i = 2; i < children.length; i++) {
-			if (children[i] == id)
-				return true;
-		}
-		return false;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/Extension.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/Extension.java
deleted file mode 100644
index f281406..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/Extension.java
+++ /dev/null
@@ -1,138 +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.core.internal.registry;
-
-import java.lang.ref.SoftReference;
-import org.eclipse.core.runtime.IContributor;
-
-/**
- * An object which represents the user-defined extension in a plug-in manifest.  
- */
-public class Extension extends RegistryObject {
-	public static final Extension[] EMPTY_ARRAY = new Extension[0];
-
-	//Extension simple identifier
-	private String simpleId;
-	//The namespace for the extension. 
-	private String namespaceIdentifier;
-
-	//	Place holder for the label and  the extension point. It contains either a String[] or a SoftReference to a String[].
-	//The array layout is [label, extension point name]
-	private Object extraInformation;
-	private static final byte LABEL = 0; //The human readable name of the extension
-	private static final byte XPT_NAME = 1; // The fully qualified name of the extension point to which this extension is attached to
-	private static final byte CONTRIBUTOR_ID = 2; // ID of the actual contributor of this extension
-	private static final int EXTRA_SIZE = 3;
-
-	protected Extension(ExtensionRegistry registry, boolean persist) {
-		super(registry, persist);
-	}
-
-	protected Extension(int self, String simpleId, String namespace, int[] children, int extraData, ExtensionRegistry registry, boolean persist) {
-		super(registry, persist);
-
-		setObjectId(self);
-		this.simpleId = simpleId;
-		setRawChildren(children);
-		setExtraDataOffset(extraData);
-		this.namespaceIdentifier = namespace;
-	}
-
-	protected String getExtensionPointIdentifier() {
-		return getExtraData()[XPT_NAME];
-	}
-
-	protected String getSimpleIdentifier() {
-		return simpleId;
-	}
-
-	protected String getUniqueIdentifier() {
-		return simpleId == null ? null : this.getNamespaceIdentifier() + '.' + simpleId;
-	}
-
-	void setExtensionPointIdentifier(String value) {
-		ensureExtraInformationType();
-		((String[]) extraInformation)[XPT_NAME] = value;
-	}
-
-	void setSimpleIdentifier(String value) {
-		simpleId = value;
-	}
-
-	private String[] getExtraData() {
-		//The extension has been created by parsing, or does not have any extra data 
-		if (noExtraData()) {
-			if (extraInformation != null)
-				return (String[]) extraInformation;
-			return null;
-		}
-
-		//The extension has been loaded from the cache. 
-		String[] result = null;
-		if (extraInformation == null || (result = ((extraInformation instanceof SoftReference) ? (String[]) ((SoftReference) extraInformation).get() : (String[]) extraInformation)) == null) {
-			result = registry.getTableReader().loadExtensionExtraData(getExtraDataOffset());
-			extraInformation = new SoftReference(result);
-		}
-		return result;
-	}
-
-	String getLabel() {
-		String s = getExtraData()[LABEL];
-		if (s == null)
-			return ""; //$NON-NLS-1$
-		return s;
-	}
-
-	void setLabel(String value) {
-		ensureExtraInformationType();
-		((String[]) extraInformation)[LABEL] = value;
-	}
-
-	String getContributorId() {
-		String s = getExtraData()[CONTRIBUTOR_ID];
-		if (s == null)
-			return ""; //$NON-NLS-1$
-		return s;
-	}
-
-	public IContributor getContributor() {
-		return registry.getObjectManager().getContributor(getContributorId());
-	}
-
-	void setContributorId(String value) {
-		ensureExtraInformationType();
-		((String[]) extraInformation)[CONTRIBUTOR_ID] = value;
-	}
-
-	public String getNamespaceIdentifier() {
-		return namespaceIdentifier;
-	}
-
-	void setNamespaceIdentifier(String value) {
-		namespaceIdentifier = value;
-	}
-
-	public String toString() {
-		return getUniqueIdentifier() + " -> " + getExtensionPointIdentifier(); //$NON-NLS-1$
-	}
-
-	/**
-	 * At the end of this method, extra information will be a string[]
-	 */
-	private void ensureExtraInformationType() {
-		if (extraInformation instanceof SoftReference) {
-			extraInformation = ((SoftReference) extraInformation).get();
-		}
-		if (extraInformation == null) {
-			extraInformation = new String[EXTRA_SIZE];
-		}
-	}
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ExtensionDelta.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ExtensionDelta.java
deleted file mode 100644
index 29d6b78..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ExtensionDelta.java
+++ /dev/null
@@ -1,70 +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.core.internal.registry;
-
-import org.eclipse.core.runtime.*;
-
-public class ExtensionDelta implements IExtensionDelta {
-	private int kind;
-	private int extension;
-	private int extensionPoint;
-	private RegistryDelta containingDelta;
-
-	void setContainingDelta(RegistryDelta containingDelta) {
-		this.containingDelta = containingDelta;
-	}
-
-	int getExtensionId() {
-		return extension;
-	}
-
-	int getExtensionPointId() {
-		return extensionPoint;
-	}
-
-	public IExtensionPoint getExtensionPoint() {
-		return new ExtensionPointHandle(containingDelta.getObjectManager(), extensionPoint);
-	}
-
-	public void setExtensionPoint(int extensionPoint) {
-		this.extensionPoint = extensionPoint;
-	}
-
-	public int getKind() {
-		return kind;
-	}
-
-	public IExtension getExtension() {
-		return new ExtensionHandle(containingDelta.getObjectManager(), extension);
-	}
-
-	public void setExtension(int extension) {
-		this.extension = extension;
-	}
-
-	public void setKind(int kind) {
-		this.kind = kind;
-	}
-
-	public String toString() {
-		return "\n\t\t" + getExtensionPoint().getUniqueIdentifier() + " - " + getExtension().getNamespaceIdentifier() + '.' + getExtension().getSimpleIdentifier() + " (" + getKindString(this.getKind()) + ")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$		
-	}
-
-	public static String getKindString(int kind) {
-		switch (kind) {
-			case ADDED :
-				return "ADDED"; //$NON-NLS-1$
-			case REMOVED :
-				return "REMOVED"; //$NON-NLS-1$
-		}
-		return "UNKNOWN"; //$NON-NLS-1$
-	}
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ExtensionHandle.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ExtensionHandle.java
deleted file mode 100644
index 908e9fa..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ExtensionHandle.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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.registry;
-
-/**
- * The code (minus the getDeclaringPluginDescriptor() was moved into 
- * the  BaseExtensionPointHandle to avoid duplicating code in the 
- * compatibility fragment.
- * 
- * Modifications to the code should be done in the BaseExtensionHandle.
- * 
- * @since 3.1 
- */
-public class ExtensionHandle extends BaseExtensionHandle {
-
-	static final ExtensionHandle[] EMPTY_ARRAY = new ExtensionHandle[0];
-
-	public ExtensionHandle(IObjectManager objectManager, int id) {
-		super(objectManager, id);
-	}
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ExtensionPoint.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ExtensionPoint.java
deleted file mode 100644
index fe96df5..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ExtensionPoint.java
+++ /dev/null
@@ -1,135 +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.core.internal.registry;
-
-import java.io.File;
-import java.lang.ref.SoftReference;
-import org.eclipse.core.runtime.IContributor;
-
-/**
- * An object which represents the user-defined extension point in a 
- * plug-in manifest. 
- */
-public class ExtensionPoint extends RegistryObject {
-	public static final ExtensionPoint[] EMPTY_ARRAY = new ExtensionPoint[0];
-
-	//Place holder for the label and the schema. It contains either a String[] or a SoftReference to a String[].
-	//The array layout is [label, schemaReference, fullyQualifiedName, namespace, contributorId]
-	private Object extraInformation;
-	//Indexes of the various fields
-	private static final byte LABEL = 0; //The human readable name for the extension point
-	private static final byte SCHEMA = 1; //The schema of the extension point
-	private static final byte QUALIFIED_NAME = 2; //The fully qualified name of the extension point
-	private static final byte NAMESPACE = 3; //The name of the namespace of the extension point
-	private static final byte CONTRIBUTOR_ID = 4; //The ID of the actual contributor of the extension point
-	private static final int EXTRA_SIZE = 5;
-
-	protected ExtensionPoint(ExtensionRegistry registry, boolean persist) {
-		super(registry, persist);
-	}
-
-	protected ExtensionPoint(int self, int[] children, int dataOffset, ExtensionRegistry registry, boolean persist) {
-		super(registry, persist);
-
-		setObjectId(self);
-		setRawChildren(children);
-		setExtraDataOffset(dataOffset);
-	}
-
-	protected String getSimpleIdentifier() {
-		return getUniqueIdentifier().substring(getUniqueIdentifier().lastIndexOf('.') + 1);
-	}
-
-	private String[] getExtraData() {
-		//The extension point has been created by parsing, or does not have any extra data 
-		if (noExtraData()) { //When this is true, the extraInformation is always a String[]. This happens when the object is created by the parser.  
-			if (extraInformation != null)
-				return (String[]) extraInformation;
-			return new String[EXTRA_SIZE];
-		}
-
-		//The extension point has been loaded from the cache. 
-		String[] result = null;
-		if (extraInformation == null || (result = ((extraInformation instanceof SoftReference) ? (String[]) ((SoftReference) extraInformation).get() : (String[]) extraInformation)) == null) {
-			result = registry.getTableReader().loadExtensionPointExtraData(getExtraDataOffset());
-			extraInformation = new SoftReference(result);
-		}
-		return result;
-	}
-
-	/**
-	 * At the end of this method, extra information will be a string[]
-	 */
-	private void ensureExtraInformationType() {
-		if (extraInformation instanceof SoftReference) {
-			extraInformation = ((SoftReference) extraInformation).get();
-		}
-		if (extraInformation == null) {
-			extraInformation = new String[EXTRA_SIZE];
-		}
-	}
-
-	protected String getSchemaReference() {
-		String[] result = getExtraData();
-		return result[1] == null ? "" : result[SCHEMA].replace(File.separatorChar, '/'); //$NON-NLS-1$		
-	}
-
-	protected String getLabel() {
-		String[] result = getExtraData();
-		return result[0] == null ? "" : result[LABEL]; //$NON-NLS-1$
-	}
-
-	protected String getUniqueIdentifier() {
-		return getExtraData()[QUALIFIED_NAME];
-	}
-
-	public String getNamespace() {
-		return getExtraData()[NAMESPACE];
-	}
-
-	protected String getContributorId() {
-		return getExtraData()[CONTRIBUTOR_ID];
-	}
-
-	public IContributor getContributor() {
-		return registry.getObjectManager().getContributor(getContributorId());
-	}
-
-	void setSchema(String value) {
-		ensureExtraInformationType();
-		((String[]) extraInformation)[SCHEMA] = value;
-	}
-
-	void setLabel(String value) {
-		ensureExtraInformationType();
-		((String[]) extraInformation)[LABEL] = value;
-	}
-
-	void setUniqueIdentifier(String value) {
-		ensureExtraInformationType();
-		((String[]) extraInformation)[QUALIFIED_NAME] = value;
-	}
-
-	void setNamespace(String value) {
-		ensureExtraInformationType();
-		((String[]) extraInformation)[NAMESPACE] = value;
-	}
-
-	void setContributorId(String id) {
-		ensureExtraInformationType();
-		((String[]) extraInformation)[CONTRIBUTOR_ID] = id;
-	}
-
-	public String toString() {
-		return getUniqueIdentifier();
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ExtensionPointHandle.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ExtensionPointHandle.java
deleted file mode 100644
index 8f8ee9b..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ExtensionPointHandle.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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.registry;
-
-/**
- * The code (minus the getDeclaringPluginDescriptor() was moved into 
- * the  BaseExtensionPointHandle to avoid duplicating code in the 
- * compatibility fragment.
- * 
- * Modifications to the code should be done in the BaseExtensionPointHandle.
- * 
- * @since 3.1 
- */
-public class ExtensionPointHandle extends BaseExtensionPointHandle {
-
-	static final ExtensionPointHandle[] EMPTY_ARRAY = new ExtensionPointHandle[0];
-
-	public ExtensionPointHandle(IObjectManager objectManager, int id) {
-		super(objectManager, id);
-	}
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ExtensionRegistry.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ExtensionRegistry.java
deleted file mode 100644
index 1216a4d..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ExtensionRegistry.java
+++ /dev/null
@@ -1,1206 +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.core.internal.registry;
-
-import java.io.*;
-import java.lang.reflect.Array;
-import java.util.*;
-import javax.xml.parsers.ParserConfigurationException;
-import org.eclipse.core.internal.registry.spi.ConfigurationElementDescription;
-import org.eclipse.core.internal.registry.spi.ConfigurationElementAttribute;
-import org.eclipse.core.runtime.*;
-import org.eclipse.core.runtime.spi.*;
-import org.eclipse.osgi.storagemanager.StorageManager;
-import org.eclipse.osgi.util.NLS;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-
-/**
- * An implementation for the extension registry API.
- */
-public class ExtensionRegistry implements IExtensionRegistry {
-
-	protected class ListenerInfo {
-		public String filter;
-		public IRegistryChangeListener listener;
-
-		public ListenerInfo(IRegistryChangeListener listener, String filter) {
-			this.listener = listener;
-			this.filter = filter;
-		}
-
-		/**
-		 * Used by ListenerList to ensure uniqueness.
-		 */
-		public boolean equals(Object another) {
-			return another instanceof ListenerInfo && ((ListenerInfo) another).listener == this.listener;
-		}
-	}
-
-	// used to enforce concurrent access policy for readers/writers
-	private ReadWriteMonitor access = new ReadWriteMonitor();
-
-	// deltas not broadcasted yet. Deltas are kept organized by the namespace name (objects with the same namespace are grouped together)
-	private transient Map deltas = new HashMap(11);
-
-	//storage manager associated with the registry cache
-	protected StorageManager cacheStorageManager;
-
-	// all registry change listeners
-	private transient ListenerList listeners = new ListenerList();
-
-	private RegistryObjectManager registryObjects = null;
-
-	// set to "true" if registry was able to use cache to populate it's content. 
-	// if "false", content is empty and might need to be filled in
-	protected boolean isRegistryFilledFromCache = false;
-
-	// Table reader associated with this extension registry
-	protected TableReader theTableReader = new TableReader(this);
-
-	private Object masterToken; // use to get full control of the registry; objects created as "static" 
-	private Object userToken; // use to modify non-persisted registry elements
-
-	protected RegistryStrategy strategy; // overridable portions of the registry functionality
-
-	private RegistryTimestamp aggregatedTimestamp = new RegistryTimestamp(); // tracks current contents of the registry
-
-	public RegistryObjectManager getObjectManager() {
-		return registryObjects;
-	}
-
-	/**
-	 * Sets new cache file manager. If existing file manager was owned by the registry,
-	 * closes it.
-	 *  
-	 * @param newFileManager - new cache file manager
-	 * @param registryOwnsManager - true: life cycle of the file manager is controlled by the registry
-	 */
-	protected void setFileManager(File cacheBase, boolean isCacheReadOnly) {
-		if (cacheStorageManager != null)
-			cacheStorageManager.close(); // close existing file manager first
-
-		if (cacheBase != null) {
-			cacheStorageManager = new StorageManager(cacheBase, isCacheReadOnly ? "none" : null, isCacheReadOnly); //$NON-NLS-1$
-			try {
-				cacheStorageManager.open(!isCacheReadOnly);
-			} catch (IOException e) {
-				// Ignore the exception. The registry will be rebuilt from source.
-			}
-		}
-	}
-
-	/**
-	 * Adds and resolves all extensions and extension points provided by the
-	 * plug-in.
-	 * <p>
-	 * A corresponding IRegistryChangeEvent will be broadcast to all listeners
-	 * interested on changes in the given plug-in.
-	 * </p>
-	 */
-	private void add(Contribution element) {
-		access.enterWrite();
-		try {
-			basicAdd(element, true);
-			fireRegistryChangeEvent();
-		} finally {
-			access.exitWrite();
-		}
-	}
-
-	/* Utility method to help with array concatenations */
-	static Object concatArrays(Object a, Object b) {
-		Object[] result = (Object[]) Array.newInstance(a.getClass().getComponentType(), Array.getLength(a) + Array.getLength(b));
-		System.arraycopy(a, 0, result, 0, Array.getLength(a));
-		System.arraycopy(b, 0, result, Array.getLength(a), Array.getLength(b));
-		return result;
-	}
-
-	private String addExtension(int extension) {
-		Extension addedExtension = (Extension) registryObjects.getObject(extension, RegistryObjectManager.EXTENSION);
-		String extensionPointToAddTo = addedExtension.getExtensionPointIdentifier();
-		ExtensionPoint extPoint = registryObjects.getExtensionPointObject(extensionPointToAddTo);
-		//orphan extension
-		if (extPoint == null) {
-			registryObjects.addOrphan(extensionPointToAddTo, extension);
-			return null;
-		}
-		// otherwise, link them
-		int[] newExtensions;
-		int[] existingExtensions = extPoint.getRawChildren();
-		newExtensions = new int[existingExtensions.length + 1];
-		System.arraycopy(existingExtensions, 0, newExtensions, 0, existingExtensions.length);
-		newExtensions[newExtensions.length - 1] = extension;
-		link(extPoint, newExtensions);
-		return recordChange(extPoint, extension, IExtensionDelta.ADDED);
-	}
-
-	/**
-	 * Looks for existing orphan extensions to connect to the given extension
-	 * point. If none is found, there is nothing to do. Otherwise, link them.
-	 */
-	private String addExtensionPoint(int extPoint) {
-		ExtensionPoint extensionPoint = (ExtensionPoint) registryObjects.getObject(extPoint, RegistryObjectManager.EXTENSION_POINT);
-		int[] orphans = registryObjects.removeOrphans(extensionPoint.getUniqueIdentifier());
-		if (orphans == null)
-			return null;
-		link(extensionPoint, orphans);
-		return recordChange(extensionPoint, orphans, IExtensionDelta.ADDED);
-	}
-
-	private Set addExtensionsAndExtensionPoints(Contribution element) {
-		// now add and resolve extensions and extension points
-		Set affectedNamespaces = new HashSet();
-		int[] extPoints = element.getExtensionPoints();
-		for (int i = 0; i < extPoints.length; i++) {
-			String namespace = this.addExtensionPoint(extPoints[i]);
-			if (namespace != null)
-				affectedNamespaces.add(namespace);
-		}
-		int[] extensions = element.getExtensions();
-		for (int i = 0; i < extensions.length; i++) {
-			String namespace = this.addExtension(extensions[i]);
-			if (namespace != null)
-				affectedNamespaces.add(namespace);
-		}
-		return affectedNamespaces;
-	}
-
-	public void addRegistryChangeListener(IRegistryChangeListener listener) {
-		// this is just a convenience API - no need to do any sync'ing here		
-		addRegistryChangeListener(listener, null);
-	}
-
-	public void addRegistryChangeListener(IRegistryChangeListener listener, String filter) {
-		synchronized (listeners) {
-			listeners.add(new ListenerInfo(listener, filter));
-		}
-	}
-
-	private void basicAdd(Contribution element, boolean link) {
-		registryObjects.addContribution(element);
-		if (!link)
-			return;
-		Set affectedNamespaces = addExtensionsAndExtensionPoints(element);
-		setObjectManagers(affectedNamespaces, registryObjects.createDelegatingObjectManager(registryObjects.getAssociatedObjects(element.getContributorId())));
-	}
-
-	private void setObjectManagers(Set affectedNamespaces, IObjectManager manager) {
-		for (Iterator iter = affectedNamespaces.iterator(); iter.hasNext();) {
-			getDelta((String) iter.next()).setObjectManager(manager);
-		}
-	}
-
-	private void basicRemove(String contributorId) {
-		// ignore anonymous namespaces
-		Set affectedNamespaces = removeExtensionsAndExtensionPoints(contributorId);
-		Map associatedObjects = registryObjects.getAssociatedObjects(contributorId);
-		registryObjects.removeObjects(associatedObjects);
-		registryObjects.addNavigableObjects(associatedObjects); // put the complete set of navigable objects
-		setObjectManagers(affectedNamespaces, registryObjects.createDelegatingObjectManager(associatedObjects));
-
-		registryObjects.removeContribution(contributorId);
-		registryObjects.removeContributor(contributorId);
-	}
-
-	// allow other objects in the registry to use the same lock
-	void enterRead() {
-		access.enterRead();
-	}
-
-	// allow other objects in the registry to use the same lock	
-	void exitRead() {
-		access.exitRead();
-	}
-
-	/**
-	 * Broadcasts (asynchronously) the event to all interested parties.
-	 */
-	private void fireRegistryChangeEvent() {
-		// if there is nothing to say, just bail out
-		if (deltas.isEmpty() || listeners.isEmpty())
-			return;
-		// for thread safety, create tmp collections
-		Object[] tmpListeners = listeners.getListeners();
-		Map tmpDeltas = new HashMap(this.deltas);
-		// the deltas have been saved for notification - we can clear them now
-		deltas.clear();
-		// do the notification asynchronously
-		strategy.scheduleChangeEvent(tmpListeners, tmpDeltas, this);
-	}
-
-	/*
-	 *  (non-Javadoc)
-	 * @see org.eclipse.core.runtime.IExtensionRegistry#getConfigurationElementsFor(java.lang.String)
-	 */
-	public IConfigurationElement[] getConfigurationElementsFor(String extensionPointId) {
-		// this is just a convenience API - no need to do any sync'ing here		
-		int lastdot = extensionPointId.lastIndexOf('.');
-		if (lastdot == -1)
-			return new IConfigurationElement[0];
-		return getConfigurationElementsFor(extensionPointId.substring(0, lastdot), extensionPointId.substring(lastdot + 1));
-	}
-
-	/*
-	 *  (non-Javadoc)
-	 * @see org.eclipse.core.runtime.IExtensionRegistry#getConfigurationElementsFor(java.lang.String, java.lang.String)
-	 */
-	public IConfigurationElement[] getConfigurationElementsFor(String pluginId, String extensionPointSimpleId) {
-		// this is just a convenience API - no need to do any sync'ing here
-		IExtensionPoint extPoint = this.getExtensionPoint(pluginId, extensionPointSimpleId);
-		if (extPoint == null)
-			return new IConfigurationElement[0];
-		return extPoint.getConfigurationElements();
-	}
-
-	/*
-	 *  (non-Javadoc)
-	 * @see org.eclipse.core.runtime.IExtensionRegistry#getConfigurationElementsFor(java.lang.String, java.lang.String, java.lang.String)
-	 */
-	public IConfigurationElement[] getConfigurationElementsFor(String pluginId, String extensionPointName, String extensionId) {
-		// this is just a convenience API - no need to do any sync'ing here		
-		IExtension extension = this.getExtension(pluginId, extensionPointName, extensionId);
-		if (extension == null)
-			return new IConfigurationElement[0];
-		return extension.getConfigurationElements();
-	}
-
-	private RegistryDelta getDelta(String namespace) {
-		// is there a delta for the plug-in?
-		RegistryDelta existingDelta = (RegistryDelta) deltas.get(namespace);
-		if (existingDelta != null)
-			return existingDelta;
-
-		//if not, create one
-		RegistryDelta delta = new RegistryDelta();
-		deltas.put(namespace, delta);
-		return delta;
-	}
-
-	/*
-	 *  (non-Javadoc)
-	 * @see org.eclipse.core.runtime.IExtensionRegistry#getExtension(java.lang.String)
-	 */
-	public IExtension getExtension(String extensionId) {
-		if (extensionId == null)
-			return null;
-		int lastdot = extensionId.lastIndexOf('.');
-		if (lastdot == -1)
-			return null;
-		String namespace = extensionId.substring(0, lastdot);
-
-		ExtensionHandle[] extensions = registryObjects.getExtensionsFromNamespace(namespace);
-		for (int i = 0; i < extensions.length; i++) {
-			ExtensionHandle suspect = extensions[i];
-			if (extensionId.equals(suspect.getUniqueIdentifier()))
-				return suspect;
-		}
-		return null;
-	}
-
-	/*
-	 *  (non-Javadoc)
-	 * @see org.eclipse.core.runtime.IExtensionRegistry#getExtension(java.lang.String, java.lang.String)
-	 */
-	public IExtension getExtension(String extensionPointId, String extensionId) {
-		// this is just a convenience API - no need to do any sync'ing here		
-		int lastdot = extensionPointId.lastIndexOf('.');
-		if (lastdot == -1)
-			return null;
-		return getExtension(extensionPointId.substring(0, lastdot), extensionPointId.substring(lastdot + 1), extensionId);
-	}
-
-	/*
-	 *  (non-Javadoc)
-	 * @see org.eclipse.core.runtime.IExtensionRegistry#getExtension(java.lang.String, java.lang.String, java.lang.String)
-	 */
-	public IExtension getExtension(String pluginId, String extensionPointName, String extensionId) {
-		// this is just a convenience API - no need to do any sync'ing here		
-		IExtensionPoint extPoint = getExtensionPoint(pluginId, extensionPointName);
-		if (extPoint != null)
-			return extPoint.getExtension(extensionId);
-		return null;
-	}
-
-	/*
-	 *  (non-Javadoc)
-	 * @see org.eclipse.core.runtime.IExtensionRegistry#getExtensionPoint(java.lang.String)
-	 */
-	public IExtensionPoint getExtensionPoint(String xptUniqueId) {
-		return registryObjects.getExtensionPointHandle(xptUniqueId);
-	}
-
-	/*
-	 *  (non-Javadoc)
-	 * @see org.eclipse.core.runtime.IExtensionRegistry#getExtensionPoint(java.lang.String, java.lang.String)
-	 */
-	public IExtensionPoint getExtensionPoint(String elementName, String xpt) {
-		access.enterRead();
-		try {
-			return registryObjects.getExtensionPointHandle(elementName + '.' + xpt);
-		} finally {
-			access.exitRead();
-		}
-	}
-
-	/*
-	 *  (non-Javadoc)
-	 * @see org.eclipse.core.runtime.IExtensionRegistry#getExtensionPoints()
-	 */
-	public IExtensionPoint[] getExtensionPoints() {
-		access.enterRead();
-		try {
-			return registryObjects.getExtensionPointsHandles();
-		} finally {
-			access.exitRead();
-		}
-	}
-
-	/*
-	 *  (non-Javadoc)
-	 * @see org.eclipse.core.runtime.IExtensionRegistry#getExtensionPoints(java.lang.String)
-	 */
-	public IExtensionPoint[] getExtensionPoints(String namespaceName) {
-		access.enterRead();
-		try {
-			return registryObjects.getExtensionPointsFromNamespace(namespaceName);
-		} finally {
-			access.exitRead();
-		}
-	}
-
-	/*
-	 *  (non-Javadoc)
-	 * @see org.eclipse.core.runtime.IExtensionRegistry#getExtensions(java.lang.String)
-	 */
-	public IExtension[] getExtensions(String namespaceName) {
-		access.enterRead();
-		try {
-			return registryObjects.getExtensionsFromNamespace(namespaceName);
-		} finally {
-			access.exitRead();
-		}
-	}
-
-	/*
-	 *  (non-Javadoc)
-	 * @see org.eclipse.core.runtime.IExtensionRegistry#getNamespaces()
-	 */
-	public String[] getNamespaces() {
-		access.enterRead();
-		try {
-			KeyedElement[] namespaceElements = registryObjects.getNamespacesIndex().elements();
-			String[] namespaceNames = new String[namespaceElements.length];
-			for (int i = 0; i < namespaceElements.length; i++) {
-				namespaceNames[i] = (String) ((RegistryIndexElement) namespaceElements[i]).getKey();
-			}
-			return namespaceNames;
-		} finally {
-			access.exitRead();
-		}
-	}
-
-	public boolean hasContribution(String name) {
-		access.enterRead();
-		try {
-			return registryObjects.hasContribution(name);
-		} finally {
-			access.exitRead();
-		}
-	}
-
-	private void link(ExtensionPoint extPoint, int[] extensions) {
-		extPoint.setRawChildren(extensions);
-		registryObjects.add(extPoint, true);
-	}
-
-	/*
-	 * Records an extension addition/removal.
-	 */
-	private String recordChange(ExtensionPoint extPoint, int extension, int kind) {
-		// avoid computing deltas when there are no listeners
-		if (listeners.isEmpty())
-			return null;
-		ExtensionDelta extensionDelta = new ExtensionDelta();
-		extensionDelta.setExtension(extension);
-		extensionDelta.setExtensionPoint(extPoint.getObjectId());
-		extensionDelta.setKind(kind);
-		getDelta(extPoint.getNamespace()).addExtensionDelta(extensionDelta);
-		return extPoint.getNamespace();
-	}
-
-	/*
-	 * Records a set of extension additions/removals.
-	 */
-	private String recordChange(ExtensionPoint extPoint, int[] extensions, int kind) {
-		if (listeners.isEmpty())
-			return null;
-		if (extensions == null || extensions.length == 0)
-			return null;
-		RegistryDelta pluginDelta = getDelta(extPoint.getNamespace());
-		for (int i = 0; i < extensions.length; i++) {
-			ExtensionDelta extensionDelta = new ExtensionDelta();
-			extensionDelta.setExtension(extensions[i]);
-			extensionDelta.setExtensionPoint(extPoint.getObjectId());
-			extensionDelta.setKind(kind);
-			pluginDelta.addExtensionDelta(extensionDelta);
-		}
-		return extPoint.getNamespace();
-	}
-
-	public void remove(String removedContributorId, long timestamp) {
-		remove(removedContributorId);
-		if (timestamp != 0)
-			aggregatedTimestamp.remove(timestamp);
-	}
-
-	/**
-	 * Unresolves and removes all extensions and extension points provided by
-	 * the plug-in.
-	 * <p>
-	 * A corresponding IRegistryChangeEvent will be broadcast to all listeners
-	 * interested on changes in the given plug-in.
-	 * </p>
-	 */
-	public void remove(String removedContributorId) {
-		access.enterWrite();
-		try {
-			basicRemove(removedContributorId);
-			fireRegistryChangeEvent();
-		} finally {
-			access.exitWrite();
-		}
-	}
-
-	//Return the affected namespace
-	private String removeExtension(int extensionId) {
-		Extension extension = (Extension) registryObjects.getObject(extensionId, RegistryObjectManager.EXTENSION);
-		registryObjects.removeExtensionFromNamespaceIndex(extensionId, extension.getNamespaceIdentifier());
-		String xptName = extension.getExtensionPointIdentifier();
-		ExtensionPoint extPoint = registryObjects.getExtensionPointObject(xptName);
-		if (extPoint == null) {
-			registryObjects.removeOrphan(xptName, extensionId);
-			return null;
-		}
-		// otherwise, unlink the extension from the extension point
-		int[] existingExtensions = extPoint.getRawChildren();
-		int[] newExtensions = RegistryObjectManager.EMPTY_INT_ARRAY;
-		if (existingExtensions.length > 1) {
-			if (existingExtensions.length == 1)
-				newExtensions = RegistryObjectManager.EMPTY_INT_ARRAY;
-
-			newExtensions = new int[existingExtensions.length - 1];
-			for (int i = 0, j = 0; i < existingExtensions.length; i++)
-				if (existingExtensions[i] != extension.getObjectId())
-					newExtensions[j++] = existingExtensions[i];
-		}
-		link(extPoint, newExtensions);
-		return recordChange(extPoint, extension.getObjectId(), IExtensionDelta.REMOVED);
-	}
-
-	private String removeExtensionPoint(int extPoint) {
-		ExtensionPoint extensionPoint = (ExtensionPoint) registryObjects.getObject(extPoint, RegistryObjectManager.EXTENSION_POINT);
-		registryObjects.removeExtensionPointFromNamespaceIndex(extPoint, extensionPoint.getNamespace());
-		int[] existingExtensions = extensionPoint.getRawChildren();
-		if (existingExtensions == null || existingExtensions.length == 0) {
-			return null;
-		}
-		//Remove the extension point from the registry object
-		registryObjects.addOrphans(extensionPoint.getUniqueIdentifier(), existingExtensions);
-		link(extensionPoint, RegistryObjectManager.EMPTY_INT_ARRAY);
-		return recordChange(extensionPoint, existingExtensions, IExtensionDelta.REMOVED);
-	}
-
-	private Set removeExtensionsAndExtensionPoints(String contributorId) {
-		Set affectedNamespaces = new HashSet();
-		int[] extensions = registryObjects.getExtensionsFrom(contributorId);
-		for (int i = 0; i < extensions.length; i++) {
-			String namespace = this.removeExtension(extensions[i]);
-			if (namespace != null)
-				affectedNamespaces.add(namespace);
-		}
-
-		// remove extension points
-		int[] extPoints = registryObjects.getExtensionPointsFrom(contributorId);
-		for (int i = 0; i < extPoints.length; i++) {
-			String namespace = this.removeExtensionPoint(extPoints[i]);
-			if (namespace != null)
-				affectedNamespaces.add(namespace);
-		}
-		return affectedNamespaces;
-	}
-
-	public void removeRegistryChangeListener(IRegistryChangeListener listener) {
-		synchronized (listeners) {
-			listeners.remove(new ListenerInfo(listener, null));
-		}
-	}
-
-	public ExtensionRegistry(RegistryStrategy registryStrategy, Object masterToken, Object userToken) {
-		if (registryStrategy != null)
-			strategy = registryStrategy;
-		else
-			strategy = new RegistryStrategy(null, null);
-
-		this.masterToken = masterToken;
-		this.userToken = userToken;
-		registryObjects = new RegistryObjectManager(this);
-
-		if (strategy.cacheUse()) {
-			// Try to read the registry from the cache first. If that fails, create a new registry
-			long start = 0;
-			if (debug())
-				start = System.currentTimeMillis();
-
-			//The cache is made of several files, find the real names of these other files. If all files are found, try to initialize the objectManager
-			if (checkCache()) {
-				try {
-					theTableReader.setTableFile(cacheStorageManager.lookup(TableReader.TABLE, false));
-					theTableReader.setExtraDataFile(cacheStorageManager.lookup(TableReader.EXTRA, false));
-					theTableReader.setMainDataFile(cacheStorageManager.lookup(TableReader.MAIN, false));
-					theTableReader.setContributionsFile(cacheStorageManager.lookup(TableReader.CONTRIBUTIONS, false));
-					theTableReader.setContributorsFile(cacheStorageManager.lookup(TableReader.CONTRIBUTORS, false));
-					theTableReader.setNamespacesFile(cacheStorageManager.lookup(TableReader.NAMESPACES, false));
-					theTableReader.setOrphansFile(cacheStorageManager.lookup(TableReader.ORPHANS, false));
-					long timestamp = strategy.getContributionsTimestamp();
-					isRegistryFilledFromCache = registryObjects.init(timestamp);
-					if (isRegistryFilledFromCache)
-						aggregatedTimestamp.set(timestamp);
-				} catch (IOException e) {
-					// The registry will be rebuilt from the xml files. Make sure to clear anything filled
-					// from cache so that we won't have partially filled items.
-					isRegistryFilledFromCache = false;
-					clearRegistryCache();
-					log(new Status(IStatus.ERROR, RegistryMessages.OWNER_NAME, 0, RegistryMessages.registry_bad_cache, e));
-				}
-			}
-
-			if (!isRegistryFilledFromCache) {
-				// set cache storage manager to a first writable location
-				for (int index = 0; index < strategy.getLocationsLength(); index++) {
-					if (!strategy.isCacheReadOnly(index)) {
-						setFileManager(strategy.getStorage(index), false);
-						break;
-					}
-				}
-			}
-
-			if (debug() && isRegistryFilledFromCache)
-				System.out.println("Reading registry cache: " + (System.currentTimeMillis() - start)); //$NON-NLS-1$
-
-			if (debug()) {
-				if (!isRegistryFilledFromCache)
-					System.out.println("Reloading registry from manifest files..."); //$NON-NLS-1$
-				else
-					System.out.println("Using registry cache..."); //$NON-NLS-1$
-			}
-		}
-
-		if (debugEvents())
-			addRegistryChangeListener(new IRegistryChangeListener() {
-				public void registryChanged(IRegistryChangeEvent event) {
-					System.out.println(event);
-				}
-			});
-
-		// Do extra start processing if specified in the registry strategy
-		strategy.onStart(this);
-	}
-
-	/**
-	 * Stops the registry. Registry has to be stopped to properly
-	 * close cache and dispose of listeners.
-	 * @param key - key token for this registry
-	 */
-	public void stop(Object key) {
-		// If the registry creator specified a key token, check that the key mathches it 
-		// (it is assumed that registry owner keeps the key to prevent unautorized accesss).
-		if (masterToken != null && masterToken != key) {
-			throw new IllegalArgumentException("Unauthorized access to the ExtensionRegistry.stop() method. Check if proper access token is supplied."); //$NON-NLS-1$  
-		}
-
-		// Do extra stop processing if specified in the registry strategy
-		strategy.onStop(this);
-
-		stopChangeEventScheduler();
-
-		if (cacheStorageManager == null)
-			return;
-
-		if (!registryObjects.isDirty() || cacheStorageManager.isReadOnly()) {
-			cacheStorageManager.close();
-			return;
-		}
-
-		File tableFile = null;
-		File mainFile = null;
-		File extraFile = null;
-		File contributionsFile = null;
-		File contributorsFile = null;
-		File namespacesFile = null;
-		File orphansFile = null;
-
-		TableWriter theTableWriter = new TableWriter(this);
-
-		try {
-			cacheStorageManager.lookup(TableReader.TABLE, true);
-			cacheStorageManager.lookup(TableReader.MAIN, true);
-			cacheStorageManager.lookup(TableReader.EXTRA, true);
-			cacheStorageManager.lookup(TableReader.CONTRIBUTIONS, true);
-			cacheStorageManager.lookup(TableReader.CONTRIBUTORS, true);
-			cacheStorageManager.lookup(TableReader.NAMESPACES, true);
-			cacheStorageManager.lookup(TableReader.ORPHANS, true);
-			tableFile = File.createTempFile(TableReader.TABLE, ".new", cacheStorageManager.getBase()); //$NON-NLS-1$
-			mainFile = File.createTempFile(TableReader.MAIN, ".new", cacheStorageManager.getBase()); //$NON-NLS-1$
-			extraFile = File.createTempFile(TableReader.EXTRA, ".new", cacheStorageManager.getBase()); //$NON-NLS-1$
-			contributionsFile = File.createTempFile(TableReader.CONTRIBUTIONS, ".new", cacheStorageManager.getBase()); //$NON-NLS-1$
-			contributorsFile = File.createTempFile(TableReader.CONTRIBUTORS, ".new", cacheStorageManager.getBase()); //$NON-NLS-1$
-			namespacesFile = File.createTempFile(TableReader.NAMESPACES, ".new", cacheStorageManager.getBase()); //$NON-NLS-1$
-			orphansFile = File.createTempFile(TableReader.ORPHANS, ".new", cacheStorageManager.getBase()); //$NON-NLS-1$
-			theTableWriter.setTableFile(tableFile);
-			theTableWriter.setExtraDataFile(extraFile);
-			theTableWriter.setMainDataFile(mainFile);
-			theTableWriter.setContributionsFile(contributionsFile);
-			theTableWriter.setContributorsFile(contributorsFile);
-			theTableWriter.setNamespacesFile(namespacesFile);
-			theTableWriter.setOrphansFile(orphansFile);
-		} catch (IOException e) {
-			cacheStorageManager.close();
-			return; //Ignore the exception since we can recompute the cache
-		}
-		try {
-			long timestamp;
-			// A bit of backward compatibility: if registry was modified, but timestamp was not,
-			// it means that the new timestamp tracking mechanism was not used. In this case
-			// explicitly obtain timestamps for all contributions. Note that this logic
-			// maintains a problem described in the bug 104267 for contributions that 
-			// don't use the timestamp tracking mechanism.
-			if (aggregatedTimestamp.isModifed())
-				timestamp = aggregatedTimestamp.getContentsTimestamp(); // use timestamp tracking  
-			else
-				timestamp = strategy.getContributionsTimestamp(); // use legacy approach
-
-			if (theTableWriter.saveCache(registryObjects, timestamp))
-				cacheStorageManager.update(new String[] {TableReader.TABLE, TableReader.MAIN, TableReader.EXTRA, TableReader.CONTRIBUTIONS, TableReader.CONTRIBUTORS, TableReader.NAMESPACES, TableReader.ORPHANS}, new String[] {tableFile.getName(), mainFile.getName(), extraFile.getName(), contributionsFile.getName(), contributorsFile.getName(), namespacesFile.getName(), orphansFile.getName()});
-		} catch (IOException e) {
-			//Ignore the exception since we can recompute the cache
-		}
-		theTableReader.close();
-		cacheStorageManager.close();
-	}
-
-	/*
-	 * Clear the registry cache files from the file manager so on next start-up we recompute it.
-	 */
-	public void clearRegistryCache() {
-		String[] keys = new String[] {TableReader.TABLE, TableReader.MAIN, TableReader.EXTRA, TableReader.CONTRIBUTIONS, TableReader.ORPHANS};
-		for (int i = 0; i < keys.length; i++)
-			try {
-				cacheStorageManager.remove(keys[i]);
-			} catch (IOException e) {
-				log(new Status(IStatus.ERROR, RegistryMessages.OWNER_NAME, IStatus.ERROR, RegistryMessages.meta_registryCacheReadProblems, e));
-			}
-		aggregatedTimestamp.reset();
-	}
-
-	/////////////////////////////////////////////////////////////////////////////////////////////////
-	// Registry Object Factory
-	// The factory produces contributions, extension points, extensions, and configuration elements 
-	// to be stored in the extension registry.
-	protected RegistryObjectFactory theRegistryObjectFactory = null;
-
-	// Override to provide domain-specific elements to be stored in the extension registry
-	protected void setElementFactory() {
-		theRegistryObjectFactory = new RegistryObjectFactory(this);
-	}
-
-	// Lazy initialization.
-	public RegistryObjectFactory getElementFactory() {
-		if (theRegistryObjectFactory == null)
-			setElementFactory();
-		return theRegistryObjectFactory;
-	}
-
-	TableReader getTableReader() {
-		return theTableReader;
-	}
-
-	public void log(IStatus status) {
-		strategy.log(status);
-	}
-
-	public String translate(String key, ResourceBundle resources) {
-		return strategy.translate(key, resources);
-	}
-
-	public boolean debug() {
-		return strategy.debug();
-	}
-
-	public boolean debugEvents() {
-		return strategy.debugRegistryEvents();
-	}
-
-	public boolean useLazyCacheLoading() {
-		return strategy.cacheLazyLoading();
-	}
-
-	public long computeState() {
-		return strategy.getContainerTimestamp();
-	}
-
-	// Find the first location that contains a cache table file and set file manager to it.
-	protected boolean checkCache() {
-		for (int index = 0; index < strategy.getLocationsLength(); index++) {
-			File possibleCacheLocation = strategy.getStorage(index);
-			if (possibleCacheLocation == null)
-				break; // bail out on the first null
-			setFileManager(possibleCacheLocation, strategy.isCacheReadOnly(index));
-			if (cacheStorageManager != null) {
-				// check this new location:
-				File cacheFile = null;
-				try {
-					cacheFile = cacheStorageManager.lookup(TableReader.getTestFileName(), false);
-				} catch (IOException e) {
-					//Ignore the exception. The registry will be rebuilt from the xml files.
-				}
-				if (cacheFile != null && cacheFile.isFile())
-					return true; // found the appropriate location
-			}
-		}
-		return false;
-	}
-
-	public boolean filledFromCache() {
-		return isRegistryFilledFromCache;
-	}
-
-	public Object createExecutableExtension(RegistryContributor defaultContributor, String className, String requestedContributorName) throws CoreException {
-		return strategy.createExecutableExtension(defaultContributor, className, requestedContributorName);
-	}
-
-	//////////////////////////////////////////////////////////////////////////////////////////
-	// Registry change events processing
-
-	public IStatus processChangeEvent(Object[] listenerInfos, Map deltas) {
-		MultiStatus result = new MultiStatus(RegistryMessages.OWNER_NAME, IStatus.OK, RegistryMessages.plugin_eventListenerError, null);
-		for (int i = 0; i < listenerInfos.length; i++) {
-			ListenerInfo listenerInfo = (ListenerInfo) listenerInfos[i];
-			if (listenerInfo.filter != null && !deltas.containsKey(listenerInfo.filter))
-				continue;
-			if (listenerInfo.listener instanceof IRegistryChangeListener)
-				((IRegistryChangeListener) listenerInfo.listener).registryChanged(new RegistryChangeEvent(deltas, listenerInfo.filter));
-		}
-		for (Iterator iter = deltas.values().iterator(); iter.hasNext();) {
-			((RegistryDelta) iter.next()).getObjectManager().close();
-		}
-		return result;
-	}
-
-	private RegistryEventThread eventThread = null; // registry event loop
-	private final List queue = new LinkedList(); // stores registry events info
-
-	// Registry events notifications are done on a separate thread in a sequential manner
-	// (first in - first processed)
-	public void scheduleChangeEvent(Object[] listenerInfos, Map deltas) {
-		QueueElement newElement = new QueueElement(listenerInfos, deltas);
-		if (eventThread == null) {
-			eventThread = new RegistryEventThread(this);
-			eventThread.start();
-		}
-		synchronized (queue) {
-			queue.add(newElement);
-			queue.notify();
-		}
-	}
-
-	// The pair of values we store in the event queue
-	private class QueueElement {
-		Object[] listenerInfos;
-		Map deltas;
-
-		QueueElement(Object[] infos, Map deltas) {
-			this.deltas = deltas;
-			listenerInfos = infos;
-		}
-	}
-
-	private class RegistryEventThread extends Thread {
-		private ExtensionRegistry registry;
-
-		public RegistryEventThread(ExtensionRegistry registry) {
-			super("Extension Registry Event Dispatcher"); //$NON-NLS-1$
-			setDaemon(true);
-			this.registry = registry;
-		}
-
-		public void run() {
-			while (true) {
-				QueueElement element;
-				synchronized (queue) {
-					try {
-						while (queue.isEmpty())
-							queue.wait();
-					} catch (InterruptedException e) {
-						return;
-					}
-					element = (QueueElement) queue.remove(0);
-				}
-				registry.processChangeEvent(element.listenerInfos, element.deltas);
-			}
-		}
-	}
-
-	protected void stopChangeEventScheduler() {
-		if (eventThread != null) {
-			synchronized (queue) {
-				eventThread.interrupt();
-				eventThread = null;
-			}
-		}
-	}
-
-	/**
-	 * Access check for add/remove operations:
-	 * - Master key allows all operations 
-	 * - User key allows modifications of non-persisted elements
-	 * 
-	 * @param key key to the registry supplied by the user
-	 * @param persist true if operation affects persisted elements 
-	 * @return true is the key grants read/write access to the registry
-	 */
-	private boolean checkReadWriteAccess(Object key, boolean persist) {
-		if (masterToken == key)
-			return true;
-		if (userToken == key && !persist)
-			return true;
-		return false;
-	}
-
-	public boolean addContribution(InputStream is, IContributor contributor, boolean persist, String contributionName, ResourceBundle translationBundle, Object key, long timestamp) {
-		boolean result = addContribution(is, contributor, persist, contributionName, translationBundle, key);
-		if (timestamp != 0)
-			aggregatedTimestamp.add(timestamp);
-		return result;
-	}
-
-	public boolean addContribution(InputStream is, IContributor contributor, boolean persist, String contributionName, ResourceBundle translationBundle, Object key) {
-		if (!checkReadWriteAccess(key, persist))
-			throw new IllegalArgumentException("Unauthorized access to the ExtensionRegistry.addXMLContribution() method. Check if proper access token is supplied."); //$NON-NLS-1$
-		if (contributionName == null)
-			contributionName = ""; //$NON-NLS-1$
-
-		RegistryContributor internalContributor = (RegistryContributor) contributor;
-		registryObjects.addContributor(internalContributor); // only adds a contributor if it is not already present
-
-		String ownerName = internalContributor.getActualName();
-		String message = NLS.bind(RegistryMessages.parse_problems, ownerName);
-		MultiStatus problems = new MultiStatus(RegistryMessages.OWNER_NAME, ExtensionsParser.PARSE_PROBLEM, message, null);
-		ExtensionsParser parser = new ExtensionsParser(problems, this);
-		Contribution contribution = getElementFactory().createContribution(internalContributor.getActualId(), persist);
-
-		try {
-			parser.parseManifest(strategy.getXMLParser(), new InputSource(is), contributionName, getObjectManager(), contribution, translationBundle);
-			int status = problems.getSeverity();
-			if (status != IStatus.OK) {
-				log(problems);
-				if (status == IStatus.ERROR || status == IStatus.CANCEL)
-					return false;
-			}
-		} catch (ParserConfigurationException e) {
-			logError(ownerName, contributionName, e);
-			return false;
-		} catch (SAXException e) {
-			logError(ownerName, contributionName, e);
-			return false;
-		} catch (IOException e) {
-			logError(ownerName, contributionName, e);
-			return false;
-		} finally {
-			try {
-				is.close();
-			} catch (IOException ioe) {
-				// nothing to do
-			}
-		}
-		add(contribution); // the add() method does synchronization
-		return true;
-	}
-
-	private void logError(String owner, String contributionName, Exception e) {
-		String message = NLS.bind(RegistryMessages.parse_failedParsingManifest, owner + "/" + contributionName); //$NON-NLS-1$
-		log(new Status(IStatus.ERROR, RegistryMessages.OWNER_NAME, 0, message, e));
-	}
-
-	/**
-	 * Adds an extension point to the extension registry.
-	 * <p>
-	 * If the registry is not modifiable, this method is an access controlled method. 
-	 * Proper token should be passed as an argument for non-modifiable registries.
-	 * </p>
-	 * @param identifier Id of the extension point. If non-qualified names is supplied,
-	 * it will be converted internally into a fully qualified name
-	 * @param contributor the contributor of this extension point
-	 * @param persist indicates if contribution should be stored in the registry cache. If false,
-	 * contribution is not persisted in the registry cache and is lost on Eclipse restart
-	 * @param label display string for the extension point
-	 * @param schemaReference reference to the extension point schema. The schema reference 
-	 * is a URL path relative to the plug-in installation URL. May be null
-	 * @param token the key used to check permissions. Two registry keys are set in the registry
-	 * constructor {@link RegistryFactory#createRegistry(org.eclipse.core.runtime.spi.RegistryStrategy, Object, Object)}: 
-	 * master token and a user token. Master token allows all operations; user token 
-	 * allows non-persisted registry elements to be modified.
-	 * @return <code>true</code> if successful, <code>false</code> if a problem was encountered 
-	 * @throws IllegalArgumentException if incorrect token is passed in
-	 */
-	public boolean addExtensionPoint(String identifier, IContributor contributor, boolean persist, String label, String schemaReference, Object token) throws IllegalArgumentException {
-		if (!checkReadWriteAccess(token, persist))
-			throw new IllegalArgumentException("Unauthorized access to the ExtensionRegistry.addExtensionPoint() method. Check if proper access token is supplied."); //$NON-NLS-1$
-
-		RegistryContributor internalContributor = (RegistryContributor) contributor;
-		registryObjects.addContributor(internalContributor); // only adds a contributor if it is not already present
-		String contributorId = internalContributor.getActualId();
-
-		// Extension point Id might not be null
-		if (identifier == null) {
-			String message = NLS.bind(RegistryMessages.create_failedExtensionPoint, label);
-			log(new Status(IStatus.ERROR, RegistryMessages.OWNER_NAME, 0, message, null));
-		}
-		if (schemaReference == null)
-			schemaReference = ""; //$NON-NLS-1$
-
-		// addition wraps in a contribution
-		Contribution contribution = getElementFactory().createContribution(contributorId, persist);
-		ExtensionPoint currentExtPoint = getElementFactory().createExtensionPoint(persist);
-
-		String uniqueId;
-		String namespaceName;
-		int simpleIdStart = identifier.lastIndexOf('.');
-		if (simpleIdStart == -1) {
-			namespaceName = contribution.getDefaultNamespace();
-			uniqueId = namespaceName + '.' + identifier;
-		} else {
-			namespaceName = identifier.substring(0, simpleIdStart);
-			uniqueId = identifier;
-		}
-		currentExtPoint.setUniqueIdentifier(uniqueId);
-		currentExtPoint.setNamespace(namespaceName);
-		String labelNLS = translate(label, null);
-		currentExtPoint.setLabel(labelNLS);
-		currentExtPoint.setSchema(schemaReference);
-
-		if (!getObjectManager().addExtensionPoint(currentExtPoint, true)) {
-			if (debug()) {
-				String msg = NLS.bind(RegistryMessages.parse_duplicateExtensionPoint, uniqueId, contribution.getDefaultNamespace());
-				log(new Status(IStatus.ERROR, RegistryMessages.OWNER_NAME, 0, msg, null));
-			}
-			return false;
-		}
-
-		currentExtPoint.setContributorId(contributorId);
-
-		// array format: {Number of extension points, Number of extensions, Extension Id}
-		int[] contributionChildren = new int[3];
-		// Put the extension points into this namespace
-		contributionChildren[Contribution.EXTENSION_POINT] = 1;
-		contributionChildren[Contribution.EXTENSION] = 0;
-		contributionChildren[Contribution.EXTENSION + 1] = currentExtPoint.getObjectId();
-
-		contribution.setRawChildren(contributionChildren);
-
-		add(contribution);
-		return true;
-	}
-
-	/**
-	 * Adds an extension to the extension registry.
-	 * <p>
-	 * If the registry is not modifiable, this method is an access controlled method. 
-	 * Proper token should be passed as an argument for non-modifiable registries.
-	 * </p>
-	 * @see org.eclipse.core.internal.registry.spi.ConfigurationElementDescription
-	 * 
-	 * @param identifier Id of the extension. If non-qualified name is supplied,
-	 * it will be converted internally into a fully qualified name
-	 * @param contributor the contributor of this extension
-	 * @param persist indicates if contribution should be stored in the registry cache. If false,
-	 * contribution is not persisted in the registry cache and is lost on Eclipse restart
-	 * @param label display string for this extension
-	 * @param extensionPointId Id of the point being extended. If non-qualified
-	 * name is supplied, it is assumed to have the same contributorId as this extension
-	 * @param configurationElements contents of the extension
-	 * @param token the key used to check permissions. Two registry keys are set in the registry
-	 * constructor {@link RegistryFactory#createRegistry(org.eclipse.core.runtime.spi.RegistryStrategy, Object, Object)}: 
-	 * master token and a user token. Master token allows all operations; user token 
-	 * allows non-persisted registry elements to be modified.
-	 * @return <code>true</code> if successful, <code>false</code> if a problem was encountered 
-	 * @throws IllegalArgumentException if incorrect token is passed in
-	 */
-	public boolean addExtension(String identifier, IContributor contributor, boolean persist, String label, String extensionPointId, ConfigurationElementDescription configurationElements, Object token) throws IllegalArgumentException {
-		if (!checkReadWriteAccess(token, persist))
-			throw new IllegalArgumentException("Unauthorized access to the ExtensionRegistry.addExtensionPoint() method. Check if proper access token is supplied."); //$NON-NLS-1$
-		// prepare namespace information
-		RegistryContributor internalContributor = (RegistryContributor) contributor;
-		registryObjects.addContributor(internalContributor); // only adds a contributor if it is not already present
-		String contributorId = internalContributor.getActualId();
-
-		// addition wraps in a contribution
-		Contribution contribution = getElementFactory().createContribution(contributorId, persist);
-		Extension currentExtension = getElementFactory().createExtension(persist);
-
-		String simpleId;
-		String namespaceName;
-		int simpleIdStart = identifier.lastIndexOf('.');
-		if (simpleIdStart != -1) {
-			simpleId = identifier.substring(simpleIdStart + 1);
-			namespaceName = identifier.substring(0, simpleIdStart);
-		} else {
-			simpleId = identifier;
-			namespaceName = contribution.getDefaultNamespace();
-		}
-		currentExtension.setSimpleIdentifier(simpleId);
-		currentExtension.setNamespaceIdentifier(namespaceName);
-
-		String extensionLabelNLS = translate(label, null);
-		currentExtension.setLabel(extensionLabelNLS);
-
-		String targetExtensionPointId;
-		if (extensionPointId.indexOf('.') == -1) // No dots -> namespace name added at the start
-			targetExtensionPointId = contribution.getDefaultNamespace() + '.' + extensionPointId;
-		else
-			targetExtensionPointId = extensionPointId;
-		currentExtension.setExtensionPointIdentifier(targetExtensionPointId);
-
-		// if we have an Id specified, check for duplicates. Only issue warning if duplicate found
-		// as it might still work fine - depending on the access pattern.
-		if (simpleId != null && debug()) {
-			String uniqueId = namespaceName + '.' + simpleId;
-			IExtension existingExtension = getExtension(uniqueId);
-			if (existingExtension != null) {
-				String currentSupplier = contribution.getDefaultNamespace();
-				String existingSupplier = existingExtension.getContributor().getName();
-				String msg = NLS.bind(RegistryMessages.parse_duplicateExtension, new String[] {currentSupplier, existingSupplier, uniqueId});
-				log(new Status(IStatus.WARNING, RegistryMessages.OWNER_NAME, 0, msg, null));
-				return false;
-			}
-		}
-
-		getObjectManager().add(currentExtension, true);
-
-		createExtensionData(contributorId, configurationElements, currentExtension, persist);
-
-		currentExtension.setContributorId(contributorId);
-
-		int[] contributionChildren = new int[3];
-
-		contributionChildren[Contribution.EXTENSION_POINT] = 0;
-		contributionChildren[Contribution.EXTENSION] = 1;
-		contributionChildren[Contribution.EXTENSION + 1] = currentExtension.getObjectId();
-		contribution.setRawChildren(contributionChildren);
-
-		add(contribution);
-		return true;
-	}
-
-	// Fill in the actual content of this extension
-	private void createExtensionData(String contributorId, ConfigurationElementDescription description, RegistryObject parent, boolean persist) {
-		ConfigurationElement currentConfigurationElement = getElementFactory().createConfigurationElement(persist);
-		currentConfigurationElement.setContributorId(contributorId);
-		currentConfigurationElement.setName(description.getName());
-
-		ConfigurationElementAttribute[] descriptionProperties = description.getAttributes();
-
-		if (descriptionProperties != null && descriptionProperties.length != 0) {
-			int len = descriptionProperties.length;
-			String[] properties = new String[len * 2];
-			for (int i = 0; i < len; i++) {
-				properties[i * 2] = descriptionProperties[i].getName();
-				properties[i * 2 + 1] = translate(descriptionProperties[i].getValue(), null);
-			}
-			currentConfigurationElement.setProperties(properties);
-		} else
-			currentConfigurationElement.setProperties(RegistryObjectManager.EMPTY_STRING_ARRAY);
-
-		String value = description.getValue();
-		if (value != null)
-			currentConfigurationElement.setValue(value);
-
-		getObjectManager().add(currentConfigurationElement, true);
-
-		// process children
-		ConfigurationElementDescription[] children = description.getChildren();
-		if (children != null) {
-			for (int i = 0; i < children.length; i++) {
-				createExtensionData(contributorId, children[i], currentConfigurationElement, persist);
-			}
-		}
-
-		int[] oldValues = parent.getRawChildren();
-		int size = oldValues.length;
-		int[] newValues = new int[size + 1];
-		for (int i = 0; i < size; i++) {
-			newValues[i] = oldValues[i];
-		}
-		newValues[size] = currentConfigurationElement.getObjectId();
-		parent.setRawChildren(newValues);
-		currentConfigurationElement.setParentId(parent.getObjectId());
-		currentConfigurationElement.setParentType(parent instanceof ConfigurationElement ? RegistryObjectManager.CONFIGURATION_ELEMENT : RegistryObjectManager.EXTENSION);
-	}
-
-	public boolean removeExtension(IExtension extension, Object token) throws IllegalArgumentException {
-		if (!(extension instanceof ExtensionHandle))
-			return false;
-		return removeObject(((ExtensionHandle) extension).getObject(), false, token);
-	}
-
-	public boolean removeExtensionPoint(IExtensionPoint extensionPoint, Object token) throws IllegalArgumentException {
-		if (!(extensionPoint instanceof ExtensionPointHandle))
-			return false;
-		return removeObject(((ExtensionPointHandle) extensionPoint).getObject(), true, token);
-	}
-
-	private boolean removeObject(RegistryObject registryObject, boolean isExtensionPoint, Object token) {
-		if (!checkReadWriteAccess(token, registryObject.shouldPersist()))
-			throw new IllegalArgumentException("Unauthorized access to the ExtensionRegistry.removeExtension() method. Check if proper access token is supplied."); //$NON-NLS-1$
-		int id = registryObject.getObjectId();
-
-		access.enterWrite();
-		try {
-			String namespace;
-			if (isExtensionPoint)
-				namespace = removeExtensionPoint(id);
-			else
-				namespace = removeExtension(id);
-
-			Map removed = new HashMap(1);
-			removed.put(new Integer(id), registryObject);
-			registryObjects.removeObjects(removed);
-			registryObjects.addNavigableObjects(removed);
-			getDelta(namespace).setObjectManager(registryObjects.createDelegatingObjectManager(removed));
-
-			registryObjects.unlinkChildFromContributions(id);
-			fireRegistryChangeEvent();
-		} finally {
-			access.exitWrite();
-		}
-		return true;
-	}
-
-	/**
-	 * <strong>EXPERIMENTAL</strong>. This method has been added as part of a work in progress. 
-	 * There is a guarantee neither that this API will work nor that it will remain the same. 
-	 * Please do not use this method without consulting with the Equinox team.
-	 */
-	public Object getTemporaryUserToken() {
-		return userToken;
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ExtensionsParser.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ExtensionsParser.java
deleted file mode 100644
index b46d0c9..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ExtensionsParser.java
+++ /dev/null
@@ -1,701 +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.core.internal.registry;
-
-import java.io.IOException;
-import java.util.*;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.SAXParserFactory;
-import org.eclipse.core.runtime.*;
-import org.eclipse.osgi.util.NLS;
-import org.xml.sax.*;
-import org.xml.sax.helpers.DefaultHandler;
-
-public class ExtensionsParser extends DefaultHandler {
-	// Introduced for backward compatibility
-	private final static String NO_EXTENSION_MUNGING = "eclipse.noExtensionMunging"; //$NON-NLS-1$ //System property
-	private static final String VERSION_3_0 = "3.0"; //$NON-NLS-1$
-	private static final String VERSION_3_2 = "3.2"; //$NON-NLS-1$
-	private static Map extensionPointMap;
-
-	static {
-		initializeExtensionPointMap();
-	}
-
-	/**
-	 * Initialize the list of renamed extension point ids
-	 */
-	private static void initializeExtensionPointMap() {
-		Map map = new HashMap(13);
-		map.put("org.eclipse.ui.markerImageProvider", "org.eclipse.ui.ide.markerImageProvider"); //$NON-NLS-1$ //$NON-NLS-2$
-		map.put("org.eclipse.ui.markerHelp", "org.eclipse.ui.ide.markerHelp"); //$NON-NLS-1$ //$NON-NLS-2$
-		map.put("org.eclipse.ui.markerImageProviders", "org.eclipse.ui.ide.markerImageProviders"); //$NON-NLS-1$ //$NON-NLS-2$
-		map.put("org.eclipse.ui.markerResolution", "org.eclipse.ui.ide.markerResolution"); //$NON-NLS-1$ //$NON-NLS-2$
-		map.put("org.eclipse.ui.projectNatureImages", "org.eclipse.ui.ide.projectNatureImages"); //$NON-NLS-1$ //$NON-NLS-2$
-		map.put("org.eclipse.ui.resourceFilters", "org.eclipse.ui.ide.resourceFilters"); //$NON-NLS-1$ //$NON-NLS-2$
-		map.put("org.eclipse.ui.markerUpdaters", "org.eclipse.ui.editors.markerUpdaters"); //$NON-NLS-1$ //$NON-NLS-2$
-		map.put("org.eclipse.ui.documentProviders", "org.eclipse.ui.editors.documentProviders"); //$NON-NLS-1$ //$NON-NLS-2$
-		map.put("org.eclipse.ui.workbench.texteditor.markerAnnotationSpecification", "org.eclipse.ui.editors.markerAnnotationSpecification"); //$NON-NLS-1$ //$NON-NLS-2$
-		map.put("org.eclipse.help.browser", "org.eclipse.help.base.browser"); //$NON-NLS-1$ //$NON-NLS-2$
-		map.put("org.eclipse.help.luceneAnalyzer", "org.eclipse.help.base.luceneAnalyzer"); //$NON-NLS-1$ //$NON-NLS-2$
-		map.put("org.eclipse.help.webapp", "org.eclipse.help.base.webapp"); //$NON-NLS-1$ //$NON-NLS-2$
-		map.put("org.eclipse.help.support", "org.eclipse.ui.helpSupport"); //$NON-NLS-1$ //$NON-NLS-2$
-		extensionPointMap = map;
-	}
-
-	private static long cumulativeTime = 0;
-
-	// is in compatibility mode
-	private boolean compatibilityMode;
-
-	// File name for this extension manifest
-	// This to help with error reporting
-	private String locationName = null;
-
-	// Current State Information
-	private Stack stateStack = new Stack();
-
-	// Current object stack (used to hold the current object we are
-	// populating in this plugin descriptor
-	private Stack objectStack = new Stack();
-
-	private String schemaVersion = null;
-
-	// A status for holding results.
-	private MultiStatus status;
-
-	// Owning extension registry
-	private ExtensionRegistry registry;
-
-	// Resource bundle used to translate the content of the plugin.xml
-	protected ResourceBundle resources;
-
-	// Keep track of the object encountered.
-	private RegistryObjectManager objectManager;
-
-	private Contribution contribution;
-
-	//This keeps tracks of the value of the configuration element in case the value comes in several pieces (see characters()). See as well bug 75592. 
-	private String configurationElementValue;
-
-	/** 
-	 * Status code constant (value 1) indicating a problem in a bundle extensions
-	 * manifest (<code>extensions.xml</code>) file.
-	 */
-	public static final int PARSE_PROBLEM = 1;
-
-	public static final String PLUGIN = "plugin"; //$NON-NLS-1$
-	public static final String PLUGIN_ID = "id"; //$NON-NLS-1$
-	public static final String PLUGIN_NAME = "name"; //$NON-NLS-1$
-	public static final String FRAGMENT = "fragment"; //$NON-NLS-1$	
-	public static final String BUNDLE_UID = "id"; //$NON-NLS-1$
-
-	public static final String EXTENSION_POINT = "extension-point"; //$NON-NLS-1$
-	public static final String EXTENSION_POINT_NAME = "name"; //$NON-NLS-1$
-	public static final String EXTENSION_POINT_ID = "id"; //$NON-NLS-1$
-	public static final String EXTENSION_POINT_SCHEMA = "schema"; //$NON-NLS-1$
-
-	public static final String EXTENSION = "extension"; //$NON-NLS-1$
-	public static final String EXTENSION_NAME = "name"; //$NON-NLS-1$
-	public static final String EXTENSION_ID = "id"; //$NON-NLS-1$
-	public static final String EXTENSION_TARGET = "point"; //$NON-NLS-1$
-
-	public static final String ELEMENT = "element"; //$NON-NLS-1$
-	public static final String ELEMENT_NAME = "name"; //$NON-NLS-1$
-	public static final String ELEMENT_VALUE = "value"; //$NON-NLS-1$
-
-	public static final String PROPERTY = "property"; //$NON-NLS-1$
-	public static final String PROPERTY_NAME = "name"; //$NON-NLS-1$
-	public static final String PROPERTY_VALUE = "value"; //$NON-NLS-1$
-
-	// Valid States
-	private static final int IGNORED_ELEMENT_STATE = 0;
-	private static final int INITIAL_STATE = 1;
-	private static final int BUNDLE_STATE = 2;
-	private static final int BUNDLE_EXTENSION_POINT_STATE = 5;
-	private static final int BUNDLE_EXTENSION_STATE = 6;
-	private static final int CONFIGURATION_ELEMENT_STATE = 10;
-
-	// Keep a group of vectors as a temporary scratch space.  These
-	// vectors will be used to populate arrays in the bundle model
-	// once processing of the XML file is complete.
-	private static final int EXTENSION_POINT_INDEX = 0;
-	private static final int EXTENSION_INDEX = 1;
-	private static final int LAST_INDEX = 1;
-
-	private ArrayList scratchVectors[] = new ArrayList[LAST_INDEX + 1];
-
-	private Locator locator = null;
-
-	// Cache the behavior toggle (true: attempt to extract namespace from qualified IDs)
-	private boolean extractNamespaces = false;
-
-	private ArrayList processedExtensionIds = null;
-
-	public ExtensionsParser(MultiStatus status, ExtensionRegistry registry) {
-		super();
-		this.status = status;
-		this.registry = registry;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.xml.sax.helpers.DefaultHandler#setDocumentLocator(org.xml.sax.Locator)
-	 */
-	public void setDocumentLocator(Locator locator) {
-		this.locator = locator;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.xml.sax.helpers.DefaultHandler#characters(char[], int, int)
-	 */
-	public void characters(char[] ch, int start, int length) {
-		int state = ((Integer) stateStack.peek()).intValue();
-		if (state != CONFIGURATION_ELEMENT_STATE)
-			return;
-		if (state == CONFIGURATION_ELEMENT_STATE) {
-			// Accept character data within an element, is when it is
-			// part of a configuration element (i.e. an element within an EXTENSION element
-			ConfigurationElement currentConfigElement = (ConfigurationElement) objectStack.peek();
-			String value = new String(ch, start, length);
-			if (configurationElementValue == null) {
-				if (value.trim().length() != 0) {
-					configurationElementValue = value;
-				}
-			} else {
-				configurationElementValue = configurationElementValue + value;
-			}
-			if (configurationElementValue != null)
-				currentConfigElement.setValue(translate(configurationElementValue));
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see org.xml.sax.helpers.DefaultHandler#endDocument()
-	 */
-	public void endDocument() {
-		// do nothing
-	}
-
-	/* (non-Javadoc)
-	 * @see org.xml.sax.helpers.DefaultHandler#endElement(java.lang.String, java.lang.String, java.lang.String)
-	 */
-	public void endElement(String uri, String elementName, String qName) {
-		switch (((Integer) stateStack.peek()).intValue()) {
-			case IGNORED_ELEMENT_STATE :
-				stateStack.pop();
-				break;
-			case INITIAL_STATE :
-				// shouldn't get here
-				internalError(NLS.bind(RegistryMessages.parse_internalStack, elementName));
-				break;
-			case BUNDLE_STATE :
-				stateStack.pop();
-
-				ArrayList extensionPoints = scratchVectors[EXTENSION_POINT_INDEX];
-				ArrayList extensions = scratchVectors[EXTENSION_INDEX];
-				int[] namespaceChildren = new int[2 + extensionPoints.size() + extensions.size()];
-				int position = 2;
-				// Put the extension points into this namespace
-				if (extensionPoints.size() > 0) {
-					namespaceChildren[Contribution.EXTENSION_POINT] = extensionPoints.size();
-					for (Iterator iter = extensionPoints.iterator(); iter.hasNext();) {
-						namespaceChildren[position++] = ((RegistryObject) iter.next()).getObjectId();
-					}
-					extensionPoints.clear();
-				}
-
-				// Put the extensions into this namespace too
-				if (extensions.size() > 0) {
-					Extension[] renamedExtensions = fixRenamedExtensionPoints((Extension[]) extensions.toArray(new Extension[extensions.size()]));
-					namespaceChildren[Contribution.EXTENSION] = renamedExtensions.length;
-					for (int i = 0; i < renamedExtensions.length; i++) {
-						namespaceChildren[position++] = renamedExtensions[i].getObjectId();
-					}
-					extensions.clear();
-				}
-				contribution.setRawChildren(namespaceChildren);
-				break;
-			case BUNDLE_EXTENSION_POINT_STATE :
-				if (elementName.equals(EXTENSION_POINT)) {
-					stateStack.pop();
-				}
-				break;
-			case BUNDLE_EXTENSION_STATE :
-				if (elementName.equals(EXTENSION)) {
-					stateStack.pop();
-					// Finish up extension object
-					Extension currentExtension = (Extension) objectStack.pop();
-					if (currentExtension.getNamespaceIdentifier() == null)
-						currentExtension.setNamespaceIdentifier(contribution.getDefaultNamespace());
-					currentExtension.setContributorId(contribution.getContributorId());
-					scratchVectors[EXTENSION_INDEX].add(currentExtension);
-				}
-				break;
-			case CONFIGURATION_ELEMENT_STATE :
-				// We don't care what the element name was
-				stateStack.pop();
-				// Now finish up the configuration element object
-				configurationElementValue = null;
-				ConfigurationElement currentConfigElement = (ConfigurationElement) objectStack.pop();
-
-				String value = currentConfigElement.getValueAsIs();
-				if (value != null) {
-					currentConfigElement.setValue(value.trim());
-				}
-
-				RegistryObject parent = (RegistryObject) objectStack.peek();
-				// Want to add this configuration element to the subelements of an extension
-				int[] oldValues = parent.getRawChildren();
-				int size = oldValues.length;
-				int[] newValues = new int[size + 1];
-				for (int i = 0; i < size; i++) {
-					newValues[i] = oldValues[i];
-				}
-				newValues[size] = currentConfigElement.getObjectId();
-				parent.setRawChildren(newValues);
-				currentConfigElement.setParentId(parent.getObjectId());
-				currentConfigElement.setParentType(parent instanceof ConfigurationElement ? RegistryObjectManager.CONFIGURATION_ELEMENT : RegistryObjectManager.EXTENSION);
-				break;
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see org.xml.sax.helpers.DefaultHandler#error(org.xml.sax.SAXParseException)
-	 */
-	public void error(SAXParseException ex) {
-		logStatus(ex);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.xml.sax.helpers.DefaultHandler#fatalError(org.xml.sax.SAXParseException)
-	 */
-	public void fatalError(SAXParseException ex) throws SAXException {
-		logStatus(ex);
-		throw ex;
-	}
-
-	private void handleExtensionPointState(String elementName) {
-		// We ignore all elements under extension points (if there are any)
-		stateStack.push(new Integer(IGNORED_ELEMENT_STATE));
-		unknownElement(EXTENSION_POINT, elementName);
-	}
-
-	private void handleExtensionState(String elementName, Attributes attributes) {
-		// You need to change the state here even though we will be executing the same
-		// code for ExtensionState and ConfigurationElementState.  We ignore the name
-		// of the element for ConfigurationElements.  When we are wrapping up, we will
-		// want to add each configuration element object to the subElements vector of
-		// its parent configuration element object.  However, the first configuration
-		// element object we created (the last one we pop off the stack) will need to
-		// be added to a vector in the extension object called _configuration.
-		stateStack.push(new Integer(CONFIGURATION_ELEMENT_STATE));
-
-		configurationElementValue = null;
-
-		// create a new Configuration Element and push it onto the object stack
-		ConfigurationElement currentConfigurationElement = registry.getElementFactory().createConfigurationElement(contribution.shouldPersist());
-		currentConfigurationElement.setContributorId(contribution.getContributorId());
-		objectStack.push(currentConfigurationElement);
-		currentConfigurationElement.setName(elementName);
-
-		// Processing the attributes of a configuration element involves creating
-		// a new configuration property for each attribute and populating the configuration
-		// property with the name/value pair of the attribute.  Note there will be one
-		// configuration property for each attribute
-		parseConfigurationElementAttributes(attributes);
-		objectManager.add(currentConfigurationElement, true);
-	}
-
-	private void handleInitialState(String elementName, Attributes attributes) {
-		// new manifests should have the plugin (or fragment) element empty
-		// in compatibility mode, any extraneous elements will be silently ignored
-		compatibilityMode = attributes.getLength() > 0;
-		stateStack.push(new Integer(BUNDLE_STATE));
-		objectStack.push(contribution);
-	}
-
-	private void handleBundleState(String elementName, Attributes attributes) {
-		if (elementName.equals(EXTENSION_POINT)) {
-			stateStack.push(new Integer(BUNDLE_EXTENSION_POINT_STATE));
-			parseExtensionPointAttributes(attributes);
-			return;
-		}
-		if (elementName.equals(EXTENSION)) {
-			stateStack.push(new Integer(BUNDLE_EXTENSION_STATE));
-			parseExtensionAttributes(attributes);
-			return;
-		}
-
-		// If we get to this point, the element name is one we don't currently accept.
-		// Set the state to indicate that this element will be ignored
-		stateStack.push(new Integer(IGNORED_ELEMENT_STATE));
-		if (!compatibilityMode)
-			unknownElement(PLUGIN, elementName);
-	}
-
-	private void logStatus(SAXParseException ex) {
-		String name = ex.getSystemId();
-		if (name == null)
-			name = locationName;
-		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(RegistryMessages.parse_error, ex.getMessage());
-		else
-			msg = NLS.bind(RegistryMessages.parse_errorNameLineColumn, (new Object[] {name, Integer.toString(ex.getLineNumber()), Integer.toString(ex.getColumnNumber()), ex.getMessage()}));
-		error(new Status(IStatus.WARNING, RegistryMessages.OWNER_NAME, PARSE_PROBLEM, msg, ex));
-	}
-
-	public Contribution parseManifest(SAXParserFactory factory, InputSource in, String manifestName, RegistryObjectManager registryObjects, Contribution currentNamespace, ResourceBundle bundle) throws ParserConfigurationException, SAXException, IOException {
-		long start = 0;
-		this.resources = bundle;
-		this.objectManager = registryObjects;
-		//initialize the parser with this object
-		this.contribution = currentNamespace;
-		if (registry.debug())
-			start = System.currentTimeMillis();
-
-		if (factory == null)
-			throw new SAXException(RegistryMessages.parse_xmlParserNotAvailable);
-
-		try {
-			locationName = in.getSystemId();
-			if (locationName == null)
-				locationName = manifestName;
-			factory.setNamespaceAware(true);
-			try {
-				factory.setFeature("http://xml.org/sax/features/string-interning", true); //$NON-NLS-1$
-			} catch (SAXException se) {
-				// ignore; we can still operate without string-interning
-			}
-			factory.setValidating(false);
-			factory.newSAXParser().parse(in, this);
-			return (Contribution) objectStack.pop();
-		} finally {
-			if (registry.debug()) {
-				cumulativeTime = cumulativeTime + (System.currentTimeMillis() - start);
-				System.out.println("Cumulative parse time so far : " + cumulativeTime); //$NON-NLS-1$
-			}
-		}
-	}
-
-	private void parseConfigurationElementAttributes(Attributes attributes) {
-		ConfigurationElement parentConfigurationElement = (ConfigurationElement) objectStack.peek();
-
-		// process attributes
-		int len = (attributes != null) ? attributes.getLength() : 0;
-		if (len == 0) {
-			parentConfigurationElement.setProperties(RegistryObjectManager.EMPTY_STRING_ARRAY);
-			return;
-		}
-		String[] properties = new String[len * 2];
-		for (int i = 0; i < len; i++) {
-			properties[i * 2] = attributes.getLocalName(i);
-			properties[i * 2 + 1] = translate(attributes.getValue(i));
-		}
-		parentConfigurationElement.setProperties(properties);
-		properties = null;
-	}
-
-	private void parseExtensionAttributes(Attributes attributes) {
-		Extension currentExtension = registry.getElementFactory().createExtension(contribution.shouldPersist());
-		objectStack.push(currentExtension);
-
-		String simpleId = null;
-		String namespaceName = null;
-		// Process Attributes
-		int len = (attributes != null) ? attributes.getLength() : 0;
-		for (int i = 0; i < len; i++) {
-			String attrName = attributes.getLocalName(i);
-			String attrValue = attributes.getValue(i).trim();
-
-			if (attrName.equals(EXTENSION_NAME))
-				currentExtension.setLabel(translate(attrValue));
-			else if (attrName.equals(EXTENSION_ID)) {
-				int simpleIdStart = attrValue.lastIndexOf('.');
-				if ((simpleIdStart != -1) && extractNamespaces) {
-					simpleId = attrValue.substring(simpleIdStart + 1);
-					namespaceName = attrValue.substring(0, simpleIdStart);
-				} else {
-					simpleId = attrValue;
-					namespaceName = contribution.getDefaultNamespace();
-				}
-				currentExtension.setSimpleIdentifier(simpleId);
-				currentExtension.setNamespaceIdentifier(namespaceName);
-			} else if (attrName.equals(EXTENSION_TARGET)) {
-				// check if point is specified as a simple or qualified name
-				String targetName;
-				if (attrValue.lastIndexOf('.') == -1) {
-					String baseId = contribution.getDefaultNamespace();
-					targetName = baseId + '.' + attrValue;
-				} else
-					targetName = attrValue;
-				currentExtension.setExtensionPointIdentifier(targetName);
-			} else
-				unknownAttribute(EXTENSION, attrName);
-		}
-		if (currentExtension.getExtensionPointIdentifier() == null) {
-			missingAttribute(EXTENSION_TARGET, EXTENSION);
-			stateStack.pop();
-			stateStack.push(new Integer(IGNORED_ELEMENT_STATE));
-			objectStack.pop();
-			return;
-		}
-		// if we have an Id specified, check for duplicates. Only issue warning (not error) if duplicate found
-		// as it might still work fine - depending on the access pattern.
-		if (simpleId != null && registry.debug()) {
-			String uniqueId = namespaceName + '.' + simpleId;
-			IExtension existingExtension = registry.getExtension(uniqueId);
-			if (existingExtension != null) {
-				String currentSupplier = contribution.getDefaultNamespace();
-				String existingSupplier = existingExtension.getContributor().getName();
-				String msg = NLS.bind(RegistryMessages.parse_duplicateExtension, new String[] {currentSupplier, existingSupplier, uniqueId});
-				registry.log(new Status(IStatus.WARNING, RegistryMessages.OWNER_NAME, 0, msg, null));
-			} else if (processedExtensionIds != null) { // check elements in this contribution 
-				for (Iterator i = processedExtensionIds.iterator(); i.hasNext();) {
-					if (uniqueId.equals(i.next())) {
-						String currentSupplier = contribution.getDefaultNamespace();
-						String existingSupplier = currentSupplier;
-						String msg = NLS.bind(RegistryMessages.parse_duplicateExtension, new String[] {currentSupplier, existingSupplier, uniqueId});
-						registry.log(new Status(IStatus.WARNING, RegistryMessages.OWNER_NAME, 0, msg, null));
-						break;
-					}
-				}
-			}
-			if (processedExtensionIds == null)
-				processedExtensionIds = new ArrayList(10);
-			processedExtensionIds.add(uniqueId);
-		}
-
-		objectManager.add(currentExtension, true);
-	}
-
-	//todo: Are all three methods needed??
-	private void missingAttribute(String attribute, String element) {
-		if (locator == null)
-			internalError(NLS.bind(RegistryMessages.parse_missingAttribute, attribute, element));
-		else
-			internalError(NLS.bind(RegistryMessages.parse_missingAttributeLine, (new String[] {attribute, element, Integer.toString(locator.getLineNumber())})));
-	}
-
-	private void unknownAttribute(String attribute, String element) {
-		if (locator == null)
-			internalError(NLS.bind(RegistryMessages.parse_unknownAttribute, attribute, element));
-		else
-			internalError(NLS.bind(RegistryMessages.parse_unknownAttributeLine, (new String[] {attribute, element, Integer.toString(locator.getLineNumber())})));
-	}
-
-	private void unknownElement(String parent, String element) {
-		if (locator == null)
-			internalError(NLS.bind(RegistryMessages.parse_unknownElement, element, parent));
-		else
-			internalError(NLS.bind(RegistryMessages.parse_unknownElementLine, (new String[] {element, parent, Integer.toString(locator.getLineNumber())})));
-	}
-
-	private void parseExtensionPointAttributes(Attributes attributes) {
-		ExtensionPoint currentExtPoint = registry.getElementFactory().createExtensionPoint(contribution.shouldPersist());
-
-		// Process Attributes
-		int len = (attributes != null) ? attributes.getLength() : 0;
-		for (int i = 0; i < len; i++) {
-			String attrName = attributes.getLocalName(i);
-			String attrValue = attributes.getValue(i).trim();
-
-			if (attrName.equals(EXTENSION_POINT_NAME))
-				currentExtPoint.setLabel(translate(attrValue));
-			else if (attrName.equals(EXTENSION_POINT_ID)) {
-				String uniqueId;
-				String namespaceName;
-				int simpleIdStart = attrValue.lastIndexOf('.');
-				if (simpleIdStart != -1 && extractNamespaces) {
-					namespaceName = attrValue.substring(0, simpleIdStart);
-					uniqueId = attrValue;
-				} else {
-					namespaceName = contribution.getDefaultNamespace();
-					uniqueId = namespaceName + '.' + attrValue;
-				}
-				currentExtPoint.setUniqueIdentifier(uniqueId);
-				currentExtPoint.setNamespace(namespaceName);
-
-			} else if (attrName.equals(EXTENSION_POINT_SCHEMA))
-				currentExtPoint.setSchema(attrValue);
-			else
-				unknownAttribute(EXTENSION_POINT, attrName);
-		}
-		if (currentExtPoint.getSimpleIdentifier() == null || currentExtPoint.getLabel() == null) {
-			String attribute = currentExtPoint.getSimpleIdentifier() == null ? EXTENSION_POINT_ID : EXTENSION_POINT_NAME;
-			missingAttribute(attribute, EXTENSION_POINT);
-			stateStack.pop();
-			stateStack.push(new Integer(IGNORED_ELEMENT_STATE));
-			return;
-		}
-		if (!objectManager.addExtensionPoint(currentExtPoint, true)) {
-			// avoid adding extension point second time as it might cause 
-			// extensions associated with the existing extension point to 
-			// become inaccessible.
-			if (registry.debug()) {
-				String msg = NLS.bind(RegistryMessages.parse_duplicateExtensionPoint, currentExtPoint.getUniqueIdentifier(), contribution.getDefaultNamespace());
-				registry.log(new Status(IStatus.ERROR, RegistryMessages.OWNER_NAME, 0, msg, null));
-			}
-			stateStack.pop();
-			stateStack.push(new Integer(IGNORED_ELEMENT_STATE));
-			return;
-		}
-		if (currentExtPoint.getNamespace() == null)
-			currentExtPoint.setNamespace(contribution.getDefaultNamespace());
-		currentExtPoint.setContributorId(contribution.getContributorId());
-
-		// Now populate the the vector just below us on the objectStack with this extension point
-		scratchVectors[EXTENSION_POINT_INDEX].add(currentExtPoint);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.xml.sax.helpers.DefaultHandler#startDocument()
-	 */
-	public void startDocument() {
-		stateStack.push(new Integer(INITIAL_STATE));
-		for (int i = 0; i <= LAST_INDEX; i++) {
-			scratchVectors[i] = new ArrayList();
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see org.xml.sax.helpers.DefaultHandler#startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes)
-	 */
-	public void startElement(String uri, String elementName, String qName, Attributes attributes) {
-		switch (((Integer) stateStack.peek()).intValue()) {
-			case INITIAL_STATE :
-				handleInitialState(elementName, attributes);
-				break;
-			case BUNDLE_STATE :
-				handleBundleState(elementName, attributes);
-				break;
-			case BUNDLE_EXTENSION_POINT_STATE :
-				handleExtensionPointState(elementName);
-				break;
-			case BUNDLE_EXTENSION_STATE :
-			case CONFIGURATION_ELEMENT_STATE :
-				handleExtensionState(elementName, attributes);
-				break;
-			default :
-				stateStack.push(new Integer(IGNORED_ELEMENT_STATE));
-				if (!compatibilityMode)
-					internalError(NLS.bind(RegistryMessages.parse_unknownTopElement, elementName));
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see org.xml.sax.helpers.DefaultHandler#warning(org.xml.sax.SAXParseException)
-	 */
-	public void warning(SAXParseException ex) {
-		logStatus(ex);
-	}
-
-	private void internalError(String message) {
-		error(new Status(IStatus.WARNING, RegistryMessages.OWNER_NAME, PARSE_PROBLEM, message, null));
-	}
-
-	/* (non-Javadoc)
-	 * @see org.xml.sax.ContentHandler#processingInstruction
-	 * @since 3.0
-	 */
-	public void processingInstruction(String target, 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 transformations).
-		if (target.equalsIgnoreCase("eclipse")) { //$NON-NLS-1$
-			// just the presence of this processing instruction indicates that this
-			// plug-in is at least 3.0
-			schemaVersion = VERSION_3_0;
-			StringTokenizer tokenizer = new StringTokenizer(data, "=\""); //$NON-NLS-1$
-			while (tokenizer.hasMoreTokens()) {
-				String token = tokenizer.nextToken();
-				if (token.equalsIgnoreCase("version")) { //$NON-NLS-1$
-					if (!tokenizer.hasMoreTokens()) {
-						break;
-					}
-					schemaVersion = tokenizer.nextToken();
-					break;
-				}
-			}
-			initializeExtractNamespace();
-		}
-	}
-
-	/**
-	 * 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
-	 */
-	public void error(IStatus error) {
-		status.add(error);
-	}
-
-	protected String translate(String key) {
-		return registry.translate(key, resources);
-	}
-
-	/**
-	 * Fixes up the extension declarations in the given pre-3.0 plug-in or fragment to compensate
-	 * for extension points that were renamed between release 2.1 and 3.0.
-	 */
-	private Extension[] fixRenamedExtensionPoints(Extension[] extensions) {
-		if (extensions == null || versionAtLeast(VERSION_3_0) || RegistryProperties.getProperty(NO_EXTENSION_MUNGING) != null)
-			return extensions;
-		for (int i = 0; i < extensions.length; i++) {
-			Extension extension = extensions[i];
-			String oldPointId = extension.getExtensionPointIdentifier();
-			String newPointId = (String) extensionPointMap.get(oldPointId);
-			if (newPointId != null) {
-				extension.setExtensionPointIdentifier(newPointId);
-			}
-		}
-		return extensions;
-	}
-
-	/**
-	 * To preserve backward compatibility, we will only attempt to extract namespace form the name 
-	 * if Eclipse version specified in the plugin.xml (<?eclipse version="3.2"?>) is at least 3.2.
-	 */
-	private void initializeExtractNamespace() {
-		extractNamespaces = new Boolean(versionAtLeast(VERSION_3_2)).booleanValue();
-	}
-
-	/**
-	 * Makes sense only for plugin.xml versions >= 3.0 (Eclipse version was introduced in 3.0).
-	 * Assumes that version is stored as "X1.X2.....XN" where X1 is a major version; X2 is a minor version
-	 * and so on.
-	 */
-	private boolean versionAtLeast(String testVersion) {
-		if (schemaVersion == null)
-			return false;
-
-		StringTokenizer testVersionTokenizer = new StringTokenizer(testVersion, "."); //$NON-NLS-1$
-		StringTokenizer schemaVersionTokenizer = new StringTokenizer(schemaVersion, "."); //$NON-NLS-1$
-		while (testVersionTokenizer.hasMoreTokens() && schemaVersionTokenizer.hasMoreTokens()) {
-			try {
-				if (Integer.parseInt(schemaVersionTokenizer.nextToken()) < Integer.parseInt(testVersionTokenizer.nextToken()))
-					return false;
-			} catch (NumberFormatException e) {
-				return false;
-			}
-		}
-		return true;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/Handle.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/Handle.java
deleted file mode 100644
index 35c1f72..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/Handle.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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.registry;
-
-import org.eclipse.core.runtime.InvalidRegistryObjectException;
-
-/**
- * A handle is the super class to all registry objects that are now served to users.
- * The handles never hold on to any "real" content of the object being represented.
- * A handle can become stale if its referenced object has been removed from the registry.
- * @since 3.1. 
- */
-public abstract class Handle {
-	protected IObjectManager objectManager;
-
-	private int objectId;
-
-	protected int getId() {
-		return objectId;
-	}
-
-	Handle(IObjectManager objectManager, int value) {
-		objectId = value;
-		this.objectManager = objectManager;
-	}
-
-	/**
-	 * Return the actual object corresponding to this handle.
-	 * @throws InvalidRegistryObjectException when the handle is stale.
-	 */
-	abstract RegistryObject getObject();
-
-	public boolean equals(Object object) {
-		if (object instanceof Handle) {
-			return objectId == ((Handle) object).objectId;
-		}
-		return false;
-	}
-
-	public int hashCode() {
-		return objectId;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/HashtableOfInt.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/HashtableOfInt.java
deleted file mode 100644
index 877611b..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/HashtableOfInt.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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.registry;
-
-import java.io.*;
-
-/**
- *	Hashtable for non-zero int keys.
- */
-
-public final class HashtableOfInt {
-	private int[] keyTable;
-	private int[] valueTable;
-	private static final float GROWTH_FACTOR = 1.33f;
-
-	private int elementSize; // number of elements in the table
-	private int threshold;
-
-	public HashtableOfInt() {
-		this(13);
-	}
-
-	public HashtableOfInt(int size) {
-		this.elementSize = 0;
-		this.threshold = size; // size represents the expected number of elements
-		int extraRoom = (int) (size * 1.33f);
-		if (this.threshold == extraRoom)
-			extraRoom++;
-		this.keyTable = new int[extraRoom];
-		this.valueTable = new int[extraRoom];
-	}
-
-	public boolean containsKey(int key) {
-		int index = key % valueTable.length;
-		int currentKey;
-		while ((currentKey = keyTable[index]) != 0) {
-			if (currentKey == key)
-				return true;
-			index = (index + 1) % keyTable.length;
-		}
-		return false;
-	}
-
-	public int get(int key) {
-		int index = key % valueTable.length;
-		int currentKey;
-		while ((currentKey = keyTable[index]) != 0) {
-			if (currentKey == key)
-				return valueTable[index];
-			index = (index + 1) % keyTable.length;
-		}
-		return Integer.MIN_VALUE;
-	}
-
-	public int removeKey(int key) {
-		int index = key % valueTable.length;
-		int currentKey;
-		while ((currentKey = keyTable[index]) != 0) {
-			if (currentKey == key) {
-				return valueTable[index];
-			}
-			index = (index + 1) % keyTable.length;
-		}
-		return Integer.MIN_VALUE;
-	}
-
-	public int put(int key, int value) {
-		int index = key % valueTable.length;
-		int currentKey;
-		while ((currentKey = keyTable[index]) != 0) {
-			if (currentKey == key)
-				return valueTable[index] = value;
-			index = (index + 1) % keyTable.length;
-		}
-		keyTable[index] = key;
-		valueTable[index] = value;
-
-		// assumes the threshold is never equal to the size of the table
-		if (++elementSize > threshold)
-			rehash();
-		return value;
-	}
-
-	private void rehash() {
-		HashtableOfInt newHashtable = new HashtableOfInt((int) (elementSize * GROWTH_FACTOR)); // double the number of expected elements
-		int currentKey;
-		for (int i = keyTable.length; --i >= 0;)
-			if ((currentKey = keyTable[i]) != 0)
-				newHashtable.put(currentKey, valueTable[i]);
-
-		this.keyTable = newHashtable.keyTable;
-		this.valueTable = newHashtable.valueTable;
-		this.threshold = newHashtable.threshold;
-	}
-
-	public int size() {
-		return elementSize;
-	}
-
-	public String toString() {
-		String s = ""; //$NON-NLS-1$
-		int object;
-		for (int i = 0, length = valueTable.length; i < length; i++)
-			if ((object = valueTable[i]) != Integer.MIN_VALUE)
-				s += keyTable[i] + " -> " + object + "\n"; //$NON-NLS-2$ //$NON-NLS-1$
-		return s;
-	}
-
-	public void save(DataOutputStream out) throws IOException {
-		out.writeInt(elementSize);
-		int tableSize = keyTable.length;
-		out.writeInt(tableSize);
-		out.writeInt(threshold);
-		for (int i = 0; i < tableSize; i++) {
-			out.writeInt(keyTable[i]);
-			out.writeInt(valueTable[i]);
-		}
-	}
-
-	public void load(DataInputStream in) throws IOException {
-		elementSize = in.readInt();
-		int tableSize = in.readInt();
-		threshold = in.readInt();
-		boolean fastMode = true;
-		if (((double) tableSize / elementSize) < GROWTH_FACTOR) {
-			keyTable = new int[(int) (elementSize * GROWTH_FACTOR)];
-			valueTable = new int[(int) (elementSize * GROWTH_FACTOR)];
-			elementSize = 0;
-			fastMode = false;
-		} else {
-			keyTable = new int[tableSize];
-			valueTable = new int[tableSize];
-		}
-		for (int i = 0; i < tableSize; i++) {
-			int key = in.readInt();
-			int value = in.readInt();
-			if (fastMode) {
-				keyTable[i] = key;
-				valueTable[i] = value;
-			} else {
-				put(key, value);
-			}
-		}
-	}
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/HashtableOfStringAndInt.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/HashtableOfStringAndInt.java
deleted file mode 100644
index d0e4f7a..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/HashtableOfStringAndInt.java
+++ /dev/null
@@ -1,224 +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.core.internal.registry;
-
-import java.io.*;
-
-/**
- * Hashtable of {String --> int }
- */
-public final class HashtableOfStringAndInt implements Cloneable {
-	public static final int MISSING_ELEMENT = Integer.MIN_VALUE;
-
-	// to avoid using Enumerations, walk the individual tables skipping nulls
-	private String keyTable[];
-	private int valueTable[];
-
-	private int elementSize; // number of elements in the table
-	private int threshold;
-	private static final float GROWTH_FACTOR = 1.33f;
-
-	public HashtableOfStringAndInt() {
-		this(13);
-	}
-
-	public HashtableOfStringAndInt(int size) {
-		this.elementSize = 0;
-		this.threshold = size; // size represents the expected number of elements
-		int extraRoom = (int) (size * 1.75f);
-		if (this.threshold == extraRoom)
-			extraRoom++;
-		this.keyTable = new String[extraRoom];
-		this.valueTable = new int[extraRoom];
-	}
-
-	public Object clone() throws CloneNotSupportedException {
-		throw new CloneNotSupportedException();
-		//		HashtableOfStringAndInt result = (HashtableOfStringAndInt) super.clone();
-		//		result.elementSize = this.elementSize;
-		//		result.threshold = this.threshold;
-		//
-		//		int length = this.keyTable.length;
-		//		result.keyTable = new char[length][];
-		//		System.arraycopy(this.keyTable, 0, result.keyTable, 0, length);
-		//
-		//		length = this.valueTable.length;
-		//		result.valueTable = new Object[length];
-		//		System.arraycopy(this.valueTable, 0, result.valueTable, 0, length);
-		//		return result;
-	}
-
-	public boolean containsKey(String key) {
-		int index = (key.hashCode() & 0x7FFFFFFF) % valueTable.length;
-		int keyLength = key.length();
-		String currentKey;
-		while ((currentKey = keyTable[index]) != null) {
-			if (currentKey.length() == keyLength && currentKey.equals(key))
-				return true;
-			index = (index + 1) % keyTable.length;
-		}
-		return false;
-	}
-
-	public int get(String key) {
-		int index = (key.hashCode() & 0x7FFFFFFF) % valueTable.length;
-		int keyLength = key.length();
-		String currentKey;
-		while ((currentKey = keyTable[index]) != null) {
-			if (currentKey.length() == keyLength && currentKey.equals(key))
-				return valueTable[index];
-			index = (index + 1) % keyTable.length;
-		}
-		return MISSING_ELEMENT;
-	}
-
-	public int put(String key, int value) {
-		int index = (key.hashCode() & 0x7FFFFFFF) % valueTable.length;
-		int keyLength = key.length();
-		String currentKey;
-		while ((currentKey = keyTable[index]) != null) {
-			if (currentKey.length() == keyLength && currentKey.equals(key))
-				return valueTable[index] = value;
-			index = (index + 1) % keyTable.length;
-		}
-		keyTable[index] = key;
-		valueTable[index] = value;
-
-		// assumes the threshold is never equal to the size of the table
-		if (++elementSize > threshold)
-			rehash();
-		return value;
-	}
-
-	public int removeKey(String key) {
-		int index = (key.hashCode() & 0x7FFFFFFF) % valueTable.length;
-		int keyLength = key.length();
-		String currentKey;
-		while ((currentKey = keyTable[index]) != null) {
-			if (currentKey.length() == keyLength && currentKey.equals(key)) {
-				int value = valueTable[index];
-				elementSize--;
-				keyTable[index] = null;
-				valueTable[index] = MISSING_ELEMENT;
-				rehash();
-				return value;
-			}
-			index = (index + 1) % keyTable.length;
-		}
-		return MISSING_ELEMENT;
-	}
-
-	private void rehash() {
-		HashtableOfStringAndInt newHashtable = new HashtableOfStringAndInt((int) (elementSize * GROWTH_FACTOR));
-		String currentKey;
-		for (int i = keyTable.length; --i >= 0;)
-			if ((currentKey = keyTable[i]) != null)
-				newHashtable.put(currentKey, valueTable[i]);
-
-		this.keyTable = newHashtable.keyTable;
-		this.valueTable = newHashtable.valueTable;
-		this.threshold = newHashtable.threshold;
-	}
-
-	public int size() {
-		return elementSize;
-	}
-
-	public String toString() {
-		String s = ""; //$NON-NLS-1$
-		int object;
-		for (int i = 0, length = valueTable.length; i < length; i++)
-			if ((object = valueTable[i]) != MISSING_ELEMENT)
-				s += new String(keyTable[i]) + " -> " + object + "\n"; //$NON-NLS-2$ //$NON-NLS-1$
-		return s;
-	}
-
-	public int[] getValues() {
-		int keyTableLength = keyTable.length;
-		int[] result = new int[size()];
-		int j = 0;
-		for (int i = 0; i < keyTableLength; i++) {
-			if (keyTable[i] != null)
-				result[j++] = valueTable[i];
-		}
-		return result;
-	}
-
-	public void save(DataOutputStream out) throws IOException {
-		out.writeInt(elementSize);
-		int tableSize = keyTable.length;
-		out.writeInt(tableSize);
-		out.writeInt(threshold);
-		for (int i = 0; i < tableSize; i++) {
-			writeStringOrNull(keyTable[i], out);
-			out.writeInt(valueTable[i]);
-		}
-	}
-	
-	/**
-	 * Filtered save: outputs only elements with values not in the excluded list.
-	 */
-	public void save(DataOutputStream out, RegistryObjectManager objectManager) throws IOException {
-		HashtableOfStringAndInt filteredHashtable = new HashtableOfStringAndInt((int) (elementSize * GROWTH_FACTOR));
-		String currentKey;
-		for (int i = keyTable.length; --i >= 0;)
-			if ((currentKey = keyTable[i]) != null && objectManager.shouldPersist(valueTable[i]))
-				filteredHashtable.put(currentKey, valueTable[i]);
-		filteredHashtable.save(out);
-	}
-
-	public void load(DataInputStream in) throws IOException {
-		elementSize = in.readInt();
-		int tableSize = in.readInt();
-		threshold = in.readInt();
-		boolean fastMode = true;
-		if (((double) tableSize / elementSize) < GROWTH_FACTOR) {
-			keyTable = new String[(int) (elementSize * GROWTH_FACTOR)];
-			valueTable = new int[(int) (elementSize * GROWTH_FACTOR)];
-			elementSize = 0;
-			fastMode = false;
-		} else {
-			keyTable = new String[tableSize];
-			valueTable = new int[tableSize];
-		}
-		for (int i = 0; i < tableSize; i++) {
-			String key = readStringOrNull(in);
-			int value = in.readInt();
-			if (fastMode) {
-				keyTable[i] = key;
-				valueTable[i] = value;
-			} else {
-				if (key != null)
-					put(key, value);
-			}
-		}
-	}
-
-	private static final byte NULL = 0;
-	private static final byte OBJECT = 1;
-
-	private void writeStringOrNull(String string, DataOutputStream out) throws IOException {
-		if (string == null)
-			out.writeByte(NULL);
-		else {
-			out.writeByte(OBJECT);
-			out.writeUTF(string);
-		}
-	}
-
-	private String readStringOrNull(DataInputStream in) throws IOException {
-		byte type = in.readByte();
-		if (type == NULL)
-			return null;
-		return in.readUTF();
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/IObjectManager.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/IObjectManager.java
deleted file mode 100644
index 9624b25..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/IObjectManager.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*******************************************************************************
- * 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
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.core.internal.registry;
-
-/**
- * @since 3.1 
- */
-public interface IObjectManager {
-	Handle getHandle(int id, byte type);
-
-	Handle[] getHandles(int[] ids, byte type);
-
-	Object getObject(int id, byte type);
-
-	RegistryObject[] getObjects(int[] values, byte type);
-
-	void close();
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/IRegistryConstants.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/IRegistryConstants.java
deleted file mode 100644
index a8d2004..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/IRegistryConstants.java
+++ /dev/null
@@ -1,41 +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.core.internal.registry;
-
-public interface IRegistryConstants {
-
-	/**
-	 * The unique identifier constant (value "<code>org.eclipse.core.runtime</code>")
-	 * of the Core Runtime (pseudo-) plug-in.
-	 */
-	public static final String RUNTIME_NAME = "org.eclipse.core.runtime"; //$NON-NLS-1$
-
-	// command line options
-	public static final String NO_REGISTRY_CACHE = "-noregistrycache"; //$NON-NLS-1$	
-	public static final String NO_LAZY_REGISTRY_CACHE_LOADING = "-noLazyRegistryCacheLoading"; //$NON-NLS-1$		
-
-	// System options
-	public static final String PROP_NO_LAZY_CACHE_LOADING = "eclipse.noLazyRegistryCacheLoading"; //$NON-NLS-1$
-	public static final String PROP_CHECK_CONFIG = "osgi.checkConfiguration"; //$NON-NLS-1$
-	public static final String PROP_NO_REGISTRY_CACHE = "eclipse.noRegistryCache"; //$NON-NLS-1$
-	public static final String PROP_DEFAULT_REGISTRY = "eclipse.createRegistry"; //$NON-NLS-1$
-	public static final String PROP_REGISTRY_NULL_USER_TOKEN = "eclipse.registry.nulltoken"; //$NON-NLS-1$
-
-	// OSGI system properties
-	public static final String PROP_NL = "osgi.nl"; //$NON-NLS-1$
-	public static final String PROP_OS = "osgi.os"; //$NON-NLS-1$
-	public static final String PROP_WS = "osgi.ws"; //$NON-NLS-1$
-
-	/**
-	 * Specific error code supplied to the Status objects 
-	 */
-	static final int PLUGIN_ERROR = 1;
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/KeyedElement.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/KeyedElement.java
deleted file mode 100644
index 0cb9fab..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/KeyedElement.java
+++ /dev/null
@@ -1,19 +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.core.internal.registry;
-
-public interface KeyedElement {
-	public int getKeyHashCode();
-
-	public boolean compare(KeyedElement other);
-
-	public Object getKey();
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/KeyedHashSet.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/KeyedHashSet.java
deleted file mode 100644
index 0e0c579..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/KeyedHashSet.java
+++ /dev/null
@@ -1,316 +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.core.internal.registry;
-
-/**
- * Note this is a copy of a data structure from OSGi, package
- * org.eclipse.osgi.framework.internal.core.  Unused methods were removed
- * from this copy.
- */
-public class KeyedHashSet {
-	protected static final int MINIMUM_SIZE = 7;
-	private int capacity;
-	protected int elementCount = 0;
-	protected KeyedElement[] elements;
-	protected boolean replace;
-
-	public KeyedHashSet() {
-		this(MINIMUM_SIZE, true);
-	}
-
-	public KeyedHashSet(int capacity) {
-		this(capacity, true);
-	}
-
-	public KeyedHashSet(int capacity, boolean replace) {
-		elements = new KeyedElement[Math.max(MINIMUM_SIZE, capacity * 2)];
-		this.replace = replace;
-		this.capacity = capacity;
-	}
-
-	/**
-	 * Adds an element to this set. If an element with the same key already exists,
-	 * replaces it depending on the replace flag.
-	 * @return true if the element was added/stored, false otherwise
-	 */
-	public boolean add(KeyedElement element) {
-		int hash = hash(element);
-
-		// search for an empty slot at the end of the array
-		for (int i = hash; i < elements.length; i++) {
-			if (elements[i] == null) {
-				elements[i] = element;
-				elementCount++;
-				// grow if necessary
-				if (shouldGrow())
-					expand();
-				return true;
-			}
-			if (elements[i].compare(element)) {
-				if (replace)
-					elements[i] = element;
-				return replace;
-			}
-		}
-
-		// search for an empty slot at the beginning of the array
-		for (int i = 0; i < hash - 1; i++) {
-			if (elements[i] == null) {
-				elements[i] = element;
-				elementCount++;
-				// grow if necessary
-				if (shouldGrow())
-					expand();
-				return true;
-			}
-			if (elements[i].compare(element)) {
-				if (replace)
-					elements[i] = element;
-				return replace;
-			}
-		}
-
-		// if we didn't find a free slot, then try again with the expanded set
-		expand();
-		return add(element);
-	}
-
-	public void clear() {
-		elements = new KeyedElement[Math.max(MINIMUM_SIZE, capacity * 2)];
-		elementCount = 0;
-	}
-
-	public KeyedElement[] elements() {
-		return (KeyedElement[]) elements(new KeyedElement[elementCount]);
-	}
-
-	public Object[] elements(Object[] result) {
-		int j = 0;
-		for (int i = 0; i < elements.length; i++) {
-			KeyedElement element = elements[i];
-			if (element != null)
-				result[j++] = element;
-		}
-		return result;
-	}
-
-	/**
-	 * The array isn't large enough so double its size and rehash
-	 * all its current values.
-	 */
-	protected void expand() {
-		KeyedElement[] oldElements = elements;
-		elements = new KeyedElement[elements.length * 2];
-
-		int maxArrayIndex = elements.length - 1;
-		for (int i = 0; i < oldElements.length; i++) {
-			KeyedElement element = oldElements[i];
-			if (element != null) {
-				int hash = hash(element);
-				while (elements[hash] != null) {
-					hash++;
-					if (hash > maxArrayIndex)
-						hash = 0;
-				}
-				elements[hash] = element;
-			}
-		}
-	}
-
-	/**
-	 * Returns the set element with the given id, or null
-	 * if not found.
-	 */
-	public KeyedElement get(KeyedElement key) {
-		if (elementCount == 0)
-			return null;
-		int hash = hash(key);
-
-		// search the last half of the array
-		for (int i = hash; i < elements.length; i++) {
-			KeyedElement element = elements[i];
-			if (element == null)
-				return null;
-			if (element.compare(key))
-				return element;
-		}
-
-		// search the beginning of the array
-		for (int i = 0; i < hash - 1; i++) {
-			KeyedElement element = elements[i];
-			if (element == null)
-				return null;
-			if (element.compare(key))
-				return element;
-		}
-
-		// nothing found so return null
-		return null;
-	}
-
-	/**
-	 * Returns the set element with the given id, or null
-	 * if not found.
-	 */
-	public KeyedElement getByKey(Object key) {
-		if (elementCount == 0)
-			return null;
-		int hash = keyHash(key);
-
-		// search the last half of the array
-		for (int i = hash; i < elements.length; i++) {
-			KeyedElement element = elements[i];
-			if (element == null)
-				return null;
-			if (element.getKey().equals(key))
-				return element;
-		}
-
-		// search the beginning of the array
-		for (int i = 0; i < hash - 1; i++) {
-			KeyedElement element = elements[i];
-			if (element == null)
-				return null;
-			if (element.getKey().equals(key))
-				return element;
-		}
-
-		// nothing found so return null
-		return null;
-	}
-
-	private int hash(KeyedElement element) {
-		return Math.abs(element.getKeyHashCode()) % elements.length;
-	}
-
-	public boolean isEmpty() {
-		return elementCount == 0;
-	}
-
-	private int keyHash(Object key) {
-		return Math.abs(key.hashCode()) % elements.length;
-	}
-
-	/**
-	 * The element at the given index has been removed so move
-	 * elements to keep the set properly hashed.
-	 */
-	protected void rehashTo(int anIndex) {
-
-		int target = anIndex;
-		int index = anIndex + 1;
-		if (index >= elements.length)
-			index = 0;
-		KeyedElement element = elements[index];
-		while (element != null) {
-			int hashIndex = hash(element);
-			boolean match;
-			if (index < target)
-				match = !(hashIndex > target || hashIndex <= index);
-			else
-				match = !(hashIndex > target && hashIndex <= index);
-			if (match) {
-				elements[target] = element;
-				target = index;
-			}
-			index++;
-			if (index >= elements.length)
-				index = 0;
-			element = elements[index];
-		}
-		elements[target] = null;
-	}
-
-	public boolean remove(KeyedElement toRemove) {
-		if (elementCount == 0)
-			return false;
-
-		int hash = hash(toRemove);
-
-		for (int i = hash; i < elements.length; i++) {
-			KeyedElement element = elements[i];
-			if (element == null)
-				return false;
-			if (element.compare(toRemove)) {
-				rehashTo(i);
-				elementCount--;
-				return true;
-			}
-		}
-
-		for (int i = 0; i < hash - 1; i++) {
-			KeyedElement element = elements[i];
-			if (element == null)
-				return false;
-			if (element.compare(toRemove)) {
-				rehashTo(i);
-				elementCount--;
-				return true;
-			}
-		}
-		return false;
-	}
-
-	public boolean removeByKey(Object key) {
-		if (elementCount == 0)
-			return false;
-		int hash = keyHash(key);
-
-		for (int i = hash; i < elements.length; i++) {
-			KeyedElement element = elements[i];
-			if (element == null)
-				return false;
-			if (element.getKey().equals(key)) {
-				rehashTo(i);
-				elementCount--;
-				return true;
-			}
-		}
-
-		for (int i = 0; i < hash - 1; i++) {
-			KeyedElement element = elements[i];
-			if (element == null)
-				return false;
-			if (element.getKey().equals(key)) {
-				rehashTo(i);
-				elementCount--;
-				return true;
-			}
-		}
-
-		return true;
-	}
-
-	private boolean shouldGrow() {
-		return elementCount > elements.length * 0.75;
-	}
-
-	public int size() {
-		return elementCount;
-	}
-
-	public String toString() {
-		StringBuffer result = new StringBuffer(100);
-		result.append("{"); //$NON-NLS-1$
-		boolean first = true;
-		for (int i = 0; i < elements.length; i++) {
-			if (elements[i] != null) {
-				if (first)
-					first = false;
-				else
-					result.append(", "); //$NON-NLS-1$
-				result.append(elements[i]);
-			}
-		}
-		result.append("}"); //$NON-NLS-1$
-		return result.toString();
-	}
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ReadWriteMonitor.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ReadWriteMonitor.java
deleted file mode 100644
index 6d21bee..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ReadWriteMonitor.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*******************************************************************************
- * 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
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.core.internal.registry;
-
-/**
- * Monitor ensuring no more than one writer working concurrently.
- * Multiple readers are allowed to perform simultaneously.
- * 
- * This class was borrowed from org.eclipse.jdt.internal.core.search.indexing. 
- */
-public class ReadWriteMonitor {
-
-	/**
-	 * <0 : writing (cannot go beyond -1, i.e one concurrent writer)
-	 * =0 : idle
-	 * >0 : reading (number of concurrent readers)
-	 */
-	private int status = 0;
-
-	private Thread writeLockowner;
-
-	/**
-	 * Concurrent reading is allowed
-	 * Blocking only when already writing.
-	 */
-	public synchronized void enterRead() {
-		if (writeLockowner == Thread.currentThread())
-			return;
-		while (status < 0) {
-			try {
-				wait();
-			} catch (InterruptedException e) {
-				// ignore
-			}
-		}
-		status++;
-	}
-
-	/**
-	 * Only one writer at a time is allowed to perform
-	 * Blocking only when already writing or reading.
-	 */
-	public synchronized void enterWrite() {
-		if (writeLockowner != Thread.currentThread()) {
-			while (status != 0) {
-				try {
-					wait();
-				} catch (InterruptedException e) {
-					// ignore
-				}
-			}
-//			System.out.println(this + "lockowner:" + Thread.currentThread());
-			writeLockowner = Thread.currentThread();
-		}
-		status--;
-	}
-
-	/**
-	 * Only notify waiting writer(s) if last reader
-	 */
-	public synchronized void exitRead() {
-		if (writeLockowner == Thread.currentThread())
-			return;
-		if (--status == 0)
-			notifyAll();
-	}
-
-	/**
-	 * When writing is over, all readers and possible
-	 * writers are granted permission to restart concurrently
-	 */
-	public synchronized void exitWrite() {
-		if (writeLockowner != Thread.currentThread())
-			throw new IllegalStateException("Current owner is " + writeLockowner); //$NON-NLS-1$
-		if (++status == 0) {
-			//			System.out.println(this + "exitWrite:" + Thread.currentThread());
-			writeLockowner = null;
-			notifyAll();
-		}
-	}
-
-	public String toString() {
-		StringBuffer buffer = new StringBuffer();
-		buffer.append(this.hashCode());
-		if (status == 0) {
-			buffer.append("Monitor idle "); //$NON-NLS-1$
-		} else if (status < 0) {
-			buffer.append("Monitor writing "); //$NON-NLS-1$
-		} else if (status > 0) {
-			buffer.append("Monitor reading "); //$NON-NLS-1$
-		}
-		buffer.append("(status = "); //$NON-NLS-1$
-		buffer.append(this.status);
-		buffer.append(")"); //$NON-NLS-1$
-		return buffer.toString();
-	}
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ReferenceMap.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ReferenceMap.java
deleted file mode 100644
index 2da387c..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ReferenceMap.java
+++ /dev/null
@@ -1,407 +0,0 @@
-/**
- *  Copyright 2001-2004 The Apache Software Foundation
- *  Portions (modifications) Copyright 2004-2005 IBM Corp.
- *
- *  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.
- *
- * Contributors:
- *    Apache Software Foundation - Initial implementation
- *    Pascal Rapicault, IBM -  Pascal remove the entrySet() implementation because it relied on another class.
- *    IBM - change to int keys, remove support for weak references, and remove unused methods
- */
-package org.eclipse.core.internal.registry;
-
-import java.lang.ref.*;
-
-/**
- *  Hashtable-based map with integer keys that allows values to be removed 
- *  by the garbage  collector.<P>
- *
- *  When you construct a <Code>ReferenceMap</Code>, you can 
- *  specify what kind of references are used to store the
- *  map's values.  If non-hard references are 
- *  used, then the garbage collector can remove mappings
- *  if a value becomes unreachable, or if the 
- *  JVM's memory is running low.  For information on how
- *  the different reference types behave, see
- *  {@link Reference}.<P>
- *
- *  The algorithms used are basically the same as those
- *  in {@link java.util.HashMap}.  In particular, you 
- *  can specify a load factor and capacity to suit your
- *  needs.
- *
- *  This map does <I>not</I> allow null values.  Attempting to add a null 
- *  value to the map will raise a <Code>NullPointerException</Code>.<P>
- *
- *  This data structure is not synchronized.
- *
- *  @see java.lang.ref.Reference
- */
-public class ReferenceMap {
-
-	/**
-	 * IEntry implementation that acts as a hard reference.
-	 * The value of a hard reference entry is never garbage
-	 * collected until it is explicitly removed from the map.
-	 */
-	private static class HardRef implements IEntry {
-
-		private int key;
-		private IEntry next;
-		/**
-		 * Reference value.  Note this can never be null.
-		 */
-		private Object value;
-
-		public HardRef(int key, Object value, IEntry next) {
-			this.key = key;
-			this.value = value;
-			this.next = next;
-		}
-
-		public int getKey() {
-			return key;
-		}
-
-		public IEntry getNext() {
-			return next;
-		}
-
-		public Object getValue() {
-			return value;
-		}
-
-		public void setNext(IEntry next) {
-			this.next = next;
-		}
-
-		public String toString() {
-			return "HardRef(" + key + ',' + value + ')'; //$NON-NLS-1$
-		}
-	}
-
-	/**
-	 * The common interface for all elements in the map.  Both
-	 * hard and soft map values conform to this interface.
-	 */
-	private static interface IEntry {
-		/**
-		 * Returns the integer key for this entry.
-		 * @return The integer key
-		 */
-		public int getKey();
-
-		/**
-		 * Returns the next entry in the linked list of entries
-		 * with the same hash value, or <code>null</code>
-		 * if there is no next entry.
-		 * @return The next entry, or <code>null</code>.
-		 */
-		public IEntry getNext();
-
-		/**
-		 * Returns the value of this entry.
-		 * @return The entry value.
-		 */
-		public Object getValue();
-
-		/**
-		 * Sets the next entry in the linked list of map entries
-		 * with the same hash value.
-		 * 
-		 * @param next The next entry, or <code>null</code>.
-		 */
-		public void setNext(IEntry next);
-	}
-
-	/**
-	 * Augments a normal soft reference with additional information
-	 * required to implement the IEntry interface.
-	 */
-	private static class SoftRef extends SoftReference implements IEntry {
-		private int key;
-		/**
-		 * For chained collisions
-		 */
-		private IEntry next;
-
-		public SoftRef(int key, Object value, IEntry next, ReferenceQueue q) {
-			super(value, q);
-			this.key = key;
-			this.next = next;
-		}
-
-		public int getKey() {
-			return key;
-		}
-
-		public IEntry getNext() {
-			return next;
-		}
-
-		public Object getValue() {
-			return super.get();
-		}
-
-		public void setNext(IEntry next) {
-			this.next = next;
-		}
-	}
-
-	/**
-	 *  Constant indicating that hard references should be used.
-	 */
-	final public static int HARD = 0;
-
-	/**
-	 *  Constant indiciating that soft references should be used.
-	 */
-	final public static int SOFT = 1;
-
-	private int entryCount;
-
-	/**
-	 *  The threshold variable is calculated by multiplying
-	 *  table.length and loadFactor.  
-	 *  Note: I originally marked this field as final, but then this class
-	 *   didn't compile under JDK1.2.2.
-	 *  @serial
-	 */
-	private float loadFactor;
-
-	/**
-	 *  ReferenceQueue used to eliminate stale mappings.
-	 */
-	private transient ReferenceQueue queue = new ReferenceQueue();
-
-	/**
-	 *  Number of mappings in this map.
-	 */
-	private transient int size;
-
-	/**
-	 *  The hash table.  Its length is always a power of two.  
-	 */
-	private transient IEntry[] table;
-
-	/**
-	 *  When size reaches threshold, the map is resized.  
-	 *  @see #resize()
-	 */
-	private transient int threshold;
-
-	/**
-	 *  The reference type for values.  Must be HARD or SOFT
-	 *  Note: I originally marked this field as final, but then this class
-	 *   didn't compile under JDK1.2.2.
-	 *  @serial
-	 */
-	int valueType;
-
-	/**
-	 *  Constructs a new <Code>ReferenceMap</Code> with the
-	 *  specified reference type, load factor and initial
-	 *  capacity.
-	 *
-	 *  @param referenceType  the type of reference to use for values;
-	 *   must be {@link #HARD} or {@link #SOFT}
-	 *  @param capacity  the initial capacity for the map
-	 *  @param loadFactor  the load factor for the map
-	 */
-	public ReferenceMap(int referenceType, int capacity, float loadFactor) {
-		super();
-		if (referenceType != HARD && referenceType != SOFT)
-			throw new IllegalArgumentException(" must be HARD or SOFT."); //$NON-NLS-1$
-		if (capacity <= 0)
-			throw new IllegalArgumentException("capacity must be positive"); //$NON-NLS-1$
-		if ((loadFactor <= 0.0f) || (loadFactor >= 1.0f))
-			throw new IllegalArgumentException("Load factor must be greater than 0 and less than 1."); //$NON-NLS-1$
-
-		this.valueType = referenceType;
-
-		int initialSize = 1;
-		while (initialSize < capacity)
-			initialSize *= 2;
-
-		this.table = new IEntry[initialSize];
-		this.loadFactor = loadFactor;
-		this.threshold = (int) (initialSize * loadFactor);
-	}
-
-	/**
-	 * @param key
-	 * @return
-	 */
-	private Object doRemove(int key) {
-		int index = indexFor(key);
-		IEntry previous = null;
-		IEntry entry = table[index];
-		while (entry != null) {
-			if (key == entry.getKey()) {
-				if (previous == null)
-					table[index] = entry.getNext();
-				else
-					previous.setNext(entry.getNext());
-				this.size--;
-				return entry.getValue();
-			}
-			previous = entry;
-			entry = entry.getNext();
-		}
-		return null;
-	}
-
-	/**
-	 *  Returns the value associated with the given key, if any.
-	 *
-	 *  @return the value associated with the given key, or <Code>null</Code>
-	 *   if the key maps to no value
-	 */
-	public Object get(int key) {
-		purge();
-		for (IEntry entry = table[indexFor(key)]; entry != null; entry = entry.getNext())
-			if (entry.getKey() == key)
-				return entry.getValue();
-		return null;
-	}
-
-	/**
-	 *  Converts the given hash code into an index into the
-	 *  hash table.
-	 */
-	private int indexFor(int hash) {
-		// mix the bits to avoid bucket collisions...
-		hash += ~(hash << 15);
-		hash ^= (hash >>> 10);
-		hash += (hash << 3);
-		hash ^= (hash >>> 6);
-		hash += ~(hash << 11);
-		hash ^= (hash >>> 16);
-		return hash & (table.length - 1);
-	}
-
-	/**
-	 * Constructs a new table entry for the given data
-	 * 
-	 * @param key The entry key
-	 * @param value The entry value
-	 * @param next The next value in the entry's collision chain
-	 * @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);
-			case SOFT :
-				return new SoftRef(key, value, next, queue);
-			default :
-				throw new Error();
-		}
-	}
-
-	/**
-	 *  Purges stale mappings from this map.<P>
-	 *
-	 *  Ordinarily, stale mappings are only removed during
-	 *  a write operation; typically a write operation will    
-	 *  occur often enough that you'll never need to manually
-	 *  invoke this method.<P>
-	 *
-	 *  Note that this method is not synchronized!  Special
-	 *  care must be taken if, for instance, you want stale
-	 *  mappings to be removed on a periodic basis by some
-	 *  background thread.
-	 */
-	private void purge() {
-		Reference ref = queue.poll();
-		while (ref != null) {
-			doRemove(((IEntry) ref).getKey());
-			ref.clear();
-			ref = queue.poll();
-		}
-	}
-
-	/**
-	 *  Associates the given key with the given value.<P>
-	 *  Neither the key nor the value may be null.
-	 *
-	 *  @param key  the key of the mapping
-	 *  @param value  the value of the mapping
-	 *  @throws NullPointerException if either the key or value
-	 *   is null
-	 */
-	public void put(int key, Object value) {
-		if (value == null)
-			throw new NullPointerException("null values not allowed"); //$NON-NLS-1$
-
-		purge();
-
-		if (size + 1 > threshold)
-			resize();
-
-		int index = indexFor(key);
-		IEntry previous = null;
-		IEntry entry = table[index];
-		while (entry != null) {
-			if (key == entry.getKey()) {
-				if (previous == null)
-					table[index] = newEntry(key, value, entry.getNext());
-				else
-					previous.setNext(newEntry(key, value, entry.getNext()));
-				return;
-			}
-			previous = entry;
-			entry = entry.getNext();
-		}
-		this.size++;
-		table[index] = newEntry(key, value, table[index]);
-	}
-
-	/**
-	 *  Removes the key and its associated value from this map.
-	 *
-	 *  @param key  the key to remove
-	 *  @return the value associated with that key, or null if
-	 *   the key was not in the map
-	 */
-	public Object remove(int key) {
-		purge();
-		return doRemove(key);
-	}
-
-	/**
-	 *  Resizes this hash table by doubling its capacity.
-	 *  This is an expensive operation, as entries must
-	 *  be copied from the old smaller table to the new 
-	 *  bigger table.
-	 */
-	private void resize() {
-		IEntry[] old = table;
-		table = new IEntry[old.length * 2];
-
-		for (int i = 0; i < old.length; i++) {
-			IEntry next = old[i];
-			while (next != null) {
-				IEntry entry = next;
-				next = next.getNext();
-				int index = indexFor(entry.getKey());
-				entry.setNext(table[index]);
-				table[index] = entry;
-			}
-			old[i] = null;
-		}
-		threshold = (int) (table.length * loadFactor);
-	}
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryChangeEvent.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryChangeEvent.java
deleted file mode 100644
index e03ca13..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryChangeEvent.java
+++ /dev/null
@@ -1,87 +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.core.internal.registry;
-
-import java.util.Arrays;
-import java.util.Map;
-import org.eclipse.core.runtime.IExtensionDelta;
-import org.eclipse.core.runtime.IRegistryChangeEvent;
-
-/**
- * A registry change event implementation. A filter can be specified. In that case, only 
- * deltas for the selected host will be available to clients.
- */
-public final class RegistryChangeEvent implements IRegistryChangeEvent {
-	private String filter;
-	private Map deltas;
-
-	public RegistryChangeEvent(Map deltas, String filter) {
-		this.deltas = deltas;
-		this.filter = filter;
-	}
-
-	private RegistryDelta[] getHostDeltas() {
-		// if there is a filter, return only the delta for the selected plug-in
-		if (filter != null) {
-			RegistryDelta singleDelta = getHostDelta(filter);
-			return singleDelta == null ? new RegistryDelta[0] : new RegistryDelta[] {singleDelta};
-		}
-		// there is no filter - return all deltas
-		return (RegistryDelta[]) deltas.values().toArray(new RegistryDelta[deltas.size()]);
-	}
-
-	private RegistryDelta getHostDelta(String pluginId) {
-		if (filter != null && !pluginId.equals(filter))
-			return null;
-		return (RegistryDelta) deltas.get(pluginId);
-	}
-
-	public IExtensionDelta[] getExtensionDeltas() {
-		RegistryDelta[] hostDeltas = getHostDeltas();
-		if (hostDeltas.length == 0)
-			return new IExtensionDelta[0];
-		int extensionDeltasSize = 0;
-		for (int i = 0; i < hostDeltas.length; i++)
-			extensionDeltasSize += hostDeltas[i].getExtensionDeltasCount();
-		IExtensionDelta[] extensionDeltas = new IExtensionDelta[extensionDeltasSize];
-		for (int i = 0, offset = 0; i < hostDeltas.length; i++) {
-			IExtensionDelta[] hostExtDeltas = hostDeltas[i].getExtensionDeltas();
-			System.arraycopy(hostExtDeltas, 0, extensionDeltas, offset, hostExtDeltas.length);
-			offset += hostExtDeltas.length;
-		}
-		return extensionDeltas;
-	}
-
-	public IExtensionDelta[] getExtensionDeltas(String hostName) {
-		RegistryDelta hostDelta = getHostDelta(hostName);
-		if (hostDelta == null)
-			return new IExtensionDelta[0];
-		return hostDelta.getExtensionDeltas();
-	}
-
-	public IExtensionDelta[] getExtensionDeltas(String hostName, String extensionPoint) {
-		RegistryDelta hostDelta = getHostDelta(hostName);
-		if (hostDelta == null)
-			return new IExtensionDelta[0];
-		return hostDelta.getExtensionDeltas(hostName + '.' + extensionPoint);
-	}
-
-	public IExtensionDelta getExtensionDelta(String hostName, String extensionPoint, String extension) {
-		RegistryDelta hostDelta = getHostDelta(hostName);
-		if (hostDelta == null)
-			return null;
-		return hostDelta.getExtensionDelta(hostName + '.' + extensionPoint, extension);
-	}
-
-	public String toString() {
-		return "RegistryChangeEvent:  " + Arrays.asList(getHostDeltas()); //$NON-NLS-1$
-	}
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryDelta.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryDelta.java
deleted file mode 100644
index eb52ebe..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryDelta.java
+++ /dev/null
@@ -1,77 +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.core.internal.registry;
-
-import java.util.*;
-import org.eclipse.core.runtime.IExtension;
-import org.eclipse.core.runtime.IExtensionDelta;
-
-/**
- * The extension deltas are grouped by namespace. There is one registry delta by namespace.
- */
-public class RegistryDelta {
-	private Set extensionDeltas = new HashSet(); //the extension deltas (each element indicate the type of the delta)
-	private IObjectManager objectManager; //The object manager from which all the objects contained in the deltas will be found.
-
-	RegistryDelta() {
-		//Nothing to do
-	}
-
-	public int getExtensionDeltasCount() {
-		return extensionDeltas.size();
-	}
-
-	public IExtensionDelta[] getExtensionDeltas() {
-		return (IExtensionDelta[]) extensionDeltas.toArray(new ExtensionDelta[extensionDeltas.size()]);
-	}
-
-	public IExtensionDelta[] getExtensionDeltas(String extensionPoint) {
-		Collection selectedExtDeltas = new LinkedList();
-		for (Iterator extDeltasIter = extensionDeltas.iterator(); extDeltasIter.hasNext();) {
-			IExtensionDelta extensionDelta = (IExtensionDelta) extDeltasIter.next();
-			if (extensionDelta.getExtension().getExtensionPointUniqueIdentifier().equals(extensionPoint))
-				selectedExtDeltas.add(extensionDelta);
-		}
-		return (IExtensionDelta[]) selectedExtDeltas.toArray(new IExtensionDelta[selectedExtDeltas.size()]);
-	}
-
-	/**
-	 * @param extensionPointId
-	 * @param extensionId must not be null
-	 */
-	public IExtensionDelta getExtensionDelta(String extensionPointId, String extensionId) {
-		for (Iterator extDeltasIter = extensionDeltas.iterator(); extDeltasIter.hasNext();) {
-			IExtensionDelta extensionDelta = (IExtensionDelta) extDeltasIter.next();
-			IExtension extension = extensionDelta.getExtension();
-			if (extension.getExtensionPointUniqueIdentifier().equals(extensionPointId) && extension.getUniqueIdentifier() != null && extension.getUniqueIdentifier().equals(extensionId))
-				return extensionDelta;
-		}
-		return null;
-	}
-
-	void addExtensionDelta(IExtensionDelta extensionDelta) {
-		this.extensionDeltas.add(extensionDelta);
-		((ExtensionDelta) extensionDelta).setContainingDelta(this);
-	}
-
-	public String toString() {
-		return "\n\tHost " + ": " + extensionDeltas; //$NON-NLS-1$//$NON-NLS-2$
-	}
-
-	void setObjectManager(IObjectManager objectManager) {
-		this.objectManager = objectManager;
-		//TODO May want to add into the existing one here... if it is possible to have batching 
-	}
-
-	public IObjectManager getObjectManager() {
-		return objectManager;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryIndexChildren.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryIndexChildren.java
deleted file mode 100644
index 705c457..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryIndexChildren.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.core.internal.registry;
-
-public class RegistryIndexChildren {
-
-	static final int[] EMPTY_ARRAY = new int[0];
-
-	private int[] children;
-
-	public RegistryIndexChildren() {
-		children = EMPTY_ARRAY;
-	}
-
-	public RegistryIndexChildren(int[] children) {
-		this.children = children;
-	}
-
-	public int[] getChildren() {
-		return children;
-	}
-
-	public int findChild(int id) {
-		for (int i = 0; i < children.length; i++) {
-			if (children[i] == id)
-				return i;
-		}
-		return -1;
-	}
-
-	public boolean unlinkChild(int id) {
-		int index = findChild(id);
-		if (index == -1)
-			return false; // there is no such element
-
-		// copy the array except one element at index
-		int[] result = new int[children.length - 1];
-		System.arraycopy(children, 0, result, 0, index);
-		System.arraycopy(children, index + 1, result, index, children.length - index - 1);
-		children = result;
-		return true;
-	}
-
-	public boolean linkChild(int id) {
-		if (children.length == 0) {
-			children = new int[] {id};
-			return true;
-		}
-
-		// add new element at the end
-		int[] result = new int[children.length + 1];
-		System.arraycopy(children, 0, result, 0, children.length);
-		result[children.length] = id;
-		children = result;
-		return true;
-	}
-
-	public boolean linkChildren(int[] IDs) {
-		if (children.length == 0) {
-			children = IDs;
-			return true;
-		}
-		int[] result = new int[children.length + IDs.length];
-		System.arraycopy(children, 0, result, 0, children.length);
-		System.arraycopy(IDs, 0, result, children.length, IDs.length);
-		children = result;
-		return true;
-	}
-
-	public boolean unlinkChildren(int[] IDs) {
-		if (children.length == 0)
-			return (IDs.length == 0);
-
-		int size = children.length;
-		for (int i = 0; i < IDs.length; i++) {
-			int index = findChild(IDs[i]);
-			if (index != -1) {
-				children[i] = -1;
-				size--;
-			}
-		}
-		if (size == 0) {
-			children = EMPTY_ARRAY;
-			return true;
-		}
-		int[] result = new int[size];
-		int pos = 0;
-		for (int i = 0; i < children.length; i++) {
-			if (children[i] == -1)
-				continue;
-			result[pos] = children[i];
-			pos++;
-		}
-		return true;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryIndexElement.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryIndexElement.java
deleted file mode 100644
index 6daf40b..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryIndexElement.java
+++ /dev/null
@@ -1,98 +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.registry;
-
-public class RegistryIndexElement implements KeyedElement {
-
-	// The key on which indexing is done
-	final protected String key;
-
-	// Extension points matching the key
-	private RegistryIndexChildren extensionPoints;
-
-	// Extensions matching the key
-	private RegistryIndexChildren extensions;
-
-	public RegistryIndexElement(String key) {
-		this.key = key;
-	}
-	
-	public RegistryIndexElement(String key, int[] extensionPoints, int[] extensions) {
-		this.key = key;
-		this.extensionPoints = new RegistryIndexChildren(extensionPoints);
-		this.extensions = new RegistryIndexChildren(extensions);
-	}
-
-	protected int[] getExtensions() {
-		if (extensions == null)
-			return RegistryIndexChildren.EMPTY_ARRAY;
-		return extensions.getChildren();
-	}
-
-	protected int[] getExtensionPoints() {
-		if (extensionPoints == null)
-			return RegistryIndexChildren.EMPTY_ARRAY;
-		return extensionPoints.getChildren();
-	}
-
-	public boolean updateExtension(int id, boolean add) {
-		if (extensions == null)
-			extensions = new RegistryIndexChildren();
-
-		if (add)
-			return extensions.linkChild(id);
-		else
-			return extensions.unlinkChild(id);
-	}
-
-	public boolean updateExtensions(int[] IDs, boolean add) {
-		if (extensions == null)
-			extensions = new RegistryIndexChildren();
-
-		if (add)
-			return extensions.linkChildren(IDs);
-		else
-			return extensions.unlinkChildren(IDs);
-	}
-
-	public boolean updateExtensionPoint(int id, boolean add) {
-		if (extensionPoints == null)
-			extensionPoints = new RegistryIndexChildren();
-
-		if (add)
-			return extensionPoints.linkChild(id);
-		else
-			return extensionPoints.unlinkChild(id);
-	}
-
-	public boolean updateExtensionPoints(int[] IDs, boolean add) {
-		if (extensionPoints == null)
-			extensionPoints = new RegistryIndexChildren();
-
-		if (add)
-			return extensionPoints.linkChildren(IDs);
-		else
-			return extensionPoints.unlinkChildren(IDs);
-	}
-
-	//Implements the KeyedElement interface
-	public int getKeyHashCode() {
-		return getKey().hashCode();
-	}
-
-	public Object getKey() {
-		return key;
-	}
-
-	public boolean compare(KeyedElement other) {
-		return key.equals(((RegistryIndexElement) other).key);
-	}
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryMessages.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryMessages.java
deleted file mode 100644
index a07386c..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryMessages.java
+++ /dev/null
@@ -1,85 +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 - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.core.internal.registry;
-
-import org.eclipse.osgi.util.NLS;
-
-// Runtime plugin message catalog
-public class RegistryMessages extends NLS {
-	/**
-	 * The unique identifier constant of this plug-in.
-	 */
-	public static final String OWNER_NAME = "org.eclipse.equinox.registry"; //$NON-NLS-1$
-
-	private static final String BUNDLE_NAME = "org.eclipse.core.internal.registry.messages"; //$NON-NLS-1$
-
-	// Bundle
-	public static String bundle_not_activated;
-
-	// Extension Registry
-	public static String meta_registryCacheWriteProblems;
-	public static String meta_registryCacheReadProblems;
-	public static String meta_regCacheIOExceptionReading;
-	public static String meta_registryCacheInconsistent;
-	public static String meta_unableToCreateCache;
-	public static String meta_unableToReadCache;
-	public static String registry_no_default;
-	public static String registry_default_exists;
-	public static String registry_bad_cache;
-
-	// parsing/resolve
-	public static String parse_error;
-	public static String parse_errorNameLineColumn;
-	public static String parse_internalStack;
-	public static String parse_missingAttribute;
-	public static String parse_missingAttributeLine;
-	public static String parse_unknownAttribute;
-	public static String parse_unknownAttributeLine;
-	public static String parse_unknownElement;
-	public static String parse_unknownElementLine;
-	public static String parse_unknownTopElement;
-	public static String parse_xmlParserNotAvailable;
-	public static String parse_process;
-	public static String parse_failedParsingManifest;
-	public static String parse_nonSingleton;
-	public static String parse_problems;
-	public static String parse_duplicateExtension;
-	public static String parse_duplicateExtensionPoint;
-
-	// direct creation
-	public static String create_failedExtensionPoint;
-
-	// executable extensions
-	public static String exExt_findClassError;
-	public static String exExt_instantiateClassError;
-	public static String exExt_initObjectError;
-	public static String exExt_extDefNotFound;
-
-	// plugins
-	public static String plugin_eventListenerError;
-	public static String plugin_initObjectError;
-	public static String plugin_instantiateClassError;
-	public static String plugin_loadClassError;
-
-	// logging
-	public static String log_error;
-	public static String log_warning;
-	public static String log_log;
-
-	static {
-		// load message values from bundle file
-		reloadMessages();
-	}
-
-	public static void reloadMessages() {
-		NLS.initializeMessages(BUNDLE_NAME, RegistryMessages.class);
-	}
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryObject.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryObject.java
deleted file mode 100644
index c6e5157..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryObject.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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.registry;
-
-/**
- * An object which has the general characteristics of all the nestable elements
- * in a plug-in manifest.
- */
-public abstract class RegistryObject implements KeyedElement {
-	//Object identifier
-	private int objectId = RegistryObjectManager.UNKNOWN;
-	//The children of the element
-	protected int[] children = RegistryObjectManager.EMPTY_INT_ARRAY;
-
-	// The field combines offset, persistence flag, and no offset flag
-	private int extraDataOffset = EMPTY_MASK;
-
-	// it is assumed that int has 32 bits (bits #0 to #31);
-	// bits #0 - #29 are the offset (limited to about 1Gb)
-	// bit #30 - persistance flag
-	// bit #31 - registry object has no extra data offset
-	// the bit#31 is a sign bit; bit#30 is the highest mantissa bit
-	static final int EMPTY_MASK = 0x80000000; // only taking bit #31
-	static final int PERSIST_MASK = 0x40000000; // only taking bit #30
-	static final int OFFSET_MASK = 0x3FFFFFFF; // all bits but #30, #31
-
-	//The registry that owns this object
-	protected ExtensionRegistry registry;
-
-	protected RegistryObject(ExtensionRegistry registry, boolean persist) {
-		this.registry = registry;
-		setPersist(persist);
-	}
-
-	void setRawChildren(int[] values) {
-		children = values;
-	}
-
-	//This can not return null. It returns the singleton empty array or an array 
-	protected int[] getRawChildren() {
-		return children;
-	}
-
-	void setObjectId(int value) {
-		objectId = value;
-	}
-
-	protected int getObjectId() {
-		return objectId;
-	}
-
-	//Implementation of the KeyedElement interface
-	public int getKeyHashCode() {
-		return objectId;
-	}
-
-	public Object getKey() {
-		return new Integer(objectId);
-	}
-
-	public boolean compare(KeyedElement other) {
-		return objectId == ((RegistryObject) other).objectId;
-	}
-
-	protected boolean shouldPersist() {
-		return (extraDataOffset & PERSIST_MASK) == PERSIST_MASK;
-	}
-
-	private void setPersist(boolean persist) {
-		if (persist)
-			extraDataOffset |= PERSIST_MASK;
-		else
-			extraDataOffset &= ~PERSIST_MASK;
-	}
-
-	protected boolean noExtraData() {
-		return (extraDataOffset & EMPTY_MASK) == EMPTY_MASK;
-	}
-
-	// Convert no extra data to -1 on output
-	protected int getExtraDataOffset() {
-		if (noExtraData())
-			return -1;
-		return extraDataOffset & OFFSET_MASK;
-	}
-
-	// Accept -1 as "no extra data" on input
-	protected void setExtraDataOffset(int offset) {
-		if (offset == -1) {
-			extraDataOffset &=~OFFSET_MASK; // clear all offset bits
-			extraDataOffset |= EMPTY_MASK;
-			return;
-		}
-		
-		if ((offset & OFFSET_MASK) != offset)
-			throw new IllegalArgumentException("Registry object: extra data offset is out of range"); //$NON-NLS-1$
-		
-		extraDataOffset &=~(OFFSET_MASK | EMPTY_MASK) ; // clear all offset bits; mark as non-empty
-		extraDataOffset |= (offset & OFFSET_MASK); // set all offset bits
-	}
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryObjectFactory.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryObjectFactory.java
deleted file mode 100644
index 8bff1db..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryObjectFactory.java
+++ /dev/null
@@ -1,60 +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.core.internal.registry;
-
-/**
- * A factory method for the creation of the registry objects.
- */
-public class RegistryObjectFactory {
-
-	// The extension registry that this element factory works in
-	protected ExtensionRegistry registry;
-
-	public RegistryObjectFactory(ExtensionRegistry registry) {
-		this.registry = registry;
-	}
-
-	////////////////////////////////////////////////////////////////////////////
-	// Contribution
-	public Contribution createContribution(String contributorId, boolean persist) {
-		return new Contribution(contributorId, registry, persist);
-	}
-
-	////////////////////////////////////////////////////////////////////////////
-	// Extension point
-	public ExtensionPoint createExtensionPoint(boolean persist) {
-		return new ExtensionPoint(registry, persist);
-	}
-
-	public ExtensionPoint createExtensionPoint(int self, int[] children, int dataOffset, boolean persist) {
-		return new ExtensionPoint(self, children, dataOffset, registry, persist);
-	}
-
-	////////////////////////////////////////////////////////////////////////////
-	// Extension
-	public Extension createExtension(boolean persist) {
-		return new Extension(registry, persist);
-	}
-
-	public Extension createExtension(int self, String simpleId, String namespace, int[] children, int extraData, boolean persist) {
-		return new Extension(self, simpleId, namespace, children, extraData, registry, persist);
-	}
-
-	////////////////////////////////////////////////////////////////////////////
-	// Configuration element
-	public ConfigurationElement createConfigurationElement(boolean persist) {
-		return new ConfigurationElement(registry, persist);
-	}
-
-	public ConfigurationElement createConfigurationElement(int self, String contributorId, String name, String[] propertiesAndValue, int[] children, int extraDataOffset, int parent, byte parentType, boolean persist) {
-		return new ConfigurationElement(self, contributorId, name, propertiesAndValue, children, extraDataOffset, parent, parentType, registry, persist);
-	}
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryObjectManager.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryObjectManager.java
deleted file mode 100644
index 66d7013..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryObjectManager.java
+++ /dev/null
@@ -1,767 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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.registry;
-
-import java.lang.ref.SoftReference;
-import java.util.*;
-import org.eclipse.core.runtime.InvalidRegistryObjectException;
-import org.eclipse.core.runtime.spi.RegistryContributor;
-
-/**
- * This class manage all the object from the registry but does not deal with their dependencies.
- * It serves the objects which are either directly obtained from memory or read from a cache.
- * It also returns handles for objects.
- */
-public class RegistryObjectManager implements IObjectManager {
-	//Constants used to get the objects and their handles
-	static public final byte CONFIGURATION_ELEMENT = 1;
-	static public final byte EXTENSION = 2;
-	static public final byte EXTENSION_POINT = 3;
-	static public final byte THIRDLEVEL_CONFIGURATION_ELEMENT = 4;
-
-	static final int CACHE_INITIAL_SIZE = 512; //This value has been picked because it is the minimal size required to startup an RCP app. (FYI, eclipse requires 3 growths).
-	static final float DEFAULT_LOADFACTOR = 0.75f; //This is the default factor used in reference map.
-
-	static final int[] EMPTY_INT_ARRAY = new int[0];
-	static final String[] EMPTY_STRING_ARRAY = new String[0];
-
-	static int UNKNOWN = -1;
-
-	// key: extensionPointName, value: object id
-	private HashtableOfStringAndInt extensionPoints; //This is loaded on startup. Then entries can be added when loading a new plugin from the xml.
-	// key: object id, value: an object
-	private ReferenceMap cache; //Entries are added by getter. The structure is not thread safe.
-	//key: int, value: int
-	private HashtableOfInt fileOffsets; //This is read once on startup when loading from the cache. Entries are never added here. They are only removed to prevent "removed" objects to be reloaded.
-
-	private int nextId = 1; //This is only used to get the next number available.
-
-	//Those two data structures are only used when the addition or the removal of a plugin occurs.
-	//They are used to keep track on a contributor basis of the extension being added or removed
-	private KeyedHashSet newContributions; //represents the contributers added during this session.
-	private Object formerContributions; //represents the contributers encountered in previous sessions. This is loaded lazily.
-
-	private HashMap contributors; // key: contributor ID; value: contributor name
-	private HashMap removedContributors; // key: contributor ID; value: contributor name
-	private KeyedHashSet namespacesIndex; // registry elements (extension & extensionpoints) indexed by namespaces
-
-	// Map key: extensionPointFullyQualifiedName, value int[] of orphan extensions. 
-	// The orphan access does not need to be synchronized because the it is protected by the lock in extension registry.
-	private Object orphanExtensions;
-
-	private KeyedHashSet heldObjects = new KeyedHashSet(); //strong reference to the objects that must be hold on to
-
-	//Indicate if objects have been removed or added from the table. This only needs to be set in a couple of places (addNamespace and removeNamespace)
-	private boolean isDirty = false;
-
-	private boolean fromCache = false;
-
-	private ExtensionRegistry registry;
-
-	// TODO this option is not used
-	// OSGI system properties.  Copied from EclipseStarter
-	public static final String PROP_NO_REGISTRY_FLUSHING = "eclipse.noRegistryFlushing"; //$NON-NLS-1$
-
-	public RegistryObjectManager(ExtensionRegistry registry) {
-		extensionPoints = new HashtableOfStringAndInt();
-		if ("true".equalsIgnoreCase(RegistryProperties.getProperty(PROP_NO_REGISTRY_FLUSHING))) { //$NON-NLS-1$
-			cache = new ReferenceMap(ReferenceMap.HARD, CACHE_INITIAL_SIZE, DEFAULT_LOADFACTOR);
-		} else {
-			cache = new ReferenceMap(ReferenceMap.SOFT, CACHE_INITIAL_SIZE, DEFAULT_LOADFACTOR);
-		}
-		newContributions = new KeyedHashSet();
-		fileOffsets = new HashtableOfInt();
-
-		this.registry = registry;
-	}
-
-	/**
-	 * Initialize the object manager. Return true if the initialization succeeded, false otherwise
-	 */
-	synchronized boolean init(long timeStamp) {
-		TableReader reader = registry.getTableReader();
-		Object[] results = reader.loadTables(timeStamp);
-		if (results == null) {
-			return false;
-		}
-		fileOffsets = (HashtableOfInt) results[0];
-		extensionPoints = (HashtableOfStringAndInt) results[1];
-		nextId = ((Integer) results[2]).intValue();
-		fromCache = true;
-
-		if (!registry.useLazyCacheLoading()) {
-			//TODO Here we could grow all the tables to the right size (ReferenceMap)
-			reader.setHoldObjects(true);
-			markOrphansHasDirty(getOrphans());
-			fromCache = reader.readAllCache(this);
-			formerContributions = getFormerContributions();
-		}
-		return fromCache;
-	}
-
-	synchronized void addContribution(Contribution contribution) {
-		isDirty = true;
-		Object Id = contribution.getKey();
-
-		KeyedElement existingContribution = getFormerContributions().getByKey(Id);
-		if (existingContribution != null) { // move it from former to new contributions
-			removeContribution(Id);
-			newContributions.add(existingContribution);
-		} else
-			existingContribution = newContributions.getByKey(Id);
-
-		if (existingContribution != null) // merge
-			((Contribution) existingContribution).mergeContribution(contribution);
-		else
-			newContributions.add(contribution);
-
-		updateNamespaceIndex(contribution, true);
-	}
-
-	// TODO make ExtensionPoint, Extension provide namespace in a same way (move it to the RegistryObject?)
-	// See if all the registryObjects have the same namespace. If not, return null.
-	// Also can return null if empty array is passed in or objects are of an unexpected type
-	private String findCommonNamespaceIdentifier(RegistryObject[] registryObjects) {
-		String namespaceName = null;
-		for (int i = 0; i < registryObjects.length; i++) {
-			RegistryObject currentObject = registryObjects[i];
-			String tmp = null;
-			if (currentObject instanceof ExtensionPoint)
-				tmp = ((ExtensionPoint) currentObject).getNamespace();
-			else if (currentObject instanceof Extension)
-				tmp = ((Extension) currentObject).getNamespaceIdentifier();
-
-			if (namespaceName == null) {
-				namespaceName = tmp;
-				continue;
-			}
-			if (!namespaceName.equals(tmp)) {
-				return null;
-			}
-		}
-		return namespaceName;
-	}
-
-	synchronized void removeExtensionPointFromNamespaceIndex(int extensionPoint, String namespaceName) {
-		RegistryIndexElement indexElement = getNamespaceIndex(namespaceName);
-		indexElement.updateExtensionPoint(extensionPoint, false);
-	}
-
-	synchronized void removeExtensionFromNamespaceIndex(int extensions, String namespaceName) {
-		RegistryIndexElement indexElement = getNamespaceIndex(namespaceName);
-		indexElement.updateExtension(extensions, false);
-	}
-
-	// Called from a synchronized method
-	private void updateNamespaceIndex(Contribution contribution, boolean added) {
-		// if all extension points are from the same namespace combine them in one block and add them all together
-		int[] contribExtensionPoints = contribution.getExtensionPoints();
-		RegistryObject[] extensionPointObjects = getObjects(contribExtensionPoints, EXTENSION_POINT);
-		String commonExptsNamespace = null;
-		if (contribExtensionPoints.length > 1)
-			commonExptsNamespace = findCommonNamespaceIdentifier(extensionPointObjects);
-		if (commonExptsNamespace != null) {
-			RegistryIndexElement indexElement = getNamespaceIndex(commonExptsNamespace);
-			indexElement.updateExtensionPoints(contribExtensionPoints, added);
-		} else {
-			for (int i = 0; i < contribExtensionPoints.length; i++) {
-				String namespaceName = ((ExtensionPoint) extensionPointObjects[i]).getNamespace();
-				RegistryIndexElement indexElement = getNamespaceIndex(namespaceName);
-				indexElement.updateExtensionPoint(contribExtensionPoints[i], added);
-			}
-		}
-
-		// if all extensions are from the same namespace combine them in one block and add them all together
-		int[] contrExtensions = contribution.getExtensions();
-		RegistryObject[] extensionObjects = getObjects(contrExtensions, EXTENSION);
-		String commonExtNamespace = null;
-		if (contrExtensions.length > 1)
-			commonExtNamespace = findCommonNamespaceIdentifier(extensionObjects);
-		if (commonExtNamespace != null) {
-			RegistryIndexElement indexElement = getNamespaceIndex(commonExtNamespace);
-			indexElement.updateExtensions(contrExtensions, added);
-		} else {
-			for (int i = 0; i < contrExtensions.length; i++) {
-				String namespaceName = ((Extension) extensionObjects[i]).getNamespaceIdentifier();
-				RegistryIndexElement indexElement = getNamespaceIndex(namespaceName);
-				indexElement.updateExtension(contrExtensions[i], added);
-			}
-		}
-	}
-
-	synchronized int[] getExtensionPointsFrom(String id) {
-		KeyedElement tmp = newContributions.getByKey(id);
-		if (tmp == null)
-			tmp = getFormerContributions().getByKey(id);
-		if (tmp == null)
-			return EMPTY_INT_ARRAY;
-		return ((Contribution) tmp).getExtensionPoints();
-	}
-
-	synchronized boolean hasContribution(String id) {
-		Object result = newContributions.getByKey(id);
-		if (result == null)
-			result = getFormerContributions().getByKey(id);
-		return result != null;
-	}
-
-	private KeyedHashSet getFormerContributions() {
-		KeyedHashSet result;
-		if (fromCache == false)
-			return new KeyedHashSet(0);
-
-		if (formerContributions == null || (result = ((KeyedHashSet) ((formerContributions instanceof SoftReference) ? ((SoftReference) formerContributions).get() : formerContributions))) == null) {
-			result = registry.getTableReader().loadContributions();
-			formerContributions = new SoftReference(result);
-		}
-		return result;
-	}
-
-	synchronized public void add(RegistryObject registryObject, boolean hold) {
-		if (registryObject.getObjectId() == UNKNOWN) {
-			int id = nextId++;
-			registryObject.setObjectId(id);
-		}
-		cache.put(registryObject.getObjectId(), registryObject);
-		if (hold)
-			hold(registryObject);
-	}
-
-	private void remove(RegistryObject registryObject, boolean release) {
-		cache.remove(registryObject.getObjectId());
-		if (release)
-			release(registryObject);
-	}
-
-	synchronized void remove(int id, boolean release) {
-		RegistryObject toRemove = (RegistryObject) cache.get(id);
-		if (fileOffsets != null)
-			fileOffsets.removeKey(id);
-		if (toRemove != null)
-			remove(toRemove, release);
-	}
-
-	private void hold(RegistryObject toHold) {
-		heldObjects.add(toHold);
-	}
-
-	private void release(RegistryObject toRelease) {
-		heldObjects.remove(toRelease);
-	}
-
-	public synchronized Object getObject(int id, byte type) {
-		return basicGetObject(id, type);
-	}
-
-	private Object basicGetObject(int id, byte type) {
-		Object result = cache.get(id);
-		if (result != null)
-			return result;
-		if (fromCache)
-			result = load(id, type);
-		if (result == null)
-			throw new InvalidRegistryObjectException();
-		cache.put(id, result);
-		return result;
-	}
-
-	// The current impementation of this method assumes that we don't cache dynamic 
-	// extension. In this case all extensions not yet loaded (i.e. not in the memory cache) 
-	// are "not dynamic" and we actually check memory objects to see if they are dynamic.
-	//
-	// If we decide to allow caching of dynamic objects, the implementation
-	// of this method would have to retrieved the object from disk and check
-	// its "dynamic" status. The problem is that id alone is not enough to get the object
-	// from the disk; object type is needed as well.
-	public boolean shouldPersist(int id) {
-		Object result = cache.get(id);
-		if (result != null)
-			return ((RegistryObject) result).shouldPersist();
-		return true;
-	}
-
-	public synchronized RegistryObject[] getObjects(int[] values, byte type) {
-		if (values.length == 0) {
-			switch (type) {
-				case EXTENSION_POINT :
-					return ExtensionPoint.EMPTY_ARRAY;
-				case EXTENSION :
-					return Extension.EMPTY_ARRAY;
-				case CONFIGURATION_ELEMENT :
-				case THIRDLEVEL_CONFIGURATION_ELEMENT :
-					return ConfigurationElement.EMPTY_ARRAY;
-			}
-		}
-
-		RegistryObject[] results = null;
-		switch (type) {
-			case EXTENSION_POINT :
-				results = new ExtensionPoint[values.length];
-				break;
-			case EXTENSION :
-				results = new Extension[values.length];
-				break;
-			case CONFIGURATION_ELEMENT :
-			case THIRDLEVEL_CONFIGURATION_ELEMENT :
-				results = new ConfigurationElement[values.length];
-				break;
-		}
-		for (int i = 0; i < values.length; i++) {
-			results[i] = (RegistryObject) basicGetObject(values[i], type);
-		}
-		return results;
-	}
-
-	synchronized ExtensionPoint getExtensionPointObject(String xptUniqueId) {
-		int id;
-		if ((id = extensionPoints.get(xptUniqueId)) == HashtableOfStringAndInt.MISSING_ELEMENT)
-			return null;
-		return (ExtensionPoint) getObject(id, EXTENSION_POINT);
-	}
-
-	public Handle getHandle(int id, byte type) {
-		switch (type) {
-			case EXTENSION_POINT :
-				return new ExtensionPointHandle(this, id);
-
-			case EXTENSION :
-				return new ExtensionHandle(this, id);
-
-			case CONFIGURATION_ELEMENT :
-				return new ConfigurationElementHandle(this, id);
-
-			case THIRDLEVEL_CONFIGURATION_ELEMENT :
-			default : //avoid compiler error, type should always be known
-				return new ThirdLevelConfigurationElementHandle(this, id);
-		}
-	}
-
-	public Handle[] getHandles(int[] ids, byte type) {
-		Handle[] results = null;
-		int nbrId = ids.length;
-		switch (type) {
-			case EXTENSION_POINT :
-				if (nbrId == 0)
-					return ExtensionPointHandle.EMPTY_ARRAY;
-				results = new ExtensionPointHandle[nbrId];
-				for (int i = 0; i < nbrId; i++) {
-					results[i] = new ExtensionPointHandle(this, ids[i]);
-				}
-				break;
-
-			case EXTENSION :
-				if (nbrId == 0)
-					return ExtensionHandle.EMPTY_ARRAY;
-				results = new ExtensionHandle[nbrId];
-				for (int i = 0; i < nbrId; i++) {
-					results[i] = new ExtensionHandle(this, ids[i]);
-				}
-				break;
-
-			case CONFIGURATION_ELEMENT :
-				if (nbrId == 0)
-					return ConfigurationElementHandle.EMPTY_ARRAY;
-				results = new ConfigurationElementHandle[nbrId];
-				for (int i = 0; i < nbrId; i++) {
-					results[i] = new ConfigurationElementHandle(this, ids[i]);
-				}
-				break;
-
-			case THIRDLEVEL_CONFIGURATION_ELEMENT :
-				if (nbrId == 0)
-					return ConfigurationElementHandle.EMPTY_ARRAY;
-				results = new ThirdLevelConfigurationElementHandle[nbrId];
-				for (int i = 0; i < nbrId; i++) {
-					results[i] = new ThirdLevelConfigurationElementHandle(this, ids[i]);
-				}
-				break;
-		}
-		return results;
-	}
-
-	synchronized ExtensionPointHandle[] getExtensionPointsHandles() {
-		return (ExtensionPointHandle[]) getHandles(extensionPoints.getValues(), EXTENSION_POINT);
-	}
-
-	synchronized ExtensionPointHandle getExtensionPointHandle(String xptUniqueId) {
-		int id = extensionPoints.get(xptUniqueId);
-		if (id == HashtableOfStringAndInt.MISSING_ELEMENT)
-			return null;
-		return (ExtensionPointHandle) getHandle(id, EXTENSION_POINT);
-	}
-
-	private Object load(int id, byte type) {
-		TableReader reader = registry.getTableReader();
-		int offset = fileOffsets.get(id);
-		if (offset == Integer.MIN_VALUE)
-			return null;
-		switch (type) {
-			case CONFIGURATION_ELEMENT :
-				return reader.loadConfigurationElement(offset);
-
-			case THIRDLEVEL_CONFIGURATION_ELEMENT :
-				return reader.loadThirdLevelConfigurationElements(offset, this);
-
-			case EXTENSION :
-				return reader.loadExtension(offset);
-
-			case EXTENSION_POINT :
-			default : //avoid compile errors. type must always be known
-				return reader.loadExtensionPointTree(offset, this);
-		}
-	}
-
-	synchronized int[] getExtensionsFrom(String contributorId) {
-		KeyedElement tmp = newContributions.getByKey(contributorId);
-		if (tmp == null)
-			tmp = getFormerContributions().getByKey(contributorId);
-		if (tmp == null)
-			return EMPTY_INT_ARRAY;
-		return ((Contribution) tmp).getExtensions();
-	}
-
-	synchronized boolean addExtensionPoint(ExtensionPoint currentExtPoint, boolean hold) {
-		String uniqueId = currentExtPoint.getUniqueIdentifier();
-		if (extensionPoints.get(uniqueId) != HashtableOfStringAndInt.MISSING_ELEMENT)
-			return false;
-		add(currentExtPoint, hold);
-		extensionPoints.put(uniqueId, currentExtPoint.getObjectId());
-		return true;
-	}
-
-	synchronized void removeExtensionPoint(String extensionPointId) {
-		int pointId = extensionPoints.removeKey(extensionPointId);
-		if (pointId == HashtableOfStringAndInt.MISSING_ELEMENT)
-			return;
-		remove(pointId, true);
-	}
-
-	public boolean isDirty() {
-		return isDirty;
-	}
-
-	synchronized void removeContribution(Object contributorId) {
-		boolean removed = newContributions.removeByKey(contributorId);
-		if (removed == false) {
-			removed = getFormerContributions().removeByKey(contributorId);
-			if (removed)
-				formerContributions = getFormerContributions(); //This forces the removed namespace to stay around, so we do not forget about removed namespaces
-		}
-
-		if (removed) {
-			isDirty = true;
-			return;
-		}
-
-	}
-
-	private Map getOrphans() {
-		Object result = orphanExtensions;
-		if (orphanExtensions == null && !fromCache) {
-			result = new HashMap();
-			orphanExtensions = result;
-		} else if (orphanExtensions == null || (result = ((HashMap) ((orphanExtensions instanceof SoftReference) ? ((SoftReference) orphanExtensions).get() : orphanExtensions))) == null) {
-			result = registry.getTableReader().loadOrphans();
-			orphanExtensions = new SoftReference(result);
-		}
-		return (HashMap) result;
-	}
-
-	void addOrphans(String extensionPoint, int[] extensions) {
-		Map orphans = getOrphans();
-		int[] existingOrphanExtensions = (int[]) orphans.get(extensionPoint);
-
-		if (existingOrphanExtensions != null) {
-			// just add
-			int[] newOrphanExtensions = new int[existingOrphanExtensions.length + extensions.length];
-			System.arraycopy(existingOrphanExtensions, 0, newOrphanExtensions, 0, existingOrphanExtensions.length);
-			System.arraycopy(extensions, 0, newOrphanExtensions, existingOrphanExtensions.length, extensions.length);
-			orphans.put(extensionPoint, newOrphanExtensions);
-		} else {
-			// otherwise this is the first one
-			orphans.put(extensionPoint, extensions);
-		}
-		markOrphansHasDirty(orphans);
-	}
-
-	void markOrphansHasDirty(Map orphans) {
-		orphanExtensions = orphans;
-	}
-
-	void addOrphan(String extensionPoint, int extension) {
-		Map orphans = getOrphans();
-		int[] existingOrphanExtensions = (int[]) orphans.get(extensionPoint);
-
-		if (existingOrphanExtensions != null) {
-			// just add
-			int[] newOrphanExtensions = new int[existingOrphanExtensions.length + 1];
-			System.arraycopy(existingOrphanExtensions, 0, newOrphanExtensions, 0, existingOrphanExtensions.length);
-			newOrphanExtensions[existingOrphanExtensions.length] = extension;
-			orphans.put(extensionPoint, newOrphanExtensions);
-		} else {
-			// otherwise this is the first one
-			orphans.put(extensionPoint, new int[] {extension});
-		}
-		markOrphansHasDirty(orphans);
-	}
-
-	int[] removeOrphans(String extensionPoint) {
-		Map orphans = getOrphans();
-		int[] existingOrphanExtensions = (int[]) orphans.remove(extensionPoint);
-		if (existingOrphanExtensions != null) {
-			markOrphansHasDirty(orphans);
-		}
-		return existingOrphanExtensions;
-	}
-
-	void removeOrphan(String extensionPoint, int extension) {
-		Map orphans = getOrphans();
-		int[] existingOrphanExtensions = (int[]) orphans.get(extensionPoint);
-
-		if (existingOrphanExtensions == null)
-			return;
-
-		markOrphansHasDirty(orphans);
-		int newSize = existingOrphanExtensions.length - 1;
-		if (newSize == 0) {
-			orphans.remove(extensionPoint);
-			return;
-		}
-
-		int[] newOrphanExtensions = new int[existingOrphanExtensions.length - 1];
-		for (int i = 0, j = 0; i < existingOrphanExtensions.length; i++)
-			if (extension != existingOrphanExtensions[i])
-				newOrphanExtensions[j++] = existingOrphanExtensions[i];
-
-		orphans.put(extensionPoint, newOrphanExtensions);
-		return;
-	}
-
-	//This method is only used by the writer to reach in
-	Map getOrphanExtensions() {
-		return getOrphans();
-	}
-
-	//	This method is only used by the writer to reach in
-	int getNextId() {
-		return nextId;
-	}
-
-	//	This method is only used by the writer to reach in
-	HashtableOfStringAndInt getExtensionPoints() {
-		return extensionPoints;
-	}
-
-	//	This method is only used by the writer to reach in
-	KeyedHashSet[] getContributions() {
-		return new KeyedHashSet[] {newContributions, getFormerContributions()};
-	}
-
-	// This method is used internally and by the writer to reach in. Notice that it doesn't
-	// return contributors marked as removed.
-	HashMap getContributors() {
-		if (contributors == null) {
-			if (fromCache == false)
-				contributors = new HashMap();
-			else
-				contributors = registry.getTableReader().loadContributors();
-		}
-		return contributors;
-	}
-
-	synchronized RegistryContributor getContributor(String id) {
-		RegistryContributor contributor = (RegistryContributor) getContributors().get(id);
-		if (contributor != null)
-			return contributor;
-		// check if we have it among removed contributors - potentially
-		// notification of removals might be processed after the contributor
-		// marked as removed: 
-		if (removedContributors != null)
-			return (RegistryContributor) removedContributors.get(id);
-		return null;
-	}
-
-	// only adds a contributor if it is not already present in the table
-	synchronized void addContributor(RegistryContributor newContributor) {
-		String key = newContributor.getActualId();
-		if (!getContributors().containsKey(key)) {
-			isDirty = true;
-			if (removedContributors != null)
-				removedContributors.remove(key);
-			getContributors().put(key, newContributor);
-		}
-	}
-
-	synchronized void removeContributor(String id) {
-		isDirty = true;
-		RegistryContributor removed = (RegistryContributor) getContributors().remove(id);
-		if (removed != null) {
-			if (removedContributors == null)
-				removedContributors = new HashMap();
-			removedContributors.put(id, removed);
-		}
-	}
-
-	KeyedHashSet getNamespacesIndex() {
-		if (namespacesIndex == null) {
-			if (fromCache == false)
-				namespacesIndex = new KeyedHashSet(0);
-			else
-				namespacesIndex = registry.getTableReader().loadNamespaces();
-		}
-		return namespacesIndex;
-	}
-
-	// Find or create required index element
-	private RegistryIndexElement getNamespaceIndex(String namespaceName) {
-		RegistryIndexElement indexElement = (RegistryIndexElement) getNamespacesIndex().getByKey(namespaceName);
-		if (indexElement == null) {
-			indexElement = new RegistryIndexElement(namespaceName);
-			namespacesIndex.add(indexElement);
-		}
-		return indexElement;
-	}
-
-	/**
-	 * Collect all the objects that are removed by this operation and store
-	 * them in a IObjectManager so that they can be accessed from the appropriate
-	 * deltas but not from the registry.
-	 */
-	synchronized Map getAssociatedObjects(String contributionId) {
-		//Collect all the objects associated with this contribution
-		int[] xpts = getExtensionPointsFrom(contributionId);
-		int[] exts = getExtensionsFrom(contributionId);
-		Map actualObjects = new HashMap(xpts.length + exts.length);
-		for (int i = 0; i < exts.length; i++) {
-			Extension tmp = (Extension) basicGetObject(exts[i], RegistryObjectManager.EXTENSION);
-			actualObjects.put(new Integer(exts[i]), tmp);
-			collectChildren(tmp, 0, actualObjects);
-		}
-		for (int i = 0; i < xpts.length; i++) {
-			ExtensionPoint xpt = (ExtensionPoint) basicGetObject(xpts[i], RegistryObjectManager.EXTENSION_POINT);
-			actualObjects.put(new Integer(xpts[i]), xpt);
-		}
-
-		return actualObjects;
-	}
-
-	/**
-	 * Add to the set of the objects all extensions and extension points that
-	 * could be navigated to from the objects in the set. 
-	 */
-	synchronized void addNavigableObjects(Map associatedObjects) {
-		Map result = new HashMap();
-		for (Iterator iter = associatedObjects.values().iterator(); iter.hasNext();) {
-			RegistryObject object = (RegistryObject) iter.next();
-			if (object instanceof Extension) {
-				// add extension point
-				ExtensionPoint extPoint = getExtensionPointObject(((Extension) object).getExtensionPointIdentifier());
-				if (extPoint == null) // already removed?
-					continue;
-
-				Integer extPointIndex = new Integer(extPoint.getKeyHashCode());
-				if (!associatedObjects.containsKey(extPointIndex))
-					result.put(new Integer(extPoint.getKeyHashCode()), extPoint);
-
-				// add all extensions for the extension point
-				int[] extensions = extPoint.getRawChildren();
-				for (int j = 0; j < extensions.length; j++) {
-					Extension tmp = (Extension) basicGetObject(extensions[j], RegistryObjectManager.EXTENSION);
-					if (tmp == null) // already removed
-						continue;
-					Integer extensionIndex = new Integer(extensions[j]);
-					if (!associatedObjects.containsKey(extensionIndex))
-						result.put(extensionIndex, tmp);
-				}
-			}
-		}
-		associatedObjects.putAll(result);
-	}
-
-	synchronized void removeObjects(Map associatedObjects) {
-		//Remove the objects from the main object manager so they can no longer be accessed.
-		Collection allValues = associatedObjects.values();
-		for (Iterator iter = allValues.iterator(); iter.hasNext();) {
-			RegistryObject toRemove = (RegistryObject) iter.next();
-			remove((toRemove).getObjectId(), true);
-			if (toRemove instanceof ExtensionPoint)
-				removeExtensionPoint(((ExtensionPoint) toRemove).getUniqueIdentifier());
-		}
-	}
-
-	IObjectManager createDelegatingObjectManager(Map object) {
-		return new TemporaryObjectManager(object, this);
-	}
-
-	private void collectChildren(RegistryObject ce, int level, Map collector) {
-		ConfigurationElement[] children = (ConfigurationElement[]) getObjects(ce.getRawChildren(), level == 0 || ce.noExtraData() ? RegistryObjectManager.CONFIGURATION_ELEMENT : RegistryObjectManager.THIRDLEVEL_CONFIGURATION_ELEMENT);
-		for (int j = 0; j < children.length; j++) {
-			collector.put(new Integer(children[j].getObjectId()), children[j]);
-			collectChildren(children[j], level + 1, collector);
-		}
-	}
-
-	public void close() {
-		//do nothing.
-	}
-
-	public ExtensionRegistry getRegistry() {
-		return registry;
-	}
-
-	// Called from a synchronized method only
-	private boolean unlinkChildFromContributions(KeyedElement[] contributions, int id) {
-		for (int i = 0; i < contributions.length; i++) {
-			Contribution candidate = (Contribution) contributions[i];
-			if (candidate == null)
-				continue;
-			if (candidate.hasChild(id)) {
-				candidate.unlinkChild(id);
-				if (candidate.isEmpty())
-					removeContribution(candidate.getContributorId());
-				return true;
-			}
-		}
-		return false;
-	}
-
-	synchronized boolean unlinkChildFromContributions(int id) {
-		if (unlinkChildFromContributions(newContributions.elements, id))
-			return true;
-		return unlinkChildFromContributions(getFormerContributions().elements, id);
-	}
-
-	synchronized public ExtensionPointHandle[] getExtensionPointsFromNamespace(String namespaceName) {
-		RegistryIndexElement indexElement = getNamespaceIndex(namespaceName);
-		int[] namespaceExtensionPoints = indexElement.getExtensionPoints();
-		return (ExtensionPointHandle[]) getHandles(namespaceExtensionPoints, EXTENSION_POINT);
-	}
-
-	static final ExtensionHandle[] EMPTY_EXTENSIONS_ARRAY = new ExtensionHandle[0];
-
-	// This method filters out extensions with no extension point
-	synchronized public ExtensionHandle[] getExtensionsFromNamespace(String namespaceName) {
-		RegistryIndexElement indexElement = getNamespaceIndex(namespaceName);
-		int[] namespaceExtensions = indexElement.getExtensions();
-
-		// filter extensions with no extension point (orphan extensions)
-		List tmp = new ArrayList();
-		Extension[] exts = (Extension[]) getObjects(namespaceExtensions, EXTENSION);
-		for (int i = 0; i < exts.length; i++) {
-			if (getExtensionPointObject(exts[i].getExtensionPointIdentifier()) != null)
-				tmp.add(getHandle(exts[i].getObjectId(), EXTENSION));
-		}
-		if (tmp.size() == 0)
-			return EMPTY_EXTENSIONS_ARRAY;
-		ExtensionHandle[] result = new ExtensionHandle[tmp.size()];
-		return (ExtensionHandle[]) tmp.toArray(result);
-	}
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryProperties.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryProperties.java
deleted file mode 100644
index 08f1689..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryProperties.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 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
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- *******************************************************************************/
-package org.eclipse.core.internal.registry;
-
-import java.util.Properties;
-import org.eclipse.core.internal.runtime.RuntimeLog;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-
-/**
- * Simple Property mechanism to chain property lookup from local registry properties,
- * to BundleContext properties (if available) or System properties otherwise.
- */
-public class RegistryProperties {
-	
-	public static final String empty = ""; //$NON-NLS-1$
-
-	private static Properties registryProperties = new Properties();
-	private static Object context = null; // BundleContext, but specified as Object to avoid class loading 
-
-	public static void setContext(Object object) {
-		context = object;
-	}
-
-	public static String getProperty(String propertyName) {
-		String propertyValue = registryProperties.getProperty(propertyName);
-		if (propertyValue != null)
-			return propertyValue;
-
-		return getContextProperty(propertyName);
-	}
-
-	public static String getProperty(String property, String defaultValue) {
-		String result = RegistryProperties.getProperty(property);
-		return result == null ? defaultValue : result;
-	}
-
-	public static void setProperty(String propertyName, String propertyValue) {
-		registryProperties.setProperty(propertyName, propertyValue);
-	}
-
-	// The registry could be used as a stand-alone utility without OSGi.
-	// Try to obtain the property from the OSGi context, but only use bundleContext if
-	// it was already set by Activator indicating that OSGi layer is present. 
-	private static String getContextProperty(final String propertyName) {
-		if (context == null)
-			return System.getProperty(propertyName);
-
-		final String[] result = new String[1];
-		try {
-			// Wrap BundleContext into an inner class to make sure it will only get loaded 
-			// if OSGi layer is present.
-			Runnable innerClass = new Runnable() {
-				public void run() {
-					org.osgi.framework.BundleContext bundleContext = (org.osgi.framework.BundleContext) context;
-					result[0] = bundleContext.getProperty(propertyName);
-				}
-			};
-			innerClass.run();
-		} catch (Exception e) {
-			// If we are here, it is likely means that context was set, but OSGi layer
-			// is not present or non-standard. This should not happen, but let's give
-			// the program a chance to continue - properties should have reasonable 
-			// default values.
-			IStatus status = new Status(Status.ERROR, IRegistryConstants.RUNTIME_NAME, 0, e.getMessage(), e);
-			RuntimeLog.log(status);
-			return null;
-		}
-		return result[0];
-	}
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryProviderFactory.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryProviderFactory.java
deleted file mode 100644
index e3d18cf..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryProviderFactory.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.core.internal.registry;
-
-import org.eclipse.core.runtime.*;
-import org.eclipse.core.runtime.spi.IRegistryProvider;
-
-/**
- * @since org.eclipse.equinox.registry 3.2
- */
-public final class RegistryProviderFactory {
-
-	private static IRegistryProvider defaultRegistryProvider;
-
-	public static IRegistryProvider getDefault() {
-		return defaultRegistryProvider;
-	}
-
-	public static void setDefault(IRegistryProvider provider) throws CoreException {
-		if (defaultRegistryProvider != null) {
-			Status status = new Status(IStatus.ERROR, RegistryMessages.OWNER_NAME, IRegistryConstants.PLUGIN_ERROR, RegistryMessages.registry_default_exists, null);
-			throw new CoreException(status);
-		}
-		defaultRegistryProvider = provider;
-	}
-
-	public static void releaseDefault() {
-		defaultRegistryProvider = null;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistrySupport.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistrySupport.java
deleted file mode 100644
index 3c1819a..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistrySupport.java
+++ /dev/null
@@ -1,76 +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
- *******************************************************************************/
-package org.eclipse.core.internal.registry;
-
-import java.util.ResourceBundle;
-import org.eclipse.core.runtime.IStatus;
-
-/**
- * Simple implementation if the registry support functionality.
- * The logging output is done onto System.out (for both specific and generic logs) 
- * in the following format:
- * 
- * [Error|Warning|Log]: Main error message
- * [Error|Warning|Log]: Child error message 1
- * 	...
- * [Error|Warning|Log]: Child error message N
- * 
- * The translation routine assumes that keys are prefixed with '%'. If no resource
- * bundle is present, the key itself (without leading '%') is returned. There is
- * no decoding for the leading '%%'.
- */
-public class RegistrySupport {
-
-	static public String translate(String key, ResourceBundle resources) {
-		String value = key.trim();
-		if (value.charAt(0) != '%')
-			return value;
-		if (resources == null)
-			return key;
-		return resources.getString(key.substring(1));
-	}
-
-	static public void log(IStatus status, String prefix) {
-		String message = status.getMessage();
-		int severity = status.getSeverity();
-
-		String statusMsg;
-		switch (severity) {
-			case IStatus.ERROR :
-				statusMsg = RegistryMessages.log_error;
-				break;
-			case IStatus.WARNING :
-				statusMsg = RegistryMessages.log_warning;
-				break;
-			default :
-				statusMsg = RegistryMessages.log_log;
-				break;
-		}
-		statusMsg += message;
-
-		if (prefix != null)
-			statusMsg = prefix + statusMsg;
-		System.out.println(statusMsg);
-
-		// print out children as well
-		IStatus[] children = status.getChildren();
-		if (children.length != 0) {
-			String newPrefix;
-			if (prefix == null)
-				newPrefix = "\t"; //$NON-NLS-1$
-			else
-				newPrefix = prefix + "\t"; //$NON-NLS-1$
-			for (int i = 0; i < children.length; i++) {
-				log(children[i], newPrefix);
-			}
-		}
-	}
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryTimestamp.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryTimestamp.java
deleted file mode 100644
index e53bb99..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/RegistryTimestamp.java
+++ /dev/null
@@ -1,88 +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.registry;
-
-/**
- * Aggregated registry timestamp. Corresponds to the current contents of the registry.
- * <p>
- * This class may be instantiated.
- * </p><p>
- * This class is not indended to be subclassed.
- * </p>
- * @since org.eclipse.equinox.registry 3.3
- */
-public final class RegistryTimestamp {
-	/**
-	 * Current aggregated timestamp
-	 */
-	private long aggregateTimestamp;
-
-	private boolean modified;
-
-	/**
-	 * Public constructor.
-	 */
-	public RegistryTimestamp() {
-		reset();
-	}
-
-	/**
-	 * Returns value of the aggregated timestamp.
-	 * @return value of the aggregated timestamp
-	 */
-	public long getContentsTimestamp() {
-		return aggregateTimestamp;
-	}
-
-	/**
-	 * Set value of the aggregated timestamp.
-	 * @param timestamp the aggregated timestamp of the current registry contents 
-	 */
-	public void set(long timestamp) {
-		aggregateTimestamp = timestamp;
-		modified = false;
-	}
-
-	/**
-	 * Sets aggregated timestamp to the value corresponding to an empty registry.
-	 */
-	public void reset() {
-		aggregateTimestamp = 0;
-		modified = false;
-	}
-
-	/**
-	 * Determines if the aggregate timestamp was modified using add() or remove()
-	 * methods.
-	 * @return true: the timestamp was modified after the last set/reset 
-	 */
-	public boolean isModifed() {
-		return modified;
-	}
-
-	/**
-	 * Add individual contribution timestamp to the aggregated timestamp. 
-	 * @param timestamp the time stamp of the contribution being added to the registry
-	 */
-	public void add(long timestamp) {
-		aggregateTimestamp ^= timestamp;
-		modified = true;
-	}
-
-	/**
-	 * Remove individual contribution timestamp from the aggregated timestamp.
-	 * @param timestamp the time stamp of the contribution being removed from the registry
-	 */
-	public void remove(long timestamp) {
-		aggregateTimestamp ^= timestamp;
-		modified = true;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/TableReader.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/TableReader.java
deleted file mode 100644
index 0cffc3f..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/TableReader.java
+++ /dev/null
@@ -1,615 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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.registry;
-
-import java.io.*;
-import java.util.HashMap;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.spi.RegistryContributor;
-import org.eclipse.osgi.util.NLS;
-
-public class TableReader {
-	//Markers in the cache 
-	static final int NULL = 0;
-	static final int OBJECT = 1;
-
-	//The version of the cache
-	static final int CACHE_VERSION = 5;
-	// Version 1 -> 2: the contributor Ids changed from "long" to "String"
-	// Version 2 -> 3: added namespace index and the table of contributors
-	// Version 3 -> 4: offset table saved in a binary form (performance)
-	// Version 4 -> 5: remove support added in version 4 to save offset table in a binary form (performance)
-
-	//Informations representing the MAIN file
-	static final String MAIN = ".mainData"; //$NON-NLS-1$
-	BufferedRandomInputStream mainDataFile = null;
-	DataInputStream mainInput = null;
-
-	//Informations representing the EXTRA file
-	static final String EXTRA = ".extraData"; //$NON-NLS-1$
-	BufferedRandomInputStream extraDataFile = null;
-	DataInputStream extraInput = null;
-
-	//The table file
-	static final String TABLE = ".table"; //$NON-NLS-1$
-	File tableFile;
-
-	//The contributions file
-	static final String CONTRIBUTIONS = ".contributions"; //$NON-NLS-1$
-	File contributionsFile;
-
-	//The contributor file
-	static final String CONTRIBUTORS = ".contributors"; //$NON-NLS-1$
-	File contributorsFile;
-
-	//The namespace file
-	static final String NAMESPACES = ".namespaces"; //$NON-NLS-1$
-	File namespacesFile;
-
-	//The orphan file
-	static final String ORPHANS = ".orphans"; //$NON-NLS-1$
-	File orphansFile;
-
-	//Status code
-	private static final byte fileError = 0;
-	private static final boolean DEBUG = false; //TODO need to change
-
-	private boolean holdObjects = false;
-
-	private ExtensionRegistry registry;
-
-	void setMainDataFile(File main) throws IOException {
-		mainDataFile = new BufferedRandomInputStream(main);
-		mainInput = new DataInputStream(mainDataFile);
-	}
-
-	void setExtraDataFile(File extra) throws IOException {
-		extraDataFile = new BufferedRandomInputStream(extra);
-		extraInput = new DataInputStream(extraDataFile);
-	}
-
-	void setTableFile(File table) {
-		tableFile = table;
-	}
-
-	void setContributionsFile(File namespace) {
-		contributionsFile = namespace;
-	}
-
-	void setContributorsFile(File file) {
-		contributorsFile = file;
-	}
-
-	void setNamespacesFile(File file) {
-		namespacesFile = file;
-	}
-
-	void setOrphansFile(File orphan) {
-		orphansFile = orphan;
-	}
-
-	public TableReader(ExtensionRegistry registry) {
-		this.registry = registry;
-	}
-
-	// Don't need to synchronize - called only from a synchronized method
-	public Object[] loadTables(long expectedTimestamp) {
-		HashtableOfInt offsets;
-		HashtableOfStringAndInt extensionPoints;
-
-		DataInputStream tableInput = null;
-		try {
-			tableInput = new DataInputStream(new BufferedInputStream(new FileInputStream(tableFile)));
-			if (!checkCacheValidity(tableInput, expectedTimestamp))
-				return null;
-
-			Integer nextId = new Integer(tableInput.readInt());
-			offsets = new HashtableOfInt();
-			offsets.load(tableInput);
-			extensionPoints = new HashtableOfStringAndInt();
-			extensionPoints.load(tableInput);
-			return new Object[] {offsets, extensionPoints, nextId};
-		} catch (IOException e) {
-			if (tableInput != null)
-				try {
-					tableInput.close();
-				} catch (IOException e1) {
-					//Ignore
-				}
-			log(new Status(IStatus.ERROR, RegistryMessages.OWNER_NAME, fileError, RegistryMessages.meta_registryCacheReadProblems, e));
-			return null;
-		}
-
-	}
-
-	//	Check various aspect of the cache to see if it's valid 
-	private boolean checkCacheValidity(DataInputStream in, long expectedTimestamp) {
-		int version;
-		try {
-			version = in.readInt();
-			if (version != CACHE_VERSION)
-				return false;
-
-			long installStamp = in.readLong();
-			long registryStamp = in.readLong();
-			long mainDataFileSize = in.readLong();
-			long extraDataFileSize = in.readLong();
-			long contributionsFileSize = in.readLong();
-			long contributorsFileSize = in.readLong();
-			long namespacesFileSize = in.readLong();
-			long orphansFileSize = in.readLong();
-			String osStamp = in.readUTF();
-			String windowsStamp = in.readUTF();
-			String localeStamp = in.readUTF();
-
-			boolean validTime = (expectedTimestamp == 0 || expectedTimestamp == registryStamp);
-			boolean validInstall = (installStamp == registry.computeState());
-			boolean validOS = (osStamp.equals(RegistryProperties.getProperty(IRegistryConstants.PROP_OS, RegistryProperties.empty)));
-			boolean validWS = (windowsStamp.equals(RegistryProperties.getProperty(IRegistryConstants.PROP_WS, RegistryProperties.empty)));
-			boolean validNL = (localeStamp.equals(RegistryProperties.getProperty(IRegistryConstants.PROP_NL, RegistryProperties.empty)));
-
-			if (!validTime || !validInstall || !validOS || !validWS || !validNL)
-				return false;
-
-			boolean validMain = (mainDataFileSize == mainDataFile.length());
-			boolean validExtra = (extraDataFileSize == extraDataFile.length());
-			boolean validContrib = (contributionsFileSize == contributionsFile.length());
-			boolean validContributors = (contributorsFileSize == contributorsFile.length());
-			boolean validNamespace = (namespacesFileSize == namespacesFile.length());
-			boolean validOrphan = (orphansFileSize == orphansFile.length());
-
-			return (validMain && validExtra && validContrib && validContributors && validNamespace && validOrphan);
-		} catch (IOException e) {
-			log(new Status(IStatus.ERROR, RegistryMessages.OWNER_NAME, fileError, RegistryMessages.meta_registryCacheInconsistent, e));
-			return false;
-		}
-	}
-
-	public Object loadConfigurationElement(int offset) {
-		try {
-			synchronized (mainDataFile) {
-				goToInputFile(offset);
-				return basicLoadConfigurationElement(mainInput, null);
-			}
-		} catch (IOException e) {
-			String message = NLS.bind(RegistryMessages.meta_regCacheIOExceptionReading, mainDataFile);
-			log(new Status(IStatus.ERROR, RegistryMessages.OWNER_NAME, fileError, message, e));
-			if (DEBUG)
-				log(new Status(IStatus.ERROR, RegistryMessages.OWNER_NAME, fileError, "Error reading a configuration element (" + offset + ") from the registry cache", e)); //$NON-NLS-1$//$NON-NLS-2$
-			return null;
-		}
-	}
-
-	private ConfigurationElement basicLoadConfigurationElement(DataInputStream is, String actualContributorId) throws IOException {
-		int self = is.readInt();
-		String contributorId = readStringOrNull(is);
-		String name = readStringOrNull(is);
-		int parentId = is.readInt();
-		byte parentType = is.readByte();
-		int misc = is.readInt();//this is set in second level CEs, to indicate where in the extra data file the children CEs are
-		String[] propertiesAndValue = readPropertiesAndValue(is);
-		int[] children = readArray(is);
-		if (actualContributorId == null)
-			actualContributorId = contributorId;
-		return getObjectFactory().createConfigurationElement(self, actualContributorId, name, propertiesAndValue, children, misc, parentId, parentType, true);
-	}
-
-	public Object loadThirdLevelConfigurationElements(int offset, RegistryObjectManager objectManager) {
-		try {
-			synchronized (extraDataFile) {
-				goToExtraFile(offset);
-				return loadConfigurationElementAndChildren(null, extraInput, 3, Integer.MAX_VALUE, objectManager, null);
-			}
-		} catch (IOException e) {
-			String message = NLS.bind(RegistryMessages.meta_regCacheIOExceptionReading, extraDataFile);
-			log(new Status(IStatus.ERROR, RegistryMessages.OWNER_NAME, fileError, message, e));
-			if (DEBUG)
-				log(new Status(IStatus.ERROR, RegistryMessages.OWNER_NAME, fileError, "Error reading a third level configuration element (" + offset + ") from the registry cache", e)); //$NON-NLS-1$//$NON-NLS-2$
-			return null;
-		}
-	}
-
-	//Read a whole configuration element subtree
-	private ConfigurationElement loadConfigurationElementAndChildren(DataInputStream is, DataInputStream extraIs, int depth, int maxDepth, RegistryObjectManager objectManager, String namespaceOwnerId) throws IOException {
-		DataInputStream currentStream = is;
-		if (depth > 2)
-			currentStream = extraIs;
-
-		ConfigurationElement ce = basicLoadConfigurationElement(currentStream, namespaceOwnerId);
-		if (namespaceOwnerId == null)
-			namespaceOwnerId = ce.getContributorId();
-		int[] children = ce.getRawChildren();
-		if (depth + 1 > maxDepth)
-			return ce;
-
-		for (int i = 0; i < children.length; i++) {
-			ConfigurationElement tmp = loadConfigurationElementAndChildren(currentStream, extraIs, depth + 1, maxDepth, objectManager, namespaceOwnerId);
-			objectManager.add(tmp, holdObjects);
-		}
-		return ce;
-	}
-
-	private String[] readPropertiesAndValue(DataInputStream inputStream) throws IOException {
-		int numberOfProperties = inputStream.readInt();
-		if (numberOfProperties == 0)
-			return RegistryObjectManager.EMPTY_STRING_ARRAY;
-		String[] properties = new String[numberOfProperties];
-		for (int i = 0; i < numberOfProperties; i++) {
-			properties[i] = readStringOrNull(inputStream);
-		}
-		return properties;
-	}
-
-	public Object loadExtension(int offset) {
-		try {
-			synchronized (mainDataFile) {
-				goToInputFile(offset);
-				return basicLoadExtension(mainInput);
-			}
-		} catch (IOException e) {
-			String message = NLS.bind(RegistryMessages.meta_regCacheIOExceptionReading, mainDataFile);
-			log(new Status(IStatus.ERROR, RegistryMessages.OWNER_NAME, fileError, message, e));
-			if (DEBUG)
-				log(new Status(IStatus.ERROR, RegistryMessages.OWNER_NAME, fileError, "Error reading an extension (" + offset + ") from the registry cache", e)); //$NON-NLS-1$//$NON-NLS-2$
-		}
-		return null;
-	}
-
-	private Extension basicLoadExtension(DataInputStream inputStream) throws IOException {
-		int self = inputStream.readInt();
-		String simpleId = readStringOrNull(mainInput);
-		String namespace = readStringOrNull(mainInput);
-		int[] children = readArray(mainInput);
-		int extraData = mainInput.readInt();
-		return getObjectFactory().createExtension(self, simpleId, namespace, children, extraData, true);
-	}
-
-	public ExtensionPoint loadExtensionPointTree(int offset, RegistryObjectManager objects) {
-		try {
-			synchronized (mainDataFile) {
-				ExtensionPoint xpt = (ExtensionPoint) loadExtensionPoint(offset);
-				int[] children = xpt.getRawChildren();
-				int nbrOfExtension = children.length;
-				for (int i = 0; i < nbrOfExtension; i++) {
-					Extension loaded = basicLoadExtension(mainInput);
-					objects.add(loaded, holdObjects);
-				}
-
-				for (int i = 0; i < nbrOfExtension; i++) {
-					int nbrOfCe = mainInput.readInt();
-					for (int j = 0; j < nbrOfCe; j++) {
-						// note that max depth is set to 2 and extra input is never going to 
-						// be used in this call to the loadConfigurationElementAndChildren().
-						objects.add(loadConfigurationElementAndChildren(mainInput, null, 1, 2, objects, null), holdObjects);
-					}
-				}
-				return xpt;
-			}
-		} catch (IOException e) {
-			String message = NLS.bind(RegistryMessages.meta_regCacheIOExceptionReading, mainDataFile);
-			log(new Status(IStatus.ERROR, RegistryMessages.OWNER_NAME, fileError, message, e));
-			if (DEBUG)
-				log(new Status(IStatus.ERROR, RegistryMessages.OWNER_NAME, fileError, "Error reading an extension point tree (" + offset + ") from the registry cache", e)); //$NON-NLS-1$//$NON-NLS-2$
-			return null;
-		}
-	}
-
-	private Object loadExtensionPoint(int offset) {
-		try {
-			goToInputFile(offset);
-			return basicLoadExtensionPoint();
-		} catch (IOException e) {
-			String message = NLS.bind(RegistryMessages.meta_regCacheIOExceptionReading, mainDataFile);
-			log(new Status(IStatus.ERROR, RegistryMessages.OWNER_NAME, fileError, message, e));
-			if (DEBUG)
-				log(new Status(IStatus.ERROR, RegistryMessages.OWNER_NAME, fileError, "Error reading an extension point (" + offset + ") from the registry cache", e)); //$NON-NLS-1$ //$NON-NLS-2$
-			return null;
-		}
-	}
-
-	private ExtensionPoint basicLoadExtensionPoint() throws IOException {
-		int self = mainInput.readInt();
-		int[] children = readArray(mainInput);
-		int extraData = mainInput.readInt();
-		return getObjectFactory().createExtensionPoint(self, children, extraData, true);
-	}
-
-	private int[] readArray(DataInputStream in) throws IOException {
-		int arraySize = in.readInt();
-		if (arraySize == 0)
-			return RegistryObjectManager.EMPTY_INT_ARRAY;
-		int[] result = new int[arraySize];
-		for (int i = 0; i < arraySize; i++) {
-			result[i] = in.readInt();
-		}
-		return result;
-	}
-
-	private void goToInputFile(int offset) throws IOException {
-		mainDataFile.seek(offset);
-	}
-
-	private void goToExtraFile(int offset) throws IOException {
-		extraDataFile.seek(offset);
-	}
-
-	private String readStringOrNull(DataInputStream in) throws IOException {
-		byte type = in.readByte();
-		if (type == NULL)
-			return null;
-		return in.readUTF();
-	}
-
-	public String[] loadExtensionExtraData(int dataPosition) {
-		try {
-			synchronized (extraDataFile) {
-				goToExtraFile(dataPosition);
-				return basicLoadExtensionExtraData();
-			}
-		} catch (IOException e) {
-			String message = NLS.bind(RegistryMessages.meta_regCacheIOExceptionReading, extraDataFile);
-			log(new Status(IStatus.ERROR, RegistryMessages.OWNER_NAME, fileError, message, e));
-			if (DEBUG)
-				log(new Status(IStatus.ERROR, RegistryMessages.OWNER_NAME, fileError, "Error reading extension label (" + dataPosition + ") from the registry cache", e)); //$NON-NLS-1$ //$NON-NLS-2$
-			return null;
-		}
-	}
-
-	private String[] basicLoadExtensionExtraData() throws IOException {
-		return new String[] {readStringOrNull(extraInput), readStringOrNull(extraInput), readStringOrNull(extraInput)};
-	}
-
-	public String[] loadExtensionPointExtraData(int offset) {
-		try {
-			synchronized (extraDataFile) {
-				goToExtraFile(offset);
-				return basicLoadExtensionPointExtraData();
-			}
-		} catch (IOException e) {
-			String message = NLS.bind(RegistryMessages.meta_regCacheIOExceptionReading, extraDataFile);
-			log(new Status(IStatus.ERROR, RegistryMessages.OWNER_NAME, fileError, message, e));
-			if (DEBUG)
-				log(new Status(IStatus.ERROR, RegistryMessages.OWNER_NAME, fileError, "Error reading extension point data (" + offset + ") from the registry cache", e)); //$NON-NLS-1$ //$NON-NLS-2$
-			return null;
-		}
-	}
-
-	private String[] basicLoadExtensionPointExtraData() throws IOException {
-		String[] result = new String[5];
-		result[0] = readStringOrNull(extraInput); //the label
-		result[1] = readStringOrNull(extraInput); //the schema
-		result[2] = readStringOrNull(extraInput); //the fully qualified name
-		result[3] = readStringOrNull(extraInput); //the namespace
-		result[4] = readStringOrNull(extraInput); //the contributor Id 
-		return result;
-	}
-
-	public KeyedHashSet loadContributions() {
-		DataInputStream namespaceInput = null;
-		try {
-			synchronized (contributionsFile) {
-				namespaceInput = new DataInputStream(new BufferedInputStream(new FileInputStream(contributionsFile)));
-				int size = namespaceInput.readInt();
-				KeyedHashSet result = new KeyedHashSet(size);
-				for (int i = 0; i < size; i++) {
-					String contributorId = readStringOrNull(namespaceInput);
-					Contribution n = getObjectFactory().createContribution(contributorId, true);
-					n.setRawChildren(readArray(namespaceInput));
-					result.add(n);
-				}
-				return result;
-			}
-		} catch (IOException e) {
-			String message = NLS.bind(RegistryMessages.meta_regCacheIOExceptionReading, contributionsFile);
-			log(new Status(IStatus.ERROR, RegistryMessages.OWNER_NAME, fileError, message, e));
-			return null;
-		} finally {
-			if (namespaceInput != null)
-				try {
-					namespaceInput.close();
-				} catch (IOException e1) {
-					//Ignore
-				}
-		}
-	}
-
-	final static float contributorsLoadFactor = 1.2f; // allocate more memory to avoid resizing
-
-	public HashMap loadContributors() {
-		HashMap result = null;
-		DataInputStream contributorsInput = null;
-		try {
-			synchronized (contributorsFile) {
-				contributorsInput = new DataInputStream(new BufferedInputStream(new FileInputStream(contributorsFile)));
-				int size = contributorsInput.readInt();
-				result = new HashMap((int) (size * contributorsLoadFactor));
-				for (int i = 0; i < size; i++) {
-					String id = readStringOrNull(contributorsInput);
-					String name = readStringOrNull(contributorsInput);
-					String hostId = readStringOrNull(contributorsInput);
-					String hostName = readStringOrNull(contributorsInput);
-					result.put(id, new RegistryContributor(id, name, hostId, hostName));
-				}
-			}
-			return result;
-		} catch (IOException e) {
-			String message = NLS.bind(RegistryMessages.meta_regCacheIOExceptionReading, contributorsFile);
-			log(new Status(IStatus.ERROR, RegistryMessages.OWNER_NAME, fileError, message, e));
-			return null;
-		} finally {
-			if (contributorsInput != null)
-				try {
-					contributorsInput.close();
-				} catch (IOException e1) {
-					//Ignore
-				}
-		}
-	}
-
-	public KeyedHashSet loadNamespaces() {
-		DataInputStream namespaceInput = null;
-		try {
-			synchronized (namespacesFile) {
-				namespaceInput = new DataInputStream(new BufferedInputStream(new FileInputStream(namespacesFile)));
-				int size = namespaceInput.readInt();
-				KeyedHashSet result = new KeyedHashSet(size);
-				for (int i = 0; i < size; i++) {
-					String key = readStringOrNull(namespaceInput);
-					RegistryIndexElement indexElement = new RegistryIndexElement(key);
-					indexElement.updateExtensionPoints(readArray(namespaceInput), true);
-					indexElement.updateExtensions(readArray(namespaceInput), true);
-					result.add(indexElement);
-				}
-				return result;
-			}
-		} catch (IOException e) {
-			String message = NLS.bind(RegistryMessages.meta_regCacheIOExceptionReading, namespacesFile);
-			log(new Status(IStatus.ERROR, RegistryMessages.OWNER_NAME, fileError, message, e));
-			return null;
-		} finally {
-			if (namespaceInput != null)
-				try {
-					namespaceInput.close();
-				} catch (IOException e1) {
-					//Ignore
-				}
-		}
-	}
-
-	private void loadAllOrphans(RegistryObjectManager objectManager) throws IOException {
-		//Read the extensions and configuration elements of the orphans
-		int orphans = objectManager.getOrphanExtensions().size();
-		for (int k = 0; k < orphans; k++) {
-			int numberOfOrphanExtensions = mainInput.readInt();
-			for (int i = 0; i < numberOfOrphanExtensions; i++) {
-				loadFullExtension(objectManager);
-			}
-			for (int i = 0; i < numberOfOrphanExtensions; i++) {
-				int nbrOfCe = mainInput.readInt();
-				for (int j = 0; j < nbrOfCe; j++) {
-					objectManager.add(loadConfigurationElementAndChildren(mainInput, extraInput, 1, Integer.MAX_VALUE, objectManager, null), true);
-				}
-			}
-		}
-	}
-
-	// Do not need to synchronize - called only from a synchronized method
-	public boolean readAllCache(RegistryObjectManager objectManager) {
-		try {
-			int size = objectManager.getExtensionPoints().size();
-			for (int i = 0; i < size; i++) {
-				objectManager.add(readAllExtensionPointTree(objectManager), holdObjects);
-			}
-			loadAllOrphans(objectManager);
-		} catch (IOException e) {
-			String message = NLS.bind(RegistryMessages.meta_regCacheIOExceptionReading, mainDataFile);
-			log(new Status(IStatus.ERROR, RegistryMessages.OWNER_NAME, fileError, message, e));
-			return false;
-		}
-		return true;
-	}
-
-	private ExtensionPoint readAllExtensionPointTree(RegistryObjectManager objectManager) throws IOException {
-		ExtensionPoint xpt = loadFullExtensionPoint();
-		int[] children = xpt.getRawChildren();
-		int nbrOfExtension = children.length;
-		for (int i = 0; i < nbrOfExtension; i++) {
-			loadFullExtension(objectManager);
-		}
-
-		for (int i = 0; i < nbrOfExtension; i++) {
-			int nbrOfCe = mainInput.readInt();
-			for (int j = 0; j < nbrOfCe; j++) {
-				objectManager.add(loadConfigurationElementAndChildren(mainInput, extraInput, 1, Integer.MAX_VALUE, objectManager, null), true);
-			}
-		}
-		return xpt;
-	}
-
-	private ExtensionPoint loadFullExtensionPoint() throws IOException { //TODO I don't like this. 
-		ExtensionPoint xpt = basicLoadExtensionPoint();
-		String[] tmp = basicLoadExtensionPointExtraData();
-		xpt.setLabel(tmp[0]);
-		xpt.setSchema(tmp[1]);
-		xpt.setUniqueIdentifier(tmp[2]);
-		xpt.setNamespace(tmp[3]);
-		xpt.setContributorId(tmp[4]);
-		return xpt;
-	}
-
-	private Extension loadFullExtension(RegistryObjectManager objectManager) throws IOException {
-		String[] tmp;
-		Extension loaded = basicLoadExtension(mainInput);
-		tmp = basicLoadExtensionExtraData();
-		loaded.setLabel(tmp[0]);
-		loaded.setExtensionPointIdentifier(tmp[1]);
-		loaded.setContributorId(tmp[2]);
-		objectManager.add(loaded, holdObjects);
-		return loaded;
-	}
-
-	public HashMap loadOrphans() {
-		DataInputStream orphanInput = null;
-		try {
-			synchronized (orphansFile) {
-				orphanInput = new DataInputStream(new BufferedInputStream(new FileInputStream(orphansFile)));
-				int size = orphanInput.readInt();
-				HashMap result = new HashMap(size);
-				for (int i = 0; i < size; i++) {
-					String key = orphanInput.readUTF();
-					int[] value = readArray(orphanInput);
-					result.put(key, value);
-				}
-				return result;
-			}
-		} catch (IOException e) {
-			return null;
-		} finally {
-			if (orphanInput != null)
-				try {
-					orphanInput.close();
-				} catch (IOException e1) {
-					//ignore
-				}
-		}
-	}
-
-	// Don't need to synchronize - called only from a synchronized method
-	public void setHoldObjects(boolean holdObjects) {
-		this.holdObjects = holdObjects;
-	}
-
-	private void log(Status status) {
-		registry.log(status);
-	}
-
-	private RegistryObjectFactory getObjectFactory() {
-		return registry.getElementFactory();
-	}
-
-	// Returns a file name used to test if cache is actually present at a given location
-	public static String getTestFileName() {
-		return TABLE;
-	}
-
-	public void close() {
-		try {
-			if (mainInput != null)
-				mainInput.close();
-			if (extraInput != null)
-				extraInput.close();
-		} catch (IOException e) {
-			log(new Status(IStatus.ERROR, RegistryMessages.OWNER_NAME, fileError, RegistryMessages.meta_registryCacheReadProblems, e));
-		}
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/TableWriter.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/TableWriter.java
deleted file mode 100644
index 96c3b40..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/TableWriter.java
+++ /dev/null
@@ -1,455 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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.registry;
-
-import java.io.*;
-import java.util.*;
-import org.eclipse.core.runtime.*;
-import org.eclipse.core.runtime.spi.RegistryContributor;
-
-public class TableWriter {
-	private static final byte fileError = 0;
-
-	File mainDataFile;
-	File extraDataFile;
-	File tableFile;
-	File contributionsFile;
-	File contributorsFile;
-	File namespacesFile;
-	File orphansFile;
-
-	void setMainDataFile(File main) {
-		mainDataFile = main;
-	}
-
-	void setExtraDataFile(File extra) {
-		extraDataFile = extra;
-	}
-
-	void setTableFile(File table) {
-		tableFile = table;
-	}
-
-	void setContributionsFile(File fileName) {
-		contributionsFile = fileName;
-	}
-
-	void setContributorsFile(File fileName) {
-		contributorsFile = fileName;
-	}
-
-	void setNamespacesFile(File fileName) {
-		namespacesFile = fileName;
-	}
-
-	void setOrphansFile(File orphan) {
-		orphansFile = orphan;
-	}
-
-	DataOutputStream mainOutput;
-	DataOutputStream extraOutput;
-	FileOutputStream mainFileOutput = null;
-	FileOutputStream extraFileOutput = null;
-
-	private HashtableOfInt offsets;
-
-	private ExtensionRegistry registry;
-	private RegistryObjectManager objectManager;
-
-	public TableWriter(ExtensionRegistry registry) {
-		this.registry = registry;
-	}
-
-	private int getExtraDataPosition() {
-		return extraOutput.size();
-	}
-
-	public boolean saveCache(RegistryObjectManager objectManager, long timestamp) {
-		this.objectManager = objectManager;
-		try {
-			if (!openFiles())
-				return false;
-			try {
-				saveExtensionRegistry(timestamp);
-			} catch (IOException io) {
-				log(new Status(IStatus.ERROR, RegistryMessages.OWNER_NAME, fileError, RegistryMessages.meta_registryCacheWriteProblems, io));
-				return false;
-			}
-		} finally {
-			closeFiles();
-		}
-		return true;
-	}
-
-	private boolean openFiles() {
-		try {
-			mainFileOutput = new FileOutputStream(mainDataFile);
-			mainOutput = new DataOutputStream(new BufferedOutputStream(mainFileOutput));
-			extraFileOutput = new FileOutputStream(extraDataFile);
-			extraOutput = new DataOutputStream(new BufferedOutputStream(extraFileOutput));
-		} catch (FileNotFoundException e) {
-			if (mainFileOutput != null)
-				try {
-					mainFileOutput.close();
-				} catch (IOException e1) {
-					//Ignore
-				}
-
-			log(new Status(IStatus.ERROR, RegistryMessages.OWNER_NAME, fileError, RegistryMessages.meta_unableToCreateCache, e));
-			return false;
-		}
-		return true;
-	}
-
-	private void closeFiles() {
-		try {
-			if (mainOutput != null) {
-				mainOutput.flush();
-				if (mainFileOutput.getFD().valid()) {
-					mainFileOutput.getFD().sync();
-				}
-				mainOutput.close();
-			}
-		} catch (IOException e) {
-			log(new Status(IStatus.ERROR, RegistryMessages.OWNER_NAME, fileError, RegistryMessages.meta_registryCacheWriteProblems, e));
-			e.printStackTrace();
-		}
-		try {
-			if (extraOutput != null) {
-				extraOutput.flush();
-				if (extraFileOutput.getFD().valid()) {
-					extraFileOutput.getFD().sync();
-				}
-				extraOutput.close();
-			}
-		} catch (IOException e) {
-			log(new Status(IStatus.ERROR, RegistryMessages.OWNER_NAME, fileError, RegistryMessages.meta_registryCacheWriteProblems, e));
-			e.printStackTrace();
-		}
-	}
-
-	private void saveExtensionRegistry(long timestamp) throws IOException {
-		ExtensionPointHandle[] points = objectManager.getExtensionPointsHandles();
-		offsets = new HashtableOfInt(objectManager.getNextId());
-		for (int i = 0; i < points.length; i++) {
-			saveExtensionPoint(points[i]);
-		}
-		saveOrphans();
-		saveContributions(objectManager.getContributions());
-		saveContributors(objectManager.getContributors());
-		saveNamespaces(objectManager.getNamespacesIndex());
-		closeFiles(); //Close the files here so we can write the appropriate size information in the table file.
-		saveTables(timestamp); //Write the table last so if that is something went wrong we can know
-	}
-
-	private void saveContributions(KeyedHashSet[] contributions) throws IOException {
-		FileOutputStream fosNamespace = new FileOutputStream(contributionsFile);
-		DataOutputStream outputNamespace = new DataOutputStream(new BufferedOutputStream(fosNamespace));
-		KeyedElement[] newElements = contributions[0].elements();
-		KeyedElement[] formerElements = contributions[1].elements();
-
-		// get count of contributions that will be cached
-		int cacheSize = 0;
-		for (int i = 0; i < newElements.length; i++) {
-			if (((Contribution) newElements[i]).shouldPersist())
-				cacheSize++;
-		}
-		for (int i = 0; i < formerElements.length; i++) {
-			if (((Contribution) formerElements[i]).shouldPersist())
-				cacheSize++;
-		}
-		outputNamespace.writeInt(cacheSize);
-
-		for (int i = 0; i < newElements.length; i++) {
-			Contribution element = (Contribution) newElements[i];
-			if (element.shouldPersist()) {
-				writeStringOrNull(element.getContributorId(), outputNamespace);
-				saveArray(filterContributionChildren(element), outputNamespace);
-			}
-		}
-		for (int i = 0; i < formerElements.length; i++) {
-			Contribution element = (Contribution) formerElements[i];
-			if (element.shouldPersist()) {
-				writeStringOrNull(element.getContributorId(), outputNamespace);
-				saveArray(filterContributionChildren(element), outputNamespace);
-			}
-		}
-		outputNamespace.flush();
-		fosNamespace.getFD().sync();
-		outputNamespace.close();
-	}
-
-	// Contribution has raw children in a unique format that combines extensions and extension points.
-	// To filter, need to dis-assmeble, filter, and then re-assemble its raw children
-	private int[] filterContributionChildren(Contribution element) {
-		int[] extensionPoints = filter(element.getExtensionPoints());
-		int[] extensions = filter(element.getExtensions());
-		int[] filteredRawChildren = new int[2 + extensionPoints.length + extensions.length];
-		System.arraycopy(extensionPoints, 0, filteredRawChildren, 2, extensionPoints.length);
-		System.arraycopy(extensions, 0, filteredRawChildren, 2 + extensionPoints.length, extensions.length);
-		filteredRawChildren[Contribution.EXTENSION_POINT] = extensionPoints.length;
-		filteredRawChildren[Contribution.EXTENSION] = extensions.length;
-		return filteredRawChildren;
-	}
-
-	private void saveNamespaces(KeyedHashSet namespacesIndex) throws IOException {
-		FileOutputStream fosNamespace = new FileOutputStream(namespacesFile);
-		DataOutputStream outputNamespace = new DataOutputStream(new BufferedOutputStream(fosNamespace));
-		KeyedElement[] elements = namespacesIndex.elements();
-
-		KeyedElement[] cachedElements = new KeyedElement[elements.length];
-		int cacheSize = 0;
-		for (int i = 0; i < elements.length; i++) {
-			RegistryIndexElement element = (RegistryIndexElement) elements[i];
-			int[] extensionPoints = filter(element.getExtensionPoints());
-			int[] extensions = filter(element.getExtensions());
-			if (extensionPoints.length == 0 && extensions.length == 0)
-				continue;
-			RegistryIndexElement cachedElement = new RegistryIndexElement((String) element.getKey(), extensionPoints, extensions);
-			cachedElements[cacheSize] = cachedElement;
-			cacheSize++;
-		}
-
-		outputNamespace.writeInt(cacheSize);
-		for (int i = 0; i < cacheSize; i++) {
-			RegistryIndexElement element = (RegistryIndexElement) cachedElements[i];
-			writeStringOrNull((String) element.getKey(), outputNamespace);
-			saveArray(element.getExtensionPoints(), outputNamespace); // it was pre-filtered as we counted the number of elements
-			saveArray(element.getExtensions(), outputNamespace); // it was pre-filtered as we counted the number of elements
-		}
-		outputNamespace.flush();
-		fosNamespace.getFD().sync();
-		outputNamespace.close();
-	}
-
-	private void saveContributors(HashMap contributors) throws IOException {
-		FileOutputStream fosContributors = new FileOutputStream(contributorsFile);
-		DataOutputStream outputContributors = new DataOutputStream(new BufferedOutputStream(fosContributors));
-
-		Collection entries = contributors.values();
-		outputContributors.writeInt(entries.size());
-
-		for (Iterator i = entries.iterator(); i.hasNext();) {
-			RegistryContributor contributor = (RegistryContributor) i.next();
-			writeStringOrNull(contributor.getActualId(), outputContributors);
-			writeStringOrNull(contributor.getActualName(), outputContributors);
-			writeStringOrNull(contributor.getId(), outputContributors);
-			writeStringOrNull(contributor.getName(), outputContributors);
-		}
-
-		outputContributors.flush();
-		fosContributors.getFD().sync();
-		outputContributors.close();
-	}
-
-	private void saveTables(long registryTimeStamp) throws IOException {
-		FileOutputStream fosTable = new FileOutputStream(tableFile);
-		DataOutputStream outputTable = new DataOutputStream(new BufferedOutputStream(fosTable));
-		writeCacheHeader(outputTable, registryTimeStamp);
-		outputTable.writeInt(objectManager.getNextId());
-		offsets.save(outputTable);
-		objectManager.getExtensionPoints().save(outputTable, objectManager); // uses writer to filter contents
-		outputTable.flush();
-		fosTable.getFD().sync();
-		outputTable.close();
-	}
-
-	private void writeCacheHeader(DataOutputStream output, long registryTimeStamp) throws IOException {
-		output.writeInt(TableReader.CACHE_VERSION);
-		output.writeLong(registry.computeState());
-		output.writeLong(registryTimeStamp);
-		output.writeLong(mainDataFile.length());
-		output.writeLong(extraDataFile.length());
-		output.writeLong(contributionsFile.length());
-		output.writeLong(contributorsFile.length());
-		output.writeLong(namespacesFile.length());
-		output.writeLong(orphansFile.length());
-		output.writeUTF(RegistryProperties.getProperty(IRegistryConstants.PROP_OS, RegistryProperties.empty));
-		output.writeUTF(RegistryProperties.getProperty(IRegistryConstants.PROP_WS, RegistryProperties.empty));
-		output.writeUTF(RegistryProperties.getProperty(IRegistryConstants.PROP_NL, RegistryProperties.empty));
-	}
-
-	private void saveArray(int[] array, DataOutputStream out) throws IOException {
-		if (array == null) {
-			out.writeInt(0);
-			return;
-		}
-		out.writeInt(array.length);
-		for (int i = 0; i < array.length; i++) {
-			out.writeInt(array[i]);
-		}
-	}
-
-	private void saveExtensionPoint(ExtensionPointHandle xpt) throws IOException {
-		if (!xpt.shouldPersist())
-			return;
-		//save the file position
-		offsets.put(xpt.getId(), mainOutput.size());
-		//save the extensionPoint
-		mainOutput.writeInt(xpt.getId());
-		saveArray(filter(xpt.getObject().getRawChildren()), mainOutput);
-		mainOutput.writeInt(getExtraDataPosition());
-		saveExtensionPointData(xpt);
-
-		saveExtensions(xpt.getExtensions(), mainOutput);
-	}
-
-	private void saveExtension(ExtensionHandle ext, DataOutputStream outputStream) throws IOException {
-		if (!ext.shouldPersist())
-			return;
-		offsets.put(ext.getId(), outputStream.size());
-		outputStream.writeInt(ext.getId());
-		writeStringOrNull(ext.getSimpleIdentifier(), outputStream);
-		writeStringOrNull(ext.getNamespaceIdentifier(), outputStream);
-		saveArray(filter(ext.getObject().getRawChildren()), outputStream);
-		outputStream.writeInt(getExtraDataPosition());
-		saveExtensionData(ext);
-	}
-
-	private void writeStringArray(String[] array, DataOutputStream outputStream) throws IOException {
-		outputStream.writeInt(array == null ? 0 : array.length);
-		for (int i = 0; i < (array == null ? 0 : array.length); i++) {
-			writeStringOrNull(array[i], outputStream);
-		}
-	}
-
-	//Save Configuration elements depth first
-	private void saveConfigurationElement(ConfigurationElementHandle element, DataOutputStream outputStream, DataOutputStream extraOutputStream, int depth) throws IOException {
-		if (!element.shouldPersist())
-			return;
-		DataOutputStream currentOutput = outputStream;
-		if (depth > 2)
-			currentOutput = extraOutputStream;
-
-		offsets.put(element.getId(), currentOutput.size());
-
-		currentOutput.writeInt(element.getId());
-		ConfigurationElement actualCe = (ConfigurationElement) element.getObject();
-
-		writeStringOrNull(actualCe.getContributorId(), currentOutput);
-		writeStringOrNull(actualCe.getName(), currentOutput);
-		currentOutput.writeInt(actualCe.parentId);
-		currentOutput.writeByte(actualCe.parentType);
-		currentOutput.writeInt(depth > 1 ? extraOutputStream.size() : -1);
-		writeStringArray(actualCe.getPropertiesAndValue(), currentOutput);
-		//save the children
-		saveArray(filter(actualCe.getRawChildren()), currentOutput);
-
-		ConfigurationElementHandle[] childrenCEs = (ConfigurationElementHandle[]) element.getChildren();
-		for (int i = 0; i < childrenCEs.length; i++) {
-			saveConfigurationElement(childrenCEs[i], outputStream, extraOutputStream, depth + 1);
-		}
-
-	}
-
-	private void saveExtensions(IExtension[] exts, DataOutputStream outputStream) throws IOException {
-		for (int i = 0; i < exts.length; i++) {
-			saveExtension((ExtensionHandle) exts[i], outputStream);
-		}
-
-		for (int i = 0; i < exts.length; i++) {
-			if (!((ExtensionHandle) exts[i]).shouldPersist())
-				continue;
-			IConfigurationElement[] ces = exts[i].getConfigurationElements();
-			int countCElements = 0;
-			boolean[] save = new boolean[ces.length];
-			for (int j = 0; j < ces.length; j++) {
-				if (((ConfigurationElementHandle) ces[j]).shouldPersist()) {
-					save[j] = true;
-					countCElements++;
-				} else
-					save[j] = false;
-			}
-			outputStream.writeInt(countCElements);
-			for (int j = 0; j < ces.length; j++) {
-				if (save[j])
-					saveConfigurationElement((ConfigurationElementHandle) ces[j], outputStream, extraOutput, 1);
-			}
-		}
-	}
-
-	private void saveExtensionPointData(ExtensionPointHandle xpt) throws IOException {
-		writeStringOrNull(xpt.getLabel(), extraOutput);
-		writeStringOrNull(xpt.getSchemaReference(), extraOutput);
-		writeStringOrNull(xpt.getUniqueIdentifier(), extraOutput);
-		writeStringOrNull(xpt.getNamespaceIdentifier(), extraOutput);
-		writeStringOrNull(((ExtensionPoint) xpt.getObject()).getContributorId(), extraOutput);
-	}
-
-	private void saveExtensionData(ExtensionHandle extension) throws IOException {
-		writeStringOrNull(extension.getLabel(), extraOutput);
-		writeStringOrNull(extension.getExtensionPointUniqueIdentifier(), extraOutput);
-		writeStringOrNull(extension.getContributorId(), extraOutput);
-	}
-
-	private void writeStringOrNull(String string, DataOutputStream out) throws IOException {
-		if (string == null)
-			out.writeByte(TableReader.NULL);
-		else {
-			out.writeByte(TableReader.OBJECT);
-			out.writeUTF(string);
-		}
-	}
-
-	private void saveOrphans() throws IOException {
-		Map orphans = objectManager.getOrphanExtensions();
-		Map filteredOrphans = new HashMap();
-		for (Iterator iter = orphans.entrySet().iterator(); iter.hasNext();) {
-			Map.Entry entry = (Map.Entry) iter.next();
-			int[] filteredValue = filter((int[]) entry.getValue());
-			if (filteredValue.length != 0)
-				filteredOrphans.put(entry.getKey(), filteredValue);
-		}
-		FileOutputStream fosOrphan = new FileOutputStream(orphansFile);
-		DataOutputStream outputOrphan = new DataOutputStream(new BufferedOutputStream(fosOrphan));
-		outputOrphan.writeInt(filteredOrphans.size());
-		Set elements = filteredOrphans.entrySet();
-		for (Iterator iter = elements.iterator(); iter.hasNext();) {
-			Map.Entry entry = (Map.Entry) iter.next();
-			outputOrphan.writeUTF((String) entry.getKey());
-			saveArray((int[]) entry.getValue(), outputOrphan);
-		}
-		for (Iterator iter = elements.iterator(); iter.hasNext();) {
-			Map.Entry entry = (Map.Entry) iter.next();
-			mainOutput.writeInt(((int[]) entry.getValue()).length);
-			saveExtensions((IExtension[]) objectManager.getHandles((int[]) entry.getValue(), RegistryObjectManager.EXTENSION), mainOutput);
-		}
-		outputOrphan.flush();
-		fosOrphan.getFD().sync();
-		outputOrphan.close();
-	}
-
-	private void log(Status status) {
-		registry.log(status);
-	}
-
-	// Filters out registry objects that should not be cached
-	private int[] filter(int[] input) {
-		boolean[] save = new boolean[input.length];
-		int resultSize = 0;
-		for (int i = 0; i < input.length; i++) {
-			if (objectManager.shouldPersist(input[i])) {
-				save[i] = true;
-				resultSize++;
-			} else
-				save[i] = false;
-		}
-		int[] result = new int[resultSize];
-		int pos = 0;
-		for (int i = 0; i < input.length; i++) {
-			if (save[i]) {
-				result[pos] = input[i];
-				pos++;
-			}
-		}
-		return result;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/TemporaryObjectManager.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/TemporaryObjectManager.java
deleted file mode 100644
index 8af0330..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/TemporaryObjectManager.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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.registry;
-
-import java.util.Map;
-import org.eclipse.core.runtime.InvalidRegistryObjectException;
-
-/**
- * @since 3.1
- */
-public class TemporaryObjectManager implements IObjectManager {
-	private Map actualObjects; //id --> registry objects
-	private RegistryObjectManager parent; //the main object manager (should be equals to extensionRegistry.getObjectManager)
-
-	public TemporaryObjectManager(Map actualObjects, RegistryObjectManager parent) {
-		this.actualObjects = actualObjects;
-		this.parent = parent;
-	}
-
-	public Handle getHandle(int id, byte type) {
-		switch (type) {
-			case RegistryObjectManager.EXTENSION_POINT :
-				return new ExtensionPointHandle(this, id);
-
-			case RegistryObjectManager.EXTENSION :
-				return new ExtensionHandle(this, id);
-
-			case RegistryObjectManager.CONFIGURATION_ELEMENT :
-				return new ConfigurationElementHandle(this, id);
-
-			case RegistryObjectManager.THIRDLEVEL_CONFIGURATION_ELEMENT :
-			default : //avoid compiler error, type should always be known
-				return new ThirdLevelConfigurationElementHandle(this, id);
-		}
-	}
-
-	public Handle[] getHandles(int[] ids, byte type) {
-		Handle[] results = null;
-		int nbrId = ids.length;
-		switch (type) {
-			case RegistryObjectManager.EXTENSION_POINT :
-				if (nbrId == 0)
-					return ExtensionPointHandle.EMPTY_ARRAY;
-				results = new ExtensionPointHandle[nbrId];
-				for (int i = 0; i < nbrId; i++) {
-					results[i] = new ExtensionPointHandle(this, ids[i]);
-				}
-				break;
-
-			case RegistryObjectManager.EXTENSION :
-				if (nbrId == 0)
-					return ExtensionHandle.EMPTY_ARRAY;
-				results = new ExtensionHandle[nbrId];
-				for (int i = 0; i < nbrId; i++) {
-					results[i] = new ExtensionHandle(this, ids[i]);
-				}
-				break;
-
-			case RegistryObjectManager.CONFIGURATION_ELEMENT :
-				if (nbrId == 0)
-					return ConfigurationElementHandle.EMPTY_ARRAY;
-				results = new ConfigurationElementHandle[nbrId];
-				for (int i = 0; i < nbrId; i++) {
-					results[i] = new ConfigurationElementHandle(this, ids[i]);
-				}
-				break;
-
-			case RegistryObjectManager.THIRDLEVEL_CONFIGURATION_ELEMENT :
-				if (nbrId == 0)
-					return ConfigurationElementHandle.EMPTY_ARRAY;
-				results = new ThirdLevelConfigurationElementHandle[nbrId];
-				for (int i = 0; i < nbrId; i++) {
-					results[i] = new ThirdLevelConfigurationElementHandle(this, ids[i]);
-				}
-				break;
-		}
-		return results;
-	}
-
-	synchronized public Object getObject(int id, byte type) {
-		Object result = null;
-		try {
-			result = parent.getObject(id, type);
-		} catch (InvalidRegistryObjectException e) {
-			if (actualObjects != null) {
-				result = actualObjects.get(new Integer(id));
-			}
-		}
-		if (result == null)
-			throw new InvalidRegistryObjectException();
-		return result;
-	}
-
-	synchronized public RegistryObject[] getObjects(int[] values, byte type) {
-		if (values.length == 0) {
-			switch (type) {
-				case RegistryObjectManager.EXTENSION_POINT :
-					return ExtensionPoint.EMPTY_ARRAY;
-				case RegistryObjectManager.EXTENSION :
-					return Extension.EMPTY_ARRAY;
-				case RegistryObjectManager.CONFIGURATION_ELEMENT :
-				case RegistryObjectManager.THIRDLEVEL_CONFIGURATION_ELEMENT :
-					return ConfigurationElement.EMPTY_ARRAY;
-			}
-		}
-
-		RegistryObject[] results = null;
-		switch (type) {
-			case RegistryObjectManager.EXTENSION_POINT :
-				results = new ExtensionPoint[values.length];
-				break;
-			case RegistryObjectManager.EXTENSION :
-				results = new Extension[values.length];
-				break;
-			case RegistryObjectManager.CONFIGURATION_ELEMENT :
-			case RegistryObjectManager.THIRDLEVEL_CONFIGURATION_ELEMENT :
-				results = new ConfigurationElement[values.length];
-				break;
-		}
-		for (int i = 0; i < values.length; i++) {
-			results[i] = (RegistryObject) getObject(values[i], type);
-		}
-		return results;
-	}
-
-	public synchronized void close() {
-		actualObjects = null;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ThirdLevelConfigurationElementHandle.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ThirdLevelConfigurationElementHandle.java
deleted file mode 100644
index db255be..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/ThirdLevelConfigurationElementHandle.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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.registry;
-
-import org.eclipse.core.runtime.IConfigurationElement;
-
-/**
- * @since 3.1 
- */
-public class ThirdLevelConfigurationElementHandle extends ConfigurationElementHandle {
-
-	public ThirdLevelConfigurationElementHandle(IObjectManager objectManager, int id) {
-		super(objectManager, id);
-	}
-
-	protected ConfigurationElement getConfigurationElement() {
-		return (ConfigurationElement) objectManager.getObject(getId(), RegistryObjectManager.THIRDLEVEL_CONFIGURATION_ELEMENT);
-	}
-
-	public IConfigurationElement[] getChildren() {
-		return (IConfigurationElement[]) objectManager.getHandles(getConfigurationElement().getRawChildren(), RegistryObjectManager.THIRDLEVEL_CONFIGURATION_ELEMENT);
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/messages.properties b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/messages.properties
deleted file mode 100644
index 075420e..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/messages.properties
+++ /dev/null
@@ -1,64 +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
-###############################################################################
-### Extension registry messages
-
-### Bundle
-bundle_not_activated = The bundle org.eclipse.equinox.registry was not activated.
-
-### Extension Registry
-meta_registryCacheWriteProblems = Trouble writing to the registry cache file.
-meta_registryCacheReadProblems = Trouble reading from the registry cache file.
-meta_regCacheIOExceptionReading = IOException encountered while reading \"{0}\".
-meta_registryCacheInconsistent = Registry cache inconsistent, defaulting to not using cached file.
-meta_unableToCreateCache = Unable to create output stream for registry cache.
-meta_unableToReadCache = Unable to create input stream for registry cache.
-registry_no_default = Extension tracker was unable to obtain Eclipse extension registry.
-registry_default_exists = Extension registry provider is already set.
-registry_bad_cache = Unable to use cached extension registry. It will be rebuilt from XML files.
-
-### parsing/resolve
-parse_error = Parsing error: \"{0}\".
-parse_errorNameLineColumn = Parsing error in \"{0}\" [line {1}, column {2}]: \"{3}\".
-parse_internalStack = Element/end element mismatch for element \"{0}\".
-parse_missingAttribute=Missing \"{0}\" attribute in \"{1}\" element. Element ignored.
-parse_missingAttributeLine=Missing \"{0}\" attribute in \"{1}\" element (line: {2}). Element ignored.
-parse_unknownAttribute = Unknown attribute \"{0}\" for element \"{1}\" ignored.
-parse_unknownAttributeLine= Unknown attribute \"{0}\" for element \"{1}\" ignored (line: {2}).
-parse_unknownElement = Unknown element \"{0}\", found within a \"{1}\", ignored.
-parse_unknownElementLine = Unknown element \"{0}\", found within a \"{1}\", ignored (line: {2}).
-parse_unknownTopElement = Unknown element \"{0}\", found at the top level, ignored.
-parse_xmlParserNotAvailable=Could not acquire XML parsing service.
-parse_process = Processing XML extension registry contribution
-parse_failedParsingManifest = Could not parse XML contribution for \"{0}\". Any contributed extensions and extension points will be ignored.
-parse_nonSingleton = The extensions and extension-points from the bundle \"{0}\" are ignored. The bundle is not marked as singleton. 
-parse_problems = Problems parsing plug-in manifest for: \"{0}\".
-parse_duplicateExtension = Extensions supplied by \"{0}\" and \"{1}\" have the same Id: \"{2}\".
-parse_duplicateExtensionPoint = Ignored duplicate extension point \"{0}\" supplied by \"{1}\".
-
-### direct creation
-create_failedExtensionPoint = Missing ID for the extension point \"{0}\". Element ignored.  
-
-### executable extensions
-exExt_findClassError = Contributor \"{0}\" was unable to find class \"{1}\".
-exExt_instantiateClassError = Contributor \"{0}\" was unable to instantiate class \"{1}\".
-exExt_initObjectError  = Contributor \"{0}\" was unable to execute setInitializationData on an instance of \"{1}\".
-exExt_extDefNotFound = Executable extension definition for \"{0}\" not found.
-
-### plugins
-plugin_eventListenerError = Error notifying registry change listener.
-plugin_initObjectError = Plug-in \"{0}\" was unable to execute setInitializationData on an instance of \"{1}\".
-plugin_instantiateClassError = Plug-in \"{0}\" was unable to instantiate class \"{1}\".
-plugin_loadClassError = Plug-in {0} was unable to load class {1}.
-
-### logging
-log_error = Error:  
-log_warning = Warning:  
-log_log = Log:  
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/osgi/Activator.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/osgi/Activator.java
deleted file mode 100644
index b25d161..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/osgi/Activator.java
+++ /dev/null
@@ -1,152 +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.core.internal.registry.osgi;
-
-import java.io.File;
-import java.util.Hashtable;
-import org.eclipse.core.internal.registry.*;
-import org.eclipse.core.runtime.*;
-import org.eclipse.core.runtime.spi.RegistryStrategy;
-import org.eclipse.osgi.service.datalocation.Location;
-import org.osgi.framework.*;
-
-/**
- * The extension registry bundle. This activator will create the default OSGi registry 
- * unless told otherwise by setting the following system property to false:
- * <code>eclipse.createRegistry=false</code>
- * 
- * The default registry will be stopped on the bundle shutdown.
- * 
- * @see IRegistryConstants#PROP_DEFAULT_REGISTRY
- */
-public class Activator implements BundleActivator {
-
-	private static BundleContext bundleContext;
-
-	/**
-	 * Location of the default registry relative to the configuration area
-	 */
-	private static final String STORAGE_DIR = "org.eclipse.core.runtime"; //$NON-NLS-1$
-
-	private Object masterRegistryKey = new Object();
-	private Object userRegistryKey = new Object();
-
-	private IExtensionRegistry defaultRegistry = null;
-	private ServiceRegistration registryRegistration;
-	private ServiceRegistration commandRegistration;
-	private RegistryProviderOSGI defaultProvider;
-
-	/**
-	 * This method is called upon plug-in activation
-	 */
-	public void start(BundleContext context) throws Exception {
-		bundleContext = context;
-		RegistryProperties.setContext(bundleContext);
-		processCommandLine();
-		startRegistry();
-	}
-
-	/**
-	 * This method is called when the plug-in is stopped
-	 */
-	public void stop(BundleContext context) throws Exception {
-		stopRegistry();
-		RegistryProperties.setContext(null);
-		bundleContext = null;
-	}
-
-	public static BundleContext getContext() {
-		return bundleContext;
-	}
-
-	/**
-	 * Look for the no registry cache flag and check to see if we should NOT be lazily loading plug-in 
-	 * definitions from the registry cache file.
-	 * NOTE: this command line processing is only performed in the presence of OSGi
-	 * 
-	 * @param args - command line arguments
-	 */
-	private void processCommandLine() {
-		// use a string here instead of the class to prevent class loading.
-		ServiceReference ref = getContext().getServiceReference("org.eclipse.osgi.service.environment.EnvironmentInfo"); //$NON-NLS-1$
-		if (ref == null)
-			return;
-		String[] args = EquinoxUtils.getCommandLine(bundleContext, ref);
-		if (args == null || args.length == 0)
-			return;
-		for (int i = 0; i < args.length; i++) {
-			if (args[i].equalsIgnoreCase(IRegistryConstants.NO_REGISTRY_CACHE))
-				RegistryProperties.setProperty(IRegistryConstants.PROP_NO_REGISTRY_CACHE, "true"); //$NON-NLS-1$
-			else if (args[i].equalsIgnoreCase(IRegistryConstants.NO_LAZY_REGISTRY_CACHE_LOADING))
-				RegistryProperties.setProperty(IRegistryConstants.PROP_NO_LAZY_CACHE_LOADING, "true"); //$NON-NLS-1$
-		}
-	}
-
-	public void startRegistry() throws CoreException {
-		// see if the customer suppressed the creation of default registry
-		String property = bundleContext.getProperty(IRegistryConstants.PROP_DEFAULT_REGISTRY);
-		if (property != null && property.equalsIgnoreCase("false")) //$NON-NLS-1$
-			return;
-
-		// check to see if we need to use null as a userToken
-		if ("true".equals(bundleContext.getProperty(IRegistryConstants.PROP_REGISTRY_NULL_USER_TOKEN))) //$NON-NLS-1$
-			userRegistryKey = null;
-
-		// Determine primary and alternative registry locations. Eclipse extension registry cache 
-		// can be found in one of the two locations:
-		// a) in the local configuration area (standard location passed in by the platform) -> priority
-		// b) in the shared configuration area (typically, shared install is used) 
-		File[] registryLocations;
-		boolean[] readOnlyLocations;
-
-		RegistryStrategy strategy = null;
-		Location configuration = OSGIUtils.getDefault().getConfigurationLocation();
-		if (configuration == null) {
-			RegistryProperties.setProperty(IRegistryConstants.PROP_NO_REGISTRY_CACHE, "true"); //$NON-NLS-1$
-			RegistryProperties.setProperty(IRegistryConstants.PROP_NO_LAZY_CACHE_LOADING, "true"); //$NON-NLS-1$
-			strategy = new RegistryStrategyOSGI(null, null, masterRegistryKey);
-		} else {
-			File primaryDir = new File(configuration.getURL().getPath() + '/' + STORAGE_DIR);
-			boolean primaryReadOnly = configuration.isReadOnly();
-
-			Location parentLocation = configuration.getParentLocation();
-			if (parentLocation != null) {
-				File secondaryDir = new File(parentLocation.getURL().getFile() + '/' + IRegistryConstants.RUNTIME_NAME);
-				registryLocations = new File[] {primaryDir, secondaryDir};
-				readOnlyLocations = new boolean[] {primaryReadOnly, true}; // secondary Eclipse location is always read only
-			} else {
-				registryLocations = new File[] {primaryDir};
-				readOnlyLocations = new boolean[] {primaryReadOnly};
-			}
-			strategy = new EquinoxRegistryStrategy(registryLocations, readOnlyLocations, masterRegistryKey);
-		}
-
-		defaultRegistry = RegistryFactory.createRegistry(strategy, masterRegistryKey, userRegistryKey);
-
-		registryRegistration = Activator.getContext().registerService(IExtensionRegistry.class.getName(), defaultRegistry, new Hashtable());
-		defaultProvider = new RegistryProviderOSGI();
-		// Set the registry provider and specify this as a default registry:
-		RegistryProviderFactory.setDefault(defaultProvider);
-		commandRegistration = EquinoxUtils.registerCommandProvider(Activator.getContext());
-	}
-
-	private void stopRegistry() {
-		if (defaultRegistry != null) {
-			RegistryProviderFactory.releaseDefault();
-			defaultProvider.release();
-			registryRegistration.unregister();
-			defaultRegistry.stop(masterRegistryKey);
-		}
-		if (commandRegistration != null)
-			commandRegistration.unregister();
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/osgi/EclipseBundleListener.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/osgi/EclipseBundleListener.java
deleted file mode 100644
index 99dd7a6..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/osgi/EclipseBundleListener.java
+++ /dev/null
@@ -1,206 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.registry.osgi;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.*;
-import org.eclipse.core.internal.registry.ExtensionRegistry;
-import org.eclipse.core.internal.registry.RegistryMessages;
-import org.eclipse.core.internal.runtime.ResourceTranslator;
-import org.eclipse.core.internal.runtime.RuntimeLog;
-import org.eclipse.core.runtime.*;
-import org.eclipse.osgi.util.ManifestElement;
-import org.eclipse.osgi.util.NLS;
-import org.osgi.framework.*;
-
-/**
- * A listener for bundle events.  When a bundles come and go we look to see 
- * if there are any extensions or extension points and update the registry accordingly.
- * Using a Synchronous listener here is important. If the
- * bundle activator code tries to access the registry to get its extension
- * points, we need to ensure that they are in the registry before the
- * bundle start is called. By listening sync we are able to ensure that
- * happens.
- */
-public class EclipseBundleListener implements SynchronousBundleListener {
-	private static final String PLUGIN_MANIFEST = "plugin.xml"; //$NON-NLS-1$
-	private static final String FRAGMENT_MANIFEST = "fragment.xml"; //$NON-NLS-1$	
-
-	private ExtensionRegistry registry;
-	private RegistryStrategyOSGI strategy;
-	private Object token;
-
-	public EclipseBundleListener(ExtensionRegistry registry, Object key, RegistryStrategyOSGI strategy) {
-		this.registry = registry;
-		this.token = key;
-		this.strategy = strategy;
-	}
-
-	public void bundleChanged(BundleEvent event) {
-		/* Only should listen for RESOLVED and UNRESOLVED events.  
-		 * 
-		 * When a bundle is updated the Framework will publish an UNRESOLVED and 
-		 * then a RESOLVED event which should cause the bundle to be removed 
-		 * and then added back into the registry.  
-		 * 
-		 * When a bundle is uninstalled the Framework should publish an UNRESOLVED 
-		 * event and then an UNINSTALLED event so the bundle will have been removed 
-		 * by the UNRESOLVED event before the UNINSTALLED event is published.
-		 * 
-		 * When a bundle is refreshed from PackageAdmin an UNRESOLVED event will be
-		 * published which will remove the bundle from the registry.  If the bundle
-		 * can be RESOLVED after a refresh then a RESOLVED event will be published 
-		 * which will add the bundle back.  This is required because the classloader
-		 * will have been refreshed for the bundle so all extensions and extension
-		 * points for the bundle must be refreshed.
-		 */
-		Bundle bundle = event.getBundle();
-		switch (event.getType()) {
-			case BundleEvent.RESOLVED :
-				addBundle(bundle);
-				break;
-			case BundleEvent.UNRESOLVED :
-				removeBundle(bundle);
-				break;
-		}
-	}
-
-	public void processBundles(Bundle[] bundles) {
-		for (int i = 0; i < bundles.length; i++) {
-			if (isBundleResolved(bundles[i]))
-				addBundle(bundles[i]);
-			else
-				removeBundle(bundles[i]);
-		}
-	}
-
-	private boolean isBundleResolved(Bundle bundle) {
-		return (bundle.getState() & (Bundle.RESOLVED | Bundle.ACTIVE | Bundle.STARTING | Bundle.STOPPING)) != 0;
-	}
-
-	private void removeBundle(Bundle bundle) {
-		long timestamp = 0;
-		if (strategy.checkContributionsTimestamp()) {
-			URL pluginManifest = getExtensionURL(bundle, false);
-			if (pluginManifest != null)
-				timestamp = strategy.getExtendedTimestamp(bundle, pluginManifest);
-		}
-		registry.remove(Long.toString(bundle.getBundleId()), timestamp);
-	}
-
-	static public URL getExtensionURL(Bundle bundle, boolean report) {
-		// bail out if system bundle
-		if (bundle.getBundleId() == 0)
-			return null;
-		// bail out if the bundle does not have a symbolic name
-		if (bundle.getSymbolicName() == null)
-			return null;
-
-		boolean isFragment = OSGIUtils.getDefault().isFragment(bundle);
-		String manifestName = isFragment ? FRAGMENT_MANIFEST : PLUGIN_MANIFEST;
-		URL extensionURL = bundle.getEntry(manifestName);
-		if (extensionURL == null)
-			return null;
-
-		// If the bundle is not a singleton, then it is not added
-		if (!isSingleton(bundle)) {
-			if (report) {
-				String message = NLS.bind(RegistryMessages.parse_nonSingleton, bundle.getLocation());
-				RuntimeLog.log(new Status(IStatus.INFO, RegistryMessages.OWNER_NAME, 0, message, null));
-			}
-			return null;
-		}
-		if (!isFragment)
-			return extensionURL;
-
-		// If the bundle is a fragment being added to a non singleton host, then it is not added
-		Bundle[] hosts = OSGIUtils.getDefault().getHosts(bundle);
-		if (hosts == null)
-			return null; // should never happen?
-
-		if (isSingleton(hosts[0]))
-			return extensionURL;
-
-		if (report) {
-			String message = NLS.bind(RegistryMessages.parse_nonSingleton, hosts[0].getLocation());
-			RuntimeLog.log(new Status(IStatus.INFO, RegistryMessages.OWNER_NAME, 0, message, null));
-		}
-		return null;
-	}
-
-	private void addBundle(Bundle bundle) {
-		String contributorId = Long.toString(bundle.getBundleId());
-		// if the given bundle already exists in the registry then return.
-		// note that this does not work for update cases.
-		if (registry.hasContribution(contributorId))
-			return;
-		URL pluginManifest = getExtensionURL(bundle, registry.debug());
-		if (pluginManifest == null)
-			return;
-		InputStream is;
-		try {
-			is = pluginManifest.openStream();
-		} catch (IOException ex) {
-			is = null;
-		}
-		if (is == null)
-			return;
-
-		ResourceBundle translationBundle = null;
-		try {
-			translationBundle = ResourceTranslator.getResourceBundle(bundle);
-		} catch (MissingResourceException e) {
-			//Ignore the exception
-		}
-		long timestamp = 0;
-		if (strategy.checkContributionsTimestamp())
-			timestamp = strategy.getExtendedTimestamp(bundle, pluginManifest);
-		IContributor contributor = ContributorFactoryOSGi.createContributor(bundle);
-		registry.addContribution(is, contributor, true, pluginManifest.getPath(), translationBundle, token, timestamp);
-
-		// bug 70941
-		// need to ensure we can find resource bundles from fragments
-		// The code below no longer seems necessary as all runtime plugins are installed
-		// before the corresponding Message classes are instantiated. 
-		//		if (RuntimeUtils.PI_RUNTIME.equals(bundleModel.getNamespace()))
-		//			Messages.reloadMessages();
-	}
-
-	private static boolean isSingleton(Bundle bundle) {
-		Dictionary allHeaders = bundle.getHeaders(""); //$NON-NLS-1$
-		String symbolicNameHeader = (String) allHeaders.get(Constants.BUNDLE_SYMBOLICNAME);
-		try {
-			if (symbolicNameHeader != null) {
-				ManifestElement[] symbolicNameElements = ManifestElement.parseHeader(Constants.BUNDLE_SYMBOLICNAME, symbolicNameHeader);
-				if (symbolicNameElements.length > 0) {
-					String singleton = symbolicNameElements[0].getDirective(Constants.SINGLETON_DIRECTIVE);
-					if (singleton == null)
-						singleton = symbolicNameElements[0].getAttribute(Constants.SINGLETON_DIRECTIVE);
-
-					if (!"true".equalsIgnoreCase(singleton)) { //$NON-NLS-1$
-						String manifestVersion = (String) allHeaders.get(org.osgi.framework.Constants.BUNDLE_MANIFESTVERSION);
-						if (manifestVersion == null) {//the header was not defined for previous versions of the bundle
-							//3.0 bundles without a singleton attributes are still being accepted
-							if (OSGIUtils.getDefault().getBundle(symbolicNameElements[0].getValue()) == bundle)
-								return true;
-						}
-						return false;
-					}
-				}
-			}
-		} catch (BundleException e1) {
-			//This can't happen because the fwk would have rejected the bundle
-		}
-		return true;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/osgi/EquinoxRegistryStrategy.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/osgi/EquinoxRegistryStrategy.java
deleted file mode 100644
index 3073874..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/osgi/EquinoxRegistryStrategy.java
+++ /dev/null
@@ -1,111 +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.core.internal.registry.osgi;
-
-import java.io.File;
-import java.util.Map;
-import org.eclipse.core.internal.registry.RegistryMessages;
-import org.eclipse.core.internal.runtime.RuntimeLog;
-import org.eclipse.core.runtime.*;
-import org.eclipse.core.runtime.jobs.ISchedulingRule;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.core.runtime.spi.RegistryStrategy;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
-
-/**
- * The registry strategy used by the Equinox extension registry. Adds to the
- * OSGi registry:
- * <p><ul>
- * <li>Use debug information supplied via .options files</li> 
- * <li>Use Eclipse logging - Use Eclipse platform state for cache validation</li>
- * <li>Event scheduling is done using Eclipse job scheduling mechanism</li>
- * </ul></p> 
- * 
- * @since org.eclipse.equinox.registry 3.2
- */
-public class EquinoxRegistryStrategy extends RegistryStrategyOSGI {
-
-	public static final String PLUGIN_NAME = "org.eclipse.equinox.registry"; //$NON-NLS-1$
-	public static final String OPTION_DEBUG = PLUGIN_NAME + "/debug"; //$NON-NLS-1$
-	public static final String OPTION_DEBUG_EVENTS = PLUGIN_NAME + "/debug/events"; //$NON-NLS-1$
-
-	private static boolean DEBUG_ECLIPSE_REGISTRY = OSGIUtils.getDefault().getBooleanDebugOption(OPTION_DEBUG, false);
-	private static boolean DEBUG_ECLIPSE_EVENTS = OSGIUtils.getDefault().getBooleanDebugOption(OPTION_DEBUG_EVENTS, false);
-
-	public EquinoxRegistryStrategy(File[] theStorageDir, boolean[] cacheReadOnly, Object key) {
-		super(theStorageDir, cacheReadOnly, key);
-	}
-
-	public boolean debug() {
-		return DEBUG_ECLIPSE_REGISTRY;
-	}
-
-	public boolean debugRegistryEvents() {
-		return DEBUG_ECLIPSE_EVENTS;
-	}
-
-	public final void log(IStatus status) {
-		RuntimeLog.log(status);
-	}
-
-	public long getContainerTimestamp() {
-		BundleContext context = Activator.getContext();
-		if (context == null) {
-			RuntimeLog.log(new Status(IStatus.ERROR, RegistryMessages.OWNER_NAME, 0, RegistryMessages.bundle_not_activated, null));
-			return -1;
-		}
-		// use a string here instead of the class to prevent class loading.
-		ServiceReference ref = context.getServiceReference("org.eclipse.osgi.service.resolver.PlatformAdmin"); //$NON-NLS-1$
-		if (ref == null)
-			return -1;
-		return EquinoxUtils.getContainerTimestamp(context, ref);
-	}
-
-	//////////////////////////////////////////////////////////////////////////////////////////
-	// Use Eclipse job scheduling mechanism
-
-	private final static class ExtensionEventDispatcherJob extends Job {
-		// an "identy rule" that forces extension events to be queued		
-		private final static ISchedulingRule EXTENSION_EVENT_RULE = new ISchedulingRule() {
-			public boolean contains(ISchedulingRule rule) {
-				return rule == this;
-			}
-
-			public boolean isConflicting(ISchedulingRule rule) {
-				return rule == this;
-			}
-		};
-		private Map deltas;
-		private Object[] listenerInfos;
-		private Object registry;
-
-		public ExtensionEventDispatcherJob(Object[] listenerInfos, Map deltas, Object registry) {
-			// name not NL'd since it is a system job
-			super("Registry event dispatcher"); //$NON-NLS-1$
-			setSystem(true);
-			this.listenerInfos = listenerInfos;
-			this.deltas = deltas;
-			this.registry = registry;
-			// all extension event dispatching jobs use this rule
-			setRule(EXTENSION_EVENT_RULE);
-		}
-
-		public IStatus run(IProgressMonitor monitor) {
-			return RegistryStrategy.processChangeEvent(listenerInfos, deltas, registry);
-		}
-	}
-
-	public final void scheduleChangeEvent(Object[] listeners, Map deltas, Object registry) {
-		new ExtensionEventDispatcherJob(listeners, deltas, registry).schedule();
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/osgi/EquinoxUtils.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/osgi/EquinoxUtils.java
deleted file mode 100644
index fee1d04..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/osgi/EquinoxUtils.java
+++ /dev/null
@@ -1,68 +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.registry.osgi;
-
-import org.eclipse.osgi.service.environment.EnvironmentInfo;
-import org.eclipse.osgi.service.resolver.PlatformAdmin;
-import org.osgi.framework.*;
-
-/**
- * The class contains a set of Equinox-specific helper methods. The methods were isolated
- * into separate class to prevent an attempt to load Equinox classes in a generic OSGi
- * environment.
- * 
- * This class uses OSGi services.
- * 
- * @since org.eclipse.equinox.registry 3.2.100
- */
-public class EquinoxUtils {
-
-	/**
-	 * Get the command line arguments from the EnvironmentInfo service
-	 */
-	public static String[] getCommandLine(BundleContext context, ServiceReference ref) {
-		if (ref == null)
-			return null;
-		try {
-			EnvironmentInfo environmentInfo = (EnvironmentInfo) context.getService(ref);
-			return environmentInfo == null ? null : environmentInfo.getNonFrameworkArgs();
-		} finally {
-			context.ungetService(ref);
-		}
-	}
-
-	/**
-	 * Get the time stamp from the PlatformAdmin service.
-	 */
-	public static long getContainerTimestamp(BundleContext context, ServiceReference ref) {
-		if (ref == null)
-			return -1;
-		try {
-			PlatformAdmin admin = (PlatformAdmin) context.getService(ref);
-			return admin == null ? -1 : admin.getState(false).getTimeStamp();
-		} finally {
-			context.ungetService(ref);
-		}
-	}
-
-	public static ServiceRegistration registerCommandProvider(BundleContext context) {
-		// try to register the registry command provider
-		try {
-			// refer to the CommandProvider by name here so that even if VM
-			// decides to pre-fetch all referred classes the expection will occur
-			// inside the exception holder
-			return context.registerService("org.eclipse.osgi.framework.console.CommandProvider", new RegistryCommandProvider(), null); //$NON-NLS-1$
-		} catch (NoClassDefFoundError noClass) {
-			// expected if CommandProvider is not available
-		}
-		return null;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/osgi/OSGIUtils.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/osgi/OSGIUtils.java
deleted file mode 100644
index 360bf31..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/osgi/OSGIUtils.java
+++ /dev/null
@@ -1,157 +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.core.internal.registry.osgi;
-
-import org.eclipse.core.internal.registry.RegistryMessages;
-import org.eclipse.core.internal.runtime.RuntimeLog;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.osgi.service.datalocation.Location;
-import org.eclipse.osgi.service.debug.DebugOptions;
-import org.osgi.framework.*;
-import org.osgi.service.packageadmin.PackageAdmin;
-import org.osgi.util.tracker.ServiceTracker;
-
-/**
- * The class contains a set of helper methods for the runtime content plugin.
- * The closeServices() method should be called before the plugin is stopped. 
- * 
- * @since org.eclipse.equinox.registry 3.2
- */
-public class OSGIUtils {
-	private ServiceTracker debugTracker = null;
-	private ServiceTracker bundleTracker = null;
-	private ServiceTracker configurationLocationTracker = null;
-
-	// OSGI system properties.  Copied from EclipseStarter
-	public static final String PROP_CONFIG_AREA = "osgi.configuration.area"; //$NON-NLS-1$
-	public static final String PROP_INSTANCE_AREA = "osgi.instance.area"; //$NON-NLS-1$
-
-	private static final OSGIUtils singleton = new OSGIUtils();
-
-	public static OSGIUtils getDefault() {
-		return singleton;
-	}
-
-	/**
-	 * Private constructor to block instance creation.
-	 */
-	private OSGIUtils() {
-		super();
-		initServices();
-	}
-
-	private void initServices() {
-		BundleContext context = Activator.getContext();
-		if (context == null) {
-			RuntimeLog.log(new Status(IStatus.ERROR, RegistryMessages.OWNER_NAME, 0, RegistryMessages.bundle_not_activated, null));
-			return;
-		}
-
-		debugTracker = new ServiceTracker(context, DebugOptions.class.getName(), null);
-		debugTracker.open();
-
-		bundleTracker = new ServiceTracker(context, PackageAdmin.class.getName(), null);
-		bundleTracker.open();
-
-		// locations
-		final String FILTER_PREFIX = "(&(objectClass=org.eclipse.osgi.service.datalocation.Location)(type="; //$NON-NLS-1$
-		Filter filter = null;
-		try {
-			filter = context.createFilter(FILTER_PREFIX + PROP_CONFIG_AREA + "))"); //$NON-NLS-1$
-		} catch (InvalidSyntaxException e) {
-			// ignore this.  It should never happen as we have tested the above format.
-		}
-		configurationLocationTracker = new ServiceTracker(context, filter, null);
-		configurationLocationTracker.open();
-
-	}
-
-	void closeServices() {
-		if (debugTracker != null) {
-			debugTracker.close();
-			debugTracker = null;
-		}
-		if (bundleTracker != null) {
-			bundleTracker.close();
-			bundleTracker = null;
-		}
-		if (configurationLocationTracker != null) {
-			configurationLocationTracker.close();
-			configurationLocationTracker = null;
-		}
-	}
-
-	public boolean getBooleanDebugOption(String option, boolean defaultValue) {
-		if (debugTracker == null) {
-			RuntimeLog.log(new Status(IStatus.ERROR, RegistryMessages.OWNER_NAME, 0, RegistryMessages.bundle_not_activated, null));
-			return defaultValue;
-		}
-		DebugOptions options = (DebugOptions) debugTracker.getService();
-		if (options != null) {
-			String value = options.getOption(option);
-			if (value != null)
-				return value.equalsIgnoreCase("true"); //$NON-NLS-1$
-		}
-		return defaultValue;
-	}
-
-	public PackageAdmin getPackageAdmin() {
-		if (bundleTracker == null) {
-			RuntimeLog.log(new Status(IStatus.ERROR, RegistryMessages.OWNER_NAME, 0, RegistryMessages.bundle_not_activated, null));
-			return null;
-		}
-		return (PackageAdmin) bundleTracker.getService();
-	}
-
-	public Bundle getBundle(String bundleName) {
-		PackageAdmin packageAdmin = getPackageAdmin();
-		if (packageAdmin == null)
-			return null;
-		Bundle[] bundles = packageAdmin.getBundles(bundleName, 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;
-	}
-
-	public Bundle[] getFragments(Bundle bundle) {
-		PackageAdmin packageAdmin = getPackageAdmin();
-		if (packageAdmin == null)
-			return null;
-		return packageAdmin.getFragments(bundle);
-	}
-
-	public boolean isFragment(Bundle bundle) {
-		PackageAdmin packageAdmin = getPackageAdmin();
-		if (packageAdmin == null)
-			return false;
-		return (packageAdmin.getBundleType(bundle) & PackageAdmin.BUNDLE_TYPE_FRAGMENT) > 0;
-	}
-
-	public Bundle[] getHosts(Bundle bundle) {
-		PackageAdmin packageAdmin = getPackageAdmin();
-		if (packageAdmin == null)
-			return null;
-		return packageAdmin.getHosts(bundle);
-	}
-
-	public Location getConfigurationLocation() {
-		if (configurationLocationTracker == null)
-			return null;
-		return (Location) configurationLocationTracker.getService();
-	}
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/osgi/RegistryCommandProvider.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/osgi/RegistryCommandProvider.java
deleted file mode 100644
index ab76cc1..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/osgi/RegistryCommandProvider.java
+++ /dev/null
@@ -1,133 +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.registry.osgi;
-
-import org.eclipse.core.runtime.*;
-import org.eclipse.osgi.framework.console.CommandInterpreter;
-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"; //$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;
-	}
-
-	public void _ns(CommandInterpreter ci) throws Exception {
-		String namespace = getArgument(ci);
-		if (namespace == null) {
-			String[] namespaces = RegistryFactory.getRegistry().getNamespaces();
-			ci.println("Namespace(s):"); //$NON-NLS-1$
-			ci.println("-------------------"); //$NON-NLS-1$
-			for (int i = 0; i < namespaces.length; i++)
-				ci.println(namespaces[i]);
-			return;
-		}
-
-		IExtensionRegistry registry = RegistryFactory.getRegistry();
-		IExtensionPoint[] extpts = registry.getExtensionPoints(namespace);
-		ci.println("Extension point(s):"); //$NON-NLS-1$
-		ci.println("-------------------"); //$NON-NLS-1$
-		for (int i = 0; i < extpts.length; i++)
-			displayExtensionPoint(extpts[i], ci);
-
-		if (verbose) {
-			ci.println("\nExtension(s):"); //$NON-NLS-1$
-			ci.println("-------------------"); //$NON-NLS-1$
-			IExtension[] exts = RegistryFactory.getRegistry().getExtensions(namespace);
-			for (int j = 0; j < exts.length; j++)
-				displayExtension(exts[j], ci, true /*full*/);
-		}
-	}
-
-	public void _pt(CommandInterpreter ci) throws Exception {
-		String extensionPointId = getArgument(ci);
-		if (extensionPointId == null)
-			return;
-		IExtensionPoint extpt = RegistryFactory.getRegistry().getExtensionPoint(extensionPointId);
-		if (extpt == null)
-			return;
-		ci.print("Extension point: "); //$NON-NLS-1$
-		displayExtensionPoint(extpt, ci);
-		IExtension[] exts = extpt.getExtensions();
-		ci.println("\nExtension(s):"); //$NON-NLS-1$
-		ci.println("-------------------"); //$NON-NLS-1$
-		for (int i = 0; i < exts.length; i++) {
-			displayExtension(exts[i], ci, false /*short*/);
-			if (verbose) {
-				IConfigurationElement[] ce = exts[i].getConfigurationElements();
-				for (int j = 0; j < ce.length; j++)
-					displayConfigElement(ci, ce[j], 1);
-				ci.println();
-			}
-		}
-	}
-
-	// This method has a side effect of setting the verbose flag
-	private String getArgument(CommandInterpreter ci) {
-		String firstParm = ci.nextArgument();
-		if ("-v".equals(firstParm)) { //$NON-NLS-1$
-			verbose = true;
-			return ci.nextArgument();
-		}
-
-		verbose = false;
-		return firstParm;
-	}
-
-	private void displayExtensionPoint(IExtensionPoint extentionPoint, CommandInterpreter ci) {
-		if (extentionPoint == null)
-			return;
-		ci.println(extentionPoint.getUniqueIdentifier() + " [from " + extentionPoint.getContributor().getName() + ']'); //$NON-NLS-1$
-	}
-
-	private void displayExtension(IExtension extention, CommandInterpreter ci, boolean full) {
-		if (extention == null)
-			return;
-		if (full) {
-			ci.print("Id: " + extention.getUniqueIdentifier()); //$NON-NLS-1$
-			ci.print(" PointId: " + extention.getExtensionPointUniqueIdentifier()); //$NON-NLS-1$
-			ci.println(" [from " + extention.getContributor().getName() + "]"); //$NON-NLS-1$ //$NON-NLS-2$
-		} else {
-			ci.println(extention.getUniqueIdentifier() + " [from " + extention.getContributor().getName() + "]"); //$NON-NLS-1$ //$NON-NLS-2$
-		}
-	}
-
-	private void displayConfigElement(CommandInterpreter ci, IConfigurationElement ce, int level) throws Exception {
-		String spacing = spacing(ci, level);
-		ci.println(spacing + '<' + ce.getName() + '>');
-		String[] attrs = ce.getAttributeNames();
-		for (int k = 0; k < attrs.length; k++)
-			ci.println(indent + spacing + attrs[k] + " = " + ce.getAttribute(attrs[k])); //$NON-NLS-1$
-		String value = ce.getValue();
-		if (value != null)
-			ci.println(indent + spacing + value);
-		IConfigurationElement[] children = ce.getChildren();
-		for (int z = 0; z < children.length; z++)
-			displayConfigElement(ci, children[z], level + 1);
-		ci.println(spacing + "</" + ce.getName() + '>'); //$NON-NLS-1$
-	}
-
-	private String spacing(CommandInterpreter ci, int level) {
-		StringBuffer b = new StringBuffer();
-		for (int i = 0; i < level; i++)
-			b.append(indent);
-		return b.toString();
-	}
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/osgi/RegistryProviderOSGI.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/osgi/RegistryProviderOSGI.java
deleted file mode 100644
index 564d0eb..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/osgi/RegistryProviderOSGI.java
+++ /dev/null
@@ -1,49 +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.registry.osgi;
-
-import org.eclipse.core.internal.registry.RegistryMessages;
-import org.eclipse.core.internal.runtime.RuntimeLog;
-import org.eclipse.core.runtime.*;
-import org.eclipse.core.runtime.spi.IRegistryProvider;
-import org.osgi.framework.BundleContext;
-import org.osgi.util.tracker.ServiceTracker;
-
-public final class RegistryProviderOSGI implements IRegistryProvider {
-
-	private ServiceTracker registryTracker = null;
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.registry.IRegistryProvider#getRegistry()
-	 */
-	public IExtensionRegistry getRegistry() {
-		if (registryTracker == null) {
-			BundleContext context = Activator.getContext();
-			if (context == null) {
-				RuntimeLog.log(new Status(IStatus.ERROR, RegistryMessages.OWNER_NAME, 0, RegistryMessages.bundle_not_activated, null));
-				return null;
-			}
-			registryTracker = new ServiceTracker(context, IExtensionRegistry.class.getName(), null);
-			registryTracker.open();
-		}
-		return (IExtensionRegistry) registryTracker.getService();
-	}
-
-	/**
-	 * Release OSGi tracker
-	 */
-	public void release() {
-		if (registryTracker != null) {
-			registryTracker.close();
-			registryTracker = null;
-		}
-	}
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/osgi/RegistryStrategyOSGI.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/osgi/RegistryStrategyOSGI.java
deleted file mode 100644
index 46c195e..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/osgi/RegistryStrategyOSGI.java
+++ /dev/null
@@ -1,289 +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.core.internal.registry.osgi;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.URL;
-import java.util.ResourceBundle;
-import javax.xml.parsers.SAXParserFactory;
-import org.eclipse.core.internal.registry.*;
-import org.eclipse.core.internal.runtime.ResourceTranslator;
-import org.eclipse.core.runtime.*;
-import org.eclipse.core.runtime.spi.*;
-import org.eclipse.osgi.util.NLS;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.osgi.util.tracker.ServiceTracker;
-
-/**
- * The registry strategy that can be used in OSGi world. It provides the following functionality:
- * <p><ul>
- * <li>Translation is done with ResourceTranslator</li>
- * <li>Registry is filled with information stored in plugin.xml / fragment.xml of OSGi bundles</li>
- * <li>Uses bunlde-based class loading to create executable extensions</li>
- * <li>Performs registry validation based on the time stamps of the plugin.xml / fragment.xml files</li>
- * <li>XML parser is obtained via an OSGi service</li>
- *  </ul></p>
- * @see RegistryFactory#setDefaultRegistryProvider(IRegistryProvider)
- * @since org.eclipse.equinox.registry 3.2
- */
-
-public class RegistryStrategyOSGI extends RegistryStrategy {
-
-	/**
-	 * Registry access key
-	 */
-	private Object token;
-
-	/**
-	 * Debug extension registry
-	 */
-	protected boolean DEBUG;
-
-	/**
-	 * Debug extension registry events
-	 */
-	protected boolean DEBUG_REGISTRY_EVENTS;
-
-	/**
-	 * Tracker for the XML parser service
-	 */
-	private ServiceTracker xmlTracker = null;
-
-	/**
-	 * Value of the query "should we track contributions timestamps" is cached
-	 * in this variable
-	 */
-	private boolean trackTimestamp;
-
-	/**
-	 * @param theStorageDir - array of file system directories to store cache files; might be null
-	 * @param cacheReadOnly - array of read only attributes. True: cache at this location is read 
-	 * only; false: cache is read/write
-	 * @param key - control key for the registry (should be the same key as used in 
-	 * the RegistryManager#createExtensionRegistry() of this registry
-	 */
-	public RegistryStrategyOSGI(File[] theStorageDir, boolean[] cacheReadOnly, Object key) {
-		super(theStorageDir, cacheReadOnly);
-		token = key;
-
-		// Only do timestamp calculations if osgi.checkConfiguration is set to "true" (typically, 
-		// this implies -dev mode)
-		BundleContext context = Activator.getContext();
-		if (context != null)
-			trackTimestamp = "true".equalsIgnoreCase(context.getProperty(IRegistryConstants.PROP_CHECK_CONFIG));
-		else
-			trackTimestamp = false;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.runtime.spi.RegistryStrategy#translate(java.lang.String, java.util.ResourceBundle)
-	 */
-	public final String translate(String key, ResourceBundle resources) {
-		return ResourceTranslator.getResourceString(null, key, resources);
-	}
-
-	////////////////////////////////////////////////////////////////////////////////////////
-	// Use OSGi bundles for namespace resolution (contributors: plugins and fragments)
-
-	/**
-	 * The default load factor for the bundle cache. 
-	 */
-	private static float DEFAULT_BUNDLECACHE_LOADFACTOR = 0.75f;
-
-	/**
-	 * The expected bundle cache size (calculated as a number of bundles divided 
-	 * by the DEFAULT_BUNDLECACHE_LOADFACTOR). The bundle cache will be resized 
-	 * automatically is this number is exceeded. 
-	 */
-	private static int DEFAULT_BUNDLECACHE_SIZE = 200;
-
-	/**
-	 * For performance, we cache mapping of IDs to Bundles.
-	 * 
-	 * We don't expect mapping to change during the runtime. (Or, in the OSGI terms,
-	 * we don't expect bundle IDs to be reused during the Eclipse run.)
-	 * The Bundle object is stored as a weak reference to facilitate GC
-	 * in case the bundle was uninstalled during the Eclipse run.
-	 */
-	private ReferenceMap bundleMap = new ReferenceMap(ReferenceMap.SOFT, DEFAULT_BUNDLECACHE_SIZE, DEFAULT_BUNDLECACHE_LOADFACTOR);
-
-	// String Id to OSGi Bundle conversion
-	private Bundle getBundle(String id) {
-		if (id == null)
-			return null;
-		long OSGiId;
-		try {
-			OSGiId = Long.parseLong(id);
-		} catch (NumberFormatException e) {
-			return null;
-		}
-		// We assume here that OSGI Id will fit into "int". As the number of 
-		// registry elements themselves are expected to fit into "int", this
-		// is a valid assumption for the time being.
-		Bundle bundle = (Bundle) bundleMap.get((int) OSGiId);
-		if (bundle != null)
-			return bundle;
-		bundle = Activator.getContext().getBundle(OSGiId);
-		bundleMap.put((int) OSGiId, bundle);
-		return bundle;
-	}
-
-	/////////////////////////////////////////////////////////////////////////////////////
-	// Executable extensions: bundle-based class loading
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.runtime.spi.RegistryStrategy#createExecutableExtension(org.eclipse.core.runtime.spi.RegistryContributor, java.lang.String, java.lang.String)
-	 */
-	public Object createExecutableExtension(RegistryContributor contributor, String className, String overridenContributorName) throws CoreException {
-		Bundle contributingBundle;
-		if (overridenContributorName != null && !overridenContributorName.equals("")) //$NON-NLS-1$
-			contributingBundle = OSGIUtils.getDefault().getBundle(overridenContributorName);
-		else
-			contributingBundle = getBundle(contributor.getId());
-
-		if (contributingBundle == null)
-			throwException(NLS.bind(RegistryMessages.plugin_loadClassError, "UNKNOWN BUNDLE", className), new InvalidRegistryObjectException()); //$NON-NLS-1$ 
-
-		// load the requested class from this bundle
-		Class classInstance = null;
-		try {
-			classInstance = contributingBundle.loadClass(className);
-		} catch (Exception e1) {
-			throwException(NLS.bind(RegistryMessages.plugin_loadClassError, contributingBundle.getSymbolicName(), className), e1);
-		} catch (LinkageError e) {
-			throwException(NLS.bind(RegistryMessages.plugin_loadClassError, contributingBundle.getSymbolicName(), className), e);
-		}
-
-		// create a new instance
-		Object result = null;
-		try {
-			result = classInstance.newInstance();
-		} catch (Exception e) {
-			throwException(NLS.bind(RegistryMessages.plugin_instantiateClassError, contributingBundle.getSymbolicName(), className), e);
-		}
-		return result;
-	}
-
-	private void throwException(String message, Throwable exception) throws CoreException {
-		throw new CoreException(new Status(IStatus.ERROR, RegistryMessages.OWNER_NAME, IRegistryConstants.PLUGIN_ERROR, message, exception));
-	}
-
-	/////////////////////////////////////////////////////////////////////////////////////
-	// Start / stop extra processing: adding bundle listener; fill registry if not filled from cache
-
-	/**
-	 * Listening to the bundle events.
-	 */
-	private EclipseBundleListener pluginBundleListener = null;
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.runtime.spi.RegistryStrategy#onStart(org.eclipse.core.runtime.IExtensionRegistry)
-	 */
-	public void onStart(IExtensionRegistry registry) {
-		super.onStart(registry);
-		if (!(registry instanceof ExtensionRegistry))
-			return;
-		ExtensionRegistry theRegistry = (ExtensionRegistry) registry;
-
-		// register a listener to catch new bundle installations/resolutions.
-		pluginBundleListener = new EclipseBundleListener(theRegistry, token, this);
-		Activator.getContext().addBundleListener(pluginBundleListener);
-
-		// populate the registry with all the currently installed bundles.
-		// There is a small window here while processBundles is being
-		// called where the pluginBundleListener may receive a BundleEvent 
-		// to add/remove a bundle from the registry.  This is ok since
-		// the registry is a synchronized object and will not add the
-		// same bundle twice.
-		if (!theRegistry.filledFromCache())
-			pluginBundleListener.processBundles(Activator.getContext().getBundles());
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.runtime.spi.RegistryStrategy#onStop(org.eclipse.core.runtime.IExtensionRegistry)
-	 */
-	public void onStop(IExtensionRegistry registry) {
-		if (pluginBundleListener != null)
-			Activator.getContext().removeBundleListener(pluginBundleListener);
-		if (xmlTracker != null) {
-			xmlTracker.close();
-			xmlTracker = null;
-		}
-		super.onStop(registry);
-	}
-
-	//////////////////////////////////////////////////////////////////////////////////////
-	// Cache strategy
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.runtime.spi.RegistryStrategy#cacheUse()
-	 */
-	public boolean cacheUse() {
-		return !"true".equals(RegistryProperties.getProperty(IRegistryConstants.PROP_NO_REGISTRY_CACHE)); //$NON-NLS-1$
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.runtime.spi.RegistryStrategy#cacheLazyLoading()
-	 */
-	public boolean cacheLazyLoading() {
-		return !("true".equalsIgnoreCase(RegistryProperties.getProperty(IRegistryConstants.PROP_NO_LAZY_CACHE_LOADING))); //$NON-NLS-1$
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.runtime.spi.RegistryStrategy#getContributionsTimestamp()
-	 */
-	public long getContributionsTimestamp() {
-		if (!checkContributionsTimestamp())
-			return 0;
-		RegistryTimestamp expectedTimestamp = new RegistryTimestamp();
-		BundleContext context = Activator.getContext();
-		Bundle[] allBundles = context.getBundles();
-		for (int i = 0; i < allBundles.length; i++) {
-			URL pluginManifest = EclipseBundleListener.getExtensionURL(allBundles[i], false);
-			if (pluginManifest == null)
-				continue;
-			long timestamp = getExtendedTimestamp(allBundles[i], pluginManifest);
-			expectedTimestamp.add(timestamp);
-		}
-		return expectedTimestamp.getContentsTimestamp();
-	}
-
-	public boolean checkContributionsTimestamp() {
-		return trackTimestamp;
-	}
-
-	public long getExtendedTimestamp(Bundle bundle, URL pluginManifest) {
-		if (pluginManifest == null)
-			return 0;
-		try {
-			 return pluginManifest.openConnection().getLastModified() + bundle.getBundleId();
-		} catch (IOException e) {
-			if (debug()) {
-				System.out.println("Unable to obtain timestamp for the bundle " + bundle.getSymbolicName());
-				e.printStackTrace();
-			}
-			return 0;
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.runtime.spi.RegistryStrategy#getXMLParser()
-	 */
-	public SAXParserFactory getXMLParser() {
-		if (xmlTracker == null) {
-			xmlTracker = new ServiceTracker(Activator.getContext(), SAXParserFactory.class.getName(), null);
-			xmlTracker.open();
-		}
-		return (SAXParserFactory) xmlTracker.getService();
-	}
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/spi/ConfigurationElementAttribute.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/spi/ConfigurationElementAttribute.java
deleted file mode 100644
index fd9b2a1..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/spi/ConfigurationElementAttribute.java
+++ /dev/null
@@ -1,72 +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.core.internal.registry.spi;
-
-import org.eclipse.core.runtime.IConfigurationElement;
-
-/**
- * Describes properties of configuration elements to be added to the registry. 
- * Properties are represented as pairs of strings: {attribute name; attribute value}.
- * <p>
- * It is expected that both attribute name and attribute value are not null.
- * </p>
- * <p>
- * This class can be instantited.
- * </p>
- * <p>
- * This class is not intended to be subclassed.
- * </p>
- * @see ConfigurationElementDescription
- * @see IConfigurationElement
- */
-public final class ConfigurationElementAttribute {
-
-	/**
-	 * Attribute name.
-	 * @see IConfigurationElement#getAttributeNames()
-	 */
-	private String name;
-
-	/**
-	 * Attribute value.
-	 * @see IConfigurationElement#getAttributeAsIs(String)
-	 */
-	private String value;
-
-	/**
-	 * Constructor.
-	 * 
-	 * @param name attribute name
-	 * @param value attribute value
-	 */
-	public ConfigurationElementAttribute(String name, String value) {
-		this.name = name;
-		this.value = value;
-	}
-
-	/**
-	 * Returns attribute name.
-	 * @return attribute name
-	 * @see IConfigurationElement#getAttributeNames()
-	 */
-	public String getName() {
-		return name;
-	}
-
-	/**
-	 * Returns value of the attribute.
-	 * @return attribute value
-	 * @see IConfigurationElement#getAttributeAsIs(String)
-	 */
-	public String getValue() {
-		return value;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/spi/ConfigurationElementDescription.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/spi/ConfigurationElementDescription.java
deleted file mode 100644
index d754547..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/internal/registry/spi/ConfigurationElementDescription.java
+++ /dev/null
@@ -1,131 +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.core.internal.registry.spi;
-
-import org.eclipse.core.runtime.IConfigurationElement;
-
-/**
- * Describes configuration elements (content of an extension) to be added to 
- * the extension registry. Configuration element can contain attributes or 
- * a String value. Configuration element can contain other configuration 
- * elements (children).
- * <p>
- * It is expected that configuration element's name is not null. Attributes and 
- * children of the extension description might be null; value might be null as well.
- * </p>
- * <p>
- * This class can be instantiated.
- * </p>
- * <p>
- * This class is not intended to be subclassed.
- * </p>
- * @see ConfigurationElementAttribute
- */
-public final class ConfigurationElementDescription {
-
-	/**
-	 * Name of the configuration element.
-	 * @see IConfigurationElement#getName()
-	 */
-	private String name;
-
-	/**
-	 * Attributes of the configuration element.
-	 * @see IConfigurationElement#getAttribute(String)
-	 */
-	private ConfigurationElementAttribute[] attributes;
-
-	/**
-	 * String value to be stored in this configuration element.
-	 * @see IConfigurationElement#getValue()
-	 */
-	private String value;
-
-	/**
-	 * Children of the configuration element.
-	 * @see IConfigurationElement#getChildren() 
-	 */
-	private ConfigurationElementDescription[] children;
-
-	/**
-	 * Constructor.
-	 * 
-	 * @param name - name of the configuration element
-	 * @param attributes - attributes of the configuration element. Might be null.
-	 * @param value - string value to be stored. Might be null.
-	 * @param children - children of the configuration element. Might be null.
-	 * @see IConfigurationElement#getName()
-	 * @see IConfigurationElement#getChildren() 
-	 * @see IConfigurationElement#getAttribute(String)
-	 * @see IConfigurationElement#getValue()
-	 */
-	public ConfigurationElementDescription(String name, ConfigurationElementAttribute[] attributes, String value, ConfigurationElementDescription[] children) {
-		this.name = name;
-		this.attributes = attributes;
-		this.value = value;
-		this.children = children;
-	}
-
-	/**
-	 * Constructor.
-	 * 
-	 * @param name - name of the configuration element
-	 * @param attribute - attribute of the configuration element. Might be null.
-	 * @param value - string value to be stored. Might be null.
-	 * @param children - children of the configuration element. Might be null.
-	 * @see IConfigurationElement#getName()
-	 * @see IConfigurationElement#getChildren() 
-	 * @see IConfigurationElement#getAttribute(String)
-	 * @see IConfigurationElement#getValue()
-	 */
-	public ConfigurationElementDescription(String name, ConfigurationElementAttribute attribute, String value, ConfigurationElementDescription[] children) {
-		this.name = name;
-		this.attributes = new ConfigurationElementAttribute[] {attribute};
-		this.value = value;
-		this.children = children;
-	}
-
-	/**
-	 * Returns children of the configuration element.
-	 * @return - children of the extension
-	 * @see IConfigurationElement#getChildren() 
-	 */
-	public ConfigurationElementDescription[] getChildren() {
-		return children;
-	}
-
-	/**
-	 * Returns name of the configuration element.
-	 * @return - extension name
-	 * @see IConfigurationElement#getName()
-	 */
-	public String getName() {
-		return name;
-	}
-
-	/**
-	 * Returns attributes of the configuration element.
-	 * @return - attributes of the extension description
-	 * @see IConfigurationElement#getAttribute(String)
-	 */
-	public ConfigurationElementAttribute[] getAttributes() {
-		return attributes;
-	}
-
-	/**
-	 * Returns string value stored in the configuration element.
-	 * @return - String value to be stored in the element
-	 * @see IConfigurationElement#getValue()
-	 */
-	public String getValue() {
-		return value;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/ContributorFactoryOSGi.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/ContributorFactoryOSGi.java
deleted file mode 100644
index d096ece..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/ContributorFactoryOSGi.java
+++ /dev/null
@@ -1,58 +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.runtime;
-
-import org.eclipse.core.internal.registry.osgi.OSGIUtils;
-import org.eclipse.core.runtime.spi.RegistryContributor;
-import org.osgi.framework.Bundle;
-
-/**
- * The contributor factory creates new registry contributors for use in OSGi-based 
- * registries. 
- * <p>
- * This class can not be extended or instantiated by clients.
- * </p><p>
- * <b>Note:</b> This class/interface is part of an interim API that is still under 
- * development and expected to change significantly before reaching stability. 
- * It is being made available at this early stage to solicit feedback from pioneering 
- * adopters on the understanding that any code that uses this API will almost certainly 
- * be broken (repeatedly) as the API evolves.
- * </p>
- * @since org.eclipse.equinox.registry 3.2
- */
-public final class ContributorFactoryOSGi {
-
-	/**
-	 * Creates registry contributor object based on a Bundle. The bundle must not 
-	 * be <code>null</code>.
-	 * 
-	 * @param contributor bundle associated with the contribution
-	 * @return new registry contributor based on the Bundle
-	 */
-	public static IContributor createContributor(Bundle contributor) {
-		String id = Long.toString(contributor.getBundleId());
-		String name = contributor.getSymbolicName();
-		String hostId = null;
-		String hostName = null;
-
-		// determine host properties, if any
-		if (OSGIUtils.getDefault().isFragment(contributor)) {
-			Bundle[] hosts = OSGIUtils.getDefault().getHosts(contributor);
-			if (hosts != null) {
-				Bundle hostBundle = hosts[0];
-				hostId = Long.toString(hostBundle.getBundleId());
-				hostName = hostBundle.getSymbolicName();
-			}
-		}
-
-		return new RegistryContributor(id, name, hostId, hostName);
-	}
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/ContributorFactorySimple.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/ContributorFactorySimple.java
deleted file mode 100644
index e87be30..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/ContributorFactorySimple.java
+++ /dev/null
@@ -1,44 +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.runtime;
-
-import org.eclipse.core.runtime.spi.RegistryContributor;
-
-/**
- * The contributor factory creates new registry contributors for use in a simple
- * registry based on the String representation of the determining object.
- * <p>
- * This class can be used without OSGi running.
- * </p><p>
- * This class can not be extended or instantiated by clients.
- * </p><p>
- * <b>Note:</b> This class/interface is part of an interim API that is still under 
- * development and expected to change significantly before reaching stability. 
- * It is being made available at this early stage to solicit feedback from pioneering 
- * adopters on the understanding that any code that uses this API will almost certainly 
- * be broken (repeatedly) as the API evolves.
- * </p>
- * @since org.eclipse.equinox.registry 3.2
- */
-public final class ContributorFactorySimple {
-	
-	/**
-	 * Creates registry contributor object based on a determining object.The determining 
-	 * object must not be <code>null</code>.
-	 * 
-	 * @param determiningObject object associated with the contribution
-	 * @return new registry contributor based on the determining object
-	 */
-	public static IContributor createContributor(Object determiningObject) {
-		String id = determiningObject.toString();
-		return new RegistryContributor(id, id, null, null);
-	}
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/IConfigurationElement.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/IConfigurationElement.java
deleted file mode 100644
index 5b33721..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/IConfigurationElement.java
+++ /dev/null
@@ -1,348 +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.core.runtime;
-
-import org.eclipse.core.runtime.CoreException;
-
-/**
- * A configuration element, with its attributes and children, 
- * directly reflects the content and structure of the extension section
- * within the declaring plug-in's manifest (<code>plugin.xml</code>) file.
- * <p>
- * This interface also provides a way to create executable extension
- * objects.
- * </p>
- * <p>
- * These registry objects are intended for relatively short-term use. Clients that 
- * deal with these objects must be aware that they may become invalid if the 
- * declaring plug-in is updated or uninstalled. If this happens, all methods except
- * {@link #isValid()} will throw {@link InvalidRegistryObjectException}.
- * For configuration element objects, the most common case is code in a plug-in dealing
- * with extensions contributed to one of the extension points it declares.
- * Code in a plug-in that has declared that it is not dynamic aware (or not
- * declared anything) can safely ignore this issue, since the registry
- * would not be modified while it is active. However, code in a plug-in that
- * declares that it is dynamic aware must be careful when accessing the extension
- * and configuration element objects because they become invalid if the contributing
- * plug-in is removed. Similarly, tools that analyze or display the extension registry
- * are vulnerable. Client code can pre-test for invalid objects by calling {@link #isValid()},
- * which never throws this exception. However, pre-tests are usually not sufficient
- * because of the possibility of the extension or configuration element object becoming
- * invalid as a result of a concurrent activity. At-risk clients must treat 
- * <code>InvalidRegistryObjectException</code> as if it were a checked exception.
- * Also, such clients should probably register a listener with the extension registry
- * so that they receive notification of any changes to the registry.
- * </p><p>
- * This interface can be used without OSGi running.
- * </p><p>
- * This interface is not intended to be implemented by clients.
- * </p>
- */
-public interface IConfigurationElement {
-	/**
-	 * Creates and returns a new instance of the executable extension 
-	 * identified by the named attribute of this configuration element.
-	 * The named attribute value must contain a fully qualified name
-	 * of a Java class. The class can either refer to a class implementing 
-	 * the executable extension or to a factory capable of returning the 
-	 * executable extension.
-	 * <p>
-	 * The specified class is instantiated using its 0-argument public constructor.
-	 * <p>
-	 * Then the following checks are done:<br>
-	 * If the specified class implements the {@link IExecutableExtension} 
-	 * interface, the method {@link IExecutableExtension#setInitializationData(IConfigurationElement, String, Object)} 
-	 * is called, passing to the object the configuration information that was used to create it. 
-	 * <p>
-	 * If the specified class implements {@link IExecutableExtensionFactory} 
-	 * interface, the method {@link IExecutableExtensionFactory#create()} 
-	 * is invoked.
-	 * </p>
-	 * <p>
-	 * Unlike other methods on this object, invoking this method may activate 
-	 * the plug-in.
-	 * </p>
-	 *
-	 * @param propertyName the name of the property
-	 * @return the executable instance
-	 * @exception CoreException if an instance of the executable extension
-	 *   could not be created for any reason
-	 * @see IExecutableExtension#setInitializationData(IConfigurationElement, String, Object)
-	 * @see IExecutableExtensionFactory
-	 * @throws InvalidRegistryObjectException if this configuration element is no longer valid
-	 */
-	public Object createExecutableExtension(String propertyName) throws CoreException;
-
-	/**
-	 * Returns the named attribute of this configuration element, or
-	 * <code>null</code> if none. 
-	 * <p>
-	 * The names of configuration element attributes
-	 * are the same as the attribute names of the corresponding XML element.
-	 * For example, the configuration markup 
-	 * <pre>
-	 * &lt;bg pattern="stripes"/&gt;
-	 * </pre>
-	 * corresponds to a configuration element named <code>"bg"</code>
-	 * with an attribute named <code>"pattern"</code>
-	 * with attribute value <code>"stripes"</code>.
-	 * </p>
-	 * <p> Note that any translation specified in the plug-in manifest
-	 * file is automatically applied.
-	 * </p>
-	 *
-	 * @param name the name of the attribute
-	 * @return attribute value, or <code>null</code> if none
-	 * @throws InvalidRegistryObjectException if this configuration element is no longer valid
-	 */
-	public String getAttribute(String name) throws InvalidRegistryObjectException;
-
-	/**
-	 * Returns the named attribute of this configuration element, or
-	 * <code>null</code> if none. 
-	 * <p>
-	 * The names of configuration element attributes
-	 * are the same as the attribute names of the corresponding XML element.
-	 * For example, the configuration markup 
-	 * <pre>
-	 * &lt;bg pattern="stripes"/&gt;
-	 * </pre>
-	 * corresponds to a configuration element named <code>"bg"</code>
-	 * with an attribute named <code>"pattern"</code>
-	 * with attribute value <code>"stripes"</code>.
-	 * </p>
-	 * <p>
-	 * Note that any translation specified in the plug-in manifest
-	 * file for this attribute is <b>not</b> automatically applied.
-	 * </p>
-	 *
-	 * @param name the name of the attribute
-	 * @return attribute value, or <code>null</code> if none
-	 * @throws InvalidRegistryObjectException if this configuration element is no longer valid
-	 * @deprecated The method is equivalent to the {@link #getAttribute(String)}. Contrary to its description,
-	 * this method returns a translated value. Use the {@link #getAttribute(String)} method instead.
-	 */
-	public String getAttributeAsIs(String name) throws InvalidRegistryObjectException;
-
-	/**
-	 * Returns the names of the attributes of this configuration element.
-	 * Returns an empty array if this configuration element has no attributes.
-	 * <p>
-	 * The names of configuration element attributes
-	 * are the same as the attribute names of the corresponding XML element.
-	 * For example, the configuration markup 
-	 * <pre>
-	 * &lt;bg color="blue" pattern="stripes"/&gt;
-	 * </pre>
-	 * corresponds to a configuration element named <code>"bg"</code>
-	 * with attributes named <code>"color"</code>
-	 * and <code>"pattern"</code>.
-	 * </p>
-	 *
-	 * @return the names of the attributes 
-	 * @throws InvalidRegistryObjectException if this configuration element is no longer valid
-	 */
-	public String[] getAttributeNames() throws InvalidRegistryObjectException;
-
-	/**
-	 * Returns all configuration elements that are children of this
-	 * configuration element. 
-	 * Returns an empty array if this configuration element has no children.
-	 * <p>
-	 * Each child corresponds to a nested
-	 * XML element in the configuration markup.
-	 * For example, the configuration markup 
-	 * <pre>
-	 * &lt;view&gt;
-	 * &nbsp&nbsp&nbsp&nbsp&lt;verticalHint&gt;top&lt;/verticalHint&gt;
-	 * &nbsp&nbsp&nbsp&nbsp&lt;horizontalHint&gt;left&lt;/horizontalHint&gt;
-	 * &lt;/view&gt;
-	 * </pre>
-	 * corresponds to a configuration element, named <code>"view"</code>,
-	 * with two children.
-	 * </p>
-	 *
-	 * @return the child configuration elements
-	 * @throws InvalidRegistryObjectException if this configuration element is no longer valid
-	 * @see #getChildren(String)
-	 */
-	public IConfigurationElement[] getChildren() throws InvalidRegistryObjectException;
-
-	/**
-	 * Returns all child configuration elements with the given name. 
-	 * Returns an empty array if this configuration element has no children
-	 * with the given name.
-	 *
-	 * @param name the name of the child configuration element
-	 * @return the child configuration elements with that name
-	 * @throws InvalidRegistryObjectException if this configuration element is no longer valid
-	 * @see #getChildren()
-	 */
-	public IConfigurationElement[] getChildren(String name) throws InvalidRegistryObjectException;
-
-	/** 
-	 * Returns the extension that declares this configuration element.
-	 *
-	 * @return the extension
-	 * @throws InvalidRegistryObjectException if this configuration element is no longer valid
-	 */
-	public IExtension getDeclaringExtension() throws InvalidRegistryObjectException;
-
-	/**
-	 * Returns the name of this configuration element. 
-	 * The name of a configuration element is the same as
-	 * the XML tag of the corresponding XML element. 
-	 * For example, the configuration markup 
-	 * <pre>
-	 * &lt;wizard name="Create Project"/&gt; 
-	 * </pre>
-	 * corresponds to a configuration element named <code>"wizard"</code>.
-	 *
-	 * @return the name of this configuration element
-	 * @throws InvalidRegistryObjectException if this configuration element is no longer valid
-	 */
-	public String getName() throws InvalidRegistryObjectException;
-
-	/**
-	 * Returns the element which contains this element.  If this element
-	 * is an immediate child of an extension, the
-	 * returned value can be downcast to <code>IExtension</code>.
-	 * Otherwise the returned value can be downcast to 
-	 * <code>IConfigurationElement</code>.
-	 *
-	 * @return the parent of this configuration element
-	 *  or <code>null</code>
-	 * @throws InvalidRegistryObjectException if this configuration element is no longer valid
-	 * @since 3.0
-	 */
-	public Object getParent() throws InvalidRegistryObjectException;
-
-	/**
-	 * Returns the text value of this configuration element.
-	 * For example, the configuration markup 
-	 * <pre>
-	 * &lt;script lang="javascript"&gt;.\scripts\cp.js&lt;/script&gt;
-	 * </pre>
-	 * corresponds to a configuration element <code>"script"</code>
-	 * with value <code>".\scripts\cp.js"</code>.
-	 * <p> Values may span multiple lines (i.e., contain carriage returns
-	 * and/or line feeds).
-	 * <p> Note that any translation specified in the plug-in manifest
-	 * file is automatically applied.
-	 * </p>
-	 *
-	 * @return the text value of this configuration element or <code>null</code>
-	 * @throws InvalidRegistryObjectException if this configuration element is no longer valid
-	 */
-	public String getValue() throws InvalidRegistryObjectException;
-
-	/**
-	 * Returns the untranslated text value of this configuration element.
-	 * For example, the configuration markup 
-	 * <pre>
-	 * &lt;script lang="javascript"&gt;.\scripts\cp.js&lt;/script&gt;
-	 * </pre>
-	 * corresponds to a configuration element <code>"script"</code>
-	 * with value <code>".\scripts\cp.js"</code>.
-	 * <p> Values may span multiple lines (i.e., contain carriage returns
-	 * and/or line feeds).
-	 * <p>
-	 * Note that translation specified in the plug-in manifest
-	 * file is <b>not</b> automatically applied.
-	 * For example, the configuration markup 
-	 * <pre>
-	 * &lt;tooltip&gt;#hattip&lt;/tooltip&gt;
-	 * </pre>
-	 * corresponds to a configuration element, named <code>"tooltip"</code>,
-	 * with value <code>"#hattip"</code>.
-	 * </p>
-	 *
-	 * @return the untranslated text value of this configuration element or <code>null</code>
-	 * @throws InvalidRegistryObjectException if this configuration element is no longer valid
-	 * @deprecated The method is equivalent to the {@link #getValue()}. Contrary to its description,
-	 * this method returns a translated value. Use the {@link #getValue()} method instead.
-	 */
-	public String getValueAsIs() throws InvalidRegistryObjectException;
-
-	/**
-	 * Returns the namespace for this configuration element. This value can be used
-	 * in various global facilities to discover this configuration element's contributor.
-	 * 
-	 * @return the namespace for this configuration element
-	 * @throws InvalidRegistryObjectException if this configuration element is no longer valid
-	 * @see IExtensionRegistry
-	 * @since 3.1
-	 * @deprecated As namespace is no longer restricted to the contributor name, 
-	 * 	use {@link #getNamespaceIdentifier()} to obtain namespace name or {@link #getContributor()}
-	 * 	to get the name of the contributor of this registry element.
-	 * <p>
-	 * In the past namespace was dictated by the name of the bundle. If bundle <code>org.abc</code> 
-	 * contributed registry element with Id of <code>MyId</code>, the namespace of 
-	 * the element was always set to <code>org.abc</code>, producing the qualified name of 
-	 * <code>org.abc.MyId</code>.
-	 * </p><p>
-	 * The namespace used to be the same as the bundle name. As a result, the {@link #getNamespace()} 
-	 * method was used both to obtain the name of the bundle and to obtain the namespace of a registry 
-	 * element.
-	 * </p><p>
-	 * Since 3.2, the extension registry allows elements to specify qualified name. The extension point 
-	 * of the plug-in <code>org.abc</code> could specify <code>org.zzz.MyExtPoint</code> as 
-	 * an Id. In this case, namespace name is <code>org.zzz</code>, but the contributor 
-	 * name is <code>org.abc</code>.  
-	 * </p><p>
-	 * (The use of a simple Id is still a preferred way. Whenever possible, specify only the simple 
-	 * Id and let runtime take care of the rest.)
-	 * </p><p>
-	 * If your code used the {@link #getNamespace()} to obtain the name of the contributing bundle, 
-	 * use {@link #getContributor()}. The typical usage pattern here is to find a bundle name to obtain 
-	 * some information from the corresponding OSGi bundle. For example, deducing the file location 
-	 * specified as a relative path to the bundle install location would fall into this group.
-	 * </p><p>
-	 * If your code used the {@link #getNamespace()} to obtain the namespace of the registry element, 
-	 * use {@link #getNamespaceIdentifier()}. Typically, this is the case when code is trying to process 
-	 * registry elements belonging to some logical group. For example, processing notifications for all 
-	 * elements belonging to the <code>org.abc</code> namespace would fall into this category.
-	 * </p>
-	 */
-	public String getNamespace() throws InvalidRegistryObjectException;
-
-	/**
-	 * Returns the namespace name for this configuration element.
-	 * 
-	 * @return the namespace name for this configuration element
-	 * @throws InvalidRegistryObjectException if this configuration element is no longer valid
-	 * @since org.eclipse.equinox.registry 3.2	 
-	 */
-	public String getNamespaceIdentifier() throws InvalidRegistryObjectException;
-
-	/**
-	 * Returns the contributor of this configuration element.
-	 * 
-	 * @return the contributor for this configuration element
-	 * @throws InvalidRegistryObjectException if this configuration element is no longer valid
-	 * @since org.eclipse.equinox.registry 3.2	 
-	 */
-	public IContributor getContributor() throws InvalidRegistryObjectException;
-
-	/* (non-javadoc) 
-	 * @see Object#equals(java.lang.Object)
-	 */
-	public boolean equals(Object o);
-
-	/**
-	 * Returns whether this configuration element object is valid.
-	 * 
-	 * @return <code>true</code> if the object is valid, and <code>false</code>
-	 * if it is no longer valid
-	 * @since 3.1
-	 */
-	public boolean isValid();
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/IContributor.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/IContributor.java
deleted file mode 100644
index 4bd7e43..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/IContributor.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.core.runtime;
-
-/**
- * This interface describes a registry contributor - an entity that supplies information
- * to the extension registry. 
- * <p>
- * Registry contributor objects can be obtained by calling {@link IExtensionPoint#getContributor()}, 
- * {@link IExtension#getContributor()}, and {@link IConfigurationElement#getContributor()}.
- * Alternatively, a contributor factory appropriate for the registry in use can be called to directly
- * obtain an IContributor object.
- * </p><p>
- * This interface can be used without OSGi running.
- * </p><p>
- * This interface is not intended to be implemented or extended by clients.
- * </p>
- * @see org.eclipse.core.runtime.ContributorFactoryOSGi
- * @see org.eclipse.core.runtime.ContributorFactorySimple
- * 
- * @since org.eclipse.equinox.registry 3.2
- */
-public interface IContributor {
-
-	/**
-	 * Provides name of the contributor (e.g., "org.eclipse.core.runtime").
-	 * 
-	 * @return name of the registry contributor 
-	 */
-	public String getName();
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/IExecutableExtension.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/IExecutableExtension.java
deleted file mode 100644
index ccf3059..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/IExecutableExtension.java
+++ /dev/null
@@ -1,121 +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.core.runtime;
-
-import org.eclipse.core.runtime.CoreException;
-
-/**
- * Interface for executable extension classes that require access to 
- * their configuration element, or implement an extension adapter.
- * <p>
- * Extension adapters are typically required in cases where the extension
- * implementation does not follow the interface rules specified
- * by the provider of the extension point. In these
- * cases, the role of the adapter is to map between the extension point
- * interface, and the actual extension implementation. In general, adapters
- * are used when attempting to plug-in existing Java implementations, or
- * non-Java implementations (e.g., external executables).
- * </p><p>
- * This interface can be used without OSGi running.
- * </p><p>
- * Clients may implement this interface.
- * </p>
- * 
- * @see IConfigurationElement#createExecutableExtension(String)
- */
-public interface IExecutableExtension {
-	/**
-	 * This method is called by the implementation of the method
-	 * <code>IConfigurationElement.createExecutableExtension</code>
-	 * on a newly constructed extension, passing it its relevant configuration 
-	 * information. Most executable extensions only make use of the first 
-	 * two call arguments.
-	 * <p>
-	 * Regular executable extensions specify their Java implementation 
-	 * class name as an attribute of the configuration element for the 
-	 * extension. For example
-	 * <pre>
-	 *     &lt;action run="com.example.BaseAction"/&gt;
-	 * </pre>
-	 * In the above example, this method would be called with a reference
-	 * to the <code>&lt;action&gt;</code> element (first argument), and
-	 * <code>"run"</code> as the name of the attribute that defined
-	 * this executable extension (second argument).
-	 * </p>
-	 * <p>
-	 * The last parameter is for the specific use of extension adapters
-	 * and is typically not used by regular executable extensions.
-	 * </p>
-	 * <p>
-	 * There are two supported ways of associating additional
-	 * adapter-specific data with the configuration in a way that
-	 * is transparent to the extension point implementor:
-	 * </p>
-	 * <p>
-	 * (1) by specifying adapter data as part of the implementation
-	 * class attribute value. The Java class name can be followed
-	 * by a ":" separator, followed by any adapter data in string
-	 * form. For example, if the extension point specifies an attribute
-	 * <code>"run"</code> to contain the name of the extension implementation,
-	 * an adapter can be configured as
-	 * <pre>
-	 *     &lt;action run="com.example.ExternalAdapter:./cmds/util.exe -opt 3"/&gt;
-	 * </pre>
-	 * </p>
-	 * <p>
-	 * (2) by converting the attribute used to specify the executable
-	 * extension to a child element of the original configuration element,
-	 * and specifying the adapter data in the form of xml markup.
-	 * Using this form, the example above would become
-	 * <pre>
-	 *     &lt;action&gt;
-	 *         &lt;<it>run</it> class="com.xyz.ExternalAdapter"&gt;
-	 *             &lt;parameter name="exec" value="./cmds/util.exe"/&gt;
-	 *             &lt;parameter name="opt"  value="3"/&gt;
-	 *         &lt;/<it>run</it>&gt;
-	 *     &lt;/action&gt;
-	 * </pre>
-	 * </p>
-	 * <p>
-	 * Form (2) will typically only be
-	 * used for extension points that anticipate the majority of
-	 * extensions configured into it will in fact be in the form
-	 * of adapters.
-	 * </p>
-	 * <p>
-	 * In either case, the specified adapter class is instantiated using its
-	 * 0-argument public constructor. The adapter data is passed as the
-	 * last argument of this method. The data argument is defined as Object.
-	 * It can have the following values:
-	 * <ul>
-	 * <li><code>null</code>, if no adapter data was supplied</li>
-	 * <li>in case (1), the initialization data
-	 *		string is passed as a <code>String</code></li>
-	 * <li>in case (2), the initialization data is passed
-	 *		as a <code>Hashtable</code> containing the actual
-	 *		parameter names and values (both <code>String</code>s)</li>
-	 * </ul>
-	 * </p>
-	 *
-	 * @param config the configuration element used to trigger this execution. 
-	 *		It can be queried by the executable extension for specific
-	 *		configuration properties
-	 * @param propertyName the name of an attribute of the configuration element
-	 *		used on the <code>createExecutableExtension(String)</code> call. This
-	 *		argument can be used in the cases where a single configuration element
-	 *		is used to define multiple executable extensions.
-	 * @param data adapter data in the form of a <code>String</code>, 
-	 *		a <code>Hashtable</code>, or <code>null</code>.
-	 * @exception CoreException if error(s) detected during initialization processing
-	 * @see IConfigurationElement#createExecutableExtension(String)
-	 */
-	public void setInitializationData(IConfigurationElement config, String propertyName, Object data) throws CoreException;
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/IExecutableExtensionFactory.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/IExecutableExtensionFactory.java
deleted file mode 100644
index 02d2f70..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/IExecutableExtensionFactory.java
+++ /dev/null
@@ -1,47 +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.core.runtime;
-
-import org.eclipse.core.runtime.CoreException;
-
-/**
- * This interface allows extension providers to control how the instances provided to extension-points are being created 
- * by referring to the factory instead of referring to a class. For example, the following extension to the preference page 
- * extension-point uses a factory called <code>PreferencePageFactory</code>.   
- * <code><pre>
- *    <extension point="org.eclipse.ui.preferencePages">
- *    <page  name="..."  class="org.eclipse.update.ui.PreferencePageFactory:org.eclipse.update.ui.preferences.MainPreferencePage"> 
- *    </page>
- *  </extension>
- *  </pre>
- *  </code>
- * 
- * <p>
- * Effectively, factories give full control over the create executable extension process.
- *  </p><p>
- * The factories are responsible for handling the case where the concrete instance implement {@link IExecutableExtension}.
- * </p><p>
- * Given that factories are instantiated as executable extensions, they must provide a 0-argument public constructor.
- * Like any other executable extension, they can configured by implementing {@link org.eclipse.core.runtime.IExecutableExtension} interface.
- * </p><p>
- * This interface can be used without OSGi running.
- * </p>
- * @see org.eclipse.core.runtime.IConfigurationElement
- */
-public interface IExecutableExtensionFactory {
-	/**
-	 * Creates and returns a new instance.
-	 * 
-	 * @exception CoreException if an instance of the executable extension
-	 *   could not be created for any reason
-	 */
-	Object create() throws CoreException;
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/IExtension.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/IExtension.java
deleted file mode 100644
index f7abd5e..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/IExtension.java
+++ /dev/null
@@ -1,179 +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.core.runtime;
-
-/**
- * An extension declared in a plug-in.
- * All information is obtained from the declaring plug-in's 
- * manifest (<code>plugin.xml</code>) file.
- * <p>
- * These registry objects are intended for relatively short-term use. Clients that 
- * deal with these objects must be aware that they may become invalid if the 
- * declaring plug-in is updated or uninstalled. If this happens, all methods except
- * {@link #isValid()} will throw {@link InvalidRegistryObjectException}.
- * For extension objects, the most common case is code in a plug-in dealing
- * with extensions contributed to one of the extension points it declares.
- * Code in a plug-in that has declared that it is not dynamic aware (or not
- * declared anything) can safely ignore this issue, since the registry
- * would not be modified while it is active. However, code in a plug-in that
- * declares that it is dynamic aware must be careful when accessing the extension
- * objects because they become invalid if the contributing plug-in is removed.
- * Similarly, tools that analyze or display the extension registry are vulnerable.
- * Client code can pre-test for invalid objects by calling {@link #isValid()},
- * which never throws this exception. However, pre-tests are usually not sufficient
- * because of the possibility of the extension object becoming invalid as a
- * result of a concurrent activity. At-risk clients must treat 
- * <code>InvalidRegistryObjectException</code> as if it were a checked exception.
- * Also, such clients should probably register a listener with the extension registry
- * so that they receive notification of any changes to the registry.
- * </p><p>
- * This interface can be used without OSGi running.
- * </p><p>
- * This interface is not intended to be implemented by clients.
- * </p>
- */
-public interface IExtension {
-	/**
-	 * Returns all configuration elements declared by this extension.
-	 * These elements are a direct reflection of the configuration 
-	 * markup supplied in the manifest (<code>plugin.xml</code>)
-	 * file for the plug-in that declares this extension.
-	 * Returns an empty array if this extension does not declare any
-	 * configuration elements.
-	 *
-	 * @return the configuration elements declared by this extension
-	 * @throws InvalidRegistryObjectException if this extension is no longer valid
-	 */
-	public IConfigurationElement[] getConfigurationElements() throws InvalidRegistryObjectException;
-
-	/**
-	 * Returns the namespace for this extension. This value can be used
-	 * in various global facilities to discover this extension's provider.
-	 * 
-	 * @return the namespace for this extension
-	 * @throws InvalidRegistryObjectException if this extension is no longer valid
-	 * @see IExtensionRegistry
-	 * @since 3.0
-	 * @deprecated As namespace is no longer restricted to the contributor name, 
-	 * 	use {@link #getNamespaceIdentifier()} to obtain namespace name or {@link #getContributor()}
-	 * 	to get the name of the contributor of this registry element.  
-	 * <p>
-	 * In the past namespace was dictated by the name of the bundle. If bundle <code>org.abc</code> 
-	 * contributed registry element with Id of <code>MyId</code>, the namespace of 
-	 * the element was always set to <code>org.abc</code>, producing the qualified name of 
-	 * <code>org.abc.MyId</code>.
-	 * </p><p>
-	 * The namespace used to be the same as the bundle name. As a result, the {@link #getNamespace()} 
-	 * method was used both to obtain the name of the bundle and to obtain the namespace of a registry 
-	 * element.
-	 * </p><p>
-	 * Since 3.2, the extension registry allows elements to specify qualified name. The extension point 
-	 * of the plug-in <code>org.abc</code> could specify <code>org.zzz.MyExtPoint</code> as 
-	 * an Id. In this case, namespace name is <code>org.zzz</code>, but the contributor 
-	 * name is <code>org.abc</code>.  
-	 * </p><p>
-	 * (The use of a simple Id is still a preferred way. Whenever possible, specify only the simple 
-	 * Id and let runtime take care of the rest.)
-	 * </p><p>
-	 * If your code used the {@link #getNamespace()} to obtain the name of the contributing bundle, 
-	 * use {@link #getContributor()}. The typical usage pattern here is to find a bundle name to obtain 
-	 * some information from the corresponding OSGi bundle. For example, deducing the file location 
-	 * specified as a relative path to the bundle install location would fall into this group.
-	 * </p><p>
-	 * If your code used the {@link #getNamespace()} to obtain the namespace of the registry element, 
-	 * use {@link #getNamespaceIdentifier()}. Typically, this is the case when code is trying to process 
-	 * registry elements belonging to some logical group. For example, processing notifications for all 
-	 * elements belonging to the <code>org.abc</code> namespace would fall into this category.
-	 * </p>
-	 */
-	public String getNamespace() throws InvalidRegistryObjectException;
-
-	/**
-	 * Returns the namespace name for this extension.
-	 * 
-	 * @return the namespace name for this extension
-	 * @throws InvalidRegistryObjectException if this extension is no longer valid
-	 * @since org.eclipse.equinox.registry 3.2	 
-	 */
-	public String getNamespaceIdentifier() throws InvalidRegistryObjectException;
-
-	/**
-	 * Returns the contributor of this extension.
-	 * 
-	 * @return the contributor for this extension
-	 * @throws InvalidRegistryObjectException if this extension is no longer valid
-	 * @since org.eclipse.equinox.registry 3.2	 
-	 */
-	public IContributor getContributor() throws InvalidRegistryObjectException;
-
-	/**
-	 * Returns the unique identifier of the extension point
-	 * to which this extension should be contributed.
-	 *
-	 * @return the unique identifier of the relevant extension point
-	 * @throws InvalidRegistryObjectException if this extension is no longer valid
-	 */
-	public String getExtensionPointUniqueIdentifier() throws InvalidRegistryObjectException;
-
-	/**
-	 * Returns a displayable label for this extension.
-	 * Returns the empty string if no label for this extension
-	 * is specified in the plug-in manifest file.
-	 * <p> Note that any translation specified in the plug-in manifest
-	 * file is automatically applied.
-	 * <p>
-	 *
-	 * @return a displayable string label for this extension,
-	 *    possibly the empty string
-	 * @throws InvalidRegistryObjectException if this extension is no longer valid
-	 */
-	public String getLabel() throws InvalidRegistryObjectException;
-
-	/**
-	 * Returns the simple identifier of this extension, or <code>null</code>
-	 * if this extension does not have an identifier.
-	 * This identifier is specified in the plug-in manifest (<code>plugin.xml</code>) 
-	 * file as a non-empty string containing no period characters 
-	 * (<code>'.'</code>) and must be unique within the namespace.
-	 *
-	 * @return the simple identifier of the extension (e.g. <code>"main"</code>)
-	 *  or <code>null</code>
-	 * @throws InvalidRegistryObjectException if this extension is no longer valid
-	 */
-	public String getSimpleIdentifier() throws InvalidRegistryObjectException;
-
-	/**
-	 * Returns the unique identifier of this extension, or <code>null</code>
-	 * if this extension does not have an identifier.
-	 * If available, this identifier is unique within the plug-in registry, and
-	 * is composed of the namespace where this extension 
-	 * was declared and this extension's simple identifier.
-	 *
-	 * @return the unique identifier of the extension
-	 *    (e.g. <code>"com.example.acme.main"</code>), or <code>null</code>
-	 * @throws InvalidRegistryObjectException if this extension is no longer valid
-	 */
-	public String getUniqueIdentifier() throws InvalidRegistryObjectException;
-
-	/* (non-javadoc) 
-	 * @see Object#equals(java.lang.Object)
-	 */
-	public boolean equals(Object o);
-
-	/**
-	 * Returns whether this extension object is valid.
-	 * 
-	 * @return <code>true</code> if the object is valid, and <code>false</code>
-	 * if it is no longer valid
-	 * @since 3.1
-	 */
-	public boolean isValid();
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/IExtensionDelta.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/IExtensionDelta.java
deleted file mode 100644
index 0bea7e5..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/IExtensionDelta.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.runtime;
-
-/**
- * An extension delta represents changes to the extension registry.
- * <p>
- * This interface can be used without OSGi running.
- * </p><p>
- * This interface is not intended to be implemented by clients.
- * </p>
- * @since 3.0
- */
-public interface IExtensionDelta {
-	/**
-	 * Delta kind constant indicating that an extension has been added to an 
-	 * extension point.
-	 * @see IExtensionDelta#getKind()
-	 */
-	public int ADDED = 1;
-	/**
-	 * Delta kind constant indicating that an extension has been removed from an 
-	 * extension point.
-	 * @see IExtensionDelta#getKind()
-	 */
-	public int REMOVED = 2;
-
-	/**
-	 * The kind of this extension delta.
-	 * 
-	 * @return the kind of change this delta represents
-	 * @see #ADDED
-	 * @see #REMOVED
-	 */
-	public int getKind();
-
-	/**
-	 * Returns the affected extension.
-	 * 
-	 * @return the affected extension
-	 */
-	public IExtension getExtension();
-
-	/**
-	 * Returns the affected extension point.
-	 * 
-	 * @return the affected extension point
-	 */
-	public IExtensionPoint getExtensionPoint();
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/IExtensionPoint.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/IExtensionPoint.java
deleted file mode 100644
index 37f7579..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/IExtensionPoint.java
+++ /dev/null
@@ -1,203 +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.core.runtime;
-
-/**
- * An extension point declared in a plug-in.
- * Except for the list of extensions plugged in to it, the information 
- * available for an extension point is obtained from the declaring plug-in's 
- * manifest (<code>plugin.xml</code>) file.
- * <p>
- * These registry objects are intended for relatively short-term use. Clients that 
- * deal with these objects must be aware that they may become invalid if the 
- * declaring plug-in is updated or uninstalled. If this happens, all methods except
- * {@link #isValid()} will throw {@link InvalidRegistryObjectException}.
- * For extension point objects, the most common case is code in a plug-in dealing
- * with one of the extension points it declares. These extension point objects are
- * guaranteed to be valid while the plug-in is active. Code in a plug-in that has
- * declared that it is not dynamic aware (or not declared anything) can also safely
- * ignore this issue, since the registry would not be modified while it is
- * active. However, code in a plug-in that declares that it is dynamic aware
- * must be careful if it access the extension point object of a different plug-in,
- * because it's at risk if that other plug-in is removed. Similarly,
- * tools that analyze or display the extension registry are vulnerable.
- * Client code can pre-test for invalid objects by calling {@link #isValid()},
- * which never throws this exception. However, pre-tests are usually not sufficient
- * because of the possibility of the extension point object becoming invalid as a
- * result of a concurrent activity. At-risk clients must treat 
- * <code>InvalidRegistryObjectException</code> as if it were a checked exception.
- * Also, such clients should probably register a listener with the extension registry
- * so that they receive notification of any changes to the registry.
- * </p><p>
- * This interface can be used without OSGi running.
- * </p><p>
- * This interface is not intended to be implemented by clients.
- * </p>
- */
-public interface IExtensionPoint {
-	/**
-	 * Returns all configuration elements from all extensions configured
-	 * into this extension point. Returns an empty array if this extension 
-	 * point has no extensions configured, or none of the extensions 
-	 * contain configuration elements.
-	 *
-	 * @return the configuration elements for all extension configured 
-	 *   into this extension point
-	 * @throws InvalidRegistryObjectException if this extension point is no longer valid
-	 */
-	public IConfigurationElement[] getConfigurationElements() throws InvalidRegistryObjectException;
-
-	/**
-	 * Returns the namespace for this extension point. This value can be used
-	 * in various global facilities to discover this extension point's provider.
-	 * 
-	 * @return the namespace for this extension point
-	 * @throws InvalidRegistryObjectException if this extension point is no longer valid
-	 * @see IExtensionRegistry
-	 * @since 3.0
-	 * @deprecated As namespace is no longer restricted to the contributor name, 
-	 * 	use {@link #getNamespaceIdentifier()} to obtain namespace name or {@link #getContributor()}
-	 * 	to get the name of the contributor of this registry element.  
-	 * <p>
-	 * In the past namespace was dictated by the name of the bundle. If bundle <code>org.abc</code> 
-	 * contributed registry element with Id of <code>MyId</code>, the namespace of 
-	 * the element was always set to <code>org.abc</code>, producing the qualified name of 
-	 * <code>org.abc.MyId</code>.
-	 * </p><p>
-	 * The namespace used to be the same as the bundle name. As a result, the {@link #getNamespace()} 
-	 * method was used both to obtain the name of the bundle and to obtain the namespace of a registry 
-	 * element.
-	 * </p><p>
-	 * Since 3.2, the extension registry allows elements to specify qualified name. The extension point 
-	 * of the plug-in <code>org.abc</code> could specify <code>org.zzz.MyExtPoint</code> as 
-	 * an Id. In this case, namespace name is <code>org.zzz</code>, but the contributor 
-	 * name is <code>org.abc</code>.  
-	 * </p><p>
-	 * (The use of a simple Id is still a preferred way. Whenever possible, specify only the simple 
-	 * Id and let runtime take care of the rest.)
-	 * </p><p>
-	 * If your code used the {@link #getNamespace()} to obtain the name of the contributing bundle, 
-	 * use {@link #getContributor()}. The typical usage pattern here is to find a bundle name to obtain 
-	 * some information from the corresponding OSGi bundle. For example, deducing the file location 
-	 * specified as a relative path to the bundle install location would fall into this group.
-	 * </p><p>
-	 * If your code used the {@link #getNamespace()} to obtain the namespace of the registry element, 
-	 * use {@link #getNamespaceIdentifier()}. Typically, this is the case when code is trying to process 
-	 * registry elements belonging to some logical group. For example, processing notifications for all 
-	 * elements belonging to the <code>org.abc</code> namespace would fall into this category.
-	 * </p>
-	 */
-	public String getNamespace() throws InvalidRegistryObjectException;
-
-	/**
-	 * Returns the namespace name for this extension point.
-	 * 
-	 * @return the namespace name for this extension point
-	 * @throws InvalidRegistryObjectException if this extension point is no longer valid
-	 * @since org.eclipse.equinox.registry 3.2	 
-	 */
-	public String getNamespaceIdentifier() throws InvalidRegistryObjectException;
-
-	/**
-	 * Returns the contributor of this extension point.
-	 * 
-	 * @return the contributor for this extension point
-	 * @throws InvalidRegistryObjectException if this extension point is no longer valid
-	 * @since org.eclipse.equinox.registry 3.2	 
-	 */
-	public IContributor getContributor() throws InvalidRegistryObjectException;
-
-	/**
-	 * Returns the extension with the given unique identifier configured into
-	 * this extension point, or <code>null</code> if there is no such extension.
-	 * Since an extension might not have an identifier, some extensions
-	 * can only be found via the <code>getExtensions</code> method.
-	 *
-	 * @param extensionId the unique identifier of an extension 
-	 *		(e.g. <code>"com.example.acme.main"</code>).
-	 * @return an extension, or <code>null</code>
-	 * @throws InvalidRegistryObjectException if this extension point is no longer valid
-	 */
-	public IExtension getExtension(String extensionId) throws InvalidRegistryObjectException;
-
-	/**
-	 * Returns all extensions configured into this extension point.
-	 * Returns an empty array if this extension point has no extensions.
-	 *
-	 * @return the extensions configured into this extension point
-	 * @throws InvalidRegistryObjectException if this extension point is no longer valid
-	 */
-	public IExtension[] getExtensions() throws InvalidRegistryObjectException;
-
-	/**
-	 * Returns a displayable label for this extension point.
-	 * Returns the empty string if no label for this extension point
-	 * is specified in the plug-in manifest file.
-	 * <p> Note that any translation specified in the plug-in manifest
-	 * file is automatically applied.
-	 * </p>
-	 *
-	 * @return a displayable string label for this extension point,
-	 *    possibly the empty string
-	 * @throws InvalidRegistryObjectException if this extension point is no longer valid
-	 */
-	public String getLabel() throws InvalidRegistryObjectException;
-
-	/**
-	 * Returns reference to the extension point schema. The schema 
-	 * reference is returned as a URL path relative to the plug-in 
-	 * installation URL. 
-	 * Returns the empty string if no schema for this extension point
-	 * is specified in the plug-in manifest file.
-	 *
-	 * @return a relative URL path, or an empty string
-	 * @throws InvalidRegistryObjectException if this extension point is no longer valid
-	 */
-	public String getSchemaReference() throws InvalidRegistryObjectException;
-
-	/**
-	 * Returns the simple identifier of this extension point.
-	 * This identifier is a non-empty string containing no
-	 * period characters (<code>'.'</code>) and is guaranteed
-	 * to be unique within the namespace.
-	 *
-	 * @return the simple identifier of the extension point (e.g. <code>"builders"</code>)
-	 * @throws InvalidRegistryObjectException if this extension point is no longer valid
-	 */
-	public String getSimpleIdentifier() throws InvalidRegistryObjectException;
-
-	/**
-	 * Returns the unique identifier of this extension point.
-	 * This identifier is unique within the plug-in registry, and
-	 * is composed of the namespace for this extension point 
-	 * and this extension point's simple identifier.
-	 * 
-	 *
-	 * @return the unique identifier of the extension point
-	 *    (e.g. <code>"org.eclipse.core.resources.builders"</code>)
-	 * @throws InvalidRegistryObjectException if this extension point is no longer valid
-	 */
-	public String getUniqueIdentifier() throws InvalidRegistryObjectException;
-
-	/* (non-javadoc) 
-	 * @see Object#equals(java.lang.Object)
-	 */
-	public boolean equals(Object o);
-
-	/**
-	 * Returns whether this extension point object is valid.
-	 * 
-	 * @return <code>true</code> if the object is valid, and <code>false</code>
-	 * if it is no longer valid
-	 * @since 3.1
-	 */
-	public boolean isValid();
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/IExtensionRegistry.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/IExtensionRegistry.java
deleted file mode 100644
index 51d0e59..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/IExtensionRegistry.java
+++ /dev/null
@@ -1,356 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.runtime;
-
-import java.io.InputStream;
-import java.util.ResourceBundle;
-
-/**
- * The extension registry holds the master list of all
- * discovered namespaces, extension points and extensions. 
- * <p>
- * The extension registry can be queried, by name, for 
- * extension points and extensions.  
- * </p>
- * <p>
- * The various objects that describe the contents of the extension registry
- * ({@link IExtensionPoint}, {@link IExtension}, and {@link IConfigurationElement})
- * are intended for relatively short-term use. Clients that deal with these objects
- * must be aware that they may become invalid if the declaring plug-in is updated
- * or uninstalled. If this happens, all methods on these object except
- * <code>isValid()</code> will throw {@link org.eclipse.core.runtime.InvalidRegistryObjectException}.
- * Code in a plug-in that has declared that it is not dynamic aware (or not declared
- * anything) can safely ignore this issue, since the registry would not be
- * modified while it is active. However, code in a plug-in that declares that it
- * is dynamic aware must be careful if it accesses extension registry objects,
- * because it's at risk if plug-in are removed. Similarly, tools that analyze
- * or display the extension registry are vulnerable. Client code can pre-test for
- * invalid objects by calling <code>isValid()</code>, which never throws this exception.
- * However, pre-tests are usually not sufficient because of the possibility of the
- * extension registry object becoming invalid as a result of a concurrent activity.
- * At-risk clients must treat <code>InvalidRegistryObjectException</code> as if it
- * were a checked exception. Also, such clients should probably register a listener
- * with the extension registry so that they receive notification of any changes to
- * the registry.
- * </p>
- * <p>
- * Extensions and extension points are declared by generic entities called 
- * <cite>namespaces</cite>. The only fact known about namespaces is that they 
- * have unique string-based identifiers. One example of a namespace 
- * is a plug-in, for which the namespace id is the plug-in id.
- * </p><p>
- * This interface can be used without OSGi running.
- * </p><p>
- * This interface is not intended to be implemented by clients.
- * </p>
- * @since 3.0
- */
-public interface IExtensionRegistry {
-	/**
-	 * Adds the given listener for registry change events related to extension points 
-	 * in the given namespace.
-	 * Has no effect if an identical listener is already registered. After 
-	 * completion of this method, the given listener will be registered for events 
-	 * related to extension points in the specified namespace. If no namespace 
-	 * is specified, the listener will receive notifications for changes to 
-	 * extension points in any namespace.  
-	 * <p>
-	 * Once registered, a listener starts receiving notification of changes to
-	 *  the registry. Registry change notifications are sent asynchronously.
-	 * The listener continues to receive notifications until it is removed. 
-	 * </p>
-	 * @param listener the listener
-	 * @param namespace the namespace in which to listen for changes
-	 * @see IRegistryChangeListener
-	 * @see IRegistryChangeEvent
-	 * @see #removeRegistryChangeListener(IRegistryChangeListener) 
-	 */
-	public void addRegistryChangeListener(IRegistryChangeListener listener, String namespace);
-
-	/**
-	 * Adds the given listener for registry change events.
-	 * Has no effect if an identical listener is already registered.
-	 * 
-	 * <p>
-	 * This method is equivalent to:
-	 * <pre>
-	 *     addRegistryChangeListener(listener,null);
-	 * </pre>
-	 * </p>
-	 * 
-	 * @param listener the listener
-	 * @see IRegistryChangeListener
-	 * @see IRegistryChangeEvent
-	 * @see #addRegistryChangeListener(IRegistryChangeListener, String)
-	 * @see #removeRegistryChangeListener(IRegistryChangeListener)
-	 */
-	public void addRegistryChangeListener(IRegistryChangeListener listener);
-
-	/**
-	 * Returns all configuration elements from all extensions configured
-	 * into the identified extension point. Returns an empty array if the extension 
-	 * point does not exist, has no extensions configured, or none of the extensions 
-	 * contain configuration elements.
-	 *
-	 * @param extensionPointId the unique identifier of the extension point
-	 *		(e.g. <code>"org.eclipse.core.resources.builders"</code>)
-	 * @return the configuration elements
-	 */
-	public IConfigurationElement[] getConfigurationElementsFor(String extensionPointId);
-
-	/**
-	 * Returns all configuration elements from all extensions configured
-	 * into the identified extension point. Returns an empty array if the extension 
-	 * point does not exist, has no extensions configured, or none of the extensions 
-	 * contain configuration elements.
-	 *
-	 * @param namespace the namespace for the extension point 
-	 *		(e.g. <code>"org.eclipse.core.resources"</code>)
-	 * @param extensionPointName the simple identifier of the 
-	 *		extension point (e.g. <code>"builders"</code>)
-	 * @return the configuration elements
-	 */
-	public IConfigurationElement[] getConfigurationElementsFor(String namespace, String extensionPointName);
-
-	/**
-	 * Returns all configuration elements from the identified extension.
-	 * Returns an empty array if the extension does not exist or 
-	 * contains no configuration elements.
-	 *
-	 * @param namespace the namespace for the extension point 
-	 *		(e.g. <code>"org.eclipse.core.resources"</code>)
-	 * @param extensionPointName the simple identifier of the 
-	 *		extension point (e.g. <code>"builders"</code>)
-	 * @param extensionId the unique identifier of the extension 
-	 *		(e.g. <code>"com.example.acme.coolbuilder</code>)
-	 * @return the configuration elements
-	 */
-	public IConfigurationElement[] getConfigurationElementsFor(String namespace, String extensionPointName, String extensionId);
-
-	/**
-	 * Returns the specified extension in this extension registry, 
-	 * or <code>null</code> if there is no such extension.
-	 *
-	 * @param extensionId the unique identifier of the extension 
-	 *		(e.g. <code>"com.example.acme.coolbuilder"</code>)
-	 * @return the extension, or <code>null</code>
-	 */
-	public IExtension getExtension(String extensionId);
-
-	/**
-	 * Returns the specified extension in this extension registry, 
-	 * or <code>null</code> if there is no such extension.
-	 * The first parameter identifies the extension point, and the second
-	 * parameter identifies an extension plugged in to that extension point.
-	 *
-	 * @param extensionPointId the unique identifier of the extension point
-	 *		(e.g. <code>"org.eclipse.core.resources.builders"</code>)
-	 * @param extensionId the unique identifier of the extension 
-	 *		(e.g. <code>"com.example.acme.coolbuilder"</code>)
-	 * @return the extension, or <code>null</code>
-	 */
-	public IExtension getExtension(String extensionPointId, String extensionId);
-
-	/**
-	 * Returns the specified extension in this extension registry, 
-	 * or <code>null</code> if there is no such extension.
-	 * The first two parameters identify the extension point, and the third
-	 * parameter identifies an extension plugged in to that extension point.
-	 *
-	 * @param namespace the namespace for the extension point 
-	 *		(e.g. <code>"org.eclipse.core.resources"</code>)
-	 * @param extensionPointName the simple identifier of the 
-	 *		extension point (e.g. <code>"builders"</code>)
-	 * @param extensionId the unique identifier of the extension 
-	 *		(e.g. <code>"com.example.acme.coolbuilder"</code>)
-	 * @return the extension, or <code>null</code>
-	 */
-	public IExtension getExtension(String namespace, String extensionPointName, String extensionId);
-
-	/**
-	 * Returns the extension point with the given extension point identifier
-	 * in this extension registry, or <code>null</code> if there is no such
-	 * extension point.
-	 *
-	 * @param extensionPointId the unique identifier of the extension point 
-	 *    (e.g., <code>"org.eclipse.core.resources.builders"</code>)
-	 * @return the extension point, or <code>null</code>
-	 */
-	public IExtensionPoint getExtensionPoint(String extensionPointId);
-
-	/**
-	 * Returns the extension point in this extension registry
-	 * with the given namespace and extension point simple identifier,
-	 * or <code>null</code> if there is no such extension point.
-	 *
-	 * @param namespace the namespace for the given extension point 
-	 *		(e.g. <code>"org.eclipse.core.resources"</code>)
-	 * @param extensionPointName the simple identifier of the 
-	 *		extension point (e.g. <code>"builders"</code>)
-	 * @return the extension point, or <code>null</code>
-	 */
-	public IExtensionPoint getExtensionPoint(String namespace, String extensionPointName);
-
-	/**
-	 * Returns all extension points known to this extension registry.
-	 * Returns an empty array if there are no extension points.
-	 *
-	 * @return the extension points known to this extension registry
-	 */
-	public IExtensionPoint[] getExtensionPoints();
-
-	/**
-	 * Returns all extension points declared in the given namespace. Returns an empty array if 
-	 * there are no extension points declared in the namespace.
-	 * 
-	 * @param namespace the namespace for the extension points 
-	 *		(e.g. <code>"org.eclipse.core.resources"</code>) 
-	 * @return the extension points in this registry declared in the given namespace 
-	 */
-	public IExtensionPoint[] getExtensionPoints(String namespace);
-
-	/**
-	 * Returns all extensions declared in the given namespace. Returns an empty array if 
-	 * no extensions are declared in the namespace.
-	 * 
-	 * @param namespace the namespace for the extensions 
-	 *		(e.g. <code>"org.eclipse.core.resources"</code>)
-	 * @return the extensions in this registry declared in the given namespace 
-	 */
-	public IExtension[] getExtensions(String namespace);
-
-	/**
-	 * Returns all namespaces currently used by extensions and extension points in this 
-	 * registry. Returns an empty array if there are no known extensions/extension points
-	 * in this registry.
-	 * <p>
-	 * The fully-qualified name of an extension point or an extension consist of 
-	 * a namespace and a simple name (much like a qualified Java class name consist
-	 * of a package name and a class name). The simple names are presumed to be unique
-	 * in the namespace.
-	 * </p> 
-	 * @return all namespaces known to this registry
-	 */
-	public String[] getNamespaces();
-
-	/** 
-	 * Removes the given registry change listener from this registry.
-	 * Has no effect if an identical listener is not registered.
-	 *
-	 * @param listener the listener
-	 * @see IRegistryChangeListener
-	 * @see #addRegistryChangeListener(IRegistryChangeListener)
-	 * @see #addRegistryChangeListener(IRegistryChangeListener, String)
-	 */
-	public void removeRegistryChangeListener(IRegistryChangeListener listener);
-
-	/**
-	 * Adds to this extension registry an extension point(s), extension(s), or 
-	 * a combination of those described by the XML file. The information in 
-	 * the XML file should be supplied in the same format as the plugin.xml; in fact,
-	 * Plug-in Manifest editor can be used to prepare the XML file. The top token
-	 * of the contribution (normally, "plugin" or "fragment" in the Plug-in Manifest 
-	 * editor) is ignored by this method. 
-	 * <p>
-	 * This method is an access controlled method. Proper token (master token or user token) should 
-	 * be passed as an argument. Two registry keys are set in the registry constructor 
-	 * {@link RegistryFactory#createRegistry(org.eclipse.core.runtime.spi.RegistryStrategy, Object, Object)}: 
-	 * master token and a user token. Master token allows all operations; user token allows 
-	 * non-persisted registry elements to be modified.
-	 * </p><p>
-	 * <b>Note:</b> This class/interface is part of an interim API that is still under 
-	 * development and expected to change significantly before reaching stability. 
-	 * It is being made available at this early stage to solicit feedback from pioneering 
-	 * adopters on the understanding that any code that uses this API will almost certainly 
-	 * be broken (repeatedly) as the API evolves.
-	 * </p>
-	 * @param is stream open on the XML file. The XML file can contain an extension 
-	 * point(s) or/and extension(s) described in the format similar to plugin.xml. The method
-	 * closes  the stream before returning
-	 * @param contributor the contributor making this contribution.
-	 * @param persist indicates if the contribution(s) should be stored in the registry cache. If <code>false</code>,
-	 * 	contribution is not persisted in the registry cache and is lost on Eclipse restart
-	 * @param name optional name of the contribution. Used for error reporting; might be <code>null</code>
-	 * @param translationBundle optional resource bundle used for translations; might be <code>null</code>
-	 * @param token the key used to check permissions
-	 * @return <code>true</code> if the contribution was successfully processed and <code>false</code>
-	 * 	otherwise
-	 * @throws IllegalArgumentException if an incorrect token is passed
-	 * 
-	 * @see IContributor
-	 * @since org.eclipse.equinox.registry 3.2	 
-	 */
-	public boolean addContribution(InputStream is, IContributor contributor, boolean persist, String name, ResourceBundle translationBundle, Object token) throws IllegalArgumentException;
-
-	/**
-	 * Removes the given extension from this registry.
-	 * <p>
-	 * This method is an access controlled method. Proper token (master token or user token) should 
-	 * be passed as an argument. Two registry keys are set in the registry constructor 
-	 * {@link RegistryFactory#createRegistry(org.eclipse.core.runtime.spi.RegistryStrategy, Object, Object)}: 
-	 * master token and a user token. Master token allows all operations; user token only
-	 * allows non-persisted registry elements to be modified.
-	 * </p><p>
-	 * <b>Note:</b> This class/interface is part of an interim API that is still under 
-	 * development and expected to change significantly before reaching stability. 
-	 * It is being made available at this early stage to solicit feedback from pioneering 
-	 * adopters on the understanding that any code that uses this API will almost certainly 
-	 * be broken (repeatedly) as the API evolves.
-	 * </p>
-	 * @param extension extension to be removed
-	 * @param token the key used to check permissions
-	 * @return <code>true</code> if the extension was successfully removed, and <code>false</code> otherwise
-	 * @throws IllegalArgumentException if an incorrect token is passed
-	 * 
-	 * @since org.eclipse.equinox.registry 3.2	 
-	 */
-	public boolean removeExtension(IExtension extension, Object token) throws IllegalArgumentException;
-
-	/**
-	 * Removes the specified extension point from this registry.
-	 * <p>
-	 * This method is an access controlled method. Proper token (master token or user token) should 
-	 * be passed as an argument. Two registry keys are set in the registry constructor 
-	 * {@link RegistryFactory#createRegistry(org.eclipse.core.runtime.spi.RegistryStrategy, Object, Object)}: 
-	 * master token and a user token. Master token allows all operations; user token only
-	 * allows non-persisted registry elements to be modified.
-	 * </p><p>
-	 * <b>Note:</b> This class/interface is part of an interim API that is still under 
-	 * development and expected to change significantly before reaching stability. 
-	 * It is being made available at this early stage to solicit feedback from pioneering 
-	 * adopters on the understanding that any code that uses this API will almost certainly 
-	 * be broken (repeatedly) as the API evolves.
-	 * </p>
-	 * @param extensionPoint extension point to be removed
-	 * @param token the key used to check permissions
-	 * @return <code>true</code> if the extension point was successfully removed, and 
-	 * 	<code>false</code> otherwise
-	 * @throws IllegalArgumentException if incorrect token is passed
-	 * 
-	 * @since org.eclipse.equinox.registry 3.2	 
-	 */
-	public boolean removeExtensionPoint(IExtensionPoint extensionPoint, Object token) throws IllegalArgumentException;
-
-	/**
-	 * Call this method to properly stop the registry. The method stops registry event processing
-	 * and writes out cache information to be used in the next run. This is an access controlled 
-	 * method; master token is required.
-	 * <p>
-	 * This method is an access controlled method. Master token should be passed as an argument.
-	 * </p>
-	 * @see RegistryFactory#createRegistry(org.eclipse.core.runtime.spi.RegistryStrategy, Object, Object)
-	 * @param token master token for the registry
-	 * @throws IllegalArgumentException if incorrect token is passed
-	 * 
-	 * @since org.eclipse.equinox.registry 3.2
-	 */
-	public void stop(Object token) throws IllegalArgumentException;
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/IRegistryChangeEvent.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/IRegistryChangeEvent.java
deleted file mode 100644
index b84d53e..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/IRegistryChangeEvent.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.runtime;
-
-/**
- * Registry change events describe changes to the extension registry. 
- * <p>
- * This interface can be used without OSGi running.
- * </p><p>
- * This interface is not intended to be implemented by clients.
- * </p>
- * @since 3.0
- * @see IExtensionRegistry
- * @see IRegistryChangeListener
- */
-public interface IRegistryChangeEvent {
-	/** 
-	 * Returns all extension deltas for all hosts. Returns an empty array if there are 
-	 * no deltas in this event.
-	 * 
-	 * @return  all extension deltas 
-	 */
-	public IExtensionDelta[] getExtensionDeltas();
-
-	/** 
-	 * Returns all extension deltas for the given namespace. Returns an empty array if there are
-	 * no deltas in this event for any extension points provided in the given namespace. 
-	 * 
-	 * @param namespace the namespace for the extension deltas 
-	 * @return all extension deltas for the given namespace 
-	 */
-	public IExtensionDelta[] getExtensionDeltas(String namespace);
-
-	/** 
-	 * Returns all the extension deltas for the given namespace and extension point. Returns an 
-	 * empty array if there are no deltas in this event for the given extension point.
-	 *  
-	 * @param namespace the namespace for the extension point
-	 * @param extensionPoint the simple identifier of the 
-	 * 	extension point (e.g. <code>"builders"</code>)
-	 * @return all extension deltas for the given extension point
-	 */
-	public IExtensionDelta[] getExtensionDeltas(String namespace, String extensionPoint);
-
-	/** 
-	 * Returns the delta for the given namespace, extension point and extension. 
-	 * Returns <code>null</code> if none exists in this event.
-	 * 
-	 * @param namespace the namespace for the extension point
-	 * @param extensionPoint the simple identifier of the 
-	 * 	extension point (e.g. <code>"builders"</code>)
-	 * @param extension the unique identifier of the extension
-	 * @return the extension delta, or <code>null</code>
-	 */
-	public IExtensionDelta getExtensionDelta(String namespace, String extensionPoint, String extension);
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/IRegistryChangeListener.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/IRegistryChangeListener.java
deleted file mode 100644
index 57adf2e..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/IRegistryChangeListener.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.runtime;
-
-import java.util.EventListener;
-
-/**
- * A registry change listener is notified of changes to extensions points in the 
- * registry.  These changes arise from subsequent manipulation of the registry after 
- * it was initially created.
- * <p>
- * This interface can be used without OSGi running.
- * </p><p>
- * Clients may implement this interface.
- * </p>
- * 
- * @since 3.0
- * @see IExtensionRegistry
- * @see IRegistryChangeEvent
- */
-public interface IRegistryChangeListener extends EventListener {
-	/**
-	 * Notifies this listener that some registry changes are happening, or have 
-	 * already happened.
-	 * <p>
-	 * The supplied event gives details. This event object (and the deltas in it) is valid 
-	 * only for the duration of the invocation of this method.
-	 * </p> <p>
-	 * Note: This method is called by the platform; it is not intended
-	 * to be called directly by clients.
-	 * </p>
-	 * 
-	 * @param event the registry change event
-	 * @see IRegistryChangeEvent
-	 */
-	public void registryChanged(IRegistryChangeEvent event);
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/InvalidRegistryObjectException.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/InvalidRegistryObjectException.java
deleted file mode 100644
index a33fa5b..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/InvalidRegistryObjectException.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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.runtime;
-
-/** 
- * An unchecked exception indicating that an attempt to access
- * an extension registry object that is no longer valid.
- * <p>
- * This exception is thrown by methods on extension registry
- * objects. It is not intended to be instantiated or
- * subclassed by clients.
- * </p><p>
- * This class can be used without OSGi running.
- * </p>
- */
-public class InvalidRegistryObjectException extends RuntimeException {
-	/*
-	 * Declare a stable serialVersionUID.
-	 */
-	private static final long serialVersionUID = 1L;
-
-	private static final String MESSAGE = "Invalid registry object"; //$NON-NLS-1$
-
-	/**
-	 * Creates a new exception instance with null as its detail message.
-	 */
-	public InvalidRegistryObjectException() {
-		super(MESSAGE);
-	}
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/RegistryFactory.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/RegistryFactory.java
deleted file mode 100644
index 405a746..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/RegistryFactory.java
+++ /dev/null
@@ -1,128 +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.core.runtime;
-
-import java.io.File;
-import org.eclipse.core.internal.registry.*;
-import org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI;
-import org.eclipse.core.runtime.spi.*;
-
-/**
- * Use this class to create or obtain an extension registry.
- * <p>
- * The following methods can be used without OSGi running:
- * </p><p><ul>
- * <li>{@link #createRegistry(RegistryStrategy, Object, Object)}</li>
- * <li>{@link #getRegistry()}</li>
- * <li>{@link #setDefaultRegistryProvider(IRegistryProvider)}</li>
- * </ul></p><p>
- * This class is not intended to be subclassed or instantiated.
- * </p>
- * @since org.eclipse.equinox.registry 3.2
- */
-public final class RegistryFactory {
-
-	/**
-	 * Creates a new extension registry based on the given set of parameters.
-	 * <p>
-	 * The strategy is an optional collection of methods that supply additional registry 
-	 * functionality. Users may pass in <code>null</code> for the strategy if default 
-	 * behavior is sufficient.
-	 * </p><p>
-	 * The master token is stored by the registry and later used as an identifier of callers 
-	 * who are allowed full control over the registry functionality. Users may pass in 
-	 * <code>null</code> as a master token.
-	 * </p><p>
-	 * The user token is stored by the registry and later used as an identifier of callers
-	 * who are allowed to control registry at the user level. For instance, users attempting to 
-	 * modify dynamic contributions to the registry have to use the user token. Users may pass 
-	 * in <code>null</code> as a user token.
-	 * </p>
-	 * @param strategy registry strategy or <code>null</code>
-	 * @param masterToken the token used for master control of the registry or <code>null</code>
-	 * @param userToken the token used for user control of the registry or <code>null</code>
-	 * @return the new extension registry
-	 */
-	public static IExtensionRegistry createRegistry(RegistryStrategy strategy, Object masterToken, Object userToken) {
-		return new ExtensionRegistry(strategy, masterToken, userToken);
-	}
-
-	/**
-	 * Returns the default extension registry specified by the registry provider.
-	 * May return <code>null</code> if the provider has not been set or if the 
-	 * registry has not been created.
-	 * 
-	 * @return existing extension registry or <code>null</code>
-	 */
-	public static IExtensionRegistry getRegistry() {
-		IRegistryProvider defaultRegistryProvider = RegistryProviderFactory.getDefault();
-		if (defaultRegistryProvider == null)
-			return null;
-		return defaultRegistryProvider.getRegistry();
-	}
-
-	/**
-	 * Creates a registry strategy that can be used in an OSGi container. The strategy uses 
-	 * OSGi contributions and contributors for the registry processing and takes advantage of 
-	 * additional mechanisms available through the OSGi library.
-	 * <p>
-	 * The OSGi registry strategy sequentially checks the array of storage directories to 
-	 * discover the location of the registry cache formed by previous invocations of the extension
-	 * registry. Once found, the location is used to store registry cache. If this value 
-	 * is <code>null</code> then caching of the registry content is disabled.
-	 * </p><p>
-	 * The cache read-only array is an array the same length as the storage directory array. 
-	 * It contains boolean values indicating whether or not each storage directory is read-only. 
-	 * If the value at an index is <code>true</code> then the location at the corresponding index 
-	 * in the storage directories array is read-only; if <code>false</code> then the cache location 
-	 * is read-write. The array can be <code>null</code> if the <code>storageDirs</code> parameter 
-	 * is <code>null</code>.
-	 * </p><p>
-	 * The master token should be passed to the OSGi registry strategy to permit it to perform 
-	 * contributions to the registry.
-	 * </p><p>
-	 * <b>Note:</b> This class/interface is part of an interim API that is still under 
-	 * development and expected to change significantly before reaching stability. 
-	 * It is being made available at this early stage to solicit feedback from pioneering 
-	 * adopters on the understanding that any code that uses this API will almost certainly 
-	 * be broken (repeatedly) as the API evolves.
-	 * </p>
-	 * @param storageDirs array of file system directories or <code>null</code>
-	 * @param cacheReadOnly array of read only attributes or <code>null</code>
-	 * @param token control token for the registry
-	 * @return registry strategy that can be used in an OSGi container
-	 * @see #createRegistry(RegistryStrategy, Object, Object)
-	 */
-	public static RegistryStrategy createOSGiStrategy(File[] storageDirs, boolean[] cacheReadOnly, Object token) {
-		return new RegistryStrategyOSGI(storageDirs, cacheReadOnly, token);
-	}
-
-	/**
-	 * Use this method to specify the default registry provider. The default registry provider
-	 * is immutable in the sense that it can be set only once during the application runtime.
-	 * Attempts to change the default registry provider will cause an exception to be thrown.
-	 * <p>
-	 * The given registry provider must not be <code>null</code>.
-	 * </p><p>
-	 * <b>Note:</b> This class/interface is part of an interim API that is still under 
-	 * development and expected to change significantly before reaching stability. 
-	 * It is being made available at this early stage to solicit feedback from pioneering 
-	 * adopters on the understanding that any code that uses this API will almost certainly 
-	 * be broken (repeatedly) as the API evolves.
-	 * </p>
-	 * @see RegistryFactory#getRegistry()
-	 * @param provider extension registry provider
-	 * @throws CoreException if a default registry provider was already set for this application
-	 */
-	public static void setDefaultRegistryProvider(IRegistryProvider provider) throws CoreException {
-		RegistryProviderFactory.setDefault(provider);
-	}
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/dynamichelpers/ExtensionTracker.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/dynamichelpers/ExtensionTracker.java
deleted file mode 100644
index d0a965f..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/dynamichelpers/ExtensionTracker.java
+++ /dev/null
@@ -1,314 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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.runtime.dynamichelpers;
-
-import java.util.HashMap;
-import java.util.Map;
-import org.eclipse.core.internal.registry.RegistryMessages;
-import org.eclipse.core.internal.runtime.ReferenceHashSet;
-import org.eclipse.core.internal.runtime.RuntimeLog;
-import org.eclipse.core.runtime.IExtension;
-import org.eclipse.core.runtime.IExtensionDelta;
-import org.eclipse.core.runtime.IExtensionPoint;
-import org.eclipse.core.runtime.IExtensionRegistry;
-import org.eclipse.core.runtime.IRegistryChangeEvent;
-import org.eclipse.core.runtime.IRegistryChangeListener;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.ListenerList;
-import org.eclipse.core.runtime.RegistryFactory;
-import org.eclipse.core.runtime.Status;
-
-/**
- * Implementation of the IExtensionTracker.
- * <p>
- * This class can be used without OSGi running.
- * </p>
- * @see org.eclipse.core.runtime.dynamichelpers.IExtensionTracker 
- * @since 3.1
- */
-public class ExtensionTracker implements IExtensionTracker, IRegistryChangeListener {
-	//Map keeping the association between extensions and a set of objects. Key: IExtension, value: ReferenceHashSet.
-	private Map extensionToObjects = new HashMap();
-	private ListenerList handlers = new ListenerList();
-	private final Object lock = new Object();
-	private boolean closed = false;
-	private IExtensionRegistry registry; // the registry that this tacker works with
-
-	private static final Object[] EMPTY_ARRAY = new Object[0];
-
-	/**
-	 * Construct a new instance of the extension tracker.
-	 */
-	public ExtensionTracker() {
-		this(RegistryFactory.getRegistry());
-	}
-
-	/**
-	 * Construct a new instance of the extension tracker using the given registry
-	 * containing tracked extensions and extension points.
-	 * 
-	 * @param theRegistry the extension registry to track 
-	 * @since org.eclipse.equinox.registry 3.2
-	 */
-	public ExtensionTracker(IExtensionRegistry theRegistry) {
-		registry = theRegistry;
-		if (registry != null)
-			registry.addRegistryChangeListener(this);
-		else
-			RuntimeLog.log(new Status(IStatus.ERROR, RegistryMessages.OWNER_NAME, 0, RegistryMessages.registry_no_default, null));
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.runtime.dynamichelpers.IExtensionTracker#registerHandler(org.eclipse.core.runtime.dynamichelpers.IExtensionChangeHandler, org.eclipse.core.runtime.dynamichelpers.IFilter)
-	 */
-	public void registerHandler(IExtensionChangeHandler handler, IFilter filter) {
-		synchronized (lock) {
-			if (closed)
-				return;
-			// TODO need to store the filter with the handler
-			handlers.add(new HandlerWrapper(handler, filter));
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see IExtensionTracker@unregisterHandler(IExtensionChangeHandler)
-	 */
-	public void unregisterHandler(IExtensionChangeHandler handler) {
-		synchronized (lock) {
-			if (closed)
-				return;
-			handlers.remove(new HandlerWrapper(handler, null));
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see IExtensionTracker@registerObject(IExtension, Object, int)
-	 */
-	public void registerObject(IExtension element, Object object, int referenceType) {
-		if (element == null || object == null)
-			return;
-
-		synchronized (lock) {
-			if (closed)
-				return;
-
-			ReferenceHashSet associatedObjects = (ReferenceHashSet) extensionToObjects.get(element);
-			if (associatedObjects == null) {
-				associatedObjects = new ReferenceHashSet();
-				extensionToObjects.put(element, associatedObjects);
-			}
-			associatedObjects.add(object, referenceType);
-		}
-	}
-
-	/**
-	 * Implementation of IRegistryChangeListener interface.
-	 * <p>
-	 * <em>This method must not be called by clients.</em>
-	 * </p>
-	 */
-	public void registryChanged(IRegistryChangeEvent event) {
-		IExtensionDelta delta[] = event.getExtensionDeltas();
-		int len = delta.length;
-		for (int i = 0; i < len; i++)
-			switch (delta[i].getKind()) {
-				case IExtensionDelta.ADDED :
-					doAdd(delta[i]);
-					break;
-				case IExtensionDelta.REMOVED :
-					doRemove(delta[i]);
-					break;
-				default :
-					break;
-			}
-	}
-
-	/**
-	 * Notify all handlers whose filter matches that the given delta occurred.
-	 * If the list of objects is not <code>null</code> then this is a removal and 
-	 * the handlers will be given a chance to process the list.  If it is <code>null</code>
-	 * then the notification is an addition.
-	 * 
-	 * @param delta the change to broadcast
-	 * @param objects the objects to pass to the handlers on removals
-	 */
-	private void notify(IExtensionDelta delta, Object[] objects) {
-		// Get a copy of the handlers for safe notification
-		Object[] handlersCopy = null;
-		synchronized (lock) {
-			if (closed)
-				return;
-
-			if (handlers == null || handlers.isEmpty())
-				return;
-			handlersCopy = handlers.getListeners();
-		}
-
-		for (int i = 0; i < handlersCopy.length; i++) {
-			HandlerWrapper wrapper = (HandlerWrapper) handlersCopy[i];
-			if (wrapper.filter == null || wrapper.filter.matches(delta.getExtensionPoint())) {
-				if (objects == null)
-					applyAdd(wrapper.handler, delta.getExtension());
-				else
-					applyRemove(wrapper.handler, delta.getExtension(), objects);
-			}
-		}
-	}
-
-	protected void applyAdd(IExtensionChangeHandler handler, IExtension extension) {
-		handler.addExtension(this, extension);
-	}
-
-	private void doAdd(IExtensionDelta delta) {
-		notify(delta, null);
-	}
-
-	private void doRemove(IExtensionDelta delta) {
-		Object[] removedObjects = null;
-		synchronized (lock) {
-			if (closed)
-				return;
-
-			ReferenceHashSet associatedObjects = (ReferenceHashSet) extensionToObjects.remove(delta.getExtension());
-			if (associatedObjects == null)
-				return;
-			//Copy the objects early so we don't hold the lock too long
-			removedObjects = associatedObjects.toArray();
-		}
-		notify(delta, removedObjects);
-	}
-
-	protected void applyRemove(IExtensionChangeHandler handler, IExtension removedExtension, Object[] removedObjects) {
-		handler.removeExtension(removedExtension, removedObjects);
-	}
-
-	/* (non-Javadoc)
-	 * @see IExtensionTracker@getObjects(IExtension)
-	 */
-	public Object[] getObjects(IExtension element) {
-		synchronized (lock) {
-			if (closed)
-				return EMPTY_ARRAY;
-			ReferenceHashSet objectSet = (ReferenceHashSet) extensionToObjects.get(element);
-			if (objectSet == null)
-				return EMPTY_ARRAY;
-
-			return objectSet.toArray();
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see IExtensionTracker@close()
-	 */
-	public void close() {
-		synchronized (lock) {
-			if (closed)
-				return;
-			if (registry != null)
-				registry.removeRegistryChangeListener(this);
-			extensionToObjects = null;
-			handlers = null;
-
-			closed = true;
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see IExtensionTracker@unregisterObject(IExtension, Object)
-	 */
-	public void unregisterObject(IExtension extension, Object object) {
-		synchronized (lock) {
-			if (closed)
-				return;
-			ReferenceHashSet associatedObjects = (ReferenceHashSet) extensionToObjects.get(extension);
-			if (associatedObjects != null)
-				associatedObjects.remove(object);
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see IExtensionTracker@unregisterObject(IExtension)
-	 */
-	public Object[] unregisterObject(IExtension extension) {
-		synchronized (lock) {
-			if (closed)
-				return EMPTY_ARRAY;
-			ReferenceHashSet associatedObjects = (ReferenceHashSet) extensionToObjects.remove(extension);
-			if (associatedObjects == null)
-				return EMPTY_ARRAY;
-			return associatedObjects.toArray();
-		}
-	}
-
-	/**
-	 * Return an instance of filter matching all changes for the given extension point.
-	 * 
-	 * @param xpt the extension point 
-	 * @return a filter
-	 */
-	public static IFilter createExtensionPointFilter(final IExtensionPoint xpt) {
-		return new IFilter() {
-			public boolean matches(IExtensionPoint target) {
-				return xpt.equals(target);
-			}
-		};
-	}
-
-	/**
-	 * Return an instance of filter matching all changes for the given extension points.
-	 * 
-	 * @param xpts the extension points used to filter
-	 * @return a filter
-	 */
-	public static IFilter createExtensionPointFilter(final IExtensionPoint[] xpts) {
-		return new IFilter() {
-			public boolean matches(IExtensionPoint target) {
-				for (int i = 0; i < xpts.length; i++)
-					if (xpts[i].equals(target))
-						return true;
-				return false;
-			}
-		};
-	}
-
-	/**
-	 * Return an instance of filter matching all changes from a given plugin.
-	 * 
-	 * @param id the plugin id 
-	 * @return a filter
-	 */
-	public static IFilter createNamespaceFilter(final String id) {
-		return new IFilter() {
-			public boolean matches(IExtensionPoint target) {
-				return id.equals(target.getNamespaceIdentifier());
-			}
-		};
-	}
-
-	private class HandlerWrapper {
-		IExtensionChangeHandler handler;
-		IFilter filter;
-
-		public HandlerWrapper(IExtensionChangeHandler handler, IFilter filter) {
-			this.handler = handler;
-			this.filter = filter;
-		}
-
-		public boolean equals(Object target) {
-			return handler.equals(((HandlerWrapper) target).handler);
-		}
-
-		public int hashCode() {
-			return handler.hashCode();
-		}
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/dynamichelpers/IExtensionChangeHandler.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/dynamichelpers/IExtensionChangeHandler.java
deleted file mode 100644
index ded0f49..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/dynamichelpers/IExtensionChangeHandler.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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.runtime.dynamichelpers;
-
-import org.eclipse.core.runtime.IExtension;
-
-/**
- * Extension change handlers are notified of changes for a given extension 
- * point in the context of an extension tracker.
- * <p>
- * This interface can be used without OSGi running.
- * </p><p>
- * This interface is intended to be implemented by clients.
- * </p>
- * @since 3.1
- */
-public interface IExtensionChangeHandler {
-
-	/**
-	 * This method is called whenever an extension conforming to the extension point filter
-	 * is being added to the registry. This method does not automatically register objects 
-	 * to the tracker.
-	 * 
-	 * @param tracker a tracker to which the handler has been registered
-	 * @param extension the extension being added
-	 */
-	public void addExtension(IExtensionTracker tracker, IExtension extension);
-
-	/** 
-	 * This method is called after the removal of an extension.
-	 * 
-	 * @param extension the extension being removed
-	 * @param objects the objects that were associated with the removed extension 
-	 */
-	public void removeExtension(IExtension extension, Object[] objects);
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/dynamichelpers/IExtensionTracker.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/dynamichelpers/IExtensionTracker.java
deleted file mode 100644
index db5a57c..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/dynamichelpers/IExtensionTracker.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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.runtime.dynamichelpers;
-
-import org.eclipse.core.internal.runtime.ReferenceHashSet;
-import org.eclipse.core.runtime.IExtension;
-
-/**
- * An extension tracker keeps associations between extensions and their derived objects on an extension basis.
- * All extensions being added in a tracker will automatically be removed when the extension is uninstalled from the registry.
- * Users interested in extension removal can register a handler that will let them know when an object is being removed.
- * <p>
- * This interface can be used without OSGi running.
- * </p><p>
- * This interface is not intended to be implemented by clients.
- * </p>
- * @since 3.1
- */
-public interface IExtensionTracker {
-
-	/**
-	 * Constant for strong (normal) reference holding.
-	 * 
-	 * Value <code>1</code>.
-	 */
-	public static final int REF_STRONG = ReferenceHashSet.HARD;
-
-	/**
-	 * Constant for soft reference holding.
-	 * 
-	 * Value <code>2</code>.
-	 */
-	public static final int REF_SOFT = ReferenceHashSet.SOFT;
-
-	/**
-	 * Constant for weak reference holding.
-	 * 
-	 * Value <code>3</code>.
-	 */
-	public static final int REF_WEAK = ReferenceHashSet.WEAK;
-
-	/**
-	 * Register an extension change handler with this tracker using the given filter.
-	 * 
-	 * @param handler the handler to be registered
-	 * @param filter the filter to use to choose interesting changes
-	 */
-	public void registerHandler(IExtensionChangeHandler handler, IFilter filter);
-
-	/**
-	 * Unregister the given extension change handler previously registered with this tracker.
-	 * 
-	 * @param handler the handler to be unregistered 
-	 */
-	public void unregisterHandler(IExtensionChangeHandler handler);
-
-	/**
-	 * Create an association between the given extension and the given object.
-	 * The referenceType indicates how strongly the object is being kept in memory.
-	 * There is 3 possible values: {@link #REF_STRONG}, {@link #REF_SOFT}, {@link #REF_WEAK}.
-	 * 
-	 * @param extension the extension 
-	 * @param object the object to associate with the extension
-	 * @param referenceType one of REF_STRONG, REF_SOFT, REF_WEAK
-	 * @see #REF_STRONG
-	 * @see #REF_SOFT
-	 * @see #REF_WEAK
-	 */
-	public void registerObject(IExtension extension, Object object, int referenceType);
-
-	/**
-	 * Remove an association between the given extension and the given object.
-	 * 
-	 * @param extension the extension under which the object has been registered
-	 * @param object the object to unregister
-	 */
-	public void unregisterObject(IExtension extension, Object object);
-
-	/**
-	 * Remove all the objects associated with the given extension. Return
-	 * the removed objects.
-	 * 
-	 * @param extension the extension for which the objects are removed
-	 * @return the objects that were associated with the extension
-	 */
-	public Object[] unregisterObject(IExtension extension);
-
-	/**
-	 * Return all the objects that have been associated with the given extension.
-	 * All objects registered strongly will be return unless they have been unregistered.
-	 * The objects registered softly or weakly may not be returned if they have been garbage collected. 
-	 * Return an empty array if no associations exist.
-	 * 
-	 * @param extension the extension for which the object must be returned 
-	 * @return the array of associated objects
-	 */
-	public Object[] getObjects(IExtension extension);
-
-	/**
-	 * Close the tracker. All registered objects are freed and all handlers are being automatically removed.
-	 */
-	public void close();
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/dynamichelpers/IFilter.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/dynamichelpers/IFilter.java
deleted file mode 100644
index 200f4ab..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/dynamichelpers/IFilter.java
+++ /dev/null
@@ -1,36 +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.core.runtime.dynamichelpers;
-
-import org.eclipse.core.runtime.IExtensionPoint;
-
-/**
- * A filter compares the given object to some pattern and returns 
- * <code>true</code> if the two match and <code>false</code> otherwise.
- * <p>
- * This interface may be implemented by clients, however factory methods are 
- * available on IExtensionTracker.
- * </p><p>
- * This interface can be used without OSGi running.
- * </p>
- * @since 3.1
- */
-public interface IFilter {
-	/**
-	 * Return <code>true</code> if the given object matches the criteria 
-	 * for this filter.
-	 * 
-	 * @param target the object to match
-	 * @return <code>true</code> if the target matches this filter 
-	 * 	and <code>false</code> otherwise
-	 */
-	public boolean matches(IExtensionPoint target);
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/dynamichelpers/package.html b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/dynamichelpers/package.html
deleted file mode 100644
index 154a80a..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/dynamichelpers/package.html
+++ /dev/null
@@ -1,14 +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>Package-level Javadoc</title>
-</head>
-<body>
-Provides helpers to facilitate the authoring of dynamic plug-ins.
-<h2>
-Package Specification</h2>
-This package specifies the API for tracking extensions life-cycle.
-</p>
-</body>
-</html>
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/package.html b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/package.html
deleted file mode 100644
index d81771f..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/package.html
+++ /dev/null
@@ -1,17 +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>Package-level Javadoc</title>
-</head>
-<body>
-Provides support for the runtime platform, core utility methods and the extension registry.
-<h2>
-Package Specification</h2>
-This package contains three components:<ul>
-<li>APIs related to the runtime platform itself (provided by the <tt>org.eclipse.core.runtime</tt> plug-in)</li>
-<li>Various utility types such as <tt>Path</tt>, <tt>IPath</tt> and various flavours of progress monitors (provided by the <tt>org.eclipse.equinox.common</tt> plug-in)</li>
-<li>Extension registry mechanism (provided by the <tt>org.eclipse.equinox.registry</tt> plug-in)</li>
-</ul>
-</body>
-</html>
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/spi/IRegistryProvider.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/spi/IRegistryProvider.java
deleted file mode 100644
index 9d3b96e..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/spi/IRegistryProvider.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.core.runtime.spi;
-
-import org.eclipse.core.runtime.IExtensionRegistry;
-
-/**
- * Implement this interface to specify a contributed extension registry.
- * <p>
- * This interface can be used without OSGi running.
- * </p><p>
- * This interface may be implemented by clients.
- * </p><p>
- * <b>Note:</b> This class/interface is part of an interim API that is still under 
- * development and expected to change significantly before reaching stability. 
- * It is being made available at this early stage to solicit feedback from pioneering 
- * adopters on the understanding that any code that uses this API will almost certainly 
- * be broken (repeatedly) as the API evolves.
- * </p>
- * @see org.eclipse.core.runtime.RegistryFactory#getRegistry()
- * @see org.eclipse.core.runtime.RegistryFactory#setDefaultRegistryProvider(IRegistryProvider)
- * @since org.eclipse.equinox.registry 3.2
- */
-public interface IRegistryProvider {
-
-	/**
-	 * Returns the extension registry contributed by this provider; must not 
-	 * be <code>null</code>.
-	 * 
-	 * @return an extension registry 
-	 */
-	public IExtensionRegistry getRegistry();
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/spi/RegistryContributor.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/spi/RegistryContributor.java
deleted file mode 100644
index a9587ea..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/spi/RegistryContributor.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:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.core.runtime.spi;
-
-import org.eclipse.core.runtime.IContributor;
-
-/**
- * This class describes a registry contributor which is an entity that supplies information
- * to the extension registry. Depending on the registry strategy, contributor might delegate 
- * some of its functionality to a "host" contributor. For instance, OSGi registry strategy
- * uses "host" contributor to delegate some functionality from fragments to plug-ins. 
- * <p>
- * This class can be instantiated by the registry Service Providers.
- * </p><p>
- * This class can be used without OSGi running.
- * </p><p>
- * This class can not be extended. 
- * </p><p>
- * <b>Note:</b> This class/interface is part of an interim API that is still under 
- * development and expected to change significantly before reaching stability. 
- * It is being made available at this early stage to solicit feedback from pioneering 
- * adopters on the understanding that any code that uses this API will almost certainly 
- * be broken (repeatedly) as the API evolves.
- * </p>
- * @since org.eclipse.equinox.registry 3.2
- */
-public final class RegistryContributor implements IContributor {
-
-	/**
-	 * Actual ID of the contributor (e.g., "12"). IDs are expected to be unique in the workspace.
-	 */
-	private String actualContributorId;
-
-	/**
-	 * Actual name of the contributor (e.g., "org.eclipse.core.runtime.fragment").
-	 */
-	private String actualContributorName;
-
-	/**
-	 * ID associated with the entity "in charge" of the contributor (e.g., "1"). IDs are expected 
-	 * to be unique in the workspace. If contributor does not rely on a host, this value should be 
-	 * the same as the actual contributor ID.
-	 */
-	private String hostId;
-
-	/**
-	 * Name of the entity "in charge" of the contributor (e.g. "org.eclipse.core.runtime").
-	 * If contributor does not rely on a host, this value should be the same as the actual 
-	 * contributor name.
-	 */
-	private String hostName;
-
-	/**
-	 * Constructor for the registry contributor.
-	 * <p>
-	 * The actual ID is a string identifier for the contributor (e.g., "12") and is expected 
-	 * to be unique within the workspace. The actual ID of the contributor must not 
-	 * be <code>null</code>.
-	 * </p><p>
-	 * The actual name is the name associated with the contributor 
-	 * (e.g., "org.eclipse.core.runtime.fragment"). The actual name of the contributor must 
-	 * not be <code>null</code>. 
-	 * </p><p>
-	 * The host ID is the identifier associated with the entity "in charge" of the contributor
-	 * (e.g., "1"). IDs are expected to be unique in the workspace. If contributor does not 
-	 * rely on a host, then <code>null</code> should be used as the host ID.
-	 * </p><p>
-	 * The host name is the name of the entity "in charge" of the contributor 
-	 * (e.g., "org.eclipse.core.runtime"). If contributor does not rely on a host, then
-	 * <code>null</code> should be used as the host name.
-	 * </p><p>
-	 * There should be 1-to-1 mapping between the contributor and the contibutor ID. 
-	 * The IDs (either actual or host) can not be re-used in the same registry.
-	 * For example, if ID of 12 was used to identify contributorA, the ID of 12 can not
-	 * be used to identify contributorB or a host for the contributorC.
-	 * </p>
-	 * @param actualId contributor identifier
-	 * @param actualName name of the contributor
-	 * @param hostId id associated with the host, or <code>null</code>
-	 * @param hostName name of the host, or <code>null</code>
-	 */
-	public RegistryContributor(String actualId, String actualName, String hostId, String hostName) {
-		this.actualContributorId = actualId;
-		this.actualContributorName = actualName;
-		if (hostId != null) {
-			this.hostId = hostId;
-			this.hostName = hostName;
-		} else {
-			this.hostId = actualId;
-			this.hostName = actualName;
-		}
-	}
-
-	/**
-	 * Provides actual ID associated with the registry contributor (e.g., "12"). IDs are expected 
-	 * to be unique in the workspace.
-	 * 
-	 * @return actual ID of the registry contributor 
-	 */
-	public String getActualId() {
-		return actualContributorId;
-	}
-
-	/**
-	 * Provides actual name of the registry contributor (e.g., "org.eclipe.core.runtime.fragment").
-	 *  
-	 * @return actual name of the registry contributor 
-	 */
-	public String getActualName() {
-		return actualContributorName;
-	}
-
-	/**
-	 * Provides ID associated with the entity "in charge" of the contributor (e.g., "1"). IDs are expected 
-	 * to be unique in the workspace. If contributor does not rely on a host, this value should be 
-	 * the same as the actual contributor ID.
-	 * 
-	 * @return id of the registry contributor 
-	 */
-	public String getId() {
-		return hostId;
-	}
-
-	/**
-	 * Provides name of the entity "in charge" of the contributor (e.g., "org.eclipse.core.runtime").
-	 * If contributor does not rely on a host, this value should be the same as the actual contributor name.
-	 * 
-	 * @return name of the registry contributor 
-	 */
-	public String getName() {
-		return hostName;
-	}
-
-	/* (non-Javadoc)
-	 * @see java.lang.Object#toString()
-	 */
-	public String toString() {
-		return actualContributorName + "[" + actualContributorId + "]"; //$NON-NLS-1$ //$NON-NLS-2$
-	}
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/spi/RegistryStrategy.java b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/spi/RegistryStrategy.java
deleted file mode 100644
index 7c0a80d..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/spi/RegistryStrategy.java
+++ /dev/null
@@ -1,371 +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.core.runtime.spi;
-
-import java.io.File;
-import java.util.Map;
-import java.util.ResourceBundle;
-import javax.xml.parsers.SAXParserFactory;
-import org.eclipse.core.internal.registry.*;
-import org.eclipse.core.runtime.*;
-import org.eclipse.osgi.util.NLS;
-
-/**
- * This is the basic registry strategy. It describes how the registry does logging,
- * message translation, extra start/stop processing, event scheduling, caching, 
- * and debugging.
- * <p>
- * In this strategy:
- * </p><p><ul>
- * <li>Logging is done onto <code>System.out</code>;</li>
- * <li>The translation routine assumes that keys are prefixed with <code>'%'/<code>;</li>
- * <li>Caching is enabled and doesn't use state or time stamp validation;</li>
- * <li>Standard Java class loading is used to create executable extensions.</li>
- * </ul></p><p>
- * This class can be used without OSGi running.
- * </p><p>
- * This class can be overridden and/or instantiated by clients. 
- * </p><p>
- * <b>Note:</b> This class/interface is part of an interim API that is still under 
- * development and expected to change significantly before reaching stability. 
- * It is being made available at this early stage to solicit feedback from pioneering 
- * adopters on the understanding that any code that uses this API will almost certainly 
- * be broken (repeatedly) as the API evolves.
- * </p>
- * @since org.eclipse.equinox.registry 3.2
- */
-public class RegistryStrategy {
-
-	private SAXParserFactory theXMLParserFactory = null;
-
-	/**
-	 * Array of file system directories to store cache files; might be <code>null</code>
-	 */
-	private final File[] storageDirs;
-
-	/**
-	 * Specifies if the registry file cache is read only; might be <code>null</code>
-	 */
-	private final boolean[] cacheReadOnly;
-	
-	/**
-	 * Constructor for this default registry strategy. 
-	 * <p>
-	 * The strategy sequentially checks the array of storage directories to 
-	 * discover the location of the registry cache formed by previous invocations of the extension
-	 * registry. Once found, the location is used to store registry cache. If this value 
-	 * is <code>null</code> then caching of the registry content is disabled.
-	 * </p><p>
-	 * The cache read-only array is an array the same length as the storage directory array. 
-	 * It contains boolean values indicating whether or not each storage directory is read-only. 
-	 * If the value at an index is <code>true</code> then the location at the corresponding index 
-	 * in the storage directories array is read-only; if <code>false</code> then the cache location 
-	 * is read-write. The array can be <code>null</code> if the <code>storageDirs</code> parameter 
-	 * is <code>null</code>.
-	 * </p>
-	 *
-	 * @param storageDirs array of file system directories, or <code>null</code>
-	 * @param cacheReadOnly array of read only attributes, or <code>null</code>
-	 */
-	public RegistryStrategy(File[] storageDirs, boolean[] cacheReadOnly) {
-		this.storageDirs = storageDirs;
-		this.cacheReadOnly = cacheReadOnly;
-	}
-
-	/**
-	 * Returns the number of possible cache locations for this registry.
-	 *
-	 * @return number of possible cache locations for this registry
-	 */
-	public final int getLocationsLength() {
-		if (storageDirs == null)
-			return 0;
-		return storageDirs.length;
-	}
-
-	/**
-	 * Returns the possible registry cache location identified by the index.
-	 *
-	 * @param index index of the possible registry location
-	 * @return potential registry cache location
-	 */
-	public final File getStorage(int index) {
-		if (storageDirs != null)
-			return storageDirs[index];
-		return null;
-	}
-
-	/**
-	 * Returns the read-only status of the registry cache location.
-	 *
-	 * @param index the index of the possible registry location
-	 * @return <code>true</code> if the location is read only and 
-	 * 	<code>false</code> if the location is read/write
-	 */
-	public final boolean isCacheReadOnly(int index) {
-		if (cacheReadOnly != null)
-			return cacheReadOnly[index];
-		return true;
-	}
-
-	/**
-	 * Override this method to provide customized logging functionality
-	 * to the registry. The method adds a log entry based on the supplied status. 
-	 * <p>
-	 * This method writes a message to <code>System.out</code> 
-	 * in the following format:
-	 * <pre>
-	 * [Error|Warning|Log]: Main error message
-	 * [Error|Warning|Log]: Child error message 1
-	 * 	...
-	 * [Error|Warning|Log]: Child error message N
-	 * </pre></p>
-	 * 
-	 * @param status the status to log
-	 */
-	public void log(IStatus status) {
-		RegistrySupport.log(status, null);
-	}
-
-	/**
-	 * Translates key using the supplied resource bundle. The resource bundle is 
-	 * optional and might be <code>null</code>.
-	 * <p>
-	 * The default translation routine assumes that keys are prefixed with '%'. If 
-	 * no resource bundle is present, the key itself (without leading '%') is returned. 
-	 * There is no decoding for the leading '%%'.
-	 * </p>
-	 *
-	 * @param key message key to be translated
-	 * @param resources resource bundle, or <code>null</code>
-	 * @return the translated string, must not be <code>null</code>
-	 */
-	public String translate(String key, ResourceBundle resources) {
-		return RegistrySupport.translate(key, resources);
-	}
-
-	/**
-	 * Override this method to provide additional processing performed 
-	 * when the registry is created and started. Overrides should call
-	 * <code>super.onStart()</code> at the beginning of the processing. 
-	 * 
-	 * @param registry the extension registry being started
-	 */
-	public void onStart(IExtensionRegistry registry) {
-		// The default implementation
-	}
-
-	/**
-	 * Override this method to provide additional processing to be performed
-	 * just before the registry is stopped. Overrides should call 
-	 * <code>super.onStop()</code> at the end of the processing. 
-	 * @param registry the extension registry being stopped
-	 */
-	public void onStop(IExtensionRegistry registry) {
-		// The default implementation
-	}
-
-	/**
-	 * Creates an executable extension. Override this method to supply an alternative processing 
-	 * for the creation of executable extensions. 
-	 * <p>
-	 * This method receives the contributor of the executable extension and, possibly,
-	 * an optional contributor name if specified by the executable extension. The overridden
-	 * contributor name might be <code>null</code>.  
-	 * </p><p>
-	 * In this implementation registry attempts to instantiate the class specified via
-	 * the class name (must not be <code>null</code>) using standard Java reflection mechanism.
-	 * This method assumes that such class has a default constructor with no arguments.
-	 * </p>
-	 *
-	 * @param contributor the contributor of this executable extension
-	 * @param className the name of the class to be instantiated
-	 * @param overridenContributorName the contributor to be used, or <code>null</code> if not specified
-	 * @return the object created, or <code>null</code>
-	 * @throws CoreException if there was a problem creating the executable extension
-	 * @see IConfigurationElement#createExecutableExtension(String)
-	 * @see IExecutableExtension
-	 */
-	public Object createExecutableExtension(RegistryContributor contributor, String className, String overridenContributorName) throws CoreException {
-		Object result = null;
-		Class classInstance = null;
-		try {
-			classInstance = Class.forName(className);
-		} catch (ClassNotFoundException e1) {
-			String message = NLS.bind(RegistryMessages.exExt_findClassError, contributor.getActualName(), className);
-			throw new CoreException(new Status(IStatus.ERROR, RegistryMessages.OWNER_NAME, IRegistryConstants.PLUGIN_ERROR, message, e1));
-		}
-
-		try {
-			result = classInstance.newInstance();
-		} catch (Exception e) {
-			String message = NLS.bind(RegistryMessages.exExt_instantiateClassError, contributor.getActualName(), className);
-			throw new CoreException(new Status(IStatus.ERROR, RegistryMessages.OWNER_NAME, IRegistryConstants.PLUGIN_ERROR, message, e));
-		}
-		return result;
-	}
-
-	/**
-	 * Override this method to customize scheduling of an extension registry event. Note that this method 
-	 * <strong>must</strong> make the following call to actually process the event:
-	 * <p><pre><code>
-	 * 	RegistryStrategy.processChangeEvent(listeners, deltas, registry);
-	 * </code></pre></p><p>
-	 * In the default implementation, the method registry events are executed in a queue 
-	 * on a separate thread (i.e. asynchronously, sequentially).
-	 * </p>
-	 *
-	 * @param listeners the list of active listeners (thread safe); may not be <code>null</code>
-	 * @param deltas the registry deltas (thread safe); may not be <code>null</code>
-	 * @param registry the extension registry (NOT thread safe); may not be <code>null</code>
-	 */
-	public void scheduleChangeEvent(Object[] listeners, Map deltas, Object registry) {
-		((ExtensionRegistry) registry).scheduleChangeEvent(listeners, deltas);
-	}
-
-	/**
-	 * This method performs actual processing of the registry change event. It should 
-	 * only be used by overrides of the RegistryStrategy.scheduleChangeEvent. It will
-	 * return <code>null</code> if an unexpected registry type was encountered.
-	 * 
-	 * @param listeners the list of active listeners; may not be <code>null</code>
-	 * @param deltas the extension registry deltas; may not be <code>null</code>
-	 * @param registry the extension registry; may not be <code>null</code>
-	 * @return status of the operation or <code>null</code>
-	 */
-	public final static IStatus processChangeEvent(Object[] listeners, Map deltas, Object registry) {
-		if (registry instanceof ExtensionRegistry)
-			return ((ExtensionRegistry) registry).processChangeEvent(listeners, deltas);
-		return null;
-	}
-
-	/**
-	 * Override this method to specify debug requirements to the registry. In the default 
-	 * implementation this method returns <code>false</code> indicating that debug functionality 
-	 * is turned off.
-	 * <p>
-	 * Note that in a general case the extension registry plug-in doesn't depend on OSGI and
-	 * therefore cannot use Eclipse .options files to discover debug options.
-	 * </p>
-	 *
-	 * @return <code>true</code> if debug logging and validation should be performed and
-	 * 	<code>false</code> otherwise
-	 */
-	public boolean debug() {
-		return false;
-	}
-
-	/**
-	 * Override this method to specify debug requirements for the registry event processing. 
-	 * In the default implementation this method returns <code>false</code> indicating that
-	 * debug of the registry events is turned off.
-	 * <p>
-	 * Note that in a general case the extension registry plug-in doesn't depend on OSGI and
-	 * therefore cannot use Eclipse .options files to discover debug options.
-	 * </p>
-	 *
-	 * @return <code>true</code> if debug logging and validation of the registry events
-	 * 	should be performed and <code>false</code> otherwise
-	 */
-	public boolean debugRegistryEvents() {
-		return false;
-	}
-
-	/**
-	 * Specifies if the extension registry should use cache to store registry data between 
-	 * invocations.
-	 * <p>
-	 * The default implementation enables caching returning <code>true</code>.
-	 * </p>
-	 *
-	 * @return <code>true</code> if the cache should be used and <code>false</code> otherwise
-	 */
-	public boolean cacheUse() {
-		return true;
-	}
-
-	/**
-	 * Specifies if lazy cache loading is used. 
-	 * <p>
-	 * The default implementation specifies that lazy cache loading is going to be used
-	 * and therefore returns <code>true</code>.
-	 * </p>
-	 *
-	 * @return <code>true</code> if lazy cache loading is used and <code>false</code> otherwise
-	 */
-	public boolean cacheLazyLoading() {
-		return true;
-	}
-
-	/**
-	 * This method is called as a part of the registry cache validation. The cache is valid
-	 * on the registry startup if the pair {container time stamp, contributors time stamp} 
-	 * supplied by the registry strategy is the same as the {container time stamp, contributors time stamp}
-	 * stored in the registry cache. The goal of the validation is to be able to catch modifications
-	 * made to the original data contributed into the registry and not reflected in the registry cache. 
-	 * <p>
-	 * The method produces a number that corresponds to the current state of the data stored 
-	 * by the container. Increment the stamp if the data stored in the container has been updated
-	 * so that the data cached by the registry is no longer valid. For instance, in Eclipse addition 
-	 * or removal of a bundle results in the number returned by this method being incremented. As a result, 
-	 * if a bundle that contributed plugin.xml into the extension registry was modified, the state doesn't 
-	 * match the state stored in the registry cache. In this case the cache content becomes invalid and 
-	 * the registry needs to be re-created from the original data. 
-	 * </p><p>
-	 * Generally, treat this number as a hash code for the data stored in the registry. 
-	 * It stays the same as long as the registry content is not changing. It becomes a different 
-	 * number as the registry content gets modified.
-	 * </p><p>
-	 * Return 0 to indicate that state verification is not required.
-	 * </p>
-	 *
-	 * @return number indicating state of the application data
-	 */
-	public long getContainerTimestamp() {
-		return 0;
-	}
-
-	/**
-	 * This method is called as a part of the registry cache validation. The method calculates 
-	 * a number describing the time when the originating contributions (i.e., plugin.xml files 
-	 * in case of the Eclipse registry) were last modified. 
-	 * <p>
-	 * The value returned by the method is compared with the timestamp tracked by the registry. 
-	 * If contributions changed since they have been added to the registry (i.e., plugin.xml
-	 * file was modified since the last run), the value of the {@link #getContributionsTimestamp()}
-	 * will change and no longer will be the same as the value tracked by the registry. In this case 
-	 * the cache is considered to be invalid and the registry is going to be re-populated form scratch.
-	 * </p><p>
-	 * (The word "timestamp" is used very loosely here. In this context, "timestamp" is more likely
-	 * to be a hash value aggregating a number of actual timestamps from the contributions.) 
-	 * </p><p>
-	 * This method may return 0 to indicate that no time stamp verification is required. 
-	 * </p>
-	 * @return a value corresponding to the last mofification time of contributions contained
-	 * in the registry 
-	 */
-	public long getContributionsTimestamp() {
-		return 0;
-	}
-
-	/**
-	 * Returns the parser used by the registry to parse descriptions of extension points and extensions.
-	 * This method must not return <code>null</code>.
-	 * 
-	 * @return this strategy's parser 
-	 * @see org.eclipse.core.runtime.IExtensionRegistry#addContribution(java.io.InputStream, IContributor, boolean, String, ResourceBundle, Object)
-	 */
-	public SAXParserFactory getXMLParser() {
-		if (theXMLParserFactory == null)
-			theXMLParserFactory = SAXParserFactory.newInstance();
-		return theXMLParserFactory;
-	}
-}
diff --git a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/spi/package.html b/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/spi/package.html
deleted file mode 100644
index 7812724..0000000
--- a/bundles/org.eclipse.equinox.registry/src/org/eclipse/core/runtime/spi/package.html
+++ /dev/null
@@ -1,14 +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>Package-level Javadoc</title>
-</head>
-<body>
-Extension registry infrastructure for service providers 
-<h2>
-Package Specification</h2>
-<p>This package provides an infrastructure and helper utilities oriented towards service providers implementing their own extension registries.
-</p>
-</body>
-</html>
diff --git a/bundles/org.eclipse.equinox.servletbridge/templates/WEB-INF/eclipse/launch.ini b/bundles/org.eclipse.equinox.servletbridge/templates/WEB-INF/eclipse/launch.ini
index d6cb9de..5c35856 100644
--- a/bundles/org.eclipse.equinox.servletbridge/templates/WEB-INF/eclipse/launch.ini
+++ b/bundles/org.eclipse.equinox.servletbridge/templates/WEB-INF/eclipse/launch.ini
@@ -3,5 +3,7 @@
 # @null is a special value used to override and clear the frameworks copy of a System Property prior to starting the framework
 osgi.parentClassloader=ext
 osgi.contextClassLoaderParent=ext
+eclipse.ignoreApp=true
+osgi.noShutdown=true
 osgi.bundles=@null
 osgi.bundles.defaultStartLevel=@null
diff --git a/bundles/org.eclipse.equinox.useradmin/.classpath b/bundles/org.eclipse.equinox.useradmin/.classpath
deleted file mode 100644
index 1fa3e68..0000000
--- a/bundles/org.eclipse.equinox.useradmin/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/bundles/org.eclipse.equinox.useradmin/.cvsignore b/bundles/org.eclipse.equinox.useradmin/.cvsignore
deleted file mode 100644
index ba077a4..0000000
--- a/bundles/org.eclipse.equinox.useradmin/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-bin
diff --git a/bundles/org.eclipse.equinox.useradmin/.project b/bundles/org.eclipse.equinox.useradmin/.project
deleted file mode 100644
index b878668..0000000
--- a/bundles/org.eclipse.equinox.useradmin/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.equinox.useradmin</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.jdt.core.javanature</nature>
-		<nature>org.eclipse.pde.PluginNature</nature>
-	</natures>
-</projectDescription>
diff --git a/bundles/org.eclipse.equinox.useradmin/.settings/org.eclipse.core.resources.prefs b/bundles/org.eclipse.equinox.useradmin/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index 16532b2..0000000
--- a/bundles/org.eclipse.equinox.useradmin/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Tue May 25 15:00:03 EDT 2004
-encoding/<project>=ISO-8859-1
-eclipse.preferences.version=1
diff --git a/bundles/org.eclipse.equinox.useradmin/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.equinox.useradmin/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 825f395..0000000
--- a/bundles/org.eclipse.equinox.useradmin/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,49 +0,0 @@
-#Fri Dec 16 09:20:48 CST 2005
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=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=disabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-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.overridingPackageDefaultMethod=warning
-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=ignore
-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=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
diff --git a/bundles/org.eclipse.equinox.useradmin/META-INF/MANIFEST.MF b/bundles/org.eclipse.equinox.useradmin/META-INF/MANIFEST.MF
deleted file mode 100644
index b59383c..0000000
--- a/bundles/org.eclipse.equinox.useradmin/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,18 +0,0 @@
-Bundle-ManifestVersion: 2
-Bundle-Vendor: %bundleVendor
-Bundle-Version: 1.0.0.qualifier
-Bundle-Activator: org.eclipse.equinox.useradmin.Activator
-Bundle-Copyright: %bundleCopyright
-Bundle-SymbolicName: org.eclipse.equinox.useradmin
-Import-Service: org.osgi.service.log.LogService
-Bundle-Name: %bundleName
-Export-Service: org.osgi.service.useradmin.UserAdmin
-Import-Package: org.eclipse.osgi.framework.eventmgr,
- org.osgi.framework;version="1.1",
- org.osgi.service.log;version="1.0",
- org.osgi.service.prefs;version="1.0",
- org.osgi.service.useradmin;version="1.0",
- org.osgi.util.tracker;version="1.1",
- org.eclipse.osgi.util
-Export-Package: org.eclipse.equinox.useradmin;x-internal:=true
-Bundle-Localization: plugin
diff --git a/bundles/org.eclipse.equinox.useradmin/about.html b/bundles/org.eclipse.equinox.useradmin/about.html
deleted file mode 100644
index 3989f53..0000000
--- a/bundles/org.eclipse.equinox.useradmin/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 11, 2006</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 (&quot;EPL&quot;).  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, &quot;Program&quot; 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 (&quot;Redistributor&quot;) 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>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/bundles/org.eclipse.equinox.useradmin/build.properties b/bundles/org.eclipse.equinox.useradmin/build.properties
deleted file mode 100644
index 8732619..0000000
--- a/bundles/org.eclipse.equinox.useradmin/build.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-###############################################################################
-# Copyright (c) 2005 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
-###############################################################################
-bin.includes = META-INF/,\
-               plugin*.properties,\
-               about.html,\
-               .
-src.includes = about.html
-source.. = src/
-output.. = bin/
diff --git a/bundles/org.eclipse.equinox.useradmin/plugin.properties b/bundles/org.eclipse.equinox.useradmin/plugin.properties
deleted file mode 100644
index 3bf3c5c..0000000
--- a/bundles/org.eclipse.equinox.useradmin/plugin.properties
+++ /dev/null
@@ -1,13 +0,0 @@
-###############################################################################
-# Copyright (c) 2005 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
-###############################################################################
-bundleVendor = Eclipse.org
-bundleName = User Admin Service
-bundleCopyright = Copyright (c) IBM Corp. 2001, 2005
diff --git a/bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/Activator.java b/bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/Activator.java
deleted file mode 100644
index a172419..0000000
--- a/bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/Activator.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 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.useradmin;
-
-import java.util.Hashtable;
-import org.osgi.framework.*;
-import org.osgi.service.prefs.PreferencesService;
-import org.osgi.util.tracker.ServiceTracker;
-import org.osgi.util.tracker.ServiceTrackerCustomizer;
-
-/**  This is the bundle activator for the UserAdmin bundle.
- */
-
-public class Activator implements BundleActivator, ServiceFactory, ServiceTrackerCustomizer {
-	/*
-	 * ----------------------------------------------------------------------
-	 *      BundleActivator Interface implementation
-	 * ----------------------------------------------------------------------
-	 */
-
-	protected ServiceRegistration registration;
-	protected UserAdmin userAdmin;
-	protected static String userAdminClazz = "org.osgi.service.useradmin.UserAdmin"; //$NON-NLS-1$
-	protected PreferencesService prefs;
-	protected BundleContext context;
-	protected ServiceTracker prefsTracker;
-
-    public Activator() {
-    	//a public constructor is required for a BundleActivator
-    }
-	
-	/**
-	 * Required by BundleActivator Interface.
-	 */
-	public void start(BundleContext context_) throws Exception {
-		this.context = context_;
-		prefsTracker = new ServiceTracker(context, PreferencesService.class.getName(), this);
-		prefsTracker.open();
-	}
-
-	/**
-	 * Required by BundleActivator Interface.
-	 */
-	public void stop(BundleContext context_) throws Exception {
-		prefsTracker.close();
-        unregisterUserAdminService();
-	}
-
-
-	public Object getService(Bundle bundle, ServiceRegistration registration_) {
-		userAdmin.setServiceReference(registration_.getReference());
-		return userAdmin;
-	}
-
-	public void ungetService(Bundle bundle, ServiceRegistration registration_, Object service) {
-	   //do nothing
-	}
-
-	public Object addingService(ServiceReference reference) {
-		if (prefs == null) {
-			prefs = (PreferencesService) context.getService(reference);
-			try {
-				registerUserAdminService();
-			} catch (Exception ex) {
-				return null;
-			}
-			return prefs;
-		}
-		return null; //we don't want to track a service we are not using
-	}
-
-	public void modifiedService(ServiceReference reference, Object service) {
-            // do nothing
-	}
-
-	public void removedService(ServiceReference reference, Object service) {
-		if (service == prefs) {
-			prefs = null;
-			unregisterUserAdminService();
-		}
-		context.ungetService(reference);
-	}
-
-
-	/**
-	 * Register the UserAdmin service.
-	 */
-	protected void registerUserAdminService() throws Exception {
-		Hashtable properties = new Hashtable(7);
-
-		properties.put(Constants.SERVICE_VENDOR, UserAdminMsg.Service_Vendor);
-		properties.put(Constants.SERVICE_DESCRIPTION, UserAdminMsg.OSGi_User_Admin_service_IBM_Implementation_3);
-		properties.put(Constants.SERVICE_PID, getClass().getName());
-
-		userAdmin = new UserAdmin(prefs, context);
-		registration = context.registerService(userAdminClazz, this, properties);
-		userAdmin.setServiceReference(registration.getReference());
-	}
-	
-	protected void unregisterUserAdminService() {
-		if(registration != null)
-		{
-			registration.unregister();
-			registration = null;
-			userAdmin.destroy();
-			userAdmin = null;
-		}
-	}
-}
diff --git a/bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/Authorization.java b/bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/Authorization.java
deleted file mode 100644
index 6eedbeb..0000000
--- a/bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/Authorization.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 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.useradmin;
-
-import java.util.Vector;
-
-/**
- * This 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 Authorization object passed
- * to it possesses the required role, by calling its hasRole method.
- * <p>
- * Authorization contexts are instantiated by calling
- * {@link UserAdmin#getAuthorization}
- * <p>
- * <font size="+1">Trusting Authorization objects.</font>
- * <p>
- * There are no restrictions regarding the creation of Authorization objects.
- * Hence, a service must only accept 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 ServicePermissions to do the code based 
- * access control. A service basing user access control on Authorization
- * objects passed to it, will then require that a calling bundle has the
- * ServicePermission to get the service in question. This is the most
- * convenient way. The framework 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 ServicePermission to get the Service.
- * <p>
- * However, in some cases the code based permission checks need to be more 
- * fine-grained. A service might allow all bundles to get it, but 
- * require certain code based permissions for some of its methods.
- * <p>
- * 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 Authorization object), the service explicitly checks that the calling 
- * bundle has permission to make the call. 
- */
-public class Authorization implements org.osgi.service.useradmin.Authorization {
-
-	protected UserAdmin useradmin;
-	protected Role user;
-	protected String name; //user to distinguish between the anonymous user and user.anyone
-
-	protected Authorization(User user, UserAdmin useradmin) {
-		this.useradmin = useradmin;
-		if (user != null) {
-			this.user = user;
-			name = user.getName();
-		} else {
-			//anonymous user
-			this.user = (Role) useradmin.getRole(Role.anyoneString);
-			name = null;
-		}
-	}
-
-	/**
-	 * Gets the name of the {@link User} that this Authorization
-	 * context was created for.
-	 * 
-	 * @return The name of the {@link User} that this Authorization
-	 * context was created for, or <code>null</code> if no user was specified
-	 * when this Authorization context was created.
-	 */
-	public String getName() {
-		useradmin.checkAlive();
-		return (name);
-	}
-
-	/**
-	 * Checks if the role with the specified name is implied by this 
-	 * Authorization context.
-	 * <p>
-
-	 * Bundles must define globally unique role names that are associated with
-	 * the privilege of accessing restricted resources or operations.
-	 * System administrators will grant users access to these resources, by
-	 * creating a {@link Group} for each role and adding {@link User}s to it.
-	 *
-	 * @param name The name of the role to check for.
-	 *
-	 * @return <code>true</code> if this Authorization context implies the
-	 * specified role, otherwise <code>false</code>.
-	 */
-	public boolean hasRole(String name_) {
-		useradmin.checkAlive();
-		synchronized (useradmin) {
-			Role checkRole = (org.eclipse.equinox.useradmin.Role) useradmin.getRole(name_);
-			if (checkRole == null) {
-				return (false);
-			}
-			return (checkRole.isImpliedBy(user, new Vector()));
-		}
-	}
-
-	/**
-	 * Gets the names of all roles encapsulated by this Authorization context.
-	 *
-	 * @return The names of all roles encapsulated by this Authorization 
-	 * context, or <code>null</code> if no roles are in the context.
-	 */
-	public String[] getRoles() {
-		useradmin.checkAlive();
-
-		// go through all of the roles and find out which ones are implied by this 
-		// authorization context.
-		synchronized (useradmin) //we don't want anything changing while we get the list
-		{
-			int length = useradmin.roles.size();
-			Vector result = new Vector(length);
-			for (int i = 0; i < length; i++) {
-				Role role = (Role) useradmin.roles.elementAt(i);
-				if (role.isImpliedBy(user, new Vector())) {
-					String roleName = role.getName();
-					//exclude user.anyone from the list
-					if (!roleName.equals(Role.anyoneString))
-					{
-						result.addElement(roleName);
-					}
-				}
-			}
-			int size = result.size();
-			if (size == 0) {
-				return (null);
-			}
-			String[] copyrole = new String[size];
-			result.copyInto(copyrole);
-			return (copyrole);
-		}
-	}
-}
diff --git a/bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/ExternalMessages.properties b/bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/ExternalMessages.properties
deleted file mode 100644
index d3455e8..0000000
--- a/bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/ExternalMessages.properties
+++ /dev/null
@@ -1,27 +0,0 @@
-###############################################################################
-# Copyright (c) 2001, 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
-###############################################################################
-# NLS_MESSAGEFORMAT_ALL 
-
-OSGi_User_Admin_service_IBM_Implementation_3=OSGi User Admin service - IBM Implementation
-Service_Vendor=IBM
-adding_Credential_to__15=adding Credential to {0}
-adding_member__18=adding member {0} to group {1}
-adding_required_member__21=adding required member {0} to group {1}
-removing_member__24=removing member {0} from group {1}
-Unable_to_load_role__27=Unable to load role {0}
-Backing_Store_Read_Exception=UserAdmin is unable to read its data from backing store {0}
-Backing_Store_Write_Exception=UserAdmin is unable to write its data from backing store {0}
-Event_Delivery_Exception=A UserAdminListener threw an Exception
-CREATE_NULL_ROLE_EXCEPTION =Role can not be null
-CREATE_INVALID_TYPE_ROLE_EXCEPTION=Invalid type for createRole
-INVALID_KEY_EXCEPTION=Key can only be of type String
-INVALID_VALUE_EXCEPTION=Value can only be of type String or byte[]
-USERADMIN_UNREGISTERED_EXCEPTION=UserAdmin service has been unregistered
diff --git a/bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/Group.java b/bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/Group.java
deleted file mode 100644
index d76067b..0000000
--- a/bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/Group.java
+++ /dev/null
@@ -1,295 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 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.useradmin;
-
-import java.util.Enumeration;
-import java.util.Vector;
-import org.osgi.service.prefs.BackingStoreException;
-
-/**
- * A named grouping of roles.
- * <p>
- * Whether or not a given authorization context implies a Group role
- * depends on the members of that role.
- * <p>
- * A Group role can have two kinds of member roles: <i>basic</i> and
- * <i>required</i>.
- * A Group role is implied by an authorization context if all of
- * its required member roles are implied
- * and at least one of its basic member roles is implied.
- * <p>
- * A Group role must contain at least one basic member role in order
- * to be implied. In other words, a Group without any basic member
- * roles is never implied by any authorization context.
- * <p>
- * A User role always implies itself.
- * <p>
- * No loop detection is performed when adding members to groups, 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 group must have at least one basic member to be implied
- * is motivated by the following example:
- *
- * <pre>
- * group foo
- *   required members: marketing
- *   basic members: alice, bob
- * </pre>
- *
- * Privileged operations that require membership in "foo" can be performed
- * only by alice and bob, who are in marketing.
- * <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 Group role for that matter) must have at least
- * one basic member accomplishes that.
- * <p>
- * However, this would make it impossible for a group 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:
- *
- * <pre>
- * group voter
- *   required members: citizen, adult
- *      basic members:
- * </pre>
- *
- * However, according to the above rule, the "voter" role could never be
- * assumed by anybody, since it lacks any basic members.
- * In order to address this deficiency a predefined role named
- * "user.anyone" can be specified, which is always implied.
- * The desired implication of the "voter" group can then be achieved by
- * specifying "user.anyone" as its basic member, as follows:
- *
- * <pre>
- * group voter
- *   required members: citizen, adult
- *      basic members: user.anyone
- * </pre>
- */
-
-public class Group extends User implements org.osgi.service.useradmin.Group {
-
-	protected Vector requiredMembers;
-	protected Vector basicMembers;
-
-	protected Group(String name, UserAdmin useradmin) {
-		super(name, useradmin);
-		this.useradmin = useradmin;
-		basicMembers = new Vector();
-		requiredMembers = new Vector();
-	}
-
-	/**
-	 * Adds the specified role as a basic member to this Group.
-	 *
-	 * @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 Group already contains a role whose name
-	 * matches that of the specified role.
-	 *
-	 * @throws SecurityException If a security manager exists and the caller
-	 * does not have the <tt>UserAdminPermission</tt> with name <tt>admin</tt>.
-	 */
-	public boolean addMember(org.osgi.service.useradmin.Role role) {
-		useradmin.checkAlive();
-		useradmin.checkAdminPermission();
-		//only need to check for null for the public methods
-		if (role == null) {
-			return (false);
-		}
-		synchronized (useradmin) {
-			if (basicMembers.contains(role)) {
-				return (false);
-			}
-			return (addMember(role, true));
-		}
-	}
-
-	// When we are loading from storage this method is called directly.  We
-	// do not want to write to storage when we are loading form storage.
-	protected boolean addMember(org.osgi.service.useradmin.Role role, boolean store) {
-		((org.eclipse.equinox.useradmin.Role) role).addImpliedRole(this);
-		if (store) {
-			try {
-				useradmin.userAdminStore.addMember(this, (org.eclipse.equinox.useradmin.Role) role);
-			} catch (BackingStoreException ex) {
-				return (false);
-			}
-		}
-		basicMembers.addElement(role);
-		return (true);
-	}
-
-	/**
-	 * Adds the specified role as a required member to this Group.
-	 *
-	 * @param role The role to add as a required member.
-	 *
-	 * @return <code>true</code> if the given role could be added as a required
-	 * member, and <code>false</code> if this Group already contains a role
-	 * whose name matches that of the specified role.
-	 *
-	 * @throws SecurityException If a security manager exists and the caller
-	 * does not have the <tt>UserAdminPermission</tt> with name <tt>admin</tt>.
-	 */
-	public boolean addRequiredMember(org.osgi.service.useradmin.Role role) {
-		useradmin.checkAlive();
-		useradmin.checkAdminPermission();
-		if (role == null) {
-			return (false);
-		}
-		synchronized (useradmin) {
-			if (requiredMembers.contains(role)) {
-				return (false);
-			}
-			return (addRequiredMember(role, true));
-		}
-	}
-
-	protected boolean addRequiredMember(org.osgi.service.useradmin.Role role, boolean store) {
-		((org.eclipse.equinox.useradmin.Role) role).addImpliedRole(this);
-		if (store) {
-			try {
-				useradmin.userAdminStore.addRequiredMember(this, (org.eclipse.equinox.useradmin.Role) role);
-			} catch (BackingStoreException ex) {
-				return (false);
-			}
-		}
-		requiredMembers.addElement(role);
-		return (true);
-	}
-
-	/**
-	 * Removes the specified role from this Group.
-	 *
-	 * @param role The role to remove from this Group.
-	 *
-	 * @return <code>true</code> if the role could be removed,
-	 * otherwise <code>false</code>.
-	 *
-	 * @throws SecurityException If a security manager exists and the caller
-	 * does not have the <tt>UserAdminPermission</tt> with name <tt>admin</tt>.
-	 */
-	public boolean removeMember(org.osgi.service.useradmin.Role role) {
-		useradmin.checkAlive();
-		useradmin.checkAdminPermission();
-		if (role == null) {
-			return (false);
-		}
-		synchronized (useradmin) {
-			try {
-				useradmin.userAdminStore.removeMember(this, (org.eclipse.equinox.useradmin.Role) role);
-			} catch (BackingStoreException ex) {
-				return (false);
-			}
-			//The role keeps track of which groups it is a member of so it can remove itself from
-			//the group if it is deleted.  In this case, this group is being removed from the role's
-			//list.
-			((org.eclipse.equinox.useradmin.Role) role).removeImpliedRole(this);
-
-			// We don't know if the Role to be removed is a basic orrequired member, or both.  We
-			// simply try to remove it from both.
-			boolean removeRequired = requiredMembers.removeElement(role);
-			boolean removeBasic = basicMembers.removeElement(role);
-			return (removeRequired || removeBasic);
-		}
-	}
-
-	/**
-	 * Gets the basic members of this Group.
-	 *
-	 * @return The basic members of this Group, or <code>null</code> if this
-	 * Group does not contain any basic members.
-	 */
-	public org.osgi.service.useradmin.Role[] getMembers() {
-		useradmin.checkAlive();
-		synchronized (useradmin) {
-			if (basicMembers.isEmpty()) {
-				return (null);
-			}
-			Role[] roles = new Role[basicMembers.size()];
-			basicMembers.copyInto(roles);
-			return (roles);
-		}
-	}
-
-	/**
-	 * Gets the required members of this Group.
-	 *
-	 * @return The required members of this Group, or <code>null</code> if this
-	 * Group does not contain any required members.
-	 */
-	public org.osgi.service.useradmin.Role[] getRequiredMembers() {
-		useradmin.checkAlive();
-		synchronized (useradmin) {
-			if (requiredMembers.isEmpty()) {
-				return (null);
-			}
-			Role[] roles = new Role[requiredMembers.size()];
-			requiredMembers.copyInto(roles);
-			return (roles);
-		}
-	}
-
-	/**
-	 * Returns the type of this role.
-	 *
-	 * @return The role's type.
-	 */
-	public int getType() {
-		useradmin.checkAlive();
-		return (org.osgi.service.useradmin.Role.GROUP);
-	}
-
-	protected boolean isImpliedBy(Role role, Vector checkLoop) {
-		if (checkLoop.contains(name)) {
-			//we have a circular dependency
-			return (false);
-		}
-		if (name.equals(role.getName())) //A User always implies itself.  A Group is a User.
-		{
-			return (true);
-		}
-		checkLoop.addElement(name);
-		Vector requiredCheckLoop = (Vector) checkLoop.clone();
-		Vector basicCheckLoop = (Vector) checkLoop.clone();
-		Enumeration e = requiredMembers.elements();
-
-		//check to see if we imply all of the 0 or more required roles
-		Role requiredRole;
-		while (e.hasMoreElements()) {
-			requiredRole = (Role) e.nextElement();
-			if (!requiredRole.isImpliedBy(role, requiredCheckLoop)) {
-				return (false);
-			}
-		}
-		//check to see if we imply any of the basic roles (there must be at least one)
-		e = basicMembers.elements();
-		Role basicRole;
-		while (e.hasMoreElements()) {
-			basicRole = (Role) e.nextElement();
-			if (basicRole.isImpliedBy(role, basicCheckLoop)) {
-				return (true);
-			}
-		}
-		return (false);
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/LogMessages.properties b/bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/LogMessages.properties
deleted file mode 100644
index e2cd481..0000000
--- a/bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/LogMessages.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-###############################################################################
-# Copyright (c) 2001, 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
-###############################################################################
-# NLS_MESSAGEFORMAT_ALL 
-Unknown_Log_level=Unknown Log Level
-Info=Log Info
-Warning=Log Warning
-Error=Log Error
diff --git a/bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/LogTracker.java b/bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/LogTracker.java
deleted file mode 100644
index 61ec2ef..0000000
--- a/bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/LogTracker.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1998, 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.useradmin;
-
-import java.io.PrintStream;
-import java.text.DateFormat;
-import java.util.Calendar;
-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 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 */
-	protected PrintStream out;
-
-	/** Calendar and DateFormat to user if LogService is unavailable */
-	private static Calendar calendar;
-	private static DateFormat dateFormat;
-	private String timestamp;
-
-	/**
-	 * 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;
-		calendar = Calendar.getInstance();
-		dateFormat = DateFormat.getDateTimeInstance();
-		open();
-	}
-
-	/*
-	 * ----------------------------------------------------------------------
-	 *      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(ServiceReference reference, int level, String message) {
-		log(reference, level, message, null);
-	}
-
-	public synchronized void log(ServiceReference reference, int level, String message, Throwable exception) {
-		ServiceReference[] references = getServiceReferences();
-
-		if (references != null) {
-			int size = references.length;
-
-			for (int i = 0; i < size; i++) {
-				LogService service = (LogService) getService(references[i]);
-				if (service != null) {
-					try {
-						service.log(reference, level, message, exception);
-					} catch (Exception e) { // do nothing
-					}
-				}
-			}
-
-			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.
-				timestamp = dateFormat.format(calendar.getTime());
-				out.print(timestamp + " "); //$NON-NLS-1$
-
-				switch (level) {
-					case LOG_DEBUG : {
-						out.print("Debug: "); //$NON-NLS-1$
-
-						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);
-				}
-			}
-		}
-	}
-}
diff --git a/bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/LogTrackerMsg.java b/bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/LogTrackerMsg.java
deleted file mode 100644
index 17626e5..0000000
--- a/bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/LogTrackerMsg.java
+++ /dev/null
@@ -1,27 +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.useradmin;
-
-import org.eclipse.osgi.util.NLS;
-
-public class LogTrackerMsg extends NLS {
-	private static final String BUNDLE_NAME = "org.eclipse.equinox.useradmin.LogMessages"; //$NON-NLS-1$
-
-	public static String Unknown_Log_level;
-	public static String Info;
-	public static String Warning;
-	public static String Error;
-
-	static {
-		// initialize resource bundles
-		NLS.initializeMessages(BUNDLE_NAME, LogTrackerMsg.class);
-	}
-}
diff --git a/bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/Role.java b/bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/Role.java
deleted file mode 100644
index 68c13e4..0000000
--- a/bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/Role.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 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.useradmin;
-
-import java.util.*;
-
-/**
- * The base interface for Role objects managed by the {@link UserAdmin}
- * service.
- * <p>
- * This interface exposes the characteristics shared by all Roles: a name,
- * a type, and a set of properties.
- * <p>
- * Properties represent public information about the Role that can be read by
- * anyone. Specific {@link UserAdminPermission}s are required to
- * change a Role's properties.
- * <p>
- * Role properties are Dictionary objects. Changes to
- * these objects are propagated to the {@link UserAdmin} service and
- * made persistent.
- * <p>
- * Every UserAdmin contains a set of predefined roles that are always present
- * and cannot be removed. All predefined roles are of type <tt>ROLE</tt>.
- * This version of the <tt>org.osgi.service.useradmin</tt> package defines a
- * single predefined role named &quot;user.anyone&quot;, which is inherited
- * by any other role. Other predefined roles may be added in the future.
- */
-
-public class Role implements org.osgi.service.useradmin.Role {
-
-	protected String name;
-	protected UserAdminHashtable properties;
-	protected Vector impliedRoles;
-	protected UserAdmin useradmin;
-	protected static final String anyoneString = "user.anyone"; //$NON-NLS-1$
-	protected boolean exists = true;
-
-	protected Role(String name, UserAdmin useradmin) {
-		this.name = name;
-		this.properties = new UserAdminHashtable(this, useradmin, UserAdminHashtable.PROPERTIES);
-		this.useradmin = useradmin;
-
-		// This is used only to track which Groups this role is directly a member of.
-		// This info is needed so when we delete a Role, we know which groups to remove
-		// it from.
-		impliedRoles = new Vector();
-	}
-
-	/**
-	 * Returns the name of this role.
-	 *
-	 * @return The role's name.
-	 */
-
-	public String getName() {
-		useradmin.checkAlive();
-		return (name);
-	}
-
-	/**
-	 * Returns the type of this role.
-	 *
-	 * @return The role's type.
-	 */
-	public int getType() {
-		useradmin.checkAlive();
-		return (org.osgi.service.useradmin.Role.ROLE);
-	}
-
-	/**
-	 * Returns a Dictionary of the (public) properties of this Role. Any changes
-	 * to the returned Dictionary will change the properties of this Role. This
-	 * will cause a UserAdminEvent of type {@link UserAdminEvent#ROLE_CHANGED}
-	 * to be broadcast to any UserAdminListeners.
-	 * <p>
-	 * Only objects of type <tt>String</tt> may be used as property keys, and
-	 * only objects of type <tt>String</tt> or <tt>byte[]</tt>
-	 * may be used as property values.
-	 * Any other types will cause an exception of type
-	 * <tt>IllegalArgumentException</tt> to be raised.
-	 * <p>
-	 * In order to add, change, or remove a property in the returned Dictionary,
-	 * a {@link UserAdminPermission} named after the property name (or
-	 * a prefix of it) with action <code>changeProperty</code> is required.
-	 *
-	 * @return Dictionary containing the properties of this Role.
-	 */
-	public Dictionary getProperties() {
-		useradmin.checkAlive();
-		return (properties);
-	}
-
-	protected void addImpliedRole(Group group) {
-		impliedRoles.addElement(group);
-	}
-
-	protected void removeImpliedRole(Group group) {
-		if (exists) //this prevents a loop when destroy is called
-		{
-			impliedRoles.removeElement(group);
-		}
-	}
-
-	//we are being deleted so delete ourselves from all of the groups
-	protected synchronized void destroy() {
-		exists = false;
-		Enumeration e = impliedRoles.elements();
-		while (e.hasMoreElements()) {
-			Group group = (Group) e.nextElement();
-			if (group.exists) //so we don't try to remove any groups twice from storage   
-			{
-				group.removeMember(this);
-			}
-		}
-		properties = null;
-		impliedRoles = null;
-	}
-
-	protected boolean isImpliedBy(Role role, Vector checkLoop) { //Roles do not imply themselves
-		//The user.anyone role is always implied
-		if (checkLoop.contains(name)) {
-			//we have a circular dependency
-			return (false);
-		}
-		checkLoop.addElement(name);
-		return (name.equals(Role.anyoneString));
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/User.java b/bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/User.java
deleted file mode 100644
index 50c8228..0000000
--- a/bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/User.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 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.useradmin;
-
-import java.util.Dictionary;
-import java.util.Vector;
-
-/**
- * A User managed by a {@link UserAdmin} service.
- * <p>
- * In this context, the term &quot;user&quot; 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, User objects are associated with a specific {@link UserAdmin}
- * service (namely the one that created them), and cannot be used with other
- * UserAdmin services.
- * <p>
- * A User may have credentials (and properties, inherited from {@link Role})
- * associated with it. Specific {@link UserAdminPermission}s are required to
- * read or change a User's credentials.
- * <p>
- * Credentials are Dictionary objects and have semantics that are similar
- * to the properties in Role.
- */
-
-public class User extends Role implements org.osgi.service.useradmin.User {
-
-	protected UserAdminHashtable credentials;
-
-	protected User(String name, UserAdmin useradmin) {
-		super(name, useradmin);
-		this.useradmin = useradmin;
-		credentials = new UserAdminHashtable(this, useradmin, UserAdminHashtable.CREDENTIALS);
-	}
-
-	/**
-	 * Returns a Dictionary of the credentials of this User. Any changes
-	 * to the returned Dictionary will change the credentials of this User.
-	 * This will cause a UserAdminEvent of type
-	 * {@link UserAdminEvent#ROLE_CHANGED} to be broadcast to any
-	 * UserAdminListeners.
-	 * <p>
-	 * Only objects of type String may be used as credential keys, and only
-	 * objects of type <code>String</code> or of type <code>byte[]</code>
-	 * may be used as credential values. Any other types will cause an exception
-	 * of type <code>IllegalArgumentException</code> to be raised.
-	 * <p>
-	 * In order to retrieve a credential from the returned Dictionary,
-	 * a {@link UserAdminPermission} named after the credential name (or
-	 * a prefix of it) with action <code>getCredential</code> is required.
-	 * <p>
-	 * In order to add or remove a credential from the returned Dictionary,
-	 * a {@link UserAdminPermission} named after the credential name (or
-	 * a prefix of it) with action <code>changeCredential</code> is required.
-	 *
-	 * @return Dictionary containing the credentials of this User.
-	 */
-
-	public Dictionary getCredentials() {
-		useradmin.checkAlive();
-		return (credentials);
-	}
-
-	/**
-	 * Checks to see if this User has a credential with the specified key
-	 * set to the specified value.
-	 * <p>
-	 * If the specified credential value is not of type <tt>String</tt> or
-	 * <tt>byte[]</tt>, it is ignored, that is, <tt>false</tt> is returned
-	 * (as opposed to an <tt>IllegalArgumentException</tt> being raised).
-	 *
-	 * @param key The credential key.
-	 * @param value The credential value.
-	 *
-	 * @return <code>true</code> if this user has the specified credential;
-	 * <code>false</code> otherwise.
-	 *
-	 * @throws SecurityException If a security manager exists and the caller
-	 * does not have the <tt>UserAdminPermission</tt> named after the credential
-	 * key (or a prefix of it) with action <code>getCredential</code>.
-	 */
-	public boolean hasCredential(String key, Object value) {
-		useradmin.checkAlive();
-		Object checkValue = credentials.get(key);
-		if (checkValue != null) {
-			if (value instanceof String) {
-				if (checkValue.equals(value)) {
-					return (true);
-				}
-			} else if (value instanceof byte[])//FIXME Is there a good way to do this compare???
-			{
-				if (!(checkValue instanceof byte[])) {
-					return (false);
-				}
-				//???do they need to be in order?
-				byte[] valueArray = (byte[]) value;
-				byte[] checkValueArray = (byte[]) checkValue;
-				int length = valueArray.length;
-				if (length != checkValueArray.length) {
-					return (false);
-				}
-				for (int i = 0; i < length; i++) {
-					if (valueArray[i] != checkValueArray[i]) {
-						return (false);
-					}
-				}
-				return (true);
-			}
-		}
-		return (false); //if checkValue is null	
-	}
-
-	/**
-	 * Returns the type of this role.
-	 *
-	 * @return The role's type.
-	 */
-	public int getType() {
-		useradmin.checkAlive();
-		return org.osgi.service.useradmin.Role.USER;
-	}
-
-	//A user always implies itself
-	protected boolean isImpliedBy(Role role, Vector checkLoop) {
-		if (checkLoop.contains(name)) {
-			//we have a circular dependency
-			return (false);
-		}
-		checkLoop.addElement(name);
-		return ((role.getName()).equals(name));
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/UserAdmin.java b/bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/UserAdmin.java
deleted file mode 100644
index 798b678..0000000
--- a/bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/UserAdmin.java
+++ /dev/null
@@ -1,362 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 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.useradmin;
-
-import java.util.Dictionary;
-import java.util.Enumeration;
-import java.util.Vector;
-
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.Filter;
-import org.osgi.framework.InvalidSyntaxException;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.log.LogService;
-import org.osgi.service.prefs.BackingStoreException;
-import org.osgi.service.prefs.PreferencesService;
-import org.osgi.service.useradmin.UserAdminEvent;
-import org.osgi.service.useradmin.UserAdminPermission;
-
-/**
- * This interface is used to manage a database of named roles, which can
- * be used for authentication and authorization purposes.
- * <p>
- * This version of UserAdmin defines two types of roles: "User" and
- * "Group". Each type of role is represented by an "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.
- * <p>
- * Every role has a name and a type.
- * <p>
- * A {@link User} role can be configured with credentials (e.g., a password)
- * and properties (e.g., a street address, phone number, etc.).
- * <p>
- * A {@link Group} role represents an aggregation of {@link User} and
- * {@link Group} roles. In
- * other words, the members of a Group role are roles themselves.
- * <p>
- * Every UserAdmin manages and maintains its own
- * namespace of roles, in which each role has a unique name.
- */
-
-public class UserAdmin implements org.osgi.service.useradmin.UserAdmin {
-
-	protected Vector users;
-	protected Vector roles;
-	protected BundleContext context;
-	protected UserAdminEventProducer eventProducer;
-	protected boolean alive;
-	protected UserAdminStore userAdminStore;
-	protected UserAdminPermission adminPermission;
-	protected ServiceReference reference;
-	protected LogTracker log;
-
-	protected UserAdmin(PreferencesService preferencesService, BundleContext context) throws Exception {
-		roles = new Vector();
-		users = new Vector();
-		this.context = context;
-
-		log = new LogTracker(context, System.out);
-		alive = true;
-		//This handles user admin persistence
-		try {
-			userAdminStore = new UserAdminStore(preferencesService, this, log);
-			userAdminStore.init();
-		} catch (Exception e) {
-			log.log(LogService.LOG_ERROR, UserAdminMsg.Backing_Store_Read_Exception, e);
-			throw e;
-		}
-	}
-
-	protected void setServiceReference(ServiceReference reference) {
-		if (this.reference == null) {
-			this.reference = reference;
-
-			eventProducer = new UserAdminEventProducer(reference, context, log);
-		}
-	}
-
-	/**
-	 * Creates a role with the given name and of the given type.
-	 *
-	 * <p> If a role was created, a UserAdminEvent of type
-	 * {@link UserAdminEvent#ROLE_CREATED} is broadcast to any
-	 * UserAdminListener.
-	 *
-	 * @param name The name of the role to create.
-	 * @param type The type of the role to create. Must be either
-	 * {@link Role#USER} or {@link Role#GROUP}.
-	 *
-	 * @return The newly created role, or <code>null</code> if a role with
-	 * the given name already exists.
-	 *
-	 * @throws IllegalArgumentException if <tt>type</tt> is invalid.
-	 *
-	 * @throws SecurityException If a security manager exists and the caller
-	 * does not have the <tt>UserAdminPermission</tt> with name <tt>admin</tt>.
-	 */
-	public org.osgi.service.useradmin.Role createRole(String name, int type) {
-		checkAlive();
-		checkAdminPermission();
-		if (name == null) {
-			throw (new IllegalArgumentException(UserAdminMsg.CREATE_NULL_ROLE_EXCEPTION));
-		}
-		if ((type != org.osgi.service.useradmin.Role.GROUP) && (type != org.osgi.service.useradmin.Role.USER)) {
-			throw (new IllegalArgumentException(UserAdminMsg.CREATE_INVALID_TYPE_ROLE_EXCEPTION));
-		}
-		//if the role already exists, return null
-		if (getRole(name) != null) {
-			return (null);
-		}
-
-		synchronized (this) {
-			return createRole(name, type, true);
-		}
-	}
-
-	protected org.osgi.service.useradmin.Role createRole(String name, int type, boolean store) {
-		Role newRole = null;
-		if (type == org.osgi.service.useradmin.Role.ROLE) {
-			newRole = new Role(name, this);
-		} else if (type == org.osgi.service.useradmin.Role.USER) {
-			newRole = new User(name, this);
-		} else if (type == org.osgi.service.useradmin.Role.GROUP) {
-			newRole = new Group(name, this);
-		} else //unknown type
-		{
-			return (null);
-		}
-		if (store) {
-			try {
-				userAdminStore.addRole(newRole);
-			} catch (BackingStoreException ex) {
-				return (null);
-			}
-			if (eventProducer != null) {
-				eventProducer.generateEvent(UserAdminEvent.ROLE_CREATED, newRole);
-			}
-		}
-		if (type == org.osgi.service.useradmin.Role.GROUP || type == org.osgi.service.useradmin.Role.USER) {
-			users.addElement(newRole);
-		}
-		roles.addElement(newRole);
-		return (newRole);
-	}
-
-	/**
-	 * Removes the role with the given name from this UserAdmin.
-	 *
-	 * <p> If the role was removed, a UserAdminEvent of type
-	 * {@link UserAdminEvent#ROLE_REMOVED} is broadcast to any
-	 * UserAdminListener.
-	 *
-	 * @param name The name of the role to remove.
-	 *
-	 * @return <code>true</code> If a role with the given name is present in this
-	 * UserAdmin and could be removed, otherwise <code>false</code>.
-	 *
-	 * @throws SecurityException If a security manager exists and the caller
-	 * does not have the <tt>UserAdminPermission</tt> with name <tt>admin</tt>.
-	 */
-	public boolean removeRole(String name) {
-		checkAlive();
-		checkAdminPermission();
-		if (name.equals(Role.anyoneString)) {
-			//silently ignore
-			return (true);
-		}
-		synchronized (this) {
-			Role role = (org.eclipse.equinox.useradmin.Role) getRole(name);
-			if (role != null) {
-				try {
-					userAdminStore.removeRole(role);
-				} catch (BackingStoreException ex) {
-					return (false);
-				}
-				roles.removeElement(role);
-				users.removeElement(role);
-				role.destroy();
-				eventProducer.generateEvent(UserAdminEvent.ROLE_REMOVED, role);
-				role = null;
-				return (true);
-			}
-			return (false);
-		}
-	}
-
-	/**
-	 * Gets the role with the given name from this UserAdmin.
-	 *
-	 * @param name The name of the role to get.
-	 *
-	 * @return The requested role, or <code>null</code> if this UserAdmin does
-	 * not have a role with the given name.
-	 */
-	public org.osgi.service.useradmin.Role getRole(String name) {
-		checkAlive();
-		if (name == null) {
-			return (null);
-		}
-		synchronized (this) {
-			Enumeration e = roles.elements();
-			while (e.hasMoreElements()) {
-				Role role = (Role) e.nextElement();
-				if (role.getName().equals(name)) {
-					return (role);
-				}
-			}
-			return (null);
-		}
-	}
-
-	/**
-	 * Gets the roles managed by this UserAdmin that have properties matching
-	 * the specified LDAP filter criteria. See
-	 * <code>org.osgi.framework.Filter</code> or IETF RFC 2254 for a
-	 * description of the filter syntax. If a <code>null</code> filter is
-	 * specified, all roles managed by this UserAdmin are returned.
-	 *
-	 * @param filter The filter criteria to match.
-	 *
-	 * @return The roles managed by this UserAdmin whose properties
-	 * match the specified filter criteria, or all roles if a
-	 * <code>null</code> filter is specified.
-	 *
-	 */
-	public org.osgi.service.useradmin.Role[] getRoles(String filterString) throws InvalidSyntaxException {
-		checkAlive();
-		Vector returnedRoles;
-		synchronized (this) {
-			if (filterString == null) {
-				returnedRoles = roles;
-			} else {
-				Filter filter = context.createFilter(filterString); //We do this first so an
-				//InvalidSyntaxException will be
-				//thrown even if there are no roles
-				//present.
-				returnedRoles = new Vector();
-				for (int i = 0; i < roles.size(); i++) {
-					Role role = (Role) roles.elementAt(i);
-					if (filter.match(role.getProperties())) {
-						returnedRoles.addElement(role);
-					}
-				}
-			}
-			int size = returnedRoles.size();
-			if (size == 0) {
-				return (null);
-			}
-			Role[] roleArray = new Role[size];
-			returnedRoles.copyInto(roleArray);
-			return (roleArray);
-		}
-	}
-
-	/**
-	 * Gets the user with the given property key-value pair from the UserAdmin
-	 * database. This is a convenience method for retrieving a user based on
-	 * a property for which every user is supposed to have a unique value
-	 * (within the scope of this UserAdmin), such as a user's
-	 * X.500 distinguished name.
-	 *
-	 * @param key The property key to look for.
-	 * @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 returned.
-	 */
-	public org.osgi.service.useradmin.User getUser(String key, String value) {
-		checkAlive();
-		if (key == null) {
-			return (null);
-		}
-		User user;
-		User foundUser = null;
-		Dictionary props;
-		String keyValue;
-		synchronized (this) {
-			Enumeration e = users.elements();
-			while (e.hasMoreElements()) {
-				user = (User) e.nextElement();
-				props = user.getProperties();
-				keyValue = (String) props.get(key);
-				if (keyValue != null && keyValue.equals(value)) {
-					if (foundUser != null) {
-						return (null); //we found more than one match	
-					}
-					foundUser = user;
-				}
-			}
-			return (foundUser);
-		}
-	}
-
-	/**
-	 * Creates an Authorization object that encapsulates the specified user
-	 * and the roles it possesses. The <code>null</code> user is interpreted
-	 * as the anonymous user.
-	 *
-	 * @param user The user to create an Authorization object for, or
-	 * <code>null</code> for the anonymous user.
-	 *
-	 * @return the Authorization object for the specified user.
-	 */
-	public org.osgi.service.useradmin.Authorization getAuthorization(org.osgi.service.useradmin.User user) {
-		checkAlive();
-		return (new Authorization((User) user, this));
-	}
-
-	protected synchronized void destroy() {
-		alive = false;
-		eventProducer.close();
-		userAdminStore.destroy();
-
-		log.close();
-	}
-
-	public void checkAdminPermission() {
-		SecurityManager sm = System.getSecurityManager();
-		if (sm != null) {
-			if (adminPermission == null) {
-				adminPermission = new UserAdminPermission(UserAdminPermission.ADMIN, null);
-			}
-			sm.checkPermission(adminPermission);
-		}
-	}
-
-	public void checkGetCredentialPermission(String credential) {
-		SecurityManager sm = System.getSecurityManager();
-		if (sm != null) {
-			sm.checkPermission(new org.osgi.service.useradmin.UserAdminPermission(credential, org.osgi.service.useradmin.UserAdminPermission.GET_CREDENTIAL));
-		}
-	}
-
-	public void checkChangeCredentialPermission(String credential) {
-		SecurityManager sm = System.getSecurityManager();
-		if (sm != null) {
-			sm.checkPermission(new org.osgi.service.useradmin.UserAdminPermission(credential, org.osgi.service.useradmin.UserAdminPermission.CHANGE_CREDENTIAL));
-		}
-	}
-
-	public void checkChangePropertyPermission(String property) {
-		SecurityManager sm = System.getSecurityManager();
-		if (sm != null) {
-			sm.checkPermission(new org.osgi.service.useradmin.UserAdminPermission(property, org.osgi.service.useradmin.UserAdminPermission.CHANGE_PROPERTY));
-		}
-	}
-
-	public void checkAlive() {
-		if (!alive) {
-			throw (new IllegalStateException(UserAdminMsg.USERADMIN_UNREGISTERED_EXCEPTION));
-		}
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/UserAdminEventProducer.java b/bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/UserAdminEventProducer.java
deleted file mode 100644
index c928859..0000000
--- a/bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/UserAdminEventProducer.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 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.useradmin;
-
-import org.eclipse.osgi.framework.eventmgr.*;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.log.LogService;
-import org.osgi.service.useradmin.UserAdminEvent;
-import org.osgi.service.useradmin.UserAdminListener;
-import org.osgi.util.tracker.ServiceTracker;
-
-/*
- *  UserAdminEventProducer is responsible for sending out UserAdminEvents
- *  to all UserAdminListeners.
- */
-
-public class UserAdminEventProducer extends ServiceTracker implements EventDispatcher {
-
-	protected ServiceReference userAdmin;
-	static protected final String userAdminListenerClass = "org.osgi.service.useradmin.UserAdminListener"; //$NON-NLS-1$
-	protected LogService log;
-	/** List of UserAdminListeners */
-	protected EventListeners listeners;
-	/** EventManager for event delivery. */
-	protected EventManager eventManager;
-
-	protected UserAdminEventProducer(ServiceReference userAdmin, BundleContext context, LogService log) {
-		super(context, userAdminListenerClass, null);
-		this.userAdmin = userAdmin;
-		this.log = log;
-		eventManager = new EventManager("UserAdmin Event Dispatcher"); //$NON-NLS-1$
-		listeners = new EventListeners();
-
-		open();
-	}
-
-	public void close() {
-		super.close();
-		listeners.removeAllListeners();
-		eventManager.close();
-		userAdmin = null;
-	}
-
-	protected void generateEvent(int type, Role role) {
-		if (userAdmin != null) {
-			UserAdminEvent event = new UserAdminEvent(userAdmin, type, role);
-
-			/* queue to hold set of listeners */
-			ListenerQueue queue = new ListenerQueue(eventManager);
-
-			/* add set of UserAdminListeners to queue */
-			queue.queueListeners(listeners, this);
-
-			/* dispatch event to set of listeners */
-			queue.dispatchEventAsynchronous(0, event);
-		}
-	}
-
-	/**
-	 * A service is being added to the <tt>ServiceTracker</tt> object.
-	 *
-	 * <p>This method is called before a service which matched
-	 * the search parameters of the <tt>ServiceTracker</tt> object is
-	 * added to it. This method should return the
-	 * service object to be tracked for this <tt>ServiceReference</tt> object.
-	 * The returned service object is stored in the <tt>ServiceTracker</tt> object
-	 * and is available from the <tt>getService</tt> and <tt>getServices</tt>
-	 * methods.
-	 *
-	 * @param reference Reference to service being added to the <tt>ServiceTracker</tt> object.
-	 * @return The service object to be tracked for the
-	 * <tt>ServiceReference</tt> object or <tt>null</tt> if the <tt>ServiceReference</tt> object should not
-	 * be tracked.
-	 */
-	public Object addingService(ServiceReference reference) {
-		Object service = super.addingService(reference);
-
-		listeners.addListener(service, service);
-
-		return service;
-	}
-
-	/**
-	 * A service tracked by the <tt>ServiceTracker</tt> object has been removed.
-	 *
-	 * <p>This method is called after a service is no longer being tracked
-	 * by the <tt>ServiceTracker</tt> object.
-	 *
-	 * @param reference Reference to service that has been removed.
-	 * @param service The service object for the removed service.
-	 */
-	public void removedService(ServiceReference reference, Object service) {
-		listeners.removeListener(service);
-
-		super.removedService(reference, service);
-	}
-
-	/**
-	 * This method is the call back that is called once for each listener.
-	 * This method must cast the EventListener object to the appropriate listener
-	 * class for the event type and call the appropriate listener method.
-	 *
-	 * @param listener This listener must be cast to the appropriate listener
-	 * class for the events created by this source and the appropriate listener method
-	 * must then be called.
-	 * @param listenerObject This is the optional object that was passed to
-	 * ListenerList.addListener when the listener was added to the ListenerList.
-	 * @param eventAction This value was passed to the EventQueue object via one of its
-	 * 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 EventQueue 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) {
-		if (userAdmin == null) {
-			return;
-		}
-
-		UserAdminListener ual = (UserAdminListener) listener;
-		try {
-			ual.roleChanged((UserAdminEvent) eventObject);
-		} catch (Throwable t) {
-			log.log(userAdmin, LogService.LOG_WARNING, UserAdminMsg.Event_Delivery_Exception, t);
-		}
-	}
-}
diff --git a/bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/UserAdminHashtable.java b/bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/UserAdminHashtable.java
deleted file mode 100644
index 15c39f0..0000000
--- a/bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/UserAdminHashtable.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 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.useradmin;
-
-import java.util.Enumeration;
-import java.util.Hashtable;
-import org.osgi.service.prefs.BackingStoreException;
-import org.osgi.service.useradmin.UserAdminEvent;
-
-/*  The UserAdminHashtable is a Hashtable that generates UserAdminEvents when there
- *  is a change to the Hashtable.  This is used specifically to store Role properties
- *  and User credentials.
- */
-
-public class UserAdminHashtable extends Hashtable {
-
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = -397030865421289240L;
-	protected Role role;
-	protected int propertyType;
-	protected UserAdmin userAdmin;
-	protected UserAdminStore userAdminStore;
-
-	//TODO - split this into two classes so we don't have to do this
-	protected static final int CREDENTIALS = 0;
-	protected static final int PROPERTIES = 1;
-
-	protected UserAdminHashtable(Role role, UserAdmin userAdmin, int propertyType) {
-		this.role = role;
-		this.propertyType = propertyType;
-		this.userAdmin = userAdmin;
-		this.userAdminStore = userAdmin.userAdminStore;
-	}
-
-	/*
-	 *  We want to generate an event every time we put something into the hashtable, except
-	 *  upon initialization where role data is being read from persistent store.
-	 */
-	protected synchronized Object put(String key, Object value, boolean generateEvent) {
-
-		if (generateEvent) {
-			if (propertyType == UserAdminHashtable.PROPERTIES) {
-				try {
-					userAdminStore.addProperty(role, key, value);
-				} catch (BackingStoreException ex) {
-					return (null);
-				}
-				userAdmin.eventProducer.generateEvent(UserAdminEvent.ROLE_CHANGED, role);
-			} else if (propertyType == UserAdminHashtable.CREDENTIALS) {
-				try {
-					userAdminStore.addCredential(role, key, value);
-				} catch (BackingStoreException ex) {
-					return (null);
-				}
-				userAdmin.eventProducer.generateEvent(UserAdminEvent.ROLE_CHANGED, role);
-			}
-		}
-		Object retVal = super.put(key, value);
-		return retVal;
-	}
-
-	public Object put(Object key, Object value) {
-		if (!(key instanceof String)) {
-			throw new IllegalArgumentException(UserAdminMsg.INVALID_KEY_EXCEPTION);
-		}
-
-		if (!((value instanceof String) || (value instanceof byte[]))) {
-			throw new IllegalArgumentException(UserAdminMsg.INVALID_VALUE_EXCEPTION);
-		}
-
-		String name = (String) key;
-
-		switch (propertyType) {
-			case PROPERTIES :
-				userAdmin.checkChangePropertyPermission(name);
-				break;
-			case CREDENTIALS :
-				userAdmin.checkChangeCredentialPermission(name);
-				break;
-		}
-
-		return put(name, value, true);
-	}
-
-	public synchronized Object remove(Object key) {
-		if (!(key instanceof String)) {
-			throw new IllegalArgumentException(UserAdminMsg.INVALID_KEY_EXCEPTION);
-		}
-
-		String name = (String) key;
-
-		switch (propertyType) {
-			case PROPERTIES :
-				userAdmin.checkChangePropertyPermission(name);
-				try {
-					userAdminStore.removeProperty(role, name);
-				} catch (BackingStoreException ex) {
-					return (null);
-				}
-				userAdmin.eventProducer.generateEvent(UserAdminEvent.ROLE_CHANGED, role);
-				break;
-			case CREDENTIALS :
-				userAdmin.checkChangeCredentialPermission(name);
-				try {
-					userAdminStore.removeCredential(role, name);
-				} catch (BackingStoreException ex) {
-					return (null);
-				}
-				userAdmin.eventProducer.generateEvent(UserAdminEvent.ROLE_CHANGED, role);
-				break;
-		}
-
-		return super.remove(name);
-	}
-
-	public synchronized void clear() {
-		Enumeration e = keys();
-
-		while (e.hasMoreElements()) {
-			String name = (String) e.nextElement();
-
-			switch (propertyType) {
-				case PROPERTIES :
-					userAdmin.checkChangePropertyPermission(name);
-					break;
-				case CREDENTIALS :
-					userAdmin.checkChangeCredentialPermission(name);
-					break;
-			}
-		}
-
-		switch (propertyType) {
-			case PROPERTIES :
-				try {
-					userAdminStore.clearProperties(role);
-				} catch (BackingStoreException ex) {
-					return;
-				}
-				userAdmin.eventProducer.generateEvent(UserAdminEvent.ROLE_CHANGED, role);
-				break;
-			case CREDENTIALS :
-				try {
-					userAdminStore.clearCredentials(role);
-				} catch (BackingStoreException ex) {
-					return;
-				}
-				userAdmin.eventProducer.generateEvent(UserAdminEvent.ROLE_CHANGED, role);
-				break;
-		}
-
-		super.clear();
-	}
-
-	public Object get(Object key) {
-		if (!(key instanceof String)) {
-			throw new IllegalArgumentException(UserAdminMsg.INVALID_KEY_EXCEPTION);
-		}
-
-		String name = (String) key;
-
-		if (propertyType == CREDENTIALS) {
-			userAdmin.checkGetCredentialPermission(name);
-		}
-
-		return super.get(name);
-	}
-}
diff --git a/bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/UserAdminMsg.java b/bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/UserAdminMsg.java
deleted file mode 100644
index be4bf76..0000000
--- a/bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/UserAdminMsg.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.useradmin;
-
-import org.eclipse.osgi.util.NLS;
-
-public class UserAdminMsg extends NLS {
-	private static final String BUNDLE_NAME = "org.eclipse.equinox.useradmin.ExternalMessages"; //$NON-NLS-1$
-
-	public static String adding_Credential_to__15;
-	public static String adding_member__18;
-	public static String adding_required_member__21;
-	public static String removing_member__24;
-	public static String Unable_to_load_role__27;
-	public static String Backing_Store_Read_Exception;
-	public static String Backing_Store_Write_Exception;
-	public static String Event_Delivery_Exception;
-	public static String CREATE_NULL_ROLE_EXCEPTION;
-	public static String CREATE_INVALID_TYPE_ROLE_EXCEPTION;
-	public static String INVALID_KEY_EXCEPTION;
-	public static String INVALID_VALUE_EXCEPTION;
-	public static String USERADMIN_UNREGISTERED_EXCEPTION;
-	public static String Service_Vendor;
-	public static String OSGi_User_Admin_service_IBM_Implementation_3;
-
-	static {
-		// initialize resource bundles
-		NLS.initializeMessages(BUNDLE_NAME, UserAdminMsg.class);
-	}
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/UserAdminStore.java b/bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/UserAdminStore.java
deleted file mode 100644
index fda68fb..0000000
--- a/bundles/org.eclipse.equinox.useradmin/src/org/eclipse/equinox/useradmin/UserAdminStore.java
+++ /dev/null
@@ -1,353 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 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.useradmin;
-
-import java.security.AccessController;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-
-import org.eclipse.osgi.util.NLS;
-import org.osgi.framework.ServiceReference;
-import org.osgi.framework.ServiceRegistration;
-import org.osgi.service.log.LogService;
-import org.osgi.service.prefs.BackingStoreException;
-import org.osgi.service.prefs.Preferences;
-import org.osgi.service.prefs.PreferencesService;
-
-/*
- *  UserAdminStore is responsible for managing the persistence data of the useradmin
- *  service.  It uses the PersistenceNode service as its underlying storage.
- */
-
-public class UserAdminStore {
-
-	static protected final String propertiesNode = "properties"; //$NON-NLS-1$
-	static protected final String credentialsNode = "credentials"; //$NON-NLS-1$
-	static protected final String membersNode = "members"; //$NON-NLS-1$
-	static protected final String basicString = "basic"; //$NON-NLS-1$
-	static protected final String requiredString = "required"; //$NON-NLS-1$
-	static protected final String typeString = "type"; //$NON-NLS-1$
-	static protected final String persistenceUserName = "UserAdmin"; //$NON-NLS-1$
-
-	protected ServiceReference prefsRef;
-	protected ServiceRegistration userAdminListenerReg;
-	protected UserAdmin useradmin;
-	protected LogService log;
-	protected Preferences rootNode;
-	protected PreferencesService preferencesService;
-
-	protected UserAdminStore(PreferencesService preferencesService, UserAdmin useradmin, LogService log) {
-		this.preferencesService = preferencesService;
-		this.useradmin = useradmin;
-		this.log = log;
-	}
-
-	protected void init() throws BackingStoreException {
-		try {
-			AccessController.doPrivileged(new PrivilegedExceptionAction() {
-
-				public Object run() throws BackingStoreException {
-					rootNode = preferencesService.getUserPreferences(persistenceUserName);
-					loadRoles();
-					return (null);
-				}
-			});
-		} catch (PrivilegedActionException ex) {
-
-			throw ((BackingStoreException) ex.getException());
-		}
-	}
-
-	protected void addRole(final org.osgi.service.useradmin.Role role) throws BackingStoreException {
-		try {
-			AccessController.doPrivileged(new PrivilegedExceptionAction() {
-				public Object run() throws BackingStoreException {
-					Preferences node = rootNode.node(role.getName());
-					node.putInt(typeString, role.getType());
-					node.flush();
-					return (null);
-				}
-			});
-		} catch (PrivilegedActionException ex) {
-			log.log(LogService.LOG_ERROR, UserAdminMsg.Backing_Store_Write_Exception, ex);
-			throw ((BackingStoreException) ex.getException());
-		}
-	}
-
-	protected void removeRole(final org.osgi.service.useradmin.Role role) throws BackingStoreException {
-		try {
-			AccessController.doPrivileged(new PrivilegedExceptionAction() {
-				public Object run() throws BackingStoreException {
-					Preferences node = rootNode.node(role.getName());
-					node.removeNode();
-					rootNode.node("").flush(); //$NON-NLS-1$
-					return (null);
-				}
-			});
-		} catch (PrivilegedActionException ex) {
-			log.log(LogService.LOG_ERROR, UserAdminMsg.Backing_Store_Write_Exception, ex);
-			throw ((BackingStoreException) ex.getException());
-		}
-	}
-
-	protected void clearProperties(final org.osgi.service.useradmin.Role role) throws BackingStoreException {
-		try {
-			AccessController.doPrivileged(new PrivilegedExceptionAction() {
-				public Object run() throws BackingStoreException {
-					Preferences propertyNode = rootNode.node(role.getName() + "/" + propertiesNode); //$NON-NLS-1$
-					propertyNode.clear();
-					propertyNode.flush();
-					return (null);
-				}
-			});
-		} catch (PrivilegedActionException ex) {
-			log.log(LogService.LOG_ERROR, UserAdminMsg.Backing_Store_Write_Exception, ex);
-			throw ((BackingStoreException) ex.getException());
-		}
-	}
-
-	protected void addProperty(final org.osgi.service.useradmin.Role role, final String key, final Object value) throws BackingStoreException {
-		try {
-			AccessController.doPrivileged(new PrivilegedExceptionAction() {
-				public Object run() throws BackingStoreException {
-					Preferences propertyNode = rootNode.node(role.getName() + "/" + propertiesNode); //$NON-NLS-1$
-					if (value instanceof String) {
-						propertyNode.put(key, (String) value);
-					} else //must be a byte array, then
-					{
-						propertyNode.putByteArray(key, (byte[]) value);
-					}
-					propertyNode.flush();
-					return (null);
-				}
-			});
-		} catch (PrivilegedActionException ex) {
-			log.log(LogService.LOG_ERROR, UserAdminMsg.Backing_Store_Write_Exception, ex);
-			throw ((BackingStoreException) ex.getException());
-		}
-	}
-
-	protected void removeProperty(final org.osgi.service.useradmin.Role role, final String key) throws BackingStoreException {
-		try {
-			AccessController.doPrivileged(new PrivilegedExceptionAction() {
-				public Object run() throws BackingStoreException {
-					Preferences propertyNode = rootNode.node(role.getName() + "/" + propertiesNode); //$NON-NLS-1$
-					propertyNode.remove(key);
-					propertyNode.flush();
-					return (null);
-				}
-			});
-		} catch (PrivilegedActionException ex) {
-			log.log(LogService.LOG_ERROR, UserAdminMsg.Backing_Store_Write_Exception, ex);
-			throw ((BackingStoreException) ex.getException());
-		}
-	}
-
-	protected void clearCredentials(final org.osgi.service.useradmin.Role role) throws BackingStoreException {
-		try {
-			AccessController.doPrivileged(new PrivilegedExceptionAction() {
-				public Object run() throws BackingStoreException {
-					Preferences credentialNode = rootNode.node(role.getName() + "/" + credentialsNode); //$NON-NLS-1$
-					credentialNode.clear();
-					credentialNode.flush();
-					return (null);
-				}
-			});
-		} catch (PrivilegedActionException ex) {
-			log.log(LogService.LOG_ERROR, UserAdminMsg.Backing_Store_Write_Exception, ex);
-			throw ((BackingStoreException) ex.getException());
-		}
-	}
-
-	protected void addCredential(final org.osgi.service.useradmin.Role role, final String key, final Object value) throws BackingStoreException {
-
-		try {
-			AccessController.doPrivileged(new PrivilegedExceptionAction() {
-				public Object run() throws BackingStoreException {
-					Preferences credentialNode = rootNode.node(role.getName() + "/" + credentialsNode); //$NON-NLS-1$
-					if (value instanceof String) {
-						credentialNode.put(key, (String) value);
-					} else //assume it is a byte array
-					{
-						credentialNode.putByteArray(key, (byte[]) value);
-					}
-					credentialNode.flush();
-					return (null);
-				}
-			});
-		} catch (PrivilegedActionException ex) {
-			log.log(LogService.LOG_ERROR, NLS.bind(UserAdminMsg.Backing_Store_Write_Exception, new Object[] {NLS.bind(UserAdminMsg.adding_Credential_to__15, role.getName())}), ex);
-			throw ((BackingStoreException) ex.getException());
-		}
-
-	}
-
-	protected void removeCredential(final org.osgi.service.useradmin.Role role, final String key) throws BackingStoreException {
-		try {
-			AccessController.doPrivileged(new PrivilegedExceptionAction() {
-				public Object run() throws BackingStoreException {
-					Preferences credentialNode = rootNode.node(role.getName() + "/" + credentialsNode); //$NON-NLS-1$
-					credentialNode.remove(key);
-					credentialNode.flush();
-					return (null);
-				}
-			});
-		} catch (PrivilegedActionException ex) {
-			log.log(LogService.LOG_ERROR, UserAdminMsg.Backing_Store_Write_Exception, ex);
-			throw ((BackingStoreException) ex.getException());
-		}
-	}
-
-	protected void addMember(final Group group, final Role role) throws BackingStoreException {
-		try {
-			AccessController.doPrivileged(new PrivilegedExceptionAction() {
-				public Object run() throws BackingStoreException {
-					Preferences memberNode = rootNode.node(group.getName() + "/" + membersNode); //$NON-NLS-1$
-					memberNode.put(role.getName(), basicString);
-					memberNode.flush();
-					return (null);
-				}
-			});
-		} catch (PrivilegedActionException ex) {
-			log.log(LogService.LOG_ERROR, NLS.bind(UserAdminMsg.Backing_Store_Write_Exception, new Object[] {NLS.bind(UserAdminMsg.adding_member__18, role.getName(), group.getName())}), ex);
-			throw ((BackingStoreException) ex.getException());
-		}
-	}
-
-	protected void addRequiredMember(final Group group, final Role role) throws BackingStoreException {
-		try {
-			AccessController.doPrivileged(new PrivilegedExceptionAction() {
-				public Object run() throws BackingStoreException {
-					Preferences memberNode = rootNode.node(group.getName() + "/" + membersNode); //$NON-NLS-1$
-					memberNode.put(role.getName(), requiredString);
-					memberNode.flush();
-					return (null);
-				}
-			});
-		} catch (PrivilegedActionException ex) {
-			log.log(LogService.LOG_ERROR, NLS.bind(UserAdminMsg.Backing_Store_Write_Exception, new Object[] {NLS.bind(UserAdminMsg.adding_required_member__21, role.getName(), group.getName())}), ex);
-			throw ((BackingStoreException) ex.getException());
-		}
-	}
-
-	protected void removeMember(final Group group, final Role role) throws BackingStoreException {
-		try {
-			AccessController.doPrivileged(new PrivilegedExceptionAction() {
-				public Object run() throws BackingStoreException {
-					Preferences memberNode = rootNode.node(group.getName() + "/" + membersNode); //$NON-NLS-1$
-					memberNode.remove(role.getName());
-					memberNode.flush();
-					return (null);
-				}
-			});
-		} catch (PrivilegedActionException ex) {
-			log.log(LogService.LOG_ERROR, NLS.bind(UserAdminMsg.Backing_Store_Write_Exception, new Object[] {NLS.bind(UserAdminMsg.removing_member__24, role.getName(), group.getName())}), ex);
-			throw ((BackingStoreException) ex.getException());
-		}
-	}
-
-	protected void loadRoles() throws BackingStoreException {
-		synchronized (this) {
-			createAnonRole();
-
-			String[] children = rootNode.node("").childrenNames(); //$NON-NLS-1$
-
-			for (int i = 0; i < children.length; i++) {
-				if (useradmin.getRole(children[i]) == null) //check to see if it is already loaded
-				{ //(we may have had to load some roles out of
-					loadRole(rootNode.node(children[i]), null); // order due to dependencies) 
-					//modified to solve defect 95982
-				}
-			}
-		}
-	}
-
-	/* modified to solve defect 95982 */
-	protected void loadRole(Preferences node, Role role) throws BackingStoreException {
-		int type = node.getInt(typeString, Integer.MIN_VALUE);
-
-		if (type == Integer.MIN_VALUE) {
-			String errorString = NLS.bind(UserAdminMsg.Backing_Store_Read_Exception, new Object[] {NLS.bind(UserAdminMsg.Unable_to_load_role__27, node.name())});
-			BackingStoreException ex = new BackingStoreException(errorString);
-			log.log(LogService.LOG_ERROR, errorString, ex);
-			throw (ex);
-		}
-		if (role == null) {
-			role = (Role) useradmin.createRole(node.name(), type, false);
-		}
-		Preferences propsNode = node.node(propertiesNode);
-		String[] keys = propsNode.keys();
-		UserAdminHashtable properties = (UserAdminHashtable) role.getProperties();
-		String value;
-
-		//load properties
-		for (int i = 0; i < keys.length; i++) {
-			value = propsNode.get(keys[i], null);
-			properties.put(keys[i], value, false);
-		}
-
-		//load credentials
-		if (type == org.osgi.service.useradmin.Role.USER || type == org.osgi.service.useradmin.Role.GROUP) {
-			Object credValue;
-			Preferences credNode = node.node(credentialsNode);
-			keys = credNode.keys();
-			UserAdminHashtable credentials = (UserAdminHashtable) ((User) role).getCredentials();
-			for (int i = 0; i < keys.length; i++) {
-				credValue = credNode.get(keys[i], null);
-				credentials.put(keys[i], credValue, false);
-			}
-		}
-
-		//load group members
-		if (type == org.osgi.service.useradmin.Role.GROUP) {
-			Preferences memberNode = node.node(membersNode);
-			keys = memberNode.keys();
-			for (int i = 0; i < keys.length; i++) {
-				value = memberNode.get(keys[i], null);
-				Role member = (Role) useradmin.getRole(keys[i]);
-				if (member == null) //then we have not loaded this one yet, so load it
-				{
-					loadRole(rootNode.node(keys[i]), null); // modified to solve defect 95982
-					member = (Role) useradmin.getRole(keys[i]);
-				}
-				if (value.equals(requiredString)) {
-					((Group) role).addRequiredMember(member, false);
-				} else {
-					((Group) role).addMember(member, false);
-				}
-			}
-		}
-	}
-
-	protected void destroy() {
-		try {
-			rootNode.flush();
-			rootNode = null;
-			preferencesService = null;
-		} catch (BackingStoreException ex) {
-			log.log(LogService.LOG_ERROR, UserAdminMsg.Backing_Store_Write_Exception, ex);
-		}
-	}
-
-	private void createAnonRole() throws BackingStoreException {
-		Role role = null;
-		if (!rootNode.nodeExists(Role.anyoneString)) {
-			//If the user.anyone role is not present, create it
-			role = (Role) useradmin.createRole(Role.anyoneString, org.osgi.service.useradmin.Role.ROLE, true);
-		}
-		/* modified to solve defect 95982 */
-		if (role != null)
-			loadRole(rootNode.node(Role.anyoneString), role);
-		else
-			loadRole(rootNode.node(Role.anyoneString), null);
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.wireadmin/.classpath b/bundles/org.eclipse.equinox.wireadmin/.classpath
deleted file mode 100644
index 751c8f2..0000000
--- a/bundles/org.eclipse.equinox.wireadmin/.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"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/bundles/org.eclipse.equinox.wireadmin/.cvsignore b/bundles/org.eclipse.equinox.wireadmin/.cvsignore
deleted file mode 100644
index ba077a4..0000000
--- a/bundles/org.eclipse.equinox.wireadmin/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-bin
diff --git a/bundles/org.eclipse.equinox.wireadmin/.project b/bundles/org.eclipse.equinox.wireadmin/.project
deleted file mode 100644
index 72bdd5f..0000000
--- a/bundles/org.eclipse.equinox.wireadmin/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.equinox.wireadmin</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/bundles/org.eclipse.equinox.wireadmin/.settings/org.eclipse.core.resources.prefs b/bundles/org.eclipse.equinox.wireadmin/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index 16532b2..0000000
--- a/bundles/org.eclipse.equinox.wireadmin/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Tue May 25 15:00:03 EDT 2004
-encoding/<project>=ISO-8859-1
-eclipse.preferences.version=1
diff --git a/bundles/org.eclipse.equinox.wireadmin/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.equinox.wireadmin/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 7b30719..0000000
--- a/bundles/org.eclipse.equinox.wireadmin/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,49 +0,0 @@
-#Fri Dec 16 09:21:02 CST 2005
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=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=disabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-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.overridingPackageDefaultMethod=warning
-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=ignore
-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=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
diff --git a/bundles/org.eclipse.equinox.wireadmin/META-INF/MANIFEST.MF b/bundles/org.eclipse.equinox.wireadmin/META-INF/MANIFEST.MF
deleted file mode 100644
index ab535c0..0000000
--- a/bundles/org.eclipse.equinox.wireadmin/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,18 +0,0 @@
-Bundle-ManifestVersion: 2
-Bundle-SymbolicName: org.eclipse.equinox.wireadmin
-Bundle-Name: %bundleName
-Bundle-Vendor: %bundleVendor
-Bundle-Copyright: %bundleCopyright
-Bundle-Version: 1.0.0.qualifier
-Bundle-Activator: org.eclipse.equinox.wireadmin.Activator
-Bundle-Localization: plugin
-Import-Package: org.eclipse.osgi.framework.eventmgr,
- org.osgi.framework;version="1.1",
- org.osgi.service.log;version="1.2",
- org.osgi.service.prefs;version="1.0",
- org.osgi.service.wireadmin;version="1.0",
- org.osgi.util.tracker;version="1.2",
- org.eclipse.osgi.util
-Export-Package: org.eclipse.equinox.wireadmin;x-internal=true
-Import-Service: org.osgi.service.log.LogService, org.osgi.service.prefs
-Export-Service: org.osgi.service.wireadmin.WireAdmin
diff --git a/bundles/org.eclipse.equinox.wireadmin/about.html b/bundles/org.eclipse.equinox.wireadmin/about.html
deleted file mode 100644
index 3989f53..0000000
--- a/bundles/org.eclipse.equinox.wireadmin/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 11, 2006</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 (&quot;EPL&quot;).  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, &quot;Program&quot; 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 (&quot;Redistributor&quot;) 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>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/bundles/org.eclipse.equinox.wireadmin/build.properties b/bundles/org.eclipse.equinox.wireadmin/build.properties
deleted file mode 100644
index d855c16..0000000
--- a/bundles/org.eclipse.equinox.wireadmin/build.properties
+++ /dev/null
@@ -1,16 +0,0 @@
-###############################################################################
-# Copyright (c) 2005 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
-###############################################################################
-bin.includes = META-INF/,\
-               plugin*.properties,\
-               about.html,\
-               .
-source.. = src/
-output.. = bin/
diff --git a/bundles/org.eclipse.equinox.wireadmin/plugin.properties b/bundles/org.eclipse.equinox.wireadmin/plugin.properties
deleted file mode 100644
index 7eff086..0000000
--- a/bundles/org.eclipse.equinox.wireadmin/plugin.properties
+++ /dev/null
@@ -1,13 +0,0 @@
-###############################################################################
-# Copyright (c) 2005 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
-###############################################################################
-bundleVendor = Eclipse.org
-bundleName = Wire Admin Service
-bundleCopyright = Copyright (c) IBM Corp. 2003, 2005
diff --git a/bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/Activator.java b/bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/Activator.java
deleted file mode 100644
index 8513f27..0000000
--- a/bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/Activator.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2002, 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.wireadmin;
-
-import org.osgi.framework.*;
-import org.osgi.service.prefs.PreferencesService;
-import org.osgi.util.tracker.ServiceTracker;
-import org.osgi.util.tracker.ServiceTrackerCustomizer;
-
-public class Activator implements BundleActivator, ServiceTrackerCustomizer {
-
-	private String wireadminString = "org.osgi.service.wireadmin.WireAdmin"; //$NON-NLS-1$
-	private WireAdmin wireadmin;
-	private ServiceRegistration wireadminReg;
-	private PreferencesService preferencesService;
-	private BundleContext context;
-	private ServiceTracker prefsTracker;
-
-	/**
-	 * @see BundleActivator#start(BundleContext)
-	 */
-	public void start(BundleContext context_) throws Exception {
-
-		this.context = context_;
-		prefsTracker = new ServiceTracker(context, PreferencesService.class.getName(), this);
-		prefsTracker.open();
-	}
-
-	/**
-	 * @see BundleActivator#stop(BundleContext)
-	 */
-	public void stop(BundleContext context_) throws Exception {
-		if(wireadminReg != null)
-		{
-			wireadminReg.unregister();
-			wireadmin.destroy();
-		}
-
-	}
-
-	public Object addingService(ServiceReference reference) {
-		prefsTracker.close();
-		if (preferencesService == null) {
-			preferencesService = (PreferencesService) context.getService(reference);
-			registerWireAdminService();
-			return preferencesService;
-		}
-		return null; //we don't want to track a service we are not using
-	}
-
-	public void modifiedService(ServiceReference reference, Object service) { //do nothing
-
-	}
-
-	public void removedService(ServiceReference reference, Object service) {
-		if (service == preferencesService) {
-			preferencesService = null;
-			wireadminReg.unregister();
-		}
-		context.ungetService(reference);
-	}
-
-	public void registerWireAdminService() {
-		wireadmin = new WireAdmin(context);
-		wireadminReg = context.registerService(wireadminString, wireadmin, null);
-		wireadmin.setServiceReference(wireadminReg.getReference());
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/ConsumerCustomizer.java b/bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/ConsumerCustomizer.java
deleted file mode 100644
index 9a2ca94..0000000
--- a/bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/ConsumerCustomizer.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2002, 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.wireadmin;
-
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.wireadmin.Consumer;
-import org.osgi.util.tracker.ServiceTrackerCustomizer;
-
-public class ConsumerCustomizer implements ServiceTrackerCustomizer {
-
-	protected Wire wire;
-	protected BundleContext context;
-
-	public ConsumerCustomizer(BundleContext context, Wire wire) {
-		this.wire = wire;
-		this.context = context;
-	}
-
-	/**
-	 * @see ServiceTrackerCustomizer#addingService(ServiceReference)
-	 */
-	public Object addingService(ServiceReference reference) {
-		Consumer service = (Consumer) context.getService(reference);
-		synchronized (wire) {
-			wire.setConsumer(service, reference);
-
-			return (service);
-		}
-	}
-
-	/**
-	 * @see ServiceTrackerCustomizer#modifiedService(ServiceReference, Object)
-	 */
-	public void modifiedService(ServiceReference reference, Object service) {
-		synchronized (wire) {
-			//our flavors and other properties may have changed
-			wire.setConsumerProperties(reference);
-		}
-	}
-
-	/**
-	 * @see ServiceTrackerCustomizer#removedService(ServiceReference, Object)
-	 */
-	public void removedService(ServiceReference reference, Object service) {
-		synchronized (wire) {
-			wire.removeConsumer();
-			context.ungetService(reference);
-		}
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/ConsumersCustomizer.java b/bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/ConsumersCustomizer.java
deleted file mode 100644
index 26a5f58..0000000
--- a/bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/ConsumersCustomizer.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2002, 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.wireadmin;
-
-import org.osgi.framework.*;
-import org.osgi.service.wireadmin.Consumer;
-import org.osgi.util.tracker.ServiceTrackerCustomizer;
-
-public class ConsumersCustomizer implements ServiceTrackerCustomizer {
-
-	protected BundleContext context;
-	protected WireAdmin wireAdmin;
-
-	public ConsumersCustomizer(BundleContext context, WireAdmin wireAdmin) {
-		this.context = context;
-		this.wireAdmin = wireAdmin;
-	}
-
-	/**
-	 * @see ServiceTrackerCustomizer#addingService(ServiceReference)
-	 */
-	public Object addingService(ServiceReference reference) {
-		Consumer service = (Consumer) context.getService(reference);
-		String pid = (String) reference.getProperty("service.pid"); //$NON-NLS-1$
-
-		try {
-			//if a wire contains this producer, the wire notify it
-			if (wireAdmin.getWires(wireAdmin.consumerFilter + pid + ")") == null) { //$NON-NLS-1$
-				wireAdmin.notifyConsumer(service, pid);
-			}
-		} catch (InvalidSyntaxException ex) {
-			ex.printStackTrace();
-		}
-		return (service);
-	}
-
-	/**
-	 * @see ServiceTrackerCustomizer#modifiedService(ServiceReference, Object)
-	 */
-	public void modifiedService(ServiceReference reference, Object service) {
-		//do nothing
-	}
-
-	/**
-	 * @see ServiceTrackerCustomizer#removedService(ServiceReference, Object)
-	 */
-	public void removedService(ServiceReference reference, Object service) {
-
-		context.ungetService(reference);
-	}
-}
diff --git a/bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/ExternalMessages.properties b/bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/ExternalMessages.properties
deleted file mode 100644
index 0143995..0000000
--- a/bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/ExternalMessages.properties
+++ /dev/null
@@ -1,14 +0,0 @@
-###############################################################################
-# Copyright (c) 2002, 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
-###############################################################################
-BACKING_STORE_READ_EXCEPTION=WireAdmin is unable to read its data from backing store {0}
-WIREADMIN_UNREGISTERED_EXCEPTION=The WireAdmin Service has been unregistered {0}	
-WIREADMIN_EVENT_DISPATCH_ERROR=Error dispatching WireAdmin Events {0}
-WIREADMIN_KEYS_CASE_INSENSITIVE_MATCH=Property keys can not be case insensitive matches
diff --git a/bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/LogMessages.properties b/bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/LogMessages.properties
deleted file mode 100644
index e29ba01..0000000
--- a/bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/LogMessages.properties
+++ /dev/null
@@ -1,14 +0,0 @@
-###############################################################################
-# Copyright (c) 2002, 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
-###############################################################################
-Unknown_Log_level=Unknown Log Level
-Info=Log Info
-Warning=Log Warning
-Error=Log Error
diff --git a/bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/LogTracker.java b/bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/LogTracker.java
deleted file mode 100644
index cd7f725..0000000
--- a/bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/LogTracker.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 1998, 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.wireadmin;
-
-import java.io.PrintStream;
-import java.text.DateFormat;
-import java.util.Calendar;
-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 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 */
-	protected PrintStream out;
-
-	/** Calendar and DateFormat to user if LogService is unavailable */
-	private static Calendar calendar;
-	private static DateFormat dateFormat;
-	private String timestamp;
-
-	/**
-	 * 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;
-		calendar = Calendar.getInstance();
-		dateFormat = DateFormat.getDateTimeInstance();
-		open();
-	}
-
-	/*
-	 * ----------------------------------------------------------------------
-	 *      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(ServiceReference reference, int level, String message) {
-		log(reference, level, message, null);
-	}
-
-	public synchronized void log(ServiceReference reference, int level, String message, Throwable exception) {
-		ServiceReference[] references = getServiceReferences();
-
-		if (references != null) {
-			int size = references.length;
-
-			for (int i = 0; i < size; i++) {
-				LogService service = (LogService) getService(references[i]);
-				if (service != null) {
-					try {
-						service.log(reference, level, message, exception);
-					} catch (Exception e) {
-						//do nothing
-					}
-				}
-			}
-
-			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.
-				timestamp = dateFormat.format(calendar.getTime());
-				out.print(timestamp + " "); //$NON-NLS-1$
-
-				switch (level) {
-					case LOG_DEBUG : {
-						out.print("Debug: "); //$NON-NLS-1$
-
-						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);
-				}
-			}
-		}
-	}
-}
diff --git a/bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/LogTrackerMsg.java b/bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/LogTrackerMsg.java
deleted file mode 100644
index 56f51a1..0000000
--- a/bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/LogTrackerMsg.java
+++ /dev/null
@@ -1,27 +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.wireadmin;
-
-import org.eclipse.osgi.util.NLS;
-
-public class LogTrackerMsg extends NLS {
-	private static final String BUNDLE_NAME = "org.eclipse.equinox.wireadmin.LogMessages"; //$NON-NLS-1$
-
-	public static String Unknown_Log_level;
-	public static String Info;
-	public static String Warning;
-	public static String Error;
-
-	static {
-		// initialize resource bundles
-		NLS.initializeMessages(BUNDLE_NAME, LogTrackerMsg.class);
-	}
-}
diff --git a/bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/ProducerCustomizer.java b/bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/ProducerCustomizer.java
deleted file mode 100644
index ed6b3bf..0000000
--- a/bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/ProducerCustomizer.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2002, 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.wireadmin;
-
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.wireadmin.Producer;
-import org.osgi.util.tracker.ServiceTrackerCustomizer;
-
-public class ProducerCustomizer implements ServiceTrackerCustomizer {
-
-	protected Wire wire;
-	protected BundleContext context;
-
-	public ProducerCustomizer(BundleContext context, Wire wire) {
-		this.wire = wire;
-		this.context = context;
-	}
-
-	/**
-	 * @see ServiceTrackerCustomizer#addingService(ServiceReference)
-	 */
-	public Object addingService(ServiceReference reference) {
-		Object service = context.getService(reference);
-		wire.setProducer((Producer) service, reference);
-		return (service);
-	}
-
-	/**
-	 * @see ServiceTrackerCustomizer#modifiedService(ServiceReference, Object)
-	 */
-	public void modifiedService(ServiceReference reference, Object service) {
-		//the producer flavor filters may have changed
-		wire.setProducerProperties(reference);
-	}
-
-	/**
-	 * @see ServiceTrackerCustomizer#removedService(ServiceReference, Object)
-	 */
-	public void removedService(ServiceReference reference, Object service) {
-		wire.removeProducer();
-		context.ungetService(reference);
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/ProducersCustomizer.java b/bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/ProducersCustomizer.java
deleted file mode 100644
index 3b8af29..0000000
--- a/bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/ProducersCustomizer.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2002, 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.wireadmin;
-
-import org.osgi.framework.*;
-import org.osgi.service.wireadmin.Producer;
-import org.osgi.util.tracker.ServiceTrackerCustomizer;
-
-public class ProducersCustomizer implements ServiceTrackerCustomizer {
-
-	protected BundleContext context;
-	protected WireAdmin wireAdmin;
-
-	public ProducersCustomizer(BundleContext context, WireAdmin wireAdmin) {
-		this.context = context;
-		this.wireAdmin = wireAdmin;
-	}
-
-	/**
-	 * @see ServiceTrackerCustomizer#addingService(ServiceReference)
-	 */
-	public Object addingService(ServiceReference reference) {
-		Producer service = (Producer) context.getService(reference);
-		String pid = (String) reference.getProperty("service.pid"); //$NON-NLS-1$
-
-		try {
-			//if a wire contains this producer, the wire notifies it
-			if (wireAdmin.getWires(wireAdmin.producerFilter + pid + ")") == null) { //$NON-NLS-1$
-				wireAdmin.notifyProducer(service, pid);
-			}
-		} catch (InvalidSyntaxException ex) {
-			ex.printStackTrace();
-		}
-
-		return (service);
-	}
-
-	/**
-	 * @see ServiceTrackerCustomizer#modifiedService(ServiceReference, Object)
-	 */
-	public void modifiedService(ServiceReference reference, Object service) {
-		//do nothing
-	}
-
-	/**
-	 * @see ServiceTrackerCustomizer#removedService(ServiceReference, Object)
-	 */
-	public void removedService(ServiceReference reference, Object service) {
-
-		context.ungetService(reference);
-	}
-}
diff --git a/bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/ReadOnlyDictionary.java b/bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/ReadOnlyDictionary.java
deleted file mode 100644
index f533160..0000000
--- a/bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/ReadOnlyDictionary.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2002, 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.wireadmin;
-
-import java.util.*;
-
-public class ReadOnlyDictionary extends Hashtable {
-
-	/**
-	 * Serial Version UID
-	 */
-	private static final long serialVersionUID = 2878360633574220743L;
-	private Dictionary dictionary;
-
-	public ReadOnlyDictionary(Dictionary dictionary) {
-		this.dictionary = dictionary;
-	}
-
-	public Object put(Object key, Object value) {
-		return (null);
-	}
-
-	public void clear() {
-		//??? Do I need to throw an exception
-	}
-
-	public Enumeration elements() {
-		return dictionary.elements();
-	}
-
-	public boolean equals(Object object) {
-		//??? - What should we really do here
-		if (object instanceof ReadOnlyDictionary) {
-			return super.equals(object);
-		}
-		return dictionary.equals(object);
-	}
-
-	public Object get(Object key) {
-		return dictionary.get(key);
-	}
-
-	public int hashCode() {
-		//??? is this right
-		return dictionary.hashCode();
-	}
-
-	public boolean isEmpty() {
-		return dictionary.isEmpty();
-	}
-
-	public Enumeration keys() {
-		return dictionary.keys();
-	}
-
-	public Object remove(Object key) {
-		//??? - throw exception???
-		return (null);
-	}
-
-	public int size() {
-		return dictionary.size();
-	}
-
-	public String toString() {
-		return dictionary.toString();
-	}
-}
diff --git a/bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/Wire.java b/bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/Wire.java
deleted file mode 100644
index 7c0f476..0000000
--- a/bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/Wire.java
+++ /dev/null
@@ -1,490 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2002, 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.wireadmin;
-
-import java.util.*;
-import org.osgi.framework.*;
-import org.osgi.service.wireadmin.*;
-import org.osgi.util.tracker.ServiceTracker;
-
-public class Wire implements org.osgi.service.wireadmin.Wire {
-
-	protected boolean valid = false;
-	protected boolean connected = false;
-
-	protected ServiceTracker consumerTracker;
-	protected ServiceTracker producerTracker;
-
-	protected Producer producer = null;
-	protected Consumer consumer = null;
-
-	protected Class[] flavors = null;
-	protected Class[] producerFlavors = null;
-
-	protected Object lastValue;
-	protected long lastTime = -1;
-
-	protected Dictionary properties;
-	protected WireAdmin wireadmin;
-
-	private String pid;
-	private String producerPID;
-	private String consumerPID;
-
-	private boolean producerFilterExists;
-	private Filter wireFilter;
-
-	protected Wire(String pid, String producerPID, String consumerPID, Dictionary props, WireAdmin wireadmin) {
-		this.pid = pid;
-		this.producerPID = producerPID;
-		this.consumerPID = consumerPID;
-
-		this.wireadmin = wireadmin;
-		setProperties(props);
-
-		String consumerFilterString = "(&(objectClass=org.osgi.service.wireadmin.Consumer)(service.pid=" + consumerPID + "))";//$NON-NLS-1$ //$NON-NLS-2$
-		String producerFilterString = "(&(objectClass=org.osgi.service.wireadmin.Producer)(service.pid=" + producerPID + "))";//$NON-NLS-1$ //$NON-NLS-2$
-		Filter consumerFilter = null;
-		Filter producerFilter = null;
-		wireFilter = (Filter) properties.get(WireConstants.WIREADMIN_FILTER);
-		try {
-			consumerFilter = wireadmin.context.createFilter(consumerFilterString);
-			producerFilter = wireadmin.context.createFilter(producerFilterString);
-		} catch (InvalidSyntaxException ex) {
-			ex.printStackTrace();//FIXME
-		}
-
-		ConsumerCustomizer consumerCustomizer = new ConsumerCustomizer(wireadmin.context, this);
-		ProducerCustomizer producerCustomizer = new ProducerCustomizer(wireadmin.context, this);
-
-		consumerTracker = new ServiceTracker(wireadmin.context, consumerFilter, consumerCustomizer);
-		producerTracker = new ServiceTracker(wireadmin.context, producerFilter, producerCustomizer);
-
-		valid = true;
-	}
-
-	/**
-	 * Return the state of this <tt>Wire</tt> object.
-	 *
-	 * <p>A connected <tt>Wire</tt> must always be disconnected before
-	 * becoming invalid.
-	 *
-	 * @return <tt>false</tt> if this <tt>Wire</tt> is invalid because it
-	 * has been deleted via {@link WireAdmin#deleteWire};
-	 * <tt>true</tt> otherwise.
-	 */
-	/**
-	 * Return the state of this <tt>Wire</tt> object.
-	 *
-	 * <p>A connected <tt>Wire</tt> must always be disconnected before
-	 * becoming invalid.
-	 *
-	 * @return <tt>false</tt> if this <tt>Wire</tt> is invalid because it
-	 * has been deleted via {@link WireAdmin#deleteWire};
-	 * <tt>true</tt> otherwise.
-	 */
-	public boolean isValid() {
-		return (valid);
-	}
-
-	/**
-	 * Return the connection state of this <tt>Wire</tt> object.
-	 *
-	 * <p>A <tt>Wire</tt> is connected after the Wire Admin service receives
-	 * notification that the <tt>Producer</tt> service and
-	 * the <tt>Consumer</tt> service for this <tt>Wire</tt> object are both registered.
-	 * This method will return <tt>true</tt> prior to notifying the <tt>Producer</tt>
-	 * and <tt>Consumer</tt> services via calls
-	 * to their respective <tt>consumersConnected</tt> and <tt>producersConnected</tt>
-	 * methods.
-	 * <p>A <tt>WireAdminEvent</tt> of type {@link WireAdminEvent#WIRE_CONNECTED}
-	 * must be broadcast by the Wire Admin service when
-	 * the <tt>Wire</tt> becomes connected.
-	 *
-	 * <p>A <tt>Wire</tt> object
-	 * is disconnected when either the <tt>Consumer</tt> or <tt>Producer</tt>
-	 * service is unregistered or the <tt>Wire</tt> object is deleted.
-	 * <p>A <tt>WireAdminEvent</tt> of type {@link WireAdminEvent#WIRE_DISCONNECTED}
-	 * must be broadcast by the Wire Admin service when
-	 * the <tt>Wire</tt> becomes disconnected.
-	 *
-	 * @return <tt>true</tt> if both the <tt>Producer</tt> and <tt>Consumer</tt>
-	 * for this <tt>Wire</tt> object are connected to the <tt>Wire</tt> object;
-	 * <tt>false</tt> otherwise.
-	 */
-
-	public boolean isConnected() {
-		return (connected);
-	}
-
-	/**
-	 * Return the list of data types understood by the
-	 * <tt>Consumer</tt> service connected to this <tt>Wire</tt> object. Note that
-	 * subclasses of the classes in this list are allowed as well.
-	 *
-	 * <p>The list is the value of the {@link Consumer#WIREADMIN_CONSUMER_FLAVORS}
-	 * service property of the
-	 * <tt>Consumer</tt> service object connected to this object. If no such
-	 * property was registered, this method must return null.
-	 *
-	 * @return An array containing the list of classes understood by the
-	 * <tt>Consumer</tt> service or <tt>null</tt> if the <tt>Consumer</tt> object is
-	 * not currently a registered service, or the <tt>Wire</tt> has been disconnected,
-	 * or the consumer did not register a {@link #WIREADMIN_CONSUMER_FLAVORS} property.
-	 */
-	public Class[] getFlavors() {
-		return (flavors);
-	}
-
-	protected void setConsumerProperties(ServiceReference consumerReference) {
-		if (consumerReference != null) {
-			try {
-				flavors = (Class[]) consumerReference.getProperty(WireConstants.WIREADMIN_CONSUMER_FLAVORS);
-			} catch (ClassCastException ex) {
-				// log error???
-			}
-		}
-	}
-
-	/**
-	 * Update the value.
-	 *
-	 * <p>This methods is called by the <tt>Producer</tt> service to
-	 * notify the <tt>Consumer</tt> service connected to this <tt>Wire</tt> object
-	 * of an updated value.
-	 * <p>If the properties of this <tt>Wire</tt> object contain a
-	 * {@link Constants#WIREADMIN_FILTER} property,
-	 * then filtering is performed on this <tt>Wire</tt>.
-	 * If the <tt>Producer</tt> service connected to this <tt>Wire</tt>
-	 * object was registered with the service
-	 * property {@link Constants#WIREADMIN_PRODUCER_FILTERS}, the
-	 * <tt>Producer</tt> service will perform the filter the value according to the rules specified
-	 * for the filter. Otherwise, this <tt>Wire</tt> object
-	 * will filter the value according to the rules specified for the filter.
-	 * <p>If no filtering is done, or the filter indicates the updated value should
-	 * be delivered to the <tt>Consumer</tt> service, then
-	 * this <tt>Wire</tt> object must call
-	 * the {@link Consumer#updated} method with the updated value.
-	 * If this <tt>Wire</tt> object is not connected, then the <tt>Consumer</tt>
-	 * service must not be called.
-	 *
-	 * <p>A <tt>WireAdminEvent</tt> of type {@link WireAdminEvent#WIRE_TRACE}
-	 * must be broadcast by the Wire Admin service after
-	 * the <tt>Consumer</tt> service has been successfully called.
-	 *
-	 * @param value The updated value. The value should be an instance of
-	 * one of the types returned by {@link #getFlavors}.
-	 * @see Constants#WIREADMIN_FILTER
-	 */
-	//FIXME -- wire filter
-	public void update(Object value) {
-		wireadmin.checkAlive();
-		synchronized (this) {
-			int length = flavors.length;
-			boolean correctFlavors = false;
-			for (int i = 0; i < length; i++) {
-				if (flavors[i].isInstance(value)) {
-					correctFlavors = true;
-					break;
-				}
-			}
-			if (!correctFlavors) {
-				return;
-			}
-			if (consumer != null) {
-				//if the producer filter property is set, the producer will do the filtering
-				//FIXME - check conditions correctly
-				if (producerFilterExists || wireFilter == null) {
-					try {
-						consumer.updated(this, value);
-						lastValue = value;
-						//lastTime = time;
-						wireadmin.eventProducer.generateEvent(WireAdminEvent.WIRE_TRACE, this, null);
-					} catch (Exception ex) {
-						wireadmin.eventProducer.generateEvent(WireAdminEvent.CONSUMER_EXCEPTION, this, ex);
-					}
-				} else {
-					long time = Calendar.getInstance().getTime().getTime();
-					//get object properties
-					Hashtable valueProps = new Hashtable(10);
-					valueProps.put(WireConstants.WIREVALUE_CURRENT, value);
-					valueProps.put(WireConstants.WIREVALUE_PREVIOUS, lastValue);
-					valueProps.put(WireConstants.WIREVALUE_ELAPSED, new Long(time - lastTime)); //???LONG???
-					try {
-						// value-lastValue;
-						if (value instanceof Short) {
-							int result = ((Short) value).shortValue() - ((Short) lastValue).shortValue();
-							valueProps.put(WireConstants.WIREVALUE_DELTA_RELATIVE, new Integer(result));
-							if (result < 0) {
-								result = result * -1;
-							}
-							valueProps.put(WireConstants.WIREVALUE_DELTA_ABSOLUTE, new Integer(result));
-						}
-						if (value instanceof Integer) {
-							int result = ((Integer) value).intValue() - ((Integer) lastValue).intValue();
-							valueProps.put(WireConstants.WIREVALUE_DELTA_RELATIVE, new Integer(result));
-							if (result < 0) {
-								result = result * -1;
-							}
-							valueProps.put(WireConstants.WIREVALUE_DELTA_ABSOLUTE, new Integer(result));
-						}
-						if (value instanceof Long) {
-							long result = ((Long) value).longValue() - ((Long) lastValue).longValue();
-							valueProps.put(WireConstants.WIREVALUE_DELTA_RELATIVE, new Long(result));
-							if (result < 0) {
-								result = result * -1;
-							}
-							valueProps.put(WireConstants.WIREVALUE_DELTA_ABSOLUTE, new Long(result));
-						}
-						if (value instanceof Double) {
-							long result = ((Long) value).longValue() - ((Long) lastValue).longValue();
-							valueProps.put(WireConstants.WIREVALUE_DELTA_RELATIVE, new Long(result));
-							if (result < 0) {
-								result = result * -1;
-							}
-							valueProps.put(WireConstants.WIREVALUE_DELTA_ABSOLUTE, new Long(result));
-						}
-					} catch (NumberFormatException ex) {
-						//we don't have two numeric values so do nothing
-					}
-				}
-			}
-		}
-	}
-
-	/**
-	 * Poll for an updated value.
-	 *
-	 * <p>This methods is normally called by the <tt>Consumer</tt> service to
-	 * request an updated value from the <tt>Producer</tt> service
-	 * connected to this <tt>Wire</tt> object.
-	 * This <tt>Wire</tt> object will call
-	 * the {@link Producer#polled} method to obtain an updated value.
-	 * If this <tt>Wire</tt> object is not connected, then the <tt>Producer</tt>
-	 * service must not be called.
-	 *
-	 * <p>A <tt>WireAdminEvent</tt> of type {@link WireAdminEvent#WIRE_TRACE}
-	 * must be broadcast by the Wire Admin service after
-	 * the <tt>Producer</tt> service has been successfully called.
-	 *
-	 * @return An updated value whose type should be one of the types
-	 * returned by {@link #getFlavors} or <tt>null</tt> if
-	 * the <tt>Wire</tt> object is not connected,
-	 * the <tt>Producer</tt> service threw an exception, or
-	 * the <tt>Producer</tt> service returned a value which is not an instance of
-	 * one of the types returned by {@link #getFlavors}.
-	 */
-	public synchronized Object poll() {
-		wireadmin.checkAlive();
-		if (producer != null) {
-			try {
-				synchronized (this) {
-					Object value = producer.polled(this);
-					wireadmin.eventProducer.generateEvent(WireAdminEvent.WIRE_TRACE, this, null);
-					if (checkFlavor(value)) {
-						lastValue = value;
-						return (value);
-					}
-					return (null);
-				}
-			} catch (Exception ex) {
-				wireadmin.eventProducer.generateEvent(WireAdminEvent.PRODUCER_EXCEPTION, this, ex);
-				return (null);
-			}
-		}
-		return (null);
-
-	}
-
-	/**
-	 * Return the last value sent through this <tt>Wire</tt> 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 applied by the <tt>Wire</tt> object,
-	 * this is still the value as set by the <tt>Producer</tt> service.
-	 *
-	 * @return The last value passed though this <tt>Wire</tt> object
-	 * or <tt>null</tt> if no valid values have been passed.
-	 */
-
-	public Object getLastValue() {
-		return (lastValue);
-	}
-
-	/**
-	 * Return the wire properties for this <tt>Wire</tt> object.
-	 *
-	 * @return The properties for this <tt>Wire</tt> object.
-	 * The returned <tt>Dictionary</tt> must be read only.
-	 */
-
-	public Dictionary getProperties() {
-		return (new ReadOnlyDictionary(properties));
-	}
-
-	protected void connect() {
-		connected = true;
-		wireadmin.notifyConsumer(consumer, consumerPID);
-		wireadmin.notifyProducer(producer, producerPID);
-
-		//send event
-		wireadmin.eventProducer.generateEvent(WireAdminEvent.WIRE_CONNECTED, this, null);
-	}
-
-	protected void disconnect() {
-		connected = false;
-		wireadmin.notifyConsumer(consumer, consumerPID);
-		wireadmin.notifyProducer(producer, producerPID);
-
-		//send event
-		wireadmin.eventProducer.generateEvent(WireAdminEvent.WIRE_DISCONNECTED, this, null);
-	}
-
-	protected void destroy() {
-		if (consumer != null) {
-			removeConsumer();
-		}
-		if (producer != null) {
-			removeProducer();
-		}
-		consumerTracker.close();
-		producerTracker.close();
-		valid = false;
-	}
-
-	protected void setConsumer(Consumer consumer, ServiceReference reference) {
-		this.consumer = consumer;
-		setConsumerProperties(reference);
-		if (producer != null) {
-			connect();
-		}
-	}
-
-	protected void setProducer(Producer producer, ServiceReference reference) {
-		this.producer = producer;
-		setProducerProperties(reference);
-		if (consumer != null) {
-			connect();
-		}
-	}
-
-	protected void setProducerProperties(ServiceReference reference) {
-		producerFlavors = (Class[]) reference.getProperty(WireConstants.WIREADMIN_PRODUCER_FLAVORS);
-		//TODO - this method need to be completed
-		//String[] keys = reference.getPropertyKeys();
-		//need to find out if WIREADMIN_PRODUCER_FILTERS key exists
-		if (reference.getProperty(WireConstants.WIREADMIN_PRODUCER_FILTERS) != null) {
-			producerFilterExists = true;
-		}
-		/* 
-		 for(int i=0;i<keys.length;i++)
-		 {
-		 if(keys[i] == (WireConstants.WIREADMIN_PRODUCER_FILTERS))
-		 {	
-		 producerFilterExists = true;
-		 return;
-		 }
-		 }  */
-	}
-
-	protected void removeProducer() {
-		producerFilterExists = false;
-		producerFlavors = null;
-
-		if (connected) {
-			//The consumer is now "not connected" by this wire
-			disconnect();
-		}
-		producer = null;
-	}
-
-	protected void removeConsumer() {
-
-		if (connected) {
-			disconnect();
-		}
-		consumer = null;
-		flavors = null;
-	}
-
-	protected String getPid() {
-		return pid;
-	}
-
-	private boolean checkFlavor(Object value) {
-		if (flavors == null) {
-			return (true);
-		}
-		for (int i = 0; i < flavors.length; i++) {
-			if (value.getClass().isInstance(flavors[i])) {
-				return (true);
-			}
-		}
-		return (false);
-	}
-
-	/**
-	 * Return the calculated scope of this <tt>Wire</tt> object.
-	 *
-	 * The purpose of the <tt>Wire</tt> object's scope is to allow a Producer
-	 * and/or Consumer service to produce/consume different types
-	 * over a single <tt>Wire</tt> 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 <tt>WIREADMIN_PRODUCER_SCOPE</tt>, or <tt>WIREADMIN_CONSUMER_SCOPE</tt> 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 <tt>Wire</tt>
-	 * 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 <tt>Wire</tt> object's scope must be <tt>null</tt>.
-	 * <p>The <tt>Wire</tt> 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
-	 * <tt>WirePermission[PRODUCE]</tt>, and for a Consumer service when
-	 * the registering bundle has <tt>WirePermission[CONSUME]</tt>.<p>
-	 * If either Consumer service or Producer service has not set a <tt>WIREADMIN_*_SCOPE</tt> property, then
-	 * the returned value must be <tt>null</tt>.<p>
-	 * If the scope is set, the <tt>Wire</tt> object must enforce the scope names when <tt>Envelope</tt> objects are
-	 * used as a parameter to update or returned from the <tt>poll</tt> method. The <tt>Wire</tt> object must then
-	 * remove all <tt>Envelope</tt> objects with a scope name that is not permitted.
-	 *
-	 * @return A list of permitted scope names or null if the Produce or Consumer service has set no scope names.
-	 */
-	public String[] getScope() {
-		return null;
-	}
-
-	/**
-	 * Return true if the given name is in this <tt>Wire</tt> object's scope.
-	 *
-	 * @param name The scope name
-	 * @return true if the name is listed in the permitted scope names
-	 */
-	public boolean hasScope(String name) {
-		return false;
-	}
-
-	protected void setProperties(Dictionary newprops) {
-		newprops.put(WireConstants.WIREADMIN_PID, pid);
-		newprops.put(WireConstants.WIREADMIN_PRODUCER_PID, producerPID);
-		newprops.put(WireConstants.WIREADMIN_CONSUMER_PID, consumerPID);
-		properties = newprops;
-	}
-
-	protected void init() {
-		consumerTracker.open();
-		producerTracker.open();
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/WireAdmin.java b/bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/WireAdmin.java
deleted file mode 100644
index b3912b6..0000000
--- a/bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/WireAdmin.java
+++ /dev/null
@@ -1,432 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2002, 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.wireadmin;
-
-import java.util.Dictionary;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Vector;
-
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.Constants;
-import org.osgi.framework.Filter;
-import org.osgi.framework.InvalidSyntaxException;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.log.LogService;
-import org.osgi.service.prefs.PreferencesService;
-import org.osgi.service.wireadmin.Consumer;
-import org.osgi.service.wireadmin.Producer;
-import org.osgi.service.wireadmin.WireAdminEvent;
-import org.osgi.service.wireadmin.WireConstants;
-import org.osgi.util.tracker.ServiceTracker;
-
-public class WireAdmin implements org.osgi.service.wireadmin.WireAdmin {
-
-	protected Vector wires;
-
-	protected BundleContext context;
-
-	protected LogTracker log;
-
-	protected WireAdminEventProducer eventProducer;
-
-	protected ServiceReference reference;
-
-	protected WireAdminStore wireAdminStore;
-
-	protected int lastPid;
-
-	private boolean alive = false;
-
-	protected ServiceTracker producerTracker;
-
-	protected ServiceTracker consumerTracker;
-
-	protected final String consumerFilter = "(" + WireConstants.WIREADMIN_CONSUMER_PID + "="; //$NON-NLS-1$ //$NON-NLS-2$
-
-	protected final String producerFilter = "(" + WireConstants.WIREADMIN_PRODUCER_PID + "="; //$NON-NLS-1$ //$NON-NLS-2$
-
-	protected PreferencesService preferencesService;
-
-	public WireAdmin(BundleContext context) {
-		this.context = context;
-		initWireAdmin();
-	}
-
-	/**
-	 * Create a new <tt>Wire</tt> object that connects a <tt>Producer</tt>
-	 * service to a <tt>Consumer</tt> service.
-	 * 
-	 * The <tt>Producer</tt> service and <tt>Consumer</tt> service do not
-	 * have to be registered when the the <tt>Wire</tt> object is created.
-	 * 
-	 * <p>
-	 * The <tt>Wire</tt> configuration data is persistently stored. All
-	 * <tt>Wire</tt> connections are reestablished when the <tt>WireAdmin</tt>
-	 * service is registered. A <tt>Wire</tt> connection can be removed by
-	 * using the {@link #deleteWire} method.
-	 * 
-	 * <p>
-	 * The <tt>Wire</tt> object's properties must have case insensitive
-	 * <tt>String</tt> objects as keys (like the Framework). However, the case
-	 * of the key must be preserved. The type of the value of the property must
-	 * be one of the following:
-	 * 
-	 * <pre>
-	 *  type        = basetype
-	 *   | vector | arrays
-	 *  basetype = String | Integer | Long
-	 *   | Float | Double | Byte
-	 *   | Short | BigInteger
-	 *   | BigDecimal | Character
-	 *   | Boolean
-	 *  primitive   = long | int | short
-	 *   | char | byte | double | float
-	 *  arrays   = primitive '[]' | basetype '[]'
-	 *  vector   = Vector of basetype
-	 * </pre>
-	 * 
-	 * <p>
-	 * The <tt>WireAdmin</tt> service must automatically add the following
-	 * <tt>Wire</tt> properties:
-	 * <ul>
-	 * <li> {@link #WIREADMIN_PID} set to the value of the wire's persistent
-	 * identity (PID). This value is generated by the <tt>WireAdmin</tt>
-	 * service when a <tt>Wire</tt> object is created. </li>
-	 * <li> {@link #WIREADMIN_PRODUCER_PID} set to the value of
-	 * <tt>Producer</tt> service's PID. </li>
-	 * <li> {@link #WIREADMIN_CONSUMER_PID} set to the value of
-	 * <tt>Consumer</tt> service's PID. </li>
-	 * </ul>
-	 * If the <tt>properties</tt> argument already contains any of these keys,
-	 * then the supplied values are replaced with the values assigned by the
-	 * <tt>WireAdmin</tt> service.
-	 * 
-	 * <p>
-	 * The Wire Admin service must generate a {@link #WIREADMIN_CREATED} event
-	 * after the new <tt>Wire</tt> object becomes available from
-	 * {@link #getWires}.
-	 * 
-	 * @param producerPID
-	 *            The &quot;service.pid&quot; of the <tt>Producer</tt> service
-	 *            to be connected to the <tt>Wire</tt>.
-	 * @param consumerPID
-	 *            The &quot;service.pid&quot; of the <tt>Consumer</tt> service
-	 *            to be connected to the <tt>Wire</tt>.
-	 * @param properties
-	 *            The <tt>Wire</tt> object's properties. This argument may be
-	 *            <tt>null</tt> if the caller does not wish to define any
-	 *            <tt>Wire</tt> object's properties.
-	 * @return The <tt>Wire</tt> object for this connection.
-	 * @throws java.lang.IllegalArgumentException
-	 *             If <tt>properties</tt> contains case variants of the same
-	 *             key name.
-	 */
-	public synchronized org.osgi.service.wireadmin.Wire createWire(
-			String producerPID, String consumerPID, Dictionary properties) {
-		checkAlive();
-		// generate PID
-		lastPid++;
-		String pid = String.valueOf(lastPid);
-		if (consumerPID == null || producerPID == null) {
-			throw new IllegalArgumentException();
-		}
-		if (properties == null) {
-			properties = new Hashtable(10);
-		} else {
-			checkProperties(properties);
-		}
-		Wire wire = createWire(pid, producerPID, consumerPID, properties);
-		try {
-			wireAdminStore.addWire(wire, properties);
-		} catch (Exception ex) {
-			log.log(LogService.LOG_ERROR,
-					WireAdminMsg.BACKING_STORE_READ_EXCEPTION, ex);
-		}
-
-		eventProducer.generateEvent(WireAdminEvent.WIRE_CREATED, wire, null);
-		return (wire);
-	}
-
-	protected Wire createWire(String pid, String producerPID,
-			String consumerPID, Dictionary properties) {
-		Wire wire = new Wire(pid, producerPID, consumerPID, properties, this);
-		wires.addElement(wire);
-		wire.init();
-		return (wire);
-	}
-
-	/**
-	 * Disconnect a <tt>Producer</tt> service from a <tt>Consumer</tt>
-	 * service.
-	 * 
-	 * <p>
-	 * The connection between a <tt>Producer</tt> service and a
-	 * <tt>Consumer</tt> service is removed. The persistently stored
-	 * configuration data for the <tt>Wire</tt> object is destroyed. The
-	 * <tt>Wire</tt> object's method {@link Wire#isValid} will return
-	 * <tt>false</tt> after it is destroyed.
-	 * 
-	 * <p>
-	 * The Wire Admin service must generate a {@link #WIREADMIN_DELETED} event
-	 * after the <tt>Wire</tt> object becomes invalid.
-	 * 
-	 * @param wire
-	 *            The <tt>Wire</tt> object which is to be disconnected.
-	 */
-	public void deleteWire(org.osgi.service.wireadmin.Wire wire) {
-		checkAlive();
-		wires.removeElement(wire);
-		((org.eclipse.equinox.wireadmin.Wire) wire).destroy();
-		try {
-			wireAdminStore.removeWire((Wire) wire);
-		} catch (Exception ex) {
-			log.log(LogService.LOG_ERROR, WireAdminMsg.BACKING_STORE_READ_EXCEPTION,
-					ex);
-		}
-		eventProducer.generateEvent(WireAdminEvent.WIRE_DELETED, wire, null);
-	}
-
-	/**
-	 * Update the properties of a <tt>Wire</tt> object.
-	 * 
-	 * The persistently stored configuration data for the <tt>Wire</tt> object
-	 * is updated with the new properties and then the <tt>Consumer</tt> and
-	 * <tt>Producer</tt> services will be called with the respective
-	 * {@link Consumer#producersConnected} and
-	 * {@link Producer#consumersConnected} methods. methods..
-	 * 
-	 * <p>
-	 * The Wire Admin service must generate a {@link #WIREADMIN_UPDATED} event
-	 * after the new <tt>properties</tt> become available from the
-	 * <tt>Wire</tt> object.
-	 * 
-	 * @param wire
-	 *            The <tt>Wire</tt> object which is to be updated.
-	 * @param properties
-	 *            The new <tt>Wire</tt> object's properties or <tt>null</tt>
-	 *            if no properties are required.
-	 */
-
-	public void updateWire(org.osgi.service.wireadmin.Wire wire,
-			Dictionary properties) {
-		checkAlive();
-		checkProperties(properties);
-		if (!wire.isValid()) {
-			return;
-		}
-		((org.eclipse.equinox.wireadmin.Wire) wire).setProperties(properties);
-		try {
-			wireAdminStore.updateWire((Wire) wire, properties);
-		} catch (Exception ex) {
-			log.log(LogService.LOG_ERROR, WireAdminMsg.BACKING_STORE_READ_EXCEPTION,
-					ex);
-		}
-		try {
-			Consumer consumer = ((org.eclipse.equinox.wireadmin.Wire) wire).consumer;
-			Wire[] wireArray = new Wire[wires.size()];
-			wires.copyInto(wireArray);
-			if (consumer != null) {
-				consumer.producersConnected(wireArray);
-			}
-			Producer producer = ((org.eclipse.equinox.wireadmin.Wire) wire).producer;
-			if (producer != null) {
-				producer.consumersConnected(wireArray);
-			}
-			eventProducer
-					.generateEvent(WireAdminEvent.WIRE_UPDATED, wire, null);
-		} catch (Exception ex) {
-			// ???
-			log.log(LogService.LOG_ERROR, WireAdminMsg.BACKING_STORE_READ_EXCEPTION,
-					ex);
-		}
-
-	}
-
-	/**
-	 * Return the <tt>Wire</tt> objects that match the given <tt>filter</tt>.
-	 * 
-	 * <p>
-	 * The list of available <tt>Wire</tt> objects is matched against the
-	 * specified <tt>filter</tt>. <tt>Wire</tt> objects which match the
-	 * <tt>filter</tt> are returned. These <tt>Wire</tt> objects are not
-	 * necessarily connected. The Wire Admin service should not return invalid
-	 * <tt>Wire</tt> objects, but it is possible that a <tt>Wire</tt> object
-	 * is deleted after it was placed in the list.
-	 * 
-	 * <p>
-	 * The filter matches against the <tt>Wire</tt> object's properties
-	 * including {@link Constants#WIREADMIN_PRODUCER_PID},
-	 * {@link Constants#WIREADMIN_CONSUMER_PID} and
-	 * {@link Constants#WIREADMIN_PID}.
-	 * 
-	 * @param filter
-	 *            Filter string to select <tt>Wire</tt> objects or
-	 *            <tt>null</tt> to select all <tt>Wire</tt> objects.
-	 * @return An array of <tt>Wire</tt> objects which match the
-	 *         <tt>filter</tt> or <tt>null</tt> if no <tt>Wire</tt>
-	 *         objects match the <tt>filter</tt>.
-	 * @throws org.osgi.framework.InvalidSyntaxException
-	 *             If the specified <tt>filter</tt> has an invalid syntax.
-	 * @see "org.osgi.framework.Filter"
-	 */
-	public org.osgi.service.wireadmin.Wire[] getWires(String filterString)
-			throws InvalidSyntaxException {
-		checkAlive();
-		return getWires(filterString, false);
-
-	}
-
-	protected Wire[] getConnectedWires(String filterString)
-			throws InvalidSyntaxException {
-		return getWires(filterString, true);
-	}
-
-	protected Wire[] getWires(String filterString, boolean connected)
-			throws InvalidSyntaxException {
-		Vector returnedWires;
-		synchronized (this) {
-			if (filterString == null) {
-				returnedWires = wires;
-			}
-
-			else {
-				Filter filter = context.createFilter(filterString); // We do
-																	// this
-																	// first so
-																	// an
-				// InvalidSyntaxException will be
-				// thrown even if there are no wires
-				// present.
-				returnedWires = new Vector();
-				for (int i = 0; i < wires.size(); i++) {
-					Wire wire = (Wire) wires.elementAt(i);
-					if (filter.match(wire.properties)) {
-						if (!connected || wire.isConnected()) {
-							returnedWires.addElement(wire);
-						}
-					}
-				}
-			}
-			int size = returnedWires.size();
-			if (size == 0) {
-				return (null);
-			}
-			Wire[] wireArray = new Wire[size];
-			returnedWires.copyInto(wireArray);
-			return (wireArray);
-		}
-	}
-
-	protected void setServiceReference(ServiceReference reference) {
-		if (this.reference == null) {
-			this.reference = reference;
-
-			eventProducer = new WireAdminEventProducer(reference, context, log,
-					this);
-		}
-	}
-
-	protected void destroy() {
-		alive = false;
-		wires = null;
-		eventProducer.close();
-		producerTracker.close();
-		consumerTracker.close();
-	}
-
-	protected void checkAlive() {
-		if (!alive) {
-			throw (new IllegalStateException(
-					WireAdminMsg.WIREADMIN_UNREGISTERED_EXCEPTION));
-		}
-
-	}
-
-	protected void notifyProducer(Producer producer, String pid) {
-		org.osgi.service.wireadmin.Wire[] wireArray = null;
-		try {
-			wireArray = getConnectedWires(producerFilter + pid + ")"); //$NON-NLS-1$
-		} catch (InvalidSyntaxException ex) {
-			ex.printStackTrace();
-		}
-
-		try {
-			producer.consumersConnected(wireArray);
-		} catch (Exception ex) {
-			eventProducer.generateEvent(WireAdminEvent.PRODUCER_EXCEPTION,
-					null, ex);
-		}
-
-	}
-
-	protected void notifyConsumer(Consumer consumer, String pid) {
-		org.osgi.service.wireadmin.Wire[] wireArray = null;
-		try {
-			wireArray = getConnectedWires(consumerFilter + pid + ")"); //$NON-NLS-1$
-		} catch (InvalidSyntaxException ex) {
-			ex.printStackTrace();
-		}
-
-		try {
-			consumer.producersConnected(wireArray);
-		} catch (Exception ex) {
-			eventProducer.generateEvent(WireAdminEvent.CONSUMER_EXCEPTION,
-					null, ex);
-		}
-
-	}
-
-	private void checkProperties(Dictionary properties) {
-		Enumeration e = properties.keys();
-		Vector keys = new Vector(properties.size());
-		while (e.hasMoreElements()) {
-			String key = null;
-			try {
-				key = (String) e.nextElement();
-			} catch (ClassCastException ex) {
-				throw new IllegalArgumentException(
-						WireAdminMsg.WIREADMIN_PROP_KEY_MUST_BE_STRING);
-			}
-			key = key.toUpperCase();
-			if (keys.contains(key)) {
-				throw new IllegalArgumentException(
-						WireAdminMsg.WIREADMIN_KEYS_CASE_INSENSITIVE_MATCH);
-			}
-			keys.add(key);
-		}
-	}
-
-	private void initWireAdmin() {
-		wires = new Vector(10);
-
-		log = new LogTracker(context, System.out);
-		wireAdminStore = new WireAdminStore(context, this, log,
-				preferencesService);
-
-		try {
-			wireAdminStore.init(preferencesService);
-		} catch (Exception ex) {
-			log.log(LogService.LOG_ERROR, WireAdminMsg.BACKING_STORE_READ_EXCEPTION,
-					ex);
-		}
-		consumerTracker = new ServiceTracker(context, Consumer.class.getName(),
-				new ConsumersCustomizer(context, this));
-		consumerTracker.open();
-
-		producerTracker = new ServiceTracker(context, Producer.class.getName(),
-				new ProducersCustomizer(context, this));
-		producerTracker.open();
-
-		alive = true;
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/WireAdminEventProducer.java b/bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/WireAdminEventProducer.java
deleted file mode 100644
index e1f0563..0000000
--- a/bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/WireAdminEventProducer.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2002, 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.wireadmin;
-
-import java.util.Vector;
-import org.eclipse.osgi.framework.eventmgr.*;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.log.LogService;
-import org.osgi.service.wireadmin.*;
-import org.osgi.service.wireadmin.Wire;
-import org.osgi.util.tracker.ServiceTracker;
-
-/*
- *  WireAdminEventProducer is responsible for sending out WireAdminEvents
- *  to all WireAdminListeners.
- */
-
-public class WireAdminEventProducer extends ServiceTracker implements EventDispatcher {
-
-	protected ServiceReference ref;
-	static protected final String wireAdminListenerClass = "org.osgi.service.wireadmin.WireAdminListener"; //$NON-NLS-1$
-	protected Vector eventQueue;
-	protected LogService log;
-	protected BundleContext context;
-
-	protected WireAdmin wireAdmin;
-
-	/** List of WireAdminListeners */
-	protected EventListeners listeners;
-	/** EventManager for event delivery. */
-	protected EventManager eventManager;
-
-	protected WireAdminEventProducer(ServiceReference ref, BundleContext context, LogService log, WireAdmin wireAdmin) {
-		super(context, wireAdminListenerClass, null);
-		this.ref = ref;
-		this.context = context;
-		this.log = log;
-		this.wireAdmin = wireAdmin;
-		eventManager = new EventManager("WireAdmin Event Dispatcher"); //$NON-NLS-1$
-		listeners = new EventListeners();
-
-		open();
-
-	}
-
-	public void close() {
-		super.close();
-		listeners.removeAllListeners();
-		eventManager.close();
-		wireAdmin = null;
-	}
-
-	protected void generateEvent(int type, Wire wire, Throwable t) {
-		if (wireAdmin != null) {
-			WireAdminEvent event = new WireAdminEvent(wireAdmin.reference, type, wire, t);
-
-			/* queue to hold set of listeners */
-			ListenerQueue queue = new ListenerQueue(eventManager);
-
-			/* add set of WireAdminListeners to queue */
-			queue.queueListeners(listeners, this);
-
-			/* dispatch event to set of listeners */
-			queue.dispatchEventAsynchronous(0, event);
-		}
-	}
-
-	/**
-	 * A service is being added to the <tt>ServiceTracker</tt> object.
-	 *
-	 * <p>This method is called before a service which matched
-	 * the search parameters of the <tt>ServiceTracker</tt> object is
-	 * added to it. This method should return the
-	 * service object to be tracked for this <tt>ServiceReference</tt> object.
-	 * The returned service object is stored in the <tt>ServiceTracker</tt> object
-	 * and is available from the <tt>getService</tt> and <tt>getServices</tt>
-	 * methods.
-	 *
-	 * @param reference Reference to service being added to the <tt>ServiceTracker</tt> object.
-	 * @return The service object to be tracked for the
-	 * <tt>ServiceReference</tt> object or <tt>null</tt> if the <tt>ServiceReference</tt> object should not
-	 * be tracked.
-	 */
-	public Object addingService(ServiceReference reference) {
-
-		Object service = super.addingService(reference);
-		setMask(reference, service);
-
-		return (service);
-	}
-
-	/**
-	 * A service tracked by the <tt>ServiceTracker</tt> object has been removed.
-	 *
-	 * <p>This method is called after a service is no longer being tracked
-	 * by the <tt>ServiceTracker</tt> object.
-	 *
-	 * @param reference Reference to service that has been removed.
-	 * @param service The service object for the removed service.
-	 */
-	public void removedService(ServiceReference reference, Object service) {
-		listeners.removeListener(service);
-
-		super.removedService(reference, service);
-	}
-
-	/**
-	 * This method is the call back that is called once for each listener.
-	 * This method must cast the EventListener object to the appropriate listener
-	 * class for the event type and call the appropriate listener method.
-	 *
-	 * @param listener This listener must be cast to the appropriate listener
-	 * class for the events created by this source and the appropriate listener method
-	 * must then be called.
-	 * @param listenerObject This is the optional object that was passed to
-	 * ListenerList.addListener when the listener was added to the ListenerList.
-	 * @param eventAction This value was passed to the EventQueue object via one of its
-	 * 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 EventQueue 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 maskObject, int eventAction, Object eventObject) {
-		ServiceReference wireAdminRef = wireAdmin.reference;
-
-		WireAdminListener wal = (WireAdminListener) listener;
-
-		try {
-			WireAdminEvent event = (WireAdminEvent) eventObject;
-			{
-				int mask = ((Integer) maskObject).intValue();
-				int type = event.getType();
-				if ((type & mask) != type) {
-					return;
-				}
-			}
-			wal.wireAdminEvent(event);
-
-		} catch (Throwable t) {
-			log.log(wireAdminRef, LogService.LOG_WARNING, WireAdminMsg.WIREADMIN_EVENT_DISPATCH_ERROR, t);
-		}
-
-	}
-
-	/**
-	 * @see org.osgi.util.tracker.ServiceTrackerCustomizer#modifiedService(ServiceReference, Object)
-	 */
-	public void modifiedService(ServiceReference reference, Object service) {
-		listeners.removeListener(service);
-		setMask(reference, service);
-		super.modifiedService(reference, service);
-	}
-
-	private void setMask(ServiceReference reference, Object service) {
-		Integer mask = null;
-		try {
-			mask = (Integer) reference.getProperty(WireConstants.WIREADMIN_EVENTS);
-		} catch (ClassCastException ex) {
-			return; //mask was not of type Integer	
-		}
-		listeners.addListener(service, mask);
-
-	}
-
-}
diff --git a/bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/WireAdminMsg.java b/bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/WireAdminMsg.java
deleted file mode 100644
index 6089830..0000000
--- a/bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/WireAdminMsg.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 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
- *******************************************************************************/
-package org.eclipse.equinox.wireadmin;
-
-import org.eclipse.osgi.util.NLS;
-
-public class WireAdminMsg extends NLS {
-	private static final String BUNDLE_NAME = "org.eclipse.equinox.wireadmin.ExternalMessages"; //$NON-NLS-1$
-
-	public static String BACKING_STORE_READ_EXCEPTION;
-	public static String WIREADMIN_UNREGISTERED_EXCEPTION;
-	public static String WIREADMIN_EVENT_DISPATCH_ERROR;
-	public static String WIREADMIN_PROP_KEY_MUST_BE_STRING;
-	public static String WIREADMIN_KEYS_CASE_INSENSITIVE_MATCH;
-
-	static {
-		// initialize resource bundles
-		NLS.initializeMessages(BUNDLE_NAME, WireAdminMsg.class);
-	}
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/WireAdminStore.java b/bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/WireAdminStore.java
deleted file mode 100644
index 9491315..0000000
--- a/bundles/org.eclipse.equinox.wireadmin/src/org/eclipse/equinox/wireadmin/WireAdminStore.java
+++ /dev/null
@@ -1,242 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2002, 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.wireadmin;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.security.*;
-import java.util.*;
-import org.osgi.framework.BundleContext;
-import org.osgi.service.log.LogService;
-import org.osgi.service.prefs.*;
-import org.osgi.service.wireadmin.WireConstants;
-
-/*
- *  WireAdminStore is responsible for managing the persistence data of the wireadmin
- *  service.  It uses the PersistenceNode service as its underlying storage.
- */
-
-public class WireAdminStore {
-
-	static protected final String persistenceUserName = "WireAdmin"; //$NON-NLS-1$
-	static protected final String lastPidString = "lastPid"; //$NON-NLS-1$
-	static protected final String defaultLastPid = "1"; //$NON-NLS-1$
-
-	protected BundleContext context;
-	protected WireAdmin wireadmin;
-	protected LogService log;
-	protected Preferences rootNode;
-	protected PreferencesService preferencesService;
-
-	protected WireAdminStore(BundleContext context, WireAdmin wireadmin, LogService log, PreferencesService preferencesService) {
-		this.context = context;
-		this.wireadmin = wireadmin;
-		this.log = log;
-	}
-
-	protected void init(PreferencesService preferencesService_) throws BackingStoreException {
-		this.preferencesService = preferencesService_;
-	}
-
-	protected void addWire(final Wire wire, final Dictionary properties) throws BackingStoreException {
-		try {
-			AccessController.doPrivileged(new PrivilegedExceptionAction() {
-				public Object run() throws Exception {
-					String pid = wire.getPid();
-					rootNode.put(lastPidString, pid);
-					Preferences node = rootNode.node(pid);
-					storeProperties(properties, node);
-
-					/* Enumeration enum = properties.keys();
-					 
-					 while(enum.hasMoreElements())
-					 {
-					 String key = (String)enum.nextElement();
-					 String value = (String)properties.get(key);
-					 node.put(key,value);
-					 }
-					 */
-					rootNode.flush();
-					return (null);
-				}
-			});
-		} catch (PrivilegedActionException ex) {
-			//log.log(log.LOG_ERROR,Text.BACKING_STORE_WRITE_EXCEPTION,ex);	
-			throw ((BackingStoreException) ex.getException());
-		}
-	}
-
-	protected void removeWire(final Wire wire) throws BackingStoreException {
-		try {
-			AccessController.doPrivileged(new PrivilegedExceptionAction() {
-				public Object run() throws Exception {
-					Preferences node = rootNode.node(wire.getPid());
-					node.removeNode();
-					rootNode.node("").flush(); //$NON-NLS-1$
-					return (null);
-				}
-			});
-		} catch (PrivilegedActionException ex) {
-			//log.log(log.LOG_ERROR,Text.BACKING_STORE_WRITE_EXCEPTION,ex);		
-			throw ((BackingStoreException) ex.getException());
-		}
-	}
-
-	protected void loadWires() throws BackingStoreException {
-		synchronized (this) {
-			wireadmin.lastPid = Integer.parseInt(rootNode.get(lastPidString, defaultLastPid));
-			String[] children = rootNode.node("").childrenNames(); //$NON-NLS-1$
-			for (int i = 0; i < children.length; i++) {
-				loadWire(rootNode.node(children[i]));
-			}
-		}
-	}
-
-	protected void loadWire(Preferences node) throws BackingStoreException {
-		String pid = node.name();
-		Hashtable properties = loadProperties(node);
-		/*  String[] keys = node.keys();
-		 for(int i=0;i<keys.length;i++)
-		 {
-		 String value = (String)node.get(keys[i],null);
-		 properties.put(keys[i],value);
-		 }  */
-		String consumerPid = (String) properties.get(WireConstants.WIREADMIN_CONSUMER_PID);
-		String producerPid = (String) properties.get(WireConstants.WIREADMIN_PRODUCER_PID);
-		wireadmin.createWire(pid, producerPid, consumerPid, properties);
-	}
-
-	protected void updateWire(final Wire wire, final Dictionary properties) throws BackingStoreException {
-		try {
-			AccessController.doPrivileged(new PrivilegedExceptionAction() {
-				public Object run() throws Exception {
-					String pid = wire.getPid();
-					Preferences node = rootNode.node(pid);
-					node.clear();
-					storeProperties(properties, node);
-
-					/*Enumeration enum = properties.keys();
-					 while(enum.hasMoreElements())
-					 {
-					 String key = (String)enum.nextElement();
-					 String value = (String)properties.get(key);
-					 node.put(key,value);
-					 }
-					 */
-					node.flush();
-					return (null);
-				}
-			});
-		} catch (PrivilegedActionException ex) {
-			//log.log(log.LOG_ERROR,Text.BACKING_STORE_WRITE_EXCEPTION,ex);	
-			throw ((BackingStoreException) ex.getException());
-		}
-	}
-
-	protected void destroy() {
-		try {
-			rootNode.flush();
-		} catch (BackingStoreException ex) {
-			//log.log(log.LOG_ERROR,Text.BACKING_STORE_WRITE_EXCEPTION,ex);	
-		}
-	}
-
-	protected void storeProperties(Dictionary properties, Preferences node) throws BackingStoreException {
-		Enumeration e = properties.keys();
-		while (e.hasMoreElements()) {
-			String key = (String) e.nextElement();
-			Object value = properties.get(key);
-			if (value instanceof Vector) {
-				storeVector(node.node("Vector/" + key), (Vector) value); //$NON-NLS-1$
-			} else {
-				Preferences childNode = node.node("basetype/" + value.getClass().getName()); //$NON-NLS-1$
-				childNode.put(key, String.valueOf(value));
-			}
-
-			//node.put(key,value);
-		}
-		node.flush();
-	}
-
-	private void storeVector(Preferences node, Vector vector) {
-		Enumeration e = vector.elements();
-		while (e.hasMoreElements()) {
-			Object value = e.nextElement();
-			node.put(value.getClass().getName(), String.valueOf(value));
-		}
-	}
-
-	private Hashtable loadProperties(Preferences node) throws BackingStoreException {
-		Hashtable props = new Hashtable(15);
-		if (node.nodeExists("Vector")) { //$NON-NLS-1$
-			loadVectors(node.node("Vector"), props); //$NON-NLS-1$
-		}
-		if (node.nodeExists("basetype")) { //$NON-NLS-1$
-			loadBaseTypes(node.node("basetype"), props); //$NON-NLS-1$
-		}
-		return props;
-	}
-
-	private void loadVectors(Preferences node, Hashtable props) throws BackingStoreException {
-		String[] children = node.childrenNames();
-		for (int j = 0; j < children.length; j++) {
-			Preferences vectorNode = node.node(children[j]);
-			String keys[] = vectorNode.keys();
-			Vector vector = new Vector(keys.length);
-			for (int i = 0; i < keys.length; i++) {
-				String value = node.get(keys[i], null);
-				vector.add(getValue(keys[i], value));
-
-			}
-			props.put(children[j], vector);
-		}
-	}
-
-	private void loadBaseTypes(Preferences node, Hashtable props) throws BackingStoreException {
-		String[] children = node.childrenNames();
-		for (int j = 0; j < children.length; j++) {
-			Preferences childNode = node.node(children[j]);
-			String keys[] = childNode.keys();
-			for (int i = 0; i < keys.length; i++) {
-				props.put(keys[i], getValue(children[j], childNode.get(keys[i], null)));
-			}
-		}
-	}
-
-	private Object getValue(String className, String value) {
-		//Float does not have a zero-arguement constructor
-		if (className.equals(Float.class.getName())) {
-			return Float.valueOf(value);
-		} else if (className.equals(Boolean.class.getName())) {
-			return Boolean.valueOf(value);
-		}
-		try {
-			Class clazz = Class.forName(className);
-			Object object = clazz.newInstance();
-			Method method = clazz.getDeclaredMethod("valueOf", new Class[] {Object.class}); //$NON-NLS-1$
-			return (method.invoke(object, new Object[] {value}));
-
-		} catch (ClassNotFoundException ex) {
-			ex.printStackTrace();
-		} catch (IllegalAccessException ex1) {
-			ex1.printStackTrace();
-		} catch (InstantiationException ex2) {
-
-			ex2.printStackTrace();
-		} catch (NoSuchMethodException ex3) {
-			ex3.printStackTrace();
-		} catch (InvocationTargetException ex4) {
-			ex4.printStackTrace();
-		}
-		return null;
-	}
-
-}