diff --git a/pom.xml b/pom.xml
index 6fe29b9..8b245e6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -22,7 +22,7 @@
     <parent>
         <groupId>org.apache.sling</groupId>
         <artifactId>sling</artifactId>
-        <version>26</version>
+        <version>27</version>
         <relativePath/>
     </parent>
     
@@ -42,10 +42,6 @@
         <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>
             </plugin>
@@ -55,11 +51,13 @@
     <dependencies>
         <dependency>
             <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
+            <artifactId>osgi.core</artifactId>
         </dependency>
         <dependency>
             <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.compendium</artifactId>
+            <artifactId>org.osgi.service.http.whiteboard</artifactId>
+            <version>1.0.0</version>
+            <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
@@ -68,14 +66,8 @@
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>org.apache.sling</groupId>
-            <artifactId>org.apache.sling.commons.osgi</artifactId>
-            <version>2.1.0</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
             <groupId>javax.servlet</groupId>
-            <artifactId>servlet-api</artifactId>
+            <artifactId>javax.servlet-api</artifactId>
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
diff --git a/src/main/java/org/apache/sling/featureflags/ExecutionContext.java b/src/main/java/org/apache/sling/featureflags/ExecutionContext.java
index 321a092..5eda911 100644
--- a/src/main/java/org/apache/sling/featureflags/ExecutionContext.java
+++ b/src/main/java/org/apache/sling/featureflags/ExecutionContext.java
@@ -21,8 +21,7 @@
 import javax.servlet.http.HttpServletRequest;
 
 import org.apache.sling.api.resource.ResourceResolver;
-
-import aQute.bnd.annotation.ProviderType;
+import org.osgi.annotation.versioning.ProviderType;
 
 /**
  * The {@code ExecutionContext} interface provides access to the context for
diff --git a/src/main/java/org/apache/sling/featureflags/Feature.java b/src/main/java/org/apache/sling/featureflags/Feature.java
index 1d835b9..7faa6a4 100644
--- a/src/main/java/org/apache/sling/featureflags/Feature.java
+++ b/src/main/java/org/apache/sling/featureflags/Feature.java
@@ -18,7 +18,7 @@
  */
 package org.apache.sling.featureflags;
 
-import aQute.bnd.annotation.ConsumerType;
+import org.osgi.annotation.versioning.ConsumerType;
 
 /**
  * A feature is defined by its name. Features are registered as OSGi services.
diff --git a/src/main/java/org/apache/sling/featureflags/Features.java b/src/main/java/org/apache/sling/featureflags/Features.java
index a1d2a69..e9b7f7d 100644
--- a/src/main/java/org/apache/sling/featureflags/Features.java
+++ b/src/main/java/org/apache/sling/featureflags/Features.java
@@ -18,7 +18,7 @@
  */
 package org.apache.sling.featureflags;
 
-import aQute.bnd.annotation.ProviderType;
+import org.osgi.annotation.versioning.ProviderType;
 
 /**
  * The {@code Features} service is the applications access point to the Feature
diff --git a/src/main/java/org/apache/sling/featureflags/impl/ConfiguredFeature.java b/src/main/java/org/apache/sling/featureflags/impl/ConfiguredFeature.java
index d79d8cf..266069e 100644
--- a/src/main/java/org/apache/sling/featureflags/impl/ConfiguredFeature.java
+++ b/src/main/java/org/apache/sling/featureflags/impl/ConfiguredFeature.java
@@ -22,42 +22,44 @@
 
 import javax.servlet.ServletRequest;
 
-import org.apache.felix.scr.annotations.Activate;
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.ConfigurationPolicy;
-import org.apache.felix.scr.annotations.Property;
-import org.apache.felix.scr.annotations.Service;
-import org.apache.sling.commons.osgi.PropertiesUtil;
 import org.apache.sling.featureflags.ExecutionContext;
 import org.apache.sling.featureflags.Feature;
 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.ConfigurationPolicy;
+import org.osgi.service.metatype.annotations.AttributeDefinition;
+import org.osgi.service.metatype.annotations.Designate;
+import org.osgi.service.metatype.annotations.ObjectClassDefinition;
 
-@Component(
-        name = "org.apache.sling.featureflags.Feature",
-        metatype = true,
-        configurationFactory = true,
-        policy = ConfigurationPolicy.REQUIRE,
-        label = "Apache Sling Configured Feature",
-        description = "Allows for the definition of statically configured features which are defined and enabled through OSGi configuration")
-@Service
+@Designate(ocd = ConfiguredFeature.Config.class, factory = true)
+@Component(service = Feature.class,
+           configurationPolicy = ConfigurationPolicy.REQUIRE)
 public class ConfiguredFeature implements Feature {
 
+    @ObjectClassDefinition(name = "Apache Sling Configured Feature",
+            description = "Allows for the definition of statically configured features which are defined and enabled through OSGi configuration",
+            factoryPid = "org.apache.sling.featureflags.Feature")
+    public static @interface Config {
+
+        @AttributeDefinition(name = "Name", description = "Short name of this feature. This name is used "
+            + "to refer to this feature when checking for it to be enabled or not. This "
+            + "property is required and defaults to a name derived from the feature's class "
+            + "name and object identity. It is strongly recommended to define a useful and unique for the feature")
+        String name();
+
+        @AttributeDefinition(name = "Description", description = "Description for the feature. The "
+                + "intent is to descibe the behaviour of the application if this feature would be "
+                + "enabled. It is recommended to define this property. The default value is the value of the name property.")
+        String description();
+
+        @AttributeDefinition(name = "Enabled", description = "Boolean flag indicating whether the feature is "
+                + "enabled or not by this configuration")
+        boolean enabled() default false;
+    }
+
     private static final String PROP_FEATURE = "feature";
 
-    @Property(label = "Name", description = "Short name of this feature. This name is used "
-        + "to refer to this feature when checking for it to be enabled or not. This "
-        + "property is required and defaults to a name derived from the feature's class "
-        + "name and object identity. It is strongly recommended to define a useful and unique for the feature")
-    private static final String NAME = "name";
-
-    @Property(label = "Description", description = "Description for the feature. The "
-        + "intent is to descibe the behaviour of the application if this feature would be "
-        + "enabled. It is recommended to define this property. The default value is the value of the name property.")
-    private static final String DESCRIPTION = "description";
-
-    @Property(boolValue = false, label = "Enabled", description = "Boolean flag indicating whether the feature is "
-        + "enabled or not by this configuration")
-    private static final String ENABLED = "enabled";
 
     private String name;
 
@@ -66,12 +68,22 @@
     private boolean enabled;
 
     @Activate
-    private void activate(final Map<String, Object> configuration) {
-        final String pid = PropertiesUtil.toString(configuration.get(Constants.SERVICE_PID), getClass().getName() + "$"
-            + System.identityHashCode(this));
-        this.name = PropertiesUtil.toString(configuration.get(NAME), pid);
-        this.description = PropertiesUtil.toString(configuration.get(DESCRIPTION), this.name);
-        this.enabled = PropertiesUtil.toBoolean(configuration.get(ENABLED), false);
+    private void activate(final Config config, final Map<String, Object> properties) {
+        this.name = config.name();
+        if ( this.name == null ) {
+            Object pid = properties.get(Constants.SERVICE_PID);
+            if ( pid == null ) {
+                this.name = getClass().getName() + "$" + System.identityHashCode(this);
+            } else {
+                this.name = pid.toString();
+            }
+
+        }
+        this.description = config.description();
+        if ( this.description == null ) {
+            this.description = this.name;
+        }
+        this.enabled = config.enabled();
     }
 
     @Override
diff --git a/src/main/java/org/apache/sling/featureflags/impl/FeatureManager.java b/src/main/java/org/apache/sling/featureflags/impl/FeatureManager.java
index 9fed787..c8fd473 100644
--- a/src/main/java/org/apache/sling/featureflags/impl/FeatureManager.java
+++ b/src/main/java/org/apache/sling/featureflags/impl/FeatureManager.java
@@ -37,18 +37,16 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
-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.Reference;
-import org.apache.felix.scr.annotations.ReferenceCardinality;
-import org.apache.felix.scr.annotations.ReferencePolicy;
-import org.apache.felix.scr.annotations.Service;
 import org.apache.sling.api.request.ResponseUtil;
 import org.apache.sling.featureflags.Feature;
 import org.apache.sling.featureflags.Features;
 import org.osgi.framework.Constants;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.ConfigurationPolicy;
+import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.component.annotations.ReferenceCardinality;
+import org.osgi.service.component.annotations.ReferencePolicy;
+import org.osgi.service.http.whiteboard.HttpWhiteboardConstants;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -56,20 +54,16 @@
  * This service implements the feature handling. It keeps track of all
  * {@link Feature} services.
  */
-@Component(policy = ConfigurationPolicy.IGNORE)
-@Service
-@Reference(
-        name = "feature",
-        cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE,
-        policy = ReferencePolicy.DYNAMIC,
-        referenceInterface = Feature.class)
-@Properties({
-    @Property(name = "felix.webconsole.label", value = "features"),
-    @Property(name = "felix.webconsole.title", value = "Features"),
-    @Property(name = "felix.webconsole.category", value = "Sling"),
-    @Property(name = "pattern", value = "/.*"),
-    @Property(name = "service.ranking", intValue = 0x4000)
-})
+@Component(service = {Features.class, Filter.class, Servlet.class},
+           configurationPolicy = ConfigurationPolicy.IGNORE,
+           property = {
+                   HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_SELECT + "=(" + HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_NAME + "=org.apache.sling)",
+                   HttpWhiteboardConstants.HTTP_WHITEBOARD_FILTER_PATTERN + "=/",
+                   "felix.webconsole.label=features",
+                   "felix.webconsole.title=Features",
+                   "felix.webconsole.category=Sling",
+                   Constants.SERVICE_RANKING + ":Integer=16384"
+           })
 public class FeatureManager implements Features, Filter, Servlet {
 
     private final Logger logger = LoggerFactory.getLogger(this.getClass());
@@ -84,15 +78,18 @@
 
     //--- Features
 
+    @Override
     public Feature[] getFeatures() {
         final Map<String, Feature> activeFeatures = this.activeFeatures;
         return activeFeatures.values().toArray(new Feature[activeFeatures.size()]);
     }
 
+    @Override
     public Feature getFeature(final String name) {
         return this.activeFeatures.get(name);
     }
 
+    @Override
     public boolean isEnabled(String featureName) {
         final Feature feature = this.getFeature(featureName);
         if (feature != null) {
@@ -170,7 +167,8 @@
     //--- Feature binding
 
     // bind method for Feature services
-    @SuppressWarnings("unused")
+    @Reference(cardinality = ReferenceCardinality.MULTIPLE,
+            policy = ReferencePolicy.DYNAMIC)
     private void bindFeature(final Feature f, final Map<String, Object> props) {
         synchronized (this.allFeatures) {
             final String name = f.getName();
diff --git a/src/main/java/org/apache/sling/featureflags/package-info.java b/src/main/java/org/apache/sling/featureflags/package-info.java
index c1803b5..ff01425 100644
--- a/src/main/java/org/apache/sling/featureflags/package-info.java
+++ b/src/main/java/org/apache/sling/featureflags/package-info.java
@@ -63,8 +63,5 @@
  * @version 1.0
  * @see <a href="http://sling.apache.org/documentation/the-sling-engine/featureflags.html">Feature Flags</a>
  */
-@Version("1.0")
+@org.osgi.annotation.versioning.Version("1.0.1")
 package org.apache.sling.featureflags;
-
-import aQute.bnd.annotation.Version;
-
