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 {
