diff --git a/benchmarks/maven/assembly/bin.xml b/benchmarks/maven/assembly/bin.xml
index 35306b3..0a915c1 100644
--- a/benchmarks/maven/assembly/bin.xml
+++ b/benchmarks/maven/assembly/bin.xml
@@ -77,4 +77,4 @@
 
     </dependencySets>
 
-</assembly>
+</assembly>
\ No newline at end of file
diff --git a/hbase-client/src/main/java/org/apache/omid/transaction/HBaseOmidClientConfiguration.java b/hbase-client/src/main/java/org/apache/omid/transaction/HBaseOmidClientConfiguration.java
index e6675e8..2800fb6 100644
--- a/hbase-client/src/main/java/org/apache/omid/transaction/HBaseOmidClientConfiguration.java
+++ b/hbase-client/src/main/java/org/apache/omid/transaction/HBaseOmidClientConfiguration.java
@@ -20,13 +20,15 @@
 import com.google.common.annotations.VisibleForTesting;
 import com.google.inject.Inject;
 import com.google.inject.name.Named;
+import org.apache.commons.beanutils.BeanUtils;
 import org.apache.omid.YAMLUtils;
 import org.apache.omid.metrics.MetricsRegistry;
 import org.apache.omid.tools.hbase.SecureHBaseConfig;
 import org.apache.omid.tso.client.OmidClientConfiguration.ConflictDetectionLevel;
 import org.apache.omid.tso.client.OmidClientConfiguration.PostCommitMode;
 import org.apache.omid.tso.client.OmidClientConfiguration;
-import org.apache.omid.tso.client.OmidClientConfiguration.PostCommitMode;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hbase.HBaseConfiguration;
 
 import java.lang.reflect.InvocationTargetException;
 import java.util.Map;
diff --git a/hbase-client/src/main/java/org/apache/omid/transaction/HBaseTransactionManager.java b/hbase-client/src/main/java/org/apache/omid/transaction/HBaseTransactionManager.java
index c8c80e6..c66b9b2 100644
--- a/hbase-client/src/main/java/org/apache/omid/transaction/HBaseTransactionManager.java
+++ b/hbase-client/src/main/java/org/apache/omid/transaction/HBaseTransactionManager.java
@@ -34,7 +34,7 @@
 import org.apache.omid.tso.client.CellId;
 import org.apache.omid.tso.client.OmidClientConfiguration.ConflictDetectionLevel;
 import org.apache.omid.tso.client.TSOClient;
-
+import org.apache.omid.tso.client.TSOProtocol;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -74,7 +74,6 @@
         return builder(configuration).build();
     }
 
-
     public static class Builder {
 
         // Required parameters
@@ -90,9 +89,7 @@
             this.hbaseOmidClientConf = hbaseOmidClientConf;
         }
 
-
-        public Builder tsoClient(TSOClient tsoClient) {
-
+        public Builder tsoClient(TSOProtocol tsoClient) {
             this.tsoClient = Optional.of(tsoClient);
             return this;
         }
@@ -102,7 +99,6 @@
             return this;
         }
 
-
         public Builder commitTableWriter(CommitTable.Writer writer) {
             this.commitTableWriter = Optional.of(writer);
             return this;
@@ -170,7 +166,6 @@
 
     }
 
-
     public static Builder builder(HBaseOmidClientConfiguration hbaseOmidClientConf) {
         return new Builder(hbaseOmidClientConf);
     }
diff --git a/hbase-client/src/main/java/org/apache/omid/transaction/TableAccessWrapper.java b/hbase-client/src/main/java/org/apache/omid/transaction/TableAccessWrapper.java
index 050aed0..8f7f6ac 100644
--- a/hbase-client/src/main/java/org/apache/omid/transaction/TableAccessWrapper.java
+++ b/hbase-client/src/main/java/org/apache/omid/transaction/TableAccessWrapper.java
@@ -31,8 +31,8 @@
 //This interface is used to wrap the HTableInterface and Region object when doing client and server side filtering accordingly.
 public interface TableAccessWrapper {
 
-    public Result[] get(List<Get> get) throws IOException;
-    public Result get(Get get) throws IOException;
-    public void   put(Put put) throws IOException;
-    public ResultScanner getScanner(Scan scan) throws IOException;
+    Result[] get(List<Get> get) throws IOException;
+    Result get(Get get) throws IOException;
+    void   put(Put put) throws IOException;
+    ResultScanner getScanner(Scan scan) throws IOException;
 }
diff --git a/hbase-coprocessor/src/main/java/org/apache/hadoop/hbase/regionserver/RegionConnectionFactory.java b/hbase-coprocessor/src/main/java/org/apache/hadoop/hbase/regionserver/RegionConnectionFactory.java
index be7c8c9..878e82a 100644
--- a/hbase-coprocessor/src/main/java/org/apache/hadoop/hbase/regionserver/RegionConnectionFactory.java
+++ b/hbase-coprocessor/src/main/java/org/apache/hadoop/hbase/regionserver/RegionConnectionFactory.java
@@ -27,8 +27,6 @@
 import org.apache.hadoop.hbase.HConstants;
 import org.apache.hadoop.hbase.client.Connection;
 import org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment;
-import org.apache.hadoop.hbase.ipc.RpcControllerFactory;
-import org.apache.hadoop.hbase.ipc.controller.InterRegionServerRpcControllerFactory;
 import org.apache.omid.HBaseShims;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/hbase-coprocessor/src/main/java/org/apache/omid/transaction/CompactorScanner.java b/hbase-coprocessor/src/main/java/org/apache/omid/transaction/CompactorScanner.java
index 7769ad6..cf93163 100644
--- a/hbase-coprocessor/src/main/java/org/apache/omid/transaction/CompactorScanner.java
+++ b/hbase-coprocessor/src/main/java/org/apache/omid/transaction/CompactorScanner.java
@@ -15,19 +15,18 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.omid.transaction;
+package org.apache.hadoop.hbase.regionserver;
 
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Optional;
 import com.google.common.collect.Iterators;
 import com.google.common.collect.PeekingIterator;
-import org.apache.hadoop.hbase.regionserver.InternalScanner;
-import org.apache.omid.RegionWrapper;
-import org.apache.hadoop.hbase.regionserver.ScannerContext;
 import org.apache.omid.HBaseShims;
 import org.apache.omid.committable.CommitTable;
 import org.apache.omid.committable.CommitTable.Client;
 import org.apache.omid.committable.CommitTable.CommitTimestamp;
+import org.apache.omid.transaction.CellUtils;
+import org.apache.omid.transaction.CellInfo;
 import org.apache.hadoop.hbase.Cell;
 import org.apache.hadoop.hbase.CellUtil;
 import org.apache.hadoop.hbase.KeyValue;
@@ -60,7 +59,7 @@
     private final boolean retainNonTransactionallyDeletedCells;
     private final long lowWatermark;
 
-    private final RegionWrapper regionWrapper;
+    private final Region hRegion;
 
     private boolean hasMoreRows = false;
     private List<Cell> currentRowWorthValues = new ArrayList<Cell>();
@@ -78,9 +77,9 @@
         this.retainNonTransactionallyDeletedCells = preserveNonTransactionallyDeletedCells;
         this.lowWatermark = getLowWatermarkFromCommitTable();
         // Obtain the table in which the scanner is going to operate
-        this.regionWrapper = HBaseShims.getRegionCoprocessorRegion(e.getEnvironment());
+        this.hRegion = HBaseShims.getRegionCoprocessorRegion(e.getEnvironment());
         LOG.info("Scanner cleaning up uncommitted txs older than LW [{}] in region [{}]",
-                 lowWatermark, regionWrapper.getRegionInfo());
+                lowWatermark, hRegion.getRegionInfo());
     }
 
     @Override
@@ -88,9 +87,8 @@
         return next(results, -1);
     }
 
-    // This method is invoked only in HBase 1.x versions
     public boolean next(List<Cell> result, ScannerContext scannerContext) throws IOException {
-        int limit = HBaseShims.getBatchLimit(scannerContext);
+        int limit = scannerContext.getBatchLimit();
         return next(result, limit);
     }
 
@@ -242,7 +240,7 @@
                         cell.getQualifierLength());
                 g.addColumn(family, qualifier);
                 g.setTimeStamp(cell.getTimestamp());
-                Result r = regionWrapper.get(g);
+                Result r = hRegion.get(g);
                 if (r.containsColumn(family, qualifier)) {
                     return Optional.of(new CommitTimestamp(SHADOW_CELL,
                             Bytes.toLong(r.getValue(family, qualifier)), true));
diff --git a/hbase-coprocessor/src/main/java/org/apache/omid/transaction/OmidCompactor.java b/hbase-coprocessor/src/main/java/org/apache/omid/transaction/OmidCompactor.java
index 361164c..0f39737 100644
--- a/hbase-coprocessor/src/main/java/org/apache/omid/transaction/OmidCompactor.java
+++ b/hbase-coprocessor/src/main/java/org/apache/omid/transaction/OmidCompactor.java
@@ -29,6 +29,7 @@
 import org.apache.hadoop.hbase.coprocessor.BaseRegionObserver;
 import org.apache.hadoop.hbase.coprocessor.ObserverContext;
 import org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment;
+import org.apache.hadoop.hbase.regionserver.CompactorScanner;
 import org.apache.hadoop.hbase.regionserver.InternalScanner;
 import org.apache.hadoop.hbase.regionserver.RegionConnectionFactory;
 import org.apache.hadoop.hbase.regionserver.ScanType;
@@ -53,8 +54,8 @@
 
     private static final Logger LOG = LoggerFactory.getLogger(OmidCompactor.class);
 
-    private static final String HBASE_RETAIN_NON_TRANSACTIONALLY_DELETED_CELLS_KEY =
-            "omid.hbase.compactor.retain.tombstones";
+    private static final String HBASE_RETAIN_NON_TRANSACTIONALLY_DELETED_CELLS_KEY
+            = "omid.hbase.compactor.retain.tombstones";
     private static final boolean HBASE_RETAIN_NON_TRANSACTIONALLY_DELETED_CELLS_DEFAULT = true;
 
     final static String OMID_COMPACTABLE_CF_FLAG = "OMID_ENABLED";
@@ -92,7 +93,6 @@
             commitTableConf.setTableName(commitTableName);
         }
         retainNonTransactionallyDeletedCells =
-
                 env.getConfiguration().getBoolean(HBASE_RETAIN_NON_TRANSACTIONALLY_DELETED_CELLS_KEY,
                         HBASE_RETAIN_NON_TRANSACTIONALLY_DELETED_CELLS_DEFAULT);
         LOG.info("Compactor coprocessor started");
@@ -117,7 +117,6 @@
                                       InternalScanner scanner,
                                       ScanType scanType,
                                       CompactionRequest request) throws IOException {
-
         boolean omidCompactable;
         try {
             if (enableCompactorForAllFamilies) {
@@ -144,14 +143,11 @@
                         isMajorCompaction,
                         retainNonTransactionallyDeletedCells);
             }
-
         } catch (IOException e) {
             throw e;
         } catch (Exception e) {
             throw new DoNotRetryIOException(e);
-
         }
-
     }
 
     private CommitTable.Client initAndGetCommitTableClient() throws IOException {
diff --git a/hbase-coprocessor/src/test/java/org/apache/omid/transaction/TestCompactorScanner.java b/hbase-coprocessor/src/test/java/org/apache/omid/transaction/TestCompactorScanner.java
index e416849..8a217b3 100644
--- a/hbase-coprocessor/src/test/java/org/apache/omid/transaction/TestCompactorScanner.java
+++ b/hbase-coprocessor/src/test/java/org/apache/omid/transaction/TestCompactorScanner.java
@@ -23,6 +23,7 @@
 import org.apache.hadoop.hbase.KeyValue.Type;
 import org.apache.hadoop.hbase.coprocessor.ObserverContext;
 import org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment;
+import org.apache.hadoop.hbase.regionserver.CompactorScanner;
 import org.apache.hadoop.hbase.regionserver.HRegion;
 import org.apache.hadoop.hbase.regionserver.InternalScanner;
 import org.apache.hadoop.hbase.util.Bytes;
diff --git a/hbase-coprocessor/src/test/java/org/apache/omid/transaction/TestSnapshotFilterLL.java b/hbase-coprocessor/src/test/java/org/apache/omid/transaction/TestSnapshotFilterLL.java
index cf0fd58..1bb5691 100644
--- a/hbase-coprocessor/src/test/java/org/apache/omid/transaction/TestSnapshotFilterLL.java
+++ b/hbase-coprocessor/src/test/java/org/apache/omid/transaction/TestSnapshotFilterLL.java
@@ -17,16 +17,10 @@
  */
 package org.apache.omid.transaction;
 
-import static org.mockito.Matchers.any;
-import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.spy;
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertFalse;
 import static org.testng.Assert.assertTrue;
 
 import java.io.IOException;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.atomic.AtomicBoolean;
 
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.Coprocessor;
@@ -38,19 +32,11 @@
 import org.apache.hadoop.hbase.client.Admin;
 import org.apache.hadoop.hbase.client.Connection;
 import org.apache.hadoop.hbase.client.ConnectionFactory;
-import org.apache.hadoop.hbase.client.Delete;
 import org.apache.hadoop.hbase.client.Get;
 import org.apache.hadoop.hbase.client.Put;
 import org.apache.hadoop.hbase.client.Result;
 import org.apache.hadoop.hbase.client.ResultScanner;
 import org.apache.hadoop.hbase.client.Scan;
-import org.apache.hadoop.hbase.filter.BinaryComparator;
-import org.apache.hadoop.hbase.filter.CompareFilter;
-import org.apache.hadoop.hbase.filter.FamilyFilter;
-import org.apache.hadoop.hbase.filter.Filter;
-import org.apache.hadoop.hbase.filter.FilterList;
-import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;
-import org.apache.hadoop.hbase.filter.SubstringComparator;
 import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.omid.TestUtils;
 import org.apache.omid.committable.CommitTable;
@@ -59,8 +45,6 @@
 import org.apache.omid.timestamp.storage.HBaseTimestampStorageConfig;
 import org.apache.omid.tso.TSOServer;
 import org.apache.omid.tso.TSOServerConfig;
-import org.mockito.invocation.InvocationOnMock;
-import org.mockito.stubbing.Answer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.AfterClass;
@@ -68,7 +52,6 @@
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
-import com.google.common.util.concurrent.ListenableFuture;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
 
diff --git a/hbase-shims/hbase-0/pom.xml b/hbase-shims/hbase-0/pom.xml
deleted file mode 100644
index 164cf18..0000000
--- a/hbase-shims/hbase-0/pom.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  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.
--->
-<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.omid</groupId>
-        <artifactId>omid-shims-aggregator</artifactId>
-        <version>0.9.1.0-SNAPSHOT</version>
-    </parent>
-
-    <artifactId>omid-hbase0-shims</artifactId>
-    <name>Shims layer for HBase 0.x</name>
-    <packaging>jar</packaging>
-
-    <properties>
-        <hbase.version>${hbase0.version}</hbase.version>
-    </properties>
-
-</project>
diff --git a/hbase-shims/hbase-0/src/main/java/org/apache/omid/HBaseShims.java b/hbase-shims/hbase-0/src/main/java/org/apache/omid/HBaseShims.java
deleted file mode 100644
index cbbb815..0000000
--- a/hbase-shims/hbase-0/src/main/java/org/apache/omid/HBaseShims.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.omid;
-
-import org.apache.hadoop.hbase.HColumnDescriptor;
-import org.apache.hadoop.hbase.HTableDescriptor;
-import org.apache.hadoop.hbase.KeyValue;
-import org.apache.hadoop.hbase.TableName;
-import org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment;
-import org.apache.hadoop.hbase.regionserver.HRegion;
-import org.apache.hadoop.hbase.regionserver.HRegionServer;
-import org.apache.hadoop.hbase.regionserver.ScannerContext;
-
-import java.io.IOException;
-
-public class HBaseShims {
-
-    static public void setKeyValueSequenceId(KeyValue kv, int sequenceId) {
-
-        kv.setMvccVersion(sequenceId);
-
-    }
-
-    static public RegionWrapper getRegionCoprocessorRegion(RegionCoprocessorEnvironment env) {
-
-        return new RegionWrapper(env.getRegion());
-
-    }
-
-    static public void flushAllOnlineRegions(HRegionServer regionServer, TableName tableName) throws IOException {
-
-        for (HRegion r : regionServer.getOnlineRegions(tableName)) {
-            r.flushcache();
-        }
-
-    }
-
-    static public void addFamilyToHTableDescriptor(HTableDescriptor tableDesc, HColumnDescriptor columnDesc) {
-
-        tableDesc.addFamily(columnDesc);
-
-    }
-
-    public static int getBatchLimit(ScannerContext scannerContext) {
-
-        throw new UnsupportedOperationException("Should not be called for 0.9x versions");
-
-    }
-
-}
\ No newline at end of file
diff --git a/hbase-shims/hbase-0/src/main/java/org/apache/omid/RegionWrapper.java b/hbase-shims/hbase-0/src/main/java/org/apache/omid/RegionWrapper.java
deleted file mode 100644
index e4575b2..0000000
--- a/hbase-shims/hbase-0/src/main/java/org/apache/omid/RegionWrapper.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.omid;
-
-import org.apache.hadoop.hbase.HRegionInfo;
-import org.apache.hadoop.hbase.client.Get;
-import org.apache.hadoop.hbase.client.Put;
-import org.apache.hadoop.hbase.client.Result;
-import org.apache.hadoop.hbase.regionserver.HRegion;
-
-import java.io.IOException;
-
-/**
- * Wrapper over  {@link org.apache.hadoop.hbase.regionserver.HRegion} interface in HBase 0.9x versions
- */
-public class RegionWrapper {
-
-    HRegion hRegion;
-
-    public RegionWrapper(HRegion hRegion) {
-
-        this.hRegion = hRegion;
-
-    }
-
-    public Result get(Get getOperation) throws IOException {
-
-        return hRegion.get(getOperation);
-
-    }
-
-    void put(Put putOperation) throws IOException {
-
-        hRegion.put(putOperation);
-
-    }
-
-    HRegionInfo getRegionInfo() {
-        return hRegion.getRegionInfo();
-
-    }
-
-}
\ No newline at end of file
diff --git a/hbase-shims/hbase-1/src/main/java/org/apache/omid/HBaseShims.java b/hbase-shims/hbase-1/src/main/java/org/apache/omid/HBaseShims.java
index d520487..cd24f49 100644
--- a/hbase-shims/hbase-1/src/main/java/org/apache/omid/HBaseShims.java
+++ b/hbase-shims/hbase-1/src/main/java/org/apache/omid/HBaseShims.java
@@ -30,13 +30,10 @@
 import org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment;
 import org.apache.hadoop.hbase.regionserver.HRegionServer;
 import org.apache.hadoop.hbase.regionserver.Region;
-
 import org.apache.hadoop.hbase.regionserver.Store;
 import org.apache.hadoop.hbase.util.Bytes;
 
-
 import java.io.IOException;
-import java.lang.reflect.InvocationTargetException;
 
 public class HBaseShims {
 
@@ -46,9 +43,9 @@
 
     }
 
-    static public RegionWrapper getRegionCoprocessorRegion(RegionCoprocessorEnvironment env) {
+    static public Region getRegionCoprocessorRegion(RegionCoprocessorEnvironment env) {
 
-        return new RegionWrapper(env.getRegion());
+        return env.getRegion();
 
     }
 
@@ -66,7 +63,6 @@
 
     }
 
-
     public static CellComparator cellComparatorInstance() {
         return new CellComparator();
     }
diff --git a/hbase-shims/hbase-2/src/main/java/org/apache/omid/OmidFilterBase.java b/hbase-shims/hbase-2/src/main/java/org/apache/omid/OmidFilterBase.java
index b03acf7..e5053e0 100644
--- a/hbase-shims/hbase-2/src/main/java/org/apache/omid/OmidFilterBase.java
+++ b/hbase-shims/hbase-2/src/main/java/org/apache/omid/OmidFilterBase.java
@@ -18,6 +18,4 @@
 package org.apache.omid;
 import org.apache.hadoop.hbase.filter.FilterBase;
 
-
 public abstract class OmidFilterBase extends FilterBase {}
-
diff --git a/transaction-client/src/main/java/org/apache/omid/transaction/AbstractTransactionManager.java b/transaction-client/src/main/java/org/apache/omid/transaction/AbstractTransactionManager.java
index 147f7a6..99abdb6 100644
--- a/transaction-client/src/main/java/org/apache/omid/transaction/AbstractTransactionManager.java
+++ b/transaction-client/src/main/java/org/apache/omid/transaction/AbstractTransactionManager.java
@@ -315,7 +315,6 @@
     public void postRollback(AbstractTransaction<? extends CellId> transaction) throws TransactionManagerException {}
 
     /**
-
      * @see java.io.Closeable#close()
      */
     @Override
diff --git a/transaction-client/src/main/java/org/apache/omid/tso/client/MockTSOClient.java b/transaction-client/src/main/java/org/apache/omid/tso/client/MockTSOClient.java
index eb942da..7535143 100644
--- a/transaction-client/src/main/java/org/apache/omid/tso/client/MockTSOClient.java
+++ b/transaction-client/src/main/java/org/apache/omid/tso/client/MockTSOClient.java
@@ -163,4 +163,18 @@
         return false;
     }
 
+    @Override
+    public void setConflictDetectionLevel(OmidClientConfiguration.ConflictDetectionLevel conflictDetectionLevel) {
+
+    }
+
+    @Override
+    public OmidClientConfiguration.ConflictDetectionLevel getConflictDetectionLevel() {
+        return null;
+    }
+
+    @Override
+    public long getEpoch() {
+        return 0;
+    }
 }
diff --git a/transaction-client/src/main/java/org/apache/omid/tso/client/TSOProtocol.java b/transaction-client/src/main/java/org/apache/omid/tso/client/TSOProtocol.java
index c15d232..921b3d1 100644
--- a/transaction-client/src/main/java/org/apache/omid/tso/client/TSOProtocol.java
+++ b/transaction-client/src/main/java/org/apache/omid/tso/client/TSOProtocol.java
@@ -94,4 +94,7 @@
      */
     boolean isLowLatency();
 
+    void setConflictDetectionLevel(OmidClientConfiguration.ConflictDetectionLevel conflictDetectionLevel);
+
+    OmidClientConfiguration.ConflictDetectionLevel getConflictDetectionLevel();
 }
diff --git a/tso-server/src/main/java/org/apache/omid/tso/MonitoringContext.java b/tso-server/src/main/java/org/apache/omid/tso/MonitoringContext.java
index ea183a8..b834269 100644
--- a/tso-server/src/main/java/org/apache/omid/tso/MonitoringContext.java
+++ b/tso-server/src/main/java/org/apache/omid/tso/MonitoringContext.java
@@ -20,10 +20,10 @@
 
 public interface MonitoringContext {
 
-    public void timerStart(String name);
+    void timerStart(String name);
 
-    public void timerStop(String name);
+    void timerStop(String name);
 
-    public void publish();
+    void publish();
 
 }
diff --git a/tso-server/src/main/java/org/apache/omid/tso/MonitoringContextFactory.java b/tso-server/src/main/java/org/apache/omid/tso/MonitoringContextFactory.java
index 4280abc..1406357 100644
--- a/tso-server/src/main/java/org/apache/omid/tso/MonitoringContextFactory.java
+++ b/tso-server/src/main/java/org/apache/omid/tso/MonitoringContextFactory.java
@@ -20,7 +20,7 @@
 import org.apache.omid.metrics.MetricsRegistry;
 
 public class MonitoringContextFactory {
-    private MonitoringContextFactory(){};
+    private MonitoringContextFactory(){}
 
     static public MonitoringContext getInstance(TSOServerConfig config, MetricsRegistry metrics) {
         if (config.getMonitorContext())
diff --git a/tso-server/src/main/java/org/apache/omid/tso/PersistenceProcessor.java b/tso-server/src/main/java/org/apache/omid/tso/PersistenceProcessor.java
index f5f81a3..8bfe048 100644
--- a/tso-server/src/main/java/org/apache/omid/tso/PersistenceProcessor.java
+++ b/tso-server/src/main/java/org/apache/omid/tso/PersistenceProcessor.java
@@ -20,7 +20,6 @@
 import org.jboss.netty.channel.Channel;
 
 import java.io.Closeable;
-import java.util.concurrent.Future;
 
 interface PersistenceProcessor extends Closeable {
 
diff --git a/tso-server/src/main/java/org/apache/omid/tso/PersistenceProcessorImpl.java b/tso-server/src/main/java/org/apache/omid/tso/PersistenceProcessorImpl.java
index ef88b48..34276a3 100644
--- a/tso-server/src/main/java/org/apache/omid/tso/PersistenceProcessorImpl.java
+++ b/tso-server/src/main/java/org/apache/omid/tso/PersistenceProcessorImpl.java
@@ -29,7 +29,6 @@
 import org.apache.commons.pool2.ObjectPool;
 import org.apache.omid.committable.CommitTable;
 import org.apache.omid.metrics.MetricsRegistry;
-import org.apache.omid.metrics.Timer;
 import org.jboss.netty.channel.Channel;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -37,14 +36,11 @@
 import javax.inject.Inject;
 
 import java.io.IOException;
-import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
 
 import static com.lmax.disruptor.dsl.ProducerType.SINGLE;
 import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.apache.omid.metrics.MetricsUtils.name;
 import static org.apache.omid.tso.PersistenceProcessorImpl.PersistBatchEvent.EVENT_FACTORY;
 import static org.apache.omid.tso.PersistenceProcessorImpl.PersistBatchEvent.makePersistBatch;
 
