diff --git a/pom.xml b/pom.xml
index 3ed4bed..e1454f0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -18,7 +18,7 @@
     </parent>
 
     <artifactId>org.apache.sling.feature.extension.apiregions</artifactId>
-    <version>1.6.5-SNAPSHOT</version>
+    <version>2.0.0-SNAPSHOT</version>
     <name>Apache Sling Feature Model - API Regions Extension</name>
 
     <scm>
@@ -49,6 +49,12 @@
     </build>
     <dependencies>
         <dependency>
+            <groupId>jakarta.json</groupId>
+            <artifactId>jakarta.json-api</artifactId>
+            <version>2.0.2</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
             <groupId>org.osgi</groupId>
             <artifactId>org.osgi.annotation.versioning</artifactId>
             <scope>provided</scope>
@@ -59,33 +65,33 @@
             <scope>provided</scope>
         </dependency>
         <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.util.converter</artifactId>
+            <version>1.0.9</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
             <groupId>org.apache.felix</groupId>
             <artifactId>org.apache.felix.cm.json</artifactId>
-            <version>1.0.8</version>
+            <version>2.0.0</version>
             <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.feature</artifactId>
-            <version>1.2.30</version>
+            <version>2.0.0-SNAPSHOT</version>
             <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.feature.analyser</artifactId>
-            <version>1.6.8</version>
+            <version>2.0.0-SNAPSHOT</version>
             <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.feature.launcher</artifactId>
-            <version>1.1.22</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.geronimo.specs</groupId>
-            <artifactId>geronimo-json_1.1_spec</artifactId>
-            <version>1.2</version>
+            <version>1.2.0</version>
             <scope>provided</scope>
         </dependency>
 
@@ -98,13 +104,14 @@
         <dependency>
             <groupId>org.mockito</groupId>
             <artifactId>mockito-core</artifactId>
-            <version>2.23.4</version>
+            <version>4.9.0</version>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.johnzon</groupId>
             <artifactId>johnzon-core</artifactId>
-            <version>1.2.14</version>
+            <classifier>jakarta</classifier>
+            <version>1.2.19</version>
             <scope>test</scope>
         </dependency>
         <dependency>
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/APIRegionMergeHandler.java b/src/main/java/org/apache/sling/feature/extension/apiregions/APIRegionMergeHandler.java
index 6b4c18b..17b0d59 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/APIRegionMergeHandler.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/APIRegionMergeHandler.java
@@ -22,7 +22,7 @@
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
-import javax.json.JsonArray;
+import jakarta.json.JsonArray;
 
 import org.apache.sling.feature.ArtifactId;
 import org.apache.sling.feature.Extension;
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/ConfigurationApiMergeHandler.java b/src/main/java/org/apache/sling/feature/extension/apiregions/ConfigurationApiMergeHandler.java
index 37bd902..41441dc 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/ConfigurationApiMergeHandler.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/ConfigurationApiMergeHandler.java
@@ -103,8 +103,6 @@
                 }
                 targetApi.getFrameworkPropertyDescriptions().put(entry.getKey(), entry.getValue());
             }
-            targetApi.getInternalConfigurations().addAll(sourceApi.getInternalConfigurations());
-            targetApi.getInternalFactoryConfigurations().addAll(sourceApi.getInternalFactoryConfigurations());
             targetApi.getInternalFrameworkProperties().addAll(sourceApi.getInternalFrameworkProperties());
 
             // update cache
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/ApiExport.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/ApiExport.java
index 518a6a7..dafb916 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/ApiExport.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/ApiExport.java
@@ -21,12 +21,12 @@
 import java.util.Map;
 import java.util.Objects;
 
-import javax.json.Json;
-import javax.json.JsonObject;
-import javax.json.JsonObjectBuilder;
-import javax.json.JsonString;
-import javax.json.JsonValue;
-import javax.json.JsonValue.ValueType;
+import jakarta.json.Json;
+import jakarta.json.JsonObject;
+import jakarta.json.JsonObjectBuilder;
+import jakarta.json.JsonString;
+import jakarta.json.JsonValue;
+import jakarta.json.JsonValue.ValueType;
 
 import org.apache.sling.feature.ArtifactId;
 
@@ -53,12 +53,8 @@
 
     private static final String TOGGLE_KEY = "toggle";
 
-    private static final String PREVIOUS_KEY = "previous";
-
     private static final String PREVIOUS_ARTIFACT_ID_KEY = "previous-artifact-id";
 
-    private static final String PREVIOUS_PACKAGE_VERSION_KEY = "previous-package-version";
-
     private final String name;
 
     private String toggle;
@@ -66,13 +62,6 @@
     /** If the package is behind a toggle, this is the previous artifact containing the package not behind a toggle */
     private ArtifactId previousArtifactId;
 
-    /**
-     * If the package is behind a toggle, this is the previous version of the package not behind a toggle
-     * @deprecated
-     */
-    @Deprecated
-    private String previousPackageVersion;
-
     private final Map<String, String> properties = new HashMap<>();
 
     private final Deprecation deprecation = new Deprecation();
@@ -117,28 +106,6 @@
     }
 
     /**
-     * Get the previous version of this package
-     * @return The previous version of this package or {@code null}
-     * @since 1.2.0
-     * @deprecated Use {@link #getPreviousArtifactId()}
-     */
-    @Deprecated
-    public String getPreviousPackageVersion() {
-        return this.previousPackageVersion;
-    }
-
-    /**
-     * Set the previous version of this package
-     * @param version The previous version of this package
-     * @since 1.2.0
-     * @deprecated Use {@link #getPreviousArtifactId()}
-     */
-    @Deprecated
-    public void setPreviousPackageVersion(final String version) {
-        this.previousPackageVersion = version;
-    }
-
-    /**
      * Get the previous artifact id containing the previous version
      *
      * @return The previous artifact id or {@code null}
@@ -159,28 +126,6 @@
     }
 
     /**
-     * Get the previous version of this api
-     *
-     * @return The previous version or {@code null}
-     * @deprecated Use {@link #getPreviousArtifactId()}
-     */
-    @Deprecated
-    public ArtifactId getPrevious() {
-        return this.getPreviousArtifactId();
-    }
-
-    /**
-     * Set the previous version
-     *
-     * @param previous Previous version
-     * @deprecated Use {@link #setPreviousArtifactId(ArtifactId)}
-     */
-    @Deprecated
-    public void setPrevious(final ArtifactId previous) {
-        this.setPreviousArtifactId(previous);
-    }
-
-    /**
      * Get additional properties
      *
      * @return Modifiable map of properties
@@ -331,7 +276,6 @@
     JsonValue toJSONValue() {
         final JsonValue depValue = this.deprecationToJSON();
         if (this.getToggle() == null
-            && this.getPreviousPackageVersion() == null
             && this.getPreviousArtifactId() == null
             && this.getProperties().isEmpty()
             && depValue == null ) {
@@ -342,9 +286,6 @@
         if (this.getToggle() != null) {
             expBuilder.add(TOGGLE_KEY, this.getToggle());
         }
-        if (this.getPreviousPackageVersion() != null) {
-            expBuilder.add(PREVIOUS_PACKAGE_VERSION_KEY, this.getPreviousPackageVersion());
-        }
         if (this.getPreviousArtifactId() != null) {
             expBuilder.add(PREVIOUS_ARTIFACT_ID_KEY, this.getPreviousArtifactId().toMvnId());
         }
@@ -387,15 +328,6 @@
                 } else if (TOGGLE_KEY.equals(key)) {
                     export.setToggle(expObj.getString(key));
 
-                } else if (PREVIOUS_PACKAGE_VERSION_KEY.equals(key)) {
-                    export.setPreviousPackageVersion(expObj.getString(key));
-                } else if (PREVIOUS_KEY.equals(key)) {
-                    if ( setPreviousArtifact ) {
-                        throw new IOException("Export " + export.getName() + " is defining previous artifact id twice in region "
-                                + region.getName());
-                    }
-                    export.setPreviousArtifactId(ArtifactId.parse(expObj.getString(key)));
-                    setPreviousArtifact = true;
                 } else if (PREVIOUS_ARTIFACT_ID_KEY.equals(key)) {
                     if ( setPreviousArtifact ) {
                         throw new IOException("Export " + export.getName() + " is defining previous artifact id twice in region "
@@ -426,13 +358,13 @@
 
     @Override
     public String toString() {
-        return "ApiExport [name=" + name + ", toggle=" + toggle + ", previousPackageVersion=" + previousPackageVersion
+        return "ApiExport [name=" + name + ", toggle=" + toggle
                 + ", previousArtifactId=" + previousArtifactId + ", properties=" + properties + "]";
     }
 
     @Override
     public int hashCode() {
-        return Objects.hash(deprecation, name, previousPackageVersion, previousArtifactId, properties, toggle);
+        return Objects.hash(deprecation, name, previousArtifactId, properties, toggle);
     }
 
     @Override
@@ -449,7 +381,7 @@
         ApiExport other = (ApiExport) obj;
         return Objects.equals(deprecation, other.deprecation) && Objects.equals(name, other.name)
                 && Objects.equals(previousArtifactId, other.previousArtifactId)
-                && Objects.equals(previousPackageVersion, other.previousPackageVersion) && Objects.equals(properties, other.properties)
+                && Objects.equals(properties, other.properties)
                 && Objects.equals(toggle, other.toggle);
     }
 }
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/ApiRegions.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/ApiRegions.java
index 618a4bb..34a9d8d 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/ApiRegions.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/ApiRegions.java
@@ -29,17 +29,17 @@
 import java.util.Set;
 import java.util.stream.Stream;
 
-import javax.json.Json;
-import javax.json.JsonArray;
-import javax.json.JsonArrayBuilder;
-import javax.json.JsonException;
-import javax.json.JsonObject;
-import javax.json.JsonObjectBuilder;
-import javax.json.JsonReader;
-import javax.json.JsonString;
-import javax.json.JsonValue;
-import javax.json.JsonValue.ValueType;
-import javax.json.JsonWriter;
+import jakarta.json.Json;
+import jakarta.json.JsonArray;
+import jakarta.json.JsonArrayBuilder;
+import jakarta.json.JsonException;
+import jakarta.json.JsonObject;
+import jakarta.json.JsonObjectBuilder;
+import jakarta.json.JsonReader;
+import jakarta.json.JsonString;
+import jakarta.json.JsonValue;
+import jakarta.json.JsonValue.ValueType;
+import jakarta.json.JsonWriter;
 
 import org.apache.sling.feature.Artifact;
 import org.apache.sling.feature.ArtifactId;
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/JDKDeprecationExtension.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/JDKDeprecationExtension.java
index 316b6d5..3805833 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/JDKDeprecationExtension.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/JDKDeprecationExtension.java
@@ -20,13 +20,13 @@
 import java.util.Map;
 import java.util.Objects;
 
-import javax.json.Json;
-import javax.json.JsonObject;
-import javax.json.JsonObjectBuilder;
-import javax.json.JsonString;
-import javax.json.JsonStructure;
-import javax.json.JsonValue;
-import javax.json.JsonValue.ValueType;
+import jakarta.json.Json;
+import jakarta.json.JsonObject;
+import jakarta.json.JsonObjectBuilder;
+import jakarta.json.JsonString;
+import jakarta.json.JsonStructure;
+import jakarta.json.JsonValue;
+import jakarta.json.JsonValue.ValueType;
 
 import org.apache.sling.feature.Extension;
 import org.apache.sling.feature.ExtensionType;
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/artifacts/ArtifactRules.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/artifacts/ArtifactRules.java
index bdea9f2..e1a8028 100755
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/artifacts/ArtifactRules.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/artifacts/ArtifactRules.java
@@ -20,12 +20,12 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import javax.json.Json;
-import javax.json.JsonArrayBuilder;
-import javax.json.JsonException;
-import javax.json.JsonObject;
-import javax.json.JsonObjectBuilder;
-import javax.json.JsonValue;
+import jakarta.json.Json;
+import jakarta.json.JsonArrayBuilder;
+import jakarta.json.JsonException;
+import jakarta.json.JsonObject;
+import jakarta.json.JsonObjectBuilder;
+import jakarta.json.JsonValue;
 
 import org.apache.sling.feature.Extension;
 import org.apache.sling.feature.ExtensionState;
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/artifacts/VersionRule.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/artifacts/VersionRule.java
index 1e4de5a..72d12ac 100755
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/artifacts/VersionRule.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/artifacts/VersionRule.java
@@ -18,9 +18,9 @@
 
 import java.io.IOException;
 
-import javax.json.JsonException;
-import javax.json.JsonObject;
-import javax.json.JsonObjectBuilder;
+import jakarta.json.JsonException;
+import jakarta.json.JsonObject;
+import jakarta.json.JsonObjectBuilder;
 
 import org.apache.sling.feature.ArtifactId;
 import org.apache.sling.feature.extension.apiregions.api.config.AttributeableEntity;
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/artifacts/package-info.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/artifacts/package-info.java
index 3b169bc..03ef7f2 100755
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/artifacts/package-info.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/artifacts/package-info.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-@org.osgi.annotation.versioning.Version("1.0.0")
+@org.osgi.annotation.versioning.Version("2.0.0")
 package org.apache.sling.feature.extension.apiregions.api.artifacts;
 
 
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/AttributeableEntity.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/AttributeableEntity.java
index c3908f9..69decec 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/AttributeableEntity.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/AttributeableEntity.java
@@ -20,17 +20,17 @@
 import java.util.LinkedHashMap;
 import java.util.Map;
 
-import javax.json.Json;
-import javax.json.JsonArray;
-import javax.json.JsonArrayBuilder;
-import javax.json.JsonException;
-import javax.json.JsonObject;
-import javax.json.JsonObjectBuilder;
-import javax.json.JsonString;
-import javax.json.JsonValue;
-import javax.json.JsonValue.ValueType;
+import jakarta.json.Json;
+import jakarta.json.JsonArray;
+import jakarta.json.JsonArrayBuilder;
+import jakarta.json.JsonException;
+import jakarta.json.JsonObject;
+import jakarta.json.JsonObjectBuilder;
+import jakarta.json.JsonString;
+import jakarta.json.JsonValue;
+import jakarta.json.JsonValue.ValueType;
 
-import org.apache.felix.cm.json.Configurations;
+import org.apache.felix.cm.json.io.Configurations;
 
 /**
  * Abstract class used by all entities which allow additional attributes to be stored.
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurableEntity.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurableEntity.java
index 3535246..7c5da52 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurableEntity.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurableEntity.java
@@ -21,14 +21,14 @@
 import java.util.List;
 import java.util.Map;
 
-import javax.json.Json;
-import javax.json.JsonArrayBuilder;
-import javax.json.JsonException;
-import javax.json.JsonObject;
-import javax.json.JsonObjectBuilder;
-import javax.json.JsonValue;
+import jakarta.json.Json;
+import jakarta.json.JsonArrayBuilder;
+import jakarta.json.JsonException;
+import jakarta.json.JsonObject;
+import jakarta.json.JsonObjectBuilder;
+import jakarta.json.JsonValue;
 
-import org.apache.felix.cm.json.Configurations;
+import org.apache.felix.cm.json.io.Configurations;
 
 /** 
  * A configurable entity has properties
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurableEntityAddition.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurableEntityAddition.java
index a6b849c..f14f7c7 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurableEntityAddition.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurableEntityAddition.java
@@ -19,13 +19,13 @@
 import java.io.IOException;
 import java.util.Map;
 
-import javax.json.Json;
-import javax.json.JsonException;
-import javax.json.JsonObject;
-import javax.json.JsonObjectBuilder;
-import javax.json.JsonValue;
+import jakarta.json.Json;
+import jakarta.json.JsonException;
+import jakarta.json.JsonObject;
+import jakarta.json.JsonObjectBuilder;
+import jakarta.json.JsonValue;
 
-import org.apache.felix.cm.json.Configurations;
+import org.apache.felix.cm.json.io.Configurations;
 
 /**
  * A description of an OSGi configuration addition
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurationApi.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurationApi.java
index 6626287..5b6635b 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurationApi.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurationApi.java
@@ -22,12 +22,12 @@
 import java.util.Set;
 import java.util.TreeSet;
 
-import javax.json.Json;
-import javax.json.JsonArrayBuilder;
-import javax.json.JsonException;
-import javax.json.JsonObject;
-import javax.json.JsonObjectBuilder;
-import javax.json.JsonValue;
+import jakarta.json.Json;
+import jakarta.json.JsonArrayBuilder;
+import jakarta.json.JsonException;
+import jakarta.json.JsonObject;
+import jakarta.json.JsonObjectBuilder;
+import jakarta.json.JsonValue;
 
 import org.apache.sling.feature.ArtifactId;
 import org.apache.sling.feature.Extension;
@@ -124,12 +124,6 @@
     /** The map of framework properties */
     private final Map<String, FrameworkPropertyDescription> frameworkProperties = new LinkedHashMap<>();
 
-    /** The set of internal configuration names */
-    private final Set<String> internalConfigurations = new TreeSet<>();
-
-    /** The set of internal factory configuration names */
-    private final Set<String> internalFactories = new TreeSet<>();
-
     /** The set of internal framework property names */
     private final Set<String> internalFrameworkProperties = new TreeSet<>();
 
@@ -164,8 +158,6 @@
         this.configurations.clear();
         this.factories.clear();
         this.frameworkProperties.clear();
-        this.internalConfigurations.clear();
-        this.internalFactories.clear();
         this.internalFrameworkProperties.clear();
         this.setRegion(null);
         this.getFeatureToRegionCache().clear();
@@ -220,14 +212,16 @@
             val = this.getAttributes().remove(InternalConstants.KEY_INTERNAL_CONFIGURATIONS);
             if ( val != null ) {
                 for(final JsonValue innerVal : val.asJsonArray()) {
-                    this.getInternalConfigurations().add(getString(innerVal));
+                    final ConfigurationDescription cfg = new ConfigurationDescription();
+                    this.getConfigurationDescriptions().put(getString(innerVal), cfg);
                 }
             }
 
             val = this.getAttributes().remove(InternalConstants.KEY_INTERNAL_FACTORIES);
             if ( val != null ) {
                 for(final JsonValue innerVal : val.asJsonArray()) {
-                    this.getInternalFactoryConfigurations().add(getString(innerVal));
+                    final FactoryConfigurationDescription cfg = new FactoryConfigurationDescription();
+                    this.getFactoryConfigurationDescriptions().put(getString(innerVal), cfg);
                 }
             }
 
@@ -297,26 +291,6 @@
 		return frameworkProperties;
 	}
 
-	/**
-     * Get the internal configuration pids
-	 * @return Mutable set of internal configuration pids
-     * @deprecated Please use empty configuration descriptions via {@link #getConfigurationDescriptions()}
-	 */
-	@Deprecated
-    public Set<String> getInternalConfigurations() {
-		return internalConfigurations;
-	}
-
-	/**
-     * Get the internal factory pids
-	 * @return Mutable set of internal factory configuration pids
-     * @deprecated Please use empty factory configuration descriptions via {@link #getFactoryConfigurationDescriptions()}
-	 */
-	@Deprecated
-    public Set<String> getInternalFactoryConfigurations() {
-		return internalFactories;
-	}
-
     /**
      * Check if the configuration is an internal configuration
      * @param pid The pid
@@ -324,12 +298,10 @@
      * @since 1.7.0
      */
     public boolean isInternalConfiguration(final String pid) {
-        boolean result = this.internalConfigurations.contains(pid);
-        if ( !result ) {
-            final ConfigurationDescription desc = this.configurations.get(pid);
-            if ( desc != null ) {
-                result = desc.getPropertyDescriptions().isEmpty();
-            }
+        boolean result = false;
+        final ConfigurationDescription desc = this.configurations.get(pid);
+        if ( desc != null ) {
+            result = desc.getPropertyDescriptions().isEmpty();
         }
         return result;
     }
@@ -342,14 +314,12 @@
      * @since 1.7.0
      */
     public boolean isInternalFactoryConfiguration(final String factoryPid, final String name) {
-        boolean result = this.internalFactories.contains(factoryPid);
-        if ( !result ) {
-            final FactoryConfigurationDescription desc = this.factories.get(factoryPid);
-            if ( desc != null ) {
-                result = desc.getPropertyDescriptions().isEmpty();
-                if ( !result && name != null ) {
-                    result = desc.getInternalNames().contains(name);
-                }
+        boolean result = false;
+        final FactoryConfigurationDescription desc = this.factories.get(factoryPid);
+        if ( desc != null ) {
+            result = desc.getPropertyDescriptions().isEmpty();
+            if ( !result && name != null ) {
+                result = desc.getInternalNames().contains(name);
             }
         }
         return result;
@@ -452,20 +422,6 @@
             }
             objBuilder.add(InternalConstants.KEY_FWK_PROPERTIES, propBuilder);
         }
-        if ( !this.getInternalConfigurations().isEmpty() ) {
-            final JsonArrayBuilder arrayBuilder = Json.createArrayBuilder();
-            for(final String n : this.getInternalConfigurations()) {
-                arrayBuilder.add(n);
-            }
-			objBuilder.add(InternalConstants.KEY_INTERNAL_CONFIGURATIONS, arrayBuilder);
-		}
-		if ( !this.getInternalFactoryConfigurations().isEmpty() ) {
-            final JsonArrayBuilder arrayBuilder = Json.createArrayBuilder();
-            for(final String n : this.getInternalFactoryConfigurations()) {
-                arrayBuilder.add(n);
-            }
-			objBuilder.add(InternalConstants.KEY_INTERNAL_FACTORIES, arrayBuilder);
-		}
 		if ( !this.getInternalFrameworkProperties().isEmpty() ) {
             final JsonArrayBuilder arrayBuilder = Json.createArrayBuilder();
             for(final String n : this.getInternalFrameworkProperties()) {
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/DescribableEntity.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/DescribableEntity.java
index a5c6496..4ae7298 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/DescribableEntity.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/DescribableEntity.java
@@ -18,9 +18,9 @@
 
 import java.io.IOException;
 
-import javax.json.JsonException;
-import javax.json.JsonObject;
-import javax.json.JsonObjectBuilder;
+import jakarta.json.JsonException;
+import jakarta.json.JsonObject;
+import jakarta.json.JsonObjectBuilder;
 
 /**
  * Abstract class for all describable entities, having an optional title,
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/FactoryConfigurationDescription.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/FactoryConfigurationDescription.java
index 4f6ac08..330778a 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/FactoryConfigurationDescription.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/FactoryConfigurationDescription.java
@@ -22,12 +22,12 @@
 import java.util.List;
 import java.util.Set;
 
-import javax.json.Json;
-import javax.json.JsonArrayBuilder;
-import javax.json.JsonException;
-import javax.json.JsonObject;
-import javax.json.JsonObjectBuilder;
-import javax.json.JsonValue;
+import jakarta.json.Json;
+import jakarta.json.JsonArrayBuilder;
+import jakarta.json.JsonException;
+import jakarta.json.JsonObject;
+import jakarta.json.JsonObjectBuilder;
+import jakarta.json.JsonValue;
 
 /**
  * Description of an OSGi factory configuration
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/FactoryConfigurationDescriptionAddition.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/FactoryConfigurationDescriptionAddition.java
index f240a29..e5af85b 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/FactoryConfigurationDescriptionAddition.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/FactoryConfigurationDescriptionAddition.java
@@ -20,12 +20,12 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import javax.json.Json;
-import javax.json.JsonArrayBuilder;
-import javax.json.JsonException;
-import javax.json.JsonObject;
-import javax.json.JsonObjectBuilder;
-import javax.json.JsonValue;
+import jakarta.json.Json;
+import jakarta.json.JsonArrayBuilder;
+import jakarta.json.JsonException;
+import jakarta.json.JsonObject;
+import jakarta.json.JsonObjectBuilder;
+import jakarta.json.JsonValue;
 
 /**
  * Description of an OSGi factory configuration addition
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/Option.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/Option.java
index 8470387..0c740b9 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/Option.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/Option.java
@@ -18,9 +18,9 @@
 
 import java.io.IOException;
 
-import javax.json.JsonException;
-import javax.json.JsonObject;
-import javax.json.JsonObjectBuilder;
+import jakarta.json.JsonException;
+import jakarta.json.JsonObject;
+import jakarta.json.JsonObjectBuilder;
 
 /**
  * Option for a property value
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/PropertyDescription.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/PropertyDescription.java
index 6ee4fcf..85605f2 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/PropertyDescription.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/PropertyDescription.java
@@ -21,14 +21,14 @@
 import java.util.List;
 import java.util.regex.Pattern;
 
-import javax.json.Json;
-import javax.json.JsonArrayBuilder;
-import javax.json.JsonException;
-import javax.json.JsonObject;
-import javax.json.JsonObjectBuilder;
-import javax.json.JsonValue;
+import jakarta.json.Json;
+import jakarta.json.JsonArrayBuilder;
+import jakarta.json.JsonException;
+import jakarta.json.JsonObject;
+import jakarta.json.JsonObjectBuilder;
+import jakarta.json.JsonValue;
 
-import org.apache.felix.cm.json.Configurations;
+import org.apache.felix.cm.json.io.Configurations;
 
 /**
  * Instances of this class represent a single configuration property
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/PropertyDescriptionAddition.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/PropertyDescriptionAddition.java
index e65d43c..ca94e14 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/PropertyDescriptionAddition.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/PropertyDescriptionAddition.java
@@ -20,12 +20,12 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import javax.json.Json;
-import javax.json.JsonArrayBuilder;
-import javax.json.JsonException;
-import javax.json.JsonObject;
-import javax.json.JsonObjectBuilder;
-import javax.json.JsonValue;
+import jakarta.json.Json;
+import jakarta.json.JsonArrayBuilder;
+import jakarta.json.JsonException;
+import jakarta.json.JsonObject;
+import jakarta.json.JsonObjectBuilder;
+import jakarta.json.JsonValue;
 
 /**
  * Instances of this class represent an addition to a configuration property
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/Range.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/Range.java
index 2e90a0d..6b031e4 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/Range.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/Range.java
@@ -18,11 +18,11 @@
 
 import java.io.IOException;
 
-import javax.json.JsonException;
-import javax.json.JsonObject;
-import javax.json.JsonObjectBuilder;
+import jakarta.json.JsonException;
+import jakarta.json.JsonObject;
+import jakarta.json.JsonObjectBuilder;
 
-import org.apache.felix.cm.json.Configurations;
+import org.apache.felix.cm.json.io.Configurations;
 
 /**
  * A numerical value range
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/package-info.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/package-info.java
index 6c6795d..5e6c39a 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/package-info.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/package-info.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-@org.osgi.annotation.versioning.Version("1.8.0")
+@org.osgi.annotation.versioning.Version("2.0.0")
 package org.apache.sling.feature.extension.apiregions.api.config;
 
 
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/FeatureValidator.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/FeatureValidator.java
index 9d35533..98a3a2c 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/FeatureValidator.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/FeatureValidator.java
@@ -157,7 +157,7 @@
                             }
                         }                        
 
-                    } else if ( regionInfo.region != Region.INTERNAL && api.getInternalFactoryConfigurations().contains(config.getFactoryPid())) {
+                    } else if ( regionInfo.region != Region.INTERNAL && api.isInternalFactoryConfiguration(config.getFactoryPid(), config.getName())) {
                         final ConfigurationValidationResult cvr = new ConfigurationValidationResult();
                         ConfigurationValidator.setResult(cvr, api.getMode(), desc, "Factory configuration is not " +
                                 "allowed");
@@ -168,7 +168,7 @@
                     if ( desc != null ) {
                         final ConfigurationValidationResult r = configurationValidator.validate(config, desc, regionInfo.region, api.getMode());
                         result.getConfigurationResults().put(config.getPid(), r);
-                    } else if ( regionInfo.region!= Region.INTERNAL && api.getInternalConfigurations().contains(config.getPid())) {
+                    } else if ( regionInfo.region!= Region.INTERNAL && api.isInternalConfiguration(config.getPid())) {
                         final ConfigurationValidationResult cvr = new ConfigurationValidationResult();
                         ConfigurationValidator.setResult(cvr, api.getMode(), desc, "Configuration is not allowed");
                         result.getConfigurationResults().put(config.getPid(), cvr);
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/package-info.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/package-info.java
index 7e983c6..b233775 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/package-info.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/config/validation/package-info.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-@org.osgi.annotation.versioning.Version("1.6.0")
+@org.osgi.annotation.versioning.Version("2.0.0")
 package org.apache.sling.feature.extension.apiregions.api.config.validation;
 
 
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/api/package-info.java b/src/main/java/org/apache/sling/feature/extension/apiregions/api/package-info.java
index 63f8d29..3c39439 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/api/package-info.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/api/package-info.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-@org.osgi.annotation.versioning.Version("1.4.1")
+@org.osgi.annotation.versioning.Version("2.0.0")
 package org.apache.sling.feature.extension.apiregions.api;
 
 
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/launcher/RegionLauncherExtension.java b/src/main/java/org/apache/sling/feature/extension/apiregions/launcher/RegionLauncherExtension.java
index 7a180a7..8e4f937 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/launcher/RegionLauncherExtension.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/launcher/RegionLauncherExtension.java
@@ -17,7 +17,7 @@
 package org.apache.sling.feature.extension.apiregions.launcher;
 
 import java.io.File;
-import javax.json.JsonArray;
+import jakarta.json.JsonArray;
 
 import org.apache.sling.feature.Extension;
 import org.apache.sling.feature.extension.apiregions.api.ApiRegions;
diff --git a/src/test/java/org/apache/sling/feature/extension/apiregions/APIRegionMergeHandlerTest.java b/src/test/java/org/apache/sling/feature/extension/apiregions/APIRegionMergeHandlerTest.java
index f31b965..62766ea 100644
--- a/src/test/java/org/apache/sling/feature/extension/apiregions/APIRegionMergeHandlerTest.java
+++ b/src/test/java/org/apache/sling/feature/extension/apiregions/APIRegionMergeHandlerTest.java
@@ -26,9 +26,9 @@
 import java.util.Comparator;
 import java.util.List;
 
-import javax.json.Json;
-import javax.json.JsonArray;
-import javax.json.JsonReader;
+import jakarta.json.Json;
+import jakarta.json.JsonArray;
+import jakarta.json.JsonReader;
 
 import org.apache.sling.feature.ArtifactId;
 import org.apache.sling.feature.Extension;
diff --git a/src/test/java/org/apache/sling/feature/extension/apiregions/ConfigurationApiMergeHandlerTest.java b/src/test/java/org/apache/sling/feature/extension/apiregions/ConfigurationApiMergeHandlerTest.java
index 3d15778..62c3631 100644
--- a/src/test/java/org/apache/sling/feature/extension/apiregions/ConfigurationApiMergeHandlerTest.java
+++ b/src/test/java/org/apache/sling/feature/extension/apiregions/ConfigurationApiMergeHandlerTest.java
@@ -24,9 +24,6 @@
 
 import java.util.Arrays;
 
-import javax.json.Json;
-import javax.json.JsonObject;
-
 import org.apache.sling.feature.ArtifactId;
 import org.apache.sling.feature.Feature;
 import org.apache.sling.feature.Prototype;
@@ -352,23 +349,15 @@
 
         final Feature featureA = new Feature(ArtifactId.parse("g:a:1"));
         final ConfigurationApi apiA = new ConfigurationApi();
-        apiA.getInternalConfigurations().add("a");
-        apiA.getInternalFactoryConfigurations().add("fa");
         apiA.getInternalFrameworkProperties().add("pa");
 
-        apiA.getInternalConfigurations().add("c");
-        apiA.getInternalFactoryConfigurations().add("fc");
         apiA.getInternalFrameworkProperties().add("pc");
         ConfigurationApi.setConfigurationApi(featureA, apiA);
         
         final Feature featureB = new Feature(ArtifactId.parse("g:b:1"));
         final ConfigurationApi apiB = new ConfigurationApi();
-        apiB.getInternalConfigurations().add("b");
-        apiB.getInternalFactoryConfigurations().add("fb");
         apiB.getInternalFrameworkProperties().add("pb");
 
-        apiB.getInternalConfigurations().add("c");
-        apiB.getInternalFactoryConfigurations().add("fc");
         apiB.getInternalFrameworkProperties().add("pc");
         ConfigurationApi.setConfigurationApi(featureB, apiB);
 
@@ -377,16 +366,6 @@
         ConfigurationApi api = ConfigurationApi.getConfigurationApi(result);
         assertNotNull(api);
 
-        assertEquals(3, api.getInternalConfigurations().size());
-        assertTrue(api.getInternalConfigurations().contains("a"));
-        assertTrue(api.getInternalConfigurations().contains("b"));
-        assertTrue(api.getInternalConfigurations().contains("c"));
-
-        assertEquals(3, api.getInternalFactoryConfigurations().size());
-        assertTrue(api.getInternalFactoryConfigurations().contains("fa"));
-        assertTrue(api.getInternalFactoryConfigurations().contains("fb"));
-        assertTrue(api.getInternalFactoryConfigurations().contains("fc"));
-
         assertEquals(3, api.getInternalFrameworkProperties().size());
         assertTrue(api.getInternalFrameworkProperties().contains("pa"));
         assertTrue(api.getInternalFrameworkProperties().contains("pb"));
diff --git a/src/test/java/org/apache/sling/feature/extension/apiregions/analyser/AbstractApiRegionsAnalyserTaskTest.java b/src/test/java/org/apache/sling/feature/extension/apiregions/analyser/AbstractApiRegionsAnalyserTaskTest.java
index 930a902..029cc88 100644
--- a/src/test/java/org/apache/sling/feature/extension/apiregions/analyser/AbstractApiRegionsAnalyserTaskTest.java
+++ b/src/test/java/org/apache/sling/feature/extension/apiregions/analyser/AbstractApiRegionsAnalyserTaskTest.java
@@ -23,10 +23,10 @@
 import java.util.List;
 import java.util.Map;
 import java.util.jar.Manifest;
-import javax.json.Json;
-import javax.json.JsonArray;
-import javax.json.JsonReader;
-import javax.json.stream.JsonParsingException;
+import jakarta.json.Json;
+import jakarta.json.JsonArray;
+import jakarta.json.JsonReader;
+import jakarta.json.stream.JsonParsingException;
 
 import org.apache.johnzon.core.JsonReaderImpl.NothingToRead;
 import org.apache.sling.feature.Artifact;
@@ -196,13 +196,6 @@
             // do nothing
             return null;
         }
-
-        @Override
-        public int getBundleStartLevel() {
-            // do nothing
-            return 0;
-        }
-
     }
 
 }
diff --git a/src/test/java/org/apache/sling/feature/extension/apiregions/api/ApiExportTest.java b/src/test/java/org/apache/sling/feature/extension/apiregions/api/ApiExportTest.java
index bb8c2fc..49dafc9 100644
--- a/src/test/java/org/apache/sling/feature/extension/apiregions/api/ApiExportTest.java
+++ b/src/test/java/org/apache/sling/feature/extension/apiregions/api/ApiExportTest.java
@@ -22,9 +22,9 @@
 
 import java.io.StringReader;
 
-import javax.json.Json;
-import javax.json.JsonObject;
-import javax.json.JsonValue;
+import jakarta.json.Json;
+import jakarta.json.JsonObject;
+import jakarta.json.JsonValue;
 
 import org.junit.Test;
 
diff --git a/src/test/java/org/apache/sling/feature/extension/apiregions/api/ApiRegionsTest.java b/src/test/java/org/apache/sling/feature/extension/apiregions/api/ApiRegionsTest.java
index fcc88b5..3e4eb52 100644
--- a/src/test/java/org/apache/sling/feature/extension/apiregions/api/ApiRegionsTest.java
+++ b/src/test/java/org/apache/sling/feature/extension/apiregions/api/ApiRegionsTest.java
@@ -30,9 +30,9 @@
 import java.io.Writer;
 import java.util.Iterator;
 
-import javax.json.Json;
-import javax.json.JsonArray;
-import javax.json.JsonReader;
+import jakarta.json.Json;
+import jakarta.json.JsonArray;
+import jakarta.json.JsonReader;
 
 import org.apache.sling.feature.ArtifactId;
 import org.apache.sling.feature.Extension;
@@ -200,29 +200,18 @@
         final ApiRegion global = regions.listRegions().get(0);
         assertEquals("global", global.getName());
 
-        assertEquals(3, global.listExports().size());
+        assertEquals(2, global.listExports().size());
 
         final Iterator<ApiExport> iter = global.listExports().iterator();
         final ApiExport exp1 = iter.next();
         assertEquals("org.apache.sling.global", exp1.getName());
         assertEquals("sling_enabled", exp1.getToggle());
-        assertNull(exp1.getPrevious());
         assertNull(exp1.getPreviousArtifactId());
-        assertNull(exp1.getPreviousPackageVersion());
 
         final ApiExport exp2 = iter.next();
         assertEquals("org.apache.felix.global", exp2.getName());
         assertEquals("global_enabled", exp2.getToggle());
-        assertEquals(ArtifactId.parse("org.apache.felix:api:1.1"), exp2.getPrevious());
         assertEquals(ArtifactId.parse("org.apache.felix:api:1.1"), exp2.getPreviousArtifactId());
-        assertNull(exp2.getPreviousPackageVersion());
-
-        final ApiExport exp3 = iter.next();
-        assertEquals("org.apache.felix.global.sub", exp3.getName());
-        assertEquals("global_enabled", exp3.getToggle());
-        assertEquals(ArtifactId.parse("org.apache.felix:api:1.1"), exp3.getPrevious());
-        assertEquals(ArtifactId.parse("org.apache.felix:api:1.1"), exp3.getPreviousArtifactId());
-        assertEquals("1.1", exp3.getPreviousPackageVersion());
 
         // create json and parse
         final ApiRegions regions2 = ApiRegions.parse(regions.toJSONArray());
diff --git a/src/test/java/org/apache/sling/feature/extension/apiregions/api/artifacts/ArtifactRulesTest.java b/src/test/java/org/apache/sling/feature/extension/apiregions/api/artifacts/ArtifactRulesTest.java
index e6d6e92..75afdbe 100644
--- a/src/test/java/org/apache/sling/feature/extension/apiregions/api/artifacts/ArtifactRulesTest.java
+++ b/src/test/java/org/apache/sling/feature/extension/apiregions/api/artifacts/ArtifactRulesTest.java
@@ -23,7 +23,7 @@
 
 import java.io.IOException;
 
-import javax.json.Json;
+import jakarta.json.Json;
 
 import org.apache.sling.feature.ArtifactId;
 import org.apache.sling.feature.Extension;
diff --git a/src/test/java/org/apache/sling/feature/extension/apiregions/api/artifacts/VersionRuleTest.java b/src/test/java/org/apache/sling/feature/extension/apiregions/api/artifacts/VersionRuleTest.java
index dc4cb3b..e0d2dc0 100644
--- a/src/test/java/org/apache/sling/feature/extension/apiregions/api/artifacts/VersionRuleTest.java
+++ b/src/test/java/org/apache/sling/feature/extension/apiregions/api/artifacts/VersionRuleTest.java
@@ -23,7 +23,7 @@
 
 import java.io.IOException;
 
-import javax.json.Json;
+import jakarta.json.Json;
 
 import org.apache.sling.feature.ArtifactId;
 import org.apache.sling.feature.Extension;
diff --git a/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/AttributeableEntityTest.java b/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/AttributeableEntityTest.java
index 1679d38..2414fbb 100644
--- a/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/AttributeableEntityTest.java
+++ b/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/AttributeableEntityTest.java
@@ -24,10 +24,10 @@
 
 import java.io.IOException;
 
-import javax.json.Json;
-import javax.json.JsonArrayBuilder;
-import javax.json.JsonObjectBuilder;
-import javax.json.JsonValue;
+import jakarta.json.Json;
+import jakarta.json.JsonArrayBuilder;
+import jakarta.json.JsonObjectBuilder;
+import jakarta.json.JsonValue;
 
 import org.apache.sling.feature.Extension;
 import org.apache.sling.feature.ExtensionState;
diff --git a/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurableEntityAdditionTest.java b/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurableEntityAdditionTest.java
index d805e0c..0fa8241 100644
--- a/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurableEntityAdditionTest.java
+++ b/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurableEntityAdditionTest.java
@@ -22,7 +22,7 @@
 
 import java.io.IOException;
 
-import javax.json.Json;
+import jakarta.json.Json;
 
 import org.apache.sling.feature.Extension;
 import org.apache.sling.feature.ExtensionState;
diff --git a/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurableEntityTest.java b/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurableEntityTest.java
index 90115b7..e9d9d91 100644
--- a/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurableEntityTest.java
+++ b/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurableEntityTest.java
@@ -24,7 +24,7 @@
 
 import java.io.IOException;
 
-import javax.json.Json;
+import jakarta.json.Json;
 
 import org.apache.sling.feature.Extension;
 import org.apache.sling.feature.ExtensionState;
diff --git a/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurationApiTest.java b/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurationApiTest.java
index d06584d..9a5a6e8 100644
--- a/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurationApiTest.java
+++ b/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/ConfigurationApiTest.java
@@ -24,7 +24,7 @@
 
 import java.io.IOException;
 
-import javax.json.Json;
+import jakarta.json.Json;
 
 import org.apache.sling.feature.ArtifactId;
 import org.apache.sling.feature.Extension;
@@ -73,8 +73,6 @@
         entity.getConfigurationDescriptions().put("pid", new ConfigurationDescription());
         entity.getFactoryConfigurationDescriptions().put("factory", new FactoryConfigurationDescription());
         entity.getFrameworkPropertyDescriptions().put("prop", new FrameworkPropertyDescription());
-        entity.getInternalConfigurations().add("ipid");
-        entity.getInternalFactoryConfigurations().add("ifactory");
         entity.getInternalFrameworkProperties().add("iprop");
         entity.setRegion(Region.GLOBAL);
         entity.getFeatureToRegionCache().put(ArtifactId.parse("g:a:1"), Region.GLOBAL);
@@ -86,8 +84,6 @@
         assertTrue(entity.getConfigurationDescriptions().isEmpty());
         assertTrue(entity.getFactoryConfigurationDescriptions().isEmpty());
         assertTrue(entity.getFrameworkPropertyDescriptions().isEmpty());
-        assertTrue(entity.getInternalConfigurations().isEmpty());
-        assertTrue(entity.getInternalFactoryConfigurations().isEmpty());
         assertTrue(entity.getInternalFrameworkProperties().isEmpty());
         assertNull(entity.getRegion());
         assertTrue(entity.getFeatureToRegionCache().isEmpty());
@@ -101,8 +97,6 @@
         ext.setJSON("{ \"a\" : 5, \"configurations\" : { \"pid\": {}}, " +
             "\"factory-configurations\" : { \"factory\" : {}}," +
             "\"framework-properties\" : { \"prop\" : { \"type\" : \"STRING\"}}," +
-            "\"internal-configurations\" : [\"ipid\"],"+
-            "\"internal-factory-configurations\" : [\"ifactory\"],"+
             "\"internal-framework-properties\" : [\"iprop\"],"+
             "\"region\" : \"INTERNAL\","+
             "\"region-cache\" : {\"g:a1:feature:1.0.0\" : \"INTERNAL\", \"g:a2:feature:1.7.3\" : \"GLOBAL\"},"+
@@ -117,8 +111,6 @@
         assertEquals(1, entity.getConfigurationDescriptionAdditions().size());
         assertEquals(1, entity.getFactoryConfigurationDescriptionAdditions().size());
         assertEquals(1, entity.getFrameworkPropertyDescriptions().size());
-        assertEquals(1, entity.getInternalConfigurations().size());
-        assertEquals(1, entity.getInternalFactoryConfigurations().size());
         assertEquals(1, entity.getInternalFrameworkProperties().size());
         assertEquals(2, entity.getFeatureToRegionCache().size());
         assertTrue(entity.getConfigurationDescriptions().containsKey("pid"));
@@ -126,8 +118,6 @@
         assertTrue(entity.getConfigurationDescriptionAdditions().containsKey("pida"));
         assertTrue(entity.getFactoryConfigurationDescriptionAdditions().containsKey("factorya"));
         assertTrue(entity.getFrameworkPropertyDescriptions().containsKey("prop"));
-        assertTrue(entity.getInternalConfigurations().contains("ipid"));
-        assertTrue(entity.getInternalFactoryConfigurations().contains("ifactory"));
         assertTrue(entity.getInternalFrameworkProperties().contains("iprop"));
         assertEquals(Region.INTERNAL, entity.getRegion());
         assertEquals(Region.INTERNAL, entity.getFeatureToRegionCache().get(ArtifactId.parse("g:a1:feature:1.0.0")));
@@ -143,8 +133,6 @@
         entity.getFrameworkPropertyDescriptions().put("prop", new FrameworkPropertyDescription());
         entity.getConfigurationDescriptionAdditions().put("pida", new ConfigurationDescriptionAddition());
         entity.getFactoryConfigurationDescriptionAdditions().put("factorya", new FactoryConfigurationDescriptionAddition());
-        entity.getInternalConfigurations().add("ipid");
-        entity.getInternalFactoryConfigurations().add("ifactory");
         entity.getInternalFrameworkProperties().add("iprop");
         entity.setRegion(Region.INTERNAL);
         entity.getFeatureToRegionCache().put(ArtifactId.parse("g:a1:feature:1.0.0"), Region.INTERNAL);
@@ -154,8 +142,6 @@
         ext.setJSON("{ \"a\" : 5, \"configurations\" : { \"pid\": {}}, " +
             "\"factory-configurations\" : { \"factory\" : {}}," +
             "\"framework-properties\" : { \"prop\" : {}}," +
-            "\"internal-configurations\" : [\"ipid\"],"+
-            "\"internal-factory-configurations\" : [\"ifactory\"],"+
             "\"internal-framework-properties\" : [\"iprop\"],"+
             "\"region\" : \"INTERNAL\","+
             "\"region-cache\" : {\"g:a1:feature:1.0.0\" : \"INTERNAL\", \"g:a2:feature:1.7.3\" : \"GLOBAL\"}," +
@@ -191,11 +177,6 @@
         // a description without properties makes it internal
         desc.getPropertyDescriptions().clear();
         assertTrue(api.isInternalConfiguration(PID));
-
-        // and deprecated variant
-        api.getConfigurationDescriptions().clear();
-        api.getInternalConfigurations().add(PID);
-        assertTrue(api.isInternalConfiguration(PID));
     }
 
     @Test public void testIsInternalFactoryConfigurationNoName() {
@@ -214,11 +195,6 @@
         // a description without properties makes it internal
         desc.getPropertyDescriptions().clear();
         assertTrue(api.isInternalFactoryConfiguration(FACTORYPID, null));
-
-        // and deprecated variant
-        api.getFactoryConfigurationDescriptions().clear();
-        api.getInternalFactoryConfigurations().add(FACTORYPID);
-        assertTrue(api.isInternalFactoryConfiguration(FACTORYPID, null));
     }
 
     @Test public void testIsInternalFactoryConfigurationWithName() {
@@ -243,10 +219,5 @@
         desc.getInternalNames().clear();
         desc.getPropertyDescriptions().clear();
         assertTrue(api.isInternalFactoryConfiguration(FACTORYPID, NAME));
-
-        // and deprecated variant
-        api.getFactoryConfigurationDescriptions().clear();
-        api.getInternalFactoryConfigurations().add(FACTORYPID);
-        assertTrue(api.isInternalFactoryConfiguration(FACTORYPID, NAME));
     }
 }
diff --git a/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/DescribableEntityTest.java b/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/DescribableEntityTest.java
index 9293a85..c7bb8b1 100644
--- a/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/DescribableEntityTest.java
+++ b/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/DescribableEntityTest.java
@@ -22,7 +22,7 @@
 
 import java.io.IOException;
 
-import javax.json.Json;
+import jakarta.json.Json;
 
 import org.apache.sling.feature.Extension;
 import org.apache.sling.feature.ExtensionState;
diff --git a/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/FactoryConfigurationDescriptionAdditionTest.java b/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/FactoryConfigurationDescriptionAdditionTest.java
index 0ecbf41..ec08bb3 100644
--- a/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/FactoryConfigurationDescriptionAdditionTest.java
+++ b/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/FactoryConfigurationDescriptionAdditionTest.java
@@ -21,7 +21,7 @@
 
 import java.io.IOException;
 
-import javax.json.Json;
+import jakarta.json.Json;
 
 import org.apache.sling.feature.Extension;
 import org.apache.sling.feature.ExtensionState;
diff --git a/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/FactoryConfigurationDescriptionTest.java b/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/FactoryConfigurationDescriptionTest.java
index d396a71..80aa6c2 100644
--- a/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/FactoryConfigurationDescriptionTest.java
+++ b/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/FactoryConfigurationDescriptionTest.java
@@ -22,7 +22,7 @@
 
 import java.io.IOException;
 
-import javax.json.Json;
+import jakarta.json.Json;
 
 import org.apache.sling.feature.Extension;
 import org.apache.sling.feature.ExtensionState;
diff --git a/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/OptionTest.java b/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/OptionTest.java
index 924c2b0..fca0e69 100644
--- a/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/OptionTest.java
+++ b/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/OptionTest.java
@@ -22,7 +22,7 @@
 
 import java.io.IOException;
 
-import javax.json.Json;
+import jakarta.json.Json;
 
 import org.apache.sling.feature.Extension;
 import org.apache.sling.feature.ExtensionState;
diff --git a/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/PropertyDescriptionAdditionTest.java b/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/PropertyDescriptionAdditionTest.java
index fae16d7..4700934 100644
--- a/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/PropertyDescriptionAdditionTest.java
+++ b/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/PropertyDescriptionAdditionTest.java
@@ -23,7 +23,7 @@
 
 import java.io.IOException;
 
-import javax.json.Json;
+import jakarta.json.Json;
 
 import org.apache.sling.feature.Extension;
 import org.apache.sling.feature.ExtensionState;
diff --git a/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/PropertyDescriptionTest.java b/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/PropertyDescriptionTest.java
index 086e0a3..e667024 100644
--- a/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/PropertyDescriptionTest.java
+++ b/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/PropertyDescriptionTest.java
@@ -27,7 +27,7 @@
 import java.io.IOException;
 import java.util.Arrays;
 
-import javax.json.Json;
+import jakarta.json.Json;
 
 import org.apache.sling.feature.Extension;
 import org.apache.sling.feature.ExtensionState;
diff --git a/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/RangeTest.java b/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/RangeTest.java
index b894daf..1358520 100644
--- a/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/RangeTest.java
+++ b/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/RangeTest.java
@@ -22,7 +22,7 @@
 
 import java.io.IOException;
 
-import javax.json.Json;
+import jakarta.json.Json;
 
 import org.apache.sling.feature.Extension;
 import org.apache.sling.feature.ExtensionState;
diff --git a/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/validation/FeatureValidatorTest.java b/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/validation/FeatureValidatorTest.java
index 216328e..90ab910 100644
--- a/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/validation/FeatureValidatorTest.java
+++ b/src/test/java/org/apache/sling/feature/extension/apiregions/api/config/validation/FeatureValidatorTest.java
@@ -460,8 +460,8 @@
         assertTrue(result.isValid());
 
         // mark configurations as internal
-        api.getInternalConfigurations().add(PID);
-        api.getInternalFactoryConfigurations().add(FACTORY_PID);
+        api.getConfigurationDescriptions().put(PID, new ConfigurationDescription());
+        api.getFactoryConfigurationDescriptions().put(FACTORY_PID, new FactoryConfigurationDescription());
         ConfigurationApi.setConfigurationApi(f1, api);
 
         // global region
diff --git a/src/test/resources/json/apis-toggles.json b/src/test/resources/json/apis-toggles.json
index 4c48926..264ed2c 100644
--- a/src/test/resources/json/apis-toggles.json
+++ b/src/test/resources/json/apis-toggles.json
@@ -9,12 +9,6 @@
         {
             "name" : "org.apache.felix.global",
             "toggle" : "global_enabled",
-            "previous" : "org.apache.felix:api:1.1"
-        },
-        {
-            "name" : "org.apache.felix.global.sub",
-            "toggle" : "global_enabled",
-            "previous-package-version" : "1.1",
             "previous-artifact-id" : "org.apache.felix:api:1.1"
         }
       ]
