diff --git a/pom.xml b/pom.xml
index dbcb125..d6b3223 100644
--- a/pom.xml
+++ b/pom.xml
@@ -76,5 +76,23 @@
             <version>1.0.6</version>
             <scope>provided</scope>
         </dependency>
+        <dependency>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.feature.r2f</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.feature</artifactId>
+            <version>1.0.4</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.feature.io</artifactId>
+            <version>1.0.4</version>
+            <scope>provided</scope>
+        </dependency>
     </dependencies>
 </project>
diff --git a/src/main/java/org/apache/sling/feature/inventoryservice/impl/AbstractRuntimeEnvironment2FeatureModelPrinter.java b/src/main/java/org/apache/sling/feature/inventoryservice/impl/AbstractRuntimeEnvironment2FeatureModelPrinter.java
new file mode 100644
index 0000000..bb3e322
--- /dev/null
+++ b/src/main/java/org/apache/sling/feature/inventoryservice/impl/AbstractRuntimeEnvironment2FeatureModelPrinter.java
@@ -0,0 +1,93 @@
+/*
+ * 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.feature.inventoryservice.impl;
+
+import static java.nio.charset.StandardCharsets.UTF_8;
+import static java.nio.file.Files.newBufferedReader;
+import static org.apache.sling.feature.io.json.FeatureJSONReader.read;
+import static org.apache.sling.feature.io.json.FeatureJSONWriter.write;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.Reader;
+import java.net.URI;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+import org.apache.felix.inventory.Format;
+import org.apache.felix.inventory.InventoryPrinter;
+import org.apache.sling.feature.ArtifactId;
+import org.apache.sling.feature.Feature;
+import org.apache.sling.feature.r2f.ConversionRequest;
+import org.apache.sling.feature.r2f.DefaultConversionRequest;
+import org.apache.sling.feature.r2f.RuntimeEnvironment2FeatureModel;
+import org.osgi.framework.BundleContext;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Reference;
+
+abstract class AbstractRuntimeEnvironment2FeatureModelPrinter implements InventoryPrinter {
+
+    private static final String SLING_FEATURE_PROPERTY_NAME = "sling.feature";
+
+    @Reference
+    RuntimeEnvironment2FeatureModel generator;
+
+    @Activate
+    BundleContext bundleContext;
+
+    @Override
+    public final void print(PrintWriter printWriter, Format format, boolean isZip) {
+        String previousFeatureLocation = bundleContext.getProperty(SLING_FEATURE_PROPERTY_NAME);
+        URI previousFeatureURI = URI.create(previousFeatureLocation);
+        Path previousFeaturePath = Paths.get(previousFeatureURI);
+        Feature previousFeature = null;
+
+        try (Reader reader = newBufferedReader(previousFeaturePath, UTF_8)) {
+            previousFeature = read(reader, previousFeatureLocation);
+        } catch (IOException e) {
+            throw new RuntimeException("An error occurred while reading 'sling.feature' framework-property "
+                    + previousFeatureLocation
+                    + ", see causing error(s):",
+                    e);
+        }
+
+        String groupId = previousFeature.getId().getGroupId();
+        String artifactId = previousFeature.getId().getArtifactId();
+        String version = previousFeature.getId().getArtifactId();
+        String classifier = previousFeature.getId().getArtifactId() + "-RUNTIME";
+
+        ConversionRequest request = new DefaultConversionRequest()
+                                    .setBundleContext(bundleContext)
+                                    .setResultId(new ArtifactId(groupId, artifactId, version, classifier, null));
+        Feature currentFeature = generator.scanAndAssemble(request);
+
+        Feature computedFeature = compute(previousFeature, currentFeature);
+
+        try {
+            write(printWriter, computedFeature);
+        } catch (IOException e) {
+            printWriter.append("An error occured while searlizing ")
+                       .append(computedFeature.toString())
+                       .append(":\n");
+
+            e.printStackTrace(printWriter);
+        }
+    }
+
+    protected abstract Feature compute(Feature previousFeature, Feature currentFeature);
+
+}
diff --git a/src/main/java/org/apache/sling/feature/inventoryservice/impl/BaseFeature2CurrentRuntimePrinter.java b/src/main/java/org/apache/sling/feature/inventoryservice/impl/BaseFeature2CurrentRuntimePrinter.java
new file mode 100644
index 0000000..90a40f4
--- /dev/null
+++ b/src/main/java/org/apache/sling/feature/inventoryservice/impl/BaseFeature2CurrentRuntimePrinter.java
@@ -0,0 +1,54 @@
+/*
+ * 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.feature.inventoryservice.impl;
+
+import static org.apache.felix.inventory.InventoryPrinter.FORMAT;
+import static org.apache.felix.inventory.InventoryPrinter.NAME;
+import static org.apache.felix.inventory.InventoryPrinter.TITLE;
+import static org.apache.sling.feature.diff.FeatureDiff.compareFeatures;
+
+import org.apache.sling.feature.ArtifactId;
+import org.apache.sling.feature.Feature;
+import org.apache.sling.feature.diff.DefaultDiffRequest;
+import org.osgi.service.component.annotations.Component;
+
+@Component(
+    property = {
+        NAME + "=r2f_base2runtime",
+        TITLE + "=Apache Sling Runtime Environment to Feature Model converter - Base 2 Runtime diff Generator",
+        FORMAT + "=JSON"
+    }
+)
+public class BaseFeature2CurrentRuntimePrinter extends AbstractRuntimeEnvironment2FeatureModelPrinter {
+
+    @Override
+    protected Feature compute(Feature previousFeature, Feature currentFeature) {
+        Feature featureDiff = compareFeatures(new DefaultDiffRequest()
+                                              .setPrevious(previousFeature)
+                                              .setCurrent(currentFeature)
+                                              .addIncludeComparator("artifacts")
+                                              .addIncludeComparator("configurations")
+                                              .setResultId(new ArtifactId(currentFeature.getId().getGroupId(),
+                                                           currentFeature.getId().getArtifactId(), 
+                                                           currentFeature.getId().getVersion(),
+                                                           currentFeature.getId().getClassifier() + "_updater",
+                                                           currentFeature.getId().getType())));
+
+        return featureDiff;
+    }
+
+}
diff --git a/src/main/java/org/apache/sling/feature/inventoryservice/impl/RuntimeEnvironment2FeatureModelPrinter.java b/src/main/java/org/apache/sling/feature/inventoryservice/impl/RuntimeEnvironment2FeatureModelPrinter.java
new file mode 100644
index 0000000..b86134b
--- /dev/null
+++ b/src/main/java/org/apache/sling/feature/inventoryservice/impl/RuntimeEnvironment2FeatureModelPrinter.java
@@ -0,0 +1,40 @@
+/*
+ * 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.feature.inventoryservice.impl;
+
+import static org.apache.felix.inventory.InventoryPrinter.FORMAT;
+import static org.apache.felix.inventory.InventoryPrinter.NAME;
+import static org.apache.felix.inventory.InventoryPrinter.TITLE;
+
+import org.apache.sling.feature.Feature;
+import org.osgi.service.component.annotations.Component;
+
+@Component(
+    property = {
+        NAME + "=r2f_runtime",
+        TITLE + "=Apache Sling Runtime Environment to Feature Model converter - Runtime Generator",
+        FORMAT + "=JSON"
+    }
+)
+public final class RuntimeEnvironment2FeatureModelPrinter extends AbstractRuntimeEnvironment2FeatureModelPrinter {
+
+    @Override
+    protected Feature compute(Feature previousFeature, Feature currentFeature) {
+        return currentFeature;
+    }
+
+}
