Add latest versions of R4.2 interfaces in preparation for the 1.6.0 release.


git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@760202 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/framework/src/main/java/org/apache/felix/framework/util/ListenerHookInfoImpl.java b/framework/src/main/java/org/apache/felix/framework/util/ListenerHookInfoImpl.java
index db36a8f..5f034cc 100644
--- a/framework/src/main/java/org/apache/felix/framework/util/ListenerHookInfoImpl.java
+++ b/framework/src/main/java/org/apache/felix/framework/util/ListenerHookInfoImpl.java
@@ -41,4 +41,9 @@
     {
         return m_filter;
     }
+
+    public boolean isRemoved()
+    {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
 }
\ No newline at end of file
diff --git a/framework/src/main/java/org/osgi/framework/Constants.java b/framework/src/main/java/org/osgi/framework/Constants.java
index d8dd102..16a10d8 100644
--- a/framework/src/main/java/org/osgi/framework/Constants.java
+++ b/framework/src/main/java/org/osgi/framework/Constants.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2000, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2000, 2009). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -22,10 +22,10 @@
  * 
  * <p>
  * The values associated with these keys are of type
- * <code>java.lang.String</code>, unless otherwise indicated.
+ * <code>String</code>, unless otherwise indicated.
  * 
  * @since 1.1
- * @version $Revision: 5684 $
+ * @version $Revision: 6552 $
  */
 
 public interface Constants {
@@ -44,8 +44,7 @@
 	public static final String	SYSTEM_BUNDLE_SYMBOLICNAME				= "system.bundle";
 
 	/**
-	 * Manifest header (named &quot;Bundle-Category&quot;) identifying the
-	 * bundle's category.
+	 * Manifest header identifying the bundle's category.
 	 * <p>
 	 * The attribute value may be retrieved from the <code>Dictionary</code>
 	 * object returned by the <code>Bundle.getHeaders</code> method.
@@ -53,9 +52,8 @@
 	public static final String	BUNDLE_CATEGORY							= "Bundle-Category";
 
 	/**
-	 * Manifest header (named &quot;Bundle-ClassPath&quot;) identifying a list
-	 * of directories and embedded JAR files, which are bundle resources used to
-	 * extend the bundle's classpath.
+	 * Manifest header identifying a list of directories and embedded JAR files,
+	 * which are bundle resources used to extend the bundle's classpath.
 	 * 
 	 * <p>
 	 * The attribute value may be retrieved from the <code>Dictionary</code>
@@ -64,8 +62,7 @@
 	public static final String	BUNDLE_CLASSPATH						= "Bundle-ClassPath";
 
 	/**
-	 * Manifest header (named &quot;Bundle-Copyright&quot;) identifying the
-	 * bundle's copyright information.
+	 * Manifest header identifying the bundle's copyright information.
 	 * <p>
 	 * The attribute value may be retrieved from the <code>Dictionary</code>
 	 * object returned by the <code>Bundle.getHeaders</code> method.
@@ -73,8 +70,8 @@
 	public static final String	BUNDLE_COPYRIGHT						= "Bundle-Copyright";
 
 	/**
-	 * Manifest header (named &quot;Bundle-Description&quot;) containing a brief
-	 * description of the bundle's functionality.
+	 * Manifest header containing a brief description of the bundle's
+	 * functionality.
 	 * <p>
 	 * The attribute value may be retrieved from the <code>Dictionary</code>
 	 * object returned by the <code>Bundle.getHeaders</code> method.
@@ -82,8 +79,7 @@
 	public static final String	BUNDLE_DESCRIPTION						= "Bundle-Description";
 
 	/**
-	 * Manifest header (named &quot;Bundle-Name&quot;) identifying the bundle's
-	 * name.
+	 * Manifest header identifying the bundle's name.
 	 * <p>
 	 * The attribute value may be retrieved from the <code>Dictionary</code>
 	 * object returned by the <code>Bundle.getHeaders</code> method.
@@ -91,9 +87,9 @@
 	public static final String	BUNDLE_NAME								= "Bundle-Name";
 
 	/**
-	 * Manifest header (named &quot;Bundle-NativeCode&quot;) identifying a
-	 * number of hardware environments and the native language code libraries
-	 * that the bundle is carrying for each of these environments.
+	 * Manifest header identifying a number of hardware environments and the
+	 * native language code libraries that the bundle is carrying for each of
+	 * these environments.
 	 * 
 	 * <p>
 	 * The attribute value may be retrieved from the <code>Dictionary</code>
@@ -102,8 +98,8 @@
 	public static final String	BUNDLE_NATIVECODE						= "Bundle-NativeCode";
 
 	/**
-	 * Manifest header (named &quot;Export-Package&quot;) identifying the
-	 * packages that the bundle offers to the Framework for export.
+	 * Manifest header identifying the packages that the bundle offers to the
+	 * Framework for export.
 	 * 
 	 * <p>
 	 * The attribute value may be retrieved from the <code>Dictionary</code>
@@ -112,9 +108,9 @@
 	public static final String	EXPORT_PACKAGE							= "Export-Package";
 
 	/**
-	 * Manifest header (named &quot;Export-Service&quot;) identifying the fully
-	 * qualified class names of the services that the bundle may register (used
-	 * for informational purposes only).
+	 * Manifest header identifying the fully qualified class names of the
+	 * services that the bundle may register (used for informational purposes
+	 * only).
 	 * 
 	 * <p>
 	 * The attribute value may be retrieved from the <code>Dictionary</code>
@@ -125,8 +121,7 @@
 	public static final String	EXPORT_SERVICE							= "Export-Service";
 
 	/**
-	 * Manifest header (named &quot;Import-Package&quot;) identifying the
-	 * packages on which the bundle depends.
+	 * Manifest header identifying the packages on which the bundle depends.
 	 * 
 	 * <p>
 	 * The attribute value may be retrieved from the <code>Dictionary</code>
@@ -135,8 +130,8 @@
 	public static final String	IMPORT_PACKAGE							= "Import-Package";
 
 	/**
-	 * Manifest header (named &quot;DynamicImport-Package&quot;) identifying the
-	 * packages that the bundle may dynamically import during execution.
+	 * Manifest header identifying the packages that the bundle may dynamically
+	 * import during execution.
 	 * 
 	 * <p>
 	 * The attribute value may be retrieved from the <code>Dictionary</code>
@@ -147,9 +142,8 @@
 	public static final String	DYNAMICIMPORT_PACKAGE					= "DynamicImport-Package";
 
 	/**
-	 * Manifest header (named &quot;Import-Service&quot;) identifying the fully
-	 * qualified class names of the services that the bundle requires (used for
-	 * informational purposes only).
+	 * Manifest header identifying the fully qualified class names of the
+	 * services that the bundle requires (used for informational purposes only).
 	 * 
 	 * <p>
 	 * The attribute value may be retrieved from the <code>Dictionary</code>
@@ -160,8 +154,7 @@
 	public static final String	IMPORT_SERVICE							= "Import-Service";
 
 	/**
-	 * Manifest header (named &quot;Bundle-Vendor&quot;) identifying the
-	 * bundle's vendor.
+	 * Manifest header identifying the bundle's vendor.
 	 * 
 	 * <p>
 	 * The attribute value may be retrieved from the <code>Dictionary</code>
@@ -170,8 +163,7 @@
 	public static final String	BUNDLE_VENDOR							= "Bundle-Vendor";
 
 	/**
-	 * Manifest header (named &quot;Bundle-Version&quot;) identifying the
-	 * bundle's version.
+	 * Manifest header identifying the bundle's version.
 	 * 
 	 * <p>
 	 * The attribute value may be retrieved from the <code>Dictionary</code>
@@ -180,9 +172,8 @@
 	public static final String	BUNDLE_VERSION							= "Bundle-Version";
 
 	/**
-	 * Manifest header (named &quot;Bundle-DocURL&quot;) identifying the
-	 * bundle's documentation URL, from which further information about the
-	 * bundle may be obtained.
+	 * Manifest header identifying the bundle's documentation URL, from which
+	 * further information about the bundle may be obtained.
 	 * 
 	 * <p>
 	 * The attribute value may be retrieved from the <code>Dictionary</code>
@@ -191,9 +182,8 @@
 	public static final String	BUNDLE_DOCURL							= "Bundle-DocURL";
 
 	/**
-	 * Manifest header (named &quot;Bundle-ContactAddress&quot;) identifying the
-	 * contact address where problems with the bundle may be reported; for
-	 * example, an email address.
+	 * Manifest header identifying the contact address where problems with the
+	 * bundle may be reported; for example, an email address.
 	 * 
 	 * <p>
 	 * The attribute value may be retrieved from the <code>Dictionary</code>
@@ -202,8 +192,7 @@
 	public static final String	BUNDLE_CONTACTADDRESS					= "Bundle-ContactAddress";
 
 	/**
-	 * Manifest header attribute (named &quot;Bundle-Activator&quot;)
-	 * identifying the bundle's activator class.
+	 * Manifest header attribute identifying the bundle's activator class.
 	 * 
 	 * <p>
 	 * If present, this header specifies the name of the bundle resource class
@@ -218,9 +207,8 @@
 	public static final String	BUNDLE_ACTIVATOR						= "Bundle-Activator";
 
 	/**
-	 * Manifest header (named &quot;Bundle-UpdateLocation&quot;) identifying the
-	 * location from which a new bundle version is obtained during a bundle
-	 * update operation.
+	 * Manifest header identifying the location from which a new bundle version
+	 * is obtained during a bundle update operation.
 	 * 
 	 * <p>
 	 * The attribute value may be retrieved from the <code>Dictionary</code>
@@ -229,9 +217,8 @@
 	public static final String	BUNDLE_UPDATELOCATION					= "Bundle-UpdateLocation";
 
 	/**
-	 * Manifest header attribute (named &quot;specification-version&quot;)
-	 * identifying the version of a package specified in the Export-Package or
-	 * Import-Package manifest header.
+	 * Manifest header attribute identifying the version of a package specified
+	 * in the Export-Package or Import-Package manifest header.
 	 * 
 	 * @deprecated As of 1.3. This has been replaced by
 	 *             {@link #VERSION_ATTRIBUTE}.
@@ -239,9 +226,8 @@
 	public static final String	PACKAGE_SPECIFICATION_VERSION			= "specification-version";
 
 	/**
-	 * Manifest header attribute (named &quot;processor&quot;) identifying the
-	 * processor required to run native bundle code specified in the
-	 * Bundle-NativeCode manifest header).
+	 * Manifest header attribute identifying the processor required to run
+	 * native bundle code specified in the Bundle-NativeCode manifest header).
 	 * 
 	 * <p>
 	 * The attribute value is encoded in the Bundle-NativeCode manifest header
@@ -250,13 +236,15 @@
 	 * <pre>
 	 *     Bundle-NativeCode: http.so ; processor=x86 ...
 	 * </pre>
+	 * 
+	 * @see #BUNDLE_NATIVECODE
 	 */
 	public static final String	BUNDLE_NATIVECODE_PROCESSOR				= "processor";
 
 	/**
-	 * Manifest header attribute (named &quot;osname&quot;) identifying the
-	 * operating system required to run native bundle code specified in the
-	 * Bundle-NativeCode manifest header).
+	 * Manifest header attribute identifying the operating system required to
+	 * run native bundle code specified in the Bundle-NativeCode manifest
+	 * header).
 	 * <p>
 	 * The attribute value is encoded in the Bundle-NativeCode manifest header
 	 * like:
@@ -264,13 +252,15 @@
 	 * <pre>
 	 *     Bundle-NativeCode: http.so ; osname=Linux ...
 	 * </pre>
+	 * 
+	 * @see #BUNDLE_NATIVECODE
 	 */
 	public static final String	BUNDLE_NATIVECODE_OSNAME				= "osname";
 
 	/**
-	 * Manifest header attribute (named &quot;osversion&quot;) identifying the
-	 * operating system version required to run native bundle code specified in
-	 * the Bundle-NativeCode manifest header).
+	 * Manifest header attribute identifying the operating system version
+	 * required to run native bundle code specified in the Bundle-NativeCode
+	 * manifest header).
 	 * <p>
 	 * The attribute value is encoded in the Bundle-NativeCode manifest header
 	 * like:
@@ -278,13 +268,15 @@
 	 * <pre>
 	 *     Bundle-NativeCode: http.so ; osversion=&quot;2.34&quot; ...
 	 * </pre>
+	 * 
+	 * @see #BUNDLE_NATIVECODE
 	 */
 	public static final String	BUNDLE_NATIVECODE_OSVERSION				= "osversion";
 
 	/**
-	 * Manifest header attribute (named &quot;language&quot;) identifying the
-	 * language in which the native bundle code is written specified in the
-	 * Bundle-NativeCode manifest header. See ISO 639 for possible values.
+	 * Manifest header attribute identifying the language in which the native
+	 * bundle code is written specified in the Bundle-NativeCode manifest
+	 * header. See ISO 639 for possible values.
 	 * <p>
 	 * The attribute value is encoded in the Bundle-NativeCode manifest header
 	 * like:
@@ -292,15 +284,16 @@
 	 * <pre>
 	 *     Bundle-NativeCode: http.so ; language=nl_be ...
 	 * </pre>
+	 * 
+	 * @see #BUNDLE_NATIVECODE
 	 */
 	public static final String	BUNDLE_NATIVECODE_LANGUAGE				= "language";
 
 	/**
-	 * Manifest header (named &quot;Bundle-RequiredExecutionEnvironment&quot;)
-	 * identifying the required execution environment for the bundle. The
-	 * service platform may run this bundle if any of the execution environments
-	 * named in this header matches one of the execution environments it
-	 * implements.
+	 * Manifest header identifying the required execution environment for the
+	 * bundle. The service platform may run this bundle if any of the execution
+	 * environments named in this header matches one of the execution
+	 * environments it implements.
 	 * 
 	 * <p>
 	 * The attribute value may be retrieved from the <code>Dictionary</code>
@@ -310,306 +303,10 @@
 	 */
 	public static final String	BUNDLE_REQUIREDEXECUTIONENVIRONMENT		= "Bundle-RequiredExecutionEnvironment";
 
-	/*
-	 * Framework environment properties.
-	 */
-
 	/**
-	 * Framework environment property (named
-	 * &quot;org.osgi.framework.version&quot;) identifying the Framework
-	 * version.
+	 * Manifest header identifying the bundle's symbolic name.
 	 * 
 	 * <p>
-	 * The value of this property may be retrieved by calling the
-	 * <code>BundleContext.getProperty</code> method.
-	 */
-	public static final String	FRAMEWORK_VERSION						= "org.osgi.framework.version";
-
-	/**
-	 * Framework environment property (named
-	 * &quot;org.osgi.framework.vendor&quot;) identifying the Framework
-	 * implementation vendor.
-	 * 
-	 * <p>
-	 * The value of this property may be retrieved by calling the
-	 * <code>BundleContext.getProperty</code> method.
-	 */
-	public static final String	FRAMEWORK_VENDOR						= "org.osgi.framework.vendor";
-
-	/**
-	 * Framework environment property (named
-	 * &quot;org.osgi.framework.language&quot;) identifying the Framework
-	 * implementation language (see ISO 639 for possible values).
-	 * 
-	 * <p>
-	 * The value of this property may be retrieved by calling the
-	 * <code>BundleContext.getProperty</code> method.
-	 */
-	public static final String	FRAMEWORK_LANGUAGE						= "org.osgi.framework.language";
-
-	/**
-	 * Framework environment property (named
-	 * &quot;org.osgi.framework.os.name&quot;) identifying the Framework
-	 * host-computer's operating system.
-	 * 
-	 * <p>
-	 * The value of this property may be retrieved by calling the
-	 * <code>BundleContext.getProperty</code> method.
-	 */
-	public static final String	FRAMEWORK_OS_NAME						= "org.osgi.framework.os.name";
-
-	/**
-	 * Framework environment property (named
-	 * &quot;org.osgi.framework.os.version&quot;) identifying the Framework
-	 * host-computer's operating system version number.
-	 * 
-	 * <p>
-	 * The value of this property may be retrieved by calling the
-	 * <code>BundleContext.getProperty</code> method.
-	 */
-	public static final String	FRAMEWORK_OS_VERSION					= "org.osgi.framework.os.version";
-
-	/**
-	 * Framework environment property (named
-	 * &quot;org.osgi.framework.processor&quot;) identifying the Framework
-	 * host-computer's processor name.
-	 * <p>
-	 * The value of this property may be retrieved by calling the
-	 * <code>BundleContext.getProperty</code> method.
-	 */
-	public static final String	FRAMEWORK_PROCESSOR						= "org.osgi.framework.processor";
-
-	/**
-	 * Framework environment property (named
-	 * &quot;org.osgi.framework.executionenvironment&quot;) identifying
-	 * execution environments provided by the Framework.
-	 * <p>
-	 * The value of this property may be retrieved by calling the
-	 * <code>BundleContext.getProperty</code> method.
-	 * 
-	 * @since 1.2
-	 */
-	public static final String	FRAMEWORK_EXECUTIONENVIRONMENT			= "org.osgi.framework.executionenvironment";
-
-	/**
-	 * Framework environment property (named
-	 * &quot;org.osgi.framework.bootdelegation&quot;) identifying packages for
-	 * which the Framework must delegate class loading to the boot class path.
-	 * <p>
-	 * The value of this property may be retrieved by calling the
-	 * <code>BundleContext.getProperty</code> method.
-	 * 
-	 * @since 1.3
-	 */
-	public static final String	FRAMEWORK_BOOTDELEGATION				= "org.osgi.framework.bootdelegation";
-
-	/**
-	 * Framework environment property (named
-	 * &quot;org.osgi.framework.system.packages&quot;) identifying packages which
-	 * the system bundle must export.
-	 * <p>
-	 * If this property is not specified then the framework must calculate a 
-	 * reasonable default value for the current execution environment. 
-	 * <p>
-	 * The value of this property may be retrieved by calling the
-	 * <code>BundleContext.getProperty</code> method.
-	 * 
-	 * @since 1.3
-	 */
-	public static final String	FRAMEWORK_SYSTEMPACKAGES				= "org.osgi.framework.system.packages";
-
-	/**
-	 * Framework environment property (named
-	 * &quot;org.osgi.framework.system.packages.extra&quot;) identifying extra 
-	 * packages which the system bundle must export from the current 
-	 * execution environment.
-	 * <p>
-	 * This property is useful for configuring extra system packages in 
-	 * addition to the system packages calculated by the framework.
-	 * <p>
-	 * The value of this property may be retrieved by calling the
-	 * <code>BundleContext.getProperty</code> method.
-	 * @see #FRAMEWORK_SYSTEMPACKAGES org.osgi.framework.system.packages
-	 * @since 1.5
-	 */
-	public static final String	FRAMEWORK_SYSTEMPACKAGES_EXTRA			= "org.osgi.framework.system.packages.extra";
-	/**
-	 * Framework environment property (named
-	 * &quot;org.osgi.supports.framework.extension&quot;) identifying whether
-	 * the Framework supports framework extension bundles. As of version 1.4,
-	 * the value of this property must be <code>true</code>. The Framework
-	 * must support framework extension bundles.
-	 * <p>
-	 * The value of this property may be retrieved by calling the
-	 * <code>BundleContext.getProperty</code> method.
-	 * 
-	 * @since 1.3
-	 */
-	public static final String	SUPPORTS_FRAMEWORK_EXTENSION			= "org.osgi.supports.framework.extension";
-
-	/**
-	 * Framework environment property (named
-	 * &quot;org.osgi.supports.bootclasspath.extension&quot;) identifying
-	 * whether the Framework supports bootclasspath extension bundles. If the
-	 * value of this property is <code>true</code>, then the Framework
-	 * supports bootclasspath extension bundles. The default value is
-	 * <code>false</code>.
-	 * <p>
-	 * The value of this property may be retrieved by calling the
-	 * <code>BundleContext.getProperty</code> method.
-	 * 
-	 * @since 1.3
-	 */
-	public static final String	SUPPORTS_BOOTCLASSPATH_EXTENSION		= "org.osgi.supports.bootclasspath.extension";
-
-	/**
-	 * Framework environment property (named
-	 * &quot;org.osgi.supports.framework.fragment&quot;) identifying whether the
-	 * Framework supports fragment bundles. As of version 1.4, the value of this
-	 * property must be <code>true</code>. The Framework must support
-	 * fragment bundles.
-	 * <p>
-	 * The value of this property may be retrieved by calling the
-	 * <code>BundleContext.getProperty</code> method.
-	 * 
-	 * @since 1.3
-	 */
-	public static final String	SUPPORTS_FRAMEWORK_FRAGMENT				= "org.osgi.supports.framework.fragment";
-
-	/**
-	 * Framework environment property (named
-	 * &quot;org.osgi.supports.framework.requirebundle&quot;) identifying
-	 * whether the Framework supports the <code>Require-Bundle</code> manifest
-	 * header. As of version 1.4, the value of this property must be
-	 * <code>true</code>. The Framework must support the
-	 * <code>Require-Bundle</code> manifest header.
-	 * <p>
-	 * The value of this property may be retrieved by calling the
-	 * <code>BundleContext.getProperty</code> method.
-	 * 
-	 * @since 1.3
-	 */
-	public static final String	SUPPORTS_FRAMEWORK_REQUIREBUNDLE		= "org.osgi.supports.framework.requirebundle";
-
-	/*
-	 * Service properties.
-	 */
-
-	/**
-	 * Service property (named &quot;objectClass&quot;) identifying all of the
-	 * class names under which a service was registered in the Framework (of
-	 * type <code>java.lang.String[]</code>).
-	 * 
-	 * <p>
-	 * This property is set by the Framework when a service is registered.
-	 */
-	public static final String	OBJECTCLASS								= "objectClass";
-
-	/**
-	 * Service property (named &quot;service.id&quot;) identifying a service's
-	 * registration number (of type <code>java.lang.Long</code>).
-	 * 
-	 * <p>
-	 * The value of this property is assigned by the Framework when a service is
-	 * registered. The Framework assigns a unique value that is larger than all
-	 * previously assigned values since the Framework was started. These values
-	 * are NOT persistent across restarts of the Framework.
-	 */
-	public static final String	SERVICE_ID								= "service.id";
-
-	/**
-	 * Service property (named &quot;service.pid&quot;) identifying a service's
-	 * persistent identifier.
-	 * 
-	 * <p>
-	 * This property may be supplied in the <code>properties</code>
-	 * <code>Dictionary</code>
-	 * object passed to the <code>BundleContext.registerService</code> method.
-	 * 
-	 * <p>
-	 * A service's persistent identifier uniquely identifies the service and
-	 * persists across multiple Framework invocations.
-	 * 
-	 * <p>
-	 * By convention, every bundle has its own unique namespace, starting with
-	 * the bundle's identifier (see {@link Bundle#getBundleId}) and followed by
-	 * a dot (.). A bundle may use this as the prefix of the persistent
-	 * identifiers for the services it registers.
-	 */
-	public static final String	SERVICE_PID								= "service.pid";
-
-	/**
-	 * Service property (named &quot;service.ranking&quot;) identifying a
-	 * service's ranking number (of type <code>java.lang.Integer</code>).
-	 * 
-	 * <p>
-	 * This property may be supplied in the <code>properties
-	 * Dictionary</code>
-	 * object passed to the <code>BundleContext.registerService</code> method.
-	 * 
-	 * <p>
-	 * The service ranking is used by the Framework to determine the <i>default
-	 * </i> service to be returned from a call to the
-	 * {@link BundleContext#getServiceReference} method: If more than one
-	 * service implements the specified class, the <code>ServiceReference</code>
-	 * object with the highest ranking is returned.
-	 * 
-	 * <p>
-	 * The default ranking is zero (0). A service with a ranking of
-	 * <code>Integer.MAX_VALUE</code> is very likely to be returned as the
-	 * default service, whereas a service with a ranking of
-	 * <code>Integer.MIN_VALUE</code> is very unlikely to be returned.
-	 * 
-	 * <p>
-	 * If the supplied property value is not of type
-	 * <code>java.lang.Integer</code>, it is deemed to have a ranking value
-	 * of zero.
-	 */
-	public static final String	SERVICE_RANKING							= "service.ranking";
-
-	/**
-	 * Service property (named &quot;service.type&quot;) to provide information
-	 * about the type of the service. For example, if this service is proxied,
-	 * the property value might contain a string such as &quot;proxied&quot;.
-	 * 
-	 * <p>
-	 * The OSGi Alliance reserves all property value strings that start with
-	 * &quot;osgi.&quot;.
-	 * 
-	 * <p>
-	 * This property may be supplied in the properties <code>Dictionary</code>
-	 * object passed to the <code>BundleContext.registerService</code> method.
-	 * The value of this property must be of type <code>String</code>,
-	 * <code>String[]</code>, or <code>Collection</code> of <code>String</code>.
-	 * 
-	 * @since 1.5
-	 */
-	public static final String	SERVICE_TYPE							= "service.type";
-	
-	/**
-	 * Service property (named &quot;service.vendor&quot;) identifying a
-	 * service's vendor.
-	 * 
-	 * <p>
-	 * This property may be supplied in the properties <code>Dictionary</code>
-	 * object passed to the <code>BundleContext.registerService</code> method.
-	 */
-	public static final String	SERVICE_VENDOR							= "service.vendor";
-
-	/**
-	 * Service property (named &quot;service.description&quot;) identifying a
-	 * service's description.
-	 * 
-	 * <p>
-	 * This property may be supplied in the properties <code>Dictionary</code>
-	 * object passed to the <code>BundleContext.registerService</code> method.
-	 */
-	public static final String	SERVICE_DESCRIPTION						= "service.description";
-
-	/**
-	 * Manifest header (named &quot;Bundle-SymbolicName&quot;) identifying the
-	 * bundle's symbolic name.
-	 * <p>
 	 * The attribute value may be retrieved from the <code>Dictionary</code>
 	 * object returned by the <code>Bundle.getHeaders</code> method.
 	 * 
@@ -618,8 +315,8 @@
 	public final static String	BUNDLE_SYMBOLICNAME						= "Bundle-SymbolicName";
 
 	/**
-	 * Manifest header directive (named &quot;singleton&quot;) identifying
-	 * whether a bundle is a singleton. The default value is <code>false</code>.
+	 * Manifest header directive identifying whether a bundle is a singleton.
+	 * The default value is <code>false</code>.
 	 * 
 	 * <p>
 	 * The directive value is encoded in the Bundle-SymbolicName manifest header
@@ -629,14 +326,19 @@
 	 *     Bundle-SymbolicName: com.acme.module.test; singleton:=true
 	 * </pre>
 	 * 
+	 * <p>
+	 * The attribute value may be retrieved from the <code>Dictionary</code>
+	 * object returned by the <code>Bundle.getHeaders</code> method.
+	 * 
+	 * @see #BUNDLE_SYMBOLICNAME
 	 * @since 1.3
 	 */
 	public final static String	SINGLETON_DIRECTIVE						= "singleton";
 
 	/**
-	 * Manifest header directive (named &quot;fragment-attachment&quot;)
-	 * identifying if and when a fragment may attach to a host bundle. The
-	 * default value is <code>&quot;always&quot;</code>.
+	 * Manifest header directive identifying if and when a fragment may attach
+	 * to a host bundle. The default value is
+	 * {@link #FRAGMENT_ATTACHMENT_ALWAYS always}.
 	 * 
 	 * <p>
 	 * The directive value is encoded in the Bundle-SymbolicName manifest header
@@ -646,19 +348,19 @@
 	 *     Bundle-SymbolicName: com.acme.module.test; fragment-attachment:=&quot;never&quot;
 	 * </pre>
 	 * 
-	 * @see Constants#FRAGMENT_ATTACHMENT_ALWAYS
-	 * @see Constants#FRAGMENT_ATTACHMENT_RESOLVETIME
-	 * @see Constants#FRAGMENT_ATTACHMENT_NEVER
+	 * @see #BUNDLE_SYMBOLICNAME
+	 * @see #FRAGMENT_ATTACHMENT_ALWAYS
+	 * @see #FRAGMENT_ATTACHMENT_RESOLVETIME
+	 * @see #FRAGMENT_ATTACHMENT_NEVER
 	 * @since 1.3
 	 */
 	public final static String	FRAGMENT_ATTACHMENT_DIRECTIVE			= "fragment-attachment";
 
 	/**
-	 * Manifest header directive value (named &quot;always&quot;) identifying a
-	 * fragment attachment type of always. A fragment attachment type of always
-	 * indicates that fragments are allowed to attach to the host bundle at any
-	 * time (while the host is resolved or during the process of resolving the
-	 * host bundle).
+	 * Manifest header directive value identifying a fragment attachment type of
+	 * always. A fragment attachment type of always indicates that fragments are
+	 * allowed to attach to the host bundle at any time (while the host is
+	 * resolved or during the process of resolving the host bundle).
 	 * 
 	 * <p>
 	 * The directive value is encoded in the Bundle-SymbolicName manifest header
@@ -668,17 +370,16 @@
 	 *     Bundle-SymbolicName: com.acme.module.test; fragment-attachment:=&quot;always&quot;
 	 * </pre>
 	 * 
-	 * @see Constants#FRAGMENT_ATTACHMENT_DIRECTIVE
+	 * @see #FRAGMENT_ATTACHMENT_DIRECTIVE
 	 * @since 1.3
 	 */
 	public final static String	FRAGMENT_ATTACHMENT_ALWAYS				= "always";
 
 	/**
-	 * Manifest header directive value (named &quot;resolve-time&quot;)
-	 * identifying a fragment attachment type of resolve-time. A fragment
-	 * attachment type of resolve-time indicates that fragments are allowed to
-	 * attach to the host bundle only during the process of resolving the host
-	 * bundle.
+	 * Manifest header directive value identifying a fragment attachment type of
+	 * resolve-time. A fragment attachment type of resolve-time indicates that
+	 * fragments are allowed to attach to the host bundle only during the
+	 * process of resolving the host bundle.
 	 * 
 	 * <p>
 	 * The directive value is encoded in the Bundle-SymbolicName manifest header
@@ -688,16 +389,15 @@
 	 *     Bundle-SymbolicName: com.acme.module.test; fragment-attachment:=&quot;resolve-time&quot;
 	 * </pre>
 	 * 
-	 * @see Constants#FRAGMENT_ATTACHMENT_DIRECTIVE
+	 * @see #FRAGMENT_ATTACHMENT_DIRECTIVE
 	 * @since 1.3
 	 */
 	public final static String	FRAGMENT_ATTACHMENT_RESOLVETIME			= "resolve-time";
 
 	/**
-	 * Manifest header directive value (named &quot;never&quot;) identifying a
-	 * fragment attachment type of never. A fragment attachment type of never
-	 * indicates that no fragments are allowed to attach to the host bundle at
-	 * any time.
+	 * Manifest header directive value identifying a fragment attachment type of
+	 * never. A fragment attachment type of never indicates that no fragments
+	 * are allowed to attach to the host bundle at any time.
 	 * 
 	 * <p>
 	 * The directive value is encoded in the Bundle-SymbolicName manifest header
@@ -707,14 +407,15 @@
 	 *     Bundle-SymbolicName: com.acme.module.test; fragment-attachment:=&quot;never&quot;
 	 * </pre>
 	 * 
-	 * @see Constants#FRAGMENT_ATTACHMENT_DIRECTIVE
+	 * @see #FRAGMENT_ATTACHMENT_DIRECTIVE
 	 * @since 1.3
 	 */
 	public final static String	FRAGMENT_ATTACHMENT_NEVER				= "never";
 
 	/**
-	 * Manifest header (named &quot;Bundle-Localization&quot;) identifying the
-	 * base name of the bundle's localization entries.
+	 * Manifest header identifying the base name of the bundle's localization
+	 * entries.
+	 * 
 	 * <p>
 	 * The attribute value may be retrieved from the <code>Dictionary</code>
 	 * object returned by the <code>Bundle.getHeaders</code> method.
@@ -733,8 +434,8 @@
 	public final static String	BUNDLE_LOCALIZATION_DEFAULT_BASENAME	= "OSGI-INF/l10n/bundle";
 
 	/**
-	 * Manifest header (named &quot;Require-Bundle&quot;) identifying the
-	 * symbolic names of other bundles required by the bundle.
+	 * Manifest header identifying the symbolic names of other bundles required
+	 * by the bundle.
 	 * 
 	 * <p>
 	 * The attribute value may be retrieved from the <code>Dictionary</code>
@@ -745,9 +446,10 @@
 	public final static String	REQUIRE_BUNDLE							= "Require-Bundle";
 
 	/**
-	 * Manifest header attribute (named &quot;bundle-version&quot;) identifying
-	 * a range of versions for a bundle specified in the Require-Bundle or
-	 * Fragment-Host manifest headers. The default value is <code>0.0.0</code>.
+	 * Manifest header attribute identifying a range of versions for a bundle
+	 * specified in the <code>Require-Bundle</code> or
+	 * <code>Fragment-Host</code> manifest headers. The default value is
+	 * <code>0.0.0</code>.
 	 * 
 	 * <p>
 	 * The attribute value is encoded in the Require-Bundle manifest header
@@ -764,13 +466,14 @@
 	 * specified as a single version means a version range that includes any
 	 * bundle version greater than or equal to the specified version.
 	 * 
+	 * @see #REQUIRE_BUNDLE
 	 * @since 1.3
 	 */
 	public static final String	BUNDLE_VERSION_ATTRIBUTE				= "bundle-version";
 
 	/**
-	 * Manifest header (named &quot;Fragment-Host&quot;) identifying the
-	 * symbolic name of another bundle for which that the bundle is a fragment.
+	 * Manifest header identifying the symbolic name of another bundle for which
+	 * that the bundle is a fragment.
 	 * 
 	 * <p>
 	 * The attribute value may be retrieved from the <code>Dictionary</code>
@@ -781,8 +484,8 @@
 	public final static String	FRAGMENT_HOST							= "Fragment-Host";
 
 	/**
-	 * Manifest header attribute (named &quot;selection-filter&quot;) is used
-	 * for selection by filtering based upon system properties.
+	 * Manifest header attribute is used for selection by filtering based upon
+	 * system properties.
 	 * 
 	 * <p>
 	 * The attribute value is encoded in manifest headers like:
@@ -791,19 +494,19 @@
 	 *     Bundle-NativeCode: libgtk.so; selection-filter=&quot;(ws=gtk)&quot;; ...
 	 * </pre>
 	 * 
+	 * @see #BUNDLE_NATIVECODE
 	 * @since 1.3
 	 */
 	public final static String	SELECTION_FILTER_ATTRIBUTE				= "selection-filter";
 
 	/**
-	 * Manifest header (named &quot;Bundle-ManifestVersion&quot;) identifying
-	 * the bundle manifest version. A bundle manifest may express the version of
-	 * the syntax in which it is written by specifying a bundle manifest
-	 * version. Bundles exploiting OSGi R4, or later, syntax must specify a
-	 * bundle manifest version.
+	 * Manifest header identifying the bundle manifest version. A bundle
+	 * manifest may express the version of the syntax in which it is written by
+	 * specifying a bundle manifest version. Bundles exploiting OSGi Release 4,
+	 * or later, syntax must specify a bundle manifest version.
 	 * <p>
-	 * The bundle manifest version defined by OSGi R4 or, more specifically, by
-	 * V1.3 of the OSGi Framework Specification is "2".
+	 * The bundle manifest version defined by OSGi Release 4 or, more
+	 * specifically, by version 1.3 of the OSGi Core Specification is "2".
 	 * 
 	 * <p>
 	 * The attribute value may be retrieved from the <code>Dictionary</code>
@@ -814,9 +517,8 @@
 	public final static String	BUNDLE_MANIFESTVERSION					= "Bundle-ManifestVersion";
 
 	/**
-	 * Manifest header attribute (named &quot;version&quot;) identifying the
-	 * version of a package specified in the Export-Package or Import-Package
-	 * manifest header.
+	 * Manifest header attribute identifying the version of a package specified
+	 * in the Export-Package or Import-Package manifest header.
 	 * 
 	 * <p>
 	 * The attribute value is encoded in the Export-Package or Import-Package
@@ -826,14 +528,15 @@
 	 *     Import-Package: org.osgi.framework; version=&quot;1.1&quot;
 	 * </pre>
 	 * 
+	 * @see #EXPORT_PACKAGE
+	 * @see #IMPORT_PACKAGE
 	 * @since 1.3
 	 */
 	public final static String	VERSION_ATTRIBUTE						= "version";
 
 	/**
-	 * Manifest header attribute (named &quot;bundle-symbolic-name&quot;)
-	 * identifying the symbolic name of a bundle that exports a package
-	 * specified in the Import-Package manifest header.
+	 * Manifest header attribute identifying the symbolic name of a bundle that
+	 * exports a package specified in the Import-Package manifest header.
 	 * 
 	 * <p>
 	 * The attribute value is encoded in the Import-Package manifest header
@@ -843,13 +546,15 @@
 	 *     Import-Package: org.osgi.framework; bundle-symbolic-name=&quot;com.acme.module.test&quot;
 	 * </pre>
 	 * 
+	 * @see #IMPORT_PACKAGE
 	 * @since 1.3
 	 */
 	public final static String	BUNDLE_SYMBOLICNAME_ATTRIBUTE			= "bundle-symbolic-name";
 
 	/**
-	 * Manifest header directive (named &quot;resolution&quot;) identifying the
-	 * resolution type in the Import-Package or Require-Bundle manifest header.
+	 * Manifest header directive identifying the resolution type in the
+	 * Import-Package or Require-Bundle manifest header. The default value is
+	 * {@link #RESOLUTION_MANDATORY mandatory}.
 	 * 
 	 * <p>
 	 * The directive value is encoded in the Import-Package or Require-Bundle
@@ -860,18 +565,19 @@
 	 *     Require-Bundle: com.acme.module.test; resolution:=&quot;optional&quot;
 	 * </pre>
 	 * 
-	 * @see Constants#RESOLUTION_MANDATORY
-	 * @see Constants#RESOLUTION_OPTIONAL
+	 * @see #IMPORT_PACKAGE
+	 * @see #REQUIRE_BUNDLE
+	 * @see #RESOLUTION_MANDATORY
+	 * @see #RESOLUTION_OPTIONAL
 	 * @since 1.3
 	 */
 	public final static String	RESOLUTION_DIRECTIVE					= "resolution";
 
 	/**
-	 * Manifest header directive value (named &quot;mandatory&quot;) identifying
-	 * a mandatory resolution type. A mandatory resolution type indicates that
-	 * the import package or require bundle must be resolved when the bundle is
-	 * resolved. If such an import or require bundle cannot be resolved, the
-	 * module fails to resolve.
+	 * Manifest header directive value identifying a mandatory resolution type.
+	 * A mandatory resolution type indicates that the import package or require
+	 * bundle must be resolved when the bundle is resolved. If such an import or
+	 * require bundle cannot be resolved, the module fails to resolve.
 	 * 
 	 * <p>
 	 * The directive value is encoded in the Import-Package or Require-Bundle
@@ -882,18 +588,18 @@
 	 *     Require-Bundle: com.acme.module.test; resolution:=&quot;manditory&quot;
 	 * </pre>
 	 * 
-	 * @see Constants#RESOLUTION_DIRECTIVE
+	 * @see #RESOLUTION_DIRECTIVE
 	 * @since 1.3
 	 */
 	public final static String	RESOLUTION_MANDATORY					= "mandatory";
 
 	/**
-	 * Manifest header directive value (named &quot;optional&quot;) identifying
-	 * an optional resolution type. An optional resolution type indicates that
-	 * the import or require bundle is optional and the bundle may be resolved
-	 * without the import or require bundle being resolved. If the import or
-	 * require bundle is not resolved when the bundle is resolved, the import or
-	 * require bundle may not be resolved before the bundle is refreshed.
+	 * Manifest header directive value identifying an optional resolution type.
+	 * An optional resolution type indicates that the import or require bundle
+	 * is optional and the bundle may be resolved without the import or require
+	 * bundle being resolved. If the import or require bundle is not resolved
+	 * when the bundle is resolved, the import or require bundle may not be
+	 * resolved before the bundle is refreshed.
 	 * 
 	 * <p>
 	 * The directive value is encoded in the Import-Package or Require-Bundle
@@ -904,14 +610,14 @@
 	 *     Require-Bundle: com.acme.module.test; resolution:=&quot;optional&quot;
 	 * </pre>
 	 * 
-	 * @see Constants#RESOLUTION_DIRECTIVE
+	 * @see #RESOLUTION_DIRECTIVE
 	 * @since 1.3
 	 */
 	public final static String	RESOLUTION_OPTIONAL						= "optional";
 
 	/**
-	 * Manifest header directive (named &quot;uses&quot;) identifying a list of
-	 * packages that an exported package uses.
+	 * Manifest header directive identifying a list of packages that an exported
+	 * package uses.
 	 * 
 	 * <p>
 	 * The directive value is encoded in the Export-Package manifest header
@@ -921,20 +627,23 @@
 	 *     Export-Package: org.osgi.util.tracker; uses:=&quot;org.osgi.framework&quot;
 	 * </pre>
 	 * 
+	 * @see #EXPORT_PACKAGE
 	 * @since 1.3
 	 */
 	public final static String	USES_DIRECTIVE							= "uses";
 
 	/**
-	 * Manifest header directive (named &quot;include&quot;).
+	 * Manifest header directive identifying a list of classes to include in the
+	 * exported package.
+	 * 
 	 * <p>
-	 * This directive is used by the Import-Package manifest header to identify
+	 * This directive is used by the Export-Package manifest header to identify
 	 * a list of classes of the specified package which must be allowed to be
-	 * exported. The directive value is encoded in the Import-Package manifest
+	 * exported. The directive value is encoded in the Export-Package manifest
 	 * header like:
 	 * 
 	 * <pre>
-	 *     Import-Package: org.osgi.framework; include:=&quot;MyClass*&quot;
+	 *     Export-Package: org.osgi.framework; include:=&quot;MyClass*&quot;
 	 * </pre>
 	 * 
 	 * <p>
@@ -947,12 +656,15 @@
 	 *     Bundle-ActivationPolicy: lazy; include:=&quot;org.osgi.framework&quot;
 	 * </pre>
 	 * 
+	 * @see #EXPORT_PACKAGE
+	 * @see #BUNDLE_ACTIVATIONPOLICY
 	 * @since 1.3
 	 */
 	public final static String	INCLUDE_DIRECTIVE						= "include";
 
 	/**
-	 * Manifest header directive (named &quot;exclude&quot;).
+	 * Manifest header directive identifying a list of classes to exclude in the
+	 * exported package..
 	 * <p>
 	 * This directive is used by the Export-Package manifest header to identify
 	 * a list of classes of the specified package which must not be allowed to
@@ -973,14 +685,16 @@
 	 *     Bundle-ActivationPolicy: lazy; exclude:=&quot;org.osgi.framework&quot;
 	 * </pre>
 	 * 
+	 * @see #EXPORT_PACKAGE
+	 * @see #BUNDLE_ACTIVATIONPOLICY
 	 * @since 1.3
 	 */
 	public final static String	EXCLUDE_DIRECTIVE						= "exclude";
 
 	/**
-	 * Manifest header directive (named &quot;mandatory&quot;) identifying names
-	 * of matching attributes which must be specified by matching Import-Package
-	 * statements in the Export-Package manifest header.
+	 * Manifest header directive identifying names of matching attributes which
+	 * must be specified by matching Import-Package statements in the
+	 * Export-Package manifest header.
 	 * 
 	 * <p>
 	 * The directive value is encoded in the Export-Package manifest header
@@ -990,13 +704,15 @@
 	 *     Export-Package: org.osgi.framework; mandatory:=&quot;bundle-symbolic-name&quot;
 	 * </pre>
 	 * 
+	 * @see #EXPORT_PACKAGE
 	 * @since 1.3
 	 */
 	public final static String	MANDATORY_DIRECTIVE						= "mandatory";
 
 	/**
-	 * Manifest header directive (named &quot;visibility&quot;) identifying the
-	 * visibility of a required bundle in the Require-Bundle manifest header.
+	 * Manifest header directive identifying the visibility of a required bundle
+	 * in the Require-Bundle manifest header. The default value is
+	 * {@link #VISIBILITY_PRIVATE private}.
 	 * 
 	 * <p>
 	 * The directive value is encoded in the Require-Bundle manifest header
@@ -1006,17 +722,18 @@
 	 *     Require-Bundle: com.acme.module.test; visibility:=&quot;reexport&quot;
 	 * </pre>
 	 * 
-	 * @see Constants#VISIBILITY_PRIVATE
-	 * @see Constants#VISIBILITY_REEXPORT
+	 * @see #REQUIRE_BUNDLE
+	 * @see #VISIBILITY_PRIVATE
+	 * @see #VISIBILITY_REEXPORT
 	 * @since 1.3
 	 */
 	public final static String	VISIBILITY_DIRECTIVE					= "visibility";
 
 	/**
-	 * Manifest header directive value (named &quot;private&quot;) identifying a
-	 * private visibility type. A private visibility type indicates that any
-	 * packages that are exported by the required bundle are not made visible on
-	 * the export signature of the requiring bundle.
+	 * Manifest header directive value identifying a private visibility type. A
+	 * private visibility type indicates that any packages that are exported by
+	 * the required bundle are not made visible on the export signature of the
+	 * requiring bundle.
 	 * 
 	 * <p>
 	 * The directive value is encoded in the Require-Bundle manifest header
@@ -1026,17 +743,17 @@
 	 *     Require-Bundle: com.acme.module.test; visibility:=&quot;private&quot;
 	 * </pre>
 	 * 
-	 * @see Constants#VISIBILITY_DIRECTIVE
+	 * @see #VISIBILITY_DIRECTIVE
 	 * @since 1.3
 	 */
 	public final static String	VISIBILITY_PRIVATE						= "private";
 
 	/**
-	 * Manifest header directive value (named &quot;reexport&quot;) identifying
-	 * a reexport visibility type. A reexport visibility type indicates any
-	 * packages that are exported by the required bundle are re-exported by the
-	 * requiring bundle. Any arbitrary arbitrary matching attributes with which
-	 * they were exported by the required bundle are deleted.
+	 * Manifest header directive value identifying a reexport visibility type. A
+	 * reexport visibility type indicates any packages that are exported by the
+	 * required bundle are re-exported by the requiring bundle. Any arbitrary
+	 * arbitrary matching attributes with which they were exported by the
+	 * required bundle are deleted.
 	 * 
 	 * <p>
 	 * The directive value is encoded in the Require-Bundle manifest header
@@ -1046,13 +763,13 @@
 	 *     Require-Bundle: com.acme.module.test; visibility:=&quot;reexport&quot;
 	 * </pre>
 	 * 
-	 * @see Constants#VISIBILITY_DIRECTIVE
+	 * @see #VISIBILITY_DIRECTIVE
 	 * @since 1.3
 	 */
 	public final static String	VISIBILITY_REEXPORT						= "reexport";
+
 	/**
-	 * Manifest header directive (named &quot;extension&quot;) identifying the
-	 * type of the extension fragment.
+	 * Manifest header directive identifying the type of the extension fragment.
 	 * 
 	 * <p>
 	 * The directive value is encoded in the Fragment-Host manifest header like:
@@ -1061,17 +778,17 @@
 	 *     Fragment-Host: system.bundle; extension:=&quot;framework&quot;
 	 * </pre>
 	 * 
-	 * @see Constants#EXTENSION_FRAMEWORK
-	 * @see Constants#EXTENSION_BOOTCLASSPATH
+	 * @see #FRAGMENT_HOST
+	 * @see #EXTENSION_FRAMEWORK
+	 * @see #EXTENSION_BOOTCLASSPATH
 	 * @since 1.3
 	 */
 	public final static String	EXTENSION_DIRECTIVE						= "extension";
 
 	/**
-	 * Manifest header directive value (named &quot;framework&quot;) identifying
-	 * the type of extension fragment. An extension fragment type of framework
-	 * indicates that the extension fragment is to be loaded by the framework's
-	 * class loader.
+	 * Manifest header directive value identifying the type of extension
+	 * fragment. An extension fragment type of framework indicates that the
+	 * extension fragment is to be loaded by the framework's class loader.
 	 * 
 	 * <p>
 	 * The directive value is encoded in the Fragment-Host manifest header like:
@@ -1080,16 +797,15 @@
 	 *     Fragment-Host: system.bundle; extension:=&quot;framework&quot;
 	 * </pre>
 	 * 
-	 * @see Constants#EXTENSION_DIRECTIVE
+	 * @see #EXTENSION_DIRECTIVE
 	 * @since 1.3
 	 */
 	public final static String	EXTENSION_FRAMEWORK						= "framework";
 
 	/**
-	 * Manifest header directive value (named &quot;bootclasspath&quot;)
-	 * identifying the type of extension fragment. An extension fragment type of
-	 * bootclasspath indicates that the extension fragment is to be loaded by
-	 * the boot class loader.
+	 * Manifest header directive value identifying the type of extension
+	 * fragment. An extension fragment type of bootclasspath indicates that the
+	 * extension fragment is to be loaded by the boot class loader.
 	 * 
 	 * <p>
 	 * The directive value is encoded in the Fragment-Host manifest header like:
@@ -1098,34 +814,33 @@
 	 *     Fragment-Host: system.bundle; extension:=&quot;bootclasspath&quot;
 	 * </pre>
 	 * 
-	 * @see Constants#EXTENSION_DIRECTIVE
+	 * @see #EXTENSION_DIRECTIVE
 	 * @since 1.3
 	 */
 	public final static String	EXTENSION_BOOTCLASSPATH					= "bootclasspath";
 
 	/**
-	 * Manifest header (named &quot;Bundle-ActivationPolicy&quot;) identifying
-	 * the bundle's activation policy.
+	 * Manifest header identifying the bundle's activation policy.
 	 * <p>
 	 * The attribute value may be retrieved from the <code>Dictionary</code>
 	 * object returned by the <code>Bundle.getHeaders</code> method.
 	 * 
 	 * @since 1.4
-	 * @see Constants#ACTIVATION_LAZY
-	 * @see Constants#INCLUDE_DIRECTIVE
-	 * @see Constants#EXCLUDE_DIRECTIVE
+	 * @see #ACTIVATION_LAZY
+	 * @see #INCLUDE_DIRECTIVE
+	 * @see #EXCLUDE_DIRECTIVE
 	 */
 	public final static String	BUNDLE_ACTIVATIONPOLICY					= "Bundle-ActivationPolicy";
 
 	/**
-	 * Bundle activation policy (named &quot;lazy&quot;) declaring the bundle
-	 * must be activated when the first class load is made from the bundle.
+	 * Bundle activation policy declaring the bundle must be activated when the
+	 * first class load is made from the bundle.
 	 * <p>
 	 * A bundle with the lazy activation policy that is started with the
 	 * {@link Bundle#START_ACTIVATION_POLICY START_ACTIVATION_POLICY} option
 	 * will wait in the {@link Bundle#STARTING STARTING} state until the first
 	 * class load from the bundle occurs. The bundle will then be activated
-	 * before the class is returned to the requestor.
+	 * before the class is returned to the requester.
 	 * <p>
 	 * The activation policy value is specified as in the
 	 * Bundle-ActivationPolicy manifest header like:
@@ -1134,7 +849,7 @@
 	 *       Bundle-ActivationPolicy: lazy
 	 * </pre>
 	 * 
-	 * @see Constants#BUNDLE_ACTIVATIONPOLICY
+	 * @see #BUNDLE_ACTIVATIONPOLICY
 	 * @see Bundle#start(int)
 	 * @see Bundle#START_ACTIVATION_POLICY
 	 * @since 1.4
@@ -1142,26 +857,218 @@
 	public final static String	ACTIVATION_LAZY							= "lazy";
 
 	/**
-	 * Specifies the type of security manager the framework must use. If not
-	 * specified then the framework will not set the VM security manager. The
-	 * following types are defined:
-	 * <ul>
-	 * <li> osgi - Enables a security manager that supports all security aspects
-	 * of the OSGi R4 specification (including postponed conditions).</li>
-	 * </ul>
+	 * Framework environment property identifying the Framework version.
 	 * 
+	 * <p>
+	 * The value of this property may be retrieved by calling the
+	 * <code>BundleContext.getProperty</code> method.
+	 */
+	public static final String	FRAMEWORK_VERSION						= "org.osgi.framework.version";
+
+	/**
+	 * Framework environment property identifying the Framework implementation
+	 * vendor.
+	 * 
+	 * <p>
+	 * The value of this property may be retrieved by calling the
+	 * <code>BundleContext.getProperty</code> method.
+	 */
+	public static final String	FRAMEWORK_VENDOR						= "org.osgi.framework.vendor";
+
+	/**
+	 * Framework environment property identifying the Framework implementation
+	 * language (see ISO 639 for possible values).
+	 * 
+	 * <p>
+	 * The value of this property may be retrieved by calling the
+	 * <code>BundleContext.getProperty</code> method.
+	 */
+	public static final String	FRAMEWORK_LANGUAGE						= "org.osgi.framework.language";
+
+	/**
+	 * Framework environment property identifying the Framework host-computer's
+	 * operating system.
+	 * 
+	 * <p>
+	 * The value of this property may be retrieved by calling the
+	 * <code>BundleContext.getProperty</code> method.
+	 */
+	public static final String	FRAMEWORK_OS_NAME						= "org.osgi.framework.os.name";
+
+	/**
+	 * Framework environment property identifying the Framework host-computer's
+	 * operating system version number.
+	 * 
+	 * <p>
+	 * The value of this property may be retrieved by calling the
+	 * <code>BundleContext.getProperty</code> method.
+	 */
+	public static final String	FRAMEWORK_OS_VERSION					= "org.osgi.framework.os.version";
+
+	/**
+	 * Framework environment property identifying the Framework host-computer's
+	 * processor name.
+	 * 
+	 * <p>
+	 * The value of this property may be retrieved by calling the
+	 * <code>BundleContext.getProperty</code> method.
+	 */
+	public static final String	FRAMEWORK_PROCESSOR						= "org.osgi.framework.processor";
+
+	/**
+	 * Framework environment property identifying execution environments
+	 * provided by the Framework.
+	 * 
+	 * <p>
+	 * The value of this property may be retrieved by calling the
+	 * <code>BundleContext.getProperty</code> method.
+	 * 
+	 * @since 1.2
+	 */
+	public static final String	FRAMEWORK_EXECUTIONENVIRONMENT			= "org.osgi.framework.executionenvironment";
+
+	/**
+	 * Framework environment property identifying packages for which the
+	 * Framework must delegate class loading to the parent class loader of the
+	 * bundle.
+	 * 
+	 * <p>
+	 * The value of this property may be retrieved by calling the
+	 * <code>BundleContext.getProperty</code> method.
+	 * 
+	 * @see #FRAMEWORK_BUNDLE_PARENT
+	 * @since 1.3
+	 */
+	public static final String	FRAMEWORK_BOOTDELEGATION				= "org.osgi.framework.bootdelegation";
+
+	/**
+	 * Framework environment property identifying packages which the system
+	 * bundle must export.
+	 * 
+	 * <p>
+	 * If this property is not specified then the framework must calculate a
+	 * reasonable default value for the current execution environment.
+	 * 
+	 * <p>
+	 * The value of this property may be retrieved by calling the
+	 * <code>BundleContext.getProperty</code> method.
+	 * 
+	 * @since 1.3
+	 */
+	public static final String	FRAMEWORK_SYSTEMPACKAGES				= "org.osgi.framework.system.packages";
+
+	/**
+	 * Framework environment property identifying extra packages which the
+	 * system bundle must export from the current execution environment.
+	 * 
+	 * <p>
+	 * This property is useful for configuring extra system packages in addition
+	 * to the system packages calculated by the framework.
+	 * 
+	 * <p>
+	 * The value of this property may be retrieved by calling the
+	 * <code>BundleContext.getProperty</code> method.
+	 * 
+	 * @see #FRAMEWORK_SYSTEMPACKAGES
+	 * @since 1.5
+	 */
+	public static final String	FRAMEWORK_SYSTEMPACKAGES_EXTRA			= "org.osgi.framework.system.packages.extra";
+
+	/**
+	 * Framework environment property identifying whether the Framework supports
+	 * framework extension bundles.
+	 * 
+	 * <p>
+	 * As of version 1.4, the value of this property must be <code>true</code>.
+	 * The Framework must support framework extension bundles.
+	 * 
+	 * <p>
+	 * The value of this property may be retrieved by calling the
+	 * <code>BundleContext.getProperty</code> method.
+	 * 
+	 * @since 1.3
+	 */
+	public static final String	SUPPORTS_FRAMEWORK_EXTENSION			= "org.osgi.supports.framework.extension";
+
+	/**
+	 * Framework environment property identifying whether the Framework supports
+	 * bootclasspath extension bundles.
+	 * 
+	 * <p>
+	 * If the value of this property is <code>true</code>, then the Framework
+	 * supports bootclasspath extension bundles. The default value is
+	 * <code>false</code>.
+	 * <p>
+	 * The value of this property may be retrieved by calling the
+	 * <code>BundleContext.getProperty</code> method.
+	 * 
+	 * @since 1.3
+	 */
+	public static final String	SUPPORTS_BOOTCLASSPATH_EXTENSION		= "org.osgi.supports.bootclasspath.extension";
+
+	/**
+	 * Framework environment property identifying whether the Framework supports
+	 * fragment bundles.
+	 * 
+	 * <p>
+	 * As of version 1.4, the value of this property must be <code>true</code>.
+	 * The Framework must support fragment bundles.
+	 * <p>
+	 * The value of this property may be retrieved by calling the
+	 * <code>BundleContext.getProperty</code> method.
+	 * 
+	 * @since 1.3
+	 */
+	public static final String	SUPPORTS_FRAMEWORK_FRAGMENT				= "org.osgi.supports.framework.fragment";
+
+	/**
+	 * Framework environment property identifying whether the Framework supports
+	 * the {@link #REQUIRE_BUNDLE Require-Bundle} manifest header.
+	 * 
+	 * <p>
+	 * As of version 1.4, the value of this property must be <code>true</code>.
+	 * The Framework must support the <code>Require-Bundle</code> manifest
+	 * header.
+	 * <p>
+	 * The value of this property may be retrieved by calling the
+	 * <code>BundleContext.getProperty</code> method.
+	 * 
+	 * @since 1.3
+	 */
+	public static final String	SUPPORTS_FRAMEWORK_REQUIREBUNDLE		= "org.osgi.supports.framework.requirebundle";
+
+	/**
+	 * Specifies the type of security manager the framework must use. If not
+	 * specified then the framework will not set the VM security manager.
+	 * 
+	 * @see #FRAMEWORK_SECURITY_OSGI
 	 * @since 1.5
 	 */
 	public final static String	FRAMEWORK_SECURITY						= "org.osgi.framework.security";
 
 	/**
-	 * A valid file path in the file system to a directory. If the specified
-	 * directory does not exist then the framework will create the directory.
-	 * If the specified path exists but is not a directory or if the 
-	 * framework fails to create the storage directory then framework
-	 * initialization must fail.
-	 * The framework is free to use this directory as it sees fit. This area can not
-	 * be shared with anything else.
+	 * Specifies that a security manager that supports all security aspects of
+	 * the OSGi core specification including postponed conditions must be
+	 * installed.
+	 * 
+	 * <p>
+	 * If this value is specified and there is a security manager already
+	 * installed, then a <code>SecurityException</code> must be thrown when the
+	 * Framework is initialized.
+	 * 
+	 * @see #FRAMEWORK_SECURITY
+	 * @since 1.5
+	 */
+	public final static String	FRAMEWORK_SECURITY_OSGI					= "osgi";
+
+	/**
+	 * Specified the persistent storage area used by the framework. The value of
+	 * this property must be a valid file path in the file system to a
+	 * directory. If the specified directory does not exist then the framework
+	 * will create the directory. If the specified path exists but is not a
+	 * directory or if the framework fails to create the storage directory, then
+	 * framework initialization must fail. The framework is free to use this
+	 * directory as it sees fit. This area can not be shared with anything else.
 	 * <p>
 	 * If this property is not set, the framework should use a reasonable
 	 * platform default for the persistent storage area.
@@ -1171,43 +1078,35 @@
 	public final static String	FRAMEWORK_STORAGE						= "org.osgi.framework.storage";
 
 	/**
-	 * Specifies if and when the storage area for the framework should be
-	 * cleaned.  Default value is {@link #FRAMEWORK_STORAGE_CLEAN_NONE none}
-	 * @see #FRAMEWORK_STORAGE_CLEAN_NONE none
-	 * @see #FRAMEWORK_STORAGE_CLEAN_ONFIRSTINIT onFirstInit
+	 * Specifies if and when the persistent storage area for the framework
+	 * should be cleaned. If this property is not set, then the framework
+	 * storage area must not be cleaned.
+	 * 
+	 * @see #FRAMEWORK_STORAGE_CLEAN_ONFIRSTINIT
 	 * @since 1.5
 	 */
 	public final static String	FRAMEWORK_STORAGE_CLEAN					= "org.osgi.framework.storage.clean";
 
 	/**
-	 * A framework configuration property value for 
-	 * {@link #FRAMEWORK_STORAGE_CLEAN org.osgi.framework.storage.clean} (named &quot;onFirstInit&quot;) identifying 
-	 * that the framework storage area will be cleaned before the system bundle
-	 * is initialized for the first time.  Subsequent inits, starts or updates of the 
-	 * system bundle will not result in cleaning the framework storage area.
+	 * Specifies that the framework storage area must be cleaned before the
+	 * framework is initialized for the first time. Subsequent inits, starts or
+	 * updates of the framework will not result in cleaning the framework
+	 * storage area.
 	 * 
 	 * @since 1.5
 	 */
 	public final static String  FRAMEWORK_STORAGE_CLEAN_ONFIRSTINIT			= "onFirstInit";
 
 	/**
-	 * A framework configuration property value for 
-	 * {@link #FRAMEWORK_STORAGE_CLEAN org.osgi.framework.storage.clean} (named &quot;none&quot;) identifying 
-	 * that the framework storage area should not be cleaned.
-	 * 
-	 * @since 1.5
-	 */
-	public final static String  FRAMEWORK_STORAGE_CLEAN_NONE			= "none";
-
-	/**
-	 * A comma separated list of additional library file extensions that must be
-	 * searched for when a bundle's class loader is searching for native
-	 * libraries. If not set then only the library name returned by
-	 * <code>System.mapLibraryName(String)</code> will be used to search. This
-	 * is needed for certain operating systems which allow more than one
-	 * extension for a library. For example AIX allows library extensions of
-	 * <code>.a</code> and <code>.so</code>, but System.mapLibraryName(String)
-	 * will only return names with the <code>.a</code> extension.
+	 * Specifies a comma separated list of additional library file extensions
+	 * that must be used when a bundle's class loader is searching for native
+	 * libraries. If this property is not set, then only the library name
+	 * returned by <code>System.mapLibraryName(String)</code> will be used to
+	 * search. This is needed for certain operating systems which allow more
+	 * than one extension for a library. For example, AIX allows library
+	 * extensions of <code>.a</code> and <code>.so</code>, but
+	 * <code>System.mapLibraryName(String)</code> will only return names with
+	 * the <code>.a</code> extension.
 	 * 
 	 * @since 1.5
 	 */
@@ -1215,34 +1114,34 @@
 
 	/**
 	 * Specifies an optional OS specific command to set file permissions on
-	 * extracted native code. On some operating systems it is required that
+	 * extracted native code. On some operating systems, it is required that
 	 * native libraries be set to executable. This optional property allows you
-	 * to specify the command. For example, on a UNIX style OS you could have
-	 * the following value:
+	 * to specify the command. For example, on a UNIX style OS, this property
+	 * could have the following value.
 	 * 
 	 * <pre>
-	 * org.osgi.framework.command.execpermission = &quot;chmod +rx ${abspath}&quot;
+	 * chmod +rx ${abspath}
 	 * </pre>
 	 * 
-	 * The ${abspath} is used to substitute the actual file path by the
-	 * framework.
+	 * The <code>${abspath}</code> is used by the framework to substitute the
+	 * actual absolute file path.
 	 * 
 	 * @since 1.5
 	 */
 	public final static String	FRAMEWORK_EXECPERMISSION				= "org.osgi.framework.command.execpermission";
 
 	/**
-	 * This property is used to configure trust repositories for the
-	 * framework. The value is a <code>java.io.File#pathSeparator</code> separated list of
-	 * valid file paths in the file system to files that contain key stores of
-	 * type JKS. The framework will use the key stores as trust repositories to
-	 * authenticate certificates of trusted signers. The key stores are only used
-	 * as read-only trust repositories to access public keys. No passwords are
+	 * Specifies the trust repositories used by the framework. The value is a
+	 * <code>java.io.File.pathSeparator</code> separated list of valid file
+	 * paths to files that contain key stores of type <code>JKS</code>. The
+	 * framework will use the key stores as trust repositories to authenticate
+	 * certificates of trusted signers. The key stores are only used as
+	 * read-only trust repositories to access public keys. No passwords are
 	 * required to access the key stores' public keys.
 	 * <p>
 	 * Note that framework implementations are allowed to use other trust
-	 * repositories in addition to the trust repositories specified by this 
-	 * property. How these other trust repositories are configured and populated 
+	 * repositories in addition to the trust repositories specified by this
+	 * property. How these other trust repositories are configured and populated
 	 * is implementation specific.
 	 * 
 	 * @since 1.5
@@ -1263,5 +1162,151 @@
 	 * @see "Core Specification, section 8.2.3."
 	 * @since 1.5
 	 */
-	public final static String	FRAMEWORK_BEGINNING_STARTLEVEL			= "org.osgi.framework.startlevel";
-}
\ No newline at end of file
+	public final static String	FRAMEWORK_BEGINNING_STARTLEVEL			= "org.osgi.framework.startlevel.beginning";
+
+	/**
+	 * Specifies the parent class loader type for all bundle class loaders.
+	 * Default value is {@link #FRAMEWORK_BUNDLE_PARENT_BOOT boot}.
+	 * 
+	 * @see #FRAMEWORK_BUNDLE_PARENT_BOOT
+	 * @see #FRAMEWORK_BUNDLE_PARENT_EXT
+	 * @see #FRAMEWORK_BUNDLE_PARENT_APP
+	 * @see #FRAMEWORK_BUNDLE_PARENT_FRAMEWORK
+	 * @since 1.5
+	 */
+	public final static String FRAMEWORK_BUNDLE_PARENT 					= "org.osgi.framework.bundle.parent";
+
+	/**
+	 * Specifies to use of the boot class loader as the parent class loader for
+	 * all bundle class loaders.
+	 * 
+	 * @since 1.5
+	 * @see #FRAMEWORK_BUNDLE_PARENT
+	 */
+	public final static String	FRAMEWORK_BUNDLE_PARENT_BOOT			= "boot";
+
+	/**
+	 * Specifies to use the extension class loader as the parent class loader
+	 * for all bundle class loaders.
+	 * 
+	 * @since 1.5
+	 * @see #FRAMEWORK_BUNDLE_PARENT
+	 */
+	public final static String	FRAMEWORK_BUNDLE_PARENT_EXT				= "ext";
+
+	/**
+	 * Specifies to use the application class loader as the parent class loader
+	 * for all bundle class loaders.  Depending on how the framework is 
+	 * launched, this may refer to the same class loader as 
+	 * {@link #FRAMEWORK_BUNDLE_PARENT_FRAMEWORK}.
+	 * 
+	 * @since 1.5
+	 * @see #FRAMEWORK_BUNDLE_PARENT
+	 */
+	public final static String	FRAMEWORK_BUNDLE_PARENT_APP				= "app";
+
+	/**
+	 * Specifies to use the framework class loader as the parent class loader
+	 * for all bundle class loaders. The framework class loader is the class
+	 * loader used to load the framework implementation.  Depending on how the 
+	 * framework is launched, this may refer to the same class loader as 
+	 * {@link #FRAMEWORK_BUNDLE_PARENT_APP}.
+	 * 
+	 * @since 1.5
+	 * @see #FRAMEWORK_BUNDLE_PARENT
+	 */
+	public final static String	FRAMEWORK_BUNDLE_PARENT_FRAMEWORK		= "framework";
+
+	/*
+	 * Service properties.
+	 */
+	
+	/**
+	 * Service property identifying all of the class names under which a service
+	 * was registered in the Framework. The value of this property must be of
+	 * type <code>String[]</code>.
+	 * 
+	 * <p>
+	 * This property is set by the Framework when a service is registered.
+	 */
+	public static final String	OBJECTCLASS								= "objectClass";
+
+	/**
+	 * Service property identifying a service's registration number. The value
+	 * of this property must be of type <code>Long</code>.
+	 * 
+	 * <p>
+	 * The value of this property is assigned by the Framework when a service is
+	 * registered. The Framework assigns a unique value that is larger than all
+	 * previously assigned values since the Framework was started. These values
+	 * are NOT persistent across restarts of the Framework.
+	 */
+	public static final String	SERVICE_ID								= "service.id";
+
+	/**
+	 * Service property identifying a service's persistent identifier.
+	 * 
+	 * <p>
+	 * This property may be supplied in the <code>properties</code>
+	 * <code>Dictionary</code> object passed to the
+	 * <code>BundleContext.registerService</code> method. The value of this
+	 * property must be of type <code>String</code>, <code>String[]</code>, or
+	 * <code>Collection</code> of <code>String</code>.
+	 * 
+	 * <p>
+	 * A service's persistent identifier uniquely identifies the service and
+	 * persists across multiple Framework invocations.
+	 * 
+	 * <p>
+	 * By convention, every bundle has its own unique namespace, starting with
+	 * the bundle's identifier (see {@link Bundle#getBundleId}) and followed by
+	 * a dot (.). A bundle may use this as the prefix of the persistent
+	 * identifiers for the services it registers.
+	 */
+	public static final String	SERVICE_PID								= "service.pid";
+
+	/**
+	 * Service property identifying a service's ranking number.
+	 * 
+	 * <p>
+	 * This property may be supplied in the <code>properties
+	 * Dictionary</code> object passed to the
+	 * <code>BundleContext.registerService</code> method. The value of this
+	 * property must be of type <code>Integer</code>.
+	 * 
+	 * <p>
+	 * The service ranking is used by the Framework to determine the <i>natural
+	 * order</i> of services, see {@link ServiceReference#compareTo(Object)},
+	 * and the <i>default</i> service to be returned from a call to the
+	 * {@link BundleContext#getServiceReference} method.
+	 * 
+	 * <p>
+	 * The default ranking is zero (0). A service with a ranking of
+	 * <code>Integer.MAX_VALUE</code> is very likely to be returned as the
+	 * default service, whereas a service with a ranking of
+	 * <code>Integer.MIN_VALUE</code> is very unlikely to be returned.
+	 * 
+	 * <p>
+	 * If the supplied property value is not of type <code>Integer</code>, it is
+	 * deemed to have a ranking value of zero.
+	 */
+	public static final String	SERVICE_RANKING							= "service.ranking";
+
+	/**
+	 * Service property identifying a service's vendor.
+	 * 
+	 * <p>
+	 * This property may be supplied in the properties <code>Dictionary</code>
+	 * object passed to the <code>BundleContext.registerService</code> method.
+	 */
+	public static final String	SERVICE_VENDOR							= "service.vendor";
+
+	/**
+	 * Service property identifying a service's description.
+	 * 
+	 * <p>
+	 * This property may be supplied in the properties <code>Dictionary</code>
+	 * object passed to the <code>BundleContext.registerService</code> method.
+	 */
+	public static final String	SERVICE_DESCRIPTION						= "service.description"; 
+}
diff --git a/framework/src/main/java/org/osgi/framework/hooks/service/EventHook.java b/framework/src/main/java/org/osgi/framework/hooks/service/EventHook.java
index 7db29b3..d2839aa 100644
--- a/framework/src/main/java/org/osgi/framework/hooks/service/EventHook.java
+++ b/framework/src/main/java/org/osgi/framework/hooks/service/EventHook.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2000, 2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2008 2009). 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.
@@ -13,12 +13,42 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 package org.osgi.framework.hooks.service;
 
 import java.util.Collection;
 
 import org.osgi.framework.ServiceEvent;
 
+/**
+ * OSGi Framework Service Event Hook Service.
+ * 
+ * <p>
+ * Bundles registering this service will be called during framework service
+ * (register, modify, and unregister service) operations.
+ * 
+ * @ThreadSafe
+ * @version $Revision: 6211 $
+ */
+
 public interface EventHook {
-	void event(ServiceEvent event, Collection/* <? extends BundleContext> */contexts);
+	/**
+	 * Event hook method. This method is called prior to service event delivery
+	 * when a publishing bundle registers, modifies or unregisters a service.
+	 * This method can filter the bundles which receive the event.
+	 * 
+	 * @param event The service event to be delivered.
+	 * @param contexts A <code>Collection</code> of Bundle Contexts for bundles
+	 *        which have listeners to which the specified event will be
+	 *        delivered. The implementation of this method may remove bundle
+	 *        contexts from the collection to prevent the event from being
+	 *        delivered to the associated bundles. The collection supports all
+	 *        the optional <code>Collection</code> operations except
+	 *        <code>add</code> and <code>addAll</code>. Attempting to add to the
+	 *        collection will result in an
+	 *        <code>UnsupportedOperationException</code>. The collection is not
+	 *        synchronized.
+	 */
+	void event(ServiceEvent event,
+			Collection/* <? extends BundleContext> */contexts);
 }
diff --git a/framework/src/main/java/org/osgi/framework/hooks/service/FindHook.java b/framework/src/main/java/org/osgi/framework/hooks/service/FindHook.java
index 2d3af3b..af6ac84 100644
--- a/framework/src/main/java/org/osgi/framework/hooks/service/FindHook.java
+++ b/framework/src/main/java/org/osgi/framework/hooks/service/FindHook.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2000, 2009). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2008 2009). 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.
@@ -13,16 +13,51 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 package org.osgi.framework.hooks.service;
 
 import java.util.Collection;
 
 import org.osgi.framework.BundleContext;
 
+/**
+ * OSGi Framework Service Find Hook Service.
+ * 
+ * <p>
+ * Bundles registering this service will be called during framework service find
+ * (get service references) operations.
+ * 
+ * @ThreadSafe
+ * @version $Revision: 6211 $
+ */
+
 public interface FindHook {
-    void find(BundleContext context, 
-              String name, 
-              String filter, 
-              boolean allServices, 
-              Collection /* <? extends ServiceReference> */ references);
+	/**
+	 * Find hook method. This method is called during the service find operation
+	 * (for example, {@link BundleContext#getServiceReferences(String, String)}
+	 * ). This method can filter the result of the find operation.
+	 * 
+	 * @param context The bundle context of the bundle performing the find
+	 *        operation.
+	 * @param name The class name of the services to find or <code>null</code>
+	 *        to find all services.
+	 * @param filter The filter criteria of the services to find or
+	 *        <code>null</code> for no filter criteria.
+	 * @param allServices <code>true</code> if the find operation is the result
+	 *        of a call to
+	 *        {@link BundleContext#getAllServiceReferences(String, String)}
+	 * @param references A <code>Collection</code> of Service References to be
+	 *        returned as a result of the find operation. The implementation of
+	 *        this method may remove service references from the collection to
+	 *        prevent the references from being returned to the bundle
+	 *        performing the find operation. The collection supports all the
+	 *        optional <code>Collection</code> operations except
+	 *        <code>add</code> and <code>addAll</code>. Attempting to add to the
+	 *        collection will result in an
+	 *        <code>UnsupportedOperationException</code>. The collection is not
+	 *        synchronized.
+	 */
+	void find(BundleContext context, String name, String filter,
+			boolean allServices,
+			Collection/* <? extends ServiceReference> */references);
 }
diff --git a/framework/src/main/java/org/osgi/framework/hooks/service/ListenerHook.java b/framework/src/main/java/org/osgi/framework/hooks/service/ListenerHook.java
index 62e2a75..cbda320 100644
--- a/framework/src/main/java/org/osgi/framework/hooks/service/ListenerHook.java
+++ b/framework/src/main/java/org/osgi/framework/hooks/service/ListenerHook.java
@@ -1,37 +1,134 @@
 /*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
+ * Copyright (c) OSGi Alliance (2008, 2009). 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
+ *      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.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
+
 package org.osgi.framework.hooks.service;
 
 import java.util.Collection;
 
 import org.osgi.framework.BundleContext;
 
-public interface ListenerHook
-{
-    public static interface ListenerInfo
-    {
-        BundleContext getBundleContext();
+/**
+ * OSGi Framework Service Listener Hook Service.
+ * 
+ * <p>
+ * Bundles registering this service will be called during service listener
+ * addition and removal.
+ * 
+ * @ThreadSafe
+ * @version $Revision: 6405 $
+ */
 
-        String getFilter();
-    }
+public interface ListenerHook {
+	/**
+	 * Added listeners hook method. This method is called to provide the hook
+	 * implementation with information on newly added service listeners. This
+	 * method will be called as service listeners are added while this hook is
+	 * registered. Also, immediately after registration of this hook, this
+	 * method will be called to provide the current collection of service
+	 * listeners which had been added prior to the hook being registered.
+	 * 
+	 * @param listeners A collection of {@link ListenerInfo}s for newly added
+	 *        service listeners which are now listening to service events.
+	 *        Attempting to add to or remove from the collection will result in
+	 *        an <code>UnsupportedOperationException</code>. The collection is
+	 *        not synchronized.
+	 */
+	void added(Collection/* <? extends ListenerInfo> */listeners);
 
-    void added(Collection /* <? extends ListenerInfo> */ listeners);
+	/**
+	 * Removed listeners hook method. This method is called to provide the hook
+	 * implementation with information on newly removed service listeners. This
+	 * method will be called as service listeners are removed while this hook is
+	 * registered.
+	 * 
+	 * @param listeners A collection of {@link ListenerInfo}s for newly removed
+	 *        service listeners which are no longer listening to service events.
+	 *        Attempting to add to or remove from the collection will result in
+	 *        an <code>UnsupportedOperationException</code>. The collection is
+	 *        not synchronized.
+	 */
+	void removed(Collection/* <? extends ListenerInfo> */listeners);
 
-    void removed(Collection /* <? extends ListenerInfo> */ listener);
-}
\ No newline at end of file
+	/**
+	 * Information about a Service Listener. This interface describes the bundle
+	 * which added the Service Listener and the filter with which it was added.
+	 * 
+	 * @ThreadSafe
+	 */
+	public interface ListenerInfo {
+		/**
+		 * Return the context of the bundle which added the listener.
+		 * 
+		 * @return The context of the bundle which added the listener.
+		 */
+		BundleContext getBundleContext();
+
+		/**
+		 * Return the filter string with which the listener was added.
+		 * 
+		 * @return The filter string with which the listener was added. This may
+		 *         be <code>null</code> if the listener was added without a
+		 *         filter.
+		 */
+		String getFilter();
+
+		/**
+		 * Return the state of the listener for this addition and removal life
+		 * cycle. Initially this method will return <code>false</code>
+		 * indicating the listener has been added but has not been removed.
+		 * After the listener has been removed, this method must always return
+		 * <code>true</code>.
+		 * 
+		 * <p>
+		 * There is an extremely rare case in which removed notification to
+		 * {@link ListenerHook}s can be made before added notification if two
+		 * threads are racing to add and remove the same service listener.
+		 * Because {@link ListenerHook}s are called synchronously during service
+		 * listener addition and removal, the Framework cannot guarantee
+		 * in-order delivery of added and removed notification for a given
+		 * service listener. This method can be used to detect this rare
+		 * occurrence.
+		 * 
+		 * @return <code>false</code> if the listener has not been been removed,
+		 *         <code>true</code> otherwise.
+		 */
+		boolean isRemoved();
+
+		/**
+		 * Compares this <code>ListenerInfo</code> to another
+		 * <code>ListenerInfo</code>. Two <code>ListenerInfo</code>s are equals
+		 * if they refer to the same listener for a given addition and removal
+		 * life cycle. If the same listener is added again, it must have a
+		 * different <code>ListenerInfo</code> which is not equal to this
+		 * <code>ListenerInfo</code>.
+		 * 
+		 * @param obj The object to compare against this
+		 *        <code>ListenerInfo</code>.
+		 * @return <code>true</code> if the other object is a
+		 *         <code>ListenerInfo</code> object and both objects refer to
+		 *         the same listener for a given addition and removal life
+		 *         cycle.
+		 */
+		boolean equals(Object obj);
+
+		/**
+		 * Returns the hash code for this <code>ListenerInfo</code>.
+		 * 
+		 * @return The hash code of this <code>ListenerInfo</code>.
+		 */
+		int hashCode();
+	}
+}
diff --git a/framework/src/main/java/org/osgi/framework/hooks/service/package.html b/framework/src/main/java/org/osgi/framework/hooks/service/package.html
new file mode 100644
index 0000000..46d18ac
--- /dev/null
+++ b/framework/src/main/java/org/osgi/framework/hooks/service/package.html
@@ -0,0 +1,11 @@
+<!-- $Revision: 6211 $ -->
+<BODY>
+<p>Framework Service Hooks Package Version 1.0.
+<p>Bundles wishing to use this package must list the package
+in the Import-Package header of the bundle's manifest.
+For example:
+<pre>
+Import-Package: org.osgi.framework.hooks.service;version=&quot;[1.0,2.0)&quot;
+</pre>
+</BODY>
+
diff --git a/framework/src/main/java/org/osgi/framework/hooks/service/packageinfo b/framework/src/main/java/org/osgi/framework/hooks/service/packageinfo
new file mode 100644
index 0000000..7c8de03
--- /dev/null
+++ b/framework/src/main/java/org/osgi/framework/hooks/service/packageinfo
@@ -0,0 +1 @@
+version 1.0
diff --git a/framework/src/main/java/org/osgi/framework/launch/Framework.java b/framework/src/main/java/org/osgi/framework/launch/Framework.java
index 4174e86..f7618aa 100644
--- a/framework/src/main/java/org/osgi/framework/launch/Framework.java
+++ b/framework/src/main/java/org/osgi/framework/launch/Framework.java
@@ -32,7 +32,7 @@
  * instance.
  * 
  * @ThreadSafe
- * @version $Revision: 6361 $
+ * @version $Revision: 6542 $
  */
 public interface Framework extends Bundle {
 
@@ -104,8 +104,9 @@
 	 *         encountered an error while shutting down or an error has occurred
 	 *         which forced the framework to shutdown. </li>
 	 * 
-	 *         <li> {@link FrameworkEvent#INFO INFO} - This method has timed out
-	 *         and returned before this Framework has stopped.</li>
+	 *         <li> {@link FrameworkEvent#WAIT_TIMEDOUT WAIT_TIMEDOUT} - This
+	 *         method has timed out and returned before this Framework has
+	 *         stopped.</li>
 	 *         </ul>
 	 * @throws InterruptedException If another thread interrupted the current
 	 *         thread before or while the current thread was waiting for this