diff --git a/bnd.bnd b/bnd.bnd
new file mode 100644
index 0000000..d590fb2
--- /dev/null
+++ b/bnd.bnd
@@ -0,0 +1,2 @@
+Bundle-Category: sling,jcr,jackrabbit
+Private-Package: org.apache.sling.jcr.classloader.internal.*
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 04df789..0da4edd 100644
--- a/pom.xml
+++ b/pom.xml
@@ -21,14 +21,13 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache.sling</groupId>
-        <artifactId>sling</artifactId>
-        <version>30</version>
+        <artifactId>sling-bundle-parent</artifactId>
+        <version>47</version>
         <relativePath />
     </parent>
 
     <artifactId>org.apache.sling.jcr.classloader</artifactId>
     <version>3.2.5-SNAPSHOT</version>
-    <packaging>bundle</packaging>
 
     <name>Apache Sling JCR ClassLoader</name>
     <description>
@@ -43,34 +42,19 @@
         <connection>scm:git:https://gitbox.apache.org/repos/asf/sling-org-apache-sling-jcr-classloader.git</connection>
         <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/sling-org-apache-sling-jcr-classloader.git</developerConnection>
         <url>https://gitbox.apache.org/repos/asf?p=sling-org-apache-sling-jcr-classloader.git</url>
-      <tag>HEAD</tag>
-  </scm>
+        <tag>HEAD</tag>
+    </scm>
+
+    <properties>
+        <sling.java.version>8</sling.java.version>
+        <project.build.outputTimestamp>1</project.build.outputTimestamp>
+    </properties>
 
     <build>
         <plugins>
             <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-scr-plugin</artifactId>
-                <version>1.26.4</version>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <extensions>true</extensions>
-                <configuration>
-                    <instructions>
-                        <Bundle-Category>
-                            sling,jcr,jackrabbit
-                        </Bundle-Category>
-                        <Private-Package>
-                            org.apache.sling.jcr.classloader.internal.*
-                        </Private-Package>
-                        <!-- remove when upgrading to bnd Maven plugin -->
-                        <Provide-Capability>
-                            osgi.service;objectClass=org.apache.sling.commons.classloader.ClassLoaderWriter
-                        </Provide-Capability>
-                    </instructions>
-                </configuration>
+                <groupId>biz.aQute.bnd</groupId>
+                <artifactId>bnd-maven-plugin</artifactId>
             </plugin>
         </plugins>
     </build>
@@ -86,11 +70,6 @@
         </plugins>
     </reporting>
     <dependencies>
-      <!-- SCR Annotations -->
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.scr.annotations</artifactId>
-        </dependency>
        <dependency>
            <groupId>javax.jcr</groupId>
            <artifactId>jcr</artifactId>
@@ -109,12 +88,6 @@
         </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>org.apache.sling</groupId>
             <artifactId>org.apache.sling.settings</artifactId>
             <version>1.0.0</version>
             <scope>provided</scope>
@@ -130,10 +103,6 @@
             <artifactId>slf4j-api</artifactId>
         </dependency>
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-        </dependency>
-        <dependency>
             <groupId>org.osgi</groupId>
             <artifactId>osgi.core</artifactId>
         </dependency>
@@ -141,5 +110,29 @@
             <groupId>org.osgi</groupId>
             <artifactId>osgi.cmpn</artifactId>
         </dependency>
+
+        <!-- Test dependencies -->
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-core</artifactId>
+            <version>4.5.1</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.testing.sling-mock.junit4</artifactId>
+            <version>3.2.2</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.testing.osgi-mock.junit4</artifactId>
+            <version>3.2.2</version>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 </project>
diff --git a/src/main/java/org/apache/sling/jcr/classloader/internal/ClassLoaderWriterImpl.java b/src/main/java/org/apache/sling/jcr/classloader/internal/ClassLoaderWriterImpl.java
index fe7ad9a..ecf8e4d 100644
--- a/src/main/java/org/apache/sling/jcr/classloader/internal/ClassLoaderWriterImpl.java
+++ b/src/main/java/org/apache/sling/jcr/classloader/internal/ClassLoaderWriterImpl.java
@@ -24,7 +24,6 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
-import java.util.Map;
 
 import javax.jcr.Item;
 import javax.jcr.Node;
@@ -33,23 +32,25 @@
 import javax.jcr.Session;
 import javax.jcr.SimpleCredentials;
 
-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.Properties;
-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.commons.classloader.ClassLoaderWriter;
 import org.apache.sling.commons.classloader.DynamicClassLoaderManager;
 import org.apache.sling.commons.mime.MimeTypeService;
-import org.apache.sling.commons.osgi.PropertiesUtil;
 import org.apache.sling.jcr.api.SlingRepository;
 import org.apache.sling.settings.SlingSettingsService;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.ServiceReference;
 import org.osgi.service.component.ComponentContext;
+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;
+import org.osgi.service.component.annotations.ReferenceCardinality;
+import org.osgi.service.component.annotations.ReferencePolicy;
+import org.osgi.service.component.annotations.ServiceScope;
+import org.osgi.service.component.propertytypes.ServiceDescription;
+import org.osgi.service.component.propertytypes.ServiceVendor;
+import org.osgi.service.metatype.annotations.AttributeDefinition;
+import org.osgi.service.metatype.annotations.ObjectClassDefinition;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -61,28 +62,31 @@
  * for clients to use for writing and reading such
  * classes and resources.
  */
-@Component(metatype=true, label="%loader.name", description="%loader.description",
-           name="org.apache.sling.jcr.classloader.internal.DynamicClassLoaderProviderImpl")
-@Service(value = ClassLoaderWriter.class, serviceFactory = true)
-@Properties({
-    @org.apache.felix.scr.annotations.Property(name="service.vendor", value="The Apache Software Foundation"),
-    @org.apache.felix.scr.annotations.Property(name="service.description", value="Repository based classloader writer")
-})
-public class ClassLoaderWriterImpl
-    implements ClassLoaderWriter {
+@Component(
+        name = "org.apache.sling.jcr.classloader.internal.DynamicClassLoaderProviderImpl",
+        service = ClassLoaderWriter.class,
+        scope = ServiceScope.BUNDLE)
+@ServiceDescription("Repository based classloader writer")
+@ServiceVendor("The Apache Software Foundation")
+public class ClassLoaderWriterImpl implements ClassLoaderWriter {
 
     /** Logger */
     private final Logger logger = LoggerFactory.getLogger(ClassLoaderWriterImpl.class);
 
     private static final String CLASS_PATH_DEFAULT = "/var/classes";
 
-    @org.apache.felix.scr.annotations.Property(value=CLASS_PATH_DEFAULT)
-    private static final String CLASS_PATH_PROP = "classpath";
+    @ObjectClassDefinition(name="%loader.name", description="%loader.description")
+    public @interface Config {
 
-    private static final boolean APPEND_ID_DEFAULT = true;
+        @AttributeDefinition
+        String classpath() default CLASS_PATH_DEFAULT;
 
-    @org.apache.felix.scr.annotations.Property(boolValue=APPEND_ID_DEFAULT)
-    private static final String APPEND_ID_PROP = "appendId";
+        @AttributeDefinition
+        boolean appendId() default true;
+
+        @AttributeDefinition
+        String owner() default OWNER_DEFAULT;
+    }
 
     /** Node type for packages/folders. */
     private static final String NT_FOLDER = "nt:folder";
@@ -90,9 +94,6 @@
     /** Default class loader owner. */
     private static final String OWNER_DEFAULT = "admin";
 
-    @org.apache.felix.scr.annotations.Property(value=OWNER_DEFAULT)
-    private static final String OWNER_PROP = "owner";
-
     @Reference
     private SlingSettingsService settings;
 
@@ -105,11 +106,11 @@
     @Reference
     private SlingRepository repository;
 
-    @Reference(policy=ReferencePolicy.DYNAMIC, cardinality=ReferenceCardinality.OPTIONAL_UNARY)
+    @Reference(policy= ReferencePolicy.DYNAMIC, cardinality= ReferenceCardinality.OPTIONAL)
     private volatile MimeTypeService mimeTypeService;
 
     @Reference(
-            referenceInterface = DynamicClassLoaderManager.class,
+            service = DynamicClassLoaderManager.class,
             bind = "bindDynamicClassLoaderManager",
             unbind = "unbindDynamicClassLoaderManager")
     private volatile ServiceReference dynamicClassLoaderManager;
@@ -123,19 +124,19 @@
     /**
      * Activate this component.
      * @param componentContext The component context
-     * @param properties The configuration properties
+     * @param config The configuration properties
      */
     @Activate
-    protected void activate(final ComponentContext componentContext, final Map<String, Object> properties) {
-        this.classPath = PropertiesUtil.toString(properties.get(CLASS_PATH_PROP), CLASS_PATH_DEFAULT);
+    protected void activate(final ComponentContext componentContext, Config config) {
+        this.classPath = config.classpath();
         if ( this.classPath.endsWith("/") ) {
             this.classPath = this.classPath.substring(0, this.classPath.length() - 1);
         }
-        if ( PropertiesUtil.toBoolean(properties.get(APPEND_ID_PROP), APPEND_ID_DEFAULT) ) {
+        if ( config.appendId()) {
             this.classPath = this.classPath + '/' + this.settings.getSlingId();
         }
 
-        this.classLoaderOwner = PropertiesUtil.toString(properties.get(OWNER_PROP), OWNER_DEFAULT);
+        this.classLoaderOwner = config.owner();
 
         this.callerBundle = componentContext.getUsingBundle();
     }
diff --git a/src/main/resources/OSGI-INF/l10n/metatype.properties b/src/main/resources/OSGI-INF/l10n/org.apache.sling.jcr.classloader.internal.ClassLoaderWriterImpl$Config.properties
similarity index 100%
rename from src/main/resources/OSGI-INF/l10n/metatype.properties
rename to src/main/resources/OSGI-INF/l10n/org.apache.sling.jcr.classloader.internal.ClassLoaderWriterImpl$Config.properties
diff --git a/src/test/java/org/apache/sling/jcr/classloader/internal/ClassLoaderWriterImplTest.java b/src/test/java/org/apache/sling/jcr/classloader/internal/ClassLoaderWriterImplTest.java
new file mode 100644
index 0000000..ac3d81f
--- /dev/null
+++ b/src/test/java/org/apache/sling/jcr/classloader/internal/ClassLoaderWriterImplTest.java
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sling.jcr.classloader.internal;
+
+import org.apache.sling.commons.classloader.ClassLoaderWriter;
+import org.apache.sling.commons.classloader.DynamicClassLoaderManager;
+import org.apache.sling.commons.mime.MimeTypeService;
+import org.apache.sling.settings.SlingSettingsService;
+import org.apache.sling.testing.mock.osgi.junit.OsgiContext;
+import org.apache.sling.testing.mock.sling.MockJcrSlingRepository;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mockito;
+import org.mockito.junit.MockitoJUnitRunner;
+
+import java.util.Dictionary;
+import java.util.Hashtable;
+
+import static org.junit.Assert.assertNotNull;
+
+@RunWith(MockitoJUnitRunner.class)
+public class ClassLoaderWriterImplTest {
+
+    @Rule
+    public final OsgiContext context = new OsgiContext();
+
+    private ClassLoaderWriter classLoaderWriter;
+
+    @Before
+    public void setUp() {
+        Dictionary<String, Object> properties = new Hashtable<>();
+
+        context.registerInjectActivateService(new MockJcrSlingRepository());
+
+        //Mock DynamicClassLoaderManager
+        DynamicClassLoaderManager dynamicClassLoaderManager = Mockito.mock(DynamicClassLoaderManager.class);
+        context.registerService(DynamicClassLoaderManager.class, dynamicClassLoaderManager);
+
+        //Mock SlingSettingsService
+        SlingSettingsService slingSettingsService = Mockito.mock(SlingSettingsService.class);
+        context.registerService(SlingSettingsService.class, slingSettingsService);
+
+        //Mock MimeTypeService
+        MimeTypeService mimeTypeService = Mockito.mock(MimeTypeService.class);
+        context.registerService(MimeTypeService.class, mimeTypeService);
+
+        classLoaderWriter = context.registerInjectActivateService(new ClassLoaderWriterImpl(), properties);
+    }
+
+    @Test
+    public void testIfServiceActive() {
+        assertNotNull(classLoaderWriter);
+    }
+
+}
\ No newline at end of file
