diff --git a/bnd.bnd b/bnd.bnd
index 49f891e..2b7804b 100644
--- a/bnd.bnd
+++ b/bnd.bnd
@@ -1,7 +1,3 @@
--includeresource: @org.apache.felix.configadmin-[0-9.]*.jar!/org/apache/felix/cm/file/ConfigurationHandler.*,\
-                  @org.apache.sling.feature.io-[0-9.]*.jar!/org/apache/sling/feature/io/ConfiguratorUtil.*,\
-                  @org.apache.sling.feature.io-[0-9.]*.jar!/org/apache/sling/feature/io/CloseShieldWriter.*
--conditionalpackage: org.apache.felix.configurator.impl.json,\
-                     org.apache.felix.configurator.impl.model
+-includeresource: @org.apache.felix.configadmin-[0-9.]*.jar!/org/apache/felix/cm/file/ConfigurationHandler.*
 Provide-Capability:  osgi.service;objectClass:List<String>="org.apache.sling.installer.api.OsgiInstaller,org.apache.sling.installer.api.ResourceChangeListener,org.apache.sling.installer.api.info.InfoProvider,org.apache.sling.installer.api.tasks.RetryHandler",\
                      osgi.service;objectClass:List<String>="org.apache.sling.installer.api.event.InstallationListener,org.apache.sling.installer.api.jmx.InstallerMBean"
diff --git a/pom.xml b/pom.xml
index c8b2d92..e6de3c9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -201,7 +201,7 @@
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.commons.johnzon</artifactId>
-            <version>1.0.0</version>
+            <version>1.2.0</version>
             <scope>provided</scope>
         </dependency>
         <dependency>
@@ -220,17 +220,11 @@
             <version>1.8.12</version>
             <scope>provided</scope>
         </dependency>
-        <!-- We use classes from the configurator, json api, converter and feature.io to read/write JSON config files -->
+        <!-- JSON Configurations -->
         <dependency>
             <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.configurator</artifactId>
-            <version>1.0.10</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.sling</groupId>
-            <artifactId>org.apache.sling.feature.io</artifactId>
-            <version>1.2.0</version>
+            <artifactId>org.apache.felix.cm.json</artifactId>
+            <version>1.0.3-SNAPSHOT</version>
             <scope>provided</scope>
         </dependency>
         <!-- Basic dependencies for Unit Tests -->
diff --git a/src/main/java/org/apache/sling/installer/core/impl/InternalResource.java b/src/main/java/org/apache/sling/installer/core/impl/InternalResource.java
index 8725395..b449ac3 100644
--- a/src/main/java/org/apache/sling/installer/core/impl/InternalResource.java
+++ b/src/main/java/org/apache/sling/installer/core/impl/InternalResource.java
@@ -19,13 +19,12 @@
 package org.apache.sling.installer.core.impl;
 
 import java.io.BufferedInputStream;
-import java.io.BufferedReader;
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
+import java.io.Reader;
 import java.net.URI;
-import java.net.URL;
 import java.util.Arrays;
 import java.util.Dictionary;
 import java.util.Enumeration;
@@ -34,9 +33,7 @@
 import java.util.Properties;
 
 import org.apache.felix.cm.file.ConfigurationHandler;
-import org.apache.felix.configurator.impl.json.JSONUtil;
-import org.apache.felix.configurator.impl.json.TypeConverter;
-import org.apache.felix.configurator.impl.model.ConfigurationFile;
+import org.apache.felix.cm.json.Configurations;
 import org.apache.sling.installer.api.InstallableResource;
 
 /**
@@ -231,7 +228,6 @@
             final InputStream is, final String scheme, final String id)
     throws IOException {
         if ( id.endsWith(".cfg.json") ) {
-            final String name = scheme.concat(":").concat(id);
             String configId;
             int pos = id.lastIndexOf('/');
             if ( pos == -1 ) {
@@ -245,49 +241,13 @@
             }
             configId = removeConfigExtension(configId);
 
-            final TypeConverter typeConverter = new TypeConverter(null);
-            final JSONUtil.Report report = new JSONUtil.Report();
-
             // read from input stream
-            final String contents;
-            try(final BufferedReader buf = new BufferedReader(
-                        new InputStreamReader(is, "UTF-8"))) {
+            try(final Reader reader =  new InputStreamReader(is, "UTF-8")) {
+                return Configurations.buildReader()
+                        .withIdentifier(configId).build(reader).readConfiguration();
 
-                final StringBuilder sb = new StringBuilder();
-
-                sb.append("{ \"");
-                sb.append(configId);
-                sb.append("\" : ");
-                String line;
-
-                while ((line = buf.readLine()) != null) {
-                    sb.append(line);
-                    sb.append('\n');
-                }
-                sb.append("}");
-
-                contents = sb.toString();
             }
 
-            final URL url = new URL("file://" + configId);
-
-            final ConfigurationFile config = JSONUtil.readJSON(typeConverter, name, url, 0, contents, report);
-
-            if ( !report.errors.isEmpty() || !report.warnings.isEmpty() ) {
-                final StringBuilder builder = new StringBuilder();
-                builder.append("Errors in configuration:");
-                for(final String w : report.warnings) {
-                    builder.append("\n");
-                    builder.append(w);
-                }
-                for(final String e : report.errors) {
-                    builder.append("\n");
-                    builder.append(e);
-                }
-                throw new IOException(builder.toString());
-            }
-            return config.getConfigurations().get(0).getProperties();
-
         } else {
             final Hashtable<String, Object> ht = new Hashtable<>();
 
diff --git a/src/main/java/org/apache/sling/installer/core/impl/serializer/JsonConfigurationSerializer.java b/src/main/java/org/apache/sling/installer/core/impl/serializer/JsonConfigurationSerializer.java
index 7d364d9..0f7d84e 100644
--- a/src/main/java/org/apache/sling/installer/core/impl/serializer/JsonConfigurationSerializer.java
+++ b/src/main/java/org/apache/sling/installer/core/impl/serializer/JsonConfigurationSerializer.java
@@ -25,20 +25,19 @@
 import java.nio.charset.StandardCharsets;
 import java.util.Dictionary;
 
-import org.apache.sling.feature.io.ConfiguratorUtil;
+import org.apache.felix.cm.json.Configurations;
 import org.apache.sling.installer.api.serializer.ConfigurationSerializer;
 
 /** Serializes dictionary configuration objects (as specified in the configuration admin) into JSON format.
- * 
+ *
  * @see <a href="https://osgi.org/specification/osgi.cmpn/7.0.0/service.configurator.html">OSGi Configurator Spec</a>
- * @see <a href=
- *      "https://github.com/apache/felix/blob/trunk/configurator/src/main/java/org/apache/felix/configurator/impl/json/JSONUtil.java">JSONUtil</a> */
+ */
 public class JsonConfigurationSerializer implements ConfigurationSerializer {
 
     @Override
     public void serialize(Dictionary<String, Object> dictionary, OutputStream outputStream) throws IOException {
         Writer writer = new OutputStreamWriter(outputStream, StandardCharsets.UTF_8);
-        ConfiguratorUtil.writeConfiguration(writer, dictionary);
+        Configurations.buildWriter().build(writer).writeConfiguration(dictionary);
         writer.flush();
         // do not close the writer to prevent closing the underlying outputstream
     }
