diff --git a/scr/bnd.bnd b/scr/bnd.bnd
index 6844fb4..d618109 100644
--- a/scr/bnd.bnd
+++ b/scr/bnd.bnd
@@ -12,7 +12,7 @@
 
 Export-Package: org.apache.felix.scr;version=2.0, \
  org.apache.felix.scr.component;version=1.1.0;mandatory:="status"; status="provisional", \
- org.osgi.service.component;version=1.3, \
+ org.osgi.service.component;version=1.3;-split-package:=first, \
  org.osgi.service.component.runtime.*;version=1.3, \
  org.osgi.dto;version=1.0, \
  org.osgi.framework.dto;version=1.8, \
@@ -20,7 +20,7 @@
  org.osgi.util.promise;version=1.0
 
 Private-Package: org.apache.felix.scr.impl.*, \
- org.osgi.util.tracker, \
+ org.osgi.util.tracker;-split-package:=first, \
  org.apache.felix.utils.extender
 
 #  Configuration Admin is optional and dynamic, but allow eager wiring by importing it
diff --git a/scr/src/main/java/org/osgi/service/component/ComponentConstants.java b/scr/src/main/java/org/osgi/service/component/ComponentConstants.java
new file mode 100644
index 0000000..c8d3fa1
--- /dev/null
+++ b/scr/src/main/java/org/osgi/service/component/ComponentConstants.java
@@ -0,0 +1,126 @@
+/*
+ * Copyright (c) OSGi Alliance (2004, 2014). 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.component;
+
+import org.osgi.annotation.versioning.ProviderType;
+
+/**
+ * Defines standard names for Service Component constants.
+ * 
+ * @author $Id: 93b7c4e0215afc23d3f2dce477cdf4298fd366a4 $
+ */
+@ProviderType
+public interface ComponentConstants {
+	/**
+	 * Manifest header specifying the XML documents within a bundle that contain
+	 * the bundle's Service Component descriptions.
+	 * <p>
+	 * The attribute value may be retrieved from the {@code Dictionary} object
+	 * returned by the {@code Bundle.getHeaders} method.
+	 */
+	public static final String	SERVICE_COMPONENT							= "Service-Component";
+
+	/**
+	 * A component property for a component configuration that contains the name
+	 * of the component as specified in the {@code name} attribute of the
+	 * {@code component} element. The value of this property must be of type
+	 * {@code String}.
+	 */
+	public final static String	COMPONENT_NAME								= "component.name";
+
+	/**
+	 * A component property that contains the generated id for a component
+	 * configuration. The value of this property must be of type {@code Long}.
+	 * 
+	 * <p>
+	 * The value of this property is assigned by Service Component Runtime when
+	 * a component configuration is created. Service Component Runtime assigns a
+	 * unique value that is larger than all previously assigned values since
+	 * Service Component Runtime was started. These values are NOT persistent
+	 * across restarts of Service Component Runtime.
+	 */
+	public final static String	COMPONENT_ID								= "component.id";
+
+	/**
+	 * A service registration property for a Component Factory that contains the
+	 * value of the {@code factory} attribute. The value of this property must
+	 * be of type {@code String}.
+	 */
+	public final static String	COMPONENT_FACTORY							= "component.factory";
+
+	/**
+	 * The suffix for reference target properties. These properties contain the
+	 * filter to select the target services for a reference. The value of this
+	 * property must be of type {@code String}.
+	 */
+	public final static String	REFERENCE_TARGET_SUFFIX						= ".target";
+
+	/**
+	 * The reason the component configuration was deactivated is unspecified.
+	 * 
+	 * @since 1.1
+	 */
+	public static final int		DEACTIVATION_REASON_UNSPECIFIED				= 0;
+
+	/**
+	 * The component configuration was deactivated because the component was
+	 * disabled.
+	 * 
+	 * @since 1.1
+	 */
+	public static final int		DEACTIVATION_REASON_DISABLED				= 1;
+
+	/**
+	 * The component configuration was deactivated because a reference became
+	 * unsatisfied.
+	 * 
+	 * @since 1.1
+	 */
+	public static final int		DEACTIVATION_REASON_REFERENCE				= 2;
+
+	/**
+	 * The component configuration was deactivated because its configuration was
+	 * changed.
+	 * 
+	 * @since 1.1
+	 */
+	public static final int		DEACTIVATION_REASON_CONFIGURATION_MODIFIED	= 3;
+
+	/**
+	 * The component configuration was deactivated because its configuration was
+	 * deleted.
+	 * 
+	 * @since 1.1
+	 */
+	public static final int		DEACTIVATION_REASON_CONFIGURATION_DELETED	= 4;
+
+	/**
+	 * The component configuration was deactivated because the component was
+	 * disposed.
+	 * 
+	 * @since 1.1
+	 */
+	public static final int		DEACTIVATION_REASON_DISPOSED				= 5;
+
+	/**
+	 * The component configuration was deactivated because the bundle was
+	 * stopped.
+	 * 
+	 * @since 1.1
+	 */
+	public static final int		DEACTIVATION_REASON_BUNDLE_STOPPED			= 6;
+}
diff --git a/scr/src/main/java/org/osgi/service/component/ComponentContext.java b/scr/src/main/java/org/osgi/service/component/ComponentContext.java
new file mode 100644
index 0000000..f0839c7
--- /dev/null
+++ b/scr/src/main/java/org/osgi/service/component/ComponentContext.java
@@ -0,0 +1,201 @@
+/*
+ * Copyright (c) OSGi Alliance (2004, 2014). 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.component;
+
+import java.util.Dictionary;
+import org.osgi.annotation.versioning.ProviderType;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+
+/**
+ * A Component Context object is used by a component instance to interact with
+ * its execution context including locating services by reference name. Each
+ * component instance has a unique Component Context.
+ * 
+ * <p>
+ * A component instance may have an activate method. If a component instance has
+ * a suitable and accessible activate method, this method will be called when a
+ * component configuration is activated. If the activate method takes a
+ * {@code ComponentContext} argument, it will be passed the component instance's
+ * Component Context object. If the activate method takes a
+ * {@code BundleContext} argument, it will be passed the component instance's
+ * Bundle Context object. If the activate method takes a {@code Map} argument,
+ * it will be passed an unmodifiable Map containing the component properties.
+ * 
+ * <p>
+ * A component instance may have a deactivate method. If a component instance
+ * has a suitable and accessible deactivate method, this method will be called
+ * when the component configuration is deactivated. If the deactivate method
+ * takes a {@code ComponentContext} argument, it will be passed the component
+ * instance's Component Context object. If the deactivate method takes a
+ * {@code BundleContext} argument, it will be passed the component instance's
+ * Bundle Context object. If the deactivate method takes a {@code Map} argument,
+ * it will be passed an unmodifiable Map containing the component properties. If
+ * the deactivate method takes an {@code int} or {@code Integer} argument, it
+ * will be passed the reason code for the component instance's deactivation.
+ * 
+ * @ThreadSafe
+ * @author $Id: 8d2c1ae7d15b9ae109ce4e3e1b0dfae987d137e0 $
+ */
+@ProviderType
+public interface ComponentContext {
+	/**
+	 * Returns the component properties for this Component Context.
+	 * 
+	 * @return The properties for this Component Context. The Dictionary is read
+	 *         only and cannot be modified.
+	 */
+	public Dictionary<String, Object> getProperties();
+
+	/**
+	 * Returns the service object for the specified reference name.
+	 * 
+	 * <p>
+	 * If the cardinality of the reference is {@code 0..n} or {@code 1..n} and
+	 * multiple services are bound to the reference, the service with the
+	 * highest ranking (as specified in its {@code Constants.SERVICE_RANKING}
+	 * property) is returned. If there is a tie in ranking, the service with the
+	 * lowest service id (as specified in its {@code Constants.SERVICE_ID}
+	 * property); that is, the service that was registered first is returned.
+	 * 
+	 * @param name The name of a reference as specified in a {@code reference}
+	 *        element in this component's description.
+	 * @return A service object for the referenced service or {@code null} if
+	 *         the reference cardinality is {@code 0..1} or {@code 0..n} and no
+	 *         bound service is available.
+	 * @throws ComponentException If Service Component Runtime catches an
+	 *         exception while activating the bound service.
+	 */
+	public Object locateService(String name);
+
+	/**
+	 * Returns the service object for the specified reference name and
+	 * {@code ServiceReference}.
+	 * 
+	 * @param <S> Type of Service.
+	 * @param name The name of a reference as specified in a {@code reference}
+	 *        element in this component's description.
+	 * @param reference The {@code ServiceReference} to a bound service. This
+	 *        must be a {@code ServiceReference} provided to the component via
+	 *        the bind or unbind method for the specified reference name.
+	 * @return A service object for the referenced service or {@code null} if
+	 *         the specified {@code ServiceReference} is not a bound service for
+	 *         the specified reference name.
+	 * @throws ComponentException If Service Component Runtime catches an
+	 *         exception while activating the bound service.
+	 */
+	public <S> S locateService(String name, ServiceReference<S> reference);
+
+	/**
+	 * Returns the service objects for the specified reference name.
+	 * 
+	 * @param name The name of a reference as specified in a {@code reference}
+	 *        element in this component's description.
+	 * @return An array of service objects for the referenced service or
+	 *         {@code null} if the reference cardinality is {@code 0..1} or
+	 *         {@code 0..n} and no bound service is available. If the reference
+	 *         cardinality is {@code 0..1} or {@code 1..1} and a bound service
+	 *         is available, the array will have exactly one element.
+	 * @throws ComponentException If Service Component Runtime catches an
+	 *         exception while activating a bound service.
+	 */
+	public Object[] locateServices(String name);
+
+	/**
+	 * Returns the {@code BundleContext} of the bundle which contains this
+	 * component.
+	 * 
+	 * @return The {@code BundleContext} of the bundle containing this
+	 *         component.
+	 */
+	public BundleContext getBundleContext();
+
+	/**
+	 * If the component instance is registered as a service using the
+	 * {@code servicescope="bundle"} or {@code servicescope="prototype"}
+	 * attribute, then this method returns the bundle using the service provided
+	 * by the component instance.
+	 * <p>
+	 * This method will return {@code null} if:
+	 * <ul>
+	 * <li>The component instance is not a service, then no bundle can be using
+	 * it as a service.</li>
+	 * <li>The component instance is a service but did not specify the
+	 * {@code servicescope="bundle"} or {@code servicescope="prototype"}
+	 * attribute, then all bundles using the service provided by the component
+	 * instance will share the same component instance.</li>
+	 * <li>The service provided by the component instance is not currently being
+	 * used by any bundle.</li>
+	 * </ul>
+	 * 
+	 * @return The bundle using the component instance as a service or
+	 *         {@code null}.
+	 */
+	public Bundle getUsingBundle();
+
+	/**
+	 * Returns the Component Instance object for the component instance
+	 * associated with this Component Context.
+	 * 
+	 * @return The Component Instance object for the component instance.
+	 */
+	public ComponentInstance getComponentInstance();
+
+	/**
+	 * Enables the specified component name. The specified component name must
+	 * be in the same bundle as this component.
+	 * 
+	 * <p>
+	 * This method must return after changing the enabled state of the specified
+	 * component name. Any actions that result from this, such as activating or
+	 * deactivating a component configuration, must occur asynchronously to this
+	 * method call.
+	 * 
+	 * @param name The name of a component or {@code null} to indicate all
+	 *        components in the bundle.
+	 */
+	public void enableComponent(String name);
+
+	/**
+	 * Disables the specified component name. The specified component name must
+	 * be in the same bundle as this component.
+	 * 
+	 * <p>
+	 * This method must return after changing the enabled state of the specified
+	 * component name. Any actions that result from this, such as activating or
+	 * deactivating a component configuration, must occur asynchronously to this
+	 * method call.
+	 * 
+	 * @param name The name of a component.
+	 */
+	public void disableComponent(String name);
+
+	/**
+	 * If the component instance is registered as a service using the
+	 * {@code service} element, then this method returns the service reference
+	 * of the service provided by this component instance.
+	 * <p>
+	 * This method will return {@code null} if the component instance is not
+	 * registered as a service.
+	 * 
+	 * @return The {@code ServiceReference} object for the component instance or
+	 *         {@code null} if the component instance is not registered as a
+	 *         service.
+	 */
+	public ServiceReference<?> getServiceReference();
+}
diff --git a/scr/src/main/java/org/osgi/service/component/ComponentException.java b/scr/src/main/java/org/osgi/service/component/ComponentException.java
new file mode 100644
index 0000000..8b2aaab
--- /dev/null
+++ b/scr/src/main/java/org/osgi/service/component/ComponentException.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) OSGi Alliance (2004, 2014). 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.component;
+
+/**
+ * Unchecked exception which may be thrown by Service Component Runtime.
+ * 
+ * @author $Id: 6b47774608ff37a2076b9f58090509093314a67a $
+ */
+public class ComponentException extends RuntimeException {
+	static final long	serialVersionUID	= -7438212656298726924L;
+
+	/**
+	 * Construct a new ComponentException with the specified message and cause.
+	 * 
+	 * @param message The message for the exception.
+	 * @param cause The cause of the exception. May be {@code null}.
+	 */
+	public ComponentException(String message, Throwable cause) {
+		super(message, cause);
+	}
+
+	/**
+	 * Construct a new ComponentException with the specified message.
+	 * 
+	 * @param message The message for the exception.
+	 */
+	public ComponentException(String message) {
+		super(message);
+	}
+
+	/**
+	 * Construct a new ComponentException with the specified cause.
+	 * 
+	 * @param cause The cause of the exception. May be {@code null}.
+	 */
+	public ComponentException(Throwable cause) {
+		super(cause);
+	}
+
+	/**
+	 * Returns the cause of this exception or {@code null} if no cause was set.
+	 * 
+	 * @return The cause of this exception or {@code null} if no cause was set.
+	 */
+	@Override
+	public Throwable getCause() {
+		return super.getCause();
+	}
+
+	/**
+	 * Initializes the cause of this exception to the specified value.
+	 * 
+	 * @param cause The cause of this exception.
+	 * @return This exception.
+	 * @throws IllegalArgumentException If the specified cause is this
+	 *         exception.
+	 * @throws IllegalStateException If the cause of this exception has already
+	 *         been set.
+	 */
+	@Override
+	public Throwable initCause(Throwable cause) {
+		return super.initCause(cause);
+	}
+}
diff --git a/scr/src/main/java/org/osgi/service/component/ComponentFactory.java b/scr/src/main/java/org/osgi/service/component/ComponentFactory.java
new file mode 100644
index 0000000..ca74a7a
--- /dev/null
+++ b/scr/src/main/java/org/osgi/service/component/ComponentFactory.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) OSGi Alliance (2004, 2014). 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.component;
+
+import java.util.Dictionary;
+import org.osgi.annotation.versioning.ProviderType;
+
+/**
+ * When a component is declared with the {@code factory} attribute on its
+ * {@code component} element, Service Component Runtime will register a
+ * Component Factory service to allow new component configurations to be created
+ * and activated rather than automatically creating and activating component
+ * configuration as necessary.
+ * 
+ * @ThreadSafe
+ * @author $Id: a6422fc517a31533b1188d5ab9d9ee95a7a52c8a $
+ */
+@ProviderType
+public interface ComponentFactory {
+	/**
+	 * Create and activate a new component configuration. Additional properties
+	 * may be provided for the component configuration.
+	 * 
+	 * @param properties Additional properties for the component configuration
+	 *        or {@code null} if there are no additional properties.
+	 * @return A {@code ComponentInstance} object encapsulating the component
+	 *         instance of the component configuration. The component
+	 *         configuration has been activated and, if the component specifies
+	 *         a {@code service} element, the component instance has been
+	 *         registered as a service.
+	 * @throws ComponentException If Service Component Runtime is unable to
+	 *         activate the component configuration.
+	 */
+	public ComponentInstance newInstance(Dictionary<String, ?> properties);
+}
diff --git a/scr/src/main/java/org/osgi/service/component/ComponentInstance.java b/scr/src/main/java/org/osgi/service/component/ComponentInstance.java
new file mode 100644
index 0000000..c45e075
--- /dev/null
+++ b/scr/src/main/java/org/osgi/service/component/ComponentInstance.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) OSGi Alliance (2004, 2013). 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.component;
+
+import org.osgi.annotation.versioning.ProviderType;
+
+/**
+ * A ComponentInstance encapsulates a component instance of an activated
+ * component configuration. ComponentInstances are created whenever a component
+ * configuration is activated.
+ * 
+ * <p>
+ * ComponentInstances are never reused. A new ComponentInstance object will be
+ * created when the component configuration is activated again.
+ * 
+ * @ThreadSafe
+ * @author $Id: 8078babdd771f18831a54bfaa407e4edd2781552 $
+ */
+@ProviderType
+public interface ComponentInstance {
+	/**
+	 * Dispose of the component configuration for this component instance. The
+	 * component configuration will be deactivated. If the component
+	 * configuration has already been deactivated, this method does nothing.
+	 */
+	public void dispose();
+
+	/**
+	 * Returns the component instance of the activated component configuration.
+	 * 
+	 * @return The component instance or {@code null} if the component
+	 *         configuration has been deactivated.
+	 */
+	public Object getInstance();
+}
diff --git a/scr/src/main/java/org/osgi/service/component/ComponentServiceObjects.java b/scr/src/main/java/org/osgi/service/component/ComponentServiceObjects.java
new file mode 100644
index 0000000..62cabcb
--- /dev/null
+++ b/scr/src/main/java/org/osgi/service/component/ComponentServiceObjects.java
@@ -0,0 +1,95 @@
+/*
+ * Copyright (c) OSGi Alliance (2012, 2014). 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.component;
+
+import org.osgi.annotation.versioning.ProviderType;
+import org.osgi.framework.Constants;
+import org.osgi.framework.ServiceObjects;
+import org.osgi.framework.ServiceReference;
+
+/**
+ * Allows multiple service objects for a service to be obtained.
+ * 
+ * <p>
+ * A component instance can receive a {@code ComponentServiceObjects} object via
+ * a reference that is typed {@code ComponentServiceObjects}.
+ * 
+ * <p>
+ * For services with {@link Constants#SCOPE_PROTOTYPE prototype} scope, multiple
+ * service objects for the service can be obtained. For services with
+ * {@link Constants#SCOPE_SINGLETON singleton} or {@link Constants#SCOPE_BUNDLE
+ * bundle} scope, only one, use-counted service object is available.
+ * 
+ * <p>
+ * Any unreleased service objects obtained from this
+ * {@code ComponentServiceObjects} object are automatically released by Service
+ * Component Runtime when the service becomes unbound.
+ * 
+ * @param <S> Type of Service
+ * @ThreadSafe
+ * @since 1.3
+ * @see ServiceObjects
+ * @author $Id: 49fc5e86384324c73b412d8b733f715f8b55d4d6 $
+ */
+@ProviderType
+public interface ComponentServiceObjects<S> {
+	/**
+	 * Returns a service object for the {@link #getServiceReference()
+	 * associated} service.
+	 * 
+	 * <p>
+	 * This method will always return {@code null} when the associated service
+	 * has been become unbound.
+	 * 
+	 * @return A service object for the associated service or {@code null} if
+	 *         the service is unbound, the customized service object returned by
+	 *         a {@code ServiceFactory} does not implement the classes under
+	 *         which it was registered or the {@code ServiceFactory} threw an
+	 *         exception.
+	 * @throws IllegalStateException If the associated service has been become
+	 *         unbound.
+	 * @see #ungetService(Object)
+	 */
+	public S getService();
+
+	/**
+	 * Releases a service object for the {@link #getServiceReference()
+	 * associated} service.
+	 * 
+	 * <p>
+	 * The specified service object must no longer be used and all references to
+	 * it should be destroyed after calling this method.
+	 * 
+	 * @param service A service object previously provided by this
+	 *        {@code ComponentServiceObjects} object.
+	 * @throws IllegalStateException If the associated service has been become
+	 *         unbound.
+	 * @throws IllegalArgumentException If the specified service object was not
+	 *         provided by this {@code ComponentServiceObjects} object.
+	 * @see #getService()
+	 */
+	public void ungetService(S service);
+
+	/**
+	 * Returns the {@link ServiceReference} for the service associated with this
+	 * {@code ComponentServiceObjects} object.
+	 * 
+	 * @return The {@link ServiceReference} for the service associated with this
+	 *         {@code ComponentServiceObjects} object.
+	 */
+	public ServiceReference<S> getServiceReference();
+}
diff --git a/scr/src/main/java/org/osgi/service/component/package-info.java b/scr/src/main/java/org/osgi/service/component/package-info.java
new file mode 100644
index 0000000..010a246
--- /dev/null
+++ b/scr/src/main/java/org/osgi/service/component/package-info.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) OSGi Alliance (2010, 2013). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Service Component Package Version 1.3.
+ *
+ * <p>
+ * Bundles wishing to use this package must list the package in the
+ * Import-Package header of the bundle's manifest. This package has two types of
+ * users: the consumers that use the API in this package and the providers that
+ * implement the API in this package.
+ *
+ * <p>
+ * Example import for consumers using the API in this package:
+ * <p>
+ * {@code  Import-Package: org.osgi.service.component; version="[1.3,2.0)"}
+ * <p>
+ * Example import for providers implementing the API in this package:
+ * <p>
+ * {@code  Import-Package: org.osgi.service.component; version="[1.3,1.4)"}
+ *
+ * @author $Id: 9c158e8fb0f0512b3fbfb759fc06ed54afc0d8b0 $
+ */
+
+@Version("1.3")
+package org.osgi.service.component;
+
+import org.osgi.annotation.versioning.Version;
+
diff --git a/scr/src/main/java/org/osgi/service/component/runtime/ServiceComponentRuntime.java b/scr/src/main/java/org/osgi/service/component/runtime/ServiceComponentRuntime.java
index b34a4ba..d71024c 100755
--- a/scr/src/main/java/org/osgi/service/component/runtime/ServiceComponentRuntime.java
+++ b/scr/src/main/java/org/osgi/service/component/runtime/ServiceComponentRuntime.java
@@ -26,16 +26,17 @@
 
 /**
  * The {@code ServiceComponentRuntime} service represents the Declarative
- * Services main controller also known as the Service Component Runtime or SCR
- * for short. It provides access to the components managed by the Service
- * Component Runtime.
+ * Services actor, known as Service Component Runtime (SCR), that manages the
+ * service components and their life cycle. The {@code ServiceComponentRuntime}
+ * service allows introspection of the components managed by Service Component
+ * Runtime.
  * 
  * <p>
  * This service differentiates between a {@link ComponentDescriptionDTO} and a
  * {@link ComponentConfigurationDTO}. A {@link ComponentDescriptionDTO} is a
  * representation of a declared component description. A
- * {@link ComponentConfigurationDTO} is a representation of an actual instance of a
- * declared component description parameterized by component properties.
+ * {@link ComponentConfigurationDTO} is a representation of an actual instance
+ * of a declared component description parameterized by component properties.
  * <p>
  * 
  * Access to this service requires the
@@ -46,7 +47,7 @@
  * 
  * @ThreadSafe
  * @since 1.3
- * @author $Id: 2b9c69ef323cb6b4be2601f893bea8505c984980 $
+ * @author $Id: 59760dcd57f2162574cfd0c7f3a393825566e78f $
  */
 @ProviderType
 public interface ServiceComponentRuntime {
