SLING-10911 Update to Parent 46 (#2)

Also migration to the standard scr annotations
diff --git a/bnd.bnd b/bnd.bnd
new file mode 100644
index 0000000..08fe365
--- /dev/null
+++ b/bnd.bnd
@@ -0,0 +1,20 @@
+Sling-Nodetypes:\
+  SLING-INF/nodetypes/test.cnd
+
+Sling-Initial-Content:\
+  SLING-INF/content;path:=/sling-test;overwrite=true;uninstall=true,\
+  SLING-INF/install;path:=/apps/sling-test/install;overwrite=true;uninstall=true,\
+  SLING-INF/root;path:=/;overwrite=false;uninstall=false
+
+Sling-Bundle-Resources:\
+  /sling-test/sling/from-bundle;path:=/SLING-INF/res/sling-test/sling/from-bundle,\
+  /system;path:=/SLING-INF/res/sling-test/sling/SLING-1733
+
+Sling-Test-Regexp:\
+  org.apache.sling.launchpad.testservices.serversidetests.*Test
+
+Sling-Model-Packages:\
+  org.apache.sling.launchpad.testservices.models
+
+-includeresource:\
+  @org.apache.felix.utils-*.jar!/org/apache/felix/utils/json/JSONWriter*
diff --git a/pom.xml b/pom.xml
index e3902c7..9cacb96 100644
--- a/pom.xml
+++ b/pom.xml
@@ -22,13 +22,12 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache.sling</groupId>
-        <artifactId>sling</artifactId>
-        <version>26</version>
+        <artifactId>sling-bundle-parent</artifactId>
+        <version>46</version>
         <relativePath />
     </parent>
 
     <artifactId>org.apache.sling.launchpad.test-services</artifactId>
-    <packaging>bundle</packaging>
     <version>12-SNAPSHOT</version>
 
     <name>Apache Sling Launchpad Testing Services</name>
@@ -43,51 +42,12 @@
       <tag>HEAD</tag>
   </scm>
 
+    <properties>
+        <project.build.outputTimestamp>2021-07-16T18:32:08Z</project.build.outputTimestamp>
+    </properties>
     <build>
         <plugins>
             <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-scr-plugin</artifactId>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <extensions>true</extensions>
-                <configuration>
-                    <instructions>
-                        <Export-Package>
-                          org.apache.sling.launchpad.testservices.exported,
-                          org.apache.sling.launchpad.testservices.models,
-                          org.apache.sling.launchpad.testservices.events
-                        </Export-Package>
-                        <Private-Package>
-                            org.apache.sling.launchpad.testservices.*
-                        </Private-Package>
-                        <Sling-Nodetypes>
-                            SLING-INF/nodetypes/test.cnd
-                        </Sling-Nodetypes>
-                        <Sling-Initial-Content>
-                            SLING-INF/content;path:=/sling-test;overwrite=true;uninstall=true,
-                            SLING-INF/install;path:=/apps/sling-test/install;overwrite=true;uninstall=true,
-                            SLING-INF/root;path:=/;overwrite=false;uninstall=false,
-                        </Sling-Initial-Content>
-                        <Sling-Bundle-Resources>
-                            /sling-test/sling/from-bundle;path:=/SLING-INF/res/sling-test/sling/from-bundle,
-                            /system;path:=/SLING-INF/res/sling-test/sling/SLING-1733
-                        </Sling-Bundle-Resources>
-                        <Sling-Test-Regexp>
-                            org.apache.sling.launchpad.testservices.serversidetests.*Test
-                        </Sling-Test-Regexp>
-                        <Embed-Dependency>
-                        org.apache.felix.utils;inline=org/apache/felix/utils/json/JSONWriter.class
-                    </Embed-Dependency>
-                        <Sling-Model-Packages>
-                          org.apache.sling.launchpad.testservices.models
-                        </Sling-Model-Packages>
-                    </instructions>
-                </configuration>
-            </plugin>
-            <plugin>
                 <groupId>org.apache.rat</groupId>
                 <artifactId>apache-rat-plugin</artifactId>
                 <configuration>
@@ -100,19 +60,6 @@
                     </excludes>
                 </configuration>
             </plugin>
-            <plugin>
-                <groupId>org.apache.sling</groupId>
-                <artifactId>maven-sling-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>generate-adapter-metadata</id>
-                        <phase>process-classes</phase>
-                        <goals>
-                            <goal>generate-adapter-metadata</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
         </plugins>
     </build>
     <dependencies>
@@ -135,13 +82,8 @@
             <scope>compile</scope>
         </dependency>
         <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.scr.annotations</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
             <groupId>javax.servlet</groupId>
-            <artifactId>servlet-api</artifactId>
+            <artifactId>javax.servlet-api</artifactId>
         </dependency>
         <dependency>
             <groupId>javax.servlet</groupId>
@@ -182,11 +124,7 @@
         </dependency>
         <dependency>
             <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.compendium</artifactId>
+            <artifactId>org.osgi.service.component.annotations</artifactId>
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
@@ -195,7 +133,6 @@
         <dependency>
             <groupId>javax.jcr</groupId>
             <artifactId>jcr</artifactId>
-            <version>2.0</version>
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
@@ -220,11 +157,23 @@
             <scope>compile</scope>
         </dependency>
         <dependency>
-        <groupId>org.apache.felix</groupId>
-        <artifactId>org.apache.felix.utils</artifactId>
-        <version>1.9.0</version>
-        <scope>provided</scope>
-    </dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.utils</artifactId>
+            <version>1.9.0</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.servicemix.specs</groupId>
+            <artifactId>org.apache.servicemix.specs.jaxb-api-2.2</artifactId>
+            <version>2.9.0</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.servlets.annotations</artifactId>
+            <version>1.2.6</version>
+        </dependency>
+        
     </dependencies>
 
 </project>
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/adapter/NotReallyAnAdapterFactory.java b/src/main/java/org/apache/sling/launchpad/testservices/adapter/NotReallyAnAdapterFactory.java
index 9b5e54a..c01d423 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/adapter/NotReallyAnAdapterFactory.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/adapter/NotReallyAnAdapterFactory.java
@@ -16,21 +16,18 @@
  */
 package org.apache.sling.launchpad.testservices.adapter;
 
-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.adapter.AdapterFactory;
+import org.osgi.service.component.annotations.Component;
 
 /**
  * Service which looks like an adapter factory, but isn't. See SLING-2522.
  */
-@Component
-@Service(NotReallyAnAdapterFactory.class)
-@Properties({
-    @Property(name=AdapterFactory.ADAPTABLE_CLASSES, value="org.apache.sling.api.resource.Resource"),
-    @Property(name=AdapterFactory.ADAPTER_CLASSES, value="something_which_shouldnt_appear")
-})
+@Component(
+        service = NotReallyAnAdapterFactory.class,
+        property = {
+            AdapterFactory.ADAPTABLE_CLASSES + ":String=org.apache.sling.api.resource.Resource",
+            AdapterFactory.ADAPTER_CLASSES + ":String=something_which_shouldnt_appear"
+        })
 public class NotReallyAnAdapterFactory implements AdapterFactory {
 
     public <AdapterType> AdapterType getAdapter(Object adaptable, Class<AdapterType> type) {
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/adapter/ReallyAnAdapterFactory.java b/src/main/java/org/apache/sling/launchpad/testservices/adapter/ReallyAnAdapterFactory.java
index 9aced43..12a0b5e 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/adapter/ReallyAnAdapterFactory.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/adapter/ReallyAnAdapterFactory.java
@@ -16,20 +16,17 @@
  */
 package org.apache.sling.launchpad.testservices.adapter;
 
-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.adapter.AdapterFactory;
+import org.osgi.service.component.annotations.Component;
 /**
  * Service which actually is an adapter factory. See SLING-2522.
  */
-@Component
-@Service(AdapterFactory.class)
-@Properties({
-    @Property(name=AdapterFactory.ADAPTABLE_CLASSES, value="org.apache.sling.api.resource.Resource"),
-    @Property(name=AdapterFactory.ADAPTER_CLASSES, value="something_which_should_appear")
-})
+@Component(
+        service = AdapterFactory.class,
+        property = {
+            AdapterFactory.ADAPTABLE_CLASSES + ":String=org.apache.sling.api.resource.Resource",
+            AdapterFactory.ADAPTER_CLASSES + ":String=something_which_should_appear"
+        })
 public class ReallyAnAdapterFactory implements AdapterFactory {
 
     public <AdapterType> AdapterType getAdapter(Object adaptable, Class<AdapterType> type) {
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/events/EventsCounterImpl.java b/src/main/java/org/apache/sling/launchpad/testservices/events/EventsCounterImpl.java
index fac8928..53ea8a5 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/events/EventsCounterImpl.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/events/EventsCounterImpl.java
@@ -23,15 +23,12 @@
 
 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.felix.utils.json.JSONWriter;
 import org.apache.sling.api.SlingConstants;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.SlingHttpServletResponse;
 import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
+import org.osgi.service.component.annotations.Component;
 import org.osgi.service.event.Event;
 import org.osgi.service.event.EventHandler;
 import org.slf4j.Logger;
@@ -41,32 +38,30 @@
  *  report them to clients.
  */
 @SuppressWarnings("serial")
-@Component(immediate=true, metatype=false)
-@Service
-@Properties({
-    @Property(name="service.description", value="Paths Test Servlet"),
-    @Property(name="service.vendor", value="The Apache Software Foundation"),
-    @Property(name="sling.servlet.paths", value="/testing/EventsCounter"), 
-    @Property(name="sling.servlet.extensions", value="json"), 
-    @Property(
-            name=org.osgi.service.event.EventConstants.EVENT_TOPIC,
-            value= {
-                    SlingConstants.TOPIC_RESOURCE_ADDED,
-                    SlingConstants.TOPIC_RESOURCE_RESOLVER_MAPPING_CHANGED
-            })
-})
+@Component(
+        immediate=true,
+        service = {
+                javax.servlet.Servlet.class,
+                org.osgi.service.event.EventHandler.class,
+                org.apache.sling.launchpad.testservices.events.EventsCounter.class
+        },
+        property = {
+            "service.description:String=Paths Test Servlet",
+            "service.vendor:String=The Apache Software Foundation",
+            "sling.servlet.paths:String=/testing/EventsCounter", 
+            "sling.servlet.extensions:String=json", 
+            org.osgi.service.event.EventConstants.EVENT_TOPIC + ":String=" + SlingConstants.TOPIC_RESOURCE_ADDED,
+            org.osgi.service.event.EventConstants.EVENT_TOPIC + ":String=" + SlingConstants.TOPIC_RESOURCE_RESOLVER_MAPPING_CHANGED
+        }
+)
 public class EventsCounterImpl extends SlingSafeMethodsServlet implements EventHandler,EventsCounter {
 
-    private final Map<String, AtomicInteger> counters = new HashMap<String, AtomicInteger>();
+    private final Map<String, AtomicInteger> counters = new HashMap<>();
     private final Logger log = LoggerFactory.getLogger(getClass());
     
     public synchronized void handleEvent(Event event) {
         final String topic = event.getTopic();
-        AtomicInteger counter = counters.get(topic);
-        if(counter == null) {
-            counter = new AtomicInteger();
-            counters.put(topic, counter);
-        }
+        AtomicInteger counter = counters.computeIfAbsent(topic, k -> new AtomicInteger());
         counter.incrementAndGet();
         log.debug("{} counter is now {}", topic, counter.get());
     }
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/events/package-info.java b/src/main/java/org/apache/sling/launchpad/testservices/events/package-info.java
new file mode 100644
index 0000000..0541ae8
--- /dev/null
+++ b/src/main/java/org/apache/sling/launchpad/testservices/events/package-info.java
@@ -0,0 +1,21 @@
+/*
+ * 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.
+ */
+
+@org.osgi.annotation.versioning.Version("2.0.17")
+package org.apache.sling.launchpad.testservices.events;
\ No newline at end of file
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/exported/FakeSlingHttpServletRequest.java b/src/main/java/org/apache/sling/launchpad/testservices/exported/FakeSlingHttpServletRequest.java
index 75a44df..3a66388 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/exported/FakeSlingHttpServletRequest.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/exported/FakeSlingHttpServletRequest.java
@@ -17,17 +17,29 @@
 package org.apache.sling.launchpad.testservices.exported;
 
 import java.io.BufferedReader;
+import java.io.IOException;
 import java.security.Principal;
+import java.util.Collection;
+import java.util.Collections;
 import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.Locale;
 import java.util.Map;
 
+import javax.servlet.AsyncContext;
+import javax.servlet.DispatcherType;
 import javax.servlet.RequestDispatcher;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
 import javax.servlet.ServletInputStream;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
 import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
+import javax.servlet.http.HttpUpgradeHandler;
+import javax.servlet.http.Part;
 
 public class FakeSlingHttpServletRequest implements HttpServletRequest {
 
@@ -41,7 +53,7 @@
 
     private final int port;
 
-    private final Map<String, Object> attrs = new HashMap<String, Object>();
+    private final Map<String, Object> attrs = new HashMap<>();
 
     private String contextPath;
 
@@ -79,8 +91,8 @@
         return attrs.get(name);
     }
 
-    public Enumeration<?> getAttributeNames() {
-        return null;
+    public Enumeration<String> getAttributeNames() {
+        return Collections.emptyEnumeration();
     }
 
     public String getCharacterEncoding() {
@@ -115,7 +127,7 @@
         return null;
     }
 
-    public Enumeration<?> getLocales() {
+    public Enumeration<Locale> getLocales() {
         return null;
     }
 
@@ -123,11 +135,11 @@
         return null;
     }
 
-    public Map<?, ?> getParameterMap() {
-        return null;
+    public Map<String, String[]> getParameterMap() {
+        return Collections.emptyMap();
     }
 
-    public Enumeration<?> getParameterNames() {
+    public Enumeration<String> getParameterNames() {
         return null;
     }
 
@@ -209,11 +221,11 @@
         return null;
     }
 
-    public Enumeration<?> getHeaderNames() {
+    public Enumeration<String> getHeaderNames() {
         return null;
     }
 
-    public Enumeration<?> getHeaders(String name) {
+    public Enumeration<String> getHeaders(String name) {
         return null;
     }
 
@@ -284,4 +296,81 @@
     public boolean isUserInRole(String role) {
         return false;
     }
+
+    @Override
+    public long getContentLengthLong() {
+        return -1;
+    }
+
+    @Override
+    public ServletContext getServletContext() {
+        return null;
+    }
+
+    @Override
+    public AsyncContext startAsync() throws IllegalStateException {
+        return null;
+    }
+
+    @Override
+    public AsyncContext startAsync(ServletRequest servletRequest, ServletResponse servletResponse)
+            throws IllegalStateException {
+        return null;
+    }
+
+    @Override
+    public boolean isAsyncStarted() {
+        return false;
+    }
+
+    @Override
+    public boolean isAsyncSupported() {
+        return false;
+    }
+
+    @Override
+    public AsyncContext getAsyncContext() {
+        return null;
+    }
+
+    @Override
+    public DispatcherType getDispatcherType() {
+        return null;
+    }
+
+    @Override
+    public String changeSessionId() {
+        return null;
+    }
+
+    @Override
+    public boolean authenticate(HttpServletResponse response) throws IOException, ServletException {
+        return false;
+    }
+
+    @Override
+    public void login(String username, String password) throws ServletException {
+        //no-op
+    }
+
+    @Override
+    public void logout() throws ServletException {
+        //no-op
+    }
+
+    @Override
+    public Collection<Part> getParts() throws IOException, ServletException {
+        return Collections.emptyList();
+    }
+
+    @Override
+    public Part getPart(String name) throws IOException, ServletException {
+        return null;
+    }
+
+    @Override
+    public <T extends HttpUpgradeHandler> T upgrade(Class<T> handlerClass) throws IOException, ServletException {
+        return null;
+    }
+
 }
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/exported/MappingsFacade.java b/src/main/java/org/apache/sling/launchpad/testservices/exported/MappingsFacade.java
index 52f426a..6ee2a74 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/exported/MappingsFacade.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/exported/MappingsFacade.java
@@ -32,7 +32,7 @@
     
     // How long to wait for mapping updates
     public static final String MAPPING_UPDATE_TIMEOUT_MSEC = "ResourceResolverTest.mapping.update.timeout.msec";
-    private static final long updateTimeout = Long.valueOf(System.getProperty(MAPPING_UPDATE_TIMEOUT_MSEC, "10000"));
+    private static final long updateTimeout = Long.parseLong(System.getProperty(MAPPING_UPDATE_TIMEOUT_MSEC, "10000"));
 
     public MappingsFacade(EventsCounter c) {
         if(firstInstance) {
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/exported/package-info.java b/src/main/java/org/apache/sling/launchpad/testservices/exported/package-info.java
index 3ac4cd6..eb4573e 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/exported/package-info.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/exported/package-info.java
@@ -17,5 +17,5 @@
  * under the License.
  */
 
-@org.osgi.annotation.versioning.Version("2.1.0")
+@org.osgi.annotation.versioning.Version("2.2.0")
 package org.apache.sling.launchpad.testservices.exported;
\ No newline at end of file
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/filters/NoPropertyFilter.java b/src/main/java/org/apache/sling/launchpad/testservices/filters/NoPropertyFilter.java
index 8809409..37cfbf4 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/filters/NoPropertyFilter.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/filters/NoPropertyFilter.java
@@ -16,19 +16,17 @@
  */
 package org.apache.sling.launchpad.testservices.filters;
 
-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.osgi.service.component.annotations.Component;
 
 /** Example/test filter */
-@Component(metatype=false)
-@Service(value=javax.servlet.Filter.class)
-@Properties({
-    @Property(name="service.description", value="NoProperty Test Filter"),
-    @Property(name="service.vendor", value="The Apache Software Foundation"),
-    @Property(name="sling.filter.scope", value="request")
-})
+@Component(
+        service = javax.servlet.Filter.class,
+        property = {
+            "service.description:String=NoProperty Test Filter",
+            "service.vendor:String=The Apache Software Foundation",
+            "sling.filter.scope:String=request"
+        }
+        )
 public class NoPropertyFilter extends TestFilter {
 
     @Override
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/filters/SlingFilter.java b/src/main/java/org/apache/sling/launchpad/testservices/filters/SlingFilter.java
index ed807b1..7bf7c01 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/filters/SlingFilter.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/filters/SlingFilter.java
@@ -16,20 +16,18 @@
  */
 package org.apache.sling.launchpad.testservices.filters;
 
-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.osgi.service.component.annotations.Component;
 
 /** Example/test Filter */
-@Component(immediate=true, metatype=false)
-@Service(value=javax.servlet.Filter.class)
-@Properties({
-    @Property(name="service.description", value="SlingFilter Test Filter"),
-    @Property(name="service.vendor", value="The Apache Software Foundation"),
-    @Property(name="filter.scope", value="request"),
-    @Property(name="sling.filter.scope", value="request")
-})
+@Component(immediate=true,
+    service = javax.servlet.Filter.class,
+    property = {
+        "service.description:String=SlingFilter Test Filter",
+        "service.vendor:String=The Apache Software Foundation",
+        "filter.scope:String=request",
+        "sling.filter.scope:String=request"
+    }
+)
 public class SlingFilter extends TestFilter {
 
     @Override
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/filters/SlingFilterWithPattern.java b/src/main/java/org/apache/sling/launchpad/testservices/filters/SlingFilterWithPattern.java
index c7ba64a..2cf8506 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/filters/SlingFilterWithPattern.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/filters/SlingFilterWithPattern.java
@@ -16,21 +16,19 @@
  */
 package org.apache.sling.launchpad.testservices.filters;
 
-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.osgi.service.component.annotations.Component;
 
 /** Example/test Filter with sling.filter.pattern see also SLING-4294 */
-@Component(immediate=true, metatype=false)
-@Service(value=javax.servlet.Filter.class)
-@Properties({
-    @Property(name="service.description", value="SlingFilter Test Filter"),
-    @Property(name="service.vendor", value="The Apache Software Foundation"),
-    @Property(name="filter.scope", value="request"),
-    @Property(name="sling.filter.scope", value="request"),
-    @Property(name="sling.filter.pattern", value="/system.*")
-})
+@Component(
+        immediate=true,
+        service = javax.servlet.Filter.class,
+        property = {
+                "service.description:String=SlingFilter Test Filter",
+                "service.vendor:String=The Apache Software Foundation",
+                "filter.scope:String=request",
+                "sling.filter.scope:String=request",
+                "sling.filter.pattern:String=/system.*"
+        })
 public class SlingFilterWithPattern extends TestFilter {
 
     @Override
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/handlers/TestDeleteHandler1.java b/src/main/java/org/apache/sling/launchpad/testservices/handlers/TestDeleteHandler1.java
index 4943b13..3de8bcd 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/handlers/TestDeleteHandler1.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/handlers/TestDeleteHandler1.java
@@ -18,21 +18,16 @@
  */
 package org.apache.sling.launchpad.testservices.handlers;
 
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Property;
-import org.apache.felix.scr.annotations.Service;
-import org.apache.jackrabbit.server.io.DeleteContext;
 import org.apache.jackrabbit.server.io.DeleteHandler;
-import org.apache.jackrabbit.webdav.DavException;
-import org.apache.jackrabbit.webdav.DavResource;
 import org.osgi.framework.Constants;
+import org.osgi.service.component.annotations.Component;
 
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-
-@Component(metatype = true)
-@Property(name = Constants.SERVICE_RANKING, intValue = 2, propertyPrivate = false)
-@Service(value = { DeleteHandler.class })
+@Component(
+        service = DeleteHandler.class,
+        property = {
+                Constants.SERVICE_RANKING + ":Integer=2"
+        }
+        )
 public class TestDeleteHandler1 extends AbstractDeleteHandler{
 
     public TestDeleteHandler1() {
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/handlers/TestDeleteHandler2.java b/src/main/java/org/apache/sling/launchpad/testservices/handlers/TestDeleteHandler2.java
index defb3cf..e5d8970 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/handlers/TestDeleteHandler2.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/handlers/TestDeleteHandler2.java
@@ -18,21 +18,16 @@
  */
 package org.apache.sling.launchpad.testservices.handlers;
 
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Property;
-import org.apache.felix.scr.annotations.Service;
-import org.apache.jackrabbit.server.io.DeleteContext;
 import org.apache.jackrabbit.server.io.DeleteHandler;
-import org.apache.jackrabbit.webdav.DavException;
-import org.apache.jackrabbit.webdav.DavResource;
 import org.osgi.framework.Constants;
+import org.osgi.service.component.annotations.Component;
 
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-
-@Component(metatype = true)
-@Property(name = Constants.SERVICE_RANKING, intValue = 2, propertyPrivate = false)
-@Service(value = { DeleteHandler.class })
+@Component(
+        service = DeleteHandler.class,
+        property = {
+                Constants.SERVICE_RANKING + ":Integer=2"
+        }
+        )
 public class TestDeleteHandler2 extends AbstractDeleteHandler {
 
     public TestDeleteHandler2() {
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/handlers/TestHandler1.java b/src/main/java/org/apache/sling/launchpad/testservices/handlers/TestHandler1.java
index 829ccae..d1c413c 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/handlers/TestHandler1.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/handlers/TestHandler1.java
@@ -18,16 +18,18 @@
  */
 package org.apache.sling.launchpad.testservices.handlers;
 
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Property;
-import org.apache.felix.scr.annotations.Service;
 import org.osgi.framework.Constants;
+import org.osgi.service.component.annotations.Component;
 
-@Component(metatype = true)
-@Property(name = Constants.SERVICE_RANKING, intValue = 3, propertyPrivate = false)
-@Service(value = {
-        org.apache.jackrabbit.server.io.IOHandler.class,
-        org.apache.jackrabbit.server.io.PropertyHandler.class})
+@Component(
+        service = {
+                org.apache.jackrabbit.server.io.IOHandler.class,
+                org.apache.jackrabbit.server.io.PropertyHandler.class
+        },
+        property = {
+                Constants.SERVICE_RANKING + ":Integer=3"
+        }
+        )
 public class TestHandler1 extends AbstractHandler {
 
     @Override
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/handlers/TestHandler2.java b/src/main/java/org/apache/sling/launchpad/testservices/handlers/TestHandler2.java
index 115be73..63e617e 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/handlers/TestHandler2.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/handlers/TestHandler2.java
@@ -18,16 +18,18 @@
  */
 package org.apache.sling.launchpad.testservices.handlers;
 
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Property;
-import org.apache.felix.scr.annotations.Service;
 import org.osgi.framework.Constants;
+import org.osgi.service.component.annotations.Component;
 
-@Component(metatype = true)
-@Property(name = Constants.SERVICE_RANKING, intValue = 2, propertyPrivate = false)
-@Service(value = {
-        org.apache.jackrabbit.server.io.IOHandler.class,
-        org.apache.jackrabbit.server.io.PropertyHandler.class})
+@Component(
+        service = {
+                org.apache.jackrabbit.server.io.IOHandler.class,
+                org.apache.jackrabbit.server.io.PropertyHandler.class
+        },
+        property = {
+                Constants.SERVICE_RANKING + ":Integer=2"
+        }
+        )
 public class TestHandler2 extends AbstractHandler {
 
     @Override
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/handlers/TestHandler3.java b/src/main/java/org/apache/sling/launchpad/testservices/handlers/TestHandler3.java
index 6562ceb..ce61d9f 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/handlers/TestHandler3.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/handlers/TestHandler3.java
@@ -18,16 +18,18 @@
  */
 package org.apache.sling.launchpad.testservices.handlers;
 
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Property;
-import org.apache.felix.scr.annotations.Service;
 import org.osgi.framework.Constants;
+import org.osgi.service.component.annotations.Component;
 
-@Component(metatype = true)
-@Property(name = Constants.SERVICE_RANKING, intValue = 1, propertyPrivate = false)
-@Service(value = {
-        org.apache.jackrabbit.server.io.IOHandler.class,
-        org.apache.jackrabbit.server.io.PropertyHandler.class})
+@Component(
+        service = {
+                org.apache.jackrabbit.server.io.IOHandler.class,
+                org.apache.jackrabbit.server.io.PropertyHandler.class
+        },
+        property = {
+                Constants.SERVICE_RANKING + ":Integer=1"
+        }
+        )
 public class TestHandler3 extends AbstractHandler {
 
     @Override
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/jcr/FullTextQueryServlet.java b/src/main/java/org/apache/sling/launchpad/testservices/jcr/FullTextQueryServlet.java
index 8adb71c..97f1698 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/jcr/FullTextQueryServlet.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/jcr/FullTextQueryServlet.java
@@ -28,24 +28,20 @@
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletResponse;
 
-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.servlets.SlingSafeMethodsServlet;
+import org.osgi.service.component.annotations.Component;
 
 /** Servlet used to test HtmlResponse escaping */
-@Component(immediate=true, metatype=false)
-@Service(value=javax.servlet.Servlet.class)
-@Properties({
-    @Property(name="service.description", value="FullText Query Servlet"),
-    @Property(name="service.vendor", value="The Apache Software Foundation"),
-    @Property(name="sling.servlet.paths", value={
-            "/testing/fullTextQuery"
-    })
-})
+@Component(
+        immediate=true, 
+        service = javax.servlet.Servlet.class,
+        property = {
+                "service.description:String=FullText Query Servlet",
+                "service.vendor:String=The Apache Software Foundation",
+                "sling.servlet.paths:String=/testing/fullTextQuery"
+        })
 /**
  * Outputs paths of nodes matching the specified full-text search
  * 
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/jcr/TestNamespaceMapper.java b/src/main/java/org/apache/sling/launchpad/testservices/jcr/TestNamespaceMapper.java
index 111c6f7..9786c24 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/jcr/TestNamespaceMapper.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/jcr/TestNamespaceMapper.java
@@ -19,23 +19,21 @@
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 
-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.jcr.api.NamespaceMapper;
+import org.osgi.service.component.annotations.Component;
 
 /**
  * Test Implementation of NamespaceMapper
  */
-@Component(immediate=true, metatype=false)
-@Service(value=org.apache.sling.jcr.api.NamespaceMapper.class)
-@Properties({
-    @Property(name="service.description", value="Test NamespaceMapper"),
-    @Property(name="service.vendor", value="The Apache Software Foundation"),
-    @Property(name="filter.scope", value="request"),
-    @Property(name="sling.filter.scope", value="request")
-})
+@Component(
+        immediate=true, 
+        service = org.apache.sling.jcr.api.NamespaceMapper.class,
+        property = {
+                "service.description:String=Test NamespaceMapper",
+                "service.vendor:String=The Apache Software Foundation",
+                "filter.scope:String=request",
+                "sling.filter.scope:String=request"
+        })
 public class TestNamespaceMapper implements NamespaceMapper {
 
     public void defineNamespacePrefixes(Session session) throws RepositoryException {
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/jcr/WorkspaceCreator.java b/src/main/java/org/apache/sling/launchpad/testservices/jcr/WorkspaceCreator.java
index ae98738..532721b 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/jcr/WorkspaceCreator.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/jcr/WorkspaceCreator.java
@@ -21,16 +21,17 @@
 import javax.jcr.Session;
 import javax.jcr.Workspace;
 
-import org.apache.felix.scr.annotations.Activate;
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Deactivate;
-import org.apache.felix.scr.annotations.Property;
-import org.apache.felix.scr.annotations.Reference;
 import org.apache.sling.jcr.api.SlingRepository;
 import org.osgi.framework.Constants;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Deactivate;
+import org.osgi.service.component.annotations.Reference;
 
-@Component
-@Property(name = Constants.SERVICE_DESCRIPTION, value = "Generates Test Workspaces ws1, ws2, ws3")
+@Component(
+        property = {
+            Constants.SERVICE_DESCRIPTION + ":String=Generates Test Workspaces ws1, ws2, ws3"
+        })
 public class WorkspaceCreator {
 
     @Reference
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/models/package-info.java b/src/main/java/org/apache/sling/launchpad/testservices/models/package-info.java
new file mode 100644
index 0000000..5445b90
--- /dev/null
+++ b/src/main/java/org/apache/sling/launchpad/testservices/models/package-info.java
@@ -0,0 +1,21 @@
+/*
+ * 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.
+ */
+
+@org.osgi.annotation.versioning.Version("2.0.16")
+package org.apache.sling.launchpad.testservices.models;
\ No newline at end of file
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/post/OldStylePostOperationExample.java b/src/main/java/org/apache/sling/launchpad/testservices/post/OldStylePostOperationExample.java
index a6dfd5b..832818a 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/post/OldStylePostOperationExample.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/post/OldStylePostOperationExample.java
@@ -19,23 +19,20 @@
 import javax.jcr.Node;
 import javax.jcr.RepositoryException;
 
-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.SlingException;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.servlets.HtmlResponse;
 import org.apache.sling.servlets.post.SlingPostOperation;
 import org.apache.sling.servlets.post.SlingPostProcessor;
+import org.osgi.service.component.annotations.Component;
 
 /** Example using the now deprecated SlingPostOperation */
-@Component(immediate=true)
-@Service
-@Properties({
-    @Property(name=SlingPostOperation.PROP_OPERATION_NAME, value="test:OldStylePostOperationExample")
-})
+@Component(
+        immediate=true,
+        property = {
+                SlingPostOperation.PROP_OPERATION_NAME + ":String=test:OldStylePostOperationExample"
+        })
 public class OldStylePostOperationExample implements SlingPostOperation {
 
     public void run(SlingHttpServletRequest request, HtmlResponse response, SlingPostProcessor[] processors) {
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/post/SlingPostOperationExample.java b/src/main/java/org/apache/sling/launchpad/testservices/post/SlingPostOperationExample.java
index 494c98d..35c68e0 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/post/SlingPostOperationExample.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/post/SlingPostOperationExample.java
@@ -19,20 +19,20 @@
 import javax.jcr.Node;
 import javax.jcr.RepositoryException;
 
-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.SlingException;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.servlets.post.PostOperation;
 import org.apache.sling.servlets.post.PostResponse;
 import org.apache.sling.servlets.post.SlingPostProcessor;
+import org.osgi.service.component.annotations.Component;
 
 /** Example PostOperation used in integration tests */
-@Component(immediate=true)
-@Service
-@Property(name=PostOperation.PROP_OPERATION_NAME, value="test:SlingPostOperationExample")
+@Component(
+        immediate=true,
+        property = {
+                PostOperation.PROP_OPERATION_NAME + ":String=test:SlingPostOperationExample"
+        })
 public class SlingPostOperationExample implements PostOperation {
     public void run(SlingHttpServletRequest request, PostResponse response, SlingPostProcessor[] processors) {
         final Resource r = request.getResource();
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/post/SlingPostProcessorOne.java b/src/main/java/org/apache/sling/launchpad/testservices/post/SlingPostProcessorOne.java
index 103c5d9..e1c49aa 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/post/SlingPostProcessorOne.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/post/SlingPostProcessorOne.java
@@ -18,18 +18,17 @@
 
 import java.util.List;
 
-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.servlets.post.Modification;
 import org.apache.sling.servlets.post.SlingPostProcessor;
 import org.osgi.framework.Constants;
+import org.osgi.service.component.annotations.Component;
 
 /** Example SlingPostProcessor used in integration tests */
-@Component
-@Service
-@Property(name=Constants.SERVICE_RANKING, intValue=2)
+@Component(
+        property = {
+                Constants.SERVICE_RANKING + ":Integer=2"
+        })
 public class SlingPostProcessorOne implements SlingPostProcessor {
     @Override
     public void process(SlingHttpServletRequest request, List<Modification> mods)
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/post/SlingPostProcessorTwo.java b/src/main/java/org/apache/sling/launchpad/testservices/post/SlingPostProcessorTwo.java
index 00addbf..6ef3f23 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/post/SlingPostProcessorTwo.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/post/SlingPostProcessorTwo.java
@@ -18,18 +18,17 @@
 
 import java.util.List;
 
-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.servlets.post.Modification;
 import org.apache.sling.servlets.post.SlingPostProcessor;
 import org.osgi.framework.Constants;
+import org.osgi.service.component.annotations.Component;
 
 /** Example SlingPostProcessor used in integration tests */
-@Component
-@Service
-@Property(name=Constants.SERVICE_RANKING, intValue=1)
+@Component(
+        property = {
+                Constants.SERVICE_RANKING + ":Integer=1"
+        })
 public class SlingPostProcessorTwo implements SlingPostProcessor {
     @Override
     public void process(SlingHttpServletRequest request, List<Modification> mods)
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/repository/FirstRepositoryInitializer.java b/src/main/java/org/apache/sling/launchpad/testservices/repository/FirstRepositoryInitializer.java
index e9011b1..369f1f8 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/repository/FirstRepositoryInitializer.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/repository/FirstRepositoryInitializer.java
@@ -18,13 +18,10 @@
 
 import javax.jcr.Session;
 
-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.jcr.api.SlingRepository;
 import org.apache.sling.jcr.api.SlingRepositoryInitializer;
 import org.osgi.framework.Constants;
+import org.osgi.service.component.annotations.Component;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -32,12 +29,12 @@
  * SlingRepositoryInitializer that creates a node to which SecondRepositoryInitializer
  * can add a property, to verify that they are executed in order of their service ranking.
  */
-@Component
-@Service(SlingRepositoryInitializer.class)
-@Properties({
-    // Execute this before SecondRepositoryInitializer
-    @Property(name=Constants.SERVICE_RANKING, intValue=100)
-})
+@Component(
+        service = SlingRepositoryInitializer.class,
+        property = {
+                // Execute this before SecondRepositoryInitializer
+                Constants.SERVICE_RANKING + ":Integer=100"
+        })
 public class FirstRepositoryInitializer implements SlingRepositoryInitializer {
 
     private final Logger log = LoggerFactory.getLogger(getClass());
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/repository/SecondRepositoryInitializer.java b/src/main/java/org/apache/sling/launchpad/testservices/repository/SecondRepositoryInitializer.java
index 4f30d0e..84a6bf1 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/repository/SecondRepositoryInitializer.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/repository/SecondRepositoryInitializer.java
@@ -18,13 +18,10 @@
 
 import javax.jcr.Session;
 
-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.jcr.api.SlingRepository;
 import org.apache.sling.jcr.api.SlingRepositoryInitializer;
 import org.osgi.framework.Constants;
+import org.osgi.service.component.annotations.Component;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -32,12 +29,12 @@
  * SlingRepositoryInitializer that adds a property to the node created by 
  * FirstRepositoryInitializer.
  */
-@Component
-@Service(SlingRepositoryInitializer.class)
-@Properties({
-    // Execute this after FirstRepositoryInitializer
-    @Property(name=Constants.SERVICE_RANKING, intValue=200)
-})
+@Component(
+        service = SlingRepositoryInitializer.class,
+        property = {
+                // Execute this after FirstRepositoryInitializer
+                Constants.SERVICE_RANKING + ":Integer=200"
+        })
 public class SecondRepositoryInitializer implements SlingRepositoryInitializer {
 
     private final Logger log = LoggerFactory.getLogger(getClass());
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/repository/SystemUsersInitializer.java b/src/main/java/org/apache/sling/launchpad/testservices/repository/SystemUsersInitializer.java
index b0b0ad4..5927895 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/repository/SystemUsersInitializer.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/repository/SystemUsersInitializer.java
@@ -20,18 +20,18 @@
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.Reader;
+import java.nio.charset.StandardCharsets;
 import java.util.List;
 
 import javax.jcr.Session;
 
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.Service;
 import org.apache.sling.jcr.api.SlingRepository;
 import org.apache.sling.jcr.api.SlingRepositoryInitializer;
 import org.apache.sling.jcr.repoinit.JcrRepoInitOpsProcessor;
 import org.apache.sling.repoinit.parser.RepoInitParser;
 import org.apache.sling.repoinit.parser.operations.Operation;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -40,8 +40,8 @@
  * Meant to be used for our integration tests until we can create those from
  * the provisioning model.
  */
-@Component
-@Service(SlingRepositoryInitializer.class)
+@Component(
+        service = SlingRepositoryInitializer.class)
 public class SystemUsersInitializer implements SlingRepositoryInitializer {
 
     private final Logger log = LoggerFactory.getLogger(getClass());
@@ -59,17 +59,21 @@
         final Session s = repo.loginAdministrative(null);
         final InputStream is = getClass().getResourceAsStream(REPOINIT_FILE);
         try {
-            if(is == null) {
+            if (is == null) {
                 throw new IOException("Class Resource not found:" + REPOINIT_FILE);
             }
-            final Reader r = new InputStreamReader(is, "UTF-8");
-            final List<Operation> ops = parser.parse(r); 
+            final List<Operation> ops; 
+            try (final Reader r = new InputStreamReader(is, StandardCharsets.UTF_8)) {
+                ops = parser.parse(r); 
+            }
             log.info("Executing {} repoinit Operations", ops.size());
             processor.apply(s, ops);
             s.save();
         } finally {
             s.logout();
-            is.close();
+            if (is != null) {
+                is.close();
+            }
         }
     }
 }
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/resource/TestResourceDecorator.java b/src/main/java/org/apache/sling/launchpad/testservices/resource/TestResourceDecorator.java
index 0d2dc8e..ac263bd 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/resource/TestResourceDecorator.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/resource/TestResourceDecorator.java
@@ -18,22 +18,20 @@
 
 import javax.servlet.http.HttpServletRequest;
 
-import org.apache.felix.scr.annotations.Component;
-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;
+import org.osgi.service.component.annotations.Component;
 
 /** Test ResourceDecorator that sets a specific resource type
  *  for resources having a path that starts
  *  with /testing + simple name of this class + /
  */
 @Component
-@Service
 public class TestResourceDecorator implements ResourceDecorator {
 
     private final String PATH = "/testing/" + getClass().getSimpleName() + "/";
-    private final String RESOURCE_TYPE = "TEST_RESOURCE_DECORATOR_RESOURCE_TYPE";
+    private static final String RESOURCE_TYPE = "TEST_RESOURCE_DECORATOR_RESOURCE_TYPE";
     
     public Resource decorate(Resource resource, HttpServletRequest request) {
         return decorate(resource);
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/resourceprovider/PlanetResource.java b/src/main/java/org/apache/sling/launchpad/testservices/resourceprovider/PlanetResource.java
index ec5a05e..051d319 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/resourceprovider/PlanetResource.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/resourceprovider/PlanetResource.java
@@ -42,7 +42,7 @@
     
     static class PlanetValueMap extends ValueMapDecorator {
         PlanetValueMap(String name, int distance) {
-            super(new HashMap<String, Object>());
+            super(new HashMap<>());
             put("name", name);
             put("distance", distance);
         }
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/resourceprovider/PlanetsResourceProvider.java b/src/main/java/org/apache/sling/launchpad/testservices/resourceprovider/PlanetsResourceProvider.java
index 9e6c7f2..d820c16 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/resourceprovider/PlanetsResourceProvider.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/resourceprovider/PlanetsResourceProvider.java
@@ -22,10 +22,6 @@
 import java.util.List;
 import java.util.Map;
 
-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.resource.Resource;
 import org.apache.sling.api.resource.SyntheticResource;
 import org.apache.sling.api.resource.ValueMap;
@@ -33,6 +29,7 @@
 import org.apache.sling.spi.resource.provider.ResolveContext;
 import org.apache.sling.spi.resource.provider.ResourceContext;
 import org.apache.sling.spi.resource.provider.ResourceProvider;
+import org.osgi.service.component.annotations.Component;
 
 /** Test/example ResourceProvider that provides info about
  *  the Solar System's planets at /planets. 
@@ -42,17 +39,17 @@
  *  If you need an example based on the old ResourceProvider interface,
  *  see this code at svn revision 1727946.
  */
-@Component
-@Service(value=ResourceProvider.class)
-@Properties({ 
-    @Property(name = ResourceProvider.PROPERTY_NAME, value = "Planets"),
-    @Property(name = ResourceProvider.PROPERTY_ROOT, value=PlanetsResourceProvider.ROOT)
-})
+@Component(
+        service = ResourceProvider.class,
+        property = {
+                ResourceProvider.PROPERTY_NAME + ":String=Planets",
+                ResourceProvider.PROPERTY_ROOT + ":String=" + PlanetsResourceProvider.ROOT
+        })
 public class PlanetsResourceProvider extends ResourceProvider<DoesNotNeedAContext> {
 
     /** Our planet data. PlanetResource is created when resolving, as
      *  it points to a specific ResourceResolver. */
-    private static final Map<String, ValueMap> PLANETS = new HashMap<String, ValueMap>();
+    private static final Map<String, ValueMap> PLANETS = new HashMap<>();
     
     /** This can be configurable of course */ 
     public static final String ROOT = "/planets";
@@ -98,7 +95,7 @@
     public Iterator<Resource> listChildren(ResolveContext<DoesNotNeedAContext> ctx, Resource parent) {
         if(parent.getPath().startsWith(ROOT)) {
             // Not the most efficient thing...good enough for this example
-            final List<Resource> kids = new ArrayList<Resource>();
+            final List<Resource> kids = new ArrayList<>();
             for(Map.Entry<String, ValueMap> e : PLANETS.entrySet()) {
                 if(parent.getPath().equals(parentPath(e.getKey()))) {
                     kids.add(new PlanetResource(parent.getResourceResolver(), e.getKey(), e.getValue()));
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/scripting/GroovyBindingsValuesProvider.java b/src/main/java/org/apache/sling/launchpad/testservices/scripting/GroovyBindingsValuesProvider.java
index 7200646..e114fd9 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/scripting/GroovyBindingsValuesProvider.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/scripting/GroovyBindingsValuesProvider.java
@@ -18,19 +18,16 @@
 
 import javax.script.Bindings;
 
-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.scripting.api.BindingsValuesProvider;
+import org.osgi.service.component.annotations.Component;
 /** Example/test BindingsValuesProvider targeting groovy scripts */
-@Component(immediate=true, metatype=false)
-@Service
-@Properties({
-    @Property(name="service.description", value="Groovy BindingsValuesProvider"),
-    @Property(name="service.vendor", value="The Apache Software Foundation"),
-    @Property(name="javax.script.name", value="groovy")
-})
+@Component(
+        immediate=true, 
+        property = {
+                "service.description:String=Groovy BindingsValuesProvider",
+                "service.vendor:String=The Apache Software Foundation",
+                "javax.script.name:String=groovy"
+        })
 public class GroovyBindingsValuesProvider implements BindingsValuesProvider {
 
     public void addBindings(Bindings bindings) {
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/scripting/JSPBindingsValuesProvider.java b/src/main/java/org/apache/sling/launchpad/testservices/scripting/JSPBindingsValuesProvider.java
index 7e4eeed..d18669a 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/scripting/JSPBindingsValuesProvider.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/scripting/JSPBindingsValuesProvider.java
@@ -18,19 +18,16 @@
 
 import javax.script.Bindings;
 
-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.scripting.api.BindingsValuesProvider;
+import org.osgi.service.component.annotations.Component;
 
 /** Example/test BindingsValuesProvider targeting JSP scripts */
-@Component(immediate=true, metatype=false)
-@Service
-@Properties({
-    @Property(name="service.description", value="JSP BindingsValuesProvider"),
-    @Property(name="service.vendor", value="The Apache Software Foundation")
-})
+@Component(
+        immediate=true, 
+        property = {
+                "service.description:String=JSP BindingsValuesProvider",
+                "service.vendor:String=The Apache Software Foundation"
+        })
 public class JSPBindingsValuesProvider implements BindingsValuesProvider {
 
     public void addBindings(Bindings bindings) {
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/scripting/StandaloneScriptExecutionServlet.java b/src/main/java/org/apache/sling/launchpad/testservices/scripting/StandaloneScriptExecutionServlet.java
index ea5d7e3..193bf81 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/scripting/StandaloneScriptExecutionServlet.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/scripting/StandaloneScriptExecutionServlet.java
@@ -21,30 +21,28 @@
 
 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.SlingHttpServletRequest;
 import org.apache.sling.api.SlingHttpServletResponse;
 import org.apache.sling.api.scripting.SlingBindings;
 import org.apache.sling.api.scripting.SlingScript;
 import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
+import org.osgi.service.component.annotations.Component;
 
 /**
  * Test Servlet that executes a named script in standalone mode, i.e.
  * without a request or response. 
  */
 
-@Component(immediate=true, metatype=false)
-@Service(value=javax.servlet.Servlet.class)
-@Properties({
-    @Property(name="service.description", value="StandaloneScriptExecutionServlet Test Servlet"),
-    @Property(name="service.vendor", value="The Apache Software Foundation"),
-    @Property(name="sling.servlet.resourceTypes", value="sling/servlet/default"),
-    @Property(name="sling.servlet.selectors", value = "StandaloneScriptExecutionServlet"),
-    @Property(name="sling.servlet.extensions",value = "txt")
-})
+@Component(
+        immediate=true, 
+        service = javax.servlet.Servlet.class,
+        property = {
+                "service.description:String=StandaloneScriptExecutionServlet Test Servlet",
+                "service.vendor:String=The Apache Software Foundation",
+                "sling.servlet.resourceTypes:String=sling/servlet/default",
+                "sling.servlet.selectors:String=StandaloneScriptExecutionServlet",
+                "sling.servlet.extensions:String=txt"
+        })
 @SuppressWarnings("serial")
 public class StandaloneScriptExecutionServlet extends SlingSafeMethodsServlet {
 
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/scripting/StringBindingsValuesProvider.java b/src/main/java/org/apache/sling/launchpad/testservices/scripting/StringBindingsValuesProvider.java
index fae7b0a..66236ec 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/scripting/StringBindingsValuesProvider.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/scripting/StringBindingsValuesProvider.java
@@ -18,18 +18,15 @@
 
 import javax.script.Bindings;
 
-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.scripting.api.BindingsValuesProvider;
+import org.osgi.service.component.annotations.Component;
 /** Example/test BindingsValuesProvider targeting all scripts */
-@Component(immediate=true, metatype=false)
-@Service
-@Properties({
-    @Property(name="service.description", value="StringBindingsValuesProvider"),
-    @Property(name="service.vendor", value="The Apache Software Foundation")
-})
+@Component(
+        immediate=true, 
+        property = {
+                "service.description:String=StringBindingsValuesProvider",
+                "service.vendor:String=The Apache Software Foundation"
+        })
 public class StringBindingsValuesProvider implements BindingsValuesProvider {
 
     public void addBindings(Bindings bindings) {
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/serversidetests/LowerRankingStringTransformer.java b/src/main/java/org/apache/sling/launchpad/testservices/serversidetests/LowerRankingStringTransformer.java
index 5f9eac7..497f1f5 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/serversidetests/LowerRankingStringTransformer.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/serversidetests/LowerRankingStringTransformer.java
@@ -16,19 +16,15 @@
  */
 package org.apache.sling.launchpad.testservices.serversidetests;
 
-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.launchpad.testservices.exported.StringTransformer;
+import org.osgi.service.component.annotations.Component;
 
-@Component
-@Service
-@Properties({
-    @Property(name="mode", value="lowercase"),
-    @Property(name="service.ranking", intValue=-10)
-})
-
+@Component(
+        property = {
+                "mode:String=lowercase",
+                "service.ranking:Integer=-10"
+        }
+        )
 public class LowerRankingStringTransformer implements StringTransformer {
     public String transform(String str) {
         throw new UnsupportedOperationException("This " + getClass().getSimpleName() + " shouldn't be called in tests due to lower ranking");
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/serversidetests/LowercaseStringTransformer.java b/src/main/java/org/apache/sling/launchpad/testservices/serversidetests/LowercaseStringTransformer.java
index 4c564de..c78a38e 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/serversidetests/LowercaseStringTransformer.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/serversidetests/LowercaseStringTransformer.java
@@ -16,14 +16,14 @@
  */
 package org.apache.sling.launchpad.testservices.serversidetests;
 
-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.launchpad.testservices.exported.StringTransformer;
+import org.osgi.service.component.annotations.Component;
 
-@Component
-@Service
-@Property(name="mode", value="lowercase")
+@Component(
+        property = {
+                "mode:String=lowercase"
+        }
+        )
 public class LowercaseStringTransformer implements StringTransformer {
     public String transform(String str) {
         return str.toLowerCase();
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/serversidetests/MappingEventsTest.java b/src/main/java/org/apache/sling/launchpad/testservices/serversidetests/MappingEventsTest.java
index df1052d..4c78438 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/serversidetests/MappingEventsTest.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/serversidetests/MappingEventsTest.java
@@ -46,7 +46,7 @@
     private static final Logger logger = LoggerFactory.getLogger(MappingEventsTest.class);
     private static Session session;
     private Node mapRoot;
-    private static List<String> toDelete = new ArrayList<String>();
+    private static List<String> toDelete = new ArrayList<>();
     
     private static final int N_STEPS = 20;
     
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/serversidetests/ResourceResolverWithVanityBloomFilterTest.java b/src/main/java/org/apache/sling/launchpad/testservices/serversidetests/ResourceResolverWithVanityBloomFilterTest.java
index 75a5455..1330d16 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/serversidetests/ResourceResolverWithVanityBloomFilterTest.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/serversidetests/ResourceResolverWithVanityBloomFilterTest.java
@@ -69,7 +69,7 @@
     private Node rootNode;
     private Node mapRoot;
     private String [] vanity;
-    private static List<String> toDelete = new ArrayList<String>();
+    private static List<String> toDelete = new ArrayList<>();
     private static ResourceResolverFactory cleanupResolverFactory;
     private MappingsFacade mappingsFacade;
     
@@ -192,7 +192,7 @@
         anon1.close();
 
         // same workspace but admin user
-        final Map<String, Object> admin0Cred = new HashMap<String, Object>();
+        final Map<String, Object> admin0Cred = new HashMap<>();
         admin0Cred.put(ResourceResolverFactory.USER, "admin");
         admin0Cred.put(ResourceResolverFactory.PASSWORD, "admin".toCharArray());
         final ResourceResolver admin0 = anon0.clone(admin0Cred);
@@ -203,13 +203,13 @@
         admin0.close();
 
         // same user but different workspace
-        final Map<String, Object> anon2Cred = new HashMap<String, Object>();
+        final Map<String, Object> anon2Cred = new HashMap<>();
         final ResourceResolver anon2 = anon0.clone(anon2Cred);
         assertEquals("anonymous", anon2.getUserID());
         anon2.close();
 
         // different user and workspace
-        final Map<String, Object> admin1Cred = new HashMap<String, Object>();
+        final Map<String, Object> admin1Cred = new HashMap<>();
         admin1Cred.put(ResourceResolverFactory.USER, "admin");
         admin1Cred.put(ResourceResolverFactory.PASSWORD, "admin".toCharArray());
         final ResourceResolver admin1 = anon0.clone(admin1Cred);
@@ -233,7 +233,7 @@
         admin1.close();
 
         // same workspace but anonymous user
-        final Map<String, Object> anon0Cred = new HashMap<String, Object>();
+        final Map<String, Object> anon0Cred = new HashMap<>();
         anon0Cred.put(ResourceResolverFactory.USER, "anonymous");
         final ResourceResolver anon0 = admin0.clone(anon0Cred);
         final Session anon0Session = anon0.adaptTo(Session.class);
@@ -243,13 +243,13 @@
         anon0.close();
 
         // same user but different workspace
-        final Map<String, Object> admin2Cred = new HashMap<String, Object>();
+        final Map<String, Object> admin2Cred = new HashMap<>();
         final ResourceResolver admin2 = admin0.clone(admin2Cred);
         assertEquals("admin", admin2.getUserID());
         admin2.close();
 
         // different user and workspace
-        final Map<String, Object> anon1Cred = new HashMap<String, Object>();
+        final Map<String, Object> anon1Cred = new HashMap<>();
         anon1Cred.put(ResourceResolverFactory.USER, "anonymous");
         final ResourceResolver anon1 = admin0.clone(anon1Cred);
         assertEquals("anonymous", anon1.getUserID());
@@ -326,7 +326,7 @@
     }*/
 
     @Test public void test_attributes_from_authInfo() throws Exception {
-        final Map<String, Object> authInfo = new HashMap<String, Object>();
+        final Map<String, Object> authInfo = new HashMap<>();
         authInfo.put(ResourceResolverFactory.USER, "admin");
         authInfo.put(ResourceResolverFactory.PASSWORD, "admin".toCharArray());
         authInfo.put("testAttributeString", "AStringValue");
@@ -347,7 +347,7 @@
             assertEquals("admin", rr.getAttribute(ResourceResolverFactory.USER));
             assertNull(rr.getAttribute(ResourceResolverFactory.PASSWORD));
 
-            final HashSet<String> validNames = new HashSet<String>();
+            final HashSet<String> validNames = new HashSet<>();
             validNames.add(ResourceResolverFactory.USER);
             validNames.add("testAttributeString");
             validNames.add("testAttributeNumber");
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/serversidetests/UppercaseStringTransformer.java b/src/main/java/org/apache/sling/launchpad/testservices/serversidetests/UppercaseStringTransformer.java
index ffbcf3e..ce6cabd 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/serversidetests/UppercaseStringTransformer.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/serversidetests/UppercaseStringTransformer.java
@@ -16,14 +16,14 @@
  */
 package org.apache.sling.launchpad.testservices.serversidetests;
 
-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.launchpad.testservices.exported.StringTransformer;
+import org.osgi.service.component.annotations.Component;
 
-@Component
-@Service
-@Property(name="mode", value="uppercase")
+@Component(
+        property = {
+                "mode:String=uppercase"
+        }
+        )
 public class UppercaseStringTransformer implements StringTransformer {
     public String transform(String str) {
         return str.toUpperCase();
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/servlets/AnonymousAccessConfigServlet.java b/src/main/java/org/apache/sling/launchpad/testservices/servlets/AnonymousAccessConfigServlet.java
index f0f5fc8..5c34012 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/servlets/AnonymousAccessConfigServlet.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/servlets/AnonymousAccessConfigServlet.java
@@ -22,16 +22,13 @@
 
 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.Reference;
-import org.apache.felix.scr.annotations.Service;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.SlingHttpServletResponse;
 import org.apache.sling.api.servlets.SlingAllMethodsServlet;
 import org.osgi.service.cm.Configuration;
 import org.osgi.service.cm.ConfigurationAdmin;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
 import org.osgi.service.event.Event;
 import org.osgi.service.event.EventHandler;
 
@@ -40,13 +37,20 @@
  * that the authenticator service has accepted the configuration change.
  */
 @SuppressWarnings("serial")
-@Component(immediate = true)
-@Service
-@Properties({ @Property(name = "service.description", value = "Anonymous Access Config Servlet"),
-        @Property(name = "service.vendor", value = "The Apache Software Foundation"),
-        @Property(name = "sling.servlet.paths", value = "/testing/AnonymousAccessConfigServlet"),
-        @Property(name = "sling.servlet.extensions", value = "txt"),
-        @Property(name = "event.topics", value = "org/osgi/framework/ServiceEvent/MODIFIED") })
+@Component(
+        immediate = true,
+        service = {
+                org.osgi.service.event.EventHandler.class,
+                javax.servlet.Servlet.class
+        },
+        property = {
+                "service.description:String=Anonymous Access Config Servlet",
+                "service.vendor:String=The Apache Software Foundation",
+                "sling.servlet.paths:String=/testing/AnonymousAccessConfigServlet",
+                "sling.servlet.extensions:String=txt",
+                "event.topics:String=org/osgi/framework/ServiceEvent/MODIFIED"
+        }
+    )
 public class AnonymousAccessConfigServlet extends SlingAllMethodsServlet implements EventHandler {
 
     private static final String PROP_AUTH_ANNONYMOUS = "auth.annonymous";
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/servlets/CustomPostResponseCreatorImpl.java b/src/main/java/org/apache/sling/launchpad/testservices/servlets/CustomPostResponseCreatorImpl.java
index 713626a..210e713 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/servlets/CustomPostResponseCreatorImpl.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/servlets/CustomPostResponseCreatorImpl.java
@@ -20,18 +20,16 @@
 
 import javax.servlet.http.HttpServletResponse;
 
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Service;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.servlets.post.AbstractPostResponse;
 import org.apache.sling.servlets.post.PostResponse;
 import org.apache.sling.servlets.post.PostResponseCreator;
+import org.osgi.service.component.annotations.Component;
 
 /**
  * Sample implementation of the PostResponseCreator interface.
  */
 @Component
-@Service
 public class CustomPostResponseCreatorImpl implements PostResponseCreator {
 
     public PostResponse createPostResponse(SlingHttpServletRequest req) {
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/servlets/DomServlet.java b/src/main/java/org/apache/sling/launchpad/testservices/servlets/DomServlet.java
index 0e83539..b35eb25 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/servlets/DomServlet.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/servlets/DomServlet.java
@@ -19,15 +19,17 @@
 import java.io.IOException;
 import java.io.StringReader;
 
+import javax.servlet.Servlet;
 import javax.servlet.ServletException;
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
 
-import org.apache.felix.scr.annotations.sling.SlingServlet;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.SlingHttpServletResponse;
 import org.apache.sling.api.servlets.SlingAllMethodsServlet;
+import org.apache.sling.servlets.annotations.SlingServletPathsStrict;
+import org.osgi.service.component.annotations.Component;
 import org.w3c.dom.Document;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
@@ -38,7 +40,10 @@
  * The <tt>DomServlet</tt> evaluates a simple XML document using DOM APIs.
  * 
  */
-@SlingServlet(paths = "/bin/dom", extensions = "xml")
+@Component(service=Servlet.class)
+@SlingServletPathsStrict(
+        paths = "/bin/dom",
+        extensions = "xml")
 public class DomServlet extends SlingAllMethodsServlet {
 
     private static final long serialVersionUID = 1L;
@@ -51,6 +56,9 @@
 
         try {
             DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+            // completely disable external entities declarations:
+            factory.setFeature("http://xml.org/sax/features/external-general-entities", false);
+            factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
             DocumentBuilder builder = factory.newDocumentBuilder();
 
             Document document = builder.parse(new InputSource(new StringReader(XML_INPUT)));
@@ -62,9 +70,7 @@
 
             response.setContentType("text/plain");
             response.getWriter().write(result);
-        } catch (ParserConfigurationException e) {
-            throw new ServletException(e);
-        } catch (SAXException e) {
+        } catch (SAXException | ParserConfigurationException e) {
             throw new ServletException(e);
         }
     }
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/servlets/ExportedPackageServlet.java b/src/main/java/org/apache/sling/launchpad/testservices/servlets/ExportedPackageServlet.java
index b0a61e0..5543573 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/servlets/ExportedPackageServlet.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/servlets/ExportedPackageServlet.java
@@ -21,27 +21,25 @@
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletResponse;
 
-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.Reference;
-import org.apache.felix.scr.annotations.Service;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.SlingHttpServletResponse;
 import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
 import org.osgi.service.packageadmin.ExportedPackage;
 import org.osgi.service.packageadmin.PackageAdmin;
 
 /** Test servlet for SLING-2808 */
-@Component(immediate=true, metatype=false)
-@Service(value=javax.servlet.Servlet.class)
-@Properties({
-    @Property(name="service.description", value="Exported packages Test Servlet"),
-    @Property(name="service.vendor", value="The Apache Software Foundation"),
-    @Property(name="sling.servlet.resourceTypes", value="sling/servlet/default"),
-    @Property(name="sling.servlet.selectors", value="EXPORTED_PACKAGES"),
-    @Property(name="sling.servlet.extensions", value="txt")
-})
+@Component(
+        immediate=true, 
+        service = javax.servlet.Servlet.class,
+        property = {
+                "service.description:String=Exported packages Test Servlet",
+                "service.vendor:String=The Apache Software Foundation",
+                "sling.servlet.resourceTypes:String=sling/servlet/default",
+                "sling.servlet.selectors:String=EXPORTED_PACKAGES",
+                "sling.servlet.extensions:String=txt"
+        })
 @SuppressWarnings("serial")
 public class ExportedPackageServlet extends SlingSafeMethodsServlet {
     @Reference
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/servlets/ExtensionServlet.java b/src/main/java/org/apache/sling/launchpad/testservices/servlets/ExtensionServlet.java
index 7170529..04d73ea 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/servlets/ExtensionServlet.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/servlets/ExtensionServlet.java
@@ -16,20 +16,19 @@
  */
 package org.apache.sling.launchpad.testservices.servlets;
 
-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.osgi.service.component.annotations.Component;
 
 /** Example/test Sling Servlet registered with two extensions */
-@Component(immediate=true, metatype=false)
-@Service(value=javax.servlet.Servlet.class)
-@Properties({
-    @Property(name="service.description", value="Extension Test Servlet"),
-    @Property(name="service.vendor", value="The Apache Software Foundation"),
-    @Property(name="sling.servlet.resourceTypes", value="sling/servlet/default"),
-    @Property(name="sling.servlet.extensions", value={ "TEST_EXT_1", "TEST_EXT_2" })
-})
+@Component(
+        immediate=true, 
+        service = javax.servlet.Servlet.class,
+        property = {
+                "service.description:String=Extension Test Servlet",
+                "service.vendor:String=The Apache Software Foundation",
+                "sling.servlet.resourceTypes:String=sling/servlet/default",
+                "sling.servlet.extensions:String=TEST_EXT_1",
+                "sling.servlet.extensions:String=TEST_EXT_2"
+        })
 @SuppressWarnings("serial")
 public class ExtensionServlet extends TestServlet {
 }
\ No newline at end of file
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/servlets/GetConfigServlet.java b/src/main/java/org/apache/sling/launchpad/testservices/servlets/GetConfigServlet.java
index 219bc5c..df3e3e7 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/servlets/GetConfigServlet.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/servlets/GetConfigServlet.java
@@ -17,35 +17,31 @@
 package org.apache.sling.launchpad.testservices.servlets;
 
 import java.io.IOException;
-import java.util.Arrays;
 import java.util.Dictionary;
 import java.util.Enumeration;
 
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletResponse;
 
-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.Reference;
-import org.apache.felix.scr.annotations.Service;
 import org.apache.felix.utils.json.JSONWriter;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.SlingHttpServletResponse;
 import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
 import org.osgi.service.cm.Configuration;
 import org.osgi.service.cm.ConfigurationAdmin;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
 
 /** GET returns the contents of an OSGi config by PID */
 @SuppressWarnings("serial")
-@Component
-@Service
-@Properties({
-    @Property(name="service.description", value="GetConfig Test Servlet"),
-    @Property(name="service.vendor", value="The Apache Software Foundation"),
-    @Property(name="sling.servlet.paths",value="/testing/GetConfigServlet"),
-    @Property(name="sling.servlet.extensions",value="json")
-})
+@Component(
+        service = javax.servlet.Servlet.class,
+        property = {
+                "service.description:String=GetConfig Test Servlet",
+                "service.vendor:String=The Apache Software Foundation",
+                "sling.servlet.paths:String=/testing/GetConfigServlet",
+                "sling.servlet.extensions:String=json"
+        })
 public class GetConfigServlet extends SlingSafeMethodsServlet {
 
     @Reference
@@ -71,6 +67,7 @@
         final Dictionary<?, ?> props = cfg.getProperties();
         if(props == null) {
             response.sendError(HttpServletResponse.SC_NOT_FOUND, "Properties of config with pid=" + pid + " not found");
+            return;
         }
 
         // Dump config in JSON
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/servlets/HtmlDefaultServlet.java b/src/main/java/org/apache/sling/launchpad/testservices/servlets/HtmlDefaultServlet.java
index fc20355..67a6fa6 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/servlets/HtmlDefaultServlet.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/servlets/HtmlDefaultServlet.java
@@ -16,11 +16,8 @@
  */
 package org.apache.sling.launchpad.testservices.servlets;
 
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.ConfigurationPolicy;
-import org.apache.felix.scr.annotations.Properties;
-import org.apache.felix.scr.annotations.Property;
-import org.apache.felix.scr.annotations.Service;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.ConfigurationPolicy;
 
 /**
  * Default servlet for the html extension, see SLING-1069.
@@ -29,15 +26,17 @@
  * disabled by default and must be enabled (by creating a config) for testing 
  * in the HtmlDefaultServletTest class.
  */
-@Component(immediate=true, metatype=true, policy=ConfigurationPolicy.REQUIRE)
-@Service(value=javax.servlet.Servlet.class)
-@Properties({
-    @Property(name="service.description", value="HTML Default Test Servlet",propertyPrivate=true),
-    @Property(name="service.vendor", value="The Apache Software Foundation",propertyPrivate=true),
-    @Property(name="sling.servlet.resourceTypes", value="sling/servlet/default",propertyPrivate=true),
-    @Property(name="sling.servlet.extensions", value="html",propertyPrivate=true),
-    @Property(name="sling.servlet.methods", value="GET")
-})
+@Component(
+        immediate=true, 
+        service = javax.servlet.Servlet.class, 
+        configurationPolicy = ConfigurationPolicy.REQUIRE,
+        property = {
+                "service.description:String=HTML Default Test Servlet",
+                "service.vendor:String=The Apache Software Foundation",
+                "sling.servlet.resourceTypes:String=sling/servlet/default",
+                "sling.servlet.extensions:String=html",
+                "sling.servlet.methods:String=GET"
+        })
 @SuppressWarnings("serial")
 public class HtmlDefaultServlet extends TestServlet {
 }
\ No newline at end of file
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/servlets/HtmlResponseServlet.java b/src/main/java/org/apache/sling/launchpad/testservices/servlets/HtmlResponseServlet.java
index 3208261..0c4f065 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/servlets/HtmlResponseServlet.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/servlets/HtmlResponseServlet.java
@@ -21,25 +21,21 @@
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletResponse;
 
-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.servlets.HtmlResponse;
 import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
+import org.osgi.service.component.annotations.Component;
 
 /** Servlet used to test HtmlResponse escaping */
-@Component(immediate=true, metatype=false)
-@Service(value=javax.servlet.Servlet.class)
-@Properties({
-    @Property(name="service.description", value="Paths Test Servlet"),
-    @Property(name="service.vendor", value="The Apache Software Foundation"),
-    @Property(name="sling.servlet.paths", value={
-            "/testing/HtmlResponseServlet" 
-    })
-})
+@Component(
+        immediate=true, 
+        service = javax.servlet.Servlet.class,
+        property = {
+                "service.description:String=Paths Test Servlet",
+                "service.vendor:String=The Apache Software Foundation",
+                "sling.servlet.paths:String=/testing/HtmlResponseServlet"
+        })
 @SuppressWarnings("serial")
 public class HtmlResponseServlet extends SlingSafeMethodsServlet {
 
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/servlets/JaxbServlet.java b/src/main/java/org/apache/sling/launchpad/testservices/servlets/JaxbServlet.java
index c3d690c..9ec1146 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/servlets/JaxbServlet.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/servlets/JaxbServlet.java
@@ -20,22 +20,27 @@
 
 import java.io.IOException;
 
+import javax.servlet.Servlet;
 import javax.servlet.ServletException;
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.JAXBException;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlValue;
 
-import org.apache.felix.scr.annotations.sling.SlingServlet;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.SlingHttpServletResponse;
 import org.apache.sling.api.servlets.SlingAllMethodsServlet;
+import org.apache.sling.servlets.annotations.SlingServletPathsStrict;
+import org.osgi.service.component.annotations.Component;
 
 /**
  * The <tt>JaxbServlet</tt> serializes a basic JAXB-annotated class
  * 
  */
-@SlingServlet(paths = "/bin/jaxb", extensions = "xml")
+@Component(service=Servlet.class)
+@SlingServletPathsStrict(
+        paths = "/bin/jaxb",
+        extensions = "xml")
 public class JaxbServlet extends SlingAllMethodsServlet {
 
     private static final long serialVersionUID = 1L;
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/servlets/MiscUnsafeServlet.java b/src/main/java/org/apache/sling/launchpad/testservices/servlets/MiscUnsafeServlet.java
index 9d90ebe..7b847b3 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/servlets/MiscUnsafeServlet.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/servlets/MiscUnsafeServlet.java
@@ -20,18 +20,23 @@
 
 import java.io.IOException;
 
+import javax.servlet.Servlet;
 import javax.servlet.ServletException;
 
-import org.apache.felix.scr.annotations.sling.SlingServlet;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.SlingHttpServletResponse;
 import org.apache.sling.api.servlets.SlingAllMethodsServlet;
+import org.apache.sling.servlets.annotations.SlingServletPathsStrict;
+import org.osgi.service.component.annotations.Component;
 
 /**
  * Validates that the <tt>sun.misc.Unsafe</tt> class can be accessed
  *
  */
-@SlingServlet(paths = "/bin/miscUnsafe", extensions = "txt")
+@Component(service=Servlet.class)
+@SlingServletPathsStrict(
+        paths = "/bin/miscUnsafe",
+        extensions = "txt")
 public class MiscUnsafeServlet extends SlingAllMethodsServlet {
     
     private static final long serialVersionUID = 1L;
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/servlets/NamespaceTestServlet.java b/src/main/java/org/apache/sling/launchpad/testservices/servlets/NamespaceTestServlet.java
index 95a2bb7..180a88e 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/servlets/NamespaceTestServlet.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/servlets/NamespaceTestServlet.java
@@ -20,19 +20,21 @@
 
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
+import javax.servlet.Servlet;
 import javax.servlet.ServletException;
 
-import org.apache.felix.scr.annotations.sling.SlingServlet;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.SlingHttpServletResponse;
 import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
+import org.apache.sling.servlets.annotations.SlingServletPaths;
+import org.osgi.service.component.annotations.Component;
 
 /**
  * Test Servlet which outputs the current namespace mappings.
  */
-@SlingServlet(
-        paths="/testing/NamespaceTestServlet/output"
-        )
+@Component(service=Servlet.class)
+@SlingServletPaths(
+        value = "/testing/NamespaceTestServlet/output")
 @SuppressWarnings("serial")
 public class NamespaceTestServlet extends SlingSafeMethodsServlet {
 
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/servlets/PathsServlet.java b/src/main/java/org/apache/sling/launchpad/testservices/servlets/PathsServlet.java
index 3e10211..6ada38a 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/servlets/PathsServlet.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/servlets/PathsServlet.java
@@ -16,22 +16,18 @@
  */
 package org.apache.sling.launchpad.testservices.servlets;
 
-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.osgi.service.component.annotations.Component;
 
 /** Servlet that registers itself for specific paths */
-@Component(immediate=true, metatype=false)
-@Service(value=javax.servlet.Servlet.class)
-@Properties({
-    @Property(name="service.description", value="Paths Test Servlet"),
-    @Property(name="service.vendor", value="The Apache Software Foundation"),
-    @Property(name="sling.servlet.paths", value={
-            "/testing/PathsServlet/foo", 
-            "/testing/PathsServlet/bar/more/foo.html" 
-    })
-})
+@Component(
+        immediate=true, 
+        service = javax.servlet.Servlet.class,
+        property = {
+                "service.description:String=Paths Test Servlet",
+                "service.vendor:String=The Apache Software Foundation",
+                "sling.servlet.paths:String=/testing/PathsServlet/foo",
+                "sling.servlet.paths:String=/testing/PathsServlet/bar/more/foo.html"
+        })
 @SuppressWarnings("serial")
 public class PathsServlet extends TestServlet {
 }
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/servlets/PathsServletNodeServlet.java b/src/main/java/org/apache/sling/launchpad/testservices/servlets/PathsServletNodeServlet.java
index b2be224..4074401 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/servlets/PathsServletNodeServlet.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/servlets/PathsServletNodeServlet.java
@@ -24,14 +24,11 @@
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletResponse;
 
-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.jackrabbit.commons.JcrUtils;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.SlingHttpServletResponse;
 import org.apache.sling.api.servlets.SlingAllMethodsServlet;
+import org.osgi.service.component.annotations.Component;
 
 /**
  * Servlet which can create and delete a node at /testing/PathsServlet/foo in
@@ -39,11 +36,13 @@
  * exists.
  */
 @SuppressWarnings("serial")
-@Component
-@Service
-@Properties({ @Property(name = "service.description", value = "Paths Servlet Node Servlet"),
-        @Property(name = "service.vendor", value = "The Apache Software Foundation"),
-        @Property(name = "sling.servlet.paths", value = "/testing/PathsServletNodeServlet") })
+@Component(
+        service = javax.servlet.Servlet.class,
+        property = {
+                "service.description:String=Paths Servlet Node Servlet",
+                "service.vendor:String=The Apache Software Foundation",
+                "sling.servlet.paths:String=/testing/PathsServletNodeServlet"
+        })
 public class PathsServletNodeServlet extends SlingAllMethodsServlet {
     @Override
     protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException,
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/servlets/PlanetResourceRenderingServlet.java b/src/main/java/org/apache/sling/launchpad/testservices/servlets/PlanetResourceRenderingServlet.java
index a044a82..f6a6e78 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/servlets/PlanetResourceRenderingServlet.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/servlets/PlanetResourceRenderingServlet.java
@@ -21,27 +21,24 @@
 
 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.SlingHttpServletRequest;
 import org.apache.sling.api.SlingHttpServletResponse;
 import org.apache.sling.api.resource.ValueMap;
 import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
+import org.osgi.service.component.annotations.Component;
 
 /**
  * Test HTML rendering of resources provided by our PlanetResourceProvider
  */
-@Component
-@Service(value=javax.servlet.Servlet.class)
-@Properties({
-    @Property(name="service.description", value="HTML renderer for Planet resources"),
-    @Property(name="service.vendor", value="The Apache Software Foundation"),
-    @Property(name="sling.servlet.resourceTypes", value="sling/test-services/planet"),
-    @Property(name="sling.servlet.extensions", value="html"),
-    @Property(name="sling.servlet.methods", value="GET")
-})
+@Component(
+        service = javax.servlet.Servlet.class,
+        property = {
+                "service.description:String=HTML renderer for Planet resources",
+                "service.vendor:String=The Apache Software Foundation",
+                "sling.servlet.resourceTypes:String=sling/test-services/planet",
+                "sling.servlet.extensions:String=html",
+                "sling.servlet.methods:String=GET"
+        })
 @SuppressWarnings("serial")
 public class PlanetResourceRenderingServlet extends SlingSafeMethodsServlet {
 
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/servlets/PrefixServletMinusOne.java b/src/main/java/org/apache/sling/launchpad/testservices/servlets/PrefixServletMinusOne.java
index 6becbc3..37bc6a3 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/servlets/PrefixServletMinusOne.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/servlets/PrefixServletMinusOne.java
@@ -16,23 +16,22 @@
  */
 package org.apache.sling.launchpad.testservices.servlets;
 
-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.osgi.service.component.annotations.Component;
 
 /** Example/test Sling Servlet using a prefix to demonstrate how
  *  PrefixServletZero overrides PrefixServletMinusOne
  */
-@Component(immediate=true, metatype=false)
-@Service(value=javax.servlet.Servlet.class)
-@Properties({
-    @Property(name="service.description", value="Prefix Test Servlet Minus One"),
-    @Property(name="service.vendor", value="The Apache Software Foundation"),
-    @Property(name="sling.servlet.prefix", intValue=-1),
-    @Property(name="sling.servlet.resourceTypes", value="sling/servlet/default"),
-    @Property(name="sling.servlet.extensions", value={ "TEST_EXT_3", "TEST_EXT_4" })
-})
+@Component(
+        immediate=true, 
+        service = javax.servlet.Servlet.class,
+        property = {
+                "service.description:String=Prefix Test Servlet Minus One",
+                "service.vendor:String=The Apache Software Foundation",
+                "sling.servlet.prefix:Integer=-1",
+                "sling.servlet.resourceTypes:String=sling/servlet/default",
+                "sling.servlet.extensions:String=TEST_EXT_3", 
+                "sling.servlet.extensions:String=TEST_EXT_4" 
+        })
 @SuppressWarnings("serial")
 public class PrefixServletMinusOne extends TestServlet {
 }
\ No newline at end of file
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/servlets/PrefixServletZero.java b/src/main/java/org/apache/sling/launchpad/testservices/servlets/PrefixServletZero.java
index a3fdb16..71609d3 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/servlets/PrefixServletZero.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/servlets/PrefixServletZero.java
@@ -16,23 +16,22 @@
  */
 package org.apache.sling.launchpad.testservices.servlets;
 
-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.osgi.service.component.annotations.Component;
 
 /** Example/test Sling Servlet using a prefix to demonstrate how
  *  PrefixServletZero overrides PrefixServletMinusOne
  */
-@Component(immediate=true, metatype=false)
-@Service(value=javax.servlet.Servlet.class)
-@Properties({
-    @Property(name="service.description", value="Prefix Test Servlet Zero"),
-    @Property(name="service.vendor", value="The Apache Software Foundation"),
-    @Property(name="sling.servlet.prefix", intValue=0),
-    @Property(name="sling.servlet.resourceTypes", value="sling/servlet/default"),
-    @Property(name="sling.servlet.extensions", value={ "TEST_EXT_3", "TEST_EXT_5" })
-})
+@Component(
+        immediate=true, 
+        service = javax.servlet.Servlet.class,
+        property = {
+                "service.description:String=Prefix Test Servlet Zero",
+                "service.vendor:String=The Apache Software Foundation",
+                "sling.servlet.prefix:Integer=0",
+                "sling.servlet.resourceTypes:String=sling/servlet/default",
+                "sling.servlet.extensions:String=TEST_EXT_3", 
+                "sling.servlet.extensions:String=TEST_EXT_5"
+        })
 @SuppressWarnings("serial")
 public class PrefixServletZero extends TestServlet {
 }
\ No newline at end of file
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/servlets/PutMethodServlet.java b/src/main/java/org/apache/sling/launchpad/testservices/servlets/PutMethodServlet.java
index 6f206e7..50e7337 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/servlets/PutMethodServlet.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/servlets/PutMethodServlet.java
@@ -20,24 +20,22 @@
 
 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.SlingHttpServletRequest;
 import org.apache.sling.api.SlingHttpServletResponse;
+import org.osgi.service.component.annotations.Component;
 
 /** Example/test Sling Servlet registered for the PUT method
  *  on a specific resource type
 */
-@Component(immediate=true, metatype=false)
-@Service(value=javax.servlet.Servlet.class)
-@Properties({
-    @Property(name="service.description", value="Put Method Test Servlet"),
-    @Property(name="service.vendor", value="The Apache Software Foundation"),
-    @Property(name="sling.servlet.methods", value="PUT"),
-    @Property(name="sling.servlet.resourceTypes", value="LAUNCHPAD_TEST_ResourceType")
-})
+@Component(
+        immediate=true, 
+        service = javax.servlet.Servlet.class,
+        property = {
+                "service.description:String=Put Method Test Servlet",
+                "service.vendor:String=The Apache Software Foundation",
+                "sling.servlet.methods:String=PUT",
+                "sling.servlet.resourceTypes:String=LAUNCHPAD_TEST_ResourceType"
+        })
 @SuppressWarnings("serial")
 public class PutMethodServlet extends TestServlet {
 
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/servlets/R6WhiteboardServlet.java b/src/main/java/org/apache/sling/launchpad/testservices/servlets/R6WhiteboardServlet.java
index ad164e2..38d1898 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/servlets/R6WhiteboardServlet.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/servlets/R6WhiteboardServlet.java
@@ -23,21 +23,18 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
-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.osgi.service.component.annotations.Component;
 
 /**
  * Example Sling servlets registered using the R6 HTTP Whiteboard
  *
  */
-@Service(javax.servlet.Servlet.class)
-@Component
-@Properties({
-    @Property(name="osgi.http.whiteboard.servlet.pattern", value="/whiteboard_r6"),
-    @Property(name="osgi.http.whiteboard.context.select", value="(osgi.http.whiteboard.context.name=org.apache.sling)"),
-})
+@Component(
+        service = javax.servlet.Servlet.class,
+        property = {
+                "osgi.http.whiteboard.servlet.pattern:String=/whiteboard_r6",
+                "osgi.http.whiteboard.context.select:String=(osgi.http.whiteboard.context.name=org.apache.sling)"
+        })
 public class R6WhiteboardServlet extends HttpServlet {
 
     private static final long serialVersionUID = 1L;
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/servlets/RepositoryDescriptorsServlet.java b/src/main/java/org/apache/sling/launchpad/testservices/servlets/RepositoryDescriptorsServlet.java
index 22a0214..a1bc7e7 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/servlets/RepositoryDescriptorsServlet.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/servlets/RepositoryDescriptorsServlet.java
@@ -17,29 +17,28 @@
 package org.apache.sling.launchpad.testservices.servlets;
 
 import java.io.IOException;
-import java.util.Arrays;
 
 import javax.jcr.Repository;
 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.Reference;
-import org.apache.felix.scr.annotations.Service;
 import org.apache.felix.utils.json.JSONWriter;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.SlingHttpServletResponse;
 import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
 
 /** Test servlet that dumps our repository descriptors */ 
 @SuppressWarnings("serial")
-@Component(immediate = true)
-@Service
-@Properties({ @Property(name = "service.description", value = "Repository Descriptors Servlet"),
-        @Property(name = "service.vendor", value = "The Apache Software Foundation"),
-        @Property(name = "sling.servlet.paths", value = "/testing/RepositoryDescriptors"),
-        @Property(name = "sling.servlet.extensions", value = "json")})
+@Component(
+        immediate = true,
+        service = javax.servlet.Servlet.class,
+        property = {
+                "service.description:String=Repository Descriptors Servlet",
+                "service.vendor:String=The Apache Software Foundation",
+                "sling.servlet.paths:String=/testing/RepositoryDescriptors",
+                "sling.servlet.extensions:String=json"
+        })
 public class RepositoryDescriptorsServlet extends SlingSafeMethodsServlet {
 
     @Reference
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/servlets/RequestUriOptingServlet.java b/src/main/java/org/apache/sling/launchpad/testservices/servlets/RequestUriOptingServlet.java
index 48ed8ed..f678c7d 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/servlets/RequestUriOptingServlet.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/servlets/RequestUriOptingServlet.java
@@ -16,25 +16,22 @@
  */
 package org.apache.sling.launchpad.testservices.servlets;
 
-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.servlets.OptingServlet;
+import org.osgi.service.component.annotations.Component;
 
 /** OptingServlet that uses the RequestURI to opt in */
-@Component(immediate=true, metatype=false)
-@Service(value=javax.servlet.Servlet.class)
-@Properties({
-    @Property(name="service.description", value="Request URI Opting Test Servlet"),
-    @Property(name="service.vendor", value="The Apache Software Foundation"),
-    @Property(name="sling.servlet.resourceTypes", value={
-            "sling/servlet/default",
-            "sling/nonexisting"
-    }),
-    @Property(name="sling.servlet.methods", value={"POST","GET"})
-})
+@Component(
+        immediate=true, 
+        service = javax.servlet.Servlet.class,
+        property = {
+                "service.description:String=Request URI Opting Test Servlet",
+                "service.vendor:String=The Apache Software Foundation",
+                "sling.servlet.resourceTypes:String=sling/servlet/default",
+                "sling.servlet.resourceTypes:String=sling/nonexisting",
+                "sling.servlet.methods:String=POST",
+                "sling.servlet.methods:String=GET",
+        })
 @SuppressWarnings("serial")
 public class RequestUriOptingServlet extends TestServlet implements OptingServlet {
 
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/servlets/SaxServlet.java b/src/main/java/org/apache/sling/launchpad/testservices/servlets/SaxServlet.java
index 49cafed..6a88c34 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/servlets/SaxServlet.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/servlets/SaxServlet.java
@@ -21,16 +21,17 @@
 import java.io.IOException;
 import java.io.StringReader;
 
+import javax.servlet.Servlet;
 import javax.servlet.ServletException;
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.parsers.SAXParser;
 import javax.xml.parsers.SAXParserFactory;
-import javax.xml.xpath.XPathExpressionException;
 
-import org.apache.felix.scr.annotations.sling.SlingServlet;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.SlingHttpServletResponse;
 import org.apache.sling.api.servlets.SlingAllMethodsServlet;
+import org.apache.sling.servlets.annotations.SlingServletPathsStrict;
+import org.osgi.service.component.annotations.Component;
 import org.xml.sax.Attributes;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
@@ -40,7 +41,10 @@
  * The <tt>SaxServlet</tt> evaluates a simple XML document using a SAX handler
  * 
  */
-@SlingServlet(paths = "/bin/sax", extensions = "xml")
+@Component(service=Servlet.class)
+@SlingServletPathsStrict(
+        paths = "/bin/sax",
+        extensions = "xml")
 public class SaxServlet extends SlingAllMethodsServlet {
 
     private static final long serialVersionUID = 1L;
@@ -60,9 +64,7 @@
 
             response.setContentType("text/plain");
             response.getWriter().write(handler.getValue());
-        } catch (ParserConfigurationException e) {
-            throw new ServletException(e.getMessage(), e);
-        } catch (SAXException e) {
+        } catch (SAXException | ParserConfigurationException e) {
             throw new ServletException(e.getMessage(), e);
         }
     }
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/servlets/SelectorServlet.java b/src/main/java/org/apache/sling/launchpad/testservices/servlets/SelectorServlet.java
index dc0537f..2f49eeb 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/servlets/SelectorServlet.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/servlets/SelectorServlet.java
@@ -16,15 +16,18 @@
  */
 package org.apache.sling.launchpad.testservices.servlets;
 
-import org.apache.felix.scr.annotations.sling.SlingServlet;
+import javax.servlet.Servlet;
+
+import org.apache.sling.servlets.annotations.SlingServletResourceTypes;
+import org.osgi.service.component.annotations.Component;
 
 /** Example/test Sling Servlet registered with two selectors */
-@SlingServlet(
-        resourceTypes="sling/servlet/default",
-        methods={"GET","POST"},
-        selectors={"TEST_SEL_1","TEST_SEL_2"},
-        extensions="txt"
-        )
+@Component(service=Servlet.class)
+@SlingServletResourceTypes(
+        resourceTypes = "sling/servlet/default",
+        methods = {"GET","POST"},
+        selectors = {"TEST_SEL_1","TEST_SEL_2"},
+        extensions = "txt")
 @SuppressWarnings("serial")
 public class SelectorServlet extends TestServlet {
 }
diff --git a/src/main/java/org/apache/sling/launchpad/testservices/servlets/XpathServlet.java b/src/main/java/org/apache/sling/launchpad/testservices/servlets/XpathServlet.java
index 3947f81..edf516b 100644
--- a/src/main/java/org/apache/sling/launchpad/testservices/servlets/XpathServlet.java
+++ b/src/main/java/org/apache/sling/launchpad/testservices/servlets/XpathServlet.java
@@ -21,22 +21,27 @@
 import java.io.IOException;
 import java.io.StringReader;
 
+import javax.servlet.Servlet;
 import javax.servlet.ServletException;
 import javax.xml.xpath.XPath;
 import javax.xml.xpath.XPathExpressionException;
 import javax.xml.xpath.XPathFactory;
 
-import org.apache.felix.scr.annotations.sling.SlingServlet;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.SlingHttpServletResponse;
 import org.apache.sling.api.servlets.SlingAllMethodsServlet;
+import org.apache.sling.servlets.annotations.SlingServletPathsStrict;
+import org.osgi.service.component.annotations.Component;
 import org.xml.sax.InputSource;
 
 /**
  * The <tt>XpathServlet</tt> evaluates a simple XML document using an XPath expression
  * 
  */
-@SlingServlet(paths = "/bin/xpath", extensions = "xml")
+@Component(service=Servlet.class)
+@SlingServletPathsStrict(
+        paths = "/bin/xpath",
+        extensions = "xml")
 public class XpathServlet extends SlingAllMethodsServlet {
 
     private static final long serialVersionUID = 1L;