diff --git oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorProvider.java oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorProvider.java
index 5ec8a3a..4931a42 100644
--- oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorProvider.java
+++ oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorProvider.java
@@ -34,6 +34,7 @@ import org.apache.jackrabbit.oak.plugins.index.lucene.hybrid.IndexingQueue;
 import org.apache.jackrabbit.oak.plugins.index.lucene.hybrid.LocalIndexWriterFactory;
 import org.apache.jackrabbit.oak.plugins.index.lucene.hybrid.LuceneDocumentHolder;
 import org.apache.jackrabbit.oak.plugins.index.lucene.writer.DefaultIndexWriterFactory;
+import org.apache.jackrabbit.oak.plugins.index.lucene.writer.LuceneIndexWriterConfig;
 import org.apache.jackrabbit.oak.plugins.index.lucene.writer.LuceneIndexWriterFactory;
 import org.apache.jackrabbit.oak.spi.blob.GarbageCollectableBlobStore;
 import org.apache.jackrabbit.oak.spi.commit.CommitContext;
@@ -68,6 +69,7 @@ public class LuceneIndexEditorProvider implements IndexEditorProvider {
     private GarbageCollectableBlobStore blobStore;
     private IndexingQueue indexingQueue;
     private boolean nrtIndexingEnabled;
+    private LuceneIndexWriterConfig writerConfig = new LuceneIndexWriterConfig();
 
     /**
      * Number of indexed Lucene document that can be held in memory
@@ -179,7 +181,7 @@ public class LuceneIndexEditorProvider implements IndexEditorProvider {
             }
 
             if (writerFactory == null) {
-                writerFactory = new DefaultIndexWriterFactory(mountInfoProvider, newDirectoryFactory(blobDeletionCallback));
+                writerFactory = new DefaultIndexWriterFactory(mountInfoProvider, newDirectoryFactory(blobDeletionCallback), writerConfig);
             }
 
             LuceneIndexEditorContext context = new LuceneIndexEditorContext(root, definition, indexDefinition, callback,
@@ -227,6 +229,10 @@ public class LuceneIndexEditorProvider implements IndexEditorProvider {
         this.nrtIndexingEnabled = indexingQueue != null;
     }
 
+    public void setWriterConfig(LuceneIndexWriterConfig writerConfig) {
+        this.writerConfig = writerConfig;
+    }
+
     GarbageCollectableBlobStore getBlobStore() {
         return blobStore;
     }
diff --git oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/writer/DefaultIndexWriter.java oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/writer/DefaultIndexWriter.java
index 9e40192..772a9bd 100644
--- oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/writer/DefaultIndexWriter.java
+++ oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/writer/DefaultIndexWriter.java
@@ -59,6 +59,7 @@ class DefaultIndexWriter implements LuceneIndexWriter {
     private final String dirName;
     private final String suggestDirName;
     private final boolean reindex;
+    private final LuceneIndexWriterConfig writerConfig;
     private IndexWriter writer;
     private Directory directory;
     private long genAtStart = -1;
@@ -66,13 +67,14 @@ class DefaultIndexWriter implements LuceneIndexWriter {
 
     public DefaultIndexWriter(IndexDefinition definition, NodeBuilder definitionBuilder,
                               DirectoryFactory directoryFactory, String dirName, String suggestDirName,
-                              boolean reindex) {
+                              boolean reindex, LuceneIndexWriterConfig writerConfig) {
         this.definition = definition;
         this.definitionBuilder = definitionBuilder;
         this.directoryFactory = directoryFactory;
         this.dirName = dirName;
         this.suggestDirName = suggestDirName;
         this.reindex = reindex;
+        this.writerConfig = writerConfig;
     }
 
     @Override
@@ -142,7 +144,7 @@ class DefaultIndexWriter implements LuceneIndexWriter {
         if (writer == null) {
             final long start = PERF_LOGGER.start();
             directory = directoryFactory.newInstance(definition, definitionBuilder, dirName, reindex);
-            IndexWriterConfig config = getIndexWriterConfig(definition, directoryFactory.remoteDirectory());
+            IndexWriterConfig config = getIndexWriterConfig(definition, directoryFactory.remoteDirectory(), writerConfig);
             config.setMergePolicy(definition.getMergePolicy());
             writer = new IndexWriter(directory, config);
             genAtStart = getLatestGeneration(directory);
diff --git oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/writer/DefaultIndexWriterFactory.java oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/writer/DefaultIndexWriterFactory.java
index 1841829..a500553 100644
--- oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/writer/DefaultIndexWriterFactory.java
+++ oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/writer/DefaultIndexWriterFactory.java
@@ -35,16 +35,13 @@ import static com.google.common.base.Preconditions.checkNotNull;
 public class DefaultIndexWriterFactory implements LuceneIndexWriterFactory {
     private final MountInfoProvider mountInfoProvider;
     private final DirectoryFactory directoryFactory;
+    private final LuceneIndexWriterConfig writerConfig;
 
     public DefaultIndexWriterFactory(MountInfoProvider mountInfoProvider,
-        @Nullable IndexCopier indexCopier, @Nullable GarbageCollectableBlobStore blobStore) {
-        this(mountInfoProvider, new DefaultDirectoryFactory(indexCopier, blobStore));
-    }
-
-    public DefaultIndexWriterFactory(MountInfoProvider mountInfoProvider,
-                                     DirectoryFactory directoryFactory) {
+                                     DirectoryFactory directoryFactory, LuceneIndexWriterConfig writerConfig) {
         this.mountInfoProvider = checkNotNull(mountInfoProvider);
         this.directoryFactory = checkNotNull(directoryFactory);
+        this.writerConfig = checkNotNull(writerConfig);
     }
 
     @Override
@@ -52,10 +49,10 @@ public class DefaultIndexWriterFactory implements LuceneIndexWriterFactory {
                                          NodeBuilder definitionBuilder, boolean reindex) {
         if (mountInfoProvider.hasNonDefaultMounts()){
             return new MultiplexingIndexWriter(directoryFactory, mountInfoProvider, definition,
-                definitionBuilder, reindex);
+                definitionBuilder, reindex, writerConfig);
         }
         return new DefaultIndexWriter(definition, definitionBuilder, directoryFactory,
             LuceneIndexConstants.INDEX_DATA_CHILD_NAME,
-            LuceneIndexConstants.SUGGEST_DATA_CHILD_NAME, reindex);
+            LuceneIndexConstants.SUGGEST_DATA_CHILD_NAME, reindex, writerConfig);
     }
 }
diff --git oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/writer/IndexWriterUtils.java oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/writer/IndexWriterUtils.java
index 4b0ca8d..0f8cd24 100644
--- oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/writer/IndexWriterUtils.java
+++ oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/writer/IndexWriterUtils.java
@@ -37,7 +37,12 @@ import static org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstant
 
 public class IndexWriterUtils {
 
-    public static IndexWriterConfig getIndexWriterConfig(IndexDefinition definition, boolean remoteDir) {
+    public static IndexWriterConfig getIndexWriterConfig(IndexDefinition definition, boolean remoteDir){
+        return getIndexWriterConfig(definition, remoteDir, new LuceneIndexWriterConfig());
+    }
+
+    public static IndexWriterConfig getIndexWriterConfig(IndexDefinition definition, boolean remoteDir,
+                                                         LuceneIndexWriterConfig writerConfig) {
         // FIXME: Hack needed to make Lucene work in an OSGi environment
         Thread thread = Thread.currentThread();
         ClassLoader loader = thread.getContextClassLoader();
@@ -51,13 +56,13 @@ public class IndexWriterUtils {
             }
             Analyzer analyzer = new PerFieldAnalyzerWrapper(definitionAnalyzer, analyzers);
             IndexWriterConfig config = new IndexWriterConfig(VERSION, analyzer);
-//            config.setMergePolicy(definition.getMergePolicy());
             if (remoteDir) {
                 config.setMergeScheduler(new SerialMergeScheduler());
             }
             if (definition.getCodec() != null) {
                 config.setCodec(definition.getCodec());
             }
+            config.setRAMBufferSizeMB(writerConfig.getRamBufferSizeMB());
             return config;
         } finally {
             thread.setContextClassLoader(loader);
diff --git oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/writer/LuceneIndexWriterConfig.java oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/writer/LuceneIndexWriterConfig.java
new file mode 100644
index 0000000..e45efcf
--- /dev/null
+++ oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/writer/LuceneIndexWriterConfig.java
@@ -0,0 +1,38 @@
+/*
+ * 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.jackrabbit.oak.plugins.index.lucene.writer;
+
+import org.apache.lucene.index.IndexWriterConfig;
+
+public class LuceneIndexWriterConfig {
+    private final double ramBufferSizeMB;
+
+    public LuceneIndexWriterConfig() {
+        this(IndexWriterConfig.DEFAULT_RAM_BUFFER_SIZE_MB);
+    }
+
+    public LuceneIndexWriterConfig(double ramBufferSizeMB) {
+        this.ramBufferSizeMB = ramBufferSizeMB;
+    }
+
+    public double getRamBufferSizeMB() {
+        return ramBufferSizeMB;
+    }
+}
diff --git oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/writer/MultiplexingIndexWriter.java oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/writer/MultiplexingIndexWriter.java
index 6bb3937..d293aad 100644
--- oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/writer/MultiplexingIndexWriter.java
+++ oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/writer/MultiplexingIndexWriter.java
@@ -37,17 +37,19 @@ class MultiplexingIndexWriter implements LuceneIndexWriter {
     private final IndexDefinition definition;
     private final NodeBuilder definitionBuilder;
     private final boolean reindex;
+    private final LuceneIndexWriterConfig writerConfig;
 
     private final Map<Mount, DefaultIndexWriter> writers = Maps.newHashMap();
 
     public MultiplexingIndexWriter(DirectoryFactory directoryFactory, MountInfoProvider mountInfoProvider,
                                    IndexDefinition definition, NodeBuilder definitionBuilder,
-                                   boolean reindex) {
+                                   boolean reindex, LuceneIndexWriterConfig writerConfig) {
         this.mountInfoProvider = mountInfoProvider;
         this.definition = definition;
         this.definitionBuilder = definitionBuilder;
         this.reindex = reindex;
         this.directoryFactory = directoryFactory;
+        this.writerConfig = writerConfig;
     }
 
     @Override
@@ -97,6 +99,6 @@ class MultiplexingIndexWriter implements LuceneIndexWriter {
         String dirName = MultiplexersLucene.getIndexDirName(m);
         String suggestDirName = MultiplexersLucene.getSuggestDirName(m);
         return new DefaultIndexWriter(definition, definitionBuilder, directoryFactory, dirName,
-            suggestDirName, reindex);
+            suggestDirName, reindex, writerConfig);
     }
 }
diff --git oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/AggregateTest.java oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/AggregateTest.java
index efce6c6..f14b3f6 100644
--- oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/AggregateTest.java
+++ oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/AggregateTest.java
@@ -39,9 +39,12 @@ import org.apache.jackrabbit.oak.commons.PathUtils;
 import org.apache.jackrabbit.oak.plugins.index.lucene.Aggregate.NodeInclude;
 import org.apache.jackrabbit.oak.plugins.index.lucene.Aggregate.NodeIncludeResult;
 import org.apache.jackrabbit.oak.plugins.index.lucene.Aggregate.PropertyIncludeResult;
+import org.apache.jackrabbit.oak.plugins.index.lucene.directory.DefaultDirectoryFactory;
+import org.apache.jackrabbit.oak.plugins.index.lucene.directory.DirectoryFactory;
 import org.apache.jackrabbit.oak.plugins.index.lucene.util.IndexDefinitionBuilder;
 import org.apache.jackrabbit.oak.plugins.index.lucene.writer.DefaultIndexWriterFactory;
 import org.apache.jackrabbit.oak.plugins.index.lucene.writer.LuceneIndexWriter;
+import org.apache.jackrabbit.oak.plugins.index.lucene.writer.LuceneIndexWriterConfig;
 import org.apache.jackrabbit.oak.spi.mount.Mounts;
 import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
@@ -420,7 +423,9 @@ public class AggregateTest {
         LuceneDocumentMaker maker = new LuceneDocumentMaker(defn, defn.getApplicableIndexingRule("nt:folder"), "/bar");
         Document doc = maker.makeDocument(nb.getNodeState());
 
-        DefaultIndexWriterFactory writerFactory = new DefaultIndexWriterFactory(Mounts.defaultMountInfoProvider(), null, null);
+        DirectoryFactory directoryFactory = new DefaultDirectoryFactory(null, null);
+        DefaultIndexWriterFactory writerFactory = new DefaultIndexWriterFactory(Mounts.defaultMountInfoProvider(),
+                directoryFactory, new LuceneIndexWriterConfig());
         LuceneIndexWriter writer = writerFactory.newInstance(defn, EMPTY_NODE.builder(), false);
         writer.updateDocument("/bar", doc);
         writer.close(100);
diff --git oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/MultiplexingLucenePropertyIndexTest.java oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/MultiplexingLucenePropertyIndexTest.java
index 97a1ea1..e82193b 100644
--- oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/MultiplexingLucenePropertyIndexTest.java
+++ oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/MultiplexingLucenePropertyIndexTest.java
@@ -38,11 +38,14 @@ import org.apache.jackrabbit.oak.api.ContentRepository;
 import org.apache.jackrabbit.oak.api.Result;
 import org.apache.jackrabbit.oak.api.Tree;
 import org.apache.jackrabbit.oak.commons.PathUtils;
+import org.apache.jackrabbit.oak.plugins.index.lucene.directory.DefaultDirectoryFactory;
+import org.apache.jackrabbit.oak.plugins.index.lucene.directory.DirectoryFactory;
 import org.apache.jackrabbit.oak.plugins.index.lucene.reader.DefaultIndexReaderFactory;
 import org.apache.jackrabbit.oak.plugins.index.lucene.reader.LuceneIndexReader;
 import org.apache.jackrabbit.oak.plugins.index.lucene.reader.LuceneIndexReaderFactory;
 import org.apache.jackrabbit.oak.plugins.index.lucene.writer.DefaultIndexWriterFactory;
 import org.apache.jackrabbit.oak.plugins.index.lucene.writer.LuceneIndexWriter;
+import org.apache.jackrabbit.oak.plugins.index.lucene.writer.LuceneIndexWriterConfig;
 import org.apache.jackrabbit.oak.plugins.index.lucene.writer.LuceneIndexWriterFactory;
 import org.apache.jackrabbit.oak.plugins.index.lucene.writer.MultiplexersLucene;
 import org.apache.jackrabbit.oak.plugins.index.nodetype.NodeTypeIndexProvider;
@@ -129,7 +132,8 @@ public class MultiplexingLucenePropertyIndexTest extends AbstractQueryTest {
         IndexDefinition defn = new IndexDefinition(initialContent, defnBuilder.getNodeState(), "/foo");
 
         //1. Have 2 reader created by writes in 2 diff mounts
-        LuceneIndexWriterFactory factory = new DefaultIndexWriterFactory(mip, null, null);
+        DirectoryFactory directoryFactory = new DefaultDirectoryFactory(null, null);
+        LuceneIndexWriterFactory factory = new DefaultIndexWriterFactory(mip, directoryFactory, new LuceneIndexWriterConfig());
         LuceneIndexWriter writer = factory.newInstance(defn, builder, true);
 
         writer.updateDocument("/content/en", newDoc("/content/en"));
diff --git oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/reader/DefaultIndexReaderFactoryTest.java oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/reader/DefaultIndexReaderFactoryTest.java
index f9da2da..ab54f77 100644
--- oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/reader/DefaultIndexReaderFactoryTest.java
+++ oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/reader/DefaultIndexReaderFactoryTest.java
@@ -29,8 +29,11 @@ import org.apache.jackrabbit.oak.plugins.blob.datastore.DataStoreUtils;
 import org.apache.jackrabbit.oak.plugins.index.lucene.FieldNames;
 import org.apache.jackrabbit.oak.plugins.index.lucene.IndexDefinition;
 import org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants;
+import org.apache.jackrabbit.oak.plugins.index.lucene.directory.DefaultDirectoryFactory;
+import org.apache.jackrabbit.oak.plugins.index.lucene.directory.DirectoryFactory;
 import org.apache.jackrabbit.oak.plugins.index.lucene.writer.DefaultIndexWriterFactory;
 import org.apache.jackrabbit.oak.plugins.index.lucene.writer.LuceneIndexWriter;
+import org.apache.jackrabbit.oak.plugins.index.lucene.writer.LuceneIndexWriterConfig;
 import org.apache.jackrabbit.oak.plugins.index.lucene.writer.LuceneIndexWriterFactory;
 import org.apache.jackrabbit.oak.spi.mount.MountInfoProvider;
 import org.apache.jackrabbit.oak.spi.mount.Mounts;
@@ -57,6 +60,7 @@ public class DefaultIndexReaderFactoryTest {
     private IndexDefinition defn = new IndexDefinition(root, builder.getNodeState(), "/foo");
     private MountInfoProvider mip = Mounts.newBuilder()
             .mount("foo", "/libs", "/apps").build();
+    private LuceneIndexWriterConfig writerConfig = new LuceneIndexWriterConfig();
 
     @Test
     public void emptyDir() throws Exception{
@@ -67,7 +71,7 @@ public class DefaultIndexReaderFactoryTest {
 
     @Test
     public void indexDir() throws Exception{
-        LuceneIndexWriterFactory factory = new DefaultIndexWriterFactory(mip, null, null);
+        LuceneIndexWriterFactory factory = newDirectoryFactory();
         LuceneIndexWriter writer = factory.newInstance(defn, builder, true);
 
         writer.updateDocument("/content/en", newDoc("/content/en"));
@@ -104,7 +108,8 @@ public class DefaultIndexReaderFactoryTest {
             .createCachingFDS(folder.newFolder().getAbsolutePath(),
                 folder.newFolder().getAbsolutePath());
 
-        LuceneIndexWriterFactory factory = new DefaultIndexWriterFactory(mip, null, new DataStoreBlobStore(ds));
+        DirectoryFactory directoryFactory = new DefaultDirectoryFactory(null, new DataStoreBlobStore(ds));
+        LuceneIndexWriterFactory factory = new DefaultIndexWriterFactory(mip, directoryFactory, writerConfig);
         LuceneIndexWriter writer = factory.newInstance(defn, builder, true);
 
         writer.updateDocument("/content/en", newDoc("/content/en"));
@@ -136,7 +141,7 @@ public class DefaultIndexReaderFactoryTest {
 
     @Test
     public void suggesterDir() throws Exception{
-        LuceneIndexWriterFactory factory = new DefaultIndexWriterFactory(mip, null, null);
+        LuceneIndexWriterFactory factory = newDirectoryFactory();
         enabledSuggestorForSomeProp();
         defn = new IndexDefinition(root, builder.getNodeState(), "/foo");
         LuceneIndexWriter writer = factory.newInstance(defn, builder, true);
@@ -156,7 +161,7 @@ public class DefaultIndexReaderFactoryTest {
 
     @Test
     public void multipleReaders() throws Exception{
-        LuceneIndexWriterFactory factory = new DefaultIndexWriterFactory(mip, null, null);
+        LuceneIndexWriterFactory factory = newDirectoryFactory();
         LuceneIndexWriter writer = factory.newInstance(defn, builder, true);
 
         writer.updateDocument("/content/en", newDoc("/content/en"));
@@ -170,7 +175,7 @@ public class DefaultIndexReaderFactoryTest {
 
     @Test
     public void multipleReaders_SingleSuggester() throws Exception{
-        LuceneIndexWriterFactory factory = new DefaultIndexWriterFactory(mip, null, null);
+        LuceneIndexWriterFactory factory = newDirectoryFactory();
         enabledSuggestorForSomeProp();
         defn = new IndexDefinition(root, builder.getNodeState(), "/foo");
         LuceneIndexWriter writer = factory.newInstance(defn, builder, true);
@@ -199,4 +204,9 @@ public class DefaultIndexReaderFactoryTest {
         prop.setProperty("name", "foo");
         prop.setProperty(LuceneIndexConstants.PROP_USE_IN_SUGGEST, true);
     }
+
+    private LuceneIndexWriterFactory newDirectoryFactory(){
+        DirectoryFactory directoryFactory = new DefaultDirectoryFactory(null, null);
+        return new DefaultIndexWriterFactory(mip, directoryFactory, writerConfig);
+    }
 }
diff --git oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/writer/DefaultIndexWriterTest.java oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/writer/DefaultIndexWriterTest.java
index a05d9a4..d25b7d6 100644
--- oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/writer/DefaultIndexWriterTest.java
+++ oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/writer/DefaultIndexWriterTest.java
@@ -40,6 +40,7 @@ import static org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstant
 import static org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.EMPTY_NODE;
 import static org.apache.jackrabbit.oak.InitialContent.INITIAL_CONTENT;
 import static org.hamcrest.Matchers.instanceOf;
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
@@ -53,27 +54,26 @@ public class DefaultIndexWriterTest {
 
     private NodeBuilder builder = EMPTY_NODE.builder();
 
+    private LuceneIndexWriterConfig writerConfig = new LuceneIndexWriterConfig();
+
     @Test
     public void lazyInit() throws Exception {
         IndexDefinition defn = new IndexDefinition(root, builder.getNodeState(), "/foo");
-        DefaultIndexWriter writer = new DefaultIndexWriter(defn, builder, null,
-                INDEX_DATA_CHILD_NAME, SUGGEST_DATA_CHILD_NAME, false);
+        DefaultIndexWriter writer = createWriter(defn, false);
         assertFalse(writer.close(0));
     }
 
     @Test
     public void writeInitializedUponReindex() throws Exception {
         IndexDefinition defn = new IndexDefinition(root, builder.getNodeState(), "/foo");
-        DefaultIndexWriter writer = new DefaultIndexWriter(defn, builder,
-                new DefaultDirectoryFactory(null, null), INDEX_DATA_CHILD_NAME, SUGGEST_DATA_CHILD_NAME, true);
+        DefaultIndexWriter writer = createWriter(defn, true);
         assertTrue(writer.close(0));
     }
 
     @Test
     public void indexUpdated() throws Exception {
         IndexDefinition defn = new IndexDefinition(root, builder.getNodeState(), "/foo");
-        DefaultIndexWriter writer = new DefaultIndexWriter(defn, builder,
-                new DefaultDirectoryFactory(null, null), INDEX_DATA_CHILD_NAME, SUGGEST_DATA_CHILD_NAME, false);
+        DefaultIndexWriter writer = createWriter(defn, false);
 
         Document document = new Document();
         document.add(newPathField("/a/b"));
@@ -86,8 +86,7 @@ public class DefaultIndexWriterTest {
     @Test
     public void indexWriterConfig_Scheduler_Remote() throws Exception{
         IndexDefinition defn = new IndexDefinition(root, builder.getNodeState(), "/foo");
-        DefaultIndexWriter writer = new DefaultIndexWriter(defn, builder,
-                new DefaultDirectoryFactory(null, null), INDEX_DATA_CHILD_NAME, SUGGEST_DATA_CHILD_NAME, true);
+        DefaultIndexWriter writer = createWriter(defn, true);
 
         IndexWriter w = writer.getWriter();
         assertThat(w.getConfig().getMergeScheduler(), instanceOf(SerialMergeScheduler.class));
@@ -98,9 +97,28 @@ public class DefaultIndexWriterTest {
         FSDirectoryFactory fsdir = new FSDirectoryFactory(folder.getRoot());
         IndexDefinition defn = new IndexDefinition(root, builder.getNodeState(), "/foo");
         DefaultIndexWriter writer = new DefaultIndexWriter(defn, builder,
-                fsdir, INDEX_DATA_CHILD_NAME, SUGGEST_DATA_CHILD_NAME, true);
+                fsdir, INDEX_DATA_CHILD_NAME, SUGGEST_DATA_CHILD_NAME, true, writerConfig);
 
         IndexWriter w = writer.getWriter();
         assertThat(w.getConfig().getMergeScheduler(), instanceOf(ConcurrentMergeScheduler.class));
     }
+
+    @Test
+    public void configRAMSize() throws Exception{
+        writerConfig = new LuceneIndexWriterConfig(42);
+
+        IndexDefinition defn = new IndexDefinition(root, builder.getNodeState(), "/foo");
+        DefaultIndexWriter writer = createWriter(defn, true);
+
+        IndexWriter w = writer.getWriter();
+        assertEquals(w.getConfig().getRAMBufferSizeMB(), 42, 0);
+    }
+
+    private DefaultIndexWriter createWriter(IndexDefinition defn, boolean reindex) {
+        return new DefaultIndexWriter(defn, builder,
+                new DefaultDirectoryFactory(null, null), INDEX_DATA_CHILD_NAME,
+                SUGGEST_DATA_CHILD_NAME, reindex, writerConfig);
+    }
+
+
 }
\ No newline at end of file
diff --git oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/writer/MultiplexingIndexWriterTest.java oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/writer/MultiplexingIndexWriterTest.java
index 4377a0b..930daed 100644
--- oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/writer/MultiplexingIndexWriterTest.java
+++ oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/writer/MultiplexingIndexWriterTest.java
@@ -29,6 +29,8 @@ import org.apache.jackrabbit.oak.plugins.blob.datastore.CachingFileDataStore;
 import org.apache.jackrabbit.oak.plugins.blob.datastore.DataStoreBlobStore;
 import org.apache.jackrabbit.oak.plugins.blob.datastore.DataStoreUtils;
 import org.apache.jackrabbit.oak.plugins.index.lucene.IndexDefinition;
+import org.apache.jackrabbit.oak.plugins.index.lucene.directory.DefaultDirectoryFactory;
+import org.apache.jackrabbit.oak.plugins.index.lucene.directory.DirectoryFactory;
 import org.apache.jackrabbit.oak.plugins.index.lucene.directory.OakDirectory;
 import org.apache.jackrabbit.oak.spi.mount.Mount;
 import org.apache.jackrabbit.oak.spi.mount.MountInfoProvider;
@@ -65,6 +67,7 @@ public class MultiplexingIndexWriterTest {
 
     private Mount fooMount;
     private Mount defaultMount;
+    private LuceneIndexWriterConfig writerConfig = new LuceneIndexWriterConfig();
 
     @Before
     public void setUp(){
@@ -73,15 +76,14 @@ public class MultiplexingIndexWriterTest {
 
     @Test
     public void defaultWriterWithNoMounts() throws Exception{
-        LuceneIndexWriterFactory factory = new DefaultIndexWriterFactory(Mounts.defaultMountInfoProvider(), null,
-            null);
+        LuceneIndexWriterFactory factory = newDirectoryFactory(Mounts.defaultMountInfoProvider());
         LuceneIndexWriter writer = factory.newInstance(defn, builder, true);
         assertThat(writer, instanceOf(DefaultIndexWriter.class));
     }
 
     @Test
     public void closeWithoutChange() throws Exception{
-        LuceneIndexWriterFactory factory = new DefaultIndexWriterFactory(mip, null, null);
+        LuceneIndexWriterFactory factory = newDirectoryFactory();
         LuceneIndexWriter writer = factory.newInstance(defn, builder, true);
         assertFalse(writer.close(0));
         assertEquals(0, Iterables.size(getIndexDirNodes()));
@@ -89,7 +91,7 @@ public class MultiplexingIndexWriterTest {
 
     @Test
     public void writesInDefaultMount() throws Exception{
-        LuceneIndexWriterFactory factory = new DefaultIndexWriterFactory(mip, null, null);
+        LuceneIndexWriterFactory factory = newDirectoryFactory();
         LuceneIndexWriter writer = factory.newInstance(defn, builder, true);
 
         //1. Add entry in foo mount
@@ -115,7 +117,8 @@ public class MultiplexingIndexWriterTest {
             .createCachingFDS(folder.newFolder().getAbsolutePath(),
                 folder.newFolder().getAbsolutePath());
 
-        LuceneIndexWriterFactory factory = new DefaultIndexWriterFactory(mip, null, new DataStoreBlobStore(ds));
+        DirectoryFactory directoryFactory = new DefaultDirectoryFactory(null, new DataStoreBlobStore(ds));
+        LuceneIndexWriterFactory factory = new DefaultIndexWriterFactory(mip, directoryFactory, writerConfig);
         LuceneIndexWriter writer = factory.newInstance(defn, builder, true);
 
         //1. Add entry in foo mount
@@ -137,7 +140,7 @@ public class MultiplexingIndexWriterTest {
 
     @Test
     public void deletes() throws Exception{
-        LuceneIndexWriterFactory factory = new DefaultIndexWriterFactory(mip, null, null);
+        LuceneIndexWriterFactory factory = newDirectoryFactory();
         LuceneIndexWriter writer = factory.newInstance(defn, builder, true);
 
         writer.updateDocument("/libs/config", newDoc("/libs/config"));
@@ -169,7 +172,7 @@ public class MultiplexingIndexWriterTest {
         mip = Mounts.newBuilder()
                 .mount("foo", "/content/remote").build();
         initializeMounts();
-        LuceneIndexWriterFactory factory = new DefaultIndexWriterFactory(mip, null, null);
+        LuceneIndexWriterFactory factory = newDirectoryFactory();
         LuceneIndexWriter writer = factory.newInstance(defn, builder, true);
 
         writer.updateDocument("/content/remote/a", newDoc("/content/remote/a"));
@@ -215,4 +218,13 @@ public class MultiplexingIndexWriterTest {
         return MultiplexersLucene.getIndexDirName(m);
     }
 
+    private LuceneIndexWriterFactory newDirectoryFactory(){
+        return newDirectoryFactory(mip);
+    }
+
+    private LuceneIndexWriterFactory newDirectoryFactory(MountInfoProvider mountInfoProvider){
+        DirectoryFactory directoryFactory = new DefaultDirectoryFactory(null, null);
+        return new DefaultIndexWriterFactory(mountInfoProvider, directoryFactory, writerConfig);
+    }
+
 }
diff --git oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/LuceneIndexerProvider.java oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/LuceneIndexerProvider.java
index 891258f..5f45933 100644
--- oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/LuceneIndexerProvider.java
+++ oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/LuceneIndexerProvider.java
@@ -34,6 +34,7 @@ import org.apache.jackrabbit.oak.plugins.index.lucene.directory.DirectoryFactory
 import org.apache.jackrabbit.oak.plugins.index.lucene.directory.FSDirectoryFactory;
 import org.apache.jackrabbit.oak.plugins.index.lucene.writer.DefaultIndexWriterFactory;
 import org.apache.jackrabbit.oak.plugins.index.lucene.writer.LuceneIndexWriter;
+import org.apache.jackrabbit.oak.plugins.index.lucene.writer.LuceneIndexWriterConfig;
 import org.apache.jackrabbit.oak.plugins.index.lucene.writer.LuceneIndexWriterFactory;
 import org.apache.jackrabbit.oak.plugins.index.progress.IndexingProgressReporter;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
@@ -52,7 +53,7 @@ public class LuceneIndexerProvider implements NodeStateIndexerProvider {
     public LuceneIndexerProvider(IndexHelper indexHelper, IndexerSupport indexerSupport) throws IOException {
         this.indexHelper = indexHelper;
         this.dirFactory = new FSDirectoryFactory(indexerSupport.getLocalIndexDir());
-        this.indexWriterFactory = new DefaultIndexWriterFactory(indexHelper.getMountInfoProvider(), dirFactory);
+        this.indexWriterFactory = new DefaultIndexWriterFactory(indexHelper.getMountInfoProvider(), dirFactory, new LuceneIndexWriterConfig());
     }
 
     @Override
