diff --git a/src/main/java/org/apache/sling/installer/factory/model/impl/FeatureModelInstallerPlugin.java b/src/main/java/org/apache/sling/installer/factory/model/impl/FeatureModelInstallerPlugin.java
index 3023feb..fb34de2 100644
--- a/src/main/java/org/apache/sling/installer/factory/model/impl/FeatureModelInstallerPlugin.java
+++ b/src/main/java/org/apache/sling/installer/factory/model/impl/FeatureModelInstallerPlugin.java
@@ -50,13 +50,9 @@
 import org.apache.sling.installer.api.tasks.TaskResource;
 import org.apache.sling.installer.api.tasks.TaskResourceGroup;
 import org.apache.sling.installer.api.tasks.TransformationResult;
-import org.apache.sling.jcr.api.SlingRepository;
-import org.apache.sling.jcr.repoinit.JcrRepoInitOpsProcessor;
-import org.apache.sling.repoinit.parser.RepoInitParser;
 import org.osgi.framework.BundleContext;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
-import org.osgi.service.component.annotations.Reference;
 import org.osgi.service.metatype.annotations.AttributeDefinition;
 import org.osgi.service.metatype.annotations.Designate;
 import org.osgi.service.metatype.annotations.ObjectClassDefinition;
@@ -98,14 +94,14 @@
     /** Logger. */
     private final Logger logger = LoggerFactory.getLogger(this.getClass());
 
-    @Reference
-    private SlingRepository repository;
+//    @Reference
+//    private SlingRepository repository;
 
-    @Reference
-    private JcrRepoInitOpsProcessor repoInitProcessor;
+//    @Reference
+//    private JcrRepoInitOpsProcessor repoInitProcessor;
 
-    @Reference
-    private RepoInitParser repoInitParser;
+//    @Reference
+//    private RepoInitParser repoInitParser;
 
     private final BundleContext bundleContext;
 
@@ -158,7 +154,7 @@
                 logger.info("Unable to read feature model from " + resource.getURL(), ioe);
             }
         }
-        if (resource.getType().equals(InstallableResource.TYPE_FILE) && resource.getURL().endsWith(".zip")) {
+        if (resource.getType().equals(InstallableResource.TYPE_FILE) && resource.getURL().endsWith(".far")) {
             try (final InputStream is = resource.getInputStream()) {
                 features.addAll(ArchiveReader.read(is, null));
             } catch (final IOException ioe) {
@@ -238,7 +234,7 @@
         if (rsrc.getState() == ResourceState.UNINSTALL ) {
             return new UninstallFeatureModelTask(group, bundleContext);
         }
-        final InstallContext ctx = new InstallContext(this.repository, this.repoInitProcessor, this.repoInitParser,
+        final InstallContext ctx = new InstallContext(//this.repository, this.repoInitProcessor, this.repoInitParser,
                 this.artifactManager, this.storageDirectory);
         return new InstallFeatureModelTask(group,
                 ctx, this.bundleContext);
diff --git a/src/main/java/org/apache/sling/installer/factory/model/impl/InstallContext.java b/src/main/java/org/apache/sling/installer/factory/model/impl/InstallContext.java
index 0af42fa..9f7f42f 100644
--- a/src/main/java/org/apache/sling/installer/factory/model/impl/InstallContext.java
+++ b/src/main/java/org/apache/sling/installer/factory/model/impl/InstallContext.java
@@ -21,29 +21,26 @@
 import java.io.File;
 
 import org.apache.sling.feature.io.artifacts.ArtifactManager;
-import org.apache.sling.jcr.api.SlingRepository;
-import org.apache.sling.jcr.repoinit.JcrRepoInitOpsProcessor;
-import org.apache.sling.repoinit.parser.RepoInitParser;
 
 public class InstallContext {
 
-    public final SlingRepository repository;
+//    public final SlingRepository repository;
 
-    public final JcrRepoInitOpsProcessor repoInitProcessor;
+//    public final JcrRepoInitOpsProcessor repoInitProcessor;
 
-    public final RepoInitParser repoInitParser;
+//    public final RepoInitParser repoInitParser;
 
     public final ArtifactManager artifactManager;
 
     public final File storageDirectory;
 
-    public InstallContext(final SlingRepository repository,
-            final JcrRepoInitOpsProcessor repoInitProcessor,
-            final RepoInitParser repoInitParser,
+    public InstallContext(//final SlingRepository repository,
+//            final JcrRepoInitOpsProcessor repoInitProcessor,
+//            final RepoInitParser repoInitParser,
             final ArtifactManager artifactManager, final File storageDirectory) {
-        this.repository = repository;
-        this.repoInitProcessor = repoInitProcessor;
-        this.repoInitParser = repoInitParser;
+//        this.repository = repository;
+//        this.repoInitProcessor = repoInitProcessor;
+//        this.repoInitParser = repoInitParser;
         this.artifactManager = artifactManager;
         this.storageDirectory = storageDirectory;
     }
diff --git a/src/main/java/org/apache/sling/installer/factory/model/impl/InstallFeatureModelTask.java b/src/main/java/org/apache/sling/installer/factory/model/impl/InstallFeatureModelTask.java
index 5e97d54..efce876 100644
--- a/src/main/java/org/apache/sling/installer/factory/model/impl/InstallFeatureModelTask.java
+++ b/src/main/java/org/apache/sling/installer/factory/model/impl/InstallFeatureModelTask.java
@@ -32,9 +32,6 @@
 import java.util.Hashtable;
 import java.util.List;
 
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-
 import org.apache.sling.feature.Artifact;
 import org.apache.sling.feature.ArtifactId;
 import org.apache.sling.feature.Configuration;
@@ -50,8 +47,6 @@
 import org.apache.sling.installer.api.tasks.ResourceState;
 import org.apache.sling.installer.api.tasks.TaskResource;
 import org.apache.sling.installer.api.tasks.TaskResourceGroup;
-import org.apache.sling.repoinit.parser.RepoInitParsingException;
-import org.apache.sling.repoinit.parser.operations.Operation;
 import org.osgi.framework.BundleContext;
 
 /**
@@ -85,7 +80,7 @@
                     this.getResourceGroup().setFinishState(ResourceState.IGNORED);
                 } else {
                     // repo init first
-                    if (result.repoinit != null) {
+/*                    if (result.repoinit != null) {
                         List<Operation> ops = null;
                         try (final Reader r = new StringReader(result.repoinit)) {
                             ops = this.installContext.repoInitParser.parse(r);
@@ -115,7 +110,7 @@
                                 session.logout();
                             }
                         }
-                    }
+                    }*/
                     if (!result.resources.isEmpty()) {
                         final OsgiInstaller installer = this.getService(OsgiInstaller.class);
                         if (installer != null) {
@@ -143,7 +138,7 @@
 
     public static final class Result {
         public final List<InstallableResource> resources = new ArrayList<>();
-        public String repoinit;
+//        public String repoinit;
     }
 
     private File getArtifactFile(final File baseDir, final ArtifactId id) {
@@ -210,7 +205,13 @@
 
         final Extension repoInit = feature.getExtensions().getByName(Extension.EXTENSION_NAME_REPOINIT);
         if (repoInit != null && repoInit.getType() == ExtensionType.TEXT) {
-            result.repoinit = repoInit.getText();
+//            result.repoinit = repoInit.getText();
+            final String configPid = "org.apache.sling.jcr.repoinit.RepositoryInitializer~".concat(feature.getId().toMvnName().replace('-', '_'));
+            final Dictionary<String, Object> props = new Hashtable<>();
+            props.put("scripts", repoInit.getText());
+
+            result.resources.add(new InstallableResource("/".concat(configPid).concat(".config"), null,
+                    props, null, InstallableResource.TYPE_CONFIG, null));
         }
         return result;
     }
