Index: lucene/contrib/benchmark/conf/indexing-flush-by-RAM-multithreaded.alg
===================================================================
--- lucene/contrib/benchmark/conf/indexing-flush-by-RAM-multithreaded.alg	(revision 1029979)
+++ lucene/contrib/benchmark/conf/indexing-flush-by-RAM-multithreaded.alg	(working copy)
@@ -17,6 +17,7 @@
 # -------------------------------------------------------------------------------------
 # multi val params are iterated by NewRound's, added to reports, start with column name.
 
+writer.version=LUCENE_40
 #merge.factor=mrg:10:100:10:100:10:100:10:100
 #max.buffered=buf:10:10:100:100:10:10:100:100
 ram.flush.mb=flush:32:40:48:56:32:40:48:56
Index: lucene/contrib/benchmark/conf/indexing-flush-by-RAM.alg
===================================================================
--- lucene/contrib/benchmark/conf/indexing-flush-by-RAM.alg	(revision 1029979)
+++ lucene/contrib/benchmark/conf/indexing-flush-by-RAM.alg	(working copy)
@@ -17,6 +17,7 @@
 # -------------------------------------------------------------------------------------
 # multi val params are iterated by NewRound's, added to reports, start with column name.
 
+writer.version=LUCENE_40
 #merge.factor=mrg:10:100:10:100:10:100:10:100
 #max.buffered=buf:10:10:100:100:10:10:100:100
 ram.flush.mb=flush:32:40:48:56:32:40:48:56
Index: lucene/contrib/benchmark/conf/indexing-multithreaded.alg
===================================================================
--- lucene/contrib/benchmark/conf/indexing-multithreaded.alg	(revision 1029979)
+++ lucene/contrib/benchmark/conf/indexing-multithreaded.alg	(working copy)
@@ -17,6 +17,7 @@
 # -------------------------------------------------------------------------------------
 # multi val params are iterated by NewRound's, added to reports, start with column name.
 
+writer.version=LUCENE_40
 merge.factor=mrg:10:100:10:100:10:100:10:100
 max.buffered=buf:10:10:100:100:10:10:100:100
 #ram.flush.mb=flush:32:40:48:56:32:40:48:56
Index: lucene/contrib/benchmark/conf/indexing.alg
===================================================================
--- lucene/contrib/benchmark/conf/indexing.alg	(revision 1029979)
+++ lucene/contrib/benchmark/conf/indexing.alg	(working copy)
@@ -17,6 +17,7 @@
 # -------------------------------------------------------------------------------------
 # multi val params are iterated by NewRound's, added to reports, start with column name.
 
+writer.version=LUCENE_40
 merge.factor=mrg:10:100:10:100:10:100:10:100
 max.buffered=buf:10:10:100:100:10:10:100:100
 #ram.flush.mb=flush:32:40:48:56:32:40:48:56
Index: lucene/contrib/benchmark/conf/standard.alg
===================================================================
--- lucene/contrib/benchmark/conf/standard.alg	(revision 1029979)
+++ lucene/contrib/benchmark/conf/standard.alg	(working copy)
@@ -17,6 +17,7 @@
 # -------------------------------------------------------------------------------------
 # multi val params are iterated by NewRound's, added to reports, start with column name.
 
+writer.version=LUCENE_40
 merge.factor=mrg:10:100:10:100:10:100:10:100
 max.buffered=buf:10:10:100:100:10:10:100:100
 compound=cmpnd:true:true:true:true:false:false:false:false
Index: lucene/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/CreateIndexTask.java
===================================================================
--- lucene/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/CreateIndexTask.java	(revision 1029979)
+++ lucene/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/CreateIndexTask.java	(working copy)
@@ -19,9 +19,12 @@
 
 import org.apache.lucene.benchmark.byTask.PerfRunData;
 import org.apache.lucene.benchmark.byTask.utils.Config;
+import org.apache.lucene.index.CorruptIndexException;
+import org.apache.lucene.index.IndexCommit;
 import org.apache.lucene.index.IndexDeletionPolicy;
 import org.apache.lucene.index.IndexWriter;
 import org.apache.lucene.index.IndexWriterConfig;
+import org.apache.lucene.index.LogMergePolicy;
 import org.apache.lucene.index.MergeScheduler;
 import org.apache.lucene.index.ConcurrentMergeScheduler;
 import org.apache.lucene.index.MergePolicy;
@@ -30,6 +33,7 @@
 import org.apache.lucene.index.NoMergeScheduler;
 import org.apache.lucene.index.IndexWriterConfig.OpenMode;
 import org.apache.lucene.index.codecs.CodecProvider;
+import org.apache.lucene.store.LockObtainFailedException;
 import org.apache.lucene.util.Version;
 
 import java.io.BufferedOutputStream;
@@ -70,21 +74,52 @@
     super(runData);
   }
 
-  public static void setIndexWriterConfig(IndexWriter writer, Config config) throws IOException {
+  
+  
+  public static IndexDeletionPolicy getIndexDeletionPolicy(Config config) {
+    String deletionPolicyName = config.get("deletion.policy", "org.apache.lucene.index.KeepOnlyLastCommitDeletionPolicy");
+    if (deletionPolicyName.equals(NoDeletionPolicy.class.getName())) {
+      return NoDeletionPolicy.INSTANCE;
+    } else {
+      try {
+        return Class.forName(deletionPolicyName).asSubclass(IndexDeletionPolicy.class).newInstance();
+      } catch (Exception e) {
+        throw new RuntimeException("unable to instantiate class '" + deletionPolicyName + "' as IndexDeletionPolicy", e);
+      }
+    }
+  }
+  
+  @Override
+  public int doLogic() throws IOException {
+    PerfRunData runData = getRunData();
+    Config config = runData.getConfig();
+    runData.setIndexWriter(configureWriter(config, runData, OpenMode.CREATE, null));
+    return 1;
+  }
+  
+  public static IndexWriterConfig createWriterConfig(Config config, PerfRunData runData, OpenMode mode, IndexCommit commit) {
+    Version version = Version.valueOf(config.get("writer.version", Version.LUCENE_40.toString()));
+    IndexWriterConfig iwConf = new IndexWriterConfig(version, runData.getAnalyzer());
+    iwConf.setOpenMode(mode);
+    IndexDeletionPolicy indexDeletionPolicy = getIndexDeletionPolicy(config);
+    iwConf.setIndexDeletionPolicy(indexDeletionPolicy);
+    if(commit != null)
+      iwConf.setIndexCommit(commit);
+    
 
     final String mergeScheduler = config.get("merge.scheduler",
                                              "org.apache.lucene.index.ConcurrentMergeScheduler");
     if (mergeScheduler.equals(NoMergeScheduler.class.getName())) {
-      writer.setMergeScheduler(NoMergeScheduler.INSTANCE);
+      iwConf.setMergeScheduler(NoMergeScheduler.INSTANCE);
     } else {
       try {
-        writer.setMergeScheduler(Class.forName(mergeScheduler).asSubclass(MergeScheduler.class).newInstance());
+        iwConf.setMergeScheduler(Class.forName(mergeScheduler).asSubclass(MergeScheduler.class).newInstance());
       } catch (Exception e) {
         throw new RuntimeException("unable to instantiate class '" + mergeScheduler + "' as merge scheduler", e);
       }
       
       if (mergeScheduler.equals("org.apache.lucene.index.ConcurrentMergeScheduler")) {
-        ConcurrentMergeScheduler cms = (ConcurrentMergeScheduler) writer.getMergeScheduler();
+        ConcurrentMergeScheduler cms = (ConcurrentMergeScheduler) iwConf.getMergeScheduler();
         int v = config.get("concurrent.merge.scheduler.max.thread.count", -1);
         if (v != -1) {
           cms.setMaxThreadCount(v);
@@ -105,28 +140,35 @@
                                           "org.apache.lucene.index.LogByteSizeMergePolicy");
     boolean isCompound = config.get("compound", true);
     if (mergePolicy.equals(NoMergePolicy.class.getName())) {
-      writer.setMergePolicy(isCompound ? NoMergePolicy.COMPOUND_FILES : NoMergePolicy.NO_COMPOUND_FILES);
+      iwConf.setMergePolicy(isCompound ? NoMergePolicy.COMPOUND_FILES : NoMergePolicy.NO_COMPOUND_FILES);
     } else {
       try {
-        writer.setMergePolicy(Class.forName(mergePolicy).asSubclass(MergePolicy.class).newInstance());
+        iwConf.setMergePolicy(Class.forName(mergePolicy).asSubclass(MergePolicy.class).newInstance());
       } catch (Exception e) {
         throw new RuntimeException("unable to instantiate class '" + mergePolicy + "' as merge policy", e);
       }
-      writer.setUseCompoundFile(isCompound);
-      writer.setMergeFactor(config.get("merge.factor",OpenIndexTask.DEFAULT_MERGE_PFACTOR));
+      if(iwConf.getMergePolicy() instanceof LogMergePolicy) {
+        LogMergePolicy logMergePolicy = (LogMergePolicy) iwConf.getMergePolicy();
+        logMergePolicy.setUseCompoundFile(isCompound);
+        logMergePolicy.setMergeFactor(config.get("merge.factor",OpenIndexTask.DEFAULT_MERGE_PFACTOR));
+      }
     }
-    writer.setMaxFieldLength(config.get("max.field.length",OpenIndexTask.DEFAULT_MAX_FIELD_LENGTH));
-
+    iwConf.setMaxFieldLength(config.get("max.field.length",OpenIndexTask.DEFAULT_MAX_FIELD_LENGTH));
     final double ramBuffer = config.get("ram.flush.mb",OpenIndexTask.DEFAULT_RAM_FLUSH_MB);
     final int maxBuffered = config.get("max.buffered",OpenIndexTask.DEFAULT_MAX_BUFFERED);
     if (maxBuffered == IndexWriterConfig.DISABLE_AUTO_FLUSH) {
-      writer.setRAMBufferSizeMB(ramBuffer);
-      writer.setMaxBufferedDocs(maxBuffered);
+      iwConf.setRAMBufferSizeMB(ramBuffer);
+      iwConf.setMaxBufferedDocs(maxBuffered);
     } else {
-      writer.setMaxBufferedDocs(maxBuffered);
-      writer.setRAMBufferSizeMB(ramBuffer);
+      iwConf.setMaxBufferedDocs(maxBuffered);
+      iwConf.setRAMBufferSizeMB(ramBuffer);
     }
     
+    return iwConf;
+  }
+  
+  public static IndexWriter configureWriter(Config config, PerfRunData runData, OpenMode mode, IndexCommit commit) throws CorruptIndexException, LockObtainFailedException, IOException {
+    IndexWriter writer = new IndexWriter(runData.getDirectory(), createWriterConfig(config, runData, mode, commit));
     String infoStreamVal = config.get("writer.info.stream", null);
     if (infoStreamVal != null) {
       if (infoStreamVal.equals("SystemOut")) {
@@ -138,32 +180,6 @@
         writer.setInfoStream(new PrintStream(new BufferedOutputStream(new FileOutputStream(f))));
       }
     }
+    return writer;
   }
-  
-  public static IndexDeletionPolicy getIndexDeletionPolicy(Config config) {
-    String deletionPolicyName = config.get("deletion.policy", "org.apache.lucene.index.KeepOnlyLastCommitDeletionPolicy");
-    if (deletionPolicyName.equals(NoDeletionPolicy.class.getName())) {
-      return NoDeletionPolicy.INSTANCE;
-    } else {
-      try {
-        return Class.forName(deletionPolicyName).asSubclass(IndexDeletionPolicy.class).newInstance();
-      } catch (Exception e) {
-        throw new RuntimeException("unable to instantiate class '" + deletionPolicyName + "' as IndexDeletionPolicy", e);
-      }
-    }
-  }
-  
-  @Override
-  public int doLogic() throws IOException {
-    PerfRunData runData = getRunData();
-    Config config = runData.getConfig();
-    
-    IndexWriter writer = new IndexWriter(runData.getDirectory(),
-        new IndexWriterConfig(Version.LUCENE_31, runData.getAnalyzer())
-            .setOpenMode(OpenMode.CREATE).setIndexDeletionPolicy(
-                getIndexDeletionPolicy(config)));
-    setIndexWriterConfig(writer, config);
-    runData.setIndexWriter(writer);
-    return 1;
-  }
 }
Index: lucene/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/OpenIndexTask.java
===================================================================
--- lucene/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/OpenIndexTask.java	(revision 1029979)
+++ lucene/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/OpenIndexTask.java	(working copy)
@@ -23,8 +23,7 @@
 import org.apache.lucene.index.IndexCommit;
 import org.apache.lucene.index.IndexWriterConfig;
 import org.apache.lucene.index.LogMergePolicy;
-import org.apache.lucene.util.Version;
-
+import org.apache.lucene.index.IndexWriterConfig.OpenMode;
 import java.io.IOException;
 
 
@@ -62,11 +61,7 @@
       ic = null;
     }
     
-    IndexWriter writer = new IndexWriter(runData.getDirectory(),
-        new IndexWriterConfig(Version.LUCENE_CURRENT, runData.getAnalyzer())
-            .setIndexDeletionPolicy(CreateIndexTask.getIndexDeletionPolicy(config))
-            .setIndexCommit(ic));
-    CreateIndexTask.setIndexWriterConfig(writer, config);
+    final IndexWriter writer = CreateIndexTask.configureWriter(config, runData, OpenMode.APPEND, ic);
     runData.setIndexWriter(writer);
     return 1;
   }
Index: lucene/contrib/benchmark/src/test/org/apache/lucene/benchmark/byTask/tasks/CreateIndexTaskTest.java
===================================================================
--- lucene/contrib/benchmark/src/test/org/apache/lucene/benchmark/byTask/tasks/CreateIndexTaskTest.java	(revision 1029979)
+++ lucene/contrib/benchmark/src/test/org/apache/lucene/benchmark/byTask/tasks/CreateIndexTaskTest.java	(working copy)
@@ -19,21 +19,29 @@
 
 import java.io.ByteArrayOutputStream;
 import java.io.File;
+import java.io.IOException;
 import java.io.PrintStream;
 import java.util.Properties;
 
 import org.apache.lucene.benchmark.BenchmarkTestCase;
 import org.apache.lucene.benchmark.byTask.PerfRunData;
 import org.apache.lucene.benchmark.byTask.utils.Config;
+import org.apache.lucene.index.CorruptIndexException;
+import org.apache.lucene.index.IndexWriter;
+import org.apache.lucene.index.IndexWriterConfig.OpenMode;
 import org.apache.lucene.index.NoDeletionPolicy;
 import org.apache.lucene.index.NoMergePolicy;
 import org.apache.lucene.index.NoMergeScheduler;
+import org.apache.lucene.store.LockObtainFailedException;
+import org.apache.lucene.util.Version;
 
+
 /** Tests the functionality of {@link CreateIndexTask}. */
 public class CreateIndexTaskTest extends BenchmarkTestCase {
 
   private PerfRunData createPerfRunData(String infoStreamValue) throws Exception {
     Properties props = new Properties();
+    props.setProperty("writer.version", Version.LUCENE_40.toString());
     props.setProperty("print.props", "false"); // don't print anything
     props.setProperty("directory", "RAMDirectory");
     if (infoStreamValue != null) {
@@ -102,5 +110,4 @@
     new CreateIndexTask(runData).doLogic();
     new CloseIndexTask(runData).doLogic();
   }
-  
 }
