diff --git a/dependencymanager/annotation/src/main/java/org/apache/felix/dm/annotation/api/BundleDependency.java b/dependencymanager/annotation/src/main/java/org/apache/felix/dm/annotation/api/BundleDependency.java
index c9911fa..80dd095 100644
--- a/dependencymanager/annotation/src/main/java/org/apache/felix/dm/annotation/api/BundleDependency.java
+++ b/dependencymanager/annotation/src/main/java/org/apache/felix/dm/annotation/api/BundleDependency.java
@@ -62,4 +62,14 @@
      * the service properties.
      */
     boolean propagate() default false;
+    
+    /**
+     * The name used when dynamically configuring this dependency from the init method.
+     * Specifying this attribute allows to dynamically configure the dependency 
+     * <code>filter</code> and <code>required</code> flag from the Service's init method.
+     * All unnamed dependencies will be injected before the init() method; so from the init() method, you can
+     * then pick up whatever information needed from already injected (unnamed) dependencies, and configure dynamically
+     * your named dependencies, which will then be calculated once the init() method returns.
+     */
+    String name() default "";
 }
diff --git a/dependencymanager/annotation/src/main/java/org/apache/felix/dm/annotation/api/Component.java b/dependencymanager/annotation/src/main/java/org/apache/felix/dm/annotation/api/Component.java
new file mode 100644
index 0000000..d2aa55c
--- /dev/null
+++ b/dependencymanager/annotation/src/main/java/org/apache/felix/dm/annotation/api/Component.java
@@ -0,0 +1,180 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.felix.dm.annotation.api;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Annotates an OSGi Component class with its dependencies. Components are the main building 
+ * blocks for OSGi applications. They can publish themselves as a service, and/or they can have 
+ * dependencies. These dependencies will influence their life cycle as component will only be 
+ * activated when all required dependencies are available. 
+ * By default, all directly implemented interfaces are registered into the OSGi registry,
+ * and the component is instantiated automatically, when the component bundle is started and 
+ * when the component dependencies are available. If you need to take control of when and how 
+ * much component instances must be created, then you can use the <code>factorySet</code> 
+ * annotation attribute.<p> 
+ * If a <code>factorySet</code> attribute is set, the component is not started automatically 
+ * during bundle startup, and a <code>java.util.Set&lt;Dictionary&gt;</code> 
+ * object is registered into the OSGi registry on behalf of the component. This Set will act 
+ * as a Factory API, and another component may use this Set and add some configuration 
+ * dictionaries in it, in order to fire some component activations (there is one component 
+ * instantiated per dictionary, which is passed to component instances via a configurable 
+ * callback method).
+ *
+ * <h3>Usage Examples</h3>
+ * 
+ * <p> Here is a sample showing a X component, which depends on a configuration dependency:<p>
+ * <blockquote>
+ * 
+ * <pre>
+ * &#47;**
+ *   * This component will be activated once the bundle is started and when all required dependencies
+ *   * are available.
+ *   *&#47;
+ * &#64;Component
+ * class X implements Z {
+ *     &#64;ConfigurationDependency(pid="MyPid")
+ *     void configure(Dictionary conf) {
+ *          // Configure or reconfigure our component.
+ *     }
+ *   
+ *     &#64;Start
+ *     void start() {
+ *         // Our component is starting and is about to be registered in the OSGi registry as a Z service.
+ *     }
+ *   
+ *     public void doService() {
+ *         // ...
+ *     }   
+ * }
+ * </pre>
+ * </blockquote>
+ * 
+ * Here is a sample showing how a Y component may dynamically instantiate several X component instances, 
+ * using the {@link #factorySet()} attribute:<p>
+ * <blockquote>
+ * 
+ * <pre>
+ *  &#47;**
+ *    * All component instances will be created/updated/removed by the "Y" component
+ *    *&#47;
+ *  &#64;Component(factorySet="MyComponentFactory", factoryConfigure="configure")
+ *  class X implements Z {                 
+ *      void configure(Dictionary conf) {
+ *          // Configure or reconfigure our component. The conf is provided by the factory,
+ *          // and all public properties (which don't start with a dot) are propagated with the
+ *          // service properties specified in the properties annotation attribute.
+ *      }
+ * 
+ *      &#64;ServiceDependency
+ *      void bindOtherService(OtherService other) {
+ *          // store this require dependency
+ *      }
+ *      
+ *      &#64;Start
+ *      void start() {
+ *          // Our component is starting and is about to be registered in the OSGi registry as a Z service.
+ *      } 
+ *      
+ *      public void doService() {
+ *          // ...
+ *      }   
+ *  }
+ * 
+ *  &#47;**
+ *    * This class will instantiate some X component instances
+ *    *&#47;
+ *  &#64;Component 
+ *  class Y {
+ *      &#64;ServiceDependency(filter="(dm.factory.name=MyComponentFactory)")
+ *      Set&lt;Dictionary&gt; _XFactory; // This Set acts as a Factory API for creating X component instances.
+ *    
+ *      &#64;Start
+ *      void start() {
+ *          // Instantiate a X component instance
+ *          Dictionary x1 = new Hashtable() {{ put("foo", "bar1"); }};
+ *          _XFactory.add(x1);
+ *      
+ *          // Instantiate another X component instance
+ *          Dictionary x2 = new Hashtable() {{ put("foo", "bar2"); }};
+ *          _XFactory.add(x2);
+ *      
+ *          // Update the first X component instance
+ *          x1.put("foo", "bar1_modified");
+ *          _XFactory.add(x1);
+ *      
+ *          // Destroy x1/x2 components (Notice that invoking XFactory.clear() will destroy all X component  instances).
+ *          _XFactory.remove(x1);
+ *          _XFactory.remove(x2); 
+ *      }
+ *  }
+ * </pre>
+ * 
+ * </blockquote>
+ */
+@Retention(RetentionPolicy.CLASS)
+@Target(ElementType.TYPE)
+public @interface Component
+{
+    /**
+     * Sets list of provided interfaces. By default, the directly implemented interfaces are provided.
+     */
+    Class<?>[] provides() default {};
+
+    /**
+     * Sets list of provided service properties.
+     */
+    Property[] properties() default {};
+
+    /**
+     * Returns the name of the <code>Factory Set</code> used to dynamically instantiate this component.
+     * When you set this attribute, a <code>java.util.Set&lt;java.lang.Dictionary&gt;</code> OSGi Service will 
+     * be provided with a <code>dm.factory.name</code> service property matching your specified <code>factorySet</code> attribute.
+     * This Set will be provided once the component bundle is started, even if required dependencies are not available, and the
+     * Set will be unregistered from the OSGi registry once the component bundle is stopped or being updated.<p>
+     * So, basically, another component may then be injected with this set in order to dynamically instantiate some component instances:
+     * <ul>
+     * <li> Each time a new Dictionary is added into the Set, then a new instance of the annotated component will be instantiated.</li>
+     * <li> Each time an existing Dictionary is re-added into the Set, then the corresponding component instance will be updated.</li>
+     * <li> Each time an existing Dictionary is removed from the Set, then the corresponding component instance will be destroyed.</li>
+     * </ul>
+     * 
+     * <p>The dictionary registered in the Set will be provided to the created component instance using a callback method that you can 
+     * optionally specify in the {@link Component#factoryConfigure()} attribute. Each public properties from that dictionary 
+     * (which don't start with a dot) will be propagated along with the annotated component service properties.
+     */
+    String factorySet() default "";
+
+    /**
+     * Sets "configure" callback method name to be called with the factory configuration. This attribute only makes sense if the 
+     * {@link #factorySet()} attribute is used. If specified, then this attribute references a callback method, which is called 
+     * for providing the configuration supplied by the factory that instantiated this component. The current component service properties will be 
+     * also updated with all public properties (which don't start with a dot).
+     */
+    String factoryConfigure() default "";
+    
+    /**
+     * Sets the static method used to create the components implementation instance.
+     */
+    String factoryMethod() default "";    
+}
diff --git a/dependencymanager/annotation/src/main/java/org/apache/felix/dm/annotation/api/Property.java b/dependencymanager/annotation/src/main/java/org/apache/felix/dm/annotation/api/Property.java
index c87d7e8..5c701a4 100644
--- a/dependencymanager/annotation/src/main/java/org/apache/felix/dm/annotation/api/Property.java
+++ b/dependencymanager/annotation/src/main/java/org/apache/felix/dm/annotation/api/Property.java
@@ -25,7 +25,7 @@
 
 /**
  * Annotation used to describe a property key-value pair. It is used when
- * declaring {@link Service#properties()} attribute.
+ * declaring {@link Component#properties()} attribute.
  */
 @Retention(RetentionPolicy.CLASS)
 @Target( { ElementType.ANNOTATION_TYPE })
diff --git a/dependencymanager/annotation/src/main/java/org/apache/felix/dm/annotation/api/ResourceDependency.java b/dependencymanager/annotation/src/main/java/org/apache/felix/dm/annotation/api/ResourceDependency.java
index 77090ee..43abe42 100644
--- a/dependencymanager/annotation/src/main/java/org/apache/felix/dm/annotation/api/ResourceDependency.java
+++ b/dependencymanager/annotation/src/main/java/org/apache/felix/dm/annotation/api/ResourceDependency.java
@@ -64,4 +64,14 @@
      * @return
      */
     boolean propagate() default false;
+    
+    /**
+     * The name used when dynamically configuring this dependency from the init method.
+     * Specifying this attribute allows to dynamically configure the dependency 
+     * <code>filter</code> and <code>required</code> flag from the Service's init method.
+     * All unnamed dependencies will be injected before the init() method; so from the init() method, you can
+     * then pick up whatever information needed from already injected (unnamed) dependencies, and configure dynamically
+     * your named dependencies, which will then be calculated once the init() method returns.
+     */
+    String name() default "";   
 }
diff --git a/dependencymanager/annotation/src/main/java/org/apache/felix/dm/annotation/api/Service.java b/dependencymanager/annotation/src/main/java/org/apache/felix/dm/annotation/api/Service.java
deleted file mode 100644
index 0c90c9c..0000000
--- a/dependencymanager/annotation/src/main/java/org/apache/felix/dm/annotation/api/Service.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.felix.dm.annotation.api;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Annotates an OSGi Service class with its dependencies. 
- * By default, all directly implemented interfaces are registered into the OSGi registry,
- * and the Service is instantiated automatically, when the Service' bundle is started and 
- * when the Service dependencies are available. If you need to take control of when and how 
- * much Service instances must be created, then you can use the <code>factorySet</code> 
- * Service attribute.<p> 
- * If a <code>factorySet</code> attribute is set, the Service is not started automatically 
- * during bundle startup, and a <code>java.util.Set&lt;Dictionary&gt;</code> 
- * object is registered into the OSGi registry on behalf of the Service. This Set will act 
- * as a Factory API, and another component may use this Set and add some configuration 
- * dictionaries in it, in order to fire some Service activations (there is one Service 
- * instantiated per dictionary, which is passed to Service instances via a configurable 
- * callback method).
- *
- * <h3>Usage Examples</h3>
- * 
- * <p> Here is a sample showing a X service, which depends on a configuration dependency:<p>
- * <blockquote>
- * 
- * <pre>
- * &#47;**
- *   * This Service will be activated once the bundle is started and when all required dependencies
- *   * are available.
- *   *&#47;
- * &#64;Service
- * class X implements Z {
- *     &#64;ConfigurationDependency(pid="MyPid")
- *     void configure(Dictionary conf) {
- *          // Configure or reconfigure our service.
- *     }
- *   
- *     &#64;Start
- *     void start() {
- *         // Our Service is starting and is about to be registered in the OSGi registry as a Z service.
- *     }
- *   
- *     public void doService() {
- *         // ...
- *     }   
- * }
- * </pre>
- * </blockquote>
- * 
- * Here is a sample showing how a Y service may dynamically instantiate several X Service instances, 
- * using the {@link #factorySet()} attribute:<p>
- * <blockquote>
- * 
- * <pre>
- *  &#47;**
- *    * All Service instances will be created/updated/removed by the "Y" Service
- *    *&#47;
- *  &#64;Service(factorySet="MyServiceFactory", factoryConfigure="configure")
- *  class X implements Z {                 
- *      void configure(Dictionary conf) {
- *          // Configure or reconfigure our service. The conf is provided by the factory,
- *          // and all public properties (which don't start with a dot) are propagated with the
- *          // Service properties specified in the properties's Service attribute.
- *      }
- * 
- *      &#64;ServiceDependency
- *      void bindOtherService(OtherService other) {
- *          // store this require dependency
- *      }
- *      
- *      &#64;Start
- *      void start() {
- *          // Our Service is starting and is about to be registered in the OSGi registry as a Z service.
- *      } 
- *      
- *      public void doService() {
- *          // ...
- *      }   
- *  }
- * 
- *  &#47;**
- *    * This class will instantiate some X Service instances
- *    *&#47;
- *  &#64;Service 
- *  class Y {
- *      &#64;ServiceDependency(filter="(dm.factory.name=MyServiceFactory)")
- *      Set&lt;Dictionary&gt; _XFactory; // This Set acts as a Factory API for creating X Service instances.
- *    
- *      &#64;Start
- *      void start() {
- *          // Instantiate a X Service instance
- *          Dictionary x1 = new Hashtable() {{ put("foo", "bar1"); }};
- *          _XFactory.add(x1);
- *      
- *          // Instantiate another X Service instance
- *          Dictionary x2 = new Hashtable() {{ put("foo", "bar2"); }};
- *          _XFactory.add(x2);
- *      
- *          // Update the first X Service instance
- *          x1.put("foo", "bar1_modified");
- *          _XFactory.add(x1);
- *      
- *          // Destroy X Services (Notice that invoking XFactory.clear() will destroy all X Service instances)
- *          _XFactory.remove(x1);
- *          _XFactory.remove(x2); 
- *      }
- *  }
- * </pre>
- * 
- * </blockquote>
- */
-@Retention(RetentionPolicy.CLASS)
-@Target(ElementType.TYPE)
-public @interface Service
-{
-    /**
-     * Sets list of provided interfaces. By default, the directly implemented interfaces are provided.
-     */
-    Class<?>[] provides() default {};
-
-    /**
-     * Sets list of provided service properties.
-     */
-    Property[] properties() default {};
-
-    /**
-     * Returns the name of the <code>Factory Set</code> used to dynamically instantiate this Service.
-     * When you set this attribute, a <code>java.util.Set&lt;java.lang.Dictionary&gt;</code> Service will 
-     * be provided with a <code>dm.factory.name</code> service property matching your specified <code>factorySet</code> attribute.
-     * This Set will be provided once the Service's bundle is started, even if required dependencies are not available, and the
-     * Set will be unregistered from the OSGi registry once the Service's bundle is stopped or being updated.<p>
-     * So, basically, another component may then be injected with this set in order to dynamically instantiate some Service instances:
-     * <ul>
-     * <li> Each time a new Dictionary is added into the Set, then a new instance of the annotated service will be instantiated.</li>
-     * <li> Each time an existing Dictionary is re-added into the Set, then the corresponding Service instance will be updated.</li>
-     * <li> Each time an existing Dictionary is removed from the Set, then the corresponding Service instance will be destroyed.</li>
-     * </ul>
-     * 
-     * <p>The dictionary registered in the Set will be provided to the created Service instance using a callback method that you can 
-     * optionally specify in the {@link Service#factoryConfigure()} attribute. Each public properties from that dictionary 
-     * (which don't start with a dot) will be propagated along with the annotated Service properties.
-     */
-    String factorySet() default "";
-
-    /**
-     * Sets "configure" callback method name to be called with the factory configuration. This attribute only makes sense if the 
-     * {@link #factorySet()} attribute is used. If specified, then this attribute references a Service callback method, which is called 
-     * for providing the configuration supplied by the factory that instantiated this Service. The current Service properties will be 
-     * also updated with all public properties (which don't start with a dot).
-     */
-    String factoryConfigure() default "";
-    
-    /**
-     * Sets the static method used to create the Service implementation instance.
-     */
-    String factoryMethod() default "";    
-}
diff --git a/dependencymanager/annotation/src/main/java/org/apache/felix/dm/annotation/plugin/bnd/AnnotationCollector.java b/dependencymanager/annotation/src/main/java/org/apache/felix/dm/annotation/plugin/bnd/AnnotationCollector.java
index 897f26f..ec5fd7d 100644
--- a/dependencymanager/annotation/src/main/java/org/apache/felix/dm/annotation/plugin/bnd/AnnotationCollector.java
+++ b/dependencymanager/annotation/src/main/java/org/apache/felix/dm/annotation/plugin/bnd/AnnotationCollector.java
@@ -39,7 +39,7 @@
 import org.apache.felix.dm.annotation.api.LifecycleController;
 import org.apache.felix.dm.annotation.api.ResourceAdapterService;
 import org.apache.felix.dm.annotation.api.ResourceDependency;
-import org.apache.felix.dm.annotation.api.Service;
+import org.apache.felix.dm.annotation.api.Component;
 import org.apache.felix.dm.annotation.api.ServiceDependency;
 import org.apache.felix.dm.annotation.api.Start;
 import org.apache.felix.dm.annotation.api.Stop;
@@ -64,7 +64,7 @@
     private final static String A_COMPOSITION = "L" + Composition.class.getName().replace('.', '/') + ";";
     private final static String A_LIFCLE_CTRL = "L" + LifecycleController.class.getName().replace('.', '/')+ ";";
 
-    private final static String A_SERVICE = "L" + Service.class.getName().replace('.', '/') + ";";
+    private final static String A_COMPONENT = "L" + Component.class.getName().replace('.', '/') + ";";
     private final static String A_SERVICE_DEP = "L" + ServiceDependency.class.getName().replace('.', '/') + ";";
     private final static String A_CONFIGURATION_DEPENDENCY = "L" + ConfigurationDependency.class.getName().replace('.', '/') + ";";
     private final static String A_BUNDLE_DEPENDENCY = "L" + BundleDependency.class.getName().replace('.', '/') + ";";
@@ -177,9 +177,9 @@
     {
         m_reporter.trace("Parsed annotation: %s", annotation);
 
-        if (annotation.getName().equals(A_SERVICE))
+        if (annotation.getName().equals(A_COMPONENT))
         {
-            parseServiceAnnotation(annotation);
+            parseComponentAnnotation(annotation);
         }
         else if (annotation.getName().equals(A_ASPECT_SERVICE))
         {
@@ -243,13 +243,9 @@
         }
     }
 
-    /**
-     * Parses a Service annotation.
-     * @param annotation The Service annotation.
-     */
-    private void parseServiceAnnotation(Annotation annotation)
+    private void parseComponentAnnotation(Annotation annotation)
     {
-        EntryWriter writer = new EntryWriter(EntryType.Service);
+        EntryWriter writer = new EntryWriter(EntryType.Component);
         m_writers.add(writer);
 
         // Register previously parsed Init/Start/Stop/Destroy/Composition annotations
@@ -383,11 +379,7 @@
         writer.putString(annotation, EntryParam.removed, null); 
         
         // name attribute
-        writer.putString(annotation, EntryParam.name, null);
-        String name = annotation.get(EntryParam.name.toString());
-        if (name != null && ! m_dependencyNames.add(name)) {
-            throw new IllegalArgumentException("Duplicate dependency name " + name + " in ServiceDependency annotation from class " + m_className);
-        }
+        parseDependencyName(writer, annotation);
         
         // propagate attribute
         writer.putString(annotation, EntryParam.propagate, null);
@@ -642,6 +634,7 @@
         writer.putString(annotation, EntryParam.required, null);
         writer.putString(annotation, EntryParam.stateMask, null);
         writer.putString(annotation, EntryParam.propagate, null);
+        parseDependencyName(writer, annotation);
     }
 
     private void parseRersourceDependencyAnnotation(Annotation annotation)
@@ -662,8 +655,27 @@
         writer.putString(annotation, EntryParam.required, null);
         writer.putString(annotation, EntryParam.propagate, null);
         writer.putString(annotation, EntryParam.factoryMethod, null);
+        parseDependencyName(writer, annotation);
     }
 
+    /**
+     * Parse the name of a given dependency.
+     * @param writer The writer where to write the dependency name
+     * @param annotation the dependency to be parsed
+     */
+    private void parseDependencyName(EntryWriter writer, Annotation annotation)
+    {
+        String name = annotation.get(EntryParam.name.toString());
+        if (name != null) 
+        {
+            if(! m_dependencyNames.add(name))
+            {
+                throw new IllegalArgumentException("Duplicate dependency name " + name + " in Dependency " + annotation + " from class " + m_className);
+            }
+            writer.put(EntryParam.name, name);
+        }
+    }
+    
     private void parseLifecycleAnnotation(Annotation annotation)
     {
         Patterns.parseField(m_field, m_descriptor, Patterns.Runnable);
@@ -841,7 +853,7 @@
         }
 
         // We must have at least a Service annotation.
-        checkServiceDeclared(EntryType.Service, EntryType.AspectService, EntryType.AdapterService,
+        checkServiceDeclared(EntryType.Component, EntryType.AspectService, EntryType.AdapterService,
             EntryType.BundleAdapterService,
             EntryType.ResourceAdapterService, EntryType.FactoryConfigurationAdapterService);
         
diff --git a/dependencymanager/annotation/src/main/java/org/apache/felix/dm/annotation/plugin/bnd/DescriptorGenerator.java b/dependencymanager/annotation/src/main/java/org/apache/felix/dm/annotation/plugin/bnd/DescriptorGenerator.java
index 1b9f926..6801024 100644
--- a/dependencymanager/annotation/src/main/java/org/apache/felix/dm/annotation/plugin/bnd/DescriptorGenerator.java
+++ b/dependencymanager/annotation/src/main/java/org/apache/felix/dm/annotation/plugin/bnd/DescriptorGenerator.java
@@ -27,7 +27,7 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import org.apache.felix.dm.annotation.api.Service;
+import org.apache.felix.dm.annotation.api.Component;
 
 import aQute.lib.osgi.Analyzer;
 import aQute.lib.osgi.Clazz;
diff --git a/dependencymanager/annotation/src/main/java/org/apache/felix/dm/annotation/plugin/bnd/EntryType.java b/dependencymanager/annotation/src/main/java/org/apache/felix/dm/annotation/plugin/bnd/EntryType.java
index 4e0997d..7ec586a 100644
--- a/dependencymanager/annotation/src/main/java/org/apache/felix/dm/annotation/plugin/bnd/EntryType.java
+++ b/dependencymanager/annotation/src/main/java/org/apache/felix/dm/annotation/plugin/bnd/EntryType.java
@@ -5,7 +5,7 @@
  */
 public enum EntryType
 {
-    Service, 
+    Component, 
     AspectService,
     AdapterService,
     BundleAdapterService,
diff --git a/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ServiceComponentBuilder.java b/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/AbstractBuilder.java
similarity index 89%
rename from dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ServiceComponentBuilder.java
rename to dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/AbstractBuilder.java
index fb99b7a..cc70226 100644
--- a/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ServiceComponentBuilder.java
+++ b/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/AbstractBuilder.java
@@ -18,21 +18,18 @@
  */
 package org.apache.felix.dm.runtime;
 
-import java.util.Arrays;
-import java.util.Dictionary;
 import java.util.List;
 
+import org.apache.felix.dm.Component;
 import org.apache.felix.dm.Dependency;
 import org.apache.felix.dm.DependencyManager;
-import org.apache.felix.dm.Component;
 import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
 import org.osgi.service.log.LogService;
 
 /**
- * The builder which creates a DependencyManager Service (a Service and all its derived classes (Aspect/Adapters).
+ * base class for all kind of DM component builders (for Component, Aspect, Adapters ...).
  */
-public abstract class ServiceComponentBuilder
+public abstract class AbstractBuilder
 {
     /**
      * Returns the service component type.
@@ -44,7 +41,7 @@
      * @param serviceMetaData the service component metadata parsed from the descriptor file.
      * @param serviceDependencies the service component dependencies metadata parsed from the descriptor file.
      */
-    abstract void buildService(MetaData serviceMetaData, List<MetaData> serviceDependencies, Bundle b,
+    abstract void build(MetaData serviceMetaData, List<MetaData> serviceDependencies, Bundle b,
         DependencyManager dm)
         throws Exception;
 
diff --git a/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/AdapterServiceBuilder.java b/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/AdapterServiceBuilder.java
index 60cd31b..7bf20e2 100644
--- a/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/AdapterServiceBuilder.java
+++ b/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/AdapterServiceBuilder.java
@@ -28,7 +28,7 @@
 /**
  * Builded called when the JSON parser find an adapter service descriptor.
  */
-public class AdapterServiceBuilder extends ServiceComponentBuilder
+public class AdapterServiceBuilder extends AbstractBuilder
 {
     /** The type attribute specified in the JSON descriptor */
     private final static String TYPE = "AdapterService";
@@ -40,7 +40,7 @@
     }
 
     @Override
-    public void buildService(MetaData srvMeta, List<MetaData> depsMeta, Bundle b, DependencyManager dm)
+    public void build(MetaData srvMeta, List<MetaData> depsMeta, Bundle b, DependencyManager dm)
         throws Exception
     {
         Class<?> adapterImplClass = b.loadClass(srvMeta.getString(Params.impl));
diff --git a/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/AspectServiceBuilder.java b/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/AspectServiceBuilder.java
index 752b8a6..89703dd 100644
--- a/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/AspectServiceBuilder.java
+++ b/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/AspectServiceBuilder.java
@@ -26,7 +26,7 @@
 import org.osgi.framework.Bundle;
 import org.osgi.service.log.LogService;
 
-public class AspectServiceBuilder extends ServiceComponentBuilder
+public class AspectServiceBuilder extends AbstractBuilder
 {
     private final static String TYPE = "AspectService";
 
@@ -37,7 +37,7 @@
     }
 
     @Override
-    public void buildService(MetaData srvMeta, List<MetaData> depsMeta, Bundle b, DependencyManager dm) 
+    public void build(MetaData srvMeta, List<MetaData> depsMeta, Bundle b, DependencyManager dm) 
         throws Exception
     {
         Log.instance().log(LogService.LOG_INFO,
diff --git a/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/BundleAdapterServiceBuilder.java b/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/BundleAdapterServiceBuilder.java
index b914426..b2938da 100644
--- a/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/BundleAdapterServiceBuilder.java
+++ b/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/BundleAdapterServiceBuilder.java
@@ -25,7 +25,7 @@
 import org.apache.felix.dm.Component;
 import org.osgi.framework.Bundle;
 
-public class BundleAdapterServiceBuilder extends ServiceComponentBuilder
+public class BundleAdapterServiceBuilder extends AbstractBuilder
 {
     private final static String TYPE = "BundleAdapterService";
 
@@ -36,7 +36,7 @@
     }
 
     @Override
-    public void buildService(MetaData srvMeta, List<MetaData> depsMeta, Bundle b, DependencyManager dm) 
+    public void build(MetaData srvMeta, List<MetaData> depsMeta, Bundle b, DependencyManager dm) 
         throws Exception
     {
         int stateMask = srvMeta.getInt(Params.stateMask, Bundle.INSTALLED | Bundle.RESOLVED | Bundle.ACTIVE);
diff --git a/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ServiceBuilder.java b/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ComponentBuilder.java
similarity index 88%
rename from dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ServiceBuilder.java
rename to dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ComponentBuilder.java
index 95f04c5..de3cc65 100644
--- a/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ServiceBuilder.java
+++ b/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ComponentBuilder.java
@@ -28,9 +28,12 @@
 import org.osgi.framework.Bundle;
 import org.osgi.service.log.LogService;
 
-public class ServiceBuilder extends ServiceComponentBuilder
+/**
+ * Builds a DependencyManager Component.
+ */
+public class ComponentBuilder extends AbstractBuilder
 {
-    private final static String TYPE = "Service";
+    private final static String TYPE = "Component";
     private final static String DM_FACTORY_NAME = "dm.factory.name";
 
     @Override
@@ -40,7 +43,7 @@
     }
 
     @Override
-    public void buildService(MetaData srvMeta, List<MetaData> depsMeta, Bundle b, DependencyManager dm)
+    public void build(MetaData srvMeta, List<MetaData> depsMeta, Bundle b, DependencyManager dm)
         throws Exception
     {
         Component service = dm.createComponent();
@@ -50,7 +53,7 @@
         if (factory == null)
         {
             Log.instance().log(LogService.LOG_INFO, 
-                               "ServiceBuilder: building service %s with dependencies %s",
+                               "ComponentBuilder: building service %s with dependencies %s",
                                srvMeta, depsMeta);
 
             String impl = srvMeta.getString(Params.impl);
@@ -79,7 +82,7 @@
         else
         {
             Log.instance().log(LogService.LOG_INFO, 
-                               "ServiceBuilder: providing factory set for service %s with dependencies %s",
+                               "ComponentBuilder: providing factory set for service %s with dependencies %s",
                                srvMeta, depsMeta);
 
             // We don't instantiate the service, but instead we provide a Set in the registry.
diff --git a/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/DependencyManagerRuntime.java b/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/DependencyManagerRuntime.java
index e363e9d..5fc5410 100644
--- a/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/DependencyManagerRuntime.java
+++ b/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/DependencyManagerRuntime.java
@@ -58,7 +58,7 @@
         
         // Instantiates our descriptor parser, and register our service builders into it.
         m_parser = new DescriptorParser();
-        m_parser.addBuilder(new ServiceBuilder());
+        m_parser.addBuilder(new ComponentBuilder());
         m_parser.addBuilder(new AspectServiceBuilder());
         m_parser.addBuilder(new AdapterServiceBuilder());
         m_parser.addBuilder(new BundleAdapterServiceBuilder());
diff --git a/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/DescriptorParser.java b/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/DescriptorParser.java
index 0da39e5..6e18458 100644
--- a/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/DescriptorParser.java
+++ b/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/DescriptorParser.java
@@ -36,9 +36,9 @@
  */
 public class DescriptorParser
 {
-    private Map<String, ServiceComponentBuilder> m_builders = new HashMap<String, ServiceComponentBuilder>();
+    private Map<String, AbstractBuilder> m_builders = new HashMap<String, AbstractBuilder>();
 
-    public void addBuilder(ServiceComponentBuilder sb)
+    public void addBuilder(AbstractBuilder sb)
     {
         m_builders.put(sb.getType(), sb);
     }
@@ -54,7 +54,7 @@
         JSONMetaData serviceMetaData = new JSONMetaData(json);
 
         String type = (String) json.get("type");
-        ServiceComponentBuilder builder = m_builders.get(type);
+        AbstractBuilder builder = m_builders.get(type);
         if (builder == null)
         {
             throw new IllegalArgumentException("Invalid descriptor"
@@ -71,6 +71,6 @@
         }
 
         // and Invoke the builder
-        builder.buildService(serviceMetaData, serviceDependencies, b, dm);
+        builder.build(serviceMetaData, serviceDependencies, b, dm);
     }
 }
diff --git a/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/FactoryConfigurationAdapterServiceBuilder.java b/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/FactoryConfigurationAdapterServiceBuilder.java
index 8528214..fcab7ef 100644
--- a/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/FactoryConfigurationAdapterServiceBuilder.java
+++ b/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/FactoryConfigurationAdapterServiceBuilder.java
@@ -25,7 +25,7 @@
 import org.apache.felix.dm.Component;
 import org.osgi.framework.Bundle;
 
-public class FactoryConfigurationAdapterServiceBuilder extends ServiceComponentBuilder
+public class FactoryConfigurationAdapterServiceBuilder extends AbstractBuilder
 {
     private final static String TYPE = "FactoryConfigurationAdapterService";
 
@@ -36,7 +36,7 @@
     }
 
     @Override
-    public void buildService(MetaData srvMeta, List<MetaData> depsMeta, Bundle b, DependencyManager dm) 
+    public void build(MetaData srvMeta, List<MetaData> depsMeta, Bundle b, DependencyManager dm) 
         throws Exception
     {
         Class<?> implClass = b.loadClass(srvMeta.getString(Params.impl));
diff --git a/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ResourceAdapterServiceBuilder.java b/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ResourceAdapterServiceBuilder.java
index acac992..929dc73 100644
--- a/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ResourceAdapterServiceBuilder.java
+++ b/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ResourceAdapterServiceBuilder.java
@@ -25,7 +25,7 @@
 import org.apache.felix.dm.Component;
 import org.osgi.framework.Bundle;
 
-public class ResourceAdapterServiceBuilder extends ServiceComponentBuilder
+public class ResourceAdapterServiceBuilder extends AbstractBuilder
 {
     private final static String TYPE = "ResourceAdapterService";
 
@@ -36,7 +36,7 @@
     }
 
     @Override
-    public void buildService(MetaData srvMeta, List<MetaData> depsMeta, Bundle b, DependencyManager dm) 
+    public void build(MetaData srvMeta, List<MetaData> depsMeta, Bundle b, DependencyManager dm) 
         throws Exception
     {
         String filter = srvMeta.getString(Params.filter, null);
diff --git a/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ServiceLifecycleHandler.java b/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ServiceLifecycleHandler.java
index 2b22bdd..d924b2f 100644
--- a/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ServiceLifecycleHandler.java
+++ b/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ServiceLifecycleHandler.java
@@ -310,7 +310,6 @@
     private void callbackComposites(Component service, String callback)
         throws IllegalArgumentException, IllegalAccessException, InvocationTargetException
     {
-        Object serviceInstance = service.getService();
         Object[] composites = service.getCompositionInstances();
         for (Object composite: composites)
         {
diff --git a/dependencymanager/samples.annotation/src/main/java/org/apache/felix/dm/samples/annotation/SpellChecker.java b/dependencymanager/samples.annotation/src/main/java/org/apache/felix/dm/samples/annotation/SpellChecker.java
index ca84602..6ebc74b 100644
--- a/dependencymanager/samples.annotation/src/main/java/org/apache/felix/dm/samples/annotation/SpellChecker.java
+++ b/dependencymanager/samples.annotation/src/main/java/org/apache/felix/dm/samples/annotation/SpellChecker.java
@@ -21,7 +21,7 @@
 import java.util.concurrent.CopyOnWriteArrayList;
 
 import org.apache.felix.dm.annotation.api.Property;
-import org.apache.felix.dm.annotation.api.Service;
+import org.apache.felix.dm.annotation.api.Component;
 import org.apache.felix.dm.annotation.api.ServiceDependency;
 import org.apache.felix.dm.annotation.api.Start;
 import org.apache.felix.dm.annotation.api.Stop;
@@ -35,9 +35,9 @@
  * To create a Dictionary Service, you have to go the the web console and define a "Dictionary Services" factory
  * configuration instance, which will fire an instantiation of the corresponding dictionary service.
  */
-@Service(provides={SpellChecker.class}, 
-         properties={@Property(name=CommandProcessor.COMMAND_SCOPE, value="dmsample.annotation"),
-                     @Property(name=CommandProcessor.COMMAND_FUNCTION, values={"spellcheck"})})
+@Component(provides={SpellChecker.class}, 
+           properties={@Property(name=CommandProcessor.COMMAND_SCOPE, value="dmsample.annotation"),
+                       @Property(name=CommandProcessor.COMMAND_FUNCTION, values={"spellcheck"})})
 public class SpellChecker
 {
     /**
diff --git a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/adapter/AdapterTest.java b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/adapter/AdapterTest.java
index 0c3a881..2f9b5e7 100644
--- a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/adapter/AdapterTest.java
+++ b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/adapter/AdapterTest.java
@@ -20,12 +20,12 @@
 
 import java.util.Map;
 
-import org.apache.felix.dm.annotation.api.Service;
+import org.apache.felix.dm.annotation.api.Component;
 import org.apache.felix.dm.annotation.api.Start;
 import org.apache.felix.dm.annotation.api.ServiceDependency;
 import org.apache.felix.dm.test.bundle.annotation.sequencer.Sequencer;
 
-@Service
+@Component
 public class AdapterTest
 {
     @ServiceDependency
diff --git a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/adapter/ServiceProvider.java b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/adapter/ServiceProvider.java
index 1651e83..8b8b95a 100644
--- a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/adapter/ServiceProvider.java
+++ b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/adapter/ServiceProvider.java
@@ -19,11 +19,11 @@
 package org.apache.felix.dm.test.bundle.annotation.adapter;
 
 import org.apache.felix.dm.annotation.api.Property;
-import org.apache.felix.dm.annotation.api.Service;
+import org.apache.felix.dm.annotation.api.Component;
 import org.apache.felix.dm.annotation.api.ServiceDependency;
 import org.apache.felix.dm.test.bundle.annotation.sequencer.Sequencer;
 
-@Service(properties = { @Property(name = "param1", value = "value1") })
+@Component(properties = { @Property(name = "param1", value = "value1") })
 public class ServiceProvider implements ServiceInterface
 {
     @ServiceDependency
diff --git a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/adapter/ServiceProvider2.java b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/adapter/ServiceProvider2.java
index 8d69eb5..12cc75b 100644
--- a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/adapter/ServiceProvider2.java
+++ b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/adapter/ServiceProvider2.java
@@ -18,11 +18,11 @@
  */
 package org.apache.felix.dm.test.bundle.annotation.adapter;
 
-import org.apache.felix.dm.annotation.api.Service;
+import org.apache.felix.dm.annotation.api.Component;
 import org.apache.felix.dm.annotation.api.ServiceDependency;
 import org.apache.felix.dm.test.bundle.annotation.sequencer.Sequencer;
 
-@Service
+@Component
 public class ServiceProvider2 implements ServiceInterface2
 {
     @ServiceDependency
diff --git a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/aspect/AspectTest.java b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/aspect/AspectTest.java
index 44c3cd3..e95cc87 100644
--- a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/aspect/AspectTest.java
+++ b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/aspect/AspectTest.java
@@ -18,10 +18,10 @@
  */
 package org.apache.felix.dm.test.bundle.annotation.aspect;
 
-import org.apache.felix.dm.annotation.api.Service;
+import org.apache.felix.dm.annotation.api.Component;
 import org.apache.felix.dm.annotation.api.ServiceDependency;
 
-@Service
+@Component
 public class AspectTest
 {
     @ServiceDependency
diff --git a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/aspect/ServiceProvider.java b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/aspect/ServiceProvider.java
index 3dda109..e05ea1f 100644
--- a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/aspect/ServiceProvider.java
+++ b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/aspect/ServiceProvider.java
@@ -18,11 +18,11 @@
  */
 package org.apache.felix.dm.test.bundle.annotation.aspect;
 
-import org.apache.felix.dm.annotation.api.Service;
+import org.apache.felix.dm.annotation.api.Component;
 import org.apache.felix.dm.annotation.api.ServiceDependency;
 import org.apache.felix.dm.test.bundle.annotation.sequencer.Sequencer;
 
-@Service
+@Component
 public class ServiceProvider implements ServiceInterface
 {
     @ServiceDependency(filter = "(test=aspect.ServiceProvider)")
diff --git a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/aspectlifecycle/AspectLifecycleTest.java b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/aspectlifecycle/AspectLifecycleTest.java
index 234e202..b2f9e27 100644
--- a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/aspectlifecycle/AspectLifecycleTest.java
+++ b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/aspectlifecycle/AspectLifecycleTest.java
@@ -18,13 +18,13 @@
  */
 package org.apache.felix.dm.test.bundle.annotation.aspectlifecycle;
 
-import org.apache.felix.dm.annotation.api.Service;
+import org.apache.felix.dm.annotation.api.Component;
 import org.apache.felix.dm.annotation.api.ServiceDependency;
 
 /**
  * Tests an aspect service, and ensure that its lifecycle methods are properly invoked (init/start/stop/destroy)
  */
-@Service
+@Component
 public class AspectLifecycleTest
 {
     @ServiceDependency
diff --git a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/aspectlifecycle/ServiceProvider.java b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/aspectlifecycle/ServiceProvider.java
index 89ad008..2841324 100644
--- a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/aspectlifecycle/ServiceProvider.java
+++ b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/aspectlifecycle/ServiceProvider.java
@@ -18,11 +18,11 @@
  */
 package org.apache.felix.dm.test.bundle.annotation.aspectlifecycle;
 
-import org.apache.felix.dm.annotation.api.Service;
+import org.apache.felix.dm.annotation.api.Component;
 import org.apache.felix.dm.annotation.api.ServiceDependency;
 import org.apache.felix.dm.test.bundle.annotation.sequencer.Sequencer;
 
-@Service
+@Component
 public class ServiceProvider implements ServiceInterface
 {
     @ServiceDependency(filter = "(test=aspectLifecycle.ServiceProvider)")
diff --git a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/aspectlifecycledynamicproxy/AspectLifecycleTest.java b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/aspectlifecycledynamicproxy/AspectLifecycleTest.java
index d63c0c8..cbb9b2c 100644
--- a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/aspectlifecycledynamicproxy/AspectLifecycleTest.java
+++ b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/aspectlifecycledynamicproxy/AspectLifecycleTest.java
@@ -18,13 +18,13 @@
  */
 package org.apache.felix.dm.test.bundle.annotation.aspectlifecycledynamicproxy;
 
-import org.apache.felix.dm.annotation.api.Service;
+import org.apache.felix.dm.annotation.api.Component;
 import org.apache.felix.dm.annotation.api.ServiceDependency;
 
 /**
  * Tests an aspect service, and ensure that its lifecycle methods are properly invoked (init/start/stop/destroy)
  */
-@Service
+@Component
 public class AspectLifecycleTest
 {
     @ServiceDependency
diff --git a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/aspectlifecycledynamicproxy/ServiceProvider.java b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/aspectlifecycledynamicproxy/ServiceProvider.java
index 975e8d6..09e63b1 100644
--- a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/aspectlifecycledynamicproxy/ServiceProvider.java
+++ b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/aspectlifecycledynamicproxy/ServiceProvider.java
@@ -18,11 +18,11 @@
  */
 package org.apache.felix.dm.test.bundle.annotation.aspectlifecycledynamicproxy;
 
-import org.apache.felix.dm.annotation.api.Service;
+import org.apache.felix.dm.annotation.api.Component;
 import org.apache.felix.dm.annotation.api.ServiceDependency;
 import org.apache.felix.dm.test.bundle.annotation.sequencer.Sequencer;
 
-@Service
+@Component
 public class ServiceProvider implements ServiceInterface
 {
     @ServiceDependency(filter = "(test=aspectLifecycle.ServiceProvider)")
diff --git a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/bundledependency/Consumer.java b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/bundledependency/Consumer.java
index 64b9da0..307b78b 100644
--- a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/bundledependency/Consumer.java
+++ b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/bundledependency/Consumer.java
@@ -19,7 +19,7 @@
 package org.apache.felix.dm.test.bundle.annotation.bundledependency;
 
 import org.apache.felix.dm.annotation.api.Destroy;
-import org.apache.felix.dm.annotation.api.Service;
+import org.apache.felix.dm.annotation.api.Component;
 import org.apache.felix.dm.annotation.api.Start;
 import org.apache.felix.dm.annotation.api.BundleDependency;
 import org.apache.felix.dm.annotation.api.ServiceDependency;
@@ -30,7 +30,7 @@
 /**
  * Simple Consumer which has a BundleDependency dependency.
  */
-@Service
+@Component
 public class Consumer
 {
     protected volatile boolean m_added;
diff --git a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/bundledependency/ServiceConsumer.java b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/bundledependency/ServiceConsumer.java
index 05a29ca..8639f8f 100644
--- a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/bundledependency/ServiceConsumer.java
+++ b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/bundledependency/ServiceConsumer.java
@@ -18,7 +18,7 @@
 */
 package org.apache.felix.dm.test.bundle.annotation.bundledependency;
 
-import org.apache.felix.dm.annotation.api.Service;
+import org.apache.felix.dm.annotation.api.Component;
 import org.apache.felix.dm.annotation.api.Start;
 import org.apache.felix.dm.annotation.api.ServiceDependency;
 import org.apache.felix.dm.test.bundle.annotation.sequencer.Sequencer;
@@ -26,7 +26,7 @@
 /**
  * ServiceInterface Consumer.
  */
-@Service
+@Component
 public class ServiceConsumer
 {
     @ServiceDependency(filter="(test=adapter)")
diff --git a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/composite/Component.java b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/composite/Composite.java
similarity index 98%
rename from dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/composite/Component.java
rename to dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/composite/Composite.java
index 1e4145c..62f4244 100644
--- a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/composite/Component.java
+++ b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/composite/Composite.java
@@ -16,7 +16,7 @@
 /**
  * The CompositeService is also made up of this Class.
  */
-public class Component
+public class Composite
 {
     // Injected dependency (from CompositeService)
     private Sequencer m_sequencer;
diff --git a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/composite/CompositeService.java b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/composite/CompositeService.java
index d80e24b..22514ab 100644
--- a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/composite/CompositeService.java
+++ b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/composite/CompositeService.java
@@ -17,7 +17,7 @@
 import org.apache.felix.dm.annotation.api.Composition;
 import org.apache.felix.dm.annotation.api.Destroy;
 import org.apache.felix.dm.annotation.api.Init;
-import org.apache.felix.dm.annotation.api.Service;
+import org.apache.felix.dm.annotation.api.Component;
 import org.apache.felix.dm.annotation.api.ServiceDependency;
 import org.apache.felix.dm.annotation.api.Start;
 import org.apache.felix.dm.annotation.api.Stop;
@@ -26,11 +26,11 @@
 /**
  * This service is also composed of the Component object.
  */
-@Service
+@Component
 public class CompositeService
 {
     /* We are composed of this object, which will also be injected with our dependencies */
-    private Component m_component = new Component();
+    private Composite m_composite = new Composite();
 
     /* This dependency filter will be configured from our init method */
     @ServiceDependency(name = "D")
@@ -63,7 +63,7 @@
     @Composition
     Object[] getComposition()
     {
-        return new Object[] { this, m_component };
+        return new Object[] { this, m_composite };
     }
 
     /** 
diff --git a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/composite/Dependency1.java b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/composite/Dependency1.java
index 138f46a..07c3cac 100644
--- a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/composite/Dependency1.java
+++ b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/composite/Dependency1.java
@@ -12,11 +12,11 @@
 package org.apache.felix.dm.test.bundle.annotation.composite;
 
 import org.apache.felix.dm.annotation.api.Property;
-import org.apache.felix.dm.annotation.api.Service;
+import org.apache.felix.dm.annotation.api.Component;
 import org.apache.felix.dm.annotation.api.ServiceDependency;
 import org.apache.felix.dm.test.bundle.annotation.sequencer.Sequencer;
 
-@Service(properties = @Property(name = "foo", value = "bar1"))
+@Component(properties = @Property(name = "foo", value = "bar1"))
 public class Dependency1 implements Runnable
 {
     @ServiceDependency
diff --git a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/composite/Dependency2.java b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/composite/Dependency2.java
index 62855f0..5b2244e 100644
--- a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/composite/Dependency2.java
+++ b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/composite/Dependency2.java
@@ -12,11 +12,11 @@
 package org.apache.felix.dm.test.bundle.annotation.composite;
 
 import org.apache.felix.dm.annotation.api.Property;
-import org.apache.felix.dm.annotation.api.Service;
+import org.apache.felix.dm.annotation.api.Component;
 import org.apache.felix.dm.annotation.api.ServiceDependency;
 import org.apache.felix.dm.test.bundle.annotation.sequencer.Sequencer;
 
-@Service(properties = @Property(name = "foo", value = "bar2"))
+@Component(properties = @Property(name = "foo", value = "bar2"))
 public class Dependency2 implements Runnable
 {
     @ServiceDependency
diff --git a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/extraproperties/ExtraAdapterServiceProperties.java b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/extraproperties/ExtraAdapterServiceProperties.java
index 12588bb..fa3591d 100644
--- a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/extraproperties/ExtraAdapterServiceProperties.java
+++ b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/extraproperties/ExtraAdapterServiceProperties.java
@@ -23,7 +23,7 @@
 
 import org.apache.felix.dm.annotation.api.AdapterService;
 import org.apache.felix.dm.annotation.api.Property;
-import org.apache.felix.dm.annotation.api.Service;
+import org.apache.felix.dm.annotation.api.Component;
 import org.apache.felix.dm.annotation.api.ServiceDependency;
 import org.apache.felix.dm.annotation.api.Start;
 import org.apache.felix.dm.test.bundle.annotation.sequencer.Sequencer;
@@ -43,7 +43,7 @@
     }
 
 
-    @Service(properties={@Property(name="foo", value="bar")})
+    @Component(properties={@Property(name="foo", value="bar")})
     public static class ProviderImpl implements Provider
     {
     }
@@ -60,7 +60,7 @@
         }
     }
     
-    @Service
+    @Component
     public static class Consumer
     {
         @ServiceDependency(filter="(test=ExtraAdapterServiceProperties)")
diff --git a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/extraproperties/ExtraAspectServiceProperties.java b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/extraproperties/ExtraAspectServiceProperties.java
index 30ab097..dd6d284 100644
--- a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/extraproperties/ExtraAspectServiceProperties.java
+++ b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/extraproperties/ExtraAspectServiceProperties.java
@@ -23,7 +23,7 @@
 
 import org.apache.felix.dm.annotation.api.AspectService;
 import org.apache.felix.dm.annotation.api.Property;
-import org.apache.felix.dm.annotation.api.Service;
+import org.apache.felix.dm.annotation.api.Component;
 import org.apache.felix.dm.annotation.api.ServiceDependency;
 import org.apache.felix.dm.annotation.api.Start;
 import org.apache.felix.dm.test.bundle.annotation.sequencer.Sequencer;
@@ -38,7 +38,7 @@
     {
     }
     
-    @Service(properties={@Property(name="foo", value="bar")})
+    @Component(properties={@Property(name="foo", value="bar")})
     public static class ProviderImpl implements Provider
     {
     }
@@ -53,7 +53,7 @@
         }
     }
     
-    @Service
+    @Component
     public static class Consumer
     {
         @ServiceDependency(filter="(test=ExtraAspectServiceProperties)")
diff --git a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/extraproperties/ExtraFactoryServiceProperties.java b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/extraproperties/ExtraFactoryServiceProperties.java
index 3d9385f..f5975ea 100644
--- a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/extraproperties/ExtraFactoryServiceProperties.java
+++ b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/extraproperties/ExtraFactoryServiceProperties.java
@@ -25,7 +25,7 @@
 import java.util.Set;
 
 import org.apache.felix.dm.annotation.api.Property;
-import org.apache.felix.dm.annotation.api.Service;
+import org.apache.felix.dm.annotation.api.Component;
 import org.apache.felix.dm.annotation.api.ServiceDependency;
 import org.apache.felix.dm.annotation.api.Start;
 import org.apache.felix.dm.test.bundle.annotation.sequencer.Sequencer;
@@ -36,7 +36,7 @@
     {
     }
 
-    @Service(properties={@Property(name="foo", value="bar")}, factorySet="MyFactory")
+    @Component(properties={@Property(name="foo", value="bar")}, factorySet="MyFactory")
     public static class ProviderImpl implements Provider
     {
         @Start
@@ -46,7 +46,7 @@
         }
     }
     
-    @Service
+    @Component
     public static class ProviderImplFactory
     {
         @ServiceDependency
@@ -59,7 +59,7 @@
         }
     }
     
-    @Service
+    @Component
     public static class Consumer
     {
         @ServiceDependency(filter="(test=ExtraFactoryServiceProperties)")
diff --git a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/extraproperties/ExtraServiceProperties.java b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/extraproperties/ExtraServiceProperties.java
index d7172e6..388e3e6 100644
--- a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/extraproperties/ExtraServiceProperties.java
+++ b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/extraproperties/ExtraServiceProperties.java
@@ -21,7 +21,7 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import org.apache.felix.dm.annotation.api.Service;
+import org.apache.felix.dm.annotation.api.Component;
 import org.apache.felix.dm.annotation.api.Property;
 import org.apache.felix.dm.annotation.api.ServiceDependency;
 import org.apache.felix.dm.annotation.api.Start;
@@ -37,7 +37,7 @@
     {
     }
 
-    @Service(properties={@Property(name="foo", value="bar")})
+    @Component(properties={@Property(name="foo", value="bar")})
     public static class ProviderImpl implements Provider
     {
         @Start
@@ -47,7 +47,7 @@
         }
     }
     
-    @Service
+    @Component
     public static class Consumer
     {
         @ServiceDependency(filter="(test=ExtraServiceProperties)")
diff --git a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/factory/ExtraDependency1.java b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/factory/ExtraDependency1.java
index ef4caf7..e5bf7c5 100644
--- a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/factory/ExtraDependency1.java
+++ b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/factory/ExtraDependency1.java
@@ -19,9 +19,9 @@
 package org.apache.felix.dm.test.bundle.annotation.factory;
 
 import org.apache.felix.dm.annotation.api.Property;
-import org.apache.felix.dm.annotation.api.Service;
+import org.apache.felix.dm.annotation.api.Component;
 
-@Service(properties=@Property(name="foo", value="bar"))
+@Component(properties=@Property(name="foo", value="bar"))
 public class ExtraDependency1 implements Runnable
 {
     public void run()
diff --git a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/factory/ExtraDependency2.java b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/factory/ExtraDependency2.java
index 7f76e1f..302963f 100644
--- a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/factory/ExtraDependency2.java
+++ b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/factory/ExtraDependency2.java
@@ -19,9 +19,9 @@
 package org.apache.felix.dm.test.bundle.annotation.factory;
 
 import org.apache.felix.dm.annotation.api.Property;
-import org.apache.felix.dm.annotation.api.Service;
+import org.apache.felix.dm.annotation.api.Component;
 
-@Service(properties=@Property(name="foo", value="bar2"))
+@Component(properties=@Property(name="foo", value="bar2"))
 public class ExtraDependency2 implements Runnable
 {
     public void run()
diff --git a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/factory/MyService.java b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/factory/MyService.java
index 34c89f8..b9b1d18 100644
--- a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/factory/MyService.java
+++ b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/factory/MyService.java
@@ -26,7 +26,7 @@
 
 import org.apache.felix.dm.annotation.api.Init;
 import org.apache.felix.dm.annotation.api.Property;
-import org.apache.felix.dm.annotation.api.Service;
+import org.apache.felix.dm.annotation.api.Component;
 import org.apache.felix.dm.annotation.api.ServiceDependency;
 import org.apache.felix.dm.annotation.api.Start;
 import org.apache.felix.dm.annotation.api.Stop;
@@ -35,7 +35,7 @@
 /**
  * This service will be instantiated by our MyServiceFactory class.
  */
-@Service(factorySet = "MyServiceFactory", 
+@Component(factorySet = "MyServiceFactory", 
          factoryConfigure = "configure", properties = { @Property(name = "foo", value = "bar") })
 public class MyService implements MyServiceInterface
 {
diff --git a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/factory/MyServiceFactory.java b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/factory/MyServiceFactory.java
index b132488..e7fbdec 100644
--- a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/factory/MyServiceFactory.java
+++ b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/factory/MyServiceFactory.java
@@ -25,13 +25,13 @@
 
 import junit.framework.Assert;
 
-import org.apache.felix.dm.annotation.api.Service;
+import org.apache.felix.dm.annotation.api.Component;
 import org.apache.felix.dm.annotation.api.ServiceDependency;
 import org.apache.felix.dm.annotation.api.Start;
 import org.apache.felix.dm.test.bundle.annotation.sequencer.Sequencer;
 
 @SuppressWarnings("unchecked")
-@Service
+@Component
 public class MyServiceFactory
 {
     @ServiceDependency(filter = "(dm.factory.name=MyServiceFactory)")
diff --git a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/factoryconfadapter/ServiceClient.java b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/factoryconfadapter/ServiceClient.java
index dc6aeba..ed9ea91 100644
--- a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/factoryconfadapter/ServiceClient.java
+++ b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/factoryconfadapter/ServiceClient.java
@@ -20,10 +20,10 @@
 
 import java.util.Map;
 
-import org.apache.felix.dm.annotation.api.Service;
+import org.apache.felix.dm.annotation.api.Component;
 import org.apache.felix.dm.annotation.api.ServiceDependency;
 
-@Service
+@Component
 public class ServiceClient
 {
     @ServiceDependency(changed="changeServiceProvider")
diff --git a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/multiple/ServiceConsumer.java b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/multiple/ServiceConsumer.java
index 3bb18bc..a113318 100644
--- a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/multiple/ServiceConsumer.java
+++ b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/multiple/ServiceConsumer.java
@@ -18,13 +18,13 @@
  */
 package org.apache.felix.dm.test.bundle.annotation.multiple;
 
-import org.apache.felix.dm.annotation.api.Service;
+import org.apache.felix.dm.annotation.api.Component;
 import org.apache.felix.dm.annotation.api.Start;
 import org.apache.felix.dm.annotation.api.Stop;
 import org.apache.felix.dm.annotation.api.ServiceDependency;
 import org.apache.felix.dm.test.bundle.annotation.sequencer.Sequencer;
 
-@Service
+@Component
 public class ServiceConsumer
 {
     @ServiceDependency
diff --git a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/multiple/ServiceProvider.java b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/multiple/ServiceProvider.java
index e6af2ba..ee0efc9 100644
--- a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/multiple/ServiceProvider.java
+++ b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/multiple/ServiceProvider.java
@@ -19,13 +19,13 @@
 package org.apache.felix.dm.test.bundle.annotation.multiple;
 
 import org.apache.felix.dm.annotation.api.Property;
-import org.apache.felix.dm.annotation.api.Service;
+import org.apache.felix.dm.annotation.api.Component;
 import org.apache.felix.dm.annotation.api.Start;
 import org.apache.felix.dm.annotation.api.Stop;
 import org.apache.felix.dm.annotation.api.ServiceDependency;
 import org.apache.felix.dm.test.bundle.annotation.sequencer.Sequencer;
 
-@Service(properties = { @Property(name = "foo", value = "bar") })
+@Component(properties = { @Property(name = "foo", value = "bar") })
 public class ServiceProvider implements ServiceInterface
 {
     @ServiceDependency
diff --git a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/multiple/ServiceProvider2.java b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/multiple/ServiceProvider2.java
index 639c9a5..5db2195 100644
--- a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/multiple/ServiceProvider2.java
+++ b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/multiple/ServiceProvider2.java
@@ -19,13 +19,13 @@
 package org.apache.felix.dm.test.bundle.annotation.multiple;
 
 import org.apache.felix.dm.annotation.api.Composition;
-import org.apache.felix.dm.annotation.api.Service;
+import org.apache.felix.dm.annotation.api.Component;
 import org.apache.felix.dm.annotation.api.Start;
 import org.apache.felix.dm.annotation.api.Stop;
 import org.apache.felix.dm.annotation.api.ServiceDependency;
 import org.apache.felix.dm.test.bundle.annotation.sequencer.Sequencer;
 
-@Service(provides = { ServiceProvider2.class }, factoryMethod="create")
+@Component(provides = { ServiceProvider2.class }, factoryMethod="create")
 public class ServiceProvider2
 {
     Composite m_composite = new Composite();
diff --git a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/propagate/ServiceDependencyPropagateTest.java b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/propagate/ServiceDependencyPropagateTest.java
index 64e1383..2d3aa3c 100644
--- a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/propagate/ServiceDependencyPropagateTest.java
+++ b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/propagate/ServiceDependencyPropagateTest.java
@@ -21,7 +21,7 @@
 import java.util.Map;
 
 import org.apache.felix.dm.annotation.api.Property;
-import org.apache.felix.dm.annotation.api.Service;
+import org.apache.felix.dm.annotation.api.Component;
 import org.apache.felix.dm.annotation.api.ServiceDependency;
 import org.apache.felix.dm.annotation.api.Start;
 import org.apache.felix.dm.test.bundle.annotation.sequencer.Sequencer;
@@ -31,7 +31,7 @@
  */
 public class ServiceDependencyPropagateTest
 {
-    @Service
+    @Component
     public static class Consumer {
         private Map m_producerProps;
 
@@ -55,14 +55,14 @@
         }
     }
     
-    @Service(provides={Producer.class}, properties={@Property(name="foo", value="bar")})
+    @Component(provides={Producer.class}, properties={@Property(name="foo", value="bar")})
     public static class Producer {
         @ServiceDependency(propagate=true)
         Producer2 m_producer;
     }
     
 
-    @Service(provides={Producer2.class}, properties={@Property(name="foo2", value="bar2")})
+    @Component(provides={Producer2.class}, properties={@Property(name="foo2", value="bar2")})
     public static class Producer2 {
     }
 }
diff --git a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/publisher/AdapterServiceTestWithPublisher.java b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/publisher/AdapterServiceTestWithPublisher.java
index 2c00691..2e29749 100644
--- a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/publisher/AdapterServiceTestWithPublisher.java
+++ b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/publisher/AdapterServiceTestWithPublisher.java
@@ -25,7 +25,7 @@
 import org.apache.felix.dm.annotation.api.Init;
 import org.apache.felix.dm.annotation.api.Property;
 import org.apache.felix.dm.annotation.api.LifecycleController;
-import org.apache.felix.dm.annotation.api.Service;
+import org.apache.felix.dm.annotation.api.Component;
 import org.apache.felix.dm.annotation.api.ServiceDependency;
 import org.apache.felix.dm.annotation.api.Start;
 import org.apache.felix.dm.test.bundle.annotation.sequencer.Sequencer;
@@ -43,7 +43,7 @@
     {
     }
 
-    @Service
+    @Component
     public static class Consumer
     {
         @ServiceDependency(filter="(test=AdapterServiceTestWithPublisher)")
@@ -82,7 +82,7 @@
         }
     }
     
-    @Service(properties={@Property(name="foo", value="bar")})
+    @Component(properties={@Property(name="foo", value="bar")})
     public static class ProviderImpl implements Provider
     {
         @Start
diff --git a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/publisher/BundleAdapterServiceTestWithPublisher.java b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/publisher/BundleAdapterServiceTestWithPublisher.java
index 07f4036..5333cc5 100644
--- a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/publisher/BundleAdapterServiceTestWithPublisher.java
+++ b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/publisher/BundleAdapterServiceTestWithPublisher.java
@@ -25,7 +25,7 @@
 import org.apache.felix.dm.annotation.api.Init;
 import org.apache.felix.dm.annotation.api.Property;
 import org.apache.felix.dm.annotation.api.LifecycleController;
-import org.apache.felix.dm.annotation.api.Service;
+import org.apache.felix.dm.annotation.api.Component;
 import org.apache.felix.dm.annotation.api.ServiceDependency;
 import org.apache.felix.dm.annotation.api.Start;
 import org.apache.felix.dm.test.bundle.annotation.sequencer.Sequencer;
@@ -40,7 +40,7 @@
     {
     }
 
-    @Service
+    @Component
     public static class Consumer
     {
         @ServiceDependency(filter="(test=BundleAdapterServiceTestWithPublisher)")
diff --git a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/publisher/FactoryConfigurationAdapterServiceTestWithPublisher.java b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/publisher/FactoryConfigurationAdapterServiceTestWithPublisher.java
index 78bba0e..1aabef2 100644
--- a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/publisher/FactoryConfigurationAdapterServiceTestWithPublisher.java
+++ b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/publisher/FactoryConfigurationAdapterServiceTestWithPublisher.java
@@ -28,7 +28,7 @@
 import org.apache.felix.dm.annotation.api.Init;
 import org.apache.felix.dm.annotation.api.LifecycleController;
 import org.apache.felix.dm.annotation.api.Property;
-import org.apache.felix.dm.annotation.api.Service;
+import org.apache.felix.dm.annotation.api.Component;
 import org.apache.felix.dm.annotation.api.ServiceDependency;
 import org.apache.felix.dm.annotation.api.Start;
 import org.apache.felix.dm.test.bundle.annotation.sequencer.Sequencer;
@@ -44,7 +44,7 @@
     {
     }
 
-    @Service
+    @Component
     public static class Consumer
     {
         @ServiceDependency(filter="(test=FactoryConfigurationAdapterServiceTestWithPublisher)")
@@ -77,7 +77,7 @@
         }
     }
     
-    @Service
+    @Component
     public static class Configurator
     {
         @ServiceDependency
diff --git a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/publisher/FactoryServiceTestWthPublisher.java b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/publisher/FactoryServiceTestWthPublisher.java
index a55d578..360b693 100644
--- a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/publisher/FactoryServiceTestWthPublisher.java
+++ b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/publisher/FactoryServiceTestWthPublisher.java
@@ -27,7 +27,7 @@
 import org.apache.felix.dm.annotation.api.Init;
 import org.apache.felix.dm.annotation.api.Property;
 import org.apache.felix.dm.annotation.api.LifecycleController;
-import org.apache.felix.dm.annotation.api.Service;
+import org.apache.felix.dm.annotation.api.Component;
 import org.apache.felix.dm.annotation.api.ServiceDependency;
 import org.apache.felix.dm.annotation.api.Start;
 import org.apache.felix.dm.test.bundle.annotation.sequencer.Sequencer;
@@ -42,7 +42,7 @@
     {
     }
 
-    @Service
+    @Component
     public static class Consumer
     {
         @ServiceDependency(filter="(test=FactoryServiceTestWthPublisher)")
@@ -72,7 +72,7 @@
         }
     }
    
-    @Service(factorySet="MyFactory", properties={@Property(name="foo", value="bar")})
+    @Component(factorySet="MyFactory", properties={@Property(name="foo", value="bar")})
     public static class ProviderImpl implements Provider
     {
         @LifecycleController
@@ -102,7 +102,7 @@
         }
     }
     
-    @Service
+    @Component
     public static class ProviderImplFactory 
     {
         @ServiceDependency(filter="(dm.factory.name=MyFactory)")
diff --git a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/publisher/ResourceAdapterServiceTestWithPublisher.java b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/publisher/ResourceAdapterServiceTestWithPublisher.java
index 328ce93..2fd9d83 100644
--- a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/publisher/ResourceAdapterServiceTestWithPublisher.java
+++ b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/publisher/ResourceAdapterServiceTestWithPublisher.java
@@ -32,7 +32,7 @@
 import org.apache.felix.dm.annotation.api.LifecycleController;
 import org.apache.felix.dm.annotation.api.Property;
 import org.apache.felix.dm.annotation.api.ResourceAdapterService;
-import org.apache.felix.dm.annotation.api.Service;
+import org.apache.felix.dm.annotation.api.Component;
 import org.apache.felix.dm.annotation.api.ServiceDependency;
 import org.apache.felix.dm.annotation.api.Start;
 import org.apache.felix.dm.test.bundle.annotation.sequencer.Sequencer;
@@ -49,7 +49,7 @@
     {
     }
 
-    @Service
+    @Component
     public static class Consumer
     {
         @ServiceDependency(filter="(test=ResourceAdapterServiceTestWithPublisher)")
@@ -86,7 +86,7 @@
         }
     }
     
-    @Service
+    @Component
     public static class ResourceProvider
     {
         private volatile BundleContext m_context;
diff --git a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/publisher/ServiceTestWthPublisher.java b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/publisher/ServiceTestWthPublisher.java
index 573dc9d..8bb7490 100644
--- a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/publisher/ServiceTestWthPublisher.java
+++ b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/publisher/ServiceTestWthPublisher.java
@@ -24,7 +24,7 @@
 import org.apache.felix.dm.annotation.api.Init;
 import org.apache.felix.dm.annotation.api.LifecycleController;
 import org.apache.felix.dm.annotation.api.Property;
-import org.apache.felix.dm.annotation.api.Service;
+import org.apache.felix.dm.annotation.api.Component;
 import org.apache.felix.dm.annotation.api.ServiceDependency;
 import org.apache.felix.dm.annotation.api.Start;
 import org.apache.felix.dm.test.bundle.annotation.sequencer.Sequencer;
@@ -38,7 +38,7 @@
     {
     }
 
-    @Service
+    @Component
     public static class Consumer
     {
         @ServiceDependency(filter="(test=ServiceTestWthPublisher)")
@@ -64,7 +64,7 @@
         }
     }
     
-    @Service(properties={@Property(name="foo", value="bar")})
+    @Component(properties={@Property(name="foo", value="bar")})
     public static class ProviderImpl implements Provider
     {
         @LifecycleController
diff --git a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/resource/ResourceConsumer.java b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/resource/ResourceConsumer.java
index 2e51e4d..4184118 100644
--- a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/resource/ResourceConsumer.java
+++ b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/resource/ResourceConsumer.java
@@ -23,7 +23,7 @@
 import junit.framework.Assert;
 
 import org.apache.felix.dm.annotation.api.ResourceDependency;
-import org.apache.felix.dm.annotation.api.Service;
+import org.apache.felix.dm.annotation.api.Component;
 import org.apache.felix.dm.annotation.api.ServiceDependency;
 import org.apache.felix.dm.annotation.api.Start;
 import org.apache.felix.dm.annotation.api.Stop;
@@ -32,7 +32,7 @@
 /**
  * A Component which has a resource dependency.
  */
-@Service
+@Component
 public class ResourceConsumer
 {
     @ServiceDependency(required=true,filter = "(test=resource)")
diff --git a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/resource/ResourceProvider.java b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/resource/ResourceProvider.java
index 6c64224..7259da2 100644
--- a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/resource/ResourceProvider.java
+++ b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/resource/ResourceProvider.java
@@ -28,7 +28,7 @@
 import org.apache.felix.dm.ResourceHandler;
 import org.apache.felix.dm.ResourceUtil;
 import org.apache.felix.dm.annotation.api.Destroy;
-import org.apache.felix.dm.annotation.api.Service;
+import org.apache.felix.dm.annotation.api.Component;
 import org.apache.felix.dm.annotation.api.ServiceDependency;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.Filter;
@@ -37,7 +37,7 @@
 /**
  * Provides some simple resources.
  */
-@Service
+@Component
 public class ResourceProvider
 {
     private volatile BundleContext m_context;
diff --git a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/resource/ServiceConsumer.java b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/resource/ServiceConsumer.java
index 6e6dedc..862b020 100644
--- a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/resource/ServiceConsumer.java
+++ b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/resource/ServiceConsumer.java
@@ -18,7 +18,7 @@
 */
 package org.apache.felix.dm.test.bundle.annotation.resource;
 
-import org.apache.felix.dm.annotation.api.Service;
+import org.apache.felix.dm.annotation.api.Component;
 import org.apache.felix.dm.annotation.api.Start;
 import org.apache.felix.dm.annotation.api.ServiceDependency;
 import org.apache.felix.dm.test.bundle.annotation.sequencer.Sequencer;
@@ -27,7 +27,7 @@
  * A Component with a dependency over the ServiceInterface, which is actually provided
  * by a ResourceAdapter.
  */
-@Service
+@Component
 public class ServiceConsumer
 {
     @ServiceDependency
diff --git a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/simple/Consumer.java b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/simple/Consumer.java
index 8d0c9eb..4ebcbfc 100644
--- a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/simple/Consumer.java
+++ b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/simple/Consumer.java
@@ -18,7 +18,7 @@
  */
 package org.apache.felix.dm.test.bundle.annotation.simple;
 
-import org.apache.felix.dm.annotation.api.Service;
+import org.apache.felix.dm.annotation.api.Component;
 import org.apache.felix.dm.annotation.api.Start;
 import org.apache.felix.dm.annotation.api.Stop;
 import org.apache.felix.dm.annotation.api.ServiceDependency;
@@ -27,7 +27,7 @@
 /**
  * Consumes a service which is provided by the {@link Producer} class.
  */
-@Service
+@Component
 public class Consumer
 {
     @ServiceDependency
diff --git a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/simple/Producer.java b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/simple/Producer.java
index 47b468f..ba3e7d0 100644
--- a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/simple/Producer.java
+++ b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/simple/Producer.java
@@ -18,7 +18,7 @@
  */
 package org.apache.felix.dm.test.bundle.annotation.simple;
 
-import org.apache.felix.dm.annotation.api.Service;
+import org.apache.felix.dm.annotation.api.Component;
 import org.apache.felix.dm.annotation.api.Start;
 import org.apache.felix.dm.annotation.api.Stop;
 import org.apache.felix.dm.annotation.api.ServiceDependency;
@@ -27,7 +27,7 @@
 /**
  * Provides a <code>Runnable</code> service, which is required by the {@link Consumer} class.
  */
-@Service
+@Component
 public class Producer implements Runnable
 {
     @ServiceDependency
diff --git a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/temporal/TemporalTest.java b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/temporal/TemporalTest.java
index 5d56066..2bb7c65 100644
--- a/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/temporal/TemporalTest.java
+++ b/dependencymanager/test/src/main/java/org/apache/felix/dm/test/bundle/annotation/temporal/TemporalTest.java
@@ -18,7 +18,7 @@
  */
 package org.apache.felix.dm.test.bundle.annotation.temporal;
 
-import org.apache.felix.dm.annotation.api.Service;
+import org.apache.felix.dm.annotation.api.Component;
 import org.apache.felix.dm.annotation.api.Start;
 import org.apache.felix.dm.annotation.api.Stop;
 import org.apache.felix.dm.annotation.api.ServiceDependency;
@@ -27,7 +27,7 @@
 /**
  * Service using an annotated Temporal Service dependendency.
  */
-@Service(provides = {})
+@Component(provides = {})
 public class TemporalTest implements Runnable
 {
     Thread m_thread;
