diff --git a/pom.xml b/pom.xml
index 8b44535..3bbe8c9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -21,7 +21,7 @@
     </parent>
 
     <artifactId>org.apache.sling.feature.io</artifactId>
-    <version>1.2.3-SNAPSHOT</version>
+    <version>1.3.0-SNAPSHOT</version>
 
     <name>Apache Sling Feature IO Module</name>
     <description>
diff --git a/src/main/java/org/apache/sling/feature/io/artifacts/ArtifactManager.java b/src/main/java/org/apache/sling/feature/io/artifacts/ArtifactManager.java
index 0d91332..223ca78 100644
--- a/src/main/java/org/apache/sling/feature/io/artifacts/ArtifactManager.java
+++ b/src/main/java/org/apache/sling/feature/io/artifacts/ArtifactManager.java
@@ -24,6 +24,7 @@
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.OutputStream;
+import java.io.Reader;
 import java.net.MalformedURLException;
 import java.net.URISyntaxException;
 import java.net.URL;
@@ -34,8 +35,11 @@
 import java.util.ServiceLoader;
 
 import org.apache.sling.feature.ArtifactId;
+import org.apache.sling.feature.Feature;
+import org.apache.sling.feature.builder.FeatureProvider;
 import org.apache.sling.feature.io.artifacts.spi.ArtifactProvider;
 import org.apache.sling.feature.io.artifacts.spi.ArtifactProviderContext;
+import org.apache.sling.feature.io.json.FeatureJSONReader;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -44,7 +48,8 @@
  * It uses {@link ArtifactProvider}s to get artifacts. The
  * providers are loaded using the service loader.
  */
-public class ArtifactManager implements AutoCloseable {
+public class ArtifactManager
+        implements AutoCloseable, org.apache.sling.feature.builder.ArtifactProvider {
 
     private final Logger logger = LoggerFactory.getLogger(this.getClass());
 
@@ -106,11 +111,35 @@
     }
 
     @Override
-    public void close()
-    {
+    public void close() {
         shutdown();
     }
 
+    @Override
+    public URL provide(final ArtifactId id) {
+        try {
+            final ArtifactHandler handler = this.getArtifactHandler(id.toMvnUrl());
+            return handler.getLocalURL();
+        } catch (final IOException e) {
+            // ignore
+            return null;
+        }
+    }
+
+    public FeatureProvider toFeatureProvider() {
+        return (id -> {
+            try {
+                final ArtifactHandler handler = this.getArtifactHandler(id.toMvnUrl());
+                try (final Reader r = new InputStreamReader(handler.getLocalURL().openStream(), "UTF-8")) {
+                    final Feature f = FeatureJSONReader.read(r, handler.getUrl());
+                    return f;
+                }
+            } catch (final IOException e) {
+                // ignore
+                return null;
+            }
+        });
+    }
     private final URL getArtifactFromProviders(final String url, final String relativeCachePath) throws IOException {
         final int pos = url.indexOf(":");
         final String scheme = url.substring(0, pos);
@@ -127,9 +156,10 @@
 
     /**
      * Get the full artifact url and file for an artifact.
+     * 
      * @param url Artifact url or relative path.
      * @return Absolute url and file in the form of a handler.
-     * @throws IOException If something goes wrong.
+     * @throws IOException If something goes wrong or the artifact can't be found.
      */
     public ArtifactHandler getArtifactHandler(final String url) throws IOException {
         logger.debug("Trying to get artifact for {}", url);
diff --git a/src/main/java/org/apache/sling/feature/io/artifacts/package-info.java b/src/main/java/org/apache/sling/feature/io/artifacts/package-info.java
index 08e8d2c..f2229fb 100644
--- a/src/main/java/org/apache/sling/feature/io/artifacts/package-info.java
+++ b/src/main/java/org/apache/sling/feature/io/artifacts/package-info.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-@org.osgi.annotation.versioning.Version("1.0.0")
+@org.osgi.annotation.versioning.Version("1.1.0")
 package org.apache.sling.feature.io.artifacts;
 
 
