diff --git a/espblog/pom.xml b/espblog/pom.xml
index 94afaf9..59f94b1 100644
--- a/espblog/pom.xml
+++ b/espblog/pom.xml
@@ -94,6 +94,10 @@
       <artifactId>slf4j-api</artifactId>
       <scope>provided</scope>
     </dependency>
+        <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.scr.annotations</artifactId>
+        </dependency>
   </dependencies>
   
 </project>
diff --git a/espblog/src/main/java/org/apache/sling/samples/espblog/internal/ThumbnailGenerator.java b/espblog/src/main/java/org/apache/sling/samples/espblog/internal/ThumbnailGenerator.java
index c6c571b..feaf910 100644
--- a/espblog/src/main/java/org/apache/sling/samples/espblog/internal/ThumbnailGenerator.java
+++ b/espblog/src/main/java/org/apache/sling/samples/espblog/internal/ThumbnailGenerator.java
@@ -39,6 +39,9 @@
 import javax.jcr.observation.EventListener;
 import javax.jcr.observation.ObservationManager;
 
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Property;
+import org.apache.felix.scr.annotations.Reference;
 import org.apache.sling.jcr.api.SlingRepository;
 import org.osgi.service.component.ComponentContext;
 import org.slf4j.Logger;
@@ -48,20 +51,18 @@
  * Observe the espblog content for changes, and generate
  * thumbnails when images are added.
  *
- * @scr.component immediate="true" metatype="false"
- * @scr.property name="service.description" value="Sling ESP blog sample thumbnails generator"
- * @scr.property name="service.vendor" value="Apache Software Foundation"
- *
  */
+@Component(immediate=true)
+@Property(name="service.description", value="Sling ESP blog sample thumbnails generator")
 public class ThumbnailGenerator implements EventListener {
 
     private Session session;
     private ObservationManager observationManager;
 
-	/** @scr.reference */
+	@Reference
 	private SlingRepository repository;
 
-    /** @scr.property value="/content/espblog" */
+    @Property(value="/content/espblog")
     private static final String CONTENT_PATH_PROPERTY = "content.path";
 
 	private static final Logger log = LoggerFactory
diff --git a/path-based-rtp/pom.xml b/path-based-rtp/pom.xml
index 14f5dc5..b714d5b 100644
--- a/path-based-rtp/pom.xml
+++ b/path-based-rtp/pom.xml
@@ -130,6 +130,10 @@
             <artifactId>slf4j-simple</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.scr.annotations</artifactId>
+        </dependency>
 
     </dependencies>
 </project>
diff --git a/path-based-rtp/src/main/java/org/apache/sling/samples/pathbasedrtp/PathBasedResourceDecorator.java b/path-based-rtp/src/main/java/org/apache/sling/samples/pathbasedrtp/PathBasedResourceDecorator.java
index 0ab24a8..a9857c7 100644
--- a/path-based-rtp/src/main/java/org/apache/sling/samples/pathbasedrtp/PathBasedResourceDecorator.java
+++ b/path-based-rtp/src/main/java/org/apache/sling/samples/pathbasedrtp/PathBasedResourceDecorator.java
@@ -24,6 +24,10 @@
 import javax.jcr.RepositoryException;
 import javax.servlet.http.HttpServletRequest;
 
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Property;
+import org.apache.felix.scr.annotations.PropertyUnbounded;
+import org.apache.felix.scr.annotations.Service;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ResourceDecorator;
 import org.apache.sling.api.resource.ResourceWrapper;
@@ -41,12 +45,10 @@
  *  mapping applies, and "2" is the (1-based) index of the path component to
  *  use as the resource type.
  *
- * @scr.component immediate="true" label="%defaultRtp.name"
- *                description="%defaultRtp.description"
- * @scr.property name="service.vendor" value="The Apache Software Foundation"
- * @scr.property name="service.description" value="Sling Sample Resource Decorator"
- * @scr.service
  */
+@Component(metatype=true, label="%defaultRtp.name", description="%defaultRtp.description")
+@Service
+@Property(name="service.description", value="Sling Sample Resource Decorator")
 public class PathBasedResourceDecorator implements ResourceDecorator {
 
     /**
@@ -54,10 +56,8 @@
      *  specify the use of path component 2 for the /content path, and add a similar
      *  definition for the /sling-test-pbrt path that is used in integration testing.
      *
-     * @scr.property
-     *  values.1="/content:2"
-     *  values.2="/sling-test-pbrt:2"
      */
+    @Property(value={"/content:2", "/sling-test-pbrt:2"}, unbounded=PropertyUnbounded.ARRAY)
     private static final String PROP_PATH_MAPPING = "path.mapping";
 
     private final Logger log = LoggerFactory.getLogger(getClass());
diff --git a/post-servlet-extensions/pom.xml b/post-servlet-extensions/pom.xml
index 2eddd4e..7dddf40 100644
--- a/post-servlet-extensions/pom.xml
+++ b/post-servlet-extensions/pom.xml
@@ -110,6 +110,10 @@
             <groupId>org.osgi</groupId>
             <artifactId>org.osgi.compendium</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.scr.annotations</artifactId>
+        </dependency>
         
     </dependencies>
 </project>
diff --git a/post-servlet-extensions/src/main/java/org/apache/sling/samples/postservletextensions/internal/LinkOperation.java b/post-servlet-extensions/src/main/java/org/apache/sling/samples/postservletextensions/internal/LinkOperation.java
index c13385a..6228925 100644
--- a/post-servlet-extensions/src/main/java/org/apache/sling/samples/postservletextensions/internal/LinkOperation.java
+++ b/post-servlet-extensions/src/main/java/org/apache/sling/samples/postservletextensions/internal/LinkOperation.java
@@ -20,27 +20,24 @@
 
 import javax.jcr.Item;
 import javax.jcr.Node;
-import javax.jcr.Property;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
-import javax.jcr.Value;
 
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Service;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.request.RequestParameter;
-import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.servlets.HtmlResponse;
 import org.apache.sling.servlets.post.AbstractSlingPostOperation;
 import org.apache.sling.servlets.post.Modification;
-import org.apache.sling.servlets.post.SlingPostOperation;
-import org.apache.sling.servlets.post.SlingPostProcessor;
 
 /**
  * This operation allows to create links between nodes.
- * 
- * @scr.component metatype="no" immediate="true"
- * @scr.service interface="org.apache.sling.servlets.post.SlingPostOperation"
- * @scr.property name="sling.post.operation" value="link"
+ *
  */
+@Component
+@Service(value=org.apache.sling.servlets.post.SlingPostOperation.class)
+@org.apache.felix.scr.annotations.Property(name="sling.post.operation", value="link")
 public class LinkOperation extends AbstractSlingPostOperation {
 
     public final LinkHelper linkHelper = new LinkHelper();
diff --git a/post-servlet-extensions/src/main/java/org/apache/sling/samples/postservletextensions/internal/LinkProcessor.java b/post-servlet-extensions/src/main/java/org/apache/sling/samples/postservletextensions/internal/LinkProcessor.java
index b234fa4..3810880 100644
--- a/post-servlet-extensions/src/main/java/org/apache/sling/samples/postservletextensions/internal/LinkProcessor.java
+++ b/post-servlet-extensions/src/main/java/org/apache/sling/samples/postservletextensions/internal/LinkProcessor.java
@@ -22,6 +22,9 @@
 import javax.jcr.Node;
 import javax.jcr.Session;
 
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Property;
+import org.apache.felix.scr.annotations.Service;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.request.RequestParameter;
 import org.apache.sling.servlets.post.Modification;
@@ -30,20 +33,20 @@
 
 /**
  * This processor allows to create links between nodes.
- * 
- * @scr.component metatype="no" immediate="true"
- * @scr.service interface="org.apache.sling.servlets.post.SlingPostProcessor"
- * @scr.property name="sling.post.processor" value="link"
+ *
  */
+@Component
+@Service(value=SlingPostProcessor.class)
+@Property(name="sling.post.processor", value="link")
 public class LinkProcessor implements SlingPostProcessor {
 
 	public final LinkHelper linkHelper = new LinkHelper();
-	
+
 	public void process(SlingHttpServletRequest request,
 			List<Modification> changes) throws Exception {
 
 		Session session = request.getResourceResolver().adaptTo(Session.class);
-		
+
 		RequestParameter linkParam = request.getRequestParameter(":link");
 		if (linkParam != null){
 			String linkPath = linkParam.getString();
@@ -53,7 +56,7 @@
 				// is it possible to add the response to the method header ?
 				String resourcePath = changes.get(0).getSource();
 				Node source = (Node) session.getItem(resourcePath);
-				
+
 				// create a symetric link
 				if (session.itemExists(linkPath)) {
 					Item targetItem = session.getItem(linkPath);
@@ -63,7 +66,7 @@
 				}
 			}
 		}
-		
+
 
 	}
 }
diff --git a/simple-demo/pom.xml b/simple-demo/pom.xml
index a554c38..fb33ccb 100644
--- a/simple-demo/pom.xml
+++ b/simple-demo/pom.xml
@@ -173,5 +173,9 @@
             <groupId>org.osgi</groupId>
             <artifactId>org.osgi.core</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.scr.annotations</artifactId>
+        </dependency>
     </dependencies>
 </project>
diff --git a/simple-demo/src/main/java/org/apache/sling/sample/Navigation.java b/simple-demo/src/main/java/org/apache/sling/sample/Navigation.java
index 4983cc9..985f9b8 100644
--- a/simple-demo/src/main/java/org/apache/sling/sample/Navigation.java
+++ b/simple-demo/src/main/java/org/apache/sling/sample/Navigation.java
@@ -24,6 +24,10 @@
 
 import javax.servlet.ServletException;
 
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Properties;
+import org.apache.felix.scr.annotations.Property;
+import org.apache.felix.scr.annotations.Service;
 import org.apache.sling.api.SlingConstants;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.SlingHttpServletResponse;
@@ -36,13 +40,14 @@
  * considered a "page" if the Content object is an instance of the
  * {@link SamplePage} class.
  *
- * @scr.component immediate="true" metatype="no"
- * @scr.property name="service.description" value="Sample Navigation Component"
- * @scr.property name="service.vendor" value="The Apache Software Foundation"
- * @scr.property name="sling.servlet.resourceTypes" value="sling/sample.navigation"
- * @scr.property name="sling.servlet.methods" value="html"
- * @scr.service interface="javax.servlet.Servlet"
  */
+@Component
+@Service(value=javax.servlet.Servlet.class)
+@Properties({
+    @Property(name="service.description", value="Sample Navigation Component"),
+    @Property(name="sling.servlet.resourceTypes", value="sling/sample.navigation"),
+    @Property(name="sling.servlet.methods", value="html")
+})
 public class Navigation extends SlingSafeMethodsServlet {
 
     public static final String RESOURCE_TYPE = "sling/sample.navigation";
diff --git a/simple-demo/src/main/java/org/apache/sling/sample/filter/ZipFilter.java b/simple-demo/src/main/java/org/apache/sling/sample/filter/ZipFilter.java
index 5c6bd3c..17d8681 100644
--- a/simple-demo/src/main/java/org/apache/sling/sample/filter/ZipFilter.java
+++ b/simple-demo/src/main/java/org/apache/sling/sample/filter/ZipFilter.java
@@ -38,6 +38,10 @@
 import javax.servlet.ServletRequest;
 import javax.servlet.ServletResponse;
 
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Properties;
+import org.apache.felix.scr.annotations.Property;
+import org.apache.felix.scr.annotations.Service;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.SlingHttpServletResponse;
 import org.apache.sling.api.wrappers.SlingHttpServletResponseWrapper;
@@ -61,13 +65,14 @@
  * and in fact even slows response time down !!
  * </ul>
  *
- * @scr.component metatype="no" enabled="no"
- * @scr.property name="service.description" value="Sample Request Filter"
- * @scr.property name="service.vendor" value="The Apache Software Foundation"
- * @scr.property name="filter.scope" value="request" private="true"
- * @scr.property name="filter.order" value="-2147483648" type="Integer" private="true"
- * @scr.service
  */
+@Component(enabled=false)
+@Service
+@Properties({
+    @Property(name="service.description", value="Sample Request Filter"),
+    @Property(name="filter.scope", value="request", propertyPrivate=true),
+    @Property(name="filter.order", intValue=-2147483648, propertyPrivate=true)
+})
 public class ZipFilter implements Filter {
 
     /**
diff --git a/webloader/service/pom.xml b/webloader/service/pom.xml
index be404de..2f8056b 100644
--- a/webloader/service/pom.xml
+++ b/webloader/service/pom.xml
@@ -108,5 +108,9 @@
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-api</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.scr.annotations</artifactId>
+        </dependency>
     </dependencies>
 </project>
diff --git a/webloader/service/src/main/java/org/apache/sling/samples/webloader/internal/WebLoaderImpl.java b/webloader/service/src/main/java/org/apache/sling/samples/webloader/internal/WebLoaderImpl.java
index 87c77f5..9f60218 100644
--- a/webloader/service/src/main/java/org/apache/sling/samples/webloader/internal/WebLoaderImpl.java
+++ b/webloader/service/src/main/java/org/apache/sling/samples/webloader/internal/WebLoaderImpl.java
@@ -21,47 +21,41 @@
 import java.util.List;
 import java.util.Map;
 
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Property;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.Service;
 import org.apache.sling.commons.mime.MimeTypeService;
+import org.apache.sling.jcr.api.SlingRepository;
 import org.apache.sling.samples.webloader.Webloader;
 import org.apache.sling.samples.webloader.WebloaderJobStatus;
-import org.apache.sling.jcr.api.SlingRepository;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-/** Webloader implementation, manages WebloaderJobs
- *  
- * @scr.service
- *
- * @scr.component
- *  immediate="true"
- *  metatype="no"
- *
- * @scr.property
- *  name="service.description"
- *  value="Sling Webloader service"
- *
- * @scr.property
- *  name="service.vendor"
- *  value="The Apache Software Foundation"
+/**
+ * Webloader implementation, manages WebloaderJobs
  *
  */
+@Component(immediate=true)
+@Service
+@Property(name="service.description", value="Sling Webloader service")
 public class WebLoaderImpl implements Webloader {
-    
+
     private static final Logger log = LoggerFactory.getLogger(WebLoaderImpl.class);
-    
+
     private final Map<String, WebloaderJob> jobs = new HashMap<String, WebloaderJob>();
-    
-    /** @scr.reference */
+
+    @Reference
     private SlingRepository repository;
-    
-    /** @scr.reference */
+
+    @Reference
     private MimeTypeService mimeTypeService;
 
     /** @inheritDoc */
-    public String createJob(String webQuery, String storagePath, String 
+    public String createJob(String webQuery, String storagePath, String
             fileExtensions, int maxDocsToRetrieve, int maxDocSizeInKb) {
         deleteFinishedJobs();
-        final WebloaderJob j = new WebloaderJob(repository, mimeTypeService, 
+        final WebloaderJob j = new WebloaderJob(repository, mimeTypeService,
                 webQuery, storagePath, fileExtensions, maxDocsToRetrieve, maxDocSizeInKb);
         synchronized (jobs) {
             jobs.put(j.getJobId(), j);
@@ -83,7 +77,7 @@
                 toDelete.add(j);
             }
         }
-        
+
         synchronized (jobs) {
             for(WebloaderJob j : toDelete) {
                 jobs.remove(j.getJobId());
