diff --git a/cassandra/pom.xml b/cassandra/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d57698a742fff93034a3abdb40376eb016f92325
--- /dev/null
+++ b/cassandra/pom.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+     <groupId>org.apache.ycsb</groupId>
+     <artifactId>root</artifactId>
+     <version>0.1.3</version>
+  </parent>
+  
+  <artifactId>cassandra-binding</artifactId>
+  <name>Cassandra DB Binding</name>
+  <packaging>jar</packaging>
+
+  <dependencies>
+     <dependency>
+       <groupId>org.apache.cassandra</groupId>
+       <artifactId>cassandra-all</artifactId>
+       <version>${cassandra.version}</version>
+     </dependency>
+     <dependency>
+       <groupId>org.apache.ycsb</groupId>
+       <artifactId>core</artifactId>
+       <version>${project.version}</version>
+     </dependency>
+  </dependencies>
+  
+  <build>
+    <plugins>
+     <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-assembly-plugin</artifactId>
+        <version>${maven.assembly.version}</version>
+        <configuration>
+          <descriptorRefs>
+            <descriptorRef>jar-with-dependencies</descriptorRef>
+          </descriptorRefs>
+          <appendAssemblyId>false</appendAssemblyId>
+        </configuration>
+        <executions>
+          <execution>
+            <phase>package</phase>
+            <goals>
+              <goal>single</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+	
+</project>
diff --git a/db/cassandra-1.0.6/src/com/yahoo/ycsb/db/CassandraClient10.java b/cassandra/src/main/java/com/yahoo/ycsb/db/CassandraClient10.java
similarity index 100%
rename from db/cassandra-1.0.6/src/com/yahoo/ycsb/db/CassandraClient10.java
rename to cassandra/src/main/java/com/yahoo/ycsb/db/CassandraClient10.java
diff --git a/core/pom.xml b/core/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d9a7145c357107e86318a5053cfd15fcba21a575
--- /dev/null
+++ b/core/pom.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.apache.ycsb</groupId>
+    <artifactId>root</artifactId>
+    <version>0.1.3</version>
+  </parent>
+  
+  <artifactId>core</artifactId>
+  <name>Core YCSB</name>
+  <packaging>jar</packaging>
+
+  <properties>
+     <jackson.api.version>1.9.4</jackson.api.version>
+  </properties>
+
+  <dependencies>	
+    <dependency>
+      <groupId>org.codehaus.jackson</groupId>
+      <artifactId>jackson-mapper-asl</artifactId>
+      <version>${jackson.api.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.codehaus.jackson</groupId>
+      <artifactId>jackson-core-asl</artifactId>
+      <version>${jackson.api.version}</version>
+    </dependency>
+  </dependencies>	
+
+</project>
diff --git a/src/com/yahoo/ycsb/BasicDB.java b/core/src/main/java/com/yahoo/ycsb/BasicDB.java
similarity index 100%
rename from src/com/yahoo/ycsb/BasicDB.java
rename to core/src/main/java/com/yahoo/ycsb/BasicDB.java
diff --git a/src/com/yahoo/ycsb/ByteArrayByteIterator.java b/core/src/main/java/com/yahoo/ycsb/ByteArrayByteIterator.java
similarity index 100%
rename from src/com/yahoo/ycsb/ByteArrayByteIterator.java
rename to core/src/main/java/com/yahoo/ycsb/ByteArrayByteIterator.java
diff --git a/src/com/yahoo/ycsb/ByteIterator.java b/core/src/main/java/com/yahoo/ycsb/ByteIterator.java
similarity index 100%
rename from src/com/yahoo/ycsb/ByteIterator.java
rename to core/src/main/java/com/yahoo/ycsb/ByteIterator.java
diff --git a/src/com/yahoo/ycsb/Client.java b/core/src/main/java/com/yahoo/ycsb/Client.java
similarity index 100%
rename from src/com/yahoo/ycsb/Client.java
rename to core/src/main/java/com/yahoo/ycsb/Client.java
diff --git a/src/com/yahoo/ycsb/CommandLine.java b/core/src/main/java/com/yahoo/ycsb/CommandLine.java
similarity index 100%
rename from src/com/yahoo/ycsb/CommandLine.java
rename to core/src/main/java/com/yahoo/ycsb/CommandLine.java
diff --git a/src/com/yahoo/ycsb/DB.java b/core/src/main/java/com/yahoo/ycsb/DB.java
similarity index 100%
rename from src/com/yahoo/ycsb/DB.java
rename to core/src/main/java/com/yahoo/ycsb/DB.java
diff --git a/src/com/yahoo/ycsb/DBException.java b/core/src/main/java/com/yahoo/ycsb/DBException.java
similarity index 100%
rename from src/com/yahoo/ycsb/DBException.java
rename to core/src/main/java/com/yahoo/ycsb/DBException.java
diff --git a/src/com/yahoo/ycsb/DBFactory.java b/core/src/main/java/com/yahoo/ycsb/DBFactory.java
similarity index 100%
rename from src/com/yahoo/ycsb/DBFactory.java
rename to core/src/main/java/com/yahoo/ycsb/DBFactory.java
diff --git a/src/com/yahoo/ycsb/DBWrapper.java b/core/src/main/java/com/yahoo/ycsb/DBWrapper.java
similarity index 100%
rename from src/com/yahoo/ycsb/DBWrapper.java
rename to core/src/main/java/com/yahoo/ycsb/DBWrapper.java
diff --git a/src/com/yahoo/ycsb/InputStreamByteIterator.java b/core/src/main/java/com/yahoo/ycsb/InputStreamByteIterator.java
similarity index 100%
rename from src/com/yahoo/ycsb/InputStreamByteIterator.java
rename to core/src/main/java/com/yahoo/ycsb/InputStreamByteIterator.java
diff --git a/src/com/yahoo/ycsb/RandomByteIterator.java b/core/src/main/java/com/yahoo/ycsb/RandomByteIterator.java
similarity index 100%
rename from src/com/yahoo/ycsb/RandomByteIterator.java
rename to core/src/main/java/com/yahoo/ycsb/RandomByteIterator.java
diff --git a/src/com/yahoo/ycsb/StringByteIterator.java b/core/src/main/java/com/yahoo/ycsb/StringByteIterator.java
similarity index 100%
rename from src/com/yahoo/ycsb/StringByteIterator.java
rename to core/src/main/java/com/yahoo/ycsb/StringByteIterator.java
diff --git a/src/com/yahoo/ycsb/TerminatorThread.java b/core/src/main/java/com/yahoo/ycsb/TerminatorThread.java
similarity index 100%
rename from src/com/yahoo/ycsb/TerminatorThread.java
rename to core/src/main/java/com/yahoo/ycsb/TerminatorThread.java
diff --git a/src/com/yahoo/ycsb/UnknownDBException.java b/core/src/main/java/com/yahoo/ycsb/UnknownDBException.java
similarity index 100%
rename from src/com/yahoo/ycsb/UnknownDBException.java
rename to core/src/main/java/com/yahoo/ycsb/UnknownDBException.java
diff --git a/src/com/yahoo/ycsb/Utils.java b/core/src/main/java/com/yahoo/ycsb/Utils.java
similarity index 100%
rename from src/com/yahoo/ycsb/Utils.java
rename to core/src/main/java/com/yahoo/ycsb/Utils.java
diff --git a/src/com/yahoo/ycsb/Workload.java b/core/src/main/java/com/yahoo/ycsb/Workload.java
similarity index 100%
rename from src/com/yahoo/ycsb/Workload.java
rename to core/src/main/java/com/yahoo/ycsb/Workload.java
diff --git a/src/com/yahoo/ycsb/WorkloadException.java b/core/src/main/java/com/yahoo/ycsb/WorkloadException.java
similarity index 100%
rename from src/com/yahoo/ycsb/WorkloadException.java
rename to core/src/main/java/com/yahoo/ycsb/WorkloadException.java
diff --git a/src/com/yahoo/ycsb/generator/ConstantIntegerGenerator.java b/core/src/main/java/com/yahoo/ycsb/generator/ConstantIntegerGenerator.java
similarity index 100%
rename from src/com/yahoo/ycsb/generator/ConstantIntegerGenerator.java
rename to core/src/main/java/com/yahoo/ycsb/generator/ConstantIntegerGenerator.java
diff --git a/src/com/yahoo/ycsb/generator/CounterGenerator.java b/core/src/main/java/com/yahoo/ycsb/generator/CounterGenerator.java
similarity index 100%
rename from src/com/yahoo/ycsb/generator/CounterGenerator.java
rename to core/src/main/java/com/yahoo/ycsb/generator/CounterGenerator.java
diff --git a/src/com/yahoo/ycsb/generator/DiscreteGenerator.java b/core/src/main/java/com/yahoo/ycsb/generator/DiscreteGenerator.java
similarity index 100%
rename from src/com/yahoo/ycsb/generator/DiscreteGenerator.java
rename to core/src/main/java/com/yahoo/ycsb/generator/DiscreteGenerator.java
diff --git a/src/com/yahoo/ycsb/generator/ExponentialGenerator.java b/core/src/main/java/com/yahoo/ycsb/generator/ExponentialGenerator.java
similarity index 100%
rename from src/com/yahoo/ycsb/generator/ExponentialGenerator.java
rename to core/src/main/java/com/yahoo/ycsb/generator/ExponentialGenerator.java
diff --git a/src/com/yahoo/ycsb/generator/FileGenerator.java b/core/src/main/java/com/yahoo/ycsb/generator/FileGenerator.java
similarity index 100%
rename from src/com/yahoo/ycsb/generator/FileGenerator.java
rename to core/src/main/java/com/yahoo/ycsb/generator/FileGenerator.java
diff --git a/src/com/yahoo/ycsb/generator/Generator.java b/core/src/main/java/com/yahoo/ycsb/generator/Generator.java
similarity index 100%
rename from src/com/yahoo/ycsb/generator/Generator.java
rename to core/src/main/java/com/yahoo/ycsb/generator/Generator.java
diff --git a/src/com/yahoo/ycsb/generator/HistogramGenerator.java b/core/src/main/java/com/yahoo/ycsb/generator/HistogramGenerator.java
similarity index 100%
rename from src/com/yahoo/ycsb/generator/HistogramGenerator.java
rename to core/src/main/java/com/yahoo/ycsb/generator/HistogramGenerator.java
diff --git a/src/com/yahoo/ycsb/generator/HotspotIntegerGenerator.java b/core/src/main/java/com/yahoo/ycsb/generator/HotspotIntegerGenerator.java
similarity index 100%
rename from src/com/yahoo/ycsb/generator/HotspotIntegerGenerator.java
rename to core/src/main/java/com/yahoo/ycsb/generator/HotspotIntegerGenerator.java
diff --git a/src/com/yahoo/ycsb/generator/IntegerGenerator.java b/core/src/main/java/com/yahoo/ycsb/generator/IntegerGenerator.java
similarity index 100%
rename from src/com/yahoo/ycsb/generator/IntegerGenerator.java
rename to core/src/main/java/com/yahoo/ycsb/generator/IntegerGenerator.java
diff --git a/src/com/yahoo/ycsb/generator/ScrambledZipfianGenerator.java b/core/src/main/java/com/yahoo/ycsb/generator/ScrambledZipfianGenerator.java
similarity index 100%
rename from src/com/yahoo/ycsb/generator/ScrambledZipfianGenerator.java
rename to core/src/main/java/com/yahoo/ycsb/generator/ScrambledZipfianGenerator.java
diff --git a/src/com/yahoo/ycsb/generator/SkewedLatestGenerator.java b/core/src/main/java/com/yahoo/ycsb/generator/SkewedLatestGenerator.java
similarity index 100%
rename from src/com/yahoo/ycsb/generator/SkewedLatestGenerator.java
rename to core/src/main/java/com/yahoo/ycsb/generator/SkewedLatestGenerator.java
diff --git a/src/com/yahoo/ycsb/generator/UniformGenerator.java b/core/src/main/java/com/yahoo/ycsb/generator/UniformGenerator.java
similarity index 100%
rename from src/com/yahoo/ycsb/generator/UniformGenerator.java
rename to core/src/main/java/com/yahoo/ycsb/generator/UniformGenerator.java
diff --git a/src/com/yahoo/ycsb/generator/UniformIntegerGenerator.java b/core/src/main/java/com/yahoo/ycsb/generator/UniformIntegerGenerator.java
similarity index 100%
rename from src/com/yahoo/ycsb/generator/UniformIntegerGenerator.java
rename to core/src/main/java/com/yahoo/ycsb/generator/UniformIntegerGenerator.java
diff --git a/src/com/yahoo/ycsb/generator/ZipfianGenerator.java b/core/src/main/java/com/yahoo/ycsb/generator/ZipfianGenerator.java
similarity index 100%
rename from src/com/yahoo/ycsb/generator/ZipfianGenerator.java
rename to core/src/main/java/com/yahoo/ycsb/generator/ZipfianGenerator.java
diff --git a/src/com/yahoo/ycsb/measurements/Measurements.java b/core/src/main/java/com/yahoo/ycsb/measurements/Measurements.java
similarity index 100%
rename from src/com/yahoo/ycsb/measurements/Measurements.java
rename to core/src/main/java/com/yahoo/ycsb/measurements/Measurements.java
diff --git a/src/com/yahoo/ycsb/measurements/OneMeasurement.java b/core/src/main/java/com/yahoo/ycsb/measurements/OneMeasurement.java
similarity index 100%
rename from src/com/yahoo/ycsb/measurements/OneMeasurement.java
rename to core/src/main/java/com/yahoo/ycsb/measurements/OneMeasurement.java
diff --git a/src/com/yahoo/ycsb/measurements/OneMeasurementHistogram.java b/core/src/main/java/com/yahoo/ycsb/measurements/OneMeasurementHistogram.java
similarity index 100%
rename from src/com/yahoo/ycsb/measurements/OneMeasurementHistogram.java
rename to core/src/main/java/com/yahoo/ycsb/measurements/OneMeasurementHistogram.java
diff --git a/src/com/yahoo/ycsb/measurements/OneMeasurementTimeSeries.java b/core/src/main/java/com/yahoo/ycsb/measurements/OneMeasurementTimeSeries.java
similarity index 100%
rename from src/com/yahoo/ycsb/measurements/OneMeasurementTimeSeries.java
rename to core/src/main/java/com/yahoo/ycsb/measurements/OneMeasurementTimeSeries.java
diff --git a/src/com/yahoo/ycsb/measurements/exporter/JSONMeasurementsExporter.java b/core/src/main/java/com/yahoo/ycsb/measurements/exporter/JSONMeasurementsExporter.java
similarity index 100%
rename from src/com/yahoo/ycsb/measurements/exporter/JSONMeasurementsExporter.java
rename to core/src/main/java/com/yahoo/ycsb/measurements/exporter/JSONMeasurementsExporter.java
diff --git a/src/com/yahoo/ycsb/measurements/exporter/MeasurementsExporter.java b/core/src/main/java/com/yahoo/ycsb/measurements/exporter/MeasurementsExporter.java
similarity index 100%
rename from src/com/yahoo/ycsb/measurements/exporter/MeasurementsExporter.java
rename to core/src/main/java/com/yahoo/ycsb/measurements/exporter/MeasurementsExporter.java
diff --git a/src/com/yahoo/ycsb/measurements/exporter/TextMeasurementsExporter.java b/core/src/main/java/com/yahoo/ycsb/measurements/exporter/TextMeasurementsExporter.java
similarity index 100%
rename from src/com/yahoo/ycsb/measurements/exporter/TextMeasurementsExporter.java
rename to core/src/main/java/com/yahoo/ycsb/measurements/exporter/TextMeasurementsExporter.java
diff --git a/src/com/yahoo/ycsb/workloads/ConstantOccupancyWorkload.java b/core/src/main/java/com/yahoo/ycsb/workloads/ConstantOccupancyWorkload.java
similarity index 100%
rename from src/com/yahoo/ycsb/workloads/ConstantOccupancyWorkload.java
rename to core/src/main/java/com/yahoo/ycsb/workloads/ConstantOccupancyWorkload.java
diff --git a/src/com/yahoo/ycsb/workloads/CoreWorkload.java b/core/src/main/java/com/yahoo/ycsb/workloads/CoreWorkload.java
similarity index 100%
rename from src/com/yahoo/ycsb/workloads/CoreWorkload.java
rename to core/src/main/java/com/yahoo/ycsb/workloads/CoreWorkload.java
diff --git a/db/cassandra-0.5/lib/README b/db/cassandra-0.5/lib/README
deleted file mode 100644
index 935c9e9fe142c608e7799b0135b0574cb2e1afd9..0000000000000000000000000000000000000000
--- a/db/cassandra-0.5/lib/README
+++ /dev/null
@@ -1 +0,0 @@
-This directory should contain jars for building and running Cassandra 0.5
diff --git a/db/cassandra-0.5/src/com/yahoo/ycsb/db/CassandraClient5.java b/db/cassandra-0.5/src/com/yahoo/ycsb/db/CassandraClient5.java
deleted file mode 100644
index 19f9f52812c147c0962faa82b7fda8dc3b3c1360..0000000000000000000000000000000000000000
--- a/db/cassandra-0.5/src/com/yahoo/ycsb/db/CassandraClient5.java
+++ /dev/null
@@ -1,502 +0,0 @@
-/**                                                                                                                                                                                
- * Copyright (c) 2010 Yahoo! Inc. All rights reserved.                                                                                                                             
- *                                                                                                                                                                                 
- * Licensed 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. See accompanying                                                                                                                 
- * LICENSE file.                                                                                                                                                                   
- */
-
-/*
- * Cassandra client specific to version 0.5 of Cassandra.
- */
-
-package com.yahoo.ycsb.db;
-
-import com.yahoo.ycsb.*;
-import java.util.List;
-import java.util.Set;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Vector;
-import java.util.Random;
-import java.util.Properties;
-
-import org.apache.thrift.transport.TTransport;
-import org.apache.thrift.transport.TSocket;
-import org.apache.thrift.protocol.TProtocol;
-import org.apache.thrift.protocol.TBinaryProtocol;
-import org.apache.cassandra.service.*;
-
-
-// XXXX if we do replication, fix the consistency levels
-/**
- * Cassandra 0.5 client for YCSB framework
- */
-public class CassandraClient5 extends DB
-{
-	static Random random=new Random();
-	public static final int Ok=0;
-	public static final int Error=-1;
-
-	public int ConnectionRetries;
-        public int OperationRetries;
-
-	public static final String CONNECTION_RETRY_PROPERTY="cassandra.connectionretries";
-	public static final String CONNECTION_RETRY_PROPERTY_DEFAULT="300";
-
-	public static final String OPERATION_RETRY_PROPERTY="cassandra.operationretries";
-	public static final String OPERATION_RETRY_PROPERTY_DEFAULT="300";
-	      
-
-	TTransport tr;
-	Cassandra.Client client;
-	
-	boolean _debug=false;
-
-	/**
-	 * Initialize any state for this DB.
-	 * Called once per DB instance; there is one DB instance per client thread.
-	 */
-	public void init() throws DBException
-	{
-		String hosts=getProperties().getProperty("hosts");
-		if (hosts==null)
-		{
-			throw new DBException("Required property \"hosts\" missing for CassandraClient5");
-		}
-		
-		ConnectionRetries=Integer.parseInt(getProperties().getProperty(CONNECTION_RETRY_PROPERTY,CONNECTION_RETRY_PROPERTY_DEFAULT));
-		OperationRetries=Integer.parseInt(getProperties().getProperty(OPERATION_RETRY_PROPERTY,OPERATION_RETRY_PROPERTY_DEFAULT));
-
-		_debug=Boolean.parseBoolean(getProperties().getProperty("debug","false"));
-
-		String[] allhosts=hosts.split(",");
-		String myhost=allhosts[random.nextInt(allhosts.length)];
-		//System.out.println("My host: ["+myhost+"]");
-		//System.exit(0);
-
-		Exception connectexception=null;
-
-		for (int retry=0; retry<ConnectionRetries; retry++)
-		{
-			tr = new TSocket(myhost, 9160);
-			TProtocol proto = new TBinaryProtocol(tr);
-			client = new Cassandra.Client(proto);
-			try
-			{
-				tr.open();
-				connectexception=null;
-				break;
-			}
-			catch (Exception e)
-			{
-				connectexception=e;
-			}
-			try
-			{
-				Thread.sleep(1000);
-			}
-			catch (InterruptedException e)
-			{}
-		}
-		if (connectexception!=null)
-		{
-			System.err.println("Unable to connect to "+myhost+" after "+ConnectionRetries+" tries");
-			System.out.println("Unable to connect to "+myhost+" after "+ConnectionRetries+" tries");
-			throw new DBException(connectexception);
-		}
-	}
-
-	/**
-	 * Cleanup any state for this DB.
-	 * Called once per DB instance; there is one DB instance per client thread.
-	 */
-	public void cleanup() throws DBException
-	{
-		tr.close();
-	}
-
-
-	/**
-	 * Read a record from the database. Each field/value pair from the result will be stored in a HashMap.
-	 *
-	 * @param table The name of the table
-	 * @param key The record key of the record to read.
-	 * @param fields The list of fields to read, or null for all of them
-	 * @param result A HashMap of field/value pairs for the result
-	 * @return Zero on success, a non-zero error code on error
-	 */
-	public int read(String table, String key, Set<String> fields, HashMap<String,ByteIterator> result)
-	{
-	   Exception errorexception=null;
-	   
-	   for (int i=0; i<OperationRetries; i++)
-	   {
-	      
-		try
-		{
-
-			SlicePredicate predicate;
-			if (fields==null)
-			{
-				predicate = new SlicePredicate(null,new SliceRange(new byte[0], new byte[0],false,1000000));
-			}
-			else
-			{
-				Vector<byte[]> fieldlist=new Vector<byte[]>();
-				for (String s : fields)
-				{
-					fieldlist.add(s.getBytes("UTF-8"));
-				}
-				predicate = new SlicePredicate(fieldlist,null);
-			}
-			ColumnParent parent = new ColumnParent("data", null);
-			List<ColumnOrSuperColumn> results = client.get_slice(table, key, parent, predicate, ConsistencyLevel.ONE);
-			
-			if (_debug)
-			{
-				System.out.print("READ: ");
-			}
-			
-			for (ColumnOrSuperColumn oneresult : results)
-			{
-				Column column=oneresult.column;
-				result.put(new String(column.name),new ByteArrayByteIterator(column.value));
-				
-				if (_debug)
-				{
-					System.out.print("("+new String(column.name)+"="+new String(column.value)+")");
-				}
-			}
-			
-			if (_debug)
-			{
-				System.out.println("");
-			}
-			
-			return Ok;
-		}
-		catch (Exception e)
-		{
-		   errorexception=e;
-		}
-
-		try
-		{
-		   Thread.sleep(500);
-		}
-		catch (InterruptedException e)
-		{
-		}
-	   }
-	   errorexception.printStackTrace();
-	   errorexception.printStackTrace(System.out);
-	   return Error;
-	   
-	}
-	
-	/**
-	 * Perform a range scan for a set of records in the database. Each field/value pair from the result will be stored in a HashMap.
-	 *
-	 * @param table The name of the table
-	 * @param startkey The record key of the first record to read.
-	 * @param recordcount The number of records to read
-	 * @param fields The list of fields to read, or null for all of them
-	 * @param result A Vector of HashMaps, where each HashMap is a set field/value pairs for one record
-	 * @return Zero on success, a non-zero error code on error
-	 */
-      public int scan(String table, String startkey, int recordcount, Set<String> fields, Vector<HashMap<String,ByteIterator>> result)
-      {
-	 Exception errorexception=null;	 
-
-	   for (int i=0; i<OperationRetries; i++)
-	   {
-	      
-		try
-		{
-			SlicePredicate predicate;
-			if (fields==null)
-			{
-				predicate = new SlicePredicate(null,new SliceRange(new byte[0], new byte[0],false,1000000));
-			}
-			else
-			{
-				Vector<byte[]> fieldlist=new Vector<byte[]>();
-				for (String s : fields)
-				{
-					fieldlist.add(s.getBytes("UTF-8"));
-				}
-				predicate = new SlicePredicate(fieldlist,null);
-			}
-			ColumnParent parent = new ColumnParent("data", null);
-			
-			List<KeySlice> results = client.get_range_slice(table,parent,predicate,startkey,"",recordcount,ConsistencyLevel.ONE);
-			
-			if (_debug)
-			{
-				System.out.println("SCAN:");
-			}
-			
-			for (KeySlice oneresult : results)
-			{
-				HashMap<String,ByteIterator> tuple = new HashMap<String, ByteIterator>();
-				
-				for (ColumnOrSuperColumn onecol : oneresult.columns)
-				{
-					Column column=onecol.column;
-					tuple.put(new String(column.name),new ByteArrayByteIterator(column.value));
-					
-					if (_debug)
-					{
-						System.out.print("("+new String(column.name)+"="+new String(column.value)+")");
-					}
-				}
-				
-				result.add(tuple);
-				if (_debug)
-				{
-					System.out.println();
-				}
-			}
-
-			return Ok;
-		}
-		catch (Exception e)
-		{
-		   errorexception=e;
-		}
-		try
-		{
-		   Thread.sleep(500);
-		}
-		catch (InterruptedException e)
-		{
-		}
-	   }
-	   errorexception.printStackTrace();
-	   errorexception.printStackTrace(System.out);
-	   return Error;
-	}	
-
-	/**
-	 * Update a record in the database. Any field/value pairs in the specified values HashMap will be written into the record with the specified
-	 * record key, overwriting any existing values with the same field name.
-	 *
-	 * @param table The name of the table
-	 * @param key The record key of the record to write.
-	 * @param values A HashMap of field/value pairs to update in the record
-	 * @return Zero on success, a non-zero error code on error
-	 */
-	public int update(String table, String key, HashMap<String,ByteIterator> values)
-	{
-		return insert(table,key,values);
-	}
-
-	/**
-	 * Insert a record in the database. Any field/value pairs in the specified values HashMap will be written into the record with the specified
-	 * record key.
-	 *
-	 * @param table The name of the table
-	 * @param key The record key of the record to insert.
-	 * @param values A HashMap of field/value pairs to insert in the record
-	 * @return Zero on success, a non-zero error code on error
-	 */
-	public int insert(String table, String key, HashMap<String,ByteIterator> values)
-	{
-	   Exception errorexception=null;
-	   
-	   for (int i=0; i<OperationRetries; i++)
-	   {
-		// insert data
-		long timestamp = System.currentTimeMillis();
-
-		HashMap<String, List<ColumnOrSuperColumn>> batch_mutation=new HashMap<String, List<ColumnOrSuperColumn>>();
-		Vector<ColumnOrSuperColumn> v=new Vector<ColumnOrSuperColumn>();
-		batch_mutation.put("data",v);
-
-		try
-		{
-			for (String field : values.keySet())
-			{
-				String val=values.get(field).toString();
-				Column col=new Column(field.getBytes("UTF-8"),val.getBytes("UTF-8"),timestamp);
-
-				ColumnOrSuperColumn c=new ColumnOrSuperColumn();
-				c.setColumn(col);
-				c.unsetSuper_column();
-				v.add(c);
-			}
-
-
-			client.batch_insert(table,
-					key,
-					batch_mutation,
-					ConsistencyLevel.ONE);
-			
-			if (_debug)
-			{
-				System.out.println("INSERT");
-			}
-
-			return Ok;
-		}
-		catch (Exception e)
-		{
-		   errorexception=e;
-		}
-		try
-		{
-		   Thread.sleep(500);
-		}
-		catch (InterruptedException e)
-		{
-		}
-	   }
-	   
-	   errorexception.printStackTrace();
-	   errorexception.printStackTrace(System.out);
-	   return Error;
-	}
-
-	/**
-	 * Delete a record from the database. 
-	 *
-	 * @param table The name of the table
-	 * @param key The record key of the record to delete.
-	 * @return Zero on success, a non-zero error code on error
-	 */
-	public int delete(String table, String key)
-	{
-	   Exception errorexception=null;
-	   
-	   for (int i=0; i<OperationRetries; i++)
-	   {
-		try
-		{
-			client.remove(table,key,new ColumnPath("data", null, null),System.currentTimeMillis(),ConsistencyLevel.ONE);
-			
-			if (_debug)
-			{
-				System.out.println("DELETE");
-			}
-
-			return Ok;
-		}
-		catch (Exception e)
-		{
-		   errorexception=e;
-		}
-		try
-		{
-		   Thread.sleep(500);
-		}
-		catch (InterruptedException e)
-		{
-		}
-	   }
-	   errorexception.printStackTrace();
-	   errorexception.printStackTrace(System.out);
-	   return Error;
-	}
-
-
-	public static void main(String[] args)
-	{
-		CassandraClient5 cli=new CassandraClient5();
-
-		Properties props=new Properties();
-
-		props.setProperty("hosts",args[0]);
-		cli.setProperties(props);
-
-		try
-		{
-			cli.init();
-		}
-		catch (Exception e)
-		{
-			e.printStackTrace();
-			System.exit(0);
-		}
-
-		HashMap<String,ByteIterator> vals=new HashMap<String,ByteIterator>();
-		vals.put("age",new StringByteIterator("57"));
-		vals.put("middlename",new StringByteIterator("bradley"));
-		vals.put("favoritecolor",new StringByteIterator("blue"));
-		int res=cli.insert("usertable","BrianFrankCooper",vals);
-		System.out.println("Result of insert: "+res);
-
-		HashMap<String,ByteIterator> result=new HashMap<String,ByteIterator>();
-		HashSet<String> fields=new HashSet<String>();
-		fields.add("middlename");
-		fields.add("age");
-		fields.add("favoritecolor");
-		res=cli.read("usertable", "BrianFrankCooper", null, result);
-		System.out.println("Result of read: "+res);
-		for (String s: result.keySet())
-		{
-			System.out.println("["+s+"]=["+result.get(s)+"]");
-		}
-
-		res=cli.delete("usertable","BrianFrankCooper");
-		System.out.println("Result of delete: "+res);
-	}
-
-
-	/*
-      public static void main(String[] args)
-	 throws TException, InvalidRequestException, UnavailableException, UnsupportedEncodingException, NotFoundException
-      {
-
-
-
-	 String key_user_id = "1";
-
-
-
-
-	 client.insert("Keyspace1",
-		       key_user_id,
-		       new ColumnPath("Standard1", null, "age".getBytes("UTF-8")),
-		       "24".getBytes("UTF-8"),
-		       timestamp,
-		       ConsistencyLevel.ONE);
-
-
-	 // read single column
-	 ColumnPath path = new ColumnPath("Standard1", null, "name".getBytes("UTF-8"));
-
-	 System.out.println(client.get("Keyspace1", key_user_id, path, ConsistencyLevel.ONE));
-
-
-	 // read entire row
-	 SlicePredicate predicate = new SlicePredicate(null, new SliceRange(new byte[0], new byte[0], false, 10));
-
-	 ColumnParent parent = new ColumnParent("Standard1", null);
-
-	 List<ColumnOrSuperColumn> results = client.get_slice("Keyspace1", key_user_id, parent, predicate, ConsistencyLevel.ONE);
-
-	 for (ColumnOrSuperColumn result : results)
-	 {
-
-            Column column = result.column;
-
-            System.out.println(new String(column.name, "UTF-8") + " -> " + new String(column.value, "UTF-8"));
-
-	 }
-
-
-
-
-      }
-	 */      
-}
diff --git a/db/cassandra-0.6/lib/README b/db/cassandra-0.6/lib/README
deleted file mode 100644
index b41667f1b8990affbfdd51a64a774ec7913856ef..0000000000000000000000000000000000000000
--- a/db/cassandra-0.6/lib/README
+++ /dev/null
@@ -1 +0,0 @@
-This directory should contain jars for building and running Cassandra 0.6
diff --git a/db/cassandra-0.6/src/com/yahoo/ycsb/db/CassandraClient6.java b/db/cassandra-0.6/src/com/yahoo/ycsb/db/CassandraClient6.java
deleted file mode 100644
index 6d4a57252ad274e93c8585600c5cd5ea9174119c..0000000000000000000000000000000000000000
--- a/db/cassandra-0.6/src/com/yahoo/ycsb/db/CassandraClient6.java
+++ /dev/null
@@ -1,515 +0,0 @@
-/**                                                                                                                                                                                
- * Copyright (c) 2010 Yahoo! Inc. All rights reserved.                                                                                                                             
- *                                                                                                                                                                                 
- * Licensed 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. See accompanying                                                                                                                 
- * LICENSE file.                                                                                                                                                                   
- */
-
-package com.yahoo.ycsb.db;
-
-import com.yahoo.ycsb.*;
-import java.util.List;
-import java.util.Set;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Vector;
-import java.util.Random;
-import java.util.Properties;
-
-import org.apache.thrift.transport.TTransport;
-import org.apache.thrift.transport.TSocket;
-import org.apache.thrift.protocol.TProtocol;
-import org.apache.thrift.protocol.TBinaryProtocol;
-import org.apache.cassandra.service.*;
-import org.apache.cassandra.thrift.*;
-
-
-//XXXX if we do replication, fix the consistency levels
-/**
- * Cassandra 0.6 client for YCSB framework
- */
-public class CassandraClient6 extends DB
-{
-	static Random random=new Random();
-	public static final int Ok=0;
-	public static final int Error=-1;
-
-	public int ConnectionRetries;
-        public int OperationRetries;
-
-	public static final String CONNECTION_RETRY_PROPERTY="cassandra.connectionretries";
-	public static final String CONNECTION_RETRY_PROPERTY_DEFAULT="300";
-
-	public static final String OPERATION_RETRY_PROPERTY="cassandra.operationretries";
-	public static final String OPERATION_RETRY_PROPERTY_DEFAULT="300";
-	      
-
-	TTransport tr;
-	Cassandra.Client client;
-	
-	boolean _debug=false;
-
-	/**
-	 * Initialize any state for this DB.
-	 * Called once per DB instance; there is one DB instance per client thread.
-	 */
-	public void init() throws DBException
-	{
-		String hosts=getProperties().getProperty("hosts");
-		if (hosts==null)
-		{
-			throw new DBException("Required property \"hosts\" missing for CassandraClient");
-		}
-		
-		ConnectionRetries=Integer.parseInt(getProperties().getProperty(CONNECTION_RETRY_PROPERTY,CONNECTION_RETRY_PROPERTY_DEFAULT));
-		OperationRetries=Integer.parseInt(getProperties().getProperty(OPERATION_RETRY_PROPERTY,OPERATION_RETRY_PROPERTY_DEFAULT));
-
-		_debug=Boolean.parseBoolean(getProperties().getProperty("debug","false"));
-
-		String[] allhosts=hosts.split(",");
-		String myhost=allhosts[random.nextInt(allhosts.length)];
-		//System.out.println("My host: ["+myhost+"]");
-		//System.exit(0);
-
-		Exception connectexception=null;
-
-		for (int retry=0; retry<ConnectionRetries; retry++)
-		{
-			tr = new TSocket(myhost, 9160);
-			TProtocol proto = new TBinaryProtocol(tr);
-			client = new Cassandra.Client(proto);
-			try
-			{
-				tr.open();
-				connectexception=null;
-				break;
-			}
-			catch (Exception e)
-			{
-				connectexception=e;
-			}
-			try
-			{
-				Thread.sleep(1000);
-			}
-			catch (InterruptedException e)
-			{}
-		}
-		if (connectexception!=null)
-		{
-			System.err.println("Unable to connect to "+myhost+" after "+ConnectionRetries+" tries");
-			System.out.println("Unable to connect to "+myhost+" after "+ConnectionRetries+" tries");
-			throw new DBException(connectexception);
-		}
-	}
-
-	/**
-	 * Cleanup any state for this DB.
-	 * Called once per DB instance; there is one DB instance per client thread.
-	 */
-	public void cleanup() throws DBException
-	{
-		tr.close();
-	}
-
-
-	/**
-	 * Read a record from the database. Each field/value pair from the result will be stored in a HashMap.
-	 *
-	 * @param table The name of the table
-	 * @param key The record key of the record to read.
-	 * @param fields The list of fields to read, or null for all of them
-	 * @param result A HashMap of field/value pairs for the result
-	 * @return Zero on success, a non-zero error code on error
-	 */
-	public int read(String table, String key, Set<String> fields, HashMap<String,ByteIterator> result)
-	{
-	   Exception errorexception=null;
-	   
-	   for (int i=0; i<OperationRetries; i++)
-	   {
-	      
-		try
-		{
-		   
-		   SlicePredicate predicate;
-		   if (fields==null)
-		   {
-		    
-		      SliceRange sliceRange = new SliceRange();
-		      sliceRange.setStart(new byte[0]);
-		      sliceRange.setFinish(new byte[0]);
-		      sliceRange.setCount(1000000);
-
-		      predicate = new SlicePredicate();
-		      predicate.setSlice_range(sliceRange);
-		   }
-		   else
-		   {
-		      Vector<byte[]> fieldlist=new Vector<byte[]>();
-		      for (String s : fields)
-		      {
-			 fieldlist.add(s.getBytes("UTF-8"));
-		      }
-
-		      predicate = new SlicePredicate();
-		      predicate.setColumn_names(fieldlist);
-		   }
-		   
-		   ColumnParent parent = new ColumnParent("data");
-		   List<ColumnOrSuperColumn> results = client.get_slice(table, key, parent, predicate, ConsistencyLevel.ONE);
-		   
-		   if (_debug)
-		   {
-		      System.out.print("READ: ");
-		   }
-		   
-		   for (ColumnOrSuperColumn oneresult : results)
-		   {
-		      Column column=oneresult.column;
-		      result.put(new String(column.name),new ByteArrayByteIterator(column.value));
-		      
-		      if (_debug)
-		      {
-			 System.out.print("("+new String(column.name)+"="+new String(column.value)+")");
-		      }
-		   }
-		   
-		   if (_debug)
-		   {
-		      System.out.println("");
-		   }
-		   
-		   return Ok;
-		}
-		catch (Exception e)
-		{
-		   errorexception=e;
-		}
-
-		try
-		{
-		   Thread.sleep(500);
-		}
-		catch (InterruptedException e)
-		{
-		}
-	   }
-	   errorexception.printStackTrace();
-	   errorexception.printStackTrace(System.out);
-	   return Error;
-	   
-	}
-	
-	/**
-	 * Perform a range scan for a set of records in the database. Each field/value pair from the result will be stored in a HashMap.
-	 *
-	 * @param table The name of the table
-	 * @param startkey The record key of the first record to read.
-	 * @param recordcount The number of records to read
-	 * @param fields The list of fields to read, or null for all of them
-	 * @param result A Vector of HashMaps, where each HashMap is a set field/value pairs for one record
-	 * @return Zero on success, a non-zero error code on error
-	 */
-      public int scan(String table, String startkey, int recordcount, Set<String> fields, Vector<HashMap<String,ByteIterator>> result)
-      {
-	 Exception errorexception=null;	 
-
-	   for (int i=0; i<OperationRetries; i++)
-	   {
-	      
-		try
-		{
-			SlicePredicate predicate;
-			if (fields==null)
-			{
-			   SliceRange sliceRange = new SliceRange();
-			   sliceRange.setStart(new byte[0]);
-			   sliceRange.setFinish(new byte[0]);
-			   sliceRange.setCount(1000000);
-			   predicate = new SlicePredicate();
-			   predicate.setSlice_range(sliceRange);
-			}
-			else
-			{
-				Vector<byte[]> fieldlist=new Vector<byte[]>();
-				for (String s : fields)
-				{
-					fieldlist.add(s.getBytes("UTF-8"));
-				}
-				predicate = new SlicePredicate();
-				predicate.setColumn_names(fieldlist);
-			}
-			ColumnParent parent = new ColumnParent("data");
-			
-			List<KeySlice> results = client.get_range_slice(table,parent,predicate,startkey,"",recordcount,ConsistencyLevel.ONE);
-			
-			if (_debug)
-			{
-				System.out.println("SCAN:");
-			}
-			
-			for (KeySlice oneresult : results)
-			{
-				HashMap<String,ByteIterator> tuple = new HashMap<String,ByteIterator>();
-				
-				for (ColumnOrSuperColumn onecol : oneresult.columns)
-				{
-					Column column=onecol.column;
-					tuple.put(new String(column.name),new ByteArrayByteIterator(column.value));
-					
-					if (_debug)
-					{
-						System.out.print("("+new String(column.name)+"="+new String(column.value)+")");
-					}
-				}
-				
-				result.add(tuple);
-				if (_debug)
-				{
-					System.out.println();
-				}
-			}
-
-			return Ok;
-		}
-		catch (Exception e)
-		{
-		   errorexception=e;
-		}
-		try
-		{
-		   Thread.sleep(500);
-		}
-		catch (InterruptedException e)
-		{
-		}
-	   }
-	   errorexception.printStackTrace();
-	   errorexception.printStackTrace(System.out);
-	   return Error;
-	}	
-
-	/**
-	 * Update a record in the database. Any field/value pairs in the specified values HashMap will be written into the record with the specified
-	 * record key, overwriting any existing values with the same field name.
-	 *
-	 * @param table The name of the table
-	 * @param key The record key of the record to write.
-	 * @param values A HashMap of field/value pairs to update in the record
-	 * @return Zero on success, a non-zero error code on error
-	 */
-	public int update(String table, String key, HashMap<String,ByteIterator> values)
-	{
-		return insert(table,key,values);
-	}
-
-	/**
-	 * Insert a record in the database. Any field/value pairs in the specified values HashMap will be written into the record with the specified
-	 * record key.
-	 *
-	 * @param table The name of the table
-	 * @param key The record key of the record to insert.
-	 * @param values A HashMap of field/value pairs to insert in the record
-	 * @return Zero on success, a non-zero error code on error
-	 */
-	public int insert(String table, String key, HashMap<String,ByteIterator> values)
-	{
-	   Exception errorexception=null;
-	   
-	   for (int i=0; i<OperationRetries; i++)
-	   {
-		// insert data
-		long timestamp = System.currentTimeMillis();
-
-		HashMap<String, List<ColumnOrSuperColumn>> batch_mutation=new HashMap<String, List<ColumnOrSuperColumn>>();
-		Vector<ColumnOrSuperColumn> v=new Vector<ColumnOrSuperColumn>();
-		batch_mutation.put("data",v);
-
-		try
-		{
-			for (String field : values.keySet())
-			{
-				ByteIterator val=values.get(field);
-				Column col=new Column(field.getBytes("UTF-8"),val.toArray(),timestamp);
-
-				ColumnOrSuperColumn c=new ColumnOrSuperColumn();
-				c.setColumn(col);
-				c.unsetSuper_column();
-				v.add(c);
-			}
-
-
-			client.batch_insert(table,
-					key,
-					batch_mutation,
-					ConsistencyLevel.ONE);
-			
-			if (_debug)
-			{
-				System.out.println("INSERT");
-			}
-
-			return Ok;
-		}
-		catch (Exception e)
-		{
-		   errorexception=e;
-		}
-		try
-		{
-		   Thread.sleep(500);
-		}
-		catch (InterruptedException e)
-		{
-		}
-	   }
-	   
-	   errorexception.printStackTrace();
-	   errorexception.printStackTrace(System.out);
-	   return Error;
-	}
-
-	/**
-	 * Delete a record from the database. 
-	 *
-	 * @param table The name of the table
-	 * @param key The record key of the record to delete.
-	 * @return Zero on success, a non-zero error code on error
-	 */
-	public int delete(String table, String key)
-	{
-	   Exception errorexception=null;
-	   
-	   for (int i=0; i<OperationRetries; i++)
-	   {
-		try
-		{
-			client.remove(table,key,new ColumnPath("data"),System.currentTimeMillis(),ConsistencyLevel.ONE);
-			
-			if (_debug)
-			{
-				System.out.println("DELETE");
-			}
-
-			return Ok;
-		}
-		catch (Exception e)
-		{
-		   errorexception=e;
-		}
-		try
-		{
-		   Thread.sleep(500);
-		}
-		catch (InterruptedException e)
-		{
-		}
-	   }
-	   errorexception.printStackTrace();
-	   errorexception.printStackTrace(System.out);
-	   return Error;
-	}
-
-
-	public static void main(String[] args)
-	{
-		CassandraClient6 cli=new CassandraClient6();
-
-		Properties props=new Properties();
-
-		props.setProperty("hosts",args[0]);
-		cli.setProperties(props);
-
-		try
-		{
-			cli.init();
-		}
-		catch (Exception e)
-		{
-			e.printStackTrace();
-			System.exit(0);
-		}
-
-		HashMap<String,ByteIterator> vals=new HashMap<String,ByteIterator>();
-		vals.put("age",new StringByteIterator("57"));
-		vals.put("middlename",new StringByteIterator("bradley"));
-		vals.put("favoritecolor",new StringByteIterator("blue"));
-		int res=cli.insert("usertable","BrianFrankCooper",vals);
-		System.out.println("Result of insert: "+res);
-
-		HashMap<String,ByteIterator> result=new HashMap<String,ByteIterator>();
-		HashSet<String> fields=new HashSet<String>();
-		fields.add("middlename");
-		fields.add("age");
-		fields.add("favoritecolor");
-		res=cli.read("usertable", "BrianFrankCooper", null, result);
-		System.out.println("Result of read: "+res);
-		for (String s: result.keySet())
-		{
-			System.out.println("["+s+"]=["+result.get(s)+"]");
-		}
-
-		res=cli.delete("usertable","BrianFrankCooper");
-		System.out.println("Result of delete: "+res);
-	}
-
-
-	/*
-      public static void main(String[] args)
-	 throws TException, InvalidRequestException, UnavailableException, UnsupportedEncodingException, NotFoundException
-      {
-
-
-
-	 String key_user_id = "1";
-
-
-
-
-	 client.insert("Keyspace1",
-		       key_user_id,
-		       new ColumnPath("Standard1", null, "age".getBytes("UTF-8")),
-		       "24".getBytes("UTF-8"),
-		       timestamp,
-		       ConsistencyLevel.ONE);
-
-
-	 // read single column
-	 ColumnPath path = new ColumnPath("Standard1", null, "name".getBytes("UTF-8"));
-
-	 System.out.println(client.get("Keyspace1", key_user_id, path, ConsistencyLevel.ONE));
-
-
-	 // read entire row
-	 SlicePredicate predicate = new SlicePredicate(null, new SliceRange(new byte[0], new byte[0], false, 10));
-
-	 ColumnParent parent = new ColumnParent("Standard1", null);
-
-	 List<ColumnOrSuperColumn> results = client.get_slice("Keyspace1", key_user_id, parent, predicate, ConsistencyLevel.ONE);
-
-	 for (ColumnOrSuperColumn result : results)
-	 {
-
-            Column column = result.column;
-
-            System.out.println(new String(column.name, "UTF-8") + " -> " + new String(column.value, "UTF-8"));
-
-	 }
-
-
-
-
-      }
-	 */      
-}
diff --git a/db/cassandra-0.7/lib/README b/db/cassandra-0.7/lib/README
deleted file mode 100644
index 1f752f6b8a7170128bbb155e4ac43554d61a348b..0000000000000000000000000000000000000000
--- a/db/cassandra-0.7/lib/README
+++ /dev/null
@@ -1 +0,0 @@
-This directory should contain jars for building and running Cassandra 0.7
diff --git a/db/cassandra-0.7/src/com/yahoo/ycsb/db/CassandraClient7.java b/db/cassandra-0.7/src/com/yahoo/ycsb/db/CassandraClient7.java
deleted file mode 100644
index c5a39692b9d37216ad46e24afbb02125b8cca533..0000000000000000000000000000000000000000
--- a/db/cassandra-0.7/src/com/yahoo/ycsb/db/CassandraClient7.java
+++ /dev/null
@@ -1,615 +0,0 @@
-/**
- * Copyright (c) 2010 Yahoo! Inc. All rights reserved.
- *
- * Licensed 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. See accompanying
- * LICENSE file.
- */
-
-package com.yahoo.ycsb.db;
-
-import com.yahoo.ycsb.*;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Vector;
-import java.util.Random;
-import java.util.Properties;
-import java.nio.ByteBuffer;
-
-import org.apache.thrift.transport.TTransport;
-import org.apache.thrift.transport.TFramedTransport;
-import org.apache.thrift.transport.TSocket;
-import org.apache.thrift.protocol.TProtocol;
-import org.apache.thrift.protocol.TBinaryProtocol;
-import org.apache.cassandra.thrift.*;
-
-
-//XXXX if we do replication, fix the consistency levels
-/**
- * Cassandra 0.7 client for YCSB framework
- */
-public class CassandraClient7 extends DB
-{
-  static Random random = new Random();
-  public static final int Ok = 0;
-  public static final int Error = -1;
-  public static final ByteBuffer emptyByteBuffer = ByteBuffer.wrap(new byte[0]);
-
-  public int ConnectionRetries;
-  public int OperationRetries;
-  public String column_family;
-
-  public static final String CONNECTION_RETRY_PROPERTY = "cassandra.connectionretries";
-  public static final String CONNECTION_RETRY_PROPERTY_DEFAULT = "300";
-
-  public static final String OPERATION_RETRY_PROPERTY = "cassandra.operationretries";
-  public static final String OPERATION_RETRY_PROPERTY_DEFAULT = "300";
-
-  public static final String USERNAME_PROPERTY = "cassandra.username";
-  public static final String PASSWORD_PROPERTY = "cassandra.password";
-
-  public static final String COLUMN_FAMILY_PROPERTY = "cassandra.columnfamily";
-  public static final String COLUMN_FAMILY_PROPERTY_DEFAULT = "data";
-
-  TTransport tr;
-  Cassandra.Client client;
-
-  boolean _debug = false;
-  
-  String _table = "";
-  Exception errorexception = null;
-  
-  List<Mutation> mutations = new ArrayList<Mutation>();
-  Map<String, List<Mutation>> mutationMap = new HashMap<String, List<Mutation>>();
-  Map<ByteBuffer, Map<String, List<Mutation>>> record = new HashMap<ByteBuffer, Map<String, List<Mutation>>>();
-  
-  ColumnParent parent;
-
-  /**
-   * Initialize any state for this DB. Called once per DB instance; there is one
-   * DB instance per client thread.
-   */
-  public void init() throws DBException
-  {
-    String hosts = getProperties().getProperty("hosts");
-    if (hosts == null)
-    {
-      throw new DBException("Required property \"hosts\" missing for CassandraClient");
-    }
-
-    column_family = getProperties().getProperty(COLUMN_FAMILY_PROPERTY, COLUMN_FAMILY_PROPERTY_DEFAULT);
-    parent = new ColumnParent(column_family);
-
-    ConnectionRetries = Integer.parseInt(getProperties().getProperty(CONNECTION_RETRY_PROPERTY,
-        CONNECTION_RETRY_PROPERTY_DEFAULT));
-    OperationRetries = Integer.parseInt(getProperties().getProperty(OPERATION_RETRY_PROPERTY,
-        OPERATION_RETRY_PROPERTY_DEFAULT));
-
-    String username = getProperties().getProperty(USERNAME_PROPERTY);
-    String password = getProperties().getProperty(PASSWORD_PROPERTY);
-
-    _debug = Boolean.parseBoolean(getProperties().getProperty("debug", "false"));
-
-    String[] allhosts = hosts.split(",");
-    String myhost = allhosts[random.nextInt(allhosts.length)];
-
-    Exception connectexception = null;
-
-    for (int retry = 0; retry < ConnectionRetries; retry++)
-    {
-      tr = new TFramedTransport(new TSocket(myhost, 9160));
-      TProtocol proto = new TBinaryProtocol(tr);
-      client = new Cassandra.Client(proto);
-      try
-      {
-        tr.open();
-        connectexception = null;
-        break;
-      } catch (Exception e)
-      {
-        connectexception = e;
-      }
-      try
-      {
-        Thread.sleep(1000);
-      } catch (InterruptedException e)
-      {
-      }
-    }
-    if (connectexception != null)
-    {
-      System.err.println("Unable to connect to " + myhost + " after " + ConnectionRetries
-          + " tries");
-      System.out.println("Unable to connect to " + myhost + " after " + ConnectionRetries
-          + " tries");
-      throw new DBException(connectexception);
-    }
-
-    if (username != null && password != null) 
-    {
-        Map<String,String> cred = new HashMap<String,String>();
-        cred.put("username", username);
-        cred.put("password", password);
-        AuthenticationRequest req = new AuthenticationRequest(cred);
-        try 
-        {
-            client.login(req);
-        }
-        catch (Exception e)
-        {
-            throw new DBException(e);
-        }
-    }
-  }
-
-  /**
-   * Cleanup any state for this DB. Called once per DB instance; there is one DB
-   * instance per client thread.
-   */
-  public void cleanup() throws DBException
-  {
-    tr.close();
-  }
-
-  /**
-   * Read a record from the database. Each field/value pair from the result will
-   * be stored in a HashMap.
-   * 
-   * @param table
-   *          The name of the table
-   * @param key
-   *          The record key of the record to read.
-   * @param fields
-   *          The list of fields to read, or null for all of them
-   * @param result
-   *          A HashMap of field/value pairs for the result
-   * @return Zero on success, a non-zero error code on error
-   */
-  public int read(String table, String key, Set<String> fields, HashMap<String, ByteIterator> result)
-  {
-    if (!_table.equals(table)) {
-      try 
-      {
-        client.set_keyspace(table);
-        _table = table;
-      }
-      catch (Exception e) 
-      {
-        e.printStackTrace();
-        e.printStackTrace(System.out);
-        return Error;
-      }
-    }
-
-    for (int i = 0; i < OperationRetries; i++)
-    {
-
-      try
-      {
-        SlicePredicate predicate;
-        if (fields == null)
-        {
-          predicate = new SlicePredicate().setSlice_range(new SliceRange(emptyByteBuffer, emptyByteBuffer, false, 1000000));
-          
-        } else {
-          ArrayList<ByteBuffer> fieldlist = new ArrayList<ByteBuffer>(fields.size());
-          for (String s : fields)
-          {
-            fieldlist.add(ByteBuffer.wrap(s.getBytes("UTF-8")));
-          }
-
-          predicate = new SlicePredicate().setColumn_names(fieldlist);
-        }
-
-        List<ColumnOrSuperColumn> results = client.get_slice(ByteBuffer.wrap(key.getBytes("UTF-8")), parent, predicate, ConsistencyLevel.ONE);
-
-        if (_debug)
-        {
-          System.out.print("Reading key: " + key);
-        }
-
-        Column column;
-        String name;
-        ByteIterator value;
-        for (ColumnOrSuperColumn oneresult : results)
-        {
-
-          column = oneresult.column;
-	        name = new String(column.name.array(), column.name.position()+column.name.arrayOffset(), column.name.remaining());
-      	  value = new ByteArrayByteIterator(column.value.array(), column.value.position()+column.value.arrayOffset(), column.value.remaining());
-
-          result.put(name,value);
-
-          if (_debug)
-          {
-            System.out.print("(" + name + "=" + value + ")");
-          }
-        }
-
-        if (_debug)
-        {
-          System.out.println();
-        }
-
-        return Ok;
-      } catch (Exception e)
-      {
-        errorexception = e;
-      }
-
-      try
-      {
-        Thread.sleep(500);
-      } catch (InterruptedException e)
-      {
-      }
-    }
-    errorexception.printStackTrace();
-    errorexception.printStackTrace(System.out);
-    return Error;
-
-  }
-
-  /**
-   * Perform a range scan for a set of records in the database. Each field/value
-   * pair from the result will be stored in a HashMap.
-   * 
-   * @param table
-   *          The name of the table
-   * @param startkey
-   *          The record key of the first record to read.
-   * @param recordcount
-   *          The number of records to read
-   * @param fields
-   *          The list of fields to read, or null for all of them
-   * @param result
-   *          A Vector of HashMaps, where each HashMap is a set field/value
-   *          pairs for one record
-   * @return Zero on success, a non-zero error code on error
-   */
-  public int scan(String table, String startkey, int recordcount, Set<String> fields,
-      Vector<HashMap<String, ByteIterator>> result)
-  {
-    if (!_table.equals(table)) {
-      try 
-      {
-        client.set_keyspace(table);
-        _table = table;
-      }
-      catch (Exception e) 
-      {
-        e.printStackTrace();
-        e.printStackTrace(System.out);
-        return Error;
-      }
-    }
-    
-    for (int i = 0; i < OperationRetries; i++)
-    {
-
-      try
-      {
-        SlicePredicate predicate;
-        if (fields == null)
-        {
-          predicate = new SlicePredicate().setSlice_range(new SliceRange(emptyByteBuffer, emptyByteBuffer, false, 1000000));
-          
-        } else {
-          ArrayList<ByteBuffer> fieldlist = new ArrayList<ByteBuffer>(fields.size());
-          for (String s : fields)
-          {
-      	    fieldlist.add(ByteBuffer.wrap(s.getBytes("UTF-8")));
-          }
-          
-          predicate = new SlicePredicate().setColumn_names(fieldlist);
-        }
-        
-        KeyRange kr = new KeyRange().setStart_key(startkey.getBytes("UTF-8")).setEnd_key(new byte[] {}).setCount(recordcount);
-
-        List<KeySlice> results = client.get_range_slices(parent, predicate, kr, ConsistencyLevel.ONE);
-
-        if (_debug)
-        {
-          System.out.println("Scanning startkey: " + startkey);
-        }
-
-        HashMap<String, ByteIterator> tuple;
-        for (KeySlice oneresult : results)
-        {
-          tuple = new HashMap<String, ByteIterator>();
-          
-          Column column;
-          String name;
-          ByteIterator value;
-          for (ColumnOrSuperColumn onecol : oneresult.columns)
-          {
-	          column = onecol.column;
-      	    name = new String(column.name.array(), column.name.position()+column.name.arrayOffset(), column.name.remaining());
-      	    value = new ByteArrayByteIterator(column.value.array(), column.value.position()+column.value.arrayOffset(), column.value.remaining());
-            
-      	    tuple.put(name, value);
-
-            if (_debug)
-            {
-              System.out.print("(" + name + "=" + value + ")");
-            }
-          }
-
-          result.add(tuple);
-          if (_debug)
-          {
-            System.out.println();
-          }
-        }
-
-        return Ok;
-      } catch (Exception e)
-      {
-        errorexception = e;
-      }
-      try
-      {
-        Thread.sleep(500);
-      } catch (InterruptedException e)
-      {
-      }
-    }
-    errorexception.printStackTrace();
-    errorexception.printStackTrace(System.out);
-    return Error;
-  }
-
-  /**
-   * Update a record in the database. Any field/value pairs in the specified
-   * values HashMap will be written into the record with the specified record
-   * key, overwriting any existing values with the same field name.
-   * 
-   * @param table
-   *          The name of the table
-   * @param key
-   *          The record key of the record to write.
-   * @param values
-   *          A HashMap of field/value pairs to update in the record
-   * @return Zero on success, a non-zero error code on error
-   */
-  public int update(String table, String key, HashMap<String, ByteIterator> values)
-  {
-    return insert(table, key, values);
-  }
-
-  /**
-   * Insert a record in the database. Any field/value pairs in the specified
-   * values HashMap will be written into the record with the specified record
-   * key.
-   * 
-   * @param table
-   *          The name of the table
-   * @param key
-   *          The record key of the record to insert.
-   * @param values
-   *          A HashMap of field/value pairs to insert in the record
-   * @return Zero on success, a non-zero error code on error
-   */
-  public int insert(String table, String key, HashMap<String, ByteIterator> values)
-  {
-    if (!_table.equals(table)) {
-      try 
-      {
-        client.set_keyspace(table);
-        _table = table;
-      }
-      catch (Exception e) 
-      {
-        e.printStackTrace();
-        e.printStackTrace(System.out);
-        return Error;
-      }
-    }
-    
-    for (int i = 0; i < OperationRetries; i++)
-    {
-      if (_debug)
-      {
-        System.out.println("Inserting key: " + key);
-      }
-      
-      try
-      { 
-        ByteBuffer wrappedKey = ByteBuffer.wrap(key.getBytes("UTF-8"));
-
-        ColumnOrSuperColumn column;
-        for (Map.Entry<String, ByteIterator> entry : values.entrySet())
-        {
-          column = new ColumnOrSuperColumn();
-          column.setColumn( new Column( ByteBuffer.wrap(entry.getKey().getBytes("UTF-8")), 
-                                        ByteBuffer.wrap(entry.getValue().toArray()),
-                                        System.currentTimeMillis()) );
-                                        
-          mutations.add(new Mutation().setColumn_or_supercolumn(column));
-        }
-        
-        mutationMap.put(column_family, mutations);
-        record.put(wrappedKey, mutationMap);
-
-        client.batch_mutate(record, ConsistencyLevel.ONE);
-        
-        mutations.clear();
-        mutationMap.clear();
-        record.clear();
-
-        return Ok;
-      } catch (Exception e)
-      {
-        errorexception = e;
-      }
-      try
-      {
-        Thread.sleep(500);
-      } catch (InterruptedException e)
-      {
-      }
-    }
-
-    errorexception.printStackTrace();
-    errorexception.printStackTrace(System.out);
-    return Error;
-  }
-
-  /**
-   * Delete a record from the database.
-   * 
-   * @param table
-   *          The name of the table
-   * @param key
-   *          The record key of the record to delete.
-   * @return Zero on success, a non-zero error code on error
-   */
-  public int delete(String table, String key)
-  {
-    if (!_table.equals(table)) {
-      try 
-      {
-        client.set_keyspace(table);
-        _table = table;
-      }
-      catch (Exception e) 
-      {
-        e.printStackTrace();
-        e.printStackTrace(System.out);
-        return Error;
-      }
-    }
-
-    for (int i = 0; i < OperationRetries; i++)
-    {
-      try
-      {
-        client.remove(ByteBuffer.wrap(key.getBytes("UTF-8")), 
-                      new ColumnPath(column_family), 
-                      System.currentTimeMillis(),
-                      ConsistencyLevel.ONE);
-
-        if (_debug)
-        {
-          System.out.println("Delete key: " + key);
-        }
-
-        return Ok;
-      } catch (Exception e)
-      {
-        errorexception = e;
-      }
-      try
-      {
-        Thread.sleep(500);
-      } catch (InterruptedException e)
-      {
-      }
-    }
-    errorexception.printStackTrace();
-    errorexception.printStackTrace(System.out);
-    return Error;
-  }
-
-  public static void main(String[] args)
-  {
-    CassandraClient7 cli = new CassandraClient7();
-
-    Properties props = new Properties();
-
-    props.setProperty("hosts", args[0]);
-    cli.setProperties(props);
-
-    try
-    {
-      cli.init();
-    } catch (Exception e)
-    {
-      e.printStackTrace();
-      System.exit(0);
-    }
-
-    HashMap<String, ByteIterator> vals = new HashMap<String, ByteIterator>();
-    vals.put("age", new StringByteIterator("57"));
-    vals.put("middlename", new StringByteIterator("bradley"));
-    vals.put("favoritecolor", new StringByteIterator("blue"));
-    int res = cli.insert("usertable", "BrianFrankCooper", vals);
-    System.out.println("Result of insert: " + res);
-
-    HashMap<String, ByteIterator> result = new HashMap<String, ByteIterator>();
-    HashSet<String> fields = new HashSet<String>();
-    fields.add("middlename");
-    fields.add("age");
-    fields.add("favoritecolor");
-    res = cli.read("usertable", "BrianFrankCooper", null, result);
-    System.out.println("Result of read: " + res);
-    for (String s : result.keySet())
-    {
-      System.out.println("[" + s + "]=[" + result.get(s) + "]");
-    }
-
-    res = cli.delete("usertable", "BrianFrankCooper");
-    System.out.println("Result of delete: " + res);
-  }
-
-  /*
-   * public static void main(String[] args) throws TException,
-   * InvalidRequestException, UnavailableException,
-   * UnsupportedEncodingException, NotFoundException {
-   * 
-   * 
-   * 
-   * String key_user_id = "1";
-   * 
-   * 
-   * 
-   * 
-   * client.insert("Keyspace1", key_user_id, new ColumnPath("Standard1", null,
-   * "age".getBytes("UTF-8")), "24".getBytes("UTF-8"), timestamp,
-   * ConsistencyLevel.ONE);
-   * 
-   * 
-   * // read single column ColumnPath path = new ColumnPath("Standard1", null,
-   * "name".getBytes("UTF-8"));
-   * 
-   * System.out.println(client.get("Keyspace1", key_user_id, path,
-   * ConsistencyLevel.ONE));
-   * 
-   * 
-   * // read entire row SlicePredicate predicate = new SlicePredicate(null, new
-   * SliceRange(new byte[0], new byte[0], false, 10));
-   * 
-   * ColumnParent parent = new ColumnParent("Standard1", null);
-   * 
-   * List<ColumnOrSuperColumn> results = client.get_slice("Keyspace1",
-   * key_user_id, parent, predicate, ConsistencyLevel.ONE);
-   * 
-   * for (ColumnOrSuperColumn result : results) {
-   * 
-   * Column column = result.column;
-   * 
-   * System.out.println(new String(column.name, "UTF-8") + " -> " + new
-   * String(column.value, "UTF-8"));
-   * 
-   * }
-   * 
-   * 
-   * 
-   * 
-   * }
-   */
-}
diff --git a/db/cassandra-0.8/lib/README b/db/cassandra-0.8/lib/README
deleted file mode 100644
index c02f9a57c79b73f0f7216667283d10332d846c1b..0000000000000000000000000000000000000000
--- a/db/cassandra-0.8/lib/README
+++ /dev/null
@@ -1 +0,0 @@
-This directory should contain jars for building and running Cassandra 0.8
diff --git a/db/cassandra-0.8/src/com/yahoo/ycsb/db/CassandraClient8.java b/db/cassandra-0.8/src/com/yahoo/ycsb/db/CassandraClient8.java
deleted file mode 100644
index ec8abf3234eea3aec767789ba09b0275e0a6bdf5..0000000000000000000000000000000000000000
--- a/db/cassandra-0.8/src/com/yahoo/ycsb/db/CassandraClient8.java
+++ /dev/null
@@ -1,619 +0,0 @@
-/**
- * Copyright (c) 2010 Yahoo! Inc. All rights reserved.
- *
- * Licensed 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. See accompanying
- * LICENSE file.
- */
-
-package com.yahoo.ycsb.db;
-
-import com.yahoo.ycsb.*;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Vector;
-import java.util.Random;
-import java.util.Properties;
-import java.nio.ByteBuffer;
-
-import org.apache.thrift.transport.TTransport;
-import org.apache.thrift.transport.TFramedTransport;
-import org.apache.thrift.transport.TSocket;
-import org.apache.thrift.protocol.TProtocol;
-import org.apache.thrift.protocol.TBinaryProtocol;
-import org.apache.cassandra.thrift.*;
-
-
-//XXXX if we do replication, fix the consistency levels
-/**
- * Cassandra 0.8 client for YCSB framework
- */
-public class CassandraClient8 extends DB
-{
-  static Random random = new Random();
-  public static final int Ok = 0;
-  public static final int Error = -1;
-  public static final ByteBuffer emptyByteBuffer = ByteBuffer.wrap(new byte[0]);
-
-  public int ConnectionRetries;
-  public int OperationRetries;
-  public String column_family;
-
-  public static final String CONNECTION_RETRY_PROPERTY = "cassandra.connectionretries";
-  public static final String CONNECTION_RETRY_PROPERTY_DEFAULT = "300";
-
-  public static final String OPERATION_RETRY_PROPERTY = "cassandra.operationretries";
-  public static final String OPERATION_RETRY_PROPERTY_DEFAULT = "300";
-
-  public static final String USERNAME_PROPERTY = "cassandra.username";
-  public static final String PASSWORD_PROPERTY = "cassandra.password";
-
-  public static final String COLUMN_FAMILY_PROPERTY = "cassandra.columnfamily";
-  public static final String COLUMN_FAMILY_PROPERTY_DEFAULT = "data";
-
-  TTransport tr;
-  Cassandra.Client client;
-
-  boolean _debug = false;
-  
-  String _table = "";
-  Exception errorexception = null;
-  
-  List<Mutation> mutations = new ArrayList<Mutation>();
-  Map<String, List<Mutation>> mutationMap = new HashMap<String, List<Mutation>>();
-  Map<ByteBuffer, Map<String, List<Mutation>>> record = new HashMap<ByteBuffer, Map<String, List<Mutation>>>();
-  
-  ColumnParent parent;
-
-  /**
-   * Initialize any state for this DB. Called once per DB instance; there is one
-   * DB instance per client thread.
-   */
-  public void init() throws DBException
-  {
-    String hosts = getProperties().getProperty("hosts");
-    if (hosts == null)
-    {
-      throw new DBException("Required property \"hosts\" missing for CassandraClient");
-    }
-
-    column_family = getProperties().getProperty(COLUMN_FAMILY_PROPERTY, COLUMN_FAMILY_PROPERTY_DEFAULT);
-    parent = new ColumnParent(column_family);
-
-    ConnectionRetries = Integer.parseInt(getProperties().getProperty(CONNECTION_RETRY_PROPERTY,
-        CONNECTION_RETRY_PROPERTY_DEFAULT));
-    OperationRetries = Integer.parseInt(getProperties().getProperty(OPERATION_RETRY_PROPERTY,
-        OPERATION_RETRY_PROPERTY_DEFAULT));
-
-    String username = getProperties().getProperty(USERNAME_PROPERTY);
-    String password = getProperties().getProperty(PASSWORD_PROPERTY);
-
-    _debug = Boolean.parseBoolean(getProperties().getProperty("debug", "false"));
-
-    String[] allhosts = hosts.split(",");
-    String myhost = allhosts[random.nextInt(allhosts.length)];
-
-    Exception connectexception = null;
-
-    for (int retry = 0; retry < ConnectionRetries; retry++)
-    {
-      tr = new TFramedTransport(new TSocket(myhost, 9160));
-      TProtocol proto = new TBinaryProtocol(tr);
-      client = new Cassandra.Client(proto);
-      try
-      {
-        tr.open();
-        connectexception = null;
-        break;
-      } catch (Exception e)
-      {
-        connectexception = e;
-      }
-      try
-      {
-        Thread.sleep(1000);
-      } catch (InterruptedException e)
-      {
-      }
-    }
-    if (connectexception != null)
-    {
-      System.err.println("Unable to connect to " + myhost + " after " + ConnectionRetries
-          + " tries");
-      System.out.println("Unable to connect to " + myhost + " after " + ConnectionRetries
-          + " tries");
-      throw new DBException(connectexception);
-    }
-
-    if (username != null && password != null) 
-    {
-        Map<String,String> cred = new HashMap<String,String>();
-        cred.put("username", username);
-        cred.put("password", password);
-        AuthenticationRequest req = new AuthenticationRequest(cred);
-        try 
-        {
-            client.login(req);
-        }
-        catch (Exception e)
-        {
-            throw new DBException(e);
-        }
-    }
-  }
-
-  /**
-   * Cleanup any state for this DB. Called once per DB instance; there is one DB
-   * instance per client thread.
-   */
-  public void cleanup() throws DBException
-  {
-    tr.close();
-  }
-
-  /**
-   * Read a record from the database. Each field/value pair from the result will
-   * be stored in a HashMap.
-   * 
-   * @param table
-   *          The name of the table
-   * @param key
-   *          The record key of the record to read.
-   * @param fields
-   *          The list of fields to read, or null for all of them
-   * @param result
-   *          A HashMap of field/value pairs for the result
-   * @return Zero on success, a non-zero error code on error
-   */
-  public int read(String table, String key, Set<String> fields, HashMap<String, ByteIterator> result)
-  {
-    if (!_table.equals(table)) {
-      try 
-      {
-        client.set_keyspace(table);
-        _table = table;
-      }
-      catch (Exception e) 
-      {
-        e.printStackTrace();
-        e.printStackTrace(System.out);
-        return Error;
-      }
-    }
-
-    for (int i = 0; i < OperationRetries; i++)
-    {
-
-      try
-      {
-        SlicePredicate predicate;
-        if (fields == null)
-        {
-          predicate = new SlicePredicate().setSlice_range(new SliceRange(emptyByteBuffer, emptyByteBuffer, false, 1000000));
-          
-        } else {
-          ArrayList<ByteBuffer> fieldlist = new ArrayList<ByteBuffer>(fields.size());
-          for (String s : fields)
-          {
-            fieldlist.add(ByteBuffer.wrap(s.getBytes("UTF-8")));
-          }
-
-          predicate = new SlicePredicate().setColumn_names(fieldlist);
-        }
-
-        List<ColumnOrSuperColumn> results = client.get_slice(ByteBuffer.wrap(key.getBytes("UTF-8")), parent, predicate, ConsistencyLevel.ONE);
-
-        if (_debug)
-        {
-          System.out.print("Reading key: " + key);
-        }
-
-        Column column;
-        String name;
-        ByteIterator value;
-        for (ColumnOrSuperColumn oneresult : results)
-        {
-
-          column = oneresult.column;
-	        name = new String(column.name.array(), column.name.position()+column.name.arrayOffset(), column.name.remaining());
-      	  value = new ByteArrayByteIterator(column.value.array(), column.value.position()+column.value.arrayOffset(), column.value.remaining());
-
-          result.put(name,value);
-
-          if (_debug)
-          {
-            System.out.print("(" + name + "=" + value + ")");
-          }
-        }
-
-        if (_debug)
-        {
-          System.out.println();
-        }
-
-        return Ok;
-      } catch (Exception e)
-      {
-        errorexception = e;
-      }
-
-      try
-      {
-        Thread.sleep(500);
-      } catch (InterruptedException e)
-      {
-      }
-    }
-    errorexception.printStackTrace();
-    errorexception.printStackTrace(System.out);
-    return Error;
-
-  }
-
-  /**
-   * Perform a range scan for a set of records in the database. Each field/value
-   * pair from the result will be stored in a HashMap.
-   * 
-   * @param table
-   *          The name of the table
-   * @param startkey
-   *          The record key of the first record to read.
-   * @param recordcount
-   *          The number of records to read
-   * @param fields
-   *          The list of fields to read, or null for all of them
-   * @param result
-   *          A Vector of HashMaps, where each HashMap is a set field/value
-   *          pairs for one record
-   * @return Zero on success, a non-zero error code on error
-   */
-  public int scan(String table, String startkey, int recordcount, Set<String> fields,
-      Vector<HashMap<String, ByteIterator>> result)
-  {
-    if (!_table.equals(table)) {
-      try 
-      {
-        client.set_keyspace(table);
-        _table = table;
-      }
-      catch (Exception e) 
-      {
-        e.printStackTrace();
-        e.printStackTrace(System.out);
-        return Error;
-      }
-    }
-    
-    for (int i = 0; i < OperationRetries; i++)
-    {
-
-      try
-      {
-        SlicePredicate predicate;
-        if (fields == null)
-        {
-          predicate = new SlicePredicate().setSlice_range(new SliceRange(emptyByteBuffer, emptyByteBuffer, false, 1000000));
-          
-        } else {
-          ArrayList<ByteBuffer> fieldlist = new ArrayList<ByteBuffer>(fields.size());
-          for (String s : fields)
-          {
-      	    fieldlist.add(ByteBuffer.wrap(s.getBytes("UTF-8")));
-          }
-          
-          predicate = new SlicePredicate().setColumn_names(fieldlist);
-        }
-        
-        KeyRange kr = new KeyRange().setStart_key(startkey.getBytes("UTF-8")).setEnd_key(new byte[] {}).setCount(recordcount);
-
-        List<KeySlice> results = client.get_range_slices(parent, predicate, kr, ConsistencyLevel.ONE);
-
-        if (_debug)
-        {
-          System.out.println("Scanning startkey: " + startkey);
-        }
-
-        HashMap<String, ByteIterator> tuple;
-        for (KeySlice oneresult : results)
-        {
-          tuple = new HashMap<String, ByteIterator>();
-          
-          Column column;
-          String name;
-          ByteIterator value;
-          for (ColumnOrSuperColumn onecol : oneresult.columns)
-          {
-	          column = onecol.column;
-      	    name = new String(column.name.array(), column.name.position()+column.name.arrayOffset(), column.name.remaining());
-      	    value = new ByteArrayByteIterator(column.value.array(), column.value.position()+column.value.arrayOffset(), column.value.remaining());
-            
-      	    tuple.put(name, value);
-
-            if (_debug)
-            {
-              System.out.print("(" + name + "=" + value + ")");
-            }
-          }
-
-          result.add(tuple);
-          if (_debug)
-          {
-            System.out.println();
-          }
-        }
-
-        return Ok;
-      } catch (Exception e)
-      {
-        errorexception = e;
-      }
-      try
-      {
-        Thread.sleep(500);
-      } catch (InterruptedException e)
-      {
-      }
-    }
-    errorexception.printStackTrace();
-    errorexception.printStackTrace(System.out);
-    return Error;
-  }
-
-  /**
-   * Update a record in the database. Any field/value pairs in the specified
-   * values HashMap will be written into the record with the specified record
-   * key, overwriting any existing values with the same field name.
-   * 
-   * @param table
-   *          The name of the table
-   * @param key
-   *          The record key of the record to write.
-   * @param values
-   *          A HashMap of field/value pairs to update in the record
-   * @return Zero on success, a non-zero error code on error
-   */
-  public int update(String table, String key, HashMap<String, ByteIterator> values)
-  {
-    return insert(table, key, values);
-  }
-
-  /**
-   * Insert a record in the database. Any field/value pairs in the specified
-   * values HashMap will be written into the record with the specified record
-   * key.
-   * 
-   * @param table
-   *          The name of the table
-   * @param key
-   *          The record key of the record to insert.
-   * @param values
-   *          A HashMap of field/value pairs to insert in the record
-   * @return Zero on success, a non-zero error code on error
-   */
-  public int insert(String table, String key, HashMap<String, ByteIterator> values)
-  {
-    if (!_table.equals(table)) {
-      try 
-      {
-        client.set_keyspace(table);
-        _table = table;
-      }
-      catch (Exception e) 
-      {
-        e.printStackTrace();
-        e.printStackTrace(System.out);
-        return Error;
-      }
-    }
-    
-    for (int i = 0; i < OperationRetries; i++)
-    {
-      if (_debug)
-      {
-        System.out.println("Inserting key: " + key);
-      }
-      
-      try
-      { 
-        ByteBuffer wrappedKey = ByteBuffer.wrap(key.getBytes("UTF-8"));
-
-        Column col;
-        ColumnOrSuperColumn column;
-        for (Map.Entry<String, ByteIterator> entry : values.entrySet())
-        {
-          col = new Column();
-          col.setName(ByteBuffer.wrap(entry.getKey().getBytes("UTF-8")));
-          col.setValue(ByteBuffer.wrap(entry.getValue().toArray()));
-          col.setTimestamp(System.currentTimeMillis());
-
-          column = new ColumnOrSuperColumn();
-          column.setColumn(col);
-                                        
-          mutations.add(new Mutation().setColumn_or_supercolumn(column));
-        }
-        
-        mutationMap.put(column_family, mutations);
-        record.put(wrappedKey, mutationMap);
-
-        client.batch_mutate(record, ConsistencyLevel.ONE);
-        
-        mutations.clear();
-        mutationMap.clear();
-        record.clear();
-
-        return Ok;
-      } catch (Exception e)
-      {
-        errorexception = e;
-      }
-      try
-      {
-        Thread.sleep(500);
-      } catch (InterruptedException e)
-      {
-      }
-    }
-
-    errorexception.printStackTrace();
-    errorexception.printStackTrace(System.out);
-    return Error;
-  }
-
-  /**
-   * Delete a record from the database.
-   * 
-   * @param table
-   *          The name of the table
-   * @param key
-   *          The record key of the record to delete.
-   * @return Zero on success, a non-zero error code on error
-   */
-  public int delete(String table, String key)
-  {
-    if (!_table.equals(table)) {
-      try 
-      {
-        client.set_keyspace(table);
-        _table = table;
-      }
-      catch (Exception e) 
-      {
-        e.printStackTrace();
-        e.printStackTrace(System.out);
-        return Error;
-      }
-    }
-
-    for (int i = 0; i < OperationRetries; i++)
-    {
-      try
-      {
-        client.remove(ByteBuffer.wrap(key.getBytes("UTF-8")), 
-                      new ColumnPath(column_family), 
-                      System.currentTimeMillis(),
-                      ConsistencyLevel.ONE);
-
-        if (_debug)
-        {
-          System.out.println("Delete key: " + key);
-        }
-
-        return Ok;
-      } catch (Exception e)
-      {
-        errorexception = e;
-      }
-      try
-      {
-        Thread.sleep(500);
-      } catch (InterruptedException e)
-      {
-      }
-    }
-    errorexception.printStackTrace();
-    errorexception.printStackTrace(System.out);
-    return Error;
-  }
-
-  public static void main(String[] args)
-  {
-    CassandraClient8 cli = new CassandraClient8();
-
-    Properties props = new Properties();
-
-    props.setProperty("hosts", args[0]);
-    cli.setProperties(props);
-
-    try
-    {
-      cli.init();
-    } catch (Exception e)
-    {
-      e.printStackTrace();
-      System.exit(0);
-    }
-
-    HashMap<String, ByteIterator> vals = new HashMap<String, ByteIterator>();
-    vals.put("age", new StringByteIterator("57"));
-    vals.put("middlename", new StringByteIterator("bradley"));
-    vals.put("favoritecolor", new StringByteIterator("blue"));
-    int res = cli.insert("usertable", "BrianFrankCooper", vals);
-    System.out.println("Result of insert: " + res);
-
-    HashMap<String, ByteIterator> result = new HashMap<String, ByteIterator>();
-    HashSet<String> fields = new HashSet<String>();
-    fields.add("middlename");
-    fields.add("age");
-    fields.add("favoritecolor");
-    res = cli.read("usertable", "BrianFrankCooper", null, result);
-    System.out.println("Result of read: " + res);
-    for (String s : result.keySet())
-    {
-      System.out.println("[" + s + "]=[" + result.get(s) + "]");
-    }
-
-    res = cli.delete("usertable", "BrianFrankCooper");
-    System.out.println("Result of delete: " + res);
-  }
-
-  /*
-   * public static void main(String[] args) throws TException,
-   * InvalidRequestException, UnavailableException,
-   * UnsupportedEncodingException, NotFoundException {
-   * 
-   * 
-   * 
-   * String key_user_id = "1";
-   * 
-   * 
-   * 
-   * 
-   * client.insert("Keyspace1", key_user_id, new ColumnPath("Standard1", null,
-   * "age".getBytes("UTF-8")), "24".getBytes("UTF-8"), timestamp,
-   * ConsistencyLevel.ONE);
-   * 
-   * 
-   * // read single column ColumnPath path = new ColumnPath("Standard1", null,
-   * "name".getBytes("UTF-8"));
-   * 
-   * System.out.println(client.get("Keyspace1", key_user_id, path,
-   * ConsistencyLevel.ONE));
-   * 
-   * 
-   * // read entire row SlicePredicate predicate = new SlicePredicate(null, new
-   * SliceRange(new byte[0], new byte[0], false, 10));
-   * 
-   * ColumnParent parent = new ColumnParent("Standard1", null);
-   * 
-   * List<ColumnOrSuperColumn> results = client.get_slice("Keyspace1",
-   * key_user_id, parent, predicate, ConsistencyLevel.ONE);
-   * 
-   * for (ColumnOrSuperColumn result : results) {
-   * 
-   * Column column = result.column;
-   * 
-   * System.out.println(new String(column.name, "UTF-8") + " -> " + new
-   * String(column.value, "UTF-8"));
-   * 
-   * }
-   * 
-   * 
-   * 
-   * 
-   * }
-   */
-}
diff --git a/db/gemfire/lib/README.txt b/db/gemfire/lib/README.txt
deleted file mode 100644
index 46697a105dd39c9d87cc563d73b61ba8e9a50c37..0000000000000000000000000000000000000000
--- a/db/gemfire/lib/README.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-This directory should contain gemfire.jar for compiling GemFireClient.
-
-GemFireClient can be compiled using target:
-$ ant dbcompile-gemfire
-
-Running benchmark.
-1. Copy cache.xml from this dir to your GemFire install directory ($GEMFIRE_HOME)
-2. start GemFire cache server
-  - $ cd $GEMFIRE_HOME
-  - $ bin/cacheserver start -J-Xms42g -J-Xmx42g -J-XX:+UseConcMarkSweepGC -J-XX:CMSInitiatingOccupancyFraction=70
-3. Add ycsb.jar and gemfire.jar to CLASSPATH.
-4. run YCSB workload.
-
-GemFire can be run either in client-server or peer-to-peer mode.
-By default com.yahoo.ycsb.db.GemFireClient connects as a client to GemFire server running on localhost on default port (40404). host name and port of a GemFire server running elsewhere can be specified by properties "gemfire.serverhost" and "gemfire.serverport" respectively. Example:
-$ java com.yahoo.ycsb.Client -load -db com.yahoo.ycsb.db.GemFireClient -P workloads/workloada -p gemfire.serverhost=host2 -p gemfire.serverport=3333
-
-To run com.yahoo.ycsb.db.GemFireClient as a peer to existing GemFire members, use property "gemfire.topology" like so:
-$ java com.yahoo.ycsb.Client -load -db com.yahoo.ycsb.db.GemFireClient -P workloads/workloada -p gemfire.topology=p2p 
-
-Locators can be used for member discovery, either in client-server or peer-to-peer mode. Please see GemFire docs for details. locators can be specified like so:
-$ java com.yahoo.ycsb.Client -load -db com.yahoo.ycsb.db.GemFireClient -P workloads/workloada -p gemfire.locator=host1[port1],host2[port2]
-
-Please refer to GemFire docs here: https://www.vmware.com/support/pubs/vfabric-gemfire.html.
-Questions? visit: http://forums.gemstone.com
diff --git a/db/hbase/lib/README b/db/hbase/lib/README
deleted file mode 100644
index dd9411b139d7a7682ce8391dc9fc2d2bb32e08f0..0000000000000000000000000000000000000000
--- a/db/hbase/lib/README
+++ /dev/null
@@ -1 +0,0 @@
-This directory should contain jars for building and running HBase
diff --git a/db/infinispan-5.0/lib/README b/db/infinispan-5.0/lib/README
deleted file mode 100644
index 93bd19d9aed594466c029d136d63404b5957bdea..0000000000000000000000000000000000000000
--- a/db/infinispan-5.0/lib/README
+++ /dev/null
@@ -1,25 +0,0 @@
-This directory should contain the Infinispan jars.
-
-You do this by downloading the latest Infinispan 5.x release from http://sourceforge.net/projects/infinispan/files/infinispan
-
-It is recommended that you download the bin.ZIP archive, such as infinispan-5.0.0.CR7-bin.zip
-
-Extract this archive somewhere, and copy the necessary jar files to this directory.
-
-     $ unzip -a infinispan-5.0.0.CR7-bin.zip -d /tmp
-     $ cp /tmp/infinispan-5.0.0.CR7/infinispan-core.jar .
-     $ cp /tmp/infinispan-5.0.0.CR7/lib/* .
-
-The jar files you will need are:
-
-  * infinispan-core.jar
-  * jboss-logging.jar
-  * jboss-marshalling.jar
-  * jboss-marshalling-river.jar
-  * jboss-transaction-api.jar
-  * jgroups.jar
-
-
-
-
-
diff --git a/db/jdbc/lib/README b/db/jdbc/lib/README
deleted file mode 100755
index b57cd25461f54e0bf20b41ce239c204b5f3fe683..0000000000000000000000000000000000000000
--- a/db/jdbc/lib/README
+++ /dev/null
@@ -1 +0,0 @@
-This directory should contain jars for building and running the JDBC database.
diff --git a/db/mapkeeper/lib/README b/db/mapkeeper/lib/README
deleted file mode 100644
index a59623a18f5acb0cc98865253127e25658b39a4a..0000000000000000000000000000000000000000
--- a/db/mapkeeper/lib/README
+++ /dev/null
@@ -1,6 +0,0 @@
-This directory should contain 2 jars; mapkeeper.jar and libthrift-0.6.1.jar.
-To get them, do:
-
-$ wget https://raw.github.com/m1ch1/mapkeeper/master/lib/mapkeeper.jar
-$ wget https://raw.github.com/m1ch1/mapkeeper/master/lib/libthrift-0.6.1.jar
-
diff --git a/db/mongodb/lib/README b/db/mongodb/lib/README
deleted file mode 100644
index d255a2ec6f3f3e7de771783c0c7c28c4e0e839ad..0000000000000000000000000000000000000000
--- a/db/mongodb/lib/README
+++ /dev/null
@@ -1 +0,0 @@
-This directory should contain jars for building and running MongoDB
diff --git a/db/redis/lib/README b/db/redis/lib/README
deleted file mode 100644
index 773da82f6dc97f42c7e7052fbb668315a24ae257..0000000000000000000000000000000000000000
--- a/db/redis/lib/README
+++ /dev/null
@@ -1,4 +0,0 @@
-This directory should contain jars for building and running Redis, namely
-jedis.jar (tested with 1.5.2).
-
-Jedis is available from https://github.com/xetorthio/jedis/downloads
diff --git a/db/voldemort/lib/README b/db/voldemort/lib/README
deleted file mode 100644
index 9dbdbc9269d0b1a413b8b7ccba4291629967e74e..0000000000000000000000000000000000000000
--- a/db/voldemort/lib/README
+++ /dev/null
@@ -1,26 +0,0 @@
-This directory should contain jars for building and running Voldemort
-
-HOWTO
-a) Get Voldemort 
-> mkdir voldemort-0.81 ; cd voldemort-0.81
-> git clone git@github.com:voldemort/voldemort.git
-> git checkout -b 81 origin/release-081
-OR
-> wget http://github.com/downloads/voldemort/voldemort/voldemort-0.81.tar.gz 
-> tar xvfz voldemort-0.81.tar.gz
-> cd voldemort-0.81
-
-b) Copy libs
-> ant # inside voldemort-0.81 folder
-> cp dist/voldemort-*0.81.jar $YCSB_PATH/db/voldemort/lib/.
-> cp lib/*.jar $YCSB_PATH/db/voldemort/lib/.
-
-c) Compile
-> cd $YCSB_PATH
-> ant ; ant dbcompile-voldemort
-
-d) Start test voldemort
-> voldemort-0.81/bin/voldemort-server.sh $YCSB_PATH/db/voldemort/ & # Reads the files in config folder
-
-e) Run YCSB 
-> java com.yahoo.ycsb.CommandLine -db com.yahoo.ycsb.db.VoldemortClient -p bootstrap_urls=tcp://localhost:6666
diff --git a/distribution/lib/hbase-binding-0.1.3.jar b/distribution/lib/hbase-binding-0.1.3.jar
new file mode 100644
index 0000000000000000000000000000000000000000..1041e03f62abaff37abc0d4ec3be72c414f1cd17
Binary files /dev/null and b/distribution/lib/hbase-binding-0.1.3.jar differ
diff --git a/distribution/pom.xml b/distribution/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..10a62a936dd1a9762e50846bc03dac913d3a5b6d
--- /dev/null
+++ b/distribution/pom.xml
@@ -0,0 +1,99 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.ycsb</groupId>
+    <artifactId>root</artifactId>
+    <version>0.1.3</version>
+  </parent>
+
+  <artifactId>ycsb-distribution</artifactId>
+  <name>YCSB Release Distribution Builder</name>
+  <packaging>pom</packaging>
+
+  <description>
+    This module creates the release package of the YCSB with all DB library bindings.
+    It is only used by the build process and does not contain any real
+    code of itself.
+  </description>
+
+  <dependencies>
+    <!--dependency>
+      <groupId>org.apache.ycsb</groupId>
+      <artifactId>core</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.ycsb</groupId>
+      <artifactId>hbase-binding</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.ycsb</groupId>
+      <artifactId>cassandra-binding</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.ycsb</groupId>
+      <artifactId>gemfire-binding</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.ycsb</groupId>
+      <artifactId>infinispan-binding</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.ycsb</groupId>
+      <artifactId>jdbc-binding</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.ycsb</groupId>
+      <artifactId>mapkeeper-binding</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.ycsb</groupId>
+      <artifactId>mongodb-binding</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.ycsb</groupId>
+      <artifactId>redis-binding</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.ycsb</groupId>
+      <artifactId>voldemort-binding</artifactId>
+      <version>${project.version}</version>
+    </dependency-->
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-assembly-plugin</artifactId>
+        <version>${maven.assembly.version}</version>
+        <configuration>
+          <descriptors>
+            <descriptor>src/main/assembly/distribution.xml</descriptor>
+          </descriptors>
+        </configuration>
+        <executions>
+          <execution>
+            <phase>package</phase>
+            <goals>
+              <goal>single</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+
+    </plugins>
+  </build>
+
+</project>
+
diff --git a/distribution/src/main/assembly/distribution.xml b/distribution/src/main/assembly/distribution.xml
new file mode 100644
index 0000000000000000000000000000000000000000..47768874774a140bd71e4630fadec5a66b4c0e6f
--- /dev/null
+++ b/distribution/src/main/assembly/distribution.xml
@@ -0,0 +1,42 @@
+<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
+  <id>package</id>
+  <formats>
+    <format>tar.gz</format>
+  </formats>
+  <includeBaseDirectory>true</includeBaseDirectory>
+  <moduleSets>
+    <moduleSet>
+      <useAllReactorProjects>true</useAllReactorProjects>
+      <includeSubModules>true</includeSubModules>
+      <sources>
+        <includeModuleDirectory>false</includeModuleDirectory>
+        <fileSets>
+          <fileSet>
+            <directory>src/main/conf</directory>
+            <outputDirectory>conf</outputDirectory>
+            <fileMode>0644</fileMode>
+          </fileSet>
+          <fileSet>
+            <directory>src/main/bin</directory>
+            <outputDirectory>bin</outputDirectory>
+	    <fileMode>0755</fileMode>
+          </fileSet>
+          <fileSet>
+            <directory>src/main/resources/workloads</directory>
+            <outputDirectory>workloads</outputDirectory>
+	    <fileMode>0644</fileMode>
+          </fileSet>
+	  <fileSet>
+            <outputDirectory>lib</outputDirectory>
+            <directory>target</directory>
+    	    <includes>
+              <include>*.jar</include>
+            </includes>
+            <fileMode>0644</fileMode>
+          </fileSet>
+        </fileSets>
+      </sources>
+    </moduleSet>
+  </moduleSets>
+</assembly>
diff --git a/bin/ycsb.sh b/distribution/src/main/bin/ycsb.sh
old mode 100644
new mode 100755
similarity index 100%
rename from bin/ycsb.sh
rename to distribution/src/main/bin/ycsb.sh
diff --git a/workloads/workloada b/distribution/src/main/resources/workloads/workloada
similarity index 100%
rename from workloads/workloada
rename to distribution/src/main/resources/workloads/workloada
diff --git a/workloads/workloadb b/distribution/src/main/resources/workloads/workloadb
similarity index 100%
rename from workloads/workloadb
rename to distribution/src/main/resources/workloads/workloadb
diff --git a/workloads/workloadc b/distribution/src/main/resources/workloads/workloadc
similarity index 100%
rename from workloads/workloadc
rename to distribution/src/main/resources/workloads/workloadc
diff --git a/workloads/workloadd b/distribution/src/main/resources/workloads/workloadd
similarity index 100%
rename from workloads/workloadd
rename to distribution/src/main/resources/workloads/workloadd
diff --git a/workloads/workloade b/distribution/src/main/resources/workloads/workloade
similarity index 100%
rename from workloads/workloade
rename to distribution/src/main/resources/workloads/workloade
diff --git a/workloads/workloadf b/distribution/src/main/resources/workloads/workloadf
similarity index 100%
rename from workloads/workloadf
rename to distribution/src/main/resources/workloads/workloadf
diff --git a/gemfire/pom.xml b/gemfire/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ba979440b3443d55afae80252745c5d05160c536
--- /dev/null
+++ b/gemfire/pom.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.apache.ycsb</groupId>
+    <artifactId>root</artifactId>
+    <version>0.1.3</version>
+  </parent>
+  
+  <artifactId>gemfire-binding</artifactId>
+  <name>Gemfire DB Binding</name>
+  <packaging>jar</packaging>
+
+  <dependencies>
+    <dependency>
+      <groupId>com.gemstone.gemfire</groupId>
+      <artifactId>gemfire</artifactId>
+      <version>6.6</version>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-core</artifactId>
+      <version>${gemfire.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.ycsb</groupId>
+      <artifactId>core</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+  </dependencies>
+  
+  <repositories>
+    <repository>
+      <id>gemstone</id>
+      <url>http://dist.gemstone.com.s3.amazonaws.com/maven/release/</url>
+    </repository>
+  </repositories>	
+ 
+  <build>
+    <plugins>
+     <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-assembly-plugin</artifactId>
+        <version>${maven.assembly.version}</version>
+        <configuration>
+          <descriptorRefs>
+            <descriptorRef>jar-with-dependencies</descriptorRef>
+          </descriptorRefs>
+          <appendAssemblyId>false</appendAssemblyId>
+        </configuration>
+        <executions>
+          <execution>
+            <phase>package</phase>
+            <goals>
+              <goal>single</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+
+</project>
diff --git a/db/gemfire/lib/cache.xml b/gemfire/src/main/conf/cache.xml
similarity index 100%
rename from db/gemfire/lib/cache.xml
rename to gemfire/src/main/conf/cache.xml
diff --git a/db/gemfire/src/com/yahoo/ycsb/db/GemFireClient.java b/gemfire/src/main/java/com/yahoo/ycsb/db/GemFireClient.java
similarity index 100%
rename from db/gemfire/src/com/yahoo/ycsb/db/GemFireClient.java
rename to gemfire/src/main/java/com/yahoo/ycsb/db/GemFireClient.java
diff --git a/hbase/pom.xml b/hbase/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8036431ba9c569b39a427601f668c02509d9db49
--- /dev/null
+++ b/hbase/pom.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.apache.ycsb</groupId>
+    <artifactId>root</artifactId>
+    <version>0.1.3</version>
+  </parent>
+  
+  <artifactId>hbase-binding</artifactId>
+  <name>HBase DB Binding</name>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.hbase</groupId>
+      <artifactId>hbase</artifactId>
+      <version>${hbase.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.ycsb</groupId>
+      <artifactId>core</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+     <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-assembly-plugin</artifactId>
+        <version>${maven.assembly.version}</version>
+        <configuration>
+          <descriptorRefs>
+            <descriptorRef>jar-with-dependencies</descriptorRef>
+          </descriptorRefs>
+          <appendAssemblyId>false</appendAssemblyId>
+        </configuration>
+        <executions>
+          <execution>
+            <phase>package</phase>
+            <goals>
+              <goal>single</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+	
+</project>
diff --git a/db/hbase/conf/hbase-site.xml b/hbase/src/main/conf/hbase-site.xml
similarity index 100%
rename from db/hbase/conf/hbase-site.xml
rename to hbase/src/main/conf/hbase-site.xml
diff --git a/db/hbase/src/com/yahoo/ycsb/db/HBaseClient.java b/hbase/src/main/java/com/yahoo/ycsb/db/HBaseClient.java
similarity index 100%
rename from db/hbase/src/com/yahoo/ycsb/db/HBaseClient.java
rename to hbase/src/main/java/com/yahoo/ycsb/db/HBaseClient.java
diff --git a/infinispan/pom.xml b/infinispan/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..849f4ddaa6aa3ac2ae20330af00e02f51d3e2810
--- /dev/null
+++ b/infinispan/pom.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.apache.ycsb</groupId>
+    <artifactId>root</artifactId>
+    <version>0.1.3</version>
+  </parent>
+  
+  <artifactId>infispan-binding</artifactId>
+  <name>Infispan DB Binding</name>
+  <packaging>jar</packaging>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.jboss.as</groupId>
+      <artifactId>jboss-as-clustering-infinispan</artifactId>
+      <version>${infinispan.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.ycsb</groupId>
+      <artifactId>core</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+  </dependencies>
+ 
+  <build>
+    <plugins>
+     <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-assembly-plugin</artifactId>
+        <version>${maven.assembly.version}</version>
+        <configuration>
+          <descriptorRefs>
+            <descriptorRef>jar-with-dependencies</descriptorRef>
+          </descriptorRefs>
+          <appendAssemblyId>false</appendAssemblyId>
+        </configuration>
+        <executions>
+          <execution>
+            <phase>package</phase>
+            <goals>
+              <goal>single</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+	
+</project>
diff --git a/db/infinispan-5.0/conf/infinispan-config.xml b/infinispan/src/main/conf/infinispan-config.xml
similarity index 100%
rename from db/infinispan-5.0/conf/infinispan-config.xml
rename to infinispan/src/main/conf/infinispan-config.xml
diff --git a/db/infinispan-5.0/src/com/yahoo/ycsb/db/InfinispanClient.java b/infinispan/src/main/java/com/yahoo/ycsb/db/InfinispanClient.java
similarity index 100%
rename from db/infinispan-5.0/src/com/yahoo/ycsb/db/InfinispanClient.java
rename to infinispan/src/main/java/com/yahoo/ycsb/db/InfinispanClient.java
diff --git a/jdbc/pom.xml b/jdbc/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b0a5bffc015696707050de5b9c35d4976c1a1fb8
--- /dev/null
+++ b/jdbc/pom.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.apache.ycsb</groupId>
+    <artifactId>root</artifactId>
+    <version>0.1.3</version>
+  </parent>
+  
+  <artifactId>jbdc-binding</artifactId>
+  <name>JDBC DB Binding</name>
+  <packaging>jar</packaging>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.openjpa</groupId>
+      <artifactId>openjpa-jdbc</artifactId>
+      <version>${openjpa.jdbc.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.ycsb</groupId>
+      <artifactId>core</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+     <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-assembly-plugin</artifactId>
+        <version>${maven.assembly.version}</version>
+        <configuration>
+          <descriptorRefs>
+            <descriptorRef>jar-with-dependencies</descriptorRef>
+          </descriptorRefs>
+          <appendAssemblyId>false</appendAssemblyId>
+        </configuration>
+        <executions>
+          <execution>
+            <phase>package</phase>
+            <goals>
+              <goal>single</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+	
+</project>
diff --git a/db/jdbc/conf/db.properties b/jdbc/src/main/conf/db.properties
similarity index 100%
rename from db/jdbc/conf/db.properties
rename to jdbc/src/main/conf/db.properties
diff --git a/db/jdbc/conf/h2.properties b/jdbc/src/main/conf/h2.properties
similarity index 100%
rename from db/jdbc/conf/h2.properties
rename to jdbc/src/main/conf/h2.properties
diff --git a/db/jdbc/src/com/yahoo/ycsb/db/JdbcDBCli.java b/jdbc/src/main/java/com/yahoo/ycsb/db/JdbcDBCli.java
similarity index 100%
rename from db/jdbc/src/com/yahoo/ycsb/db/JdbcDBCli.java
rename to jdbc/src/main/java/com/yahoo/ycsb/db/JdbcDBCli.java
diff --git a/db/jdbc/src/com/yahoo/ycsb/db/JdbcDBClient.java b/jdbc/src/main/java/com/yahoo/ycsb/db/JdbcDBClient.java
similarity index 100%
rename from db/jdbc/src/com/yahoo/ycsb/db/JdbcDBClient.java
rename to jdbc/src/main/java/com/yahoo/ycsb/db/JdbcDBClient.java
diff --git a/db/jdbc/src/com/yahoo/ycsb/db/JdbcDBClientConstants.java b/jdbc/src/main/java/com/yahoo/ycsb/db/JdbcDBClientConstants.java
similarity index 100%
rename from db/jdbc/src/com/yahoo/ycsb/db/JdbcDBClientConstants.java
rename to jdbc/src/main/java/com/yahoo/ycsb/db/JdbcDBClientConstants.java
diff --git a/db/jdbc/src/com/yahoo/ycsb/db/JdbcDBCreateTable.java b/jdbc/src/main/java/com/yahoo/ycsb/db/JdbcDBCreateTable.java
similarity index 100%
rename from db/jdbc/src/com/yahoo/ycsb/db/JdbcDBCreateTable.java
rename to jdbc/src/main/java/com/yahoo/ycsb/db/JdbcDBCreateTable.java
diff --git a/db/jdbc/sql/README b/jdbc/src/main/resources/sql/README
similarity index 100%
rename from db/jdbc/sql/README
rename to jdbc/src/main/resources/sql/README
diff --git a/db/jdbc/sql/create_table.mysql b/jdbc/src/main/resources/sql/create_table.mysql
similarity index 100%
rename from db/jdbc/sql/create_table.mysql
rename to jdbc/src/main/resources/sql/create_table.mysql
diff --git a/db/jdbc/sql/create_table.sql b/jdbc/src/main/resources/sql/create_table.sql
similarity index 100%
rename from db/jdbc/sql/create_table.sql
rename to jdbc/src/main/resources/sql/create_table.sql
diff --git a/lib/jackson-core-asl-1.5.2.jar b/lib/jackson-core-asl-1.5.2.jar
deleted file mode 100644
index 24107e68fedb0ea04291fa769cf992fc53608c60..0000000000000000000000000000000000000000
Binary files a/lib/jackson-core-asl-1.5.2.jar and /dev/null differ
diff --git a/lib/jackson-mapper-asl-1.5.2.jar b/lib/jackson-mapper-asl-1.5.2.jar
deleted file mode 100644
index ebf9b5ef21631c4c76e21ae6fc35b0a9f7336d2c..0000000000000000000000000000000000000000
Binary files a/lib/jackson-mapper-asl-1.5.2.jar and /dev/null differ
diff --git a/mapkeeper/pom.xml b/mapkeeper/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6cd1cc85fae013c6e3a48195f389e69feb6c12c0
--- /dev/null
+++ b/mapkeeper/pom.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.apache.ycsb</groupId>
+    <artifactId>root</artifactId>
+    <version>0.1.3</version>
+  </parent>
+  
+  <artifactId>mapkeeper-binding</artifactId>
+  <name>Mapkeeper DB Binding</name>
+  <packaging>jar</packaging>
+
+  <dependencies>
+     <dependency>
+       <groupId>??</groupId>
+       <artifactId>??</artifactId>
+       <version>${mapkeeper.version}</version>
+     </dependency>
+     <dependency>
+       <groupId>org.apache.ycsb</groupId>
+       <artifactId>core</artifactId>
+       <version>${project.version}</version>
+     </dependency>
+  </dependencies>
+  
+  <build>
+    <plugins>
+     <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-assembly-plugin</artifactId>
+        <version>${maven.assembly.version}</version>
+        <configuration>
+          <descriptorRefs>
+            <descriptorRef>jar-with-dependencies</descriptorRef>
+          </descriptorRefs>
+          <appendAssemblyId>false</appendAssemblyId>
+        </configuration>
+        <executions>
+          <execution>
+            <phase>package</phase>
+            <goals>
+              <goal>single</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+	
+</project>
diff --git a/db/mapkeeper/src/com/yahoo/ycsb/db/MapKeeperClient.java b/mapkeeper/src/main/java/com/yahoo/ycsb/db/MapKeeperClient.java
similarity index 100%
rename from db/mapkeeper/src/com/yahoo/ycsb/db/MapKeeperClient.java
rename to mapkeeper/src/main/java/com/yahoo/ycsb/db/MapKeeperClient.java
diff --git a/mongodb/pom.xml b/mongodb/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..124f33ba2d338187555a16839494a15d597f4f42
--- /dev/null
+++ b/mongodb/pom.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.apache.ycsb</groupId>
+    <artifactId>root</artifactId>
+    <version>0.1.3</version>
+  </parent>
+  
+  <artifactId>mongodb-binding</artifactId>
+  <name>Mongo DB Binding</name>
+  <packaging>jar</packaging>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.mongodb</groupId>
+      <artifactId>mongo-java-driver</artifactId>
+      <version>${mongodb.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.ycsb</groupId>
+      <artifactId>core</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+  </dependencies>
+ 
+  <build>
+    <plugins>
+     <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-assembly-plugin</artifactId>
+        <version>${maven.assembly.version}</version>
+        <configuration>
+          <descriptorRefs>
+            <descriptorRef>jar-with-dependencies</descriptorRef>
+          </descriptorRefs>
+          <appendAssemblyId>false</appendAssemblyId>
+        </configuration>
+        <executions>
+          <execution>
+            <phase>package</phase>
+            <goals>
+              <goal>single</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+	
+</project>
diff --git a/db/mongodb/src/com/yahoo/ycsb/db/MongoDbClient.java b/mongodb/src/main/java/com/yahoo/ycsb/db/MongoDbClient.java
similarity index 100%
rename from db/mongodb/src/com/yahoo/ycsb/db/MongoDbClient.java
rename to mongodb/src/main/java/com/yahoo/ycsb/db/MongoDbClient.java
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e19dd364a01df6d0f1a1b5229ff030af4d97ffc9
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.apache.ycsb</groupId>
+  <artifactId>root</artifactId>
+  <version>0.1.3</version>
+  <packaging>pom</packaging>
+
+  <name>YCSB Root</name>
+
+  <!-- Properties Management -->
+  <properties>
+    <maven.assembly.version>2.2.1</maven.assembly.version>
+    <hbase.version>0.90.5</hbase.version>
+    <cassandra.version>1.0.7</cassandra.version>
+    <gemfire.version>1.0.0.M3</gemfire.version>
+    <infinispan.version>7.1.0.CR1</infinispan.version>
+    <openjpa.jdbc.version>2.1.1</openjpa.jdbc.version>
+    <mongodb.version>2.7.2</mongodb.version>
+    <redis.version>2.0.0</redis.version>
+    <voldemort.version>0.81</voldemort.version>
+  </properties>
+
+  <modules>
+    <module>core</module>
+    <module>hbase</module>
+    <module>cassandra</module>
+    <!--module>gemfire</module-->
+    <module>infinispan</module>
+    <module>jdbc</module>
+    <!--module>mapkeeper</module-->
+    <module>mongodb</module>
+    <module>redis</module>
+    <module>voldemort</module>
+    <module>distribution</module>
+  </modules>
+
+  <description>
+    This is the top level project that builds, packages the core and all the DB bindings for YCSB infrastructure.
+  </description>
+
+</project>
diff --git a/redis/pom.xml b/redis/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ab1e24dbacfa59041520654f752ef5a18d877078
--- /dev/null
+++ b/redis/pom.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.apache.ycsb</groupId>
+    <artifactId>root</artifactId>
+    <version>0.1.3</version>
+  </parent>
+  
+  <artifactId>redis-binding</artifactId>
+  <name>Redis DB Binding</name>
+  <packaging>jar</packaging>
+
+  <dependencies>
+    <dependency>
+      <groupId>redis.clients</groupId>
+      <artifactId>jedis</artifactId>
+      <version>${redis.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.ycsb</groupId>
+      <artifactId>core</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+  </dependencies>
+
+ <build>
+    <plugins>
+     <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-assembly-plugin</artifactId>
+        <version>${maven.assembly.version}</version>
+        <configuration>
+          <descriptorRefs>
+            <descriptorRef>jar-with-dependencies</descriptorRef>
+          </descriptorRefs>
+          <appendAssemblyId>false</appendAssemblyId>
+        </configuration>
+        <executions>
+          <execution>
+            <phase>package</phase>
+            <goals>
+              <goal>single</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+
+	
+</project>
diff --git a/db/redis/src/com/yahoo/ycsb/db/RedisClient.java b/redis/src/main/java/com/yahoo/ycsb/db/RedisClient.java
similarity index 100%
rename from db/redis/src/com/yahoo/ycsb/db/RedisClient.java
rename to redis/src/main/java/com/yahoo/ycsb/db/RedisClient.java
diff --git a/voldemort/pom.xml b/voldemort/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a79c6eac3a8e7c54186cef186578327c8d2c06c0
--- /dev/null
+++ b/voldemort/pom.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+	
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.apache.ycsb</groupId>
+    <artifactId>root</artifactId>
+    <version>0.1.3</version>
+   </parent>
+  
+   <artifactId>voldemort-binding</artifactId>
+   <name>Voldemort DB Binding</name>
+   <packaging>jar</packaging>
+	
+   <dependencies>
+     <dependency>
+       <groupId>voldemort</groupId>
+       <artifactId>voldemort</artifactId>
+       <version>${voldemort.version}</version>
+     </dependency>
+     <dependency>
+       <groupId>log4j</groupId>
+       <artifactId>log4j</artifactId>
+       <version>1.2.16</version>
+     </dependency>
+     <dependency>
+       <groupId>org.apache.ycsb</groupId>
+       <artifactId>core</artifactId>
+       <version>${project.version}</version>
+     </dependency>
+   </dependencies>
+
+   <repositories>
+     <repository>
+       <id>clojars.org</id>
+       <url>http://clojars.org/repo</url>
+     </repository>
+   </repositories>
+
+   <build>
+    <plugins>
+     <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-assembly-plugin</artifactId>
+        <version>${maven.assembly.version}</version>
+        <configuration>
+          <descriptorRefs>
+            <descriptorRef>jar-with-dependencies</descriptorRef>
+          </descriptorRefs>
+          <appendAssemblyId>false</appendAssemblyId>
+        </configuration>
+        <executions>
+          <execution>
+            <phase>package</phase>
+            <goals>
+              <goal>single</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+   </build>
+
+	
+</project>
diff --git a/db/voldemort/config/cluster.xml b/voldemort/src/main/conf/cluster.xml
similarity index 100%
rename from db/voldemort/config/cluster.xml
rename to voldemort/src/main/conf/cluster.xml
diff --git a/db/voldemort/config/server.properties b/voldemort/src/main/conf/server.properties
similarity index 100%
rename from db/voldemort/config/server.properties
rename to voldemort/src/main/conf/server.properties
diff --git a/db/voldemort/config/stores.xml b/voldemort/src/main/conf/stores.xml
similarity index 100%
rename from db/voldemort/config/stores.xml
rename to voldemort/src/main/conf/stores.xml
diff --git a/db/voldemort/src/com/yahoo/ycsb/db/VoldemortClient.java b/voldemort/src/main/java/com/yahoo/ycsb/db/VoldemortClient.java
similarity index 100%
rename from db/voldemort/src/com/yahoo/ycsb/db/VoldemortClient.java
rename to voldemort/src/main/java/com/yahoo/ycsb/db/VoldemortClient.java
diff --git a/voldemort/src/main/resources/config/cluster.xml b/voldemort/src/main/resources/config/cluster.xml
new file mode 100644
index 0000000000000000000000000000000000000000..175f69adab9ff03916b1325a912d8d9b8cef9641
--- /dev/null
+++ b/voldemort/src/main/resources/config/cluster.xml
@@ -0,0 +1,11 @@
+<cluster>
+        <name>mycluster</name>
+        <server>
+                <id>0</id>
+                <host>localhost</host>
+                <http-port>8081</http-port>
+                <socket-port>6666</socket-port>
+                <partitions>0, 1</partitions>
+        </server>
+</cluster>
+
diff --git a/voldemort/src/main/resources/config/server.properties b/voldemort/src/main/resources/config/server.properties
new file mode 100644
index 0000000000000000000000000000000000000000..fce5ee43e6bbd86e2f7b19e17c21734ac32dbf04
--- /dev/null
+++ b/voldemort/src/main/resources/config/server.properties
@@ -0,0 +1,26 @@
+# The ID of *this* particular cluster node
+node.id=0
+
+max.threads=100
+
+############### DB options ######################
+
+http.enable=true
+socket.enable=true
+
+# BDB
+bdb.write.transactions=false
+bdb.flush.transactions=false
+bdb.cache.size=1G
+
+# Mysql
+mysql.host=localhost
+mysql.port=1521
+mysql.user=root
+mysql.password=3306
+mysql.database=test
+
+#NIO connector settings.
+enable.nio.connector=true
+
+storage.configs=voldemort.store.bdb.BdbStorageConfiguration, voldemort.store.readonly.ReadOnlyStorageConfiguration
diff --git a/voldemort/src/main/resources/config/stores.xml b/voldemort/src/main/resources/config/stores.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b2d892d722727de28d7f963df4fc8677dfa5aa2f
--- /dev/null
+++ b/voldemort/src/main/resources/config/stores.xml
@@ -0,0 +1,16 @@
+<stores>
+  <store>
+    <name>usertable</name>
+    <persistence>bdb</persistence>
+    <routing>client</routing>
+    <replication-factor>1</replication-factor>
+    <required-reads>1</required-reads>
+    <required-writes>1</required-writes>
+    <key-serializer>
+      <type>string</type>
+    </key-serializer>
+    <value-serializer>
+      <type>java-serialization</type>
+    </value-serializer>
+  </store>
+</stores>