diff --git a/mongodb/src/test/java/com/yahoo/ycsb/db/AsyncMongoDbClientTest.java b/mongodb/src/test/java/com/yahoo/ycsb/db/AsyncMongoDbClientTest.java
index ff75def61d7a4041235029f9f9cdf301b9cb2adb..c387be491dec02f9fefd75f7e0c1398793d42a24 100644
--- a/mongodb/src/test/java/com/yahoo/ycsb/db/AsyncMongoDbClientTest.java
+++ b/mongodb/src/test/java/com/yahoo/ycsb/db/AsyncMongoDbClientTest.java
@@ -16,53 +16,15 @@
  */
 package com.yahoo.ycsb.db;
 
-import static org.junit.Assume.assumeNoException;
-
-import java.util.Properties;
-
-import org.junit.After;
-
 import com.yahoo.ycsb.DB;
 
 /**
  * AsyncMongoDbClientTest provides runs the basic workload operations.
  */
-public class AsyncMongoDbClientTest extends AbstractDBTestCases {
-
-  /** The client to use. */
-  private AsyncMongoDbClient myClient = null;
-
-  /**
-   * Stops the test client.
-   */
-  @After
-  public void tearDown() {
-    try {
-      myClient.cleanup();
-    } catch (Exception error) {
-      // Ignore.
-    } finally {
-      myClient = null;
-    }
-  }
+public class AsyncMongoDbClientTest extends MongoDbClientTest {
 
-  /**
-   * {@inheritDoc}
-   * <p>
-   * Overridden to return the {@link AsyncMongoDbClient}.
-   * </p>
-   */
   @Override
-  protected DB getDB(Properties props) {
-    if( myClient == null ) {
-      myClient = new AsyncMongoDbClient();
-      myClient.setProperties(props);
-      try {
-        myClient.init();
-      } catch (Exception error) {
-        assumeNoException(error);
-      }
-    }
-    return myClient;
+  protected DB instantiateClient() {
+    return new AsyncMongoDbClient();
   }
 }
diff --git a/mongodb/src/test/java/com/yahoo/ycsb/db/MongoDbClientTest.java b/mongodb/src/test/java/com/yahoo/ycsb/db/MongoDbClientTest.java
index 6a0bb58066d790a60f61b93565a102ebbb223c2b..3a4b4f0277beaa0425bcb674fabbece51dc90214 100644
--- a/mongodb/src/test/java/com/yahoo/ycsb/db/MongoDbClientTest.java
+++ b/mongodb/src/test/java/com/yahoo/ycsb/db/MongoDbClientTest.java
@@ -30,7 +30,11 @@ import com.yahoo.ycsb.DB;
 public class MongoDbClientTest extends AbstractDBTestCases {
 
   /** The client to use. */
-  private MongoDbClient myClient = null;
+  private DB myClient = null;
+
+  protected DB instantiateClient() {
+    return new MongoDbClient();
+  }
 
   /**
    * Stops the test client.
@@ -55,7 +59,7 @@ public class MongoDbClientTest extends AbstractDBTestCases {
   @Override
   protected DB getDB(Properties props) {
     if( myClient == null ) {
-      myClient = new MongoDbClient();
+      myClient = instantiateClient();
       myClient.setProperties(props);
       try {
         myClient.init();
diff --git a/s3/src/main/java/com/yahoo/ycsb/db/S3Client.java b/s3/src/main/java/com/yahoo/ycsb/db/S3Client.java
index bd19c561565f70ef39bb5407a0ef4caaf9f252ad..f9f5b2daddbd1e4ced604ec3e3a27cf610b016f5 100644
--- a/s3/src/main/java/com/yahoo/ycsb/db/S3Client.java
+++ b/s3/src/main/java/com/yahoo/ycsb/db/S3Client.java
@@ -349,22 +349,8 @@ public class S3Client extends DB {
       totalSize = sizeArray*fieldCount;
     } else {
       try {
-        GetObjectRequest getObjectRequest = null;
-        GetObjectMetadataRequest getObjectMetadataRequest = null;
-        if (ssecLocal != null) {
-          getObjectRequest = new GetObjectRequest(bucket,
-              key).withSSECustomerKey(ssecLocal);
-          getObjectMetadataRequest = new GetObjectMetadataRequest(bucket,
-              key).withSSECustomerKey(ssecLocal);
-        } else {
-          getObjectRequest = new GetObjectRequest(bucket, key);
-          getObjectMetadataRequest = new GetObjectMetadataRequest(bucket,
-              key);
-        }
-        s3Client.getObject(getObjectRequest);
-        ObjectMetadata objectMetadata =
-            s3Client.getObjectMetadata(getObjectMetadataRequest);
-        int sizeOfFile = (int)objectMetadata.getContentLength();
+        Map.Entry<S3Object, ObjectMetadata> objectAndMetadata = getS3ObjectAndMetadata(bucket, key, ssecLocal);
+        int sizeOfFile = (int)objectAndMetadata.getValue().getContentLength();
         fieldCount = sizeOfFile/sizeArray;
         totalSize = sizeOfFile;
       } catch (Exception e){
@@ -437,25 +423,10 @@ public class S3Client extends DB {
   protected Status readFromStorage(String bucket, String key,
         HashMap<String, ByteIterator> result, SSECustomerKey ssecLocal) {
     try {
-      GetObjectRequest getObjectRequest = null;
-      GetObjectMetadataRequest getObjectMetadataRequest = null;
-      if (ssecLocal != null) {
-        getObjectRequest = new GetObjectRequest(bucket,
-            key).withSSECustomerKey(ssecLocal);
-        getObjectMetadataRequest = new GetObjectMetadataRequest(bucket,
-            key).withSSECustomerKey(ssecLocal);
-      } else {
-        getObjectRequest = new GetObjectRequest(bucket, key);
-        getObjectMetadataRequest = new GetObjectMetadataRequest(bucket,
-            key);
-      }
-      S3Object object =
-          s3Client.getObject(getObjectRequest);
-      ObjectMetadata objectMetadata =
-          s3Client.getObjectMetadata(getObjectMetadataRequest);
-      InputStream objectData = object.getObjectContent(); //consuming the stream
+      Map.Entry<S3Object, ObjectMetadata> objectAndMetadata = getS3ObjectAndMetadata(bucket, key, ssecLocal);
+      InputStream objectData = objectAndMetadata.getKey().getObjectContent(); //consuming the stream
       // writing the stream to bytes and to results
-      int sizeOfFile = (int)objectMetadata.getContentLength();
+      int sizeOfFile = (int)objectAndMetadata.getValue().getContentLength();
       byte[] inputStreamToByte = new byte[sizeOfFile];
       objectData.read(inputStreamToByte, 0, sizeOfFile);
       result.put(key, new ByteArrayByteIterator(inputStreamToByte));
@@ -469,6 +440,25 @@ public class S3Client extends DB {
     return Status.OK;
   }
 
+  private Map.Entry<S3Object, ObjectMetadata> getS3ObjectAndMetadata(String bucket,
+                                                                     String key, SSECustomerKey ssecLocal) {
+    GetObjectRequest getObjectRequest;
+    GetObjectMetadataRequest getObjectMetadataRequest;
+    if (ssecLocal != null) {
+      getObjectRequest = new GetObjectRequest(bucket,
+              key).withSSECustomerKey(ssecLocal);
+      getObjectMetadataRequest = new GetObjectMetadataRequest(bucket,
+              key).withSSECustomerKey(ssecLocal);
+    } else {
+      getObjectRequest = new GetObjectRequest(bucket, key);
+      getObjectMetadataRequest = new GetObjectMetadataRequest(bucket,
+              key);
+    }
+
+    return new AbstractMap.SimpleEntry<>(s3Client.getObject(getObjectRequest),
+            s3Client.getObjectMetadata(getObjectMetadataRequest));
+  }
+
   /**
   * Perform an emulation of a database scan operation on a S3 bucket.
   *
diff --git a/tarantool/src/main/java/com/yahoo/ycsb/db/TarantoolClient.java b/tarantool/src/main/java/com/yahoo/ycsb/db/TarantoolClient.java
index 442a007143727f30f3087f439c805874034e7465..b90dff119296ebde7a0fdf99b6138086a39f90db 100644
--- a/tarantool/src/main/java/com/yahoo/ycsb/db/TarantoolClient.java
+++ b/tarantool/src/main/java/com/yahoo/ycsb/db/TarantoolClient.java
@@ -84,21 +84,7 @@ public class TarantoolClient extends DB {
 
 	@Override
 	public Status insert(String table, String key, HashMap<String, ByteIterator> values) {
-		int j = 0;
-		String[] tuple = new String[1 + 2 * values.size()];
-		tuple[0] = key;
-		for (Map.Entry<String, ByteIterator> i: values.entrySet()) {
-			tuple[j + 1] = i.getKey();
-			tuple[j + 2] = i.getValue().toString();
-			j += 2;
-		}
-		try {
-			this.connection.replace(this.spaceNo, tuple);
-		} catch (TarantoolException exc) {
-			logger.log(Level.SEVERE,"Can't insert element", exc);
-			return Status.ERROR;
-		}
-		return Status.OK;
+		return replace(key, values, "Can't insert element");
 	}
 
 	private HashMap<String, ByteIterator> tuple_convert_filter (List<String> input,
@@ -164,6 +150,13 @@ public class TarantoolClient extends DB {
 	@Override
 	public Status update(String table, String key,
 			HashMap<String, ByteIterator> values) {
+		return replace(key, values, "Can't replace element");
+
+	}
+
+	private Status replace(String key,
+						  HashMap<String, ByteIterator> values,
+						  String exceptionDescription) {
 		int j = 0;
 		String[] tuple = new String[1 + 2 * values.size()];
 		tuple[0] = key;
@@ -175,7 +168,7 @@ public class TarantoolClient extends DB {
 		try {
 			this.connection.replace(this.spaceNo, tuple);
 		} catch (TarantoolException exc) {
-			logger.log(Level.SEVERE,"Can't replace element", exc);
+			logger.log(Level.SEVERE,exceptionDescription, exc);
 			return Status.ERROR;
 		}
 		return Status.OK;