Stuff
[iotcloud.git] / version2 / src / java / iotcloud / Test.java
index cae1c398247bc7f78703070a45ddf205fd79a9f3..403c2beb368b4645ffa3b8418fab02820ce22996 100644 (file)
@@ -1,5 +1,8 @@
 package iotcloud;
 
+import java.util.List;
+import java.util.ArrayList;
+
 /**
  * Test cases.
  * @author Brian Demsky
@@ -8,2456 +11,2291 @@ package iotcloud;
 
 public class Test {
 
-       public static final  int NUMBER_OF_TESTS = 15;
-
-       public static void main(String[] args)  throws ServerException {
-               if (args[0].equals("2")) {
-                       test2();
-               } else if (args[0].equals("3")) {
-                       test3();
-               } else if (args[0].equals("4")) {
-                       test4();
-               } else if (args[0].equals("5")) {
-                       test5();
-               } else if (args[0].equals("6")) {
-                       test6();
-               } else if (args[0].equals("7")) {
-                       test7();
-               } else if (args[0].equals("8")) {
-                       test8();
-               } else if (args[0].equals("9")) {
-                       test9();
-               }
-       }
-
-       // static void test9()  throws ServerException {
-       //      // Setup the 2 clients
-       //      Table t1 = new Table("http://127.0.0.1/test.iotcloud/", "reallysecret", 321);
-       //      t1.initTable();
-       //      Table t2 = new Table("http://127.0.0.1/test.iotcloud/", "reallysecret", 351);
-       //      t2.update();
-
-
-       //      // Make the Keys
-       //      System.out.println("Setting up keys");
-       //      for (int i = 0; i < NUMBER_OF_TESTS; i++) {
-       //              String a = "a" + i;
-       //              String b = "b" + i;
-       //              String c = "c" + i;
-       //              String d = "d" + i;
-       //              IoTString ia = new IoTString(a);
-       //              IoTString ib = new IoTString(b);
-       //              IoTString ic = new IoTString(c);
-       //              IoTString id = new IoTString(d);
-       //              t1.createNewKey(ia, 321);
-       //              t1.createNewKey(ib, 351);
-       //              t2.createNewKey(ic, 321);
-       //              t2.createNewKey(id, 351);
-       //      }
-
-       //      for (int i = 0; i < NUMBER_OF_TESTS; i++) {
-       //              String a = "a" + i;
-       //              String b = "b" + i;
-       //              String c = "c" + i;
-       //              String d = "d" + i;
-       //              IoTString ia = new IoTString(a);
-       //              IoTString ib = new IoTString(b);
-       //              IoTString ic = new IoTString(c);
-       //              IoTString id = new IoTString(d);
-       //              t1.createNewKey(ia, 1000);
-       //              t1.createNewKey(ib, 1000);
-       //              t2.createNewKey(ic, 1000);
-       //              t2.createNewKey(id, 1000);
-       //      }
-
-       //      System.out.println("Updating Clients...");
-       //      t1.update();
-       //      t2.update();
-       //      t1.update();
-       //      t2.update();
-
-       //      boolean foundError = false;
-
-       //      System.out.println("Checking Key-Values...");
-       //      for (int i = 0; i < NUMBER_OF_TESTS; i++) {
-
-       //              String keyA = "a" + i;
-       //              String keyB = "b" + i;
-       //              String keyC = "c" + i;
-       //              String keyD = "d" + i;
-
-       //              IoTString iKeyA = new IoTString(keyA);
-       //              IoTString iKeyB = new IoTString(keyB);
-       //              IoTString iKeyC = new IoTString(keyC);
-       //              IoTString iKeyD = new IoTString(keyD);
-
-
-       //              Long testValA1 = t1.getArbitrator(iKeyA);
-       //              Long testValB1 = t1.getArbitrator(iKeyB);
-       //              Long testValC1 = t1.getArbitrator(iKeyC);
-       //              Long testValD1 = t1.getArbitrator(iKeyD);
-
-       //              Long testValA2 = t2.getArbitrator(iKeyA);
-       //              Long testValB2 = t2.getArbitrator(iKeyB);
-       //              Long testValC2 = t2.getArbitrator(iKeyC);
-       //              Long testValD2 = t2.getArbitrator(iKeyD);
-
-       //              if ((testValA1 == null) || (testValA1 != 321)) {
-       //                      System.out.println("Key-Value t1 incorrect: " + keyA + "    " + testValA1);
-       //                      foundError = true;
-       //              }
-
-       //              if ((testValB1 == null) || (testValB1 != 351)) {
-       //                      System.out.println("Key-Value t1 incorrect: " + keyB + "    " + testValB1);
-       //                      foundError = true;
-       //              }
-
-       //              if ((testValC1 == null) || (testValC1 != 321)) {
-       //                      System.out.println("Key-Value t1 incorrect: " + keyC + "    " + testValC1);
-       //                      foundError = true;
-       //              }
-
-       //              if ((testValD1 == null) || (testValD1 != 351)) {
-       //                      System.out.println("Key-Value t1 incorrect: " + keyD + "    " + testValD1);
-       //                      foundError = true;
-       //              }
-
-       //              if ((testValA2 == null) || (testValA2 != 321)) {
-       //                      System.out.println("Key-Value t2 incorrect: " + keyA + "    " + testValA2);
-       //                      foundError = true;
-       //              }
-
-       //              if ((testValB2 == null) || (testValB2 != 351)) {
-       //                      System.out.println("Key-Value t2 incorrect: " + keyB + "    " + testValB2);
-       //                      foundError = true;
-       //              }
-
-       //              if ((testValC2 == null) || (testValC2 != 321)) {
-       //                      System.out.println("Key-Value t2 incorrect: " + keyC + "    " + testValC2);
-       //                      foundError = true;
-       //              }
-
-       //              if ((testValD2 == null) || (testValD2 != 351)) {
-       //                      System.out.println("Key-Value t2 incorrect: " + keyD + "    " + testValD2);
-       //                      foundError = true;
-       //              }
-       //      }
-
-       //      if (foundError) {
-       //              System.out.println("Found Errors...");
-       //      } else {
-       //              System.out.println("No Errors Found...");
-       //      }
-       // }
-
-       // static void test8()  throws ServerException {
-
-       //      boolean foundError = false;
-
-       //      // Setup the 2 clients
-       //      Table t1 = new Table("http://127.0.0.1/test.iotcloud/", "reallysecret", 321);
-       //      t1.initTable();
-       //      Table t2 = new Table("http://127.0.0.1/test.iotcloud/", "reallysecret", 351);
-       //      t2.update();
-
-       //      // t1.rebuild();
-       //      // t2.rebuild();
-
-       //      // Make the Keys
-       //      System.out.println("Setting up keys");
-       //      for (int i = 0; i < NUMBER_OF_TESTS; i++) {
-       //              String a = "a" + i;
-       //              String b = "b" + i;
-       //              String c = "c" + i;
-       //              String d = "d" + i;
-       //              IoTString ia = new IoTString(a);
-       //              IoTString ib = new IoTString(b);
-       //              IoTString ic = new IoTString(c);
-       //              IoTString id = new IoTString(d);
-       //              t1.createNewKey(ia, 321);
-       //              t1.createNewKey(ib, 351);
-       //              t2.createNewKey(ic, 321);
-       //              t2.createNewKey(id, 351);
-       //      }
-
-
-       //      // Do Updates for the keys
-       //      System.out.println("Setting Key-Values...");
-
-
-       //      String keyA0 = "a0";
-       //      String keyB0 = "b0";
-       //      String keyC0 = "c0";
-       //      String keyD0 = "d0";
-       //      String valueA0 = "a0";
-       //      String valueB0 = "b0";
-       //      String valueC0 = "c0";
-       //      String valueD0 = "d0";
-
-       //      IoTString iKeyA0 = new IoTString(keyA0);
-       //      IoTString iKeyB0 = new IoTString(keyB0);
-       //      IoTString iKeyC0 = new IoTString(keyC0);
-       //      IoTString iKeyD0 = new IoTString(keyD0);
-       //      IoTString iValueA0 = new IoTString(valueA0);
-       //      IoTString iValueB0 = new IoTString(valueB0);
-       //      IoTString iValueC0 = new IoTString(valueC0);
-       //      IoTString iValueD0 = new IoTString(valueD0);
-
-       //      t1.startTransaction();
-       //      t1.addKV( iKeyA0, iValueA0);
-       //      t1.commitTransaction();
-
-       //      t1.startTransaction();
-       //      t1.addKV(iKeyB0, iValueB0);
-       //      t1.commitTransaction();
-
-       //      t2.startTransaction();
-       //      t2.addKV(iKeyC0, iValueC0);
-       //      t2.commitTransaction();
-
-       //      t2.startTransaction();
-       //      t2.addKV(iKeyD0, iValueD0);
-       //      t2.commitTransaction();
-
-       //      for (int i = 1; i < NUMBER_OF_TESTS; i++) {
-       //              String keyB = "b" + i;
-       //              String valueB = "b" + i;
-       //              IoTString iKeyB = new IoTString(keyB);
-       //              IoTString iValueB = new IoTString(valueB);
-
-       //              String keyBOld = "b" + (i - 1);
-       //              String valueBOld = "b" + (i - 1);
-       //              IoTString iKeyBOld = new IoTString(keyBOld);
-       //              IoTString iValueBOld = new IoTString(valueBOld);
-
-
-       //              t1.startTransaction();
-       //              t1.addGuard(new Guard(new IoTString(Guard.createExpression(iKeyBOld, iValueBOld, Guard.Equal))));
-       //              t1.addKV(iKeyB, iValueB);
-       //              t1.commitTransaction();
-       //      }
-
-       //      System.out.println("Checking Key-Values...");
-       //      for (int i = 0; i < NUMBER_OF_TESTS; i++) {
-
-       //              String keyB = "b" + i;
-       //              String valueB = "b" + i;
-
-       //              IoTString iKeyB = new IoTString(keyB);
-       //              IoTString iValueB = new IoTString(valueB);
-
-       //              IoTString testValB1 = t1.getSpeculative(iKeyB);
-
-       //              if ((testValB1 == null) || (testValB1.equals(iValueB) == false)) {
-       //                      System.out.println("Key-Value t1 incorrect: " + keyB);
-       //                      foundError = true;
-
-       //              }
-       //      }
-
-
-       //      System.out.println("Updating Clients...");
-       //      t1.update();
-       //      t2.update();
-       //      t1.update();
-       //      t2.update();
-
-       //      System.out.println("Checking Key-Values...");
-       //      for (int i = 0; i < NUMBER_OF_TESTS; i++) {
-
-       //              String keyA = "a" + i;
-       //              String keyB = "b" + i;
-       //              String keyC = "c" + i;
-       //              String keyD = "d" + i;
-       //              String valueA = "a" + i;
-       //              String valueB = "b" + i;
-       //              String valueC = "c" + i;
-       //              String valueD = "d" + i;
-
-       //              IoTString iKeyA = new IoTString(keyA);
-       //              IoTString iKeyB = new IoTString(keyB);
-       //              IoTString iKeyC = new IoTString(keyC);
-       //              IoTString iKeyD = new IoTString(keyD);
-       //              IoTString iValueA = new IoTString(valueA);
-       //              IoTString iValueB = new IoTString(valueB);
-       //              IoTString iValueC = new IoTString(valueC);
-       //              IoTString iValueD = new IoTString(valueD);
-
-
-       //              IoTString testValA1 = t1.getCommitted(iKeyA);
-       //              IoTString testValB1 = t1.getCommitted(iKeyB);
-       //              IoTString testValC1 = t1.getCommitted(iKeyC);
-       //              IoTString testValD1 = t1.getCommitted(iKeyD);
-
-       //              IoTString testValA2 = t2.getCommitted(iKeyA);
-       //              IoTString testValB2 = t2.getCommitted(iKeyB);
-       //              IoTString testValC2 = t2.getCommitted(iKeyC);
-       //              IoTString testValD2 = t2.getCommitted(iKeyD);
-
-
-       //              if (i == 0) {
-       //                      if ((testValA1 == null) || (testValA1.equals(iValueA) == false)) {
-       //                              System.out.println("Key-Value t1 incorrect: " + keyA);
-       //                              foundError = true;
-       //                      }
-
-       //                      if ((testValB1 == null) || (testValB1.equals(iValueB) == false)) {
-       //                              System.out.println("Key-Value t1 incorrect: " + keyB);
-       //                              foundError = true;
-       //                      }
-
-       //                      if ((testValC1 == null) || (testValC1.equals(iValueC) == false)) {
-       //                              System.out.println("Key-Value t1 incorrect: " + keyC);
-       //                              foundError = true;
-       //                      }
-
-       //                      if ((testValD1 == null) || (testValD1.equals(iValueD) == false)) {
-       //                              System.out.println("Key-Value t1 incorrect: " + keyD);
-       //                              foundError = true;
-       //                      }
-
-
-       //                      if ((testValA2 == null) || (testValA2.equals(iValueA) == false)) {
-       //                              System.out.println("Key-Value t2 incorrect: " + keyA + "    " + testValA2);
-       //                              foundError = true;
-       //                      }
-
-       //                      if ((testValB2 == null) || (testValB2.equals(iValueB) == false)) {
-       //                              System.out.println("Key-Value t2 incorrect: " + keyB + "    " + testValB2);
-       //                              foundError = true;
-       //                      }
-
-       //                      if ((testValC2 == null) || (testValC2.equals(iValueC) == false)) {
-       //                              System.out.println("Key-Value t2 incorrect: " + keyC + "    " + testValC2);
-       //                              foundError = true;
-       //                      }
-
-       //                      if ((testValD2 == null) || (testValD2.equals(iValueD) == false)) {
-       //                              System.out.println("Key-Value t2 incorrect: " + keyD + "    " + testValD2);
-       //                              foundError = true;
-       //                      }
-       //              } else {
-       //                      if (testValA1 != null) {
-       //                              System.out.println("Key-Value t1 incorrect: " + keyA);
-       //                              foundError = true;
-       //                      }
-
-       //                      if (testValB1 != null) {
-       //                              System.out.println("Key-Value t1 incorrect: " + keyB);
-       //                              foundError = true;
-       //                      }
-
-       //                      if (testValC1 != null) {
-       //                              System.out.println("Key-Value t1 incorrect: " + keyC);
-       //                              foundError = true;
-       //                      }
-
-       //                      if (testValD1 != null) {
-       //                              System.out.println("Key-Value t1 incorrect: " + keyD);
-       //                              foundError = true;
-       //                      }
-
-       //                      if (testValA2 != null) {
-       //                              System.out.println("Key-Value t2 incorrect: " + keyA + "    " + testValA2);
-       //                              foundError = true;
-       //                      }
-
-       //                      if (testValB2 != null) {
-       //                              System.out.println("Key-Value t2 incorrect: " + keyB + "    " + testValB2);
-       //                              foundError = true;
-       //                      }
-
-       //                      if (testValC2 != null) {
-       //                              System.out.println("Key-Value t2 incorrect: " + keyC + "    " + testValC2);
-       //                              foundError = true;
-       //                      }
-
-       //                      if (testValD2 != null) {
-       //                              System.out.println("Key-Value t2 incorrect: " + keyD + "    " + testValD2);
-       //                              foundError = true;
-       //                      }
-       //              }
-       //      }
-
-       //      if (foundError) {
-       //              System.out.println("Found Errors...");
-       //      } else {
-       //              System.out.println("No Errors Found...");
-       //      }
-       // }
-
-       // static void test7()  throws ServerException {
-
-       //      long startTime = 0;
-       //      long endTime = 0;
-
-       //      // Setup the 2 clients
-       //      Table t1 = new Table("http://127.0.0.1/test.iotcloud/", "reallysecret", 321);
-       //      t1.initTable();
-       //      Table t2 = new Table("http://127.0.0.1/test.iotcloud/", "reallysecret", 351);
-       //      t2.update();
-
-       //      // t1.rebuild();
-       //      // t2.rebuild();
-
-       //      // Make the Keys
-       //      System.out.println("Setting up keys");
-       //      startTime = System.currentTimeMillis();
-       //      for (int i = 0; i < NUMBER_OF_TESTS; i++) {
-       //              String a = "a" + i;
-       //              String b = "b" + i;
-       //              String c = "c" + i;
-       //              String d = "d" + i;
-       //              IoTString ia = new IoTString(a);
-       //              IoTString ib = new IoTString(b);
-       //              IoTString ic = new IoTString(c);
-       //              IoTString id = new IoTString(d);
-       //              t1.createNewKey(ia, 321);
-       //              t1.createNewKey(ib, 351);
-       //              t2.createNewKey(ic, 321);
-       //              t2.createNewKey(id, 351);
-       //      }
-       //      endTime = System.currentTimeMillis();
-
-       //      System.out.println("Time Taken: " + (double)   ((endTime - startTime) / 1000.0)    );
-       //      System.out.println("Time Taken Per Key: " + (double)  (((endTime - startTime) / 1000.0) / (NUMBER_OF_TESTS * 4))   );
-       //      System.out.println();
-
-
-       //      // Do Updates for the keys
-       //      System.out.println("Setting Key-Values...");
-       //      startTime = System.currentTimeMillis();
-
-
-
-       //      String keyA0 = "a0";
-       //      String keyB0 = "b0";
-       //      String keyC0 = "c0";
-       //      String keyD0 = "d0";
-       //      String valueA0 = "a0";
-       //      String valueB0 = "b0";
-       //      String valueC0 = "c0";
-       //      String valueD0 = "d0";
-
-       //      IoTString iKeyA0 = new IoTString(keyA0);
-       //      IoTString iKeyB0 = new IoTString(keyB0);
-       //      IoTString iKeyC0 = new IoTString(keyC0);
-       //      IoTString iKeyD0 = new IoTString(keyD0);
-       //      IoTString iValueA0 = new IoTString(valueA0);
-       //      IoTString iValueB0 = new IoTString(valueB0);
-       //      IoTString iValueC0 = new IoTString(valueC0);
-       //      IoTString iValueD0 = new IoTString(valueD0);
-
-       //      t1.startTransaction();
-       //      t1.addKV( iKeyA0, iValueA0);
-       //      t1.commitTransaction();
-
-       //      t1.startTransaction();
-       //      t1.addKV(iKeyB0, iValueB0);
-       //      t1.commitTransaction();
-
-       //      t2.startTransaction();
-       //      t2.addKV(iKeyC0, iValueC0);
-       //      t2.commitTransaction();
-
-       //      t2.startTransaction();
-       //      t2.addKV(iKeyD0, iValueD0);
-       //      t2.commitTransaction();
-
-       //      for (int i = 1; i < NUMBER_OF_TESTS; i++) {
-       //              String keyB = "b" + i;
-       //              String valueB = "b" + i;
-       //              IoTString iKeyB = new IoTString(keyB);
-       //              IoTString iValueB = new IoTString(valueB);
-
-       //              String keyBOld = "b" + (i - 1);
-       //              String valueBOld = "b" + (i - 2);
-       //              IoTString iKeyBOld = new IoTString(keyBOld);
-       //              IoTString iValueBOld = new IoTString(valueBOld);
-
-
-       //              t1.startTransaction();
-       //              t1.addGuard(new Guard(new IoTString(Guard.createExpression(iKeyBOld, iValueBOld, Guard.Equal))));
-       //              t1.addKV(iKeyB, iValueB);
-       //              t1.commitTransaction();
-       //      }
-
-       //      for (int i = 1; i < NUMBER_OF_TESTS; i++) {
-       //              String keyC = "c" + i;
-       //              String valueC = "c" + i;
-       //              IoTString iKeyC = new IoTString(keyC);
-       //              IoTString iValueC = new IoTString(valueC);
-
-       //              String keyCOld = "c" + (i - 1);
-       //              String valueCOld = "c" + (i - 2);
-       //              IoTString iKeyCOld = new IoTString(keyCOld);
-       //              IoTString iValueCOld = new IoTString(valueCOld);
-
-
-       //              t2.startTransaction();
-       //              t2.addGuard(new Guard(new IoTString(Guard.createExpression(iKeyCOld, iValueCOld, Guard.Equal))));
-       //              t2.addKV(iKeyC, iValueC);
-       //              t2.commitTransaction();
-       //      }
-
-       //      for (int i = 1; i < NUMBER_OF_TESTS; i++) {
-       //              String keyA = "a" + i;
-       //              String keyD = "d" + i;
-       //              String valueA = "a" + i;
-       //              String valueD = "d" + i;
-
-       //              IoTString iKeyA = new IoTString(keyA);
-       //              IoTString iKeyD = new IoTString(keyD);
-       //              IoTString iValueA = new IoTString(valueA);
-       //              IoTString iValueD = new IoTString(valueD);
-
-
-       //              String keyAOld = "a" + (i - 1);
-       //              String keyDOld = "d" + (i - 1);
-       //              String valueAOld = "a" + (i - 2);
-       //              String valueDOld = "d" + (i - 2);
-       //              IoTString iKeyAOld = new IoTString(keyAOld);
-       //              IoTString iKeyDOld = new IoTString(keyDOld);
-       //              IoTString iValueAOld = new IoTString(valueAOld);
-       //              IoTString iValueDOld = new IoTString(valueDOld);
-
-
-       //              t1.startTransaction();
-       //              t1.addGuard(new Guard(new IoTString(Guard.createExpression(iKeyAOld, iValueAOld, Guard.Equal))));
-       //              t1.addKV(iKeyA, iValueA);
-       //              t1.commitTransaction();
-
-       //              t2.startTransaction();
-       //              t2.addGuard(new Guard(new IoTString(Guard.createExpression(iKeyDOld, iValueDOld, Guard.Equal))));
-       //              t2.addKV(iKeyD, iValueD);
-       //              t2.commitTransaction();
-       //      }
-
-       //      endTime = System.currentTimeMillis();
-
-       //      System.out.println("Time Taken: " + (double)   ((endTime - startTime) / 1000.0)    );
-       //      System.out.println("Time Taken Per Update: " + (double)  (((endTime - startTime) / 1000.0) / (NUMBER_OF_TESTS * 4))   );
-       //      System.out.println();
-
-
-       //      System.out.println("Updating Clients...");
-       //      t1.update();
-       //      t2.update();
-       //      t1.update();
-       //      t2.update();
-
-       //      boolean foundError = false;
-
-       //      System.out.println("Checking Key-Values...");
-       //      for (int i = 0; i < NUMBER_OF_TESTS; i++) {
-
-       //              String keyA = "a" + i;
-       //              String keyB = "b" + i;
-       //              String keyC = "c" + i;
-       //              String keyD = "d" + i;
-       //              String valueA = "a" + i;
-       //              String valueB = "b" + i;
-       //              String valueC = "c" + i;
-       //              String valueD = "d" + i;
-
-       //              IoTString iKeyA = new IoTString(keyA);
-       //              IoTString iKeyB = new IoTString(keyB);
-       //              IoTString iKeyC = new IoTString(keyC);
-       //              IoTString iKeyD = new IoTString(keyD);
-       //              IoTString iValueA = new IoTString(valueA);
-       //              IoTString iValueB = new IoTString(valueB);
-       //              IoTString iValueC = new IoTString(valueC);
-       //              IoTString iValueD = new IoTString(valueD);
-
-
-       //              IoTString testValA1 = t1.getCommitted(iKeyA);
-       //              IoTString testValB1 = t1.getCommitted(iKeyB);
-       //              IoTString testValC1 = t1.getCommitted(iKeyC);
-       //              IoTString testValD1 = t1.getCommitted(iKeyD);
-
-       //              IoTString testValA2 = t2.getCommitted(iKeyA);
-       //              IoTString testValB2 = t2.getCommitted(iKeyB);
-       //              IoTString testValC2 = t2.getCommitted(iKeyC);
-       //              IoTString testValD2 = t2.getCommitted(iKeyD);
-
-
-       //              if (i == 0) {
-       //                      if ((testValA1 == null) || (testValA1.equals(iValueA) == false)) {
-       //                              System.out.println("Key-Value t1 incorrect: " + keyA);
-       //                              foundError = true;
-       //                      }
-
-       //                      if ((testValB1 == null) || (testValB1.equals(iValueB) == false)) {
-       //                              System.out.println("Key-Value t1 incorrect: " + keyB);
-       //                              foundError = true;
-       //                      }
-
-       //                      if ((testValC1 == null) || (testValC1.equals(iValueC) == false)) {
-       //                              System.out.println("Key-Value t1 incorrect: " + keyC);
-       //                              foundError = true;
-       //                      }
-
-       //                      if ((testValD1 == null) || (testValD1.equals(iValueD) == false)) {
-       //                              System.out.println("Key-Value t1 incorrect: " + keyD);
-       //                              foundError = true;
-       //                      }
-
-
-       //                      if ((testValA2 == null) || (testValA2.equals(iValueA) == false)) {
-       //                              System.out.println("Key-Value t2 incorrect: " + keyA + "    " + testValA2);
-       //                              foundError = true;
-       //                      }
-
-       //                      if ((testValB2 == null) || (testValB2.equals(iValueB) == false)) {
-       //                              System.out.println("Key-Value t2 incorrect: " + keyB + "    " + testValB2);
-       //                              foundError = true;
-       //                      }
-
-       //                      if ((testValC2 == null) || (testValC2.equals(iValueC) == false)) {
-       //                              System.out.println("Key-Value t2 incorrect: " + keyC + "    " + testValC2);
-       //                              foundError = true;
-       //                      }
-
-       //                      if ((testValD2 == null) || (testValD2.equals(iValueD) == false)) {
-       //                              System.out.println("Key-Value t2 incorrect: " + keyD + "    " + testValD2);
-       //                              foundError = true;
-       //                      }
-       //              } else {
-       //                      if (testValA1 != null) {
-       //                              System.out.println("Key-Value t1 incorrect: " + keyA);
-       //                              foundError = true;
-       //                      }
-
-       //                      if (testValB1 != null) {
-       //                              System.out.println("Key-Value t1 incorrect: " + keyB);
-       //                              foundError = true;
-       //                      }
-
-       //                      if (testValC1 != null) {
-       //                              System.out.println("Key-Value t1 incorrect: " + keyC);
-       //                              foundError = true;
-       //                      }
-
-       //                      if (testValD1 != null) {
-       //                              System.out.println("Key-Value t1 incorrect: " + keyD);
-       //                              foundError = true;
-       //                      }
-
-       //                      if (testValA2 != null) {
-       //                              System.out.println("Key-Value t2 incorrect: " + keyA + "    " + testValA2);
-       //                              foundError = true;
-       //                      }
-
-       //                      if (testValB2 != null) {
-       //                              System.out.println("Key-Value t2 incorrect: " + keyB + "    " + testValB2);
-       //                              foundError = true;
-       //                      }
-
-       //                      if (testValC2 != null) {
-       //                              System.out.println("Key-Value t2 incorrect: " + keyC + "    " + testValC2);
-       //                              foundError = true;
-       //                      }
-
-       //                      if (testValD2 != null) {
-       //                              System.out.println("Key-Value t2 incorrect: " + keyD + "    " + testValD2);
-       //                              foundError = true;
-       //                      }
-       //              }
-       //      }
-
-       //      if (foundError) {
-       //              System.out.println("Found Errors...");
-       //      } else {
-       //              System.out.println("No Errors Found...");
-       //      }
-       // }
-
-       static void test9()  {
-
-               boolean foundError = false;
-
-               // Setup the 2 clients
-               Table t1 = new Table("http://127.0.0.1/test.iotcloud/", "reallysecret", 321);
-
-               while (true) {
-                       try {
-                               t1.initTable();
-                               break;
-                       } catch (Exception e) {}
-               }
-
-               Table t2 = new Table("http://127.0.0.1/test.iotcloud/", "reallysecret", 351);
-
-               while (true) {
-                       try {
-                               t2.update();
-                               break;
-                       } catch (Exception e) {}
-               }
-
-               // Make the Keys
-               System.out.println("Setting up keys");
-               for (int i = 0; i < 4; i++) {
-                       String a = "a" + i;
-                       String b = "b" + i;
-                       String c = "c" + i;
-                       String d = "d" + i;
-                       IoTString ia = new IoTString(a);
-                       IoTString ib = new IoTString(b);
-                       IoTString ic = new IoTString(c);
-                       IoTString id = new IoTString(d);
-                       while (true) {
-                               try {
-                                       t1.createNewKey(ia, 321);
-                                       break;
-                               } catch (Exception e) {}
-                       }
-
-                       while (true) {
-                               try {
-                                       t1.createNewKey(ib, 351);
-                                       break;
-                               } catch (Exception e) {}
-                       }
-
-                       while (true) {
-                               try {
-                                       t2.createNewKey(ic, 321);
-                                       break;
-                               } catch (Exception e) {}
-                       }
-
-                       while (true) {
-                               try {
-                                       t2.createNewKey(id, 351);
-                                       break;
-                               } catch (Exception e) {}
-                       }
-               }
-
-               // Do Updates for the keys
-               System.out.println("Setting Key-Values...");
-
-               System.out.println("Setting b...");
-               for (int t = 0; t < NUMBER_OF_TESTS; t++) {
-                       for (int i = 0; i < 4; i++) {
-                               String keyB = "b" + i;
-                               String valueB = "b" + (i + t);
-
-                               IoTString iKeyB = new IoTString(keyB);
-                               IoTString iValueB = new IoTString(valueB);
-
-                               try {
-                                       t1.startTransaction();
-                                       t1.getSpeculativeAtomic(iKeyB);
-                                       t1.addKV(iKeyB, iValueB);
-                                       t1.commitTransaction();
-                                       System.out.println("Server Success");
-                               } catch (Exception e) {
-                                       System.out.println("Server Fail");
-                               }
-
-                       }
-               }
-
-               System.out.println("Checking b");
-               for (int i = 0; i < 4; i++) {
-
-                       String keyB = "b" + i;
-                       String valueB = "b" + (i + NUMBER_OF_TESTS - 1);
-                       IoTString iKeyB = new IoTString(keyB);
-                       IoTString iValueB = new IoTString(valueB);
-
-                       IoTString testValB1 = t1.getSpeculative(iKeyB);
-                       IoTString testValB2 = t2.getSpeculative(iKeyB);
-
-                       if ((testValB1 == null) || (testValB1.equals(iValueB) == false)) {
-                               System.out.println("Key-Value t1 incorrect: " + keyB + "    " + testValB1);
-                               foundError = true;
-                       }
-
-                       if ((testValB2 != null)) {
-                               System.out.println("Key-Value t2 incorrect: " + keyB + "    " + testValB2);
-                               foundError = true;
-                       }
-               }
-
-               System.out.println("Setting c...");
-               for (int t = 0; t < NUMBER_OF_TESTS; t++) {
-                       for (int i = 0; i < 4; i++) {
-                               String keyC = "c" + i;
-                               String valueC = "c" + (i + t);
-
-                               IoTString iKeyC = new IoTString(keyC);
-                               IoTString iValueC = new IoTString(valueC);
-
-                               try {
-                                       t2.startTransaction();
-                                       t2.getSpeculativeAtomic(iKeyC);
-                                       t2.addKV(iKeyC, iValueC);
-                                       t2.commitTransaction();
-                                       System.out.println("Server Success");
-                               } catch (Exception e) {
-                                       System.out.println("Server Fail");
-                               }
-
-                       }
-               }
-
-               System.out.println("Checking c");
-               for (int i = 0; i < 4; i++) {
-                       String keyC = "c" + i;
-                       String valueC = "c" + (i + NUMBER_OF_TESTS - 1);
-                       IoTString iKeyC = new IoTString(keyC);
-                       IoTString iValueC = new IoTString(valueC);
-
-                       IoTString testValC1 = t1.getSpeculative(iKeyC);
-                       IoTString testValC2 = t2.getSpeculative(iKeyC);
-
-                       if ((testValC1 != null)) {
-                               System.out.println("Key-Value t1 incorrect: " + keyC + "   " + testValC1);
-                               foundError = true;
-                       }
-
-                       if ((testValC2 == null) || (testValC2.equals(iValueC) == false)) {
-                               System.out.println("Key-Value t2 incorrect: " + keyC + "   " + testValC2);
-                               foundError = true;
-                       }
-               }
-
-               System.out.println("Setting a and b...");
-               for (int t = 0; t < NUMBER_OF_TESTS; t++) {
-                       for (int i = 0; i < 4; i++) {
-                               String keyA = "a" + i;
-                               String keyD = "d" + i;
-                               String valueA = "a" + (i + t);
-                               String valueD = "d" + (i + t);
-
-                               IoTString iKeyA = new IoTString(keyA);
-                               IoTString iKeyD = new IoTString(keyD);
-                               IoTString iValueA = new IoTString(valueA);
-                               IoTString iValueD = new IoTString(valueD);
-
-                               try {
-                                       t1.startTransaction();
-                                       t1.addKV(iKeyA, iValueA);
-                                       t1.commitTransaction();
-                                       System.out.println("Server Success");
-
-                               } catch (Exception e) {
-                                       System.out.println("Server Fail");
-                               }
-
-                               try {
-                                       t2.startTransaction();
-                                       t2.addKV(iKeyD, iValueD);
-                                       t2.commitTransaction();
-                                       System.out.println("Server Success");
-
-                               } catch (Exception e) {
-                                       System.out.println("Server Fail");
-                               }
-
-                       }
-               }
-
-               System.out.println("Updating Clients...");
-               System.out.println("Updating Clients...");
-               System.out.println("Updating Clients...");
-               System.out.println("Updating Clients...");
-               System.out.println("Updating Clients...");
-               System.out.println("Updating Clients...");
-               System.out.println("Updating Clients...");
-               System.out.println("Updating Clients...");
-               System.out.println("Updating Clients...");
-               System.out.println("Updating Clients...");
-               System.out.println("Updating Clients...");
-               System.out.println("Updating Clients...");
-               System.out.println("Updating Clients...");
-               System.out.println("Updating Clients...");
-               System.out.println("Updating Clients...");
-               System.out.println("Updating Clients...");
-               System.out.println("Updating Clients...");
-               System.out.println("Updating Clients...");
-               System.out.println("Updating Clients...");
-               System.out.println("Updating Clients...");
-               System.out.println("Updating Clients...");
-               System.out.println("Updating Clients...");
-               System.out.println("Updating Clients...");
-               System.out.println("Updating Clients...");
-               System.out.println("Updating Clients...");
-
-               try {
-                       Thread.sleep(3000);
-               } catch (Exception e) {
-
-               }
-
-               System.out.println("Updating Clients... T1   first");
-               while (true) {
-                       try {
-                               t1.update();
-                               break;
-                       } catch (Exception e) {
-                               e.printStackTrace();
-                               System.out.println("Fail");
-                       }
-               }
-
-               System.out.println("Updating Clients... T2   first");
-               while (true) {
-                       try {
-                               t2.update();
-                               break;
-                       } catch (Exception e) {
-                               System.out.println("Fail");
-                       }
-               }
-
-               System.out.println("Updating Clients... T1   second");
-               while (true) {
-                       try {
-                               t1.update();
-                               break;
-                       } catch (Exception e) {
-                               System.out.println("Fail");
-                       }
-               }
-
-               System.out.println("Updating Clients... T2  second");
-               while (true) {
-                       try {
-                               t2.update();
-                               break;
-                       } catch (Exception e) {
-                               System.out.println("Fail");
-                       }
-               }
-
-               System.out.println("Checking Key-Values...");
-               for (int i = 0; i < 4; i++) {
-
-                       String keyA = "a" + i;
-                       String keyB = "b" + i;
-                       String keyC = "c" + i;
-                       String keyD = "d" + i;
-                       String valueA = "a" + (i + NUMBER_OF_TESTS - 1);
-                       String valueB = "b" + (i + NUMBER_OF_TESTS - 1);
-                       String valueC = "c" + (i + NUMBER_OF_TESTS - 1);
-                       String valueD = "d" + (i + NUMBER_OF_TESTS - 1);
-
-                       IoTString iKeyA = new IoTString(keyA);
-                       IoTString iKeyB = new IoTString(keyB);
-                       IoTString iKeyC = new IoTString(keyC);
-                       IoTString iKeyD = new IoTString(keyD);
-                       IoTString iValueA = new IoTString(valueA);
-                       IoTString iValueB = new IoTString(valueB);
-                       IoTString iValueC = new IoTString(valueC);
-                       IoTString iValueD = new IoTString(valueD);
-
-
-                       IoTString testValA1 = t1.getCommitted(iKeyA);
-                       IoTString testValB1 = t1.getCommitted(iKeyB);
-                       IoTString testValC1 = t1.getCommitted(iKeyC);
-                       IoTString testValD1 = t1.getCommitted(iKeyD);
-
-                       IoTString testValA2 = t2.getCommitted(iKeyA);
-                       IoTString testValB2 = t2.getCommitted(iKeyB);
-                       IoTString testValC2 = t2.getCommitted(iKeyC);
-                       IoTString testValD2 = t2.getCommitted(iKeyD);
-
-                       if ((testValA1 == null) || (testValA1.equals(iValueA) == false)) {
-                               System.out.println("Key-Value t1 incorrect: " + keyA + "    " + testValA1 + "    " + iValueA);
-                               foundError = true;
-                       }
-
-                       if ((testValB1 == null) || (testValB1.equals(iValueB) == false)) {
-                               System.out.println("Key-Value t1 incorrect: " + keyB + "    " + testValB1 + "    " + iValueB);
-                               foundError = true;
-                       }
-
-                       if ((testValC1 == null) || (testValC1.equals(iValueC) == false)) {
-                               System.out.println("Key-Value t1 incorrect: " + keyC + "    " + testValC1 + "    " + iValueC);
-                               foundError = true;
-                       }
-
-                       if ((testValD1 == null) || (testValD1.equals(iValueD) == false)) {
-                               System.out.println("Key-Value t1 incorrect: " + keyD + "    " + testValD1 + "    " + iValueD);
-                               foundError = true;
-                       }
-
-                       if ((testValA2 == null) || (testValA2.equals(iValueA) == false)) {
-                               System.out.println("Key-Value t2 incorrect: " + keyA + "    " + testValA2 + "    " + iValueA);
-                               foundError = true;
-                       }
-
-                       if ((testValB2 == null) || (testValB2.equals(iValueB) == false)) {
-                               System.out.println("Key-Value t2 incorrect: " + keyB + "    " + testValB2 + "    " + iValueB);
-                               foundError = true;
-                       }
-
-                       if ((testValC2 == null) || (testValC2.equals(iValueC) == false)) {
-                               System.out.println("Key-Value t2 incorrect: " + keyC + "    " + testValC2 + "    " + iValueC);
-                               foundError = true;
-                       }
-
-                       if ((testValD2 == null) || (testValD2.equals(iValueD) == false)) {
-                               System.out.println("Key-Value t2 incorrect: " + keyD + "    " + testValD2 + "    " + iValueD);
-                               foundError = true;
-                       }
-               }
-
-               if (foundError) {
-                       System.out.println("Found Errors...");
-               } else {
-                       System.out.println("No Errors Found...");
-               }
-       }
-
-       static void test8() {
-               boolean foundError = false;
-
-
-               // Setup the 2 clients
-               Table t1 = new Table("http://127.0.0.1/test.iotcloud/", "reallysecret", 321);
-               while (true) {
-                       try {
-                               t1.initTable();
-                               break;
-                       } catch (Exception e) {}
-               }
-
-               Table t2 = new Table("http://127.0.0.1/test.iotcloud/", "reallysecret", 351);
-               while (true) {
-                       try {
-                               t2.update();
-                               break;
-                       } catch (Exception e) {}
-               }
-
-               // Make the Keys
-               System.out.println("Setting up keys");
-               for (int i = 0; i < NUMBER_OF_TESTS; i++) {
-                       System.out.println(i);
-
-                       String a = "a" + i;
-                       String b = "b" + i;
-                       String c = "c" + i;
-                       String d = "d" + i;
-                       IoTString ia = new IoTString(a);
-                       IoTString ib = new IoTString(b);
-                       IoTString ic = new IoTString(c);
-                       IoTString id = new IoTString(d);
-
-                       while (true) {
-                               try {
-                                       t1.createNewKey(ia, 321);
-                                       break;
-                               } catch (Exception e) {}
-                       }
-
-                       while (true) {
-                               try {
-                                       t1.createNewKey(ib, 351);
-                                       break;
-                               } catch (Exception e) {}
-                       }
-
-                       while (true) {
-                               try {
-                                       t2.createNewKey(ic, 321);
-                                       break;
-                               } catch (Exception e) {}
-                       }
-
-                       while (true) {
-                               try {
-                                       t2.createNewKey(id, 351);
-                                       break;
-                               } catch (Exception e) {}
-                       }
-               }
-
-               // Do Updates for the keys
-               System.out.println("Setting Key-Values...");
-               for (int i = 0; i < NUMBER_OF_TESTS; i++) {
-                       System.out.println(i);
-                       String keyA = "a" + i;
-                       String keyB = "b" + i;
-                       String keyC = "c" + i;
-                       String keyD = "d" + i;
-                       String valueA = "a" + i;
-                       String valueB = "b" + i;
-                       String valueC = "c" + i;
-                       String valueD = "d" + i;
-
-                       IoTString iKeyA = new IoTString(keyA);
-                       IoTString iKeyB = new IoTString(keyB);
-                       IoTString iKeyC = new IoTString(keyC);
-                       IoTString iKeyD = new IoTString(keyD);
-                       IoTString iValueA = new IoTString(valueA);
-                       IoTString iValueB = new IoTString(valueB);
-                       IoTString iValueC = new IoTString(valueC);
-                       IoTString iValueD = new IoTString(valueD);
-
-
-                       String keyAPrev = "a" + (i - 1);
-                       String keyBPrev = "b" + (i - 1);
-                       String keyCPrev = "c" + (i - 1);
-                       String keyDPrev = "d" + (i - 1);
-                       String valueAPrev = "a" + (i - 1);
-                       String valueBPrev = "b" + (i - 1);
-                       String valueCPrev = "c" + (i - 1);
-                       String valueDPrev = "d" + (i - 1);
-
-                       IoTString iKeyAPrev = new IoTString(keyAPrev);
-                       IoTString iKeyBPrev = new IoTString(keyBPrev);
-                       IoTString iKeyCPrev = new IoTString(keyCPrev);
-                       IoTString iKeyDPrev = new IoTString(keyDPrev);
-                       IoTString iValueAPrev = new IoTString(valueAPrev);
-                       IoTString iValueBPrev = new IoTString(valueBPrev);
-                       IoTString iValueCPrev = new IoTString(valueCPrev);
-                       IoTString iValueDPrev = new IoTString(valueDPrev);
-
-                       try {
-                               t1.startTransaction();
-                               if (i != 0) {
-                                       IoTString tmp = t1.getSpeculative(iKeyAPrev);
-                                       if ((tmp == null) || !tmp.equals(iValueAPrev)) {
-                                               System.out.println("Key a Error: " + i);
-                                               foundError = true;
-                                       }
-                               }
-                               t1.addKV(iKeyA, iValueA);
-                               t1.commitTransaction();
-                       } catch (Exception e) {
-                               System.out.println("Connection Failure!");
-                       }
-
-                       try {
-                               t1.startTransaction();
-                               if (i != 0) {
-                                       IoTString tmp = t1.getSpeculative(iKeyBPrev);
-                                       if ((tmp == null) || !tmp.equals(iValueBPrev)) {
-                                               System.out.println("Key b Error: " + i);
-                                               foundError = true;
-                                       }
-                               }
-                               t1.addKV(iKeyB, iValueB);
-                               t1.commitTransaction();
-                       } catch (Exception e) {
-                               System.out.println("Connection Failure!");
-                       }
-
-                       try {
-                               t2.startTransaction();
-                               if (i != 0) {
-                                       IoTString tmp = t2.getSpeculative(iKeyCPrev);
-                                       if ((tmp == null) || !tmp.equals(iValueCPrev)) {
-                                               System.out.println("Key c Error: " + i);
-                                               foundError = true;
-                                       }
-                               }
-                               t2.addKV(iKeyC, iValueC);
-                               t2.commitTransaction();
-                       } catch (Exception e) {
-                               System.out.println("Connection Failure!");
-                       }
-
-                       try {
-                               t2.startTransaction();
-                               if (i != 0) {
-                                       IoTString tmp = t2.getSpeculative(iKeyDPrev);
-                                       if ((tmp == null) || !tmp.equals(iValueDPrev)) {
-                                               System.out.println("Key d Error: " + i);
-                                               foundError = true;
-                                       }
-                               }
-                               t2.addKV(iKeyD, iValueD);
-                               t2.commitTransaction();
-                       } catch (Exception e) {
-                               System.out.println("Connection Failure!");
-                       }
-               }
-
-               while (true) {
-                       try {
-                               t1.update();
-                               break;
-                       } catch (Exception e) {
-
-                       }
-               }
-
-               while (true) {
-                       try {
-                               t2.update();
-                               break;
-                       } catch (Exception e) {
-
-                       }
-               }
-
-               while (true) {
-                       try {
-                               t1.update();
-                               break;
-                       } catch (Exception e) {
-
-                       }
-               }
-
-               while (true) {
-                       try {
-                               t2.update();
-                               break;
-                       } catch (Exception e) {
-
-                       }
-               }
-
-
-               System.out.println("Checking Key-Values...");
-               for (int i = 0; i < NUMBER_OF_TESTS; i++) {
-
-                       String keyA = "a" + i;
-                       String keyB = "b" + i;
-                       String keyC = "c" + i;
-                       String keyD = "d" + i;
-                       String valueA = "a" + i;
-                       String valueB = "b" + i;
-                       String valueC = "c" + i;
-                       String valueD = "d" + i;
-
-                       IoTString iKeyA = new IoTString(keyA);
-                       IoTString iKeyB = new IoTString(keyB);
-                       IoTString iKeyC = new IoTString(keyC);
-                       IoTString iKeyD = new IoTString(keyD);
-                       IoTString iValueA = new IoTString(valueA);
-                       IoTString iValueB = new IoTString(valueB);
-                       IoTString iValueC = new IoTString(valueC);
-                       IoTString iValueD = new IoTString(valueD);
-
-
-                       IoTString testValA1 = t1.getCommitted(iKeyA);
-                       IoTString testValB1 = t1.getCommitted(iKeyB);
-                       IoTString testValC1 = t1.getCommitted(iKeyC);
-                       IoTString testValD1 = t1.getCommitted(iKeyD);
-
-                       IoTString testValA2 = t2.getCommitted(iKeyA);
-                       IoTString testValB2 = t2.getCommitted(iKeyB);
-                       IoTString testValC2 = t2.getCommitted(iKeyC);
-                       IoTString testValD2 = t2.getCommitted(iKeyD);
-
-                       if ((testValA1 == null) || (testValA1.equals(iValueA) == false)) {
-                               System.out.println("Key-Value t1 incorrect: " + keyA);
-                               foundError = true;
-                       }
-
-                       if ((testValB1 == null) || (testValB1.equals(iValueB) == false)) {
-                               System.out.println("Key-Value t1 incorrect: " + keyB);
-                               foundError = true;
-                       }
-
-                       if ((testValC1 == null) || (testValC1.equals(iValueC) == false)) {
-                               System.out.println("Key-Value t1 incorrect: " + keyC);
-                               foundError = true;
-                       }
-
-                       if ((testValD1 == null) || (testValD1.equals(iValueD) == false)) {
-                               System.out.println("Key-Value t1 incorrect: " + keyD);
-                               foundError = true;
-                       }
-
-
-                       if ((testValA2 == null) || (testValA2.equals(iValueA) == false)) {
-                               System.out.println("Key-Value t2 incorrect: " + keyA + "    " + testValA2);
-                               foundError = true;
-                       }
-
-                       if ((testValB2 == null) || (testValB2.equals(iValueB) == false)) {
-                               System.out.println("Key-Value t2 incorrect: " + keyB + "    " + testValB2);
-                               foundError = true;
-                       }
-
-                       if ((testValC2 == null) || (testValC2.equals(iValueC) == false)) {
-                               System.out.println("Key-Value t2 incorrect: " + keyC + "    " + testValC2);
-                               foundError = true;
-                       }
-
-                       if ((testValD2 == null) || (testValD2.equals(iValueD) == false)) {
-                               System.out.println("Key-Value t2 incorrect: " + keyD + "    " + testValD2);
-                               foundError = true;
-                       }
-               }
-
-               if (foundError) {
-                       System.out.println("Found Errors...");
-               } else {
-                       System.out.println("No Errors Found...");
-               }
-       }
-
-       static void test7() throws ServerException {
-
-               long startTime = 0;
-               long endTime = 0;
-               boolean foundError = false;
-
-               // Setup the 2 clients
-               Table t1 = new Table("http://127.0.0.1/test.iotcloud/", "reallysecret", 321);
-               t1.initTable();
-               Table t2 = new Table("http://127.0.0.1/test.iotcloud/", "reallysecret", 351);
-               t2.update();
-
-               startTime = System.currentTimeMillis();
-               // Make the Keys
-               System.out.println("Setting up keys");
-               for (int i = 0; i < 4; i++) {
-                       String a = "a" + i;
-                       String b = "b" + i;
-                       String c = "c" + i;
-                       String d = "d" + i;
-                       IoTString ia = new IoTString(a);
-                       IoTString ib = new IoTString(b);
-                       IoTString ic = new IoTString(c);
-                       IoTString id = new IoTString(d);
-                       t1.createNewKey(ia, 321);
-                       t1.createNewKey(ib, 351);
-                       t2.createNewKey(ic, 321);
-                       t2.createNewKey(id, 351);
-               }
-               endTime = System.currentTimeMillis();
-               System.out.println("Time Taken: " + (double)   ((endTime - startTime) / 1000.0)    );
-               System.out.println("Time Taken Per Key: " + (double)  (((endTime - startTime) / 1000.0) / (4))   );
-               System.out.println();
-
-               // Do Updates for the keys
-               System.out.println("Setting Key-Values...");
-
-               startTime = System.currentTimeMillis();
-               System.out.println("Setting b...");
-               for (int t = 0; t < NUMBER_OF_TESTS; t++) {
-                       for (int i = 0; i < 4; i++) {
-                               String keyB = "b" + i;
-                               String valueB = "b" + (i + t);
-
-                               IoTString iKeyB = new IoTString(keyB);
-                               IoTString iValueB = new IoTString(valueB);
-
-                               t1.startTransaction();
-                               t1.getSpeculativeAtomic(iKeyB);
-                               t1.addKV(iKeyB, iValueB);
-                               t1.commitTransaction();
-                       }
-               }
-               endTime = System.currentTimeMillis();
-               System.out.println("Time Taken: " + (double)   ((endTime - startTime) / 1000.0)    );
-               System.out.println("Time Taken Per Key: " + (double)  (((endTime - startTime) / 1000.0) / (4 * NUMBER_OF_TESTS))   );
-               System.out.println();
-
-
-
-               System.out.println("Checking b");
-               for (int i = 0; i < 4; i++) {
-
-                       String keyB = "b" + i;
-                       String valueB = "b" + (i + NUMBER_OF_TESTS - 1);
-                       IoTString iKeyB = new IoTString(keyB);
-                       IoTString iValueB = new IoTString(valueB);
-
-                       IoTString testValB1 = t1.getSpeculative(iKeyB);
-                       IoTString testValB2 = t2.getSpeculative(iKeyB);
-
-                       if ((testValB1 == null) || (testValB1.equals(iValueB) == false)) {
-                               System.out.println("Key-Value t1 incorrect: " + keyB + "    " + testValB1);
-                               foundError = true;
-                       }
-
-                       if ((testValB2 != null)) {
-                               System.out.println("Key-Value t2 incorrect: " + keyB + "    " + testValB2);
-                               foundError = true;
-                       }
-               }
-
-               startTime = System.currentTimeMillis();
-               System.out.println("Setting c...");
-               for (int t = 0; t < NUMBER_OF_TESTS; t++) {
-                       for (int i = 0; i < 4; i++) {
-                               String keyC = "c" + i;
-                               String valueC = "c" + (i + t);
-
-                               IoTString iKeyC = new IoTString(keyC);
-                               IoTString iValueC = new IoTString(valueC);
-
-                               t2.startTransaction();
-                               t2.getSpeculativeAtomic(iKeyC);
-                               t2.addKV(iKeyC, iValueC);
-                               t2.commitTransaction();
-                       }
-               }
-               endTime = System.currentTimeMillis();
-               System.out.println("Time Taken: " + (double)   ((endTime - startTime) / 1000.0)    );
-               System.out.println("Time Taken Per Key: " + (double)  (((endTime - startTime) / 1000.0) / (4 * NUMBER_OF_TESTS))   );
-               System.out.println();
-
-
-               System.out.println("Checking c");
-               for (int i = 0; i < 4; i++) {
-                       String keyC = "c" + i;
-                       String valueC = "c" + (i + NUMBER_OF_TESTS - 1);
-                       IoTString iKeyC = new IoTString(keyC);
-                       IoTString iValueC = new IoTString(valueC);
-
-                       IoTString testValC1 = t1.getSpeculative(iKeyC);
-                       IoTString testValC2 = t2.getSpeculative(iKeyC);
-
-                       if ((testValC1 != null)) {
-                               System.out.println("Key-Value t1 incorrect: " + keyC + "   " + testValC1);
-                               foundError = true;
-                       }
-
-                       if ((testValC2 == null) || (testValC2.equals(iValueC) == false)) {
-                               System.out.println("Key-Value t2 incorrect: " + keyC + "   " + testValC2);
-                               foundError = true;
-                       }
-               }
-
-               System.out.println("Setting a and b...");
-               for (int t = 0; t < NUMBER_OF_TESTS; t++) {
-                       for (int i = 0; i < 4; i++) {
-                               String keyA = "a" + i;
-                               String keyD = "d" + i;
-                               String valueA = "a" + (i + t);
-                               String valueD = "d" + (i + t);
-
-                               IoTString iKeyA = new IoTString(keyA);
-                               IoTString iKeyD = new IoTString(keyD);
-                               IoTString iValueA = new IoTString(valueA);
-                               IoTString iValueD = new IoTString(valueD);
-
-                               t1.startTransaction();
-                               t1.addKV(iKeyA, iValueA);
-                               t1.commitTransaction();
-
-                               t2.startTransaction();
-                               t2.addKV(iKeyD, iValueD);
-                               t2.commitTransaction();
-                       }
-               }
-
-               System.out.println("Updating Clients...");
-               t1.update();
-               t2.update();
-               t1.update();
-               t2.update();
-
-               System.out.println("Checking Key-Values...");
-               for (int i = 0; i < 4; i++) {
-
-                       String keyA = "a" + i;
-                       String keyB = "b" + i;
-                       String keyC = "c" + i;
-                       String keyD = "d" + i;
-                       String valueA = "a" + (i + NUMBER_OF_TESTS - 1);
-                       String valueB = "b" + (i + NUMBER_OF_TESTS - 1);
-                       String valueC = "c" + (i + NUMBER_OF_TESTS - 1);
-                       String valueD = "d" + (i + NUMBER_OF_TESTS - 1);
-
-                       IoTString iKeyA = new IoTString(keyA);
-                       IoTString iKeyB = new IoTString(keyB);
-                       IoTString iKeyC = new IoTString(keyC);
-                       IoTString iKeyD = new IoTString(keyD);
-                       IoTString iValueA = new IoTString(valueA);
-                       IoTString iValueB = new IoTString(valueB);
-                       IoTString iValueC = new IoTString(valueC);
-                       IoTString iValueD = new IoTString(valueD);
-
-
-                       IoTString testValA1 = t1.getCommitted(iKeyA);
-                       IoTString testValB1 = t1.getCommitted(iKeyB);
-                       IoTString testValC1 = t1.getCommitted(iKeyC);
-                       IoTString testValD1 = t1.getCommitted(iKeyD);
-
-                       IoTString testValA2 = t2.getCommitted(iKeyA);
-                       IoTString testValB2 = t2.getCommitted(iKeyB);
-                       IoTString testValC2 = t2.getCommitted(iKeyC);
-                       IoTString testValD2 = t2.getCommitted(iKeyD);
-
-                       if ((testValA1 == null) || (testValA1.equals(iValueA) == false)) {
-                               System.out.println("Key-Value t1 incorrect: " + keyA + "    " + testValA1);
-                               foundError = true;
-                       }
-
-                       if ((testValB1 == null) || (testValB1.equals(iValueB) == false)) {
-                               System.out.println("Key-Value t1 incorrect: " + keyB + "    " + testValB1);
-                               foundError = true;
-                       }
-
-                       if ((testValC1 == null) || (testValC1.equals(iValueC) == false)) {
-                               System.out.println("Key-Value t1 incorrect: " + keyC + "    " + testValC1);
-                               foundError = true;
-                       }
-
-                       if ((testValD1 == null) || (testValD1.equals(iValueD) == false)) {
-                               System.out.println("Key-Value t1 incorrect: " + keyD + "    " + testValD1);
-                               foundError = true;
-                       }
-
-                       if ((testValA2 == null) || (testValA2.equals(iValueA) == false)) {
-                               System.out.println("Key-Value t2 incorrect: " + keyA + "    " + testValA2);
-                               foundError = true;
-                       }
-
-                       if ((testValB2 == null) || (testValB2.equals(iValueB) == false)) {
-                               System.out.println("Key-Value t2 incorrect: " + keyB + "    " + testValB2);
-                               foundError = true;
-                       }
-
-                       if ((testValC2 == null) || (testValC2.equals(iValueC) == false)) {
-                               System.out.println("Key-Value t2 incorrect: " + keyC + "    " + testValC2);
-                               foundError = true;
-                       }
-
-                       if ((testValD2 == null) || (testValD2.equals(iValueD) == false)) {
-                               System.out.println("Key-Value t2 incorrect: " + keyD + "    " + testValD2);
-                               foundError = true;
-                       }
-               }
-
-               if (foundError) {
-                       System.out.println("Found Errors...");
-               } else {
-                       System.out.println("No Errors Found...");
-               }
-       }
-
-       static void test6()  throws ServerException {
-               long startTime = 0;
-               long endTime = 0;
-
-               // Setup the 2 clients
-               Table t1 = new Table("http://127.0.0.1/test.iotcloud/", "reallysecret", 321);
-               t1.initTable();
-               Table t2 = new Table("http://127.0.0.1/test.iotcloud/", "reallysecret", 351);
-               t2.update();
-
-
-               // Make the Keys
-               System.out.println("Setting up keys");
-               startTime = System.currentTimeMillis();
-               for (int i = 0; i < NUMBER_OF_TESTS; i++) {
-                       String a = "a" + i;
-                       String b = "b" + i;
-                       String c = "c" + i;
-                       String d = "d" + i;
-                       IoTString ia = new IoTString(a);
-                       IoTString ib = new IoTString(b);
-                       IoTString ic = new IoTString(c);
-                       IoTString id = new IoTString(d);
-                       t1.createNewKey(ia, 321);
-                       t1.createNewKey(ib, 351);
-                       t2.createNewKey(ic, 321);
-                       t2.createNewKey(id, 351);
-               }
-               endTime = System.currentTimeMillis();
-
-
-
-               System.out.println("Time Taken: " + (double)   ((endTime - startTime) / 1000.0)    );
-               System.out.println("Time Taken Per Key: " + (double)  (((endTime - startTime) / 1000.0) / (NUMBER_OF_TESTS * 4))   );
-               System.out.println();
-
-
-               // Do Updates for the keys
-               System.out.println("Setting Key-Values...");
-               startTime = System.currentTimeMillis();
-               for (int i = 0; i < NUMBER_OF_TESTS; i++) {
-                       String keyA = "a" + i;
-                       String keyB = "b" + i;
-                       String keyC = "c" + i;
-                       String keyD = "d" + i;
-                       String valueA = "a" + i;
-                       String valueB = "b" + i;
-                       String valueC = "c" + i;
-                       String valueD = "d" + i;
-
-                       IoTString iKeyA = new IoTString(keyA);
-                       IoTString iKeyB = new IoTString(keyB);
-                       IoTString iKeyC = new IoTString(keyC);
-                       IoTString iKeyD = new IoTString(keyD);
-                       IoTString iValueA = new IoTString(valueA);
-                       IoTString iValueB = new IoTString(valueB);
-                       IoTString iValueC = new IoTString(valueC);
-                       IoTString iValueD = new IoTString(valueD);
-
-                       t1.startTransaction();
-                       t1.getCommittedAtomic(iKeyA);
-                       t1.addKV(iKeyA, iValueA);
-                       t1.commitTransaction();
-
-                       t1.startTransaction();
-                       t1.getCommittedAtomic(iKeyB);
-                       t1.addKV(iKeyB, iValueB);
-                       t1.commitTransaction();
-
-                       t2.startTransaction();
-                       t2.getCommittedAtomic(iKeyC);
-                       t2.addKV(iKeyC, iValueC);
-                       t2.commitTransaction();
-
-                       t2.startTransaction();
-                       t2.getCommittedAtomic(iKeyD);
-                       t2.addKV(iKeyD, iValueD);
-                       t2.commitTransaction();
-               }
-               endTime = System.currentTimeMillis();
-
-               System.out.println("Time Taken: " + (double)   ((endTime - startTime) / 1000.0)    );
-               System.out.println("Time Taken Per Update: " + (double)  (((endTime - startTime) / 1000.0) / (NUMBER_OF_TESTS * 4))   );
-               System.out.println();
-
-
-               System.out.println("Updating Clients...");
-               t1.update();
-               t2.update();
-               t1.update();
-               t2.update();
-
-               boolean foundError = false;
-
-               System.out.println("Checking Key-Values...");
-               for (int i = 0; i < NUMBER_OF_TESTS; i++) {
-
-                       String keyA = "a" + i;
-                       String keyB = "b" + i;
-                       String keyC = "c" + i;
-                       String keyD = "d" + i;
-                       String valueA = "a" + i;
-                       String valueB = "b" + i;
-                       String valueC = "c" + i;
-                       String valueD = "d" + i;
-
-                       IoTString iKeyA = new IoTString(keyA);
-                       IoTString iKeyB = new IoTString(keyB);
-                       IoTString iKeyC = new IoTString(keyC);
-                       IoTString iKeyD = new IoTString(keyD);
-                       IoTString iValueA = new IoTString(valueA);
-                       IoTString iValueB = new IoTString(valueB);
-                       IoTString iValueC = new IoTString(valueC);
-                       IoTString iValueD = new IoTString(valueD);
-
-
-                       IoTString testValA1 = t1.getCommitted(iKeyA);
-                       IoTString testValB1 = t1.getCommitted(iKeyB);
-                       IoTString testValC1 = t1.getCommitted(iKeyC);
-                       IoTString testValD1 = t1.getCommitted(iKeyD);
-
-                       IoTString testValA2 = t2.getCommitted(iKeyA);
-                       IoTString testValB2 = t2.getCommitted(iKeyB);
-                       IoTString testValC2 = t2.getCommitted(iKeyC);
-                       IoTString testValD2 = t2.getCommitted(iKeyD);
-
-                       if ((testValA1 == null) || (testValA1.equals(iValueA) == false)) {
-                               System.out.println("Key-Value t1 incorrect: " + keyA);
-                               foundError = true;
-                       }
-
-                       if ((testValB1 == null) || (testValB1.equals(iValueB) == false)) {
-                               System.out.println("Key-Value t1 incorrect: " + keyB);
-                               foundError = true;
-                       }
-
-                       if ((testValC1 == null) || (testValC1.equals(iValueC) == false)) {
-                               System.out.println("Key-Value t1 incorrect: " + keyC);
-                               foundError = true;
-                       }
-
-                       if ((testValD1 == null) || (testValD1.equals(iValueD) == false)) {
-                               System.out.println("Key-Value t1 incorrect: " + keyD);
-                               foundError = true;
-                       }
-
-
-                       if ((testValA2 == null) || (testValA2.equals(iValueA) == false)) {
-                               System.out.println("Key-Value t2 incorrect: " + keyA + "    " + testValA2);
-                               foundError = true;
-                       }
-
-                       if ((testValB2 == null) || (testValB2.equals(iValueB) == false)) {
-                               System.out.println("Key-Value t2 incorrect: " + keyB + "    " + testValB2);
-                               foundError = true;
-                       }
-
-                       if ((testValC2 == null) || (testValC2.equals(iValueC) == false)) {
-                               System.out.println("Key-Value t2 incorrect: " + keyC + "    " + testValC2);
-                               foundError = true;
-                       }
-
-                       if ((testValD2 == null) || (testValD2.equals(iValueD) == false)) {
-                               System.out.println("Key-Value t2 incorrect: " + keyD + "    " + testValD2);
-                               foundError = true;
-                       }
-               }
-
-               if (foundError) {
-                       System.out.println("Found Errors...");
-               } else {
-                       System.out.println("No Errors Found...");
-               }
-
-               // System.out.println();
-               // System.out.println();
-               // System.out.println();
-               // t1.printSlots();
-               // System.out.println();
-               // System.out.println();
-               // System.out.println();
-               // t2.printSlots();
-       }
-
-       static void test5() throws ServerException {
-
-               long startTime = 0;
-               long endTime = 0;
-               boolean foundError = false;
-
-               // Setup the 2 clients
-               Table t1 = new Table("http://127.0.0.1/test.iotcloud/", "reallysecret", 321);
-               t1.initTable();
-               Table t2 = new Table("http://127.0.0.1/test.iotcloud/", "reallysecret", 351);
-               t2.update();
-
-
-               // Make the Keys
-               System.out.println("Setting up keys");
-               for (int i = 0; i < 4; i++) {
-                       String a = "a" + i;
-                       String b = "b" + i;
-                       String c = "c" + i;
-                       String d = "d" + i;
-                       IoTString ia = new IoTString(a);
-                       IoTString ib = new IoTString(b);
-                       IoTString ic = new IoTString(c);
-                       IoTString id = new IoTString(d);
-                       t1.createNewKey(ia, 321);
-                       t1.createNewKey(ib, 351);
-                       t2.createNewKey(ic, 321);
-                       t2.createNewKey(id, 351);
-               }
-               endTime = System.currentTimeMillis();
-
-
-
-               System.out.println("Time Taken: " + (double)   ((endTime - startTime) / 1000.0)    );
-               System.out.println("Time Taken Per Key: " + (double)  (((endTime - startTime) / 1000.0) / (4))   );
-               System.out.println();
-
-
-               // Do Updates for the keys
-               System.out.println("Setting Key-Values...");
-
-               for (int t = 0; t < NUMBER_OF_TESTS; t++) {
-                       for (int i = 0; i < 4; i++) {
-                               String keyB = "b" + i;
-                               String valueB = "b" + (i + t);
-
-                               IoTString iKeyB = new IoTString(keyB);
-                               IoTString iValueB = new IoTString(valueB);
-
-                               t1.startTransaction();
-                               t1.addKV(iKeyB, iValueB);
-                               t1.commitTransaction();
-                       }
-               }
-
-               for (int i = 0; i < 4; i++) {
-
-                       String keyB = "b" + i;
-                       String valueB = "b" + (i + NUMBER_OF_TESTS - 1);
-                       IoTString iKeyB = new IoTString(keyB);
-                       IoTString iValueB = new IoTString(valueB);
-
-                       IoTString testValB1 = t1.getSpeculative(iKeyB);
-                       IoTString testValB2 = t2.getSpeculative(iKeyB);
-
-                       if ((testValB1 == null) || (testValB1.equals(iValueB) == false)) {
-                               System.out.println("Key-Value t1 incorrect: " + keyB);
-                               foundError = true;
-                       }
-
-                       if ((testValB2 != null)) {
-                               System.out.println("Key-Value t2 incorrect: " + keyB);
-                               foundError = true;
-                       }
-               }
-
-               for (int t = 0; t < NUMBER_OF_TESTS; t++) {
-                       for (int i = 0; i < 4; i++) {
-                               String keyC = "c" + i;
-                               String valueC = "c" + (i + t);
-
-                               IoTString iKeyC = new IoTString(keyC);
-                               IoTString iValueC = new IoTString(valueC);
-
-                               t2.startTransaction();
-                               t2.addKV(iKeyC, iValueC);
-                               t2.commitTransaction();
-                       }
-               }
-
-               for (int i = 0; i < 4; i++) {
-                       String keyC = "c" + i;
-                       String valueC = "c" + (i + NUMBER_OF_TESTS - 1);
-                       IoTString iKeyC = new IoTString(keyC);
-                       IoTString iValueC = new IoTString(valueC);
-
-                       IoTString testValC1 = t1.getSpeculative(iKeyC);
-                       IoTString testValC2 = t2.getSpeculative(iKeyC);
-
-                       if ((testValC1 != null)) {
-                               System.out.println("Key-Value t1 incorrect: " + keyC + "   " + testValC1);
-                               foundError = true;
-                       }
-
-                       if ((testValC2 == null) || (testValC2.equals(iValueC) == false)) {
-                               System.out.println("Key-Value t2 incorrect: " + keyC + "   " + testValC2);
-                               foundError = true;
-                       }
-               }
-
-               for (int t = 0; t < NUMBER_OF_TESTS; t++) {
-                       for (int i = 0; i < 4; i++) {
-                               String keyA = "a" + i;
-                               String keyD = "d" + i;
-                               String valueA = "a" + (i + t);
-                               String valueD = "d" + (i + t);
-
-                               IoTString iKeyA = new IoTString(keyA);
-                               IoTString iKeyD = new IoTString(keyD);
-                               IoTString iValueA = new IoTString(valueA);
-                               IoTString iValueD = new IoTString(valueD);
-
-                               t1.startTransaction();
-                               t1.addKV(iKeyA, iValueA);
-                               t1.commitTransaction();
-
-                               t2.startTransaction();
-                               t2.addKV(iKeyD, iValueD);
-                               t2.commitTransaction();
-                       }
-               }
-
-               System.out.println("Updating Clients...");
-               t1.update();
-               t2.update();
-               t1.update();
-               t2.update();
-
-
-               System.out.println("Checking Key-Values...");
-               for (int i = 0; i < 4; i++) {
-
-                       String keyA = "a" + i;
-                       String keyB = "b" + i;
-                       String keyC = "c" + i;
-                       String keyD = "d" + i;
-                       String valueA = "a" + (i + NUMBER_OF_TESTS - 1);
-                       String valueB = "b" + (i + NUMBER_OF_TESTS - 1);
-                       String valueC = "c" + (i + NUMBER_OF_TESTS - 1);
-                       String valueD = "d" + (i + NUMBER_OF_TESTS - 1);
-
-                       IoTString iKeyA = new IoTString(keyA);
-                       IoTString iKeyB = new IoTString(keyB);
-                       IoTString iKeyC = new IoTString(keyC);
-                       IoTString iKeyD = new IoTString(keyD);
-                       IoTString iValueA = new IoTString(valueA);
-                       IoTString iValueB = new IoTString(valueB);
-                       IoTString iValueC = new IoTString(valueC);
-                       IoTString iValueD = new IoTString(valueD);
-
-
-                       IoTString testValA1 = t1.getCommitted(iKeyA);
-                       IoTString testValB1 = t1.getCommitted(iKeyB);
-                       IoTString testValC1 = t1.getCommitted(iKeyC);
-                       IoTString testValD1 = t1.getCommitted(iKeyD);
-
-                       IoTString testValA2 = t2.getCommitted(iKeyA);
-                       IoTString testValB2 = t2.getCommitted(iKeyB);
-                       IoTString testValC2 = t2.getCommitted(iKeyC);
-                       IoTString testValD2 = t2.getCommitted(iKeyD);
-
-                       if ((testValA1 == null) || (testValA1.equals(iValueA) == false)) {
-                               System.out.println("Key-Value t1 incorrect: " + keyA + "    " + testValA1);
-                               foundError = true;
-                       }
-
-                       if ((testValB1 == null) || (testValB1.equals(iValueB) == false)) {
-                               System.out.println("Key-Value t1 incorrect: " + keyB + "    " + testValB1);
-                               foundError = true;
-                       }
-
-                       if ((testValC1 == null) || (testValC1.equals(iValueC) == false)) {
-                               System.out.println("Key-Value t1 incorrect: " + keyC + "    " + testValC1);
-                               foundError = true;
-                       }
-
-                       if ((testValD1 == null) || (testValD1.equals(iValueD) == false)) {
-                               System.out.println("Key-Value t1 incorrect: " + keyD + "    " + testValD1);
-                               foundError = true;
-                       }
-
-
-                       if ((testValA2 == null) || (testValA2.equals(iValueA) == false)) {
-                               System.out.println("Key-Value t2 incorrect: " + keyA + "    " + testValA2);
-                               foundError = true;
-                       }
-
-                       if ((testValB2 == null) || (testValB2.equals(iValueB) == false)) {
-                               System.out.println("Key-Value t2 incorrect: " + keyB + "    " + testValB2);
-                               foundError = true;
-                       }
-
-                       if ((testValC2 == null) || (testValC2.equals(iValueC) == false)) {
-                               System.out.println("Key-Value t2 incorrect: " + keyC + "    " + testValC2);
-                               foundError = true;
-                       }
-
-                       if ((testValD2 == null) || (testValD2.equals(iValueD) == false)) {
-                               System.out.println("Key-Value t2 incorrect: " + keyD + "    " + testValD2);
-                               foundError = true;
-                       }
-               }
-
-               if (foundError) {
-                       System.out.println("Found Errors...");
-               } else {
-                       System.out.println("No Errors Found...");
-               }
-       }
-
-       static void test4() throws ServerException {
-
-               long startTime = 0;
-               long endTime = 0;
-
-               // Setup the 2 clients
-               Table t1 = new Table("http://127.0.0.1/test.iotcloud/", "reallysecret", 321);
-               t1.initTable();
-               Table t2 = new Table("http://127.0.0.1/test.iotcloud/", "reallysecret", 351);
-               t2.update();
-
-
-               // Make the Keys
-               System.out.println("Setting up keys");
-               startTime = System.currentTimeMillis();
-               for (int i = 0; i < 4; i++) {
-                       String a = "a" + i;
-                       String b = "b" + i;
-                       String c = "c" + i;
-                       String d = "d" + i;
-                       IoTString ia = new IoTString(a);
-                       IoTString ib = new IoTString(b);
-                       IoTString ic = new IoTString(c);
-                       IoTString id = new IoTString(d);
-                       t1.createNewKey(ia, 321);
-                       t1.createNewKey(ib, 351);
-                       t2.createNewKey(ic, 321);
-                       t2.createNewKey(id, 351);
-               }
-               endTime = System.currentTimeMillis();
-
-
-
-               System.out.println("Time Taken: " + (double)   ((endTime - startTime) / 1000.0)    );
-               System.out.println("Time Taken Per Key: " + (double)  (((endTime - startTime) / 1000.0) / (NUMBER_OF_TESTS * 4))   );
-               System.out.println();
-
-
-               // Do Updates for the keys
-               System.out.println("Setting Key-Values...");
-               startTime = System.currentTimeMillis();
-               for (int t = 0; t < NUMBER_OF_TESTS; t++) {
-                       for (int i = 0; i < 4; i++) {
-                               String keyA = "a" + i;
-                               String keyB = "b" + i;
-                               String keyC = "c" + i;
-                               String keyD = "d" + i;
-                               String valueA = "a" + i;
-                               String valueB = "b" + i;
-                               String valueC = "c" + i;
-                               String valueD = "d" + i;
-
-                               IoTString iKeyA = new IoTString(keyA);
-                               IoTString iKeyB = new IoTString(keyB);
-                               IoTString iKeyC = new IoTString(keyC);
-                               IoTString iKeyD = new IoTString(keyD);
-                               IoTString iValueA = new IoTString(valueA);
-                               IoTString iValueB = new IoTString(valueB);
-                               IoTString iValueC = new IoTString(valueC);
-                               IoTString iValueD = new IoTString(valueD);
-
-                               t1.startTransaction();
-                               t1.addKV(iKeyA, iValueA);
-                               t1.commitTransaction();
-
-                               t1.startTransaction();
-                               t1.addKV(iKeyB, iValueB);
-                               t1.commitTransaction();
-
-                               t2.startTransaction();
-                               t2.addKV(iKeyC, iValueC);
-                               t2.commitTransaction();
-
-                               t2.startTransaction();
-                               t2.addKV(iKeyD, iValueD);
-                               t2.commitTransaction();
-                       }
-               }
-               endTime = System.currentTimeMillis();
-
-               System.out.println("Time Taken: " + (double)   ((endTime - startTime) / 1000.0)    );
-               System.out.println("Time Taken Per Update: " + (double)  (((endTime - startTime) / 1000.0) / (NUMBER_OF_TESTS * 16))   );
-               System.out.println();
-
-
-               System.out.println("Updating Clients...");
-               t1.update();
-               t2.update();
-               t1.update();
-               t2.update();
-
-               boolean foundError = false;
-
-               System.out.println("Checking Key-Values...");
-               for (int i = 0; i < 4; i++) {
-
-                       String keyA = "a" + i;
-                       String keyB = "b" + i;
-                       String keyC = "c" + i;
-                       String keyD = "d" + i;
-                       String valueA = "a" + i;
-                       String valueB = "b" + i;
-                       String valueC = "c" + i;
-                       String valueD = "d" + i;
-
-                       IoTString iKeyA = new IoTString(keyA);
-                       IoTString iKeyB = new IoTString(keyB);
-                       IoTString iKeyC = new IoTString(keyC);
-                       IoTString iKeyD = new IoTString(keyD);
-                       IoTString iValueA = new IoTString(valueA);
-                       IoTString iValueB = new IoTString(valueB);
-                       IoTString iValueC = new IoTString(valueC);
-                       IoTString iValueD = new IoTString(valueD);
-
-
-                       IoTString testValA1 = t1.getCommitted(iKeyA);
-                       IoTString testValB1 = t1.getCommitted(iKeyB);
-                       IoTString testValC1 = t1.getCommitted(iKeyC);
-                       IoTString testValD1 = t1.getCommitted(iKeyD);
-
-                       IoTString testValA2 = t2.getCommitted(iKeyA);
-                       IoTString testValB2 = t2.getCommitted(iKeyB);
-                       IoTString testValC2 = t2.getCommitted(iKeyC);
-                       IoTString testValD2 = t2.getCommitted(iKeyD);
-
-                       if ((testValA1 == null) || (testValA1.equals(iValueA) == false)) {
-                               System.out.println("Key-Value t1 incorrect: " + keyA);
-                               foundError = true;
-                       }
-
-                       if ((testValB1 == null) || (testValB1.equals(iValueB) == false)) {
-                               System.out.println("Key-Value t1 incorrect: " + keyB);
-                               foundError = true;
-                       }
-
-                       if ((testValC1 == null) || (testValC1.equals(iValueC) == false)) {
-                               System.out.println("Key-Value t1 incorrect: " + keyC);
-                               foundError = true;
-                       }
-
-                       if ((testValD1 == null) || (testValD1.equals(iValueD) == false)) {
-                               System.out.println("Key-Value t1 incorrect: " + keyD);
-                               foundError = true;
-                       }
-
-
-                       if ((testValA2 == null) || (testValA2.equals(iValueA) == false)) {
-                               System.out.println("Key-Value t2 incorrect: " + keyA + "    " + testValA2);
-                               foundError = true;
-                       }
-
-                       if ((testValB2 == null) || (testValB2.equals(iValueB) == false)) {
-                               System.out.println("Key-Value t2 incorrect: " + keyB + "    " + testValB2);
-                               foundError = true;
-                       }
-
-                       if ((testValC2 == null) || (testValC2.equals(iValueC) == false)) {
-                               System.out.println("Key-Value t2 incorrect: " + keyC + "    " + testValC2);
-                               foundError = true;
-                       }
-
-                       if ((testValD2 == null) || (testValD2.equals(iValueD) == false)) {
-                               System.out.println("Key-Value t2 incorrect: " + keyD + "    " + testValD2);
-                               foundError = true;
-                       }
-               }
-
-               if (foundError) {
-                       System.out.println("Found Errors...");
-               } else {
-                       System.out.println("No Errors Found...");
-               }
-       }
-
-       static void test3() throws ServerException {
-
-               long startTime = 0;
-               long endTime = 0;
-               boolean foundError = false;
-
-               // Setup the 2 clients
-               Table t1 = new Table("http://127.0.0.1/test.iotcloud/", "reallysecret", 321);
-               t1.initTable();
-               Table t2 = new Table("http://127.0.0.1/test.iotcloud/", "reallysecret", 351);
-               t2.update();
-
-
-               // Make the Keys
-               System.out.println("Setting up keys");
-               startTime = System.currentTimeMillis();
-               for (int i = 0; i < NUMBER_OF_TESTS; i++) {
-                       String a = "a" + i;
-                       String b = "b" + i;
-                       String c = "c" + i;
-                       String d = "d" + i;
-                       IoTString ia = new IoTString(a);
-                       IoTString ib = new IoTString(b);
-                       IoTString ic = new IoTString(c);
-                       IoTString id = new IoTString(d);
-                       t1.createNewKey(ia, 321);
-                       t1.createNewKey(ib, 351);
-                       t2.createNewKey(ic, 321);
-                       t2.createNewKey(id, 351);
-               }
-               endTime = System.currentTimeMillis();
-
-
-
-               System.out.println("Time Taken: " + (double)   ((endTime - startTime) / 1000.0)    );
-               System.out.println("Time Taken Per Key: " + (double)  (((endTime - startTime) / 1000.0) / (NUMBER_OF_TESTS * 4))   );
-               System.out.println();
-
-
-               // Do Updates for the keys
-               System.out.println("Setting Key-Values...");
-               startTime = System.currentTimeMillis();
-               for (int i = 0; i < NUMBER_OF_TESTS; i++) {
-                       String keyB = "b" + i;
-                       String valueB = "b" + i;
-
-                       IoTString iKeyB = new IoTString(keyB);
-                       IoTString iValueB = new IoTString(valueB);
-
-                       t1.startTransaction();
-                       t1.addKV(iKeyB, iValueB);
-                       t1.commitTransaction();
-               }
-
-               for (int i = 0; i < NUMBER_OF_TESTS; i++) {
-                       String keyC = "c" + i;
-                       String valueC = "c" + i;
-
-                       IoTString iKeyC = new IoTString(keyC);
-                       IoTString iValueC = new IoTString(valueC);
-
-                       t2.startTransaction();
-                       t2.addKV(iKeyC, iValueC);
-                       t2.commitTransaction();
-               }
-
-               for (int i = 0; i < NUMBER_OF_TESTS; i++) {
-                       String keyA = "a" + i;
-                       String keyD = "d" + i;
-                       String valueA = "a" + i;
-                       String valueD = "d" + i;
-
-                       IoTString iKeyA = new IoTString(keyA);
-                       IoTString iKeyD = new IoTString(keyD);
-                       IoTString iValueA = new IoTString(valueA);
-                       IoTString iValueD = new IoTString(valueD);
-
-                       t1.startTransaction();
-                       t1.addKV(iKeyA, iValueA);
-                       t1.commitTransaction();
-
-                       t2.startTransaction();
-                       t2.addKV(iKeyD, iValueD);
-                       t2.commitTransaction();
-               }
-               endTime = System.currentTimeMillis();
-
-               System.out.println("Time Taken: " + (double)   ((endTime - startTime) / 1000.0)    );
-               System.out.println("Time Taken Per Update: " + (double)  (((endTime - startTime) / 1000.0) / (NUMBER_OF_TESTS * 4))   );
-               System.out.println();
-
-
-               System.out.println("Updating Clients...");
-               t1.update();
-               t2.update();
-               t1.update();
-               t2.update();
-
-
-               System.out.println("Checking Key-Values...");
-               for (int i = 0; i < NUMBER_OF_TESTS; i++) {
-
-                       String keyA = "a" + i;
-                       String keyB = "b" + i;
-                       String keyC = "c" + i;
-                       String keyD = "d" + i;
-                       String valueA = "a" + i;
-                       String valueB = "b" + i;
-                       String valueC = "c" + i;
-                       String valueD = "d" + i;
-
-                       IoTString iKeyA = new IoTString(keyA);
-                       IoTString iKeyB = new IoTString(keyB);
-                       IoTString iKeyC = new IoTString(keyC);
-                       IoTString iKeyD = new IoTString(keyD);
-                       IoTString iValueA = new IoTString(valueA);
-                       IoTString iValueB = new IoTString(valueB);
-                       IoTString iValueC = new IoTString(valueC);
-                       IoTString iValueD = new IoTString(valueD);
-
-
-                       IoTString testValA1 = t1.getCommitted(iKeyA);
-                       IoTString testValB1 = t1.getCommitted(iKeyB);
-                       IoTString testValC1 = t1.getCommitted(iKeyC);
-                       IoTString testValD1 = t1.getCommitted(iKeyD);
-
-                       IoTString testValA2 = t2.getCommitted(iKeyA);
-                       IoTString testValB2 = t2.getCommitted(iKeyB);
-                       IoTString testValC2 = t2.getCommitted(iKeyC);
-                       IoTString testValD2 = t2.getCommitted(iKeyD);
-
-                       if ((testValA1 == null) || (testValA1.equals(iValueA) == false)) {
-                               System.out.println("Key-Value t1 incorrect: " + keyA);
-                               foundError = true;
-                       }
-
-                       if ((testValB1 == null) || (testValB1.equals(iValueB) == false)) {
-                               System.out.println("Key-Value t1 incorrect: " + keyB);
-                               foundError = true;
-                       }
-
-                       if ((testValC1 == null) || (testValC1.equals(iValueC) == false)) {
-                               System.out.println("Key-Value t1 incorrect: " + keyC);
-                               foundError = true;
-                       }
-
-                       if ((testValD1 == null) || (testValD1.equals(iValueD) == false)) {
-                               System.out.println("Key-Value t1 incorrect: " + keyD);
-                               foundError = true;
-                       }
-
-
-                       if ((testValA2 == null) || (testValA2.equals(iValueA) == false)) {
-                               System.out.println("Key-Value t2 incorrect: " + keyA + "    " + testValA2);
-                               foundError = true;
-                       }
-
-                       if ((testValB2 == null) || (testValB2.equals(iValueB) == false)) {
-                               System.out.println("Key-Value t2 incorrect: " + keyB + "    " + testValB2);
-                               foundError = true;
-                       }
-
-                       if ((testValC2 == null) || (testValC2.equals(iValueC) == false)) {
-                               System.out.println("Key-Value t2 incorrect: " + keyC + "    " + testValC2);
-                               foundError = true;
-                       }
-
-                       if ((testValD2 == null) || (testValD2.equals(iValueD) == false)) {
-                               System.out.println("Key-Value t2 incorrect: " + keyD + "    " + testValD2);
-                               foundError = true;
-                       }
-               }
-
-               if (foundError) {
-                       System.out.println("Found Errors...");
-               } else {
-                       System.out.println("No Errors Found...");
-               }
-       }
-
-       static void test2() throws ServerException {
-
-               long startTime = 0;
-               long endTime = 0;
-
-               // Setup the 2 clients
-               Table t1 = new Table("http://127.0.0.1/test.iotcloud/", "reallysecret", 321);
-               t1.initTable();
-               Table t2 = new Table("http://127.0.0.1/test.iotcloud/", "reallysecret", 351);
-               t2.update();
-
-               // Make the Keys
-               System.out.println("Setting up keys");
-               startTime = System.currentTimeMillis();
-               for (int i = 0; i < NUMBER_OF_TESTS; i++) {
-                       String a = "a" + i;
-                       String b = "b" + i;
-                       String c = "c" + i;
-                       String d = "d" + i;
-                       IoTString ia = new IoTString(a);
-                       IoTString ib = new IoTString(b);
-                       IoTString ic = new IoTString(c);
-                       IoTString id = new IoTString(d);
-                       t1.createNewKey(ia, 321);
-                       t1.createNewKey(ib, 351);
-                       t2.createNewKey(ic, 321);
-                       t2.createNewKey(id, 351);
-               }
-               endTime = System.currentTimeMillis();
-
-
-
-               System.out.println("Time Taken: " + (double)   ((endTime - startTime) / 1000.0)    );
-               System.out.println("Time Taken Per Key: " + (double)  (((endTime - startTime) / 1000.0) / (NUMBER_OF_TESTS * 4))   );
-               System.out.println();
-
-
-               // Do Updates for the keys
-               System.out.println("Setting Key-Values...");
-               startTime = System.currentTimeMillis();
-               for (int i = 0; i < NUMBER_OF_TESTS; i++) {
-                       String keyA = "a" + i;
-                       String keyB = "b" + i;
-                       String keyC = "c" + i;
-                       String keyD = "d" + i;
-                       String valueA = "a" + i;
-                       String valueB = "b" + i;
-                       String valueC = "c" + i;
-                       String valueD = "d" + i;
-
-                       IoTString iKeyA = new IoTString(keyA);
-                       IoTString iKeyB = new IoTString(keyB);
-                       IoTString iKeyC = new IoTString(keyC);
-                       IoTString iKeyD = new IoTString(keyD);
-                       IoTString iValueA = new IoTString(valueA);
-                       IoTString iValueB = new IoTString(valueB);
-                       IoTString iValueC = new IoTString(valueC);
-                       IoTString iValueD = new IoTString(valueD);
-
-                       t1.startTransaction();
-                       t1.addKV(iKeyA, iValueA);
-                       t1.commitTransaction();
-
-                       t1.startTransaction();
-                       t1.addKV(iKeyB, iValueB);
-                       t1.commitTransaction();
-
-                       t2.startTransaction();
-                       t2.addKV(iKeyC, iValueC);
-                       t2.commitTransaction();
-
-                       t2.startTransaction();
-                       t2.addKV(iKeyD, iValueD);
-                       t2.commitTransaction();
-               }
-               endTime = System.currentTimeMillis();
-
-               System.out.println("Time Taken: " + (double)   ((endTime - startTime) / 1000.0)    );
-               System.out.println("Time Taken Per Update: " + (double)  (((endTime - startTime) / 1000.0) / (NUMBER_OF_TESTS * 4))   );
-               System.out.println();
-
-
-               System.out.println("Updating Clients...");
-               t1.update();
-               t2.update();
-               t1.update();
-               t2.update();
-
-               boolean foundError = false;
-
-               System.out.println("Checking Key-Values...");
-               for (int i = 0; i < NUMBER_OF_TESTS; i++) {
-
-                       String keyA = "a" + i;
-                       String keyB = "b" + i;
-                       String keyC = "c" + i;
-                       String keyD = "d" + i;
-                       String valueA = "a" + i;
-                       String valueB = "b" + i;
-                       String valueC = "c" + i;
-                       String valueD = "d" + i;
-
-                       IoTString iKeyA = new IoTString(keyA);
-                       IoTString iKeyB = new IoTString(keyB);
-                       IoTString iKeyC = new IoTString(keyC);
-                       IoTString iKeyD = new IoTString(keyD);
-                       IoTString iValueA = new IoTString(valueA);
-                       IoTString iValueB = new IoTString(valueB);
-                       IoTString iValueC = new IoTString(valueC);
-                       IoTString iValueD = new IoTString(valueD);
-
-
-                       IoTString testValA1 = t1.getCommitted(iKeyA);
-                       IoTString testValB1 = t1.getCommitted(iKeyB);
-                       IoTString testValC1 = t1.getCommitted(iKeyC);
-                       IoTString testValD1 = t1.getCommitted(iKeyD);
-
-                       IoTString testValA2 = t2.getCommitted(iKeyA);
-                       IoTString testValB2 = t2.getCommitted(iKeyB);
-                       IoTString testValC2 = t2.getCommitted(iKeyC);
-                       IoTString testValD2 = t2.getCommitted(iKeyD);
-
-                       if ((testValA1 == null) || (testValA1.equals(iValueA) == false)) {
-                               System.out.println("Key-Value t1 incorrect: " + keyA);
-                               foundError = true;
-                       }
-
-                       if ((testValB1 == null) || (testValB1.equals(iValueB) == false)) {
-                               System.out.println("Key-Value t1 incorrect: " + keyB);
-                               foundError = true;
-                       }
-
-                       if ((testValC1 == null) || (testValC1.equals(iValueC) == false)) {
-                               System.out.println("Key-Value t1 incorrect: " + keyC);
-                               foundError = true;
-                       }
-
-                       if ((testValD1 == null) || (testValD1.equals(iValueD) == false)) {
-                               System.out.println("Key-Value t1 incorrect: " + keyD);
-                               foundError = true;
-                       }
-
-
-                       if ((testValA2 == null) || (testValA2.equals(iValueA) == false)) {
-                               System.out.println("Key-Value t2 incorrect: " + keyA + "    " + testValA2);
-                               foundError = true;
-                       }
-
-                       if ((testValB2 == null) || (testValB2.equals(iValueB) == false)) {
-                               System.out.println("Key-Value t2 incorrect: " + keyB + "    " + testValB2);
-                               foundError = true;
-                       }
-
-                       if ((testValC2 == null) || (testValC2.equals(iValueC) == false)) {
-                               System.out.println("Key-Value t2 incorrect: " + keyC + "    " + testValC2);
-                               foundError = true;
-                       }
-
-                       if ((testValD2 == null) || (testValD2.equals(iValueD) == false)) {
-                               System.out.println("Key-Value t2 incorrect: " + keyD + "    " + testValD2);
-                               foundError = true;
-                       }
-               }
-
-               if (foundError) {
-                       System.out.println("Found Errors...");
-               } else {
-                       System.out.println("No Errors Found...");
-               }
-       }
+    public static final  int NUMBER_OF_TESTS = 25;
+
+    public static void main(String[] args)  throws ServerException {
+        if (args[0].equals("2")) {
+            test2();
+        } else if (args[0].equals("3")) {
+            test3();
+        } else if (args[0].equals("4")) {
+            test4();
+        } else if (args[0].equals("5")) {
+            test5();
+        } else if (args[0].equals("6")) {
+            test6();
+        } else if (args[0].equals("7")) {
+            test7();
+        } else if (args[0].equals("8")) {
+            test8();
+        } else if (args[0].equals("9")) {
+            test9();
+        } else if (args[0].equals("10")) {
+            test10();
+        } else if (args[0].equals("11")) {
+            test11();
+        } else if (args[0].equals("12")) {
+            test12();
+        } else if (args[0].equals("13")) {
+            test13();
+        }
+
+        else if (args[0].equals("14")) {
+            test14();
+        }
+    }
+
+
+    static void test14() throws ServerException {
+        TimingSingleton timer = TimingSingleton.getInstance();
+
+        boolean foundError = false;
+        long startTime = 0;
+        long endTime = 0;
+        List<TransactionStatus> transStatusList = new ArrayList<TransactionStatus>();
+
+        // Setup the 2 clients
+        Table t1 = new Table("http://dc-6.calit2.uci.edu/test.iotcloud/", "reallysecret", 321, -1);
+        t1.initTable();
+        System.out.println("T1 Ready");
+
+        // Make the Keys
+        System.out.println("Setting up keys");
+        startTime = System.nanoTime();
+        for (int i = 0; i < NUMBER_OF_TESTS; i++) {
+            System.out.println(i);
+            String a = "a" + i;
+            IoTString ia = new IoTString(a);
+            t1.createNewKey(ia, 321);
+        }
+        endTime = System.nanoTime();
+        long keysDt = endTime - startTime;
+        long keysNet = timer.getTime();
+
+        System.out.println("Total Key Create Time: " + keysDt / 1000000);
+        System.out.println("Total Key Create Time Network: " + keysNet / 1000000);
+        System.out.println("Total Key Create Time no Network: " + (keysDt - keysNet) / 1000000);
+        System.out.println();
+   }
+
+
+    static void test13() throws ServerException {
+        TimingSingleton timer = TimingSingleton.getInstance();
+
+        boolean foundError = false;
+        long startTime = 0;
+        long endTime = 0;
+        List<TransactionStatus> transStatusList = new ArrayList<TransactionStatus>();
+
+        // Setup the 2 clients
+        Table t1 = new Table("http://dc-6.calit2.uci.edu/test.iotcloud/", "reallysecret", 321, -1);
+        t1.initTable();
+        System.out.println("T1 Ready");
+
+        Table t2 = new Table("http://dc-6.calit2.uci.edu/test.iotcloud/", "reallysecret", 351, -1);
+        t2.update();
+        System.out.println("T2 Ready");
+
+        // Make the Keys
+        System.out.println("Setting up keys");
+        startTime = System.nanoTime();
+        for (int i = 0; i < NUMBER_OF_TESTS; i++) {
+            System.out.println(i);
+            String a = "a" + i;
+            String b = "b" + i;
+            String c = "c" + i;
+            String d = "d" + i;
+            IoTString ia = new IoTString(a);
+            IoTString ib = new IoTString(b);
+            IoTString ic = new IoTString(c);
+            IoTString id = new IoTString(d);
+            t1.createNewKey(ia, 351);
+            t1.createNewKey(ib, 351);
+            t2.createNewKey(ic, 321);
+            t2.createNewKey(id, 321);
+        }
+        endTime = System.nanoTime();
+        long keysDt = endTime - startTime;
+        long keysNet = timer.getTime();
+
+        // Do Updates for the keys
+        System.out.println("Setting Key-Values...");
+        startTime = System.nanoTime();
+        for (int t = 0; t < 3; t++) {
+            for (int i = 0; i < NUMBER_OF_TESTS; i++) {
+                System.out.println(i);
+                String keyA = "a" + i;
+                String keyB = "b" + i;
+                String keyC = "c" + i;
+                String keyD = "d" + i;
+                String valueA = "a" + i;
+                String valueB = "b" + i;
+                String valueC = "c" + i;
+                String valueD = "d" + i;
+
+                IoTString iKeyA = new IoTString(keyA);
+                IoTString iKeyB = new IoTString(keyB);
+                IoTString iKeyC = new IoTString(keyC);
+                IoTString iKeyD = new IoTString(keyD);
+                IoTString iValueA = new IoTString(valueA);
+                IoTString iValueB = new IoTString(valueB);
+                IoTString iValueC = new IoTString(valueC);
+                IoTString iValueD = new IoTString(valueD);
+
+
+                t1.startTransaction();
+                t1.addKV(iKeyA, iValueA);
+                transStatusList.add(t1.commitTransaction());
+
+                t1.startTransaction();
+                t1.addKV(iKeyB, iValueB);
+                transStatusList.add(t1.commitTransaction());
+
+                t2.startTransaction();
+                t2.addKV(iKeyC, iValueC);
+                transStatusList.add(t2.commitTransaction());
+
+                t2.startTransaction();
+                t2.addKV(iKeyD, iValueD);
+                transStatusList.add(t2.commitTransaction());
+
+            }
+        }
+        endTime = System.nanoTime();
+        long writesDt = endTime - startTime;
+        long writesNet = timer.getTime() - keysNet;
+
+        System.out.println("Updating Clients...");
+        startTime = System.nanoTime();
+        t1.update();
+        t2.update();
+        endTime = System.nanoTime();
+        long updatesDt = endTime - startTime;
+        long updatesNet = timer.getTime() - keysNet - writesNet;
+
+
+        System.out.println("Total Key Create Time: " + keysDt / 1000000);
+        System.out.println("Total Key Create Time Network: " + keysNet / 1000000);
+        System.out.println("Total Key Create Time no Network: " + (keysDt - keysNet) / 1000000);
+        System.out.println();
+        System.out.println("Total write Time: " + writesDt / 1000000);
+        System.out.println("Total write Time Network: " + writesNet / 1000000);
+        System.out.println("Total write Time no Network: " + (writesDt - writesNet) / 1000000);
+        System.out.println();
+        System.out.println("Total updates Time: " + updatesDt / 1000000);
+        System.out.println("Total updates Time Network: " + updatesNet / 1000000);
+        System.out.println("Total updates Time no Network: " + (updatesDt - updatesNet) / 1000000);
+    }
+
+
+    static void test12() throws ServerException {
+        TimingSingleton timer = TimingSingleton.getInstance();
+
+        boolean foundError = false;
+        long startTime = 0;
+        long endTime = 0;
+        List<TransactionStatus> transStatusList = new ArrayList<TransactionStatus>();
+
+        // Setup the 2 clients
+        Table t1 = new Table("http://dc-6.calit2.uci.edu/test.iotcloud/", "reallysecret", 321, -1);
+        t1.initTable();
+        System.out.println("T1 Ready");
+
+        Table t2 = new Table("http://dc-6.calit2.uci.edu/test.iotcloud/", "reallysecret", 351, -1);
+        t2.update();
+        System.out.println("T2 Ready");
+
+        // Make the Keys
+        System.out.println("Setting up keys");
+        startTime = System.nanoTime();
+        for (int i = 0; i < NUMBER_OF_TESTS; i++) {
+            System.out.println(i);
+            String a = "a" + i;
+            String b = "b" + i;
+            String c = "c" + i;
+            String d = "d" + i;
+            IoTString ia = new IoTString(a);
+            IoTString ib = new IoTString(b);
+            IoTString ic = new IoTString(c);
+            IoTString id = new IoTString(d);
+            t1.createNewKey(ia, 321);
+            t1.createNewKey(ib, 321);
+            t2.createNewKey(ic, 351);
+            t2.createNewKey(id, 351);
+        }
+        endTime = System.nanoTime();
+        long keysDt = endTime - startTime;
+        long keysNet = timer.getTime();
+
+        // Do Updates for the keys
+        System.out.println("Setting Key-Values...");
+        startTime = System.nanoTime();
+        for (int t = 0; t < 3; t++) {
+            for (int i = 0; i < NUMBER_OF_TESTS; i++) {
+                System.out.println(i);
+                String keyA = "a" + i;
+                String keyB = "b" + i;
+                String keyC = "c" + i;
+                String keyD = "d" + i;
+                String valueA = "a" + i;
+                String valueB = "b" + i;
+                String valueC = "c" + i;
+                String valueD = "d" + i;
+
+                IoTString iKeyA = new IoTString(keyA);
+                IoTString iKeyB = new IoTString(keyB);
+                IoTString iKeyC = new IoTString(keyC);
+                IoTString iKeyD = new IoTString(keyD);
+                IoTString iValueA = new IoTString(valueA);
+                IoTString iValueB = new IoTString(valueB);
+                IoTString iValueC = new IoTString(valueC);
+                IoTString iValueD = new IoTString(valueD);
+
+
+                t1.startTransaction();
+                t1.addKV(iKeyA, iValueA);
+                transStatusList.add(t1.commitTransaction());
+
+                t1.startTransaction();
+                t1.addKV(iKeyB, iValueB);
+                transStatusList.add(t1.commitTransaction());
+
+                t2.startTransaction();
+                t2.addKV(iKeyC, iValueC);
+                transStatusList.add(t2.commitTransaction());
+
+                t2.startTransaction();
+                t2.addKV(iKeyD, iValueD);
+                transStatusList.add(t2.commitTransaction());
+
+            }
+        }
+        endTime = System.nanoTime();
+        long writesDt = endTime - startTime;
+        long writesNet = timer.getTime() - keysNet;
+
+        System.out.println("Updating Clients...");
+        startTime = System.nanoTime();
+        t1.update();
+        t2.update();
+        endTime = System.nanoTime();
+        long updatesDt = endTime - startTime;
+        long updatesNet = timer.getTime() - keysNet - writesNet;
+
+
+        System.out.println("Total Key Create Time: " + keysDt / 1000000);
+        System.out.println("Total Key Create Time Network: " + keysNet / 1000000);
+        System.out.println("Total Key Create Time no Network: " + (keysDt - keysNet) / 1000000);
+        System.out.println();
+        System.out.println("Total write Time: " + writesDt / 1000000);
+        System.out.println("Total write Time Network: " + writesNet / 1000000);
+        System.out.println("Total write Time no Network: " + (writesDt - writesNet) / 1000000);
+        System.out.println();
+        System.out.println("Total updates Time: " + updatesDt / 1000000);
+        System.out.println("Total updates Time Network: " + updatesNet / 1000000);
+        System.out.println("Total updates Time no Network: " + (updatesDt - updatesNet) / 1000000);
+    }
+
+
+    static void test11() {
+
+        boolean foundError = false;
+        List<TransactionStatus> transStatusList = new ArrayList<TransactionStatus>();
+
+        // Setup the 2 clients
+        Table t1 = new Table("http://dc-6.calit2.uci.edu/test.iotcloud/", "reallysecret", 321, 6000);
+
+        System.out.println("Init Table t1s");
+
+        while (true) {
+            try {
+                t1.initTable();
+                break;
+            } catch (Exception e) { }
+        }
+
+
+        System.out.println("Update Table t2");
+        Table t2 = new Table("http://dc-6.calit2.uci.edu/test.iotcloud/", "reallysecret", 351, 6001);
+        while (t2.update() == false) {}
+
+        // Make the Keys
+        System.out.println("Setting up keys");
+        for (int i = 0; i < NUMBER_OF_TESTS; i++) {
+            System.out.println(i);
+
+            String a = "a" + i;
+            String b = "b" + i;
+            String c = "c" + i;
+            String d = "d" + i;
+            IoTString ia = new IoTString(a);
+            IoTString ib = new IoTString(b);
+            IoTString ic = new IoTString(c);
+            IoTString id = new IoTString(d);
+
+            while (true) {
+                try {
+                    t1.createNewKey(ia, 321);
+                    break;
+                } catch (Exception e) { }
+            }
+
+            while (true) {
+                try {
+                    t1.createNewKey(ib, 351);
+                    break;
+                } catch (Exception e) { }
+            }
+
+            while (true) {
+                try {
+                    t2.createNewKey(ic, 321);
+                    break;
+                } catch (Exception e) { }
+            }
+
+            while (true) {
+                try {
+                    t2.createNewKey(id, 351);
+                    break;
+                } catch (Exception e) { }
+            }
+        }
+
+        // Do Updates for the keys
+        System.out.println("Setting Key-Values...");
+        for (int i = 0; i < NUMBER_OF_TESTS; i++) {
+            System.out.println(i);
+            String keyA = "a" + i;
+            String keyB = "b" + i;
+            String keyC = "c" + i;
+            String keyD = "d" + i;
+            String valueA = "a" + i;
+            String valueB = "b" + i;
+            String valueC = "c" + i;
+            String valueD = "d" + i;
+
+            IoTString iKeyA = new IoTString(keyA);
+            IoTString iKeyB = new IoTString(keyB);
+            IoTString iKeyC = new IoTString(keyC);
+            IoTString iKeyD = new IoTString(keyD);
+            IoTString iValueA = new IoTString(valueA);
+            IoTString iValueB = new IoTString(valueB);
+            IoTString iValueC = new IoTString(valueC);
+            IoTString iValueD = new IoTString(valueD);
+
+
+            String keyAPrev = "a" + (i - 1);
+            String keyBPrev = "b" + (i - 1);
+            String keyCPrev = "c" + (i - 1);
+            String keyDPrev = "d" + (i - 1);
+            String valueAPrev = "a" + (i - 1);
+            String valueBPrev = "b" + (i - 1);
+            String valueCPrev = "c" + (i - 1);
+            String valueDPrev = "d" + (i - 1);
+
+            IoTString iKeyAPrev = new IoTString(keyAPrev);
+            IoTString iKeyBPrev = new IoTString(keyBPrev);
+            IoTString iKeyCPrev = new IoTString(keyCPrev);
+            IoTString iKeyDPrev = new IoTString(keyDPrev);
+            IoTString iValueAPrev = new IoTString(valueAPrev);
+            IoTString iValueBPrev = new IoTString(valueBPrev);
+            IoTString iValueCPrev = new IoTString(valueCPrev);
+            IoTString iValueDPrev = new IoTString(valueDPrev);
+
+
+            System.out.println("t1 A");
+            t1.startTransaction();
+            t1.addKV(iKeyA, iValueA);
+            transStatusList.add(t1.commitTransaction());
+
+            System.out.println("t1 B");
+            t1.startTransaction();
+            t1.addKV(iKeyB, iValueB);
+            transStatusList.add(t1.commitTransaction());
+
+            System.out.println("t2 C");
+            t2.startTransaction();
+            t2.addKV(iKeyC, iValueC);
+            transStatusList.add(t2.commitTransaction());
+
+            System.out.println("t2 D");
+            t2.startTransaction();
+            t2.addKV(iKeyD, iValueD);
+            transStatusList.add(t2.commitTransaction());
+        }
+
+        System.out.println("Updating...");
+        while (t1.update() == false) {}
+        while (t2.update() == false) {}
+        while (t1.update() == false) {}
+        while (t2.update() == false) {}
+
+        System.out.println("Checking Key-Values...");
+        for (int i = 0; i < NUMBER_OF_TESTS; i++) {
+
+            String keyA = "a" + i;
+            String keyB = "b" + i;
+            String keyC = "c" + i;
+            String keyD = "d" + i;
+            String valueA = "a" + i;
+            String valueB = "b" + i;
+            String valueC = "c" + i;
+            String valueD = "d" + i;
+
+            IoTString iKeyA = new IoTString(keyA);
+            IoTString iKeyB = new IoTString(keyB);
+            IoTString iKeyC = new IoTString(keyC);
+            IoTString iKeyD = new IoTString(keyD);
+            IoTString iValueA = new IoTString(valueA);
+            IoTString iValueB = new IoTString(valueB);
+            IoTString iValueC = new IoTString(valueC);
+            IoTString iValueD = new IoTString(valueD);
+
+
+            IoTString testValA1 = t1.getCommitted(iKeyA);
+            IoTString testValB1 = t1.getCommitted(iKeyB);
+            IoTString testValC1 = t1.getCommitted(iKeyC);
+            IoTString testValD1 = t1.getCommitted(iKeyD);
+
+            IoTString testValA2 = t2.getCommitted(iKeyA);
+            IoTString testValB2 = t2.getCommitted(iKeyB);
+            IoTString testValC2 = t2.getCommitted(iKeyC);
+            IoTString testValD2 = t2.getCommitted(iKeyD);
+
+            if ((testValA1 == null) || (testValA1.equals(iValueA) == false)) {
+                System.out.println("Key-Value t1 incorrect: " + keyA + "    " + testValA1);
+                foundError = true;
+            }
+
+            if ((testValB1 == null) || (testValB1.equals(iValueB) == false)) {
+                System.out.println("Key-Value t1 incorrect: " + keyB + "    " + testValB1);
+                foundError = true;
+            }
+
+            if ((testValC1 == null) || (testValC1.equals(iValueC) == false)) {
+                System.out.println("Key-Value t1 incorrect: " + keyC + "    " + testValC1);
+                foundError = true;
+            }
+
+            if ((testValD1 == null) || (testValD1.equals(iValueD) == false)) {
+                System.out.println("Key-Value t1 incorrect: " + keyD + "    " + testValD1);
+                foundError = true;
+            }
+
+
+            if ((testValA2 == null) || (testValA2.equals(iValueA) == false)) {
+                System.out.println("Key-Value t2 incorrect: " + keyA + "    " + testValA2);
+                foundError = true;
+            }
+
+            if ((testValB2 == null) || (testValB2.equals(iValueB) == false)) {
+                System.out.println("Key-Value t2 incorrect: " + keyB + "    " + testValB2);
+                foundError = true;
+            }
+
+            if ((testValC2 == null) || (testValC2.equals(iValueC) == false)) {
+                System.out.println("Key-Value t2 incorrect: " + keyC + "    " + testValC2);
+                foundError = true;
+            }
+
+            if ((testValD2 == null) || (testValD2.equals(iValueD) == false)) {
+                System.out.println("Key-Value t2 incorrect: " + keyD + "    " + testValD2);
+                foundError = true;
+            }
+        }
+
+        for (TransactionStatus status : transStatusList) {
+            if (status.getStatus() != TransactionStatus.StatusCommitted) {
+                foundError = true;
+            }
+        }
+
+        if (foundError) {
+            System.out.println("Found Errors...");
+        } else {
+            System.out.println("No Errors Found...");
+        }
+
+        t1.close();
+        t2.close();
+    }
+
+    static void test10() {
+
+        boolean foundError = false;
+        List<TransactionStatus> transStatusList = new ArrayList<TransactionStatus>();
+
+        // Setup the 2 clients
+        Table t1 = new Table("http://dc-6.calit2.uci.edu/test.iotcloud/", "reallysecret", 321, 6000);
+        System.out.println("Init Table t1s");
+        while (true) {
+            try {
+                t1.initTable();
+                break;
+            } catch (Exception e) { }
+        }
+        Table t2 = new Table("http://dc-6.calit2.uci.edu/test.iotcloud/", "reallysecret", 351, 6001);
+        while (t2.update() == false) {}
+
+        t1.addLocalCommunication(351, "127.0.0.1", 6001);
+        t2.addLocalCommunication(321, "127.0.0.1", 6000);
+
+
+        // Make the Keys
+        System.out.println("Setting up keys");
+        for (int i = 0; i < 4; i++) {
+            String a = "a" + i;
+            String b = "b" + i;
+            String c = "c" + i;
+            String d = "d" + i;
+            IoTString ia = new IoTString(a);
+            IoTString ib = new IoTString(b);
+            IoTString ic = new IoTString(c);
+            IoTString id = new IoTString(d);
+            while (true) {
+                try {
+                    t1.createNewKey(ia, 321);
+                    break;
+                } catch (Exception e) { }
+            }
+
+            while (true) {
+                try {
+                    t1.createNewKey(ib, 351);
+                    break;
+                } catch (Exception e) { }
+            }
+
+            while (true) {
+                try {
+                    t2.createNewKey(ic, 321);
+                    break;
+                } catch (Exception e) { }
+            }
+
+            while (true) {
+                try {
+                    t2.createNewKey(id, 351);
+                    break;
+                } catch (Exception e) { }
+            }
+        }
+
+
+        // Do Updates for the keys
+        System.out.println("B========================");
+        for (int t = 0; t < NUMBER_OF_TESTS; t++) {
+            for (int i = 0; i < 4; i++) {
+
+                System.out.println(i);
+
+                String keyB = "b" + i;
+                String valueB = "b" + (i + t);
+
+                IoTString iKeyB = new IoTString(keyB);
+                IoTString iValueB = new IoTString(valueB);
+
+                t1.startTransaction();
+                System.out.println(t1.getSpeculativeAtomic(iKeyB));
+                t1.addKV(iKeyB, iValueB);
+                transStatusList.add(t1.commitTransaction());
+            }
+        }
+        System.out.println();
+
+
+        System.out.println("C========================");
+        for (int t = 0; t < NUMBER_OF_TESTS; t++) {
+            for (int i = 0; i < 4; i++) {
+                System.out.println(i);
+
+                String keyC = "c" + i;
+                String valueC = "c" + (i + t);
+
+                IoTString iKeyC = new IoTString(keyC);
+                IoTString iValueC = new IoTString(valueC);
+
+                t2.startTransaction();
+                System.out.println(t2.getSpeculativeAtomic(iKeyC));
+                t2.addKV(iKeyC, iValueC);
+                transStatusList.add(t2.commitTransaction());
+            }
+        }
+        System.out.println();
+
+
+        for (int t = 0; t < NUMBER_OF_TESTS; t++) {
+            for (int i = 0; i < 4; i++) {
+                String keyA = "a" + i;
+                String keyD = "d" + i;
+                String valueA = "a" + (i + t);
+                String valueD = "d" + (i + t);
+
+                IoTString iKeyA = new IoTString(keyA);
+                IoTString iKeyD = new IoTString(keyD);
+                IoTString iValueA = new IoTString(valueA);
+                IoTString iValueD = new IoTString(valueD);
+
+
+                t1.startTransaction();
+                t1.addKV(iKeyA, iValueA);
+                transStatusList.add(t1.commitTransaction());
+
+
+                t2.startTransaction();
+                t2.addKV(iKeyD, iValueD);
+                transStatusList.add(t2.commitTransaction());
+                System.out.println();
+            }
+        }
+        System.out.println();
+
+        System.out.println("Updating...");
+        System.out.println("t1 -=-=-=-=-=-=-=-");
+        while (t1.update() == false) {}
+        System.out.println("t2 -=-=-=-=-=-=-=-");
+        while (t2.update() == false) {}
+        System.out.println("t1 -=-=-=-=-=-=-=-");
+        while (t1.update() == false) {}
+        System.out.println("t2 -=-=-=-=-=-=-=-");
+        while (t2.update() == false) {}
+
+
+        System.out.println("Checking Key-Values...");
+        for (int i = 0; i < 4; i++) {
+
+            String keyA = "a" + i;
+            String keyB = "b" + i;
+            String keyC = "c" + i;
+            String keyD = "d" + i;
+            String valueA = "a" + (i + NUMBER_OF_TESTS - 1);
+            String valueB = "b" + (i + NUMBER_OF_TESTS - 1);
+            String valueC = "c" + (i + NUMBER_OF_TESTS - 1);
+            String valueD = "d" + (i + NUMBER_OF_TESTS - 1);
+
+            IoTString iKeyA = new IoTString(keyA);
+            IoTString iKeyB = new IoTString(keyB);
+            IoTString iKeyC = new IoTString(keyC);
+            IoTString iKeyD = new IoTString(keyD);
+            IoTString iValueA = new IoTString(valueA);
+            IoTString iValueB = new IoTString(valueB);
+            IoTString iValueC = new IoTString(valueC);
+            IoTString iValueD = new IoTString(valueD);
+
+
+            IoTString testValA1 = t1.getCommitted(iKeyA);
+            IoTString testValB1 = t1.getCommitted(iKeyB);
+            IoTString testValC1 = t1.getCommitted(iKeyC);
+            IoTString testValD1 = t1.getCommitted(iKeyD);
+
+            IoTString testValA2 = t2.getCommitted(iKeyA);
+            IoTString testValB2 = t2.getCommitted(iKeyB);
+            IoTString testValC2 = t2.getCommitted(iKeyC);
+            IoTString testValD2 = t2.getCommitted(iKeyD);
+
+            if ((testValA1 == null) || (testValA1.equals(iValueA) == false)) {
+                System.out.println("Key-Value t1 incorrect: " + keyA + "    " + testValA1);
+                foundError = true;
+            }
+
+            if ((testValB1 == null) || (testValB1.equals(iValueB) == false)) {
+                System.out.println("Key-Value t1 incorrect: " + keyB + "    " + testValB1);
+                foundError = true;
+            }
+
+            if ((testValC1 == null) || (testValC1.equals(iValueC) == false)) {
+                System.out.println("Key-Value t1 incorrect: " + keyC + "    " + testValC1);
+                foundError = true;
+            }
+
+            if ((testValD1 == null) || (testValD1.equals(iValueD) == false)) {
+                System.out.println("Key-Value t1 incorrect: " + keyD + "    " + testValD1);
+                foundError = true;
+            }
+
+            if ((testValA2 == null) || (testValA2.equals(iValueA) == false)) {
+                System.out.println("Key-Value t2 incorrect: " + keyA + "    " + testValA2);
+                foundError = true;
+            }
+
+            if ((testValB2 == null) || (testValB2.equals(iValueB) == false)) {
+                System.out.println("Key-Value t2 incorrect: " + keyB + "    " + testValB2);
+                foundError = true;
+            }
+
+            if ((testValC2 == null) || (testValC2.equals(iValueC) == false)) {
+                System.out.println("Key-Value t2 incorrect: " + keyC + "    " + testValC2);
+                foundError = true;
+            }
+
+            if ((testValD2 == null) || (testValD2.equals(iValueD) == false)) {
+                System.out.println("Key-Value t2 incorrect: " + keyD + "    " + testValD2);
+                foundError = true;
+            }
+        }
+
+        int counter = 0;
+        for (TransactionStatus status : transStatusList) {
+            if (status.getStatus() != TransactionStatus.StatusCommitted) {
+                foundError = true;
+                System.out.println(counter + "    Status: " + status.getStatus());
+            }
+            counter++;
+        }
+
+        if (foundError) {
+            System.out.println("Found Errors...");
+        } else {
+            System.out.println("No Errors Found...");
+        }
+
+        t1.close();
+        t2.close();
+    }
+
+    static void test9() {
+
+        boolean foundError = false;
+        List<TransactionStatus> transStatusList = new ArrayList<TransactionStatus>();
+
+        // Setup the 2 clients
+        Table t1 = new Table("http://dc-6.calit2.uci.edu/test.iotcloud/", "reallysecret", 321, 6000);
+
+        System.out.println("Init Table t1s");
+        while (true) {
+            try {
+                t1.initTable();
+                break;
+            } catch (Exception e) { }
+        }
+
+
+        System.out.println("Update Table t2");
+        Table t2 = new Table("http://dc-6.calit2.uci.edu/test.iotcloud/", "reallysecret", 351, 6001);
+        while (t2.update() == false) {}
+
+        t1.addLocalCommunication(351, "127.0.0.1", 6001);
+        t2.addLocalCommunication(321, "127.0.0.1", 6000);
+
+        // Make the Keys
+        System.out.println("Setting up keys");
+        for (int i = 0; i < NUMBER_OF_TESTS; i++) {
+            System.out.println(i);
+
+            String a = "a" + i;
+            String b = "b" + i;
+            String c = "c" + i;
+            String d = "d" + i;
+            IoTString ia = new IoTString(a);
+            IoTString ib = new IoTString(b);
+            IoTString ic = new IoTString(c);
+            IoTString id = new IoTString(d);
+
+            while (true) {
+                try {
+                    t1.createNewKey(ia, 321);
+                    break;
+                } catch (Exception e) { }
+            }
+
+            while (true) {
+                try {
+                    t1.createNewKey(ib, 351);
+                    break;
+                } catch (Exception e) { }
+            }
+
+            while (true) {
+                try {
+                    t2.createNewKey(ic, 321);
+                    break;
+                } catch (Exception e) { }
+            }
+
+            while (true) {
+                try {
+                    t2.createNewKey(id, 351);
+                    break;
+                } catch (Exception e) { }
+            }
+        }
+
+        System.out.println("A, D...");
+        for (int i = 0; i < NUMBER_OF_TESTS; i++) {
+            String keyA = "a" + i;
+            String keyD = "d" + i;
+            String valueA = "a" + i;
+            String valueD = "d" + i;
+
+            IoTString iKeyA = new IoTString(keyA);
+            IoTString iKeyD = new IoTString(keyD);
+            IoTString iValueA = new IoTString(valueA);
+            IoTString iValueD = new IoTString(valueD);
+
+            t1.startTransaction();
+            t1.addKV(iKeyA, iValueA);
+            transStatusList.add(t1.commitTransaction());
+
+            t2.startTransaction();
+            t2.addKV(iKeyD, iValueD);
+            transStatusList.add(t2.commitTransaction());
+        }
+
+        // while (t1.updateFromLocal(351) == false) {}
+        // while (t2.updateFromLocal(321) == false) {}
+
+
+        System.out.println("Updating...");
+        System.out.println("Checking Key-Values...");
+
+        for (int i = 0; i < NUMBER_OF_TESTS; i++) {
+
+            String keyA = "a" + i;
+            String keyD = "d" + i;
+            String valueA = "a" + i;
+            String valueD = "d" + i;
+
+
+            IoTString iKeyA = new IoTString(keyA);
+            IoTString iKeyD = new IoTString(keyD);
+            IoTString iValueA = new IoTString(valueA);
+            IoTString iValueD = new IoTString(valueD);
+
+
+            IoTString testValA1 = t1.getCommitted(iKeyA);
+            IoTString testValD1 = t1.getCommitted(iKeyD);
+            IoTString testValA2 = t2.getCommitted(iKeyA);
+            IoTString testValD2 = t2.getCommitted(iKeyD);
+
+
+            if ((testValA1 == null) || (testValA1.equals(iValueA) == false)) {
+                System.out.println("Key-Value t1 incorrect: " + keyA + "    " + testValA1);
+                foundError = true;
+            }
+
+            if ((testValD1 == null) || (testValD1.equals(iValueD) == false)) {
+                System.out.println("Key-Value t1 incorrect: " + keyD + "    " + testValD1);
+                foundError = true;
+            }
+
+
+            if ((testValA2 == null) || (testValA2.equals(iValueA) == false)) {
+                System.out.println("Key-Value t2 incorrect: " + keyA + "    " + testValA2);
+                foundError = true;
+            }
+
+            if ((testValD2 == null) || (testValD2.equals(iValueD) == false)) {
+                System.out.println("Key-Value t2 incorrect: " + keyD + "    " + testValD2);
+                foundError = true;
+            }
+        }
+
+        for (TransactionStatus status : transStatusList) {
+            if (status.getStatus() != TransactionStatus.StatusCommitted) {
+                foundError = true;
+            }
+        }
+
+        if (foundError) {
+            System.out.println("Found Errors...");
+        } else {
+            System.out.println("No Errors Found...");
+        }
+
+        t1.close();
+        t2.close();
+    }
+
+    static void test8() {
+        TimingSingleton timer = TimingSingleton.getInstance();
+        long startTime = 0;
+        long endTime = 0;
+
+        boolean foundError = false;
+        List<TransactionStatus> transStatusList = new ArrayList<TransactionStatus>();
+
+        // Setup the 2 clients
+        Table t1 = new Table("http://dc-6.calit2.uci.edu/test.iotcloud/", "reallysecret", 321, 6000);
+
+        System.out.println("Init Table t1s");
+
+        while (true) {
+            try {
+                t1.initTable();
+                break;
+            } catch (Exception e) { }
+        }
+
+
+        System.out.println("Update Table t2");
+        Table t2 = new Table("http://dc-6.calit2.uci.edu/test.iotcloud/", "reallysecret", 351, 6001);
+        while (t2.update() == false) {}
+
+        t1.addLocalCommunication(351, "127.0.0.1", 6001);
+        t2.addLocalCommunication(321, "127.0.0.1", 6000);
+
+        // Make the Keys
+        System.out.println("Setting up keys");
+        startTime = System.nanoTime();
+        for (int i = 0; i < NUMBER_OF_TESTS; i++) {
+            System.out.println(i);
+
+            String a = "a" + i;
+            String b = "b" + i;
+            String c = "c" + i;
+            String d = "d" + i;
+            IoTString ia = new IoTString(a);
+            IoTString ib = new IoTString(b);
+            IoTString ic = new IoTString(c);
+            IoTString id = new IoTString(d);
+
+            while (true) {
+                try {
+                    t1.createNewKey(ia, 321);
+                    break;
+                } catch (Exception e) { }
+            }
+
+            while (true) {
+                try {
+                    t1.createNewKey(ib, 351);
+                    break;
+                } catch (Exception e) { }
+            }
+
+            while (true) {
+                try {
+                    t2.createNewKey(ic, 321);
+                    break;
+                } catch (Exception e) { }
+            }
+
+            while (true) {
+                try {
+                    t2.createNewKey(id, 351);
+                    break;
+                } catch (Exception e) { }
+            }
+        }
+        endTime = System.nanoTime();
+        long keysDt = endTime - startTime;
+        long keysNet = timer.getTime();
+
+
+        // Do Updates for the keys
+        startTime = System.nanoTime();
+        System.out.println("Setting Key-Values...");
+        for (int i = 0; i < NUMBER_OF_TESTS; i++) {
+            System.out.println(i);
+            String keyA = "a" + i;
+            String keyB = "b" + i;
+            String keyC = "c" + i;
+            String keyD = "d" + i;
+            String valueA = "a" + i;
+            String valueB = "b" + i;
+            String valueC = "c" + i;
+            String valueD = "d" + i;
+
+            IoTString iKeyA = new IoTString(keyA);
+            IoTString iKeyB = new IoTString(keyB);
+            IoTString iKeyC = new IoTString(keyC);
+            IoTString iKeyD = new IoTString(keyD);
+            IoTString iValueA = new IoTString(valueA);
+            IoTString iValueB = new IoTString(valueB);
+            IoTString iValueC = new IoTString(valueC);
+            IoTString iValueD = new IoTString(valueD);
+
+
+            String keyAPrev = "a" + (i - 1);
+            String keyBPrev = "b" + (i - 1);
+            String keyCPrev = "c" + (i - 1);
+            String keyDPrev = "d" + (i - 1);
+            String valueAPrev = "a" + (i - 1);
+            String valueBPrev = "b" + (i - 1);
+            String valueCPrev = "c" + (i - 1);
+            String valueDPrev = "d" + (i - 1);
+
+            IoTString iKeyAPrev = new IoTString(keyAPrev);
+            IoTString iKeyBPrev = new IoTString(keyBPrev);
+            IoTString iKeyCPrev = new IoTString(keyCPrev);
+            IoTString iKeyDPrev = new IoTString(keyDPrev);
+            IoTString iValueAPrev = new IoTString(valueAPrev);
+            IoTString iValueBPrev = new IoTString(valueBPrev);
+            IoTString iValueCPrev = new IoTString(valueCPrev);
+            IoTString iValueDPrev = new IoTString(valueDPrev);
+
+            t1.startTransaction();
+            t1.addKV(iKeyA, iValueA);
+            transStatusList.add(t1.commitTransaction());
+
+            t1.startTransaction();
+            t1.addKV(iKeyB, iValueB);
+            transStatusList.add(t1.commitTransaction());
+
+            t2.startTransaction();
+            t2.addKV(iKeyC, iValueC);
+            transStatusList.add(t2.commitTransaction());
+
+            t2.startTransaction();
+            t2.addKV(iKeyD, iValueD);
+            transStatusList.add(t2.commitTransaction());
+        }
+        endTime = System.nanoTime();
+        long writesDt = endTime - startTime;
+        long writesNet = timer.getTime() - keysNet;
+
+
+
+        System.out.println("Updating...");
+        startTime = System.nanoTime();
+        while (t1.update() == false) {}
+        while (t2.update() == false) {}
+        while (t1.update() == false) {}
+        while (t2.update() == false) {}
+        endTime = System.nanoTime();
+        long updatesDt = endTime - startTime;
+        long updatesNet = timer.getTime() - keysNet - writesNet;
+
+
+        System.out.println("Total Key Create Time: " + keysDt / 1000000);
+        System.out.println("Total Key Create Time Network: " + keysNet / 1000000);
+        System.out.println("Total Key Create Time no Network: " + (keysDt - keysNet) / 1000000);
+        System.out.println();
+        System.out.println("Total write Time: " + writesDt / 1000000);
+        System.out.println("Total write Time Network: " + writesNet / 1000000);
+        System.out.println("Total write Time no Network: " + (writesDt - writesNet) / 1000000);
+        System.out.println();
+        System.out.println("Total updates Time: " + updatesDt / 1000000);
+        System.out.println("Total updates Time Network: " + updatesNet / 1000000);
+        System.out.println("Total updates Time no Network: " + (updatesDt - updatesNet) / 1000000);
+
+
+
+
+        // System.out.println("Checking Key-Values...");
+        // for (int i = 0; i < NUMBER_OF_TESTS; i++) {
+
+        //     String keyA = "a" + i;
+        //     String keyB = "b" + i;
+        //     String keyC = "c" + i;
+        //     String keyD = "d" + i;
+        //     String valueA = "a" + i;
+        //     String valueB = "b" + i;
+        //     String valueC = "c" + i;
+        //     String valueD = "d" + i;
+
+        //     IoTString iKeyA = new IoTString(keyA);
+        //     IoTString iKeyB = new IoTString(keyB);
+        //     IoTString iKeyC = new IoTString(keyC);
+        //     IoTString iKeyD = new IoTString(keyD);
+        //     IoTString iValueA = new IoTString(valueA);
+        //     IoTString iValueB = new IoTString(valueB);
+        //     IoTString iValueC = new IoTString(valueC);
+        //     IoTString iValueD = new IoTString(valueD);
+
+
+        //     IoTString testValA1 = t1.getCommitted(iKeyA);
+        //     IoTString testValB1 = t1.getCommitted(iKeyB);
+        //     IoTString testValC1 = t1.getCommitted(iKeyC);
+        //     IoTString testValD1 = t1.getCommitted(iKeyD);
+
+        //     IoTString testValA2 = t2.getCommitted(iKeyA);
+        //     IoTString testValB2 = t2.getCommitted(iKeyB);
+        //     IoTString testValC2 = t2.getCommitted(iKeyC);
+        //     IoTString testValD2 = t2.getCommitted(iKeyD);
+
+        //     if ((testValA1 == null) || (testValA1.equals(iValueA) == false)) {
+        //         System.out.println("Key-Value t1 incorrect: " + keyA + "    " + testValA1);
+        //         foundError = true;
+        //     }
+
+        //     if ((testValB1 == null) || (testValB1.equals(iValueB) == false)) {
+        //         System.out.println("Key-Value t1 incorrect: " + keyB + "    " + testValB1);
+        //         foundError = true;
+        //     }
+
+        //     if ((testValC1 == null) || (testValC1.equals(iValueC) == false)) {
+        //         System.out.println("Key-Value t1 incorrect: " + keyC + "    " + testValC1);
+        //         foundError = true;
+        //     }
+
+        //     if ((testValD1 == null) || (testValD1.equals(iValueD) == false)) {
+        //         System.out.println("Key-Value t1 incorrect: " + keyD + "    " + testValD1);
+        //         foundError = true;
+        //     }
+
+
+        //     if ((testValA2 == null) || (testValA2.equals(iValueA) == false)) {
+        //         System.out.println("Key-Value t2 incorrect: " + keyA + "    " + testValA2);
+        //         foundError = true;
+        //     }
+
+        //     if ((testValB2 == null) || (testValB2.equals(iValueB) == false)) {
+        //         System.out.println("Key-Value t2 incorrect: " + keyB + "    " + testValB2);
+        //         foundError = true;
+        //     }
+
+        //     if ((testValC2 == null) || (testValC2.equals(iValueC) == false)) {
+        //         System.out.println("Key-Value t2 incorrect: " + keyC + "    " + testValC2);
+        //         foundError = true;
+        //     }
+
+        //     if ((testValD2 == null) || (testValD2.equals(iValueD) == false)) {
+        //         System.out.println("Key-Value t2 incorrect: " + keyD + "    " + testValD2);
+        //         foundError = true;
+        //     }
+        // }
+
+        // for (TransactionStatus status : transStatusList) {
+        //     if (status.getStatus() != TransactionStatus.StatusCommitted) {
+        //         foundError = true;
+        //     }
+        // }
+
+        // if (foundError) {
+        //     System.out.println("Found Errors...");
+        // } else {
+        //     System.out.println("No Errors Found...");
+        // }
+
+        t1.close();
+        t2.close();
+
+        // System.out.println();
+        // System.out.println();
+        // t1.printSlots();
+
+        // System.out.println();
+        // System.out.println();
+        // t2.printSlots();
+    }
+
+    static void test7() throws ServerException {
+
+        boolean foundError = false;
+        List<TransactionStatus> transStatusList = new ArrayList<TransactionStatus>();
+
+        // Setup the 2 clients
+        Table t1 = new Table("http://dc-6.calit2.uci.edu/test.iotcloud/", "reallysecret", 321, -1);
+        t1.initTable();
+        Table t2 = new Table("http://dc-6.calit2.uci.edu/test.iotcloud/", "reallysecret", 351, -1);
+        t2.update();
+
+        // Make the Keys
+        System.out.println("Setting up keys");
+        for (int i = 0; i < 4; i++) {
+            String a = "a" + i;
+            String b = "b" + i;
+            String c = "c" + i;
+            String d = "d" + i;
+            IoTString ia = new IoTString(a);
+            IoTString ib = new IoTString(b);
+            IoTString ic = new IoTString(c);
+            IoTString id = new IoTString(d);
+            t1.createNewKey(ia, 321);
+            t1.createNewKey(ib, 351);
+            t2.createNewKey(ic, 321);
+            t2.createNewKey(id, 351);
+        }
+
+        // Do Updates for the keys
+        System.out.println("Setting Key-Values...");
+
+        for (int t = 0; t < NUMBER_OF_TESTS; t++) {
+            for (int i = 0; i < 4; i++) {
+                String keyB = "b" + i;
+                String valueB = "b" + (i + t);
+
+                IoTString iKeyB = new IoTString(keyB);
+                IoTString iValueB = new IoTString(valueB);
+
+                t1.startTransaction();
+                t1.getSpeculativeAtomic(iKeyB);
+                t1.addKV(iKeyB, iValueB);
+                transStatusList.add(t1.commitTransaction());
+            }
+        }
+
+        for (int i = 0; i < 4; i++) {
+
+            String keyB = "b" + i;
+            String valueB = "b" + (i + NUMBER_OF_TESTS - 1);
+            IoTString iKeyB = new IoTString(keyB);
+            IoTString iValueB = new IoTString(valueB);
+
+            IoTString testValB1 = t1.getSpeculative(iKeyB);
+            IoTString testValB2 = t2.getSpeculative(iKeyB);
+
+            if ((testValB1 == null) || (testValB1.equals(iValueB) == false)) {
+                System.out.println("Key-Value t1 incorrect: " + keyB + "    " + testValB1);
+                foundError = true;
+            }
+
+            if ((testValB2 != null)) {
+                System.out.println("Key-Value t2 incorrect: " + keyB + "    " + testValB2);
+                foundError = true;
+            }
+        }
+
+        for (int t = 0; t < NUMBER_OF_TESTS; t++) {
+            for (int i = 0; i < 4; i++) {
+                String keyC = "c" + i;
+                String valueC = "c" + (i + t);
+
+                IoTString iKeyC = new IoTString(keyC);
+                IoTString iValueC = new IoTString(valueC);
+
+                t2.startTransaction();
+                t2.getSpeculativeAtomic(iKeyC);
+                t2.addKV(iKeyC, iValueC);
+                transStatusList.add(t2.commitTransaction());
+            }
+        }
+
+        for (int i = 0; i < 4; i++) {
+            String keyC = "c" + i;
+            String valueC = "c" + (i + NUMBER_OF_TESTS - 1);
+            IoTString iKeyC = new IoTString(keyC);
+            IoTString iValueC = new IoTString(valueC);
+
+            IoTString testValC1 = t1.getSpeculative(iKeyC);
+            IoTString testValC2 = t2.getSpeculative(iKeyC);
+
+            if ((testValC1 != null)) {
+                System.out.println("Key-Value t1 incorrect: " + keyC + "   " + testValC1);
+                foundError = true;
+            }
+
+            if ((testValC2 == null) || (testValC2.equals(iValueC) == false)) {
+                System.out.println("Key-Value t2 incorrect: " + keyC + "   " + testValC2);
+                foundError = true;
+            }
+        }
+
+        for (int t = 0; t < NUMBER_OF_TESTS; t++) {
+            for (int i = 0; i < 4; i++) {
+                String keyA = "a" + i;
+                String keyD = "d" + i;
+                String valueA = "a" + (i + t);
+                String valueD = "d" + (i + t);
+
+                IoTString iKeyA = new IoTString(keyA);
+                IoTString iKeyD = new IoTString(keyD);
+                IoTString iValueA = new IoTString(valueA);
+                IoTString iValueD = new IoTString(valueD);
+
+                t1.startTransaction();
+                t1.addKV(iKeyA, iValueA);
+                transStatusList.add(t1.commitTransaction());
+
+                t2.startTransaction();
+                t2.addKV(iKeyD, iValueD);
+                transStatusList.add(t2.commitTransaction());
+            }
+        }
+
+        System.out.println("Updating Clients...");
+        t1.update();
+        t2.update();
+        t1.update();
+        t2.update();
+
+        System.out.println("Checking Key-Values...");
+        for (int i = 0; i < 4; i++) {
+
+            String keyA = "a" + i;
+            String keyB = "b" + i;
+            String keyC = "c" + i;
+            String keyD = "d" + i;
+            String valueA = "a" + (i + NUMBER_OF_TESTS - 1);
+            String valueB = "b" + (i + NUMBER_OF_TESTS - 1);
+            String valueC = "c" + (i + NUMBER_OF_TESTS - 1);
+            String valueD = "d" + (i + NUMBER_OF_TESTS - 1);
+
+            IoTString iKeyA = new IoTString(keyA);
+            IoTString iKeyB = new IoTString(keyB);
+            IoTString iKeyC = new IoTString(keyC);
+            IoTString iKeyD = new IoTString(keyD);
+            IoTString iValueA = new IoTString(valueA);
+            IoTString iValueB = new IoTString(valueB);
+            IoTString iValueC = new IoTString(valueC);
+            IoTString iValueD = new IoTString(valueD);
+
+
+            IoTString testValA1 = t1.getCommitted(iKeyA);
+            IoTString testValB1 = t1.getCommitted(iKeyB);
+            IoTString testValC1 = t1.getCommitted(iKeyC);
+            IoTString testValD1 = t1.getCommitted(iKeyD);
+
+            IoTString testValA2 = t2.getCommitted(iKeyA);
+            IoTString testValB2 = t2.getCommitted(iKeyB);
+            IoTString testValC2 = t2.getCommitted(iKeyC);
+            IoTString testValD2 = t2.getCommitted(iKeyD);
+
+            if ((testValA1 == null) || (testValA1.equals(iValueA) == false)) {
+                System.out.println("Key-Value t1 incorrect: " + keyA + "    " + testValA1);
+                foundError = true;
+            }
+
+            if ((testValB1 == null) || (testValB1.equals(iValueB) == false)) {
+                System.out.println("Key-Value t1 incorrect: " + keyB + "    " + testValB1);
+                foundError = true;
+            }
+
+            if ((testValC1 == null) || (testValC1.equals(iValueC) == false)) {
+                System.out.println("Key-Value t1 incorrect: " + keyC + "    " + testValC1);
+                foundError = true;
+            }
+
+            if ((testValD1 == null) || (testValD1.equals(iValueD) == false)) {
+                System.out.println("Key-Value t1 incorrect: " + keyD + "    " + testValD1);
+                foundError = true;
+            }
+
+            if ((testValA2 == null) || (testValA2.equals(iValueA) == false)) {
+                System.out.println("Key-Value t2 incorrect: " + keyA + "    " + testValA2);
+                foundError = true;
+            }
+
+            if ((testValB2 == null) || (testValB2.equals(iValueB) == false)) {
+                System.out.println("Key-Value t2 incorrect: " + keyB + "    " + testValB2);
+                foundError = true;
+            }
+
+            if ((testValC2 == null) || (testValC2.equals(iValueC) == false)) {
+                System.out.println("Key-Value t2 incorrect: " + keyC + "    " + testValC2);
+                foundError = true;
+            }
+
+            if ((testValD2 == null) || (testValD2.equals(iValueD) == false)) {
+                System.out.println("Key-Value t2 incorrect: " + keyD + "    " + testValD2);
+                foundError = true;
+            }
+        }
+
+        for (TransactionStatus status : transStatusList) {
+            if (status.getStatus() != TransactionStatus.StatusCommitted) {
+                foundError = true;
+            }
+        }
+
+        if (foundError) {
+            System.out.println("Found Errors...");
+        } else {
+            System.out.println("No Errors Found...");
+        }
+    }
+
+    static void test6() throws ServerException {
+
+        boolean foundError = false;
+        List<TransactionStatus> transStatusList = new ArrayList<TransactionStatus>();
+
+        // Setup the 2 clients
+        Table t1 = new Table("http://dc-6.calit2.uci.edu/test.iotcloud/", "reallysecret", 321, -1);
+        t1.initTable();
+        Table t2 = new Table("http://dc-6.calit2.uci.edu/test.iotcloud/", "reallysecret", 351, -1);
+        t2.update();
+
+        // Make the Keys
+        System.out.println("Setting up keys");
+        for (int i = 0; i < NUMBER_OF_TESTS; i++) {
+            String a = "a" + i;
+            String b = "b" + i;
+            String c = "c" + i;
+            String d = "d" + i;
+            IoTString ia = new IoTString(a);
+            IoTString ib = new IoTString(b);
+            IoTString ic = new IoTString(c);
+            IoTString id = new IoTString(d);
+            t1.createNewKey(ia, 321);
+            t1.createNewKey(ib, 351);
+            t2.createNewKey(ic, 321);
+            t2.createNewKey(id, 351);
+        }
+
+        // Do Updates for the keys
+        System.out.println("Setting Key-Values...");
+        for (int i = 0; i < NUMBER_OF_TESTS; i++) {
+            String keyA = "a" + i;
+            String keyB = "b" + i;
+            String keyC = "c" + i;
+            String keyD = "d" + i;
+            String valueA = "a" + i;
+            String valueB = "b" + i;
+            String valueC = "c" + i;
+            String valueD = "d" + i;
+
+            IoTString iKeyA = new IoTString(keyA);
+            IoTString iKeyB = new IoTString(keyB);
+            IoTString iKeyC = new IoTString(keyC);
+            IoTString iKeyD = new IoTString(keyD);
+            IoTString iValueA = new IoTString(valueA);
+            IoTString iValueB = new IoTString(valueB);
+            IoTString iValueC = new IoTString(valueC);
+            IoTString iValueD = new IoTString(valueD);
+
+            t1.startTransaction();
+            t1.getCommittedAtomic(iKeyA);
+            t1.addKV(iKeyA, iValueA);
+            transStatusList.add(t1.commitTransaction());
+
+            t1.startTransaction();
+            t1.getCommittedAtomic(iKeyB);
+            t1.addKV(iKeyB, iValueB);
+            transStatusList.add(t1.commitTransaction());
+
+            t2.startTransaction();
+            t2.getCommittedAtomic(iKeyC);
+            t2.addKV(iKeyC, iValueC);
+            transStatusList.add(t2.commitTransaction());
+
+            t2.startTransaction();
+            t2.getCommittedAtomic(iKeyD);
+            t2.addKV(iKeyD, iValueD);
+            transStatusList.add(t2.commitTransaction());
+        }
+
+        System.out.println("Updating Clients...");
+        t1.update();
+        t2.update();
+
+        System.out.println("Checking Key-Values...");
+        for (int i = 0; i < NUMBER_OF_TESTS; i++) {
+
+            String keyA = "a" + i;
+            String keyB = "b" + i;
+            String keyC = "c" + i;
+            String keyD = "d" + i;
+            String valueA = "a" + i;
+            String valueB = "b" + i;
+            String valueC = "c" + i;
+            String valueD = "d" + i;
+
+            IoTString iKeyA = new IoTString(keyA);
+            IoTString iKeyB = new IoTString(keyB);
+            IoTString iKeyC = new IoTString(keyC);
+            IoTString iKeyD = new IoTString(keyD);
+            IoTString iValueA = new IoTString(valueA);
+            IoTString iValueB = new IoTString(valueB);
+            IoTString iValueC = new IoTString(valueC);
+            IoTString iValueD = new IoTString(valueD);
+
+
+            IoTString testValA1 = t1.getCommitted(iKeyA);
+            IoTString testValB1 = t1.getCommitted(iKeyB);
+            IoTString testValC1 = t1.getCommitted(iKeyC);
+            IoTString testValD1 = t1.getCommitted(iKeyD);
+
+            IoTString testValA2 = t2.getCommitted(iKeyA);
+            IoTString testValB2 = t2.getCommitted(iKeyB);
+            IoTString testValC2 = t2.getCommitted(iKeyC);
+            IoTString testValD2 = t2.getCommitted(iKeyD);
+
+            if ((testValA1 == null) || (testValA1.equals(iValueA) == false)) {
+                System.out.println("Key-Value t1 incorrect: " + keyA);
+                foundError = true;
+            }
+
+            if ((testValB1 == null) || (testValB1.equals(iValueB) == false)) {
+                System.out.println("Key-Value t1 incorrect: " + keyB);
+                foundError = true;
+            }
+
+            if ((testValC1 == null) || (testValC1.equals(iValueC) == false)) {
+                System.out.println("Key-Value t1 incorrect: " + keyC);
+                foundError = true;
+            }
+
+            if ((testValD1 == null) || (testValD1.equals(iValueD) == false)) {
+                System.out.println("Key-Value t1 incorrect: " + keyD);
+                foundError = true;
+            }
+
+
+            if ((testValA2 == null) || (testValA2.equals(iValueA) == false)) {
+                System.out.println("Key-Value t2 incorrect: " + keyA + "    " + testValA2);
+                foundError = true;
+            }
+
+            if ((testValB2 == null) || (testValB2.equals(iValueB) == false)) {
+                System.out.println("Key-Value t2 incorrect: " + keyB + "    " + testValB2);
+                foundError = true;
+            }
+
+            if ((testValC2 == null) || (testValC2.equals(iValueC) == false)) {
+                System.out.println("Key-Value t2 incorrect: " + keyC + "    " + testValC2);
+                foundError = true;
+            }
+
+            if ((testValD2 == null) || (testValD2.equals(iValueD) == false)) {
+                System.out.println("Key-Value t2 incorrect: " + keyD + "    " + testValD2);
+                foundError = true;
+            }
+        }
+
+        for (TransactionStatus status : transStatusList) {
+            if (status.getStatus() != TransactionStatus.StatusCommitted) {
+                foundError = true;
+            }
+        }
+
+        if (foundError) {
+            System.out.println("Found Errors...");
+        } else {
+            System.out.println("No Errors Found...");
+        }
+    }
+
+    static void test5() throws ServerException {
+
+        boolean foundError = false;
+        List<TransactionStatus> transStatusList = new ArrayList<TransactionStatus>();
+
+        // Setup the 2 clients
+        Table t1 = new Table("http://dc-6.calit2.uci.edu/test.iotcloud/", "reallysecret", 321, -1);
+        t1.initTable();
+        Table t2 = new Table("http://dc-6.calit2.uci.edu/test.iotcloud/", "reallysecret", 351, -1);
+        t2.update();
+
+
+        // Make the Keys
+        System.out.println("Setting up keys");
+        for (int i = 0; i < 4; i++) {
+            String a = "a" + i;
+            String b = "b" + i;
+            String c = "c" + i;
+            String d = "d" + i;
+            IoTString ia = new IoTString(a);
+            IoTString ib = new IoTString(b);
+            IoTString ic = new IoTString(c);
+            IoTString id = new IoTString(d);
+            t1.createNewKey(ia, 321);
+            t1.createNewKey(ib, 351);
+            t2.createNewKey(ic, 321);
+            t2.createNewKey(id, 351);
+        }
+
+        // Do Updates for the keys
+        System.out.println("Setting Key-Values...");
+
+        for (int t = 0; t < NUMBER_OF_TESTS; t++) {
+            for (int i = 0; i < 4; i++) {
+                String keyB = "b" + i;
+                String valueB = "b" + (i + t);
+
+                IoTString iKeyB = new IoTString(keyB);
+                IoTString iValueB = new IoTString(valueB);
+
+                t1.startTransaction();
+                t1.addKV(iKeyB, iValueB);
+                transStatusList.add(t1.commitTransaction());
+            }
+        }
+
+        for (int i = 0; i < 4; i++) {
+
+            String keyB = "b" + i;
+            String valueB = "b" + (i + NUMBER_OF_TESTS - 1);
+            IoTString iKeyB = new IoTString(keyB);
+            IoTString iValueB = new IoTString(valueB);
+
+            IoTString testValB1 = t1.getSpeculative(iKeyB);
+            IoTString testValB2 = t2.getSpeculative(iKeyB);
+
+            if ((testValB1 == null) || (testValB1.equals(iValueB) == false)) {
+                System.out.println("Key-Value t1 incorrect: " + keyB);
+                foundError = true;
+            }
+
+            if ((testValB2 != null)) {
+                System.out.println("Key-Value t2 incorrect: " + keyB);
+                foundError = true;
+            }
+        }
+
+        for (int t = 0; t < NUMBER_OF_TESTS; t++) {
+            for (int i = 0; i < 4; i++) {
+                String keyC = "c" + i;
+                String valueC = "c" + (i + t);
+
+                IoTString iKeyC = new IoTString(keyC);
+                IoTString iValueC = new IoTString(valueC);
+
+                t2.startTransaction();
+                t2.addKV(iKeyC, iValueC);
+                transStatusList.add(t2.commitTransaction());
+            }
+        }
+
+        for (int i = 0; i < 4; i++) {
+            String keyC = "c" + i;
+            String valueC = "c" + (i + NUMBER_OF_TESTS - 1);
+            IoTString iKeyC = new IoTString(keyC);
+            IoTString iValueC = new IoTString(valueC);
+
+            IoTString testValC1 = t1.getSpeculative(iKeyC);
+            IoTString testValC2 = t2.getSpeculative(iKeyC);
+
+            if ((testValC1 != null)) {
+                System.out.println("Key-Value t1 incorrect: " + keyC + "   " + testValC1);
+                foundError = true;
+            }
+
+            if ((testValC2 == null) || (testValC2.equals(iValueC) == false)) {
+                System.out.println("Key-Value t2 incorrect: " + keyC + "   " + testValC2);
+                foundError = true;
+            }
+        }
+
+        for (int t = 0; t < NUMBER_OF_TESTS; t++) {
+            for (int i = 0; i < 4; i++) {
+                String keyA = "a" + i;
+                String keyD = "d" + i;
+                String valueA = "a" + (i + t);
+                String valueD = "d" + (i + t);
+
+                IoTString iKeyA = new IoTString(keyA);
+                IoTString iKeyD = new IoTString(keyD);
+                IoTString iValueA = new IoTString(valueA);
+                IoTString iValueD = new IoTString(valueD);
+
+                t1.startTransaction();
+                t1.addKV(iKeyA, iValueA);
+                transStatusList.add(t1.commitTransaction());
+
+                t2.startTransaction();
+                t2.addKV(iKeyD, iValueD);
+                transStatusList.add(t2.commitTransaction());
+            }
+        }
+
+        System.out.println("Updating Clients...");
+        t1.update();
+        t2.update();
+
+
+        System.out.println("Checking Key-Values...");
+        for (int i = 0; i < 4; i++) {
+
+            String keyA = "a" + i;
+            String keyB = "b" + i;
+            String keyC = "c" + i;
+            String keyD = "d" + i;
+            String valueA = "a" + (i + NUMBER_OF_TESTS - 1);
+            String valueB = "b" + (i + NUMBER_OF_TESTS - 1);
+            String valueC = "c" + (i + NUMBER_OF_TESTS - 1);
+            String valueD = "d" + (i + NUMBER_OF_TESTS - 1);
+
+            IoTString iKeyA = new IoTString(keyA);
+            IoTString iKeyB = new IoTString(keyB);
+            IoTString iKeyC = new IoTString(keyC);
+            IoTString iKeyD = new IoTString(keyD);
+            IoTString iValueA = new IoTString(valueA);
+            IoTString iValueB = new IoTString(valueB);
+            IoTString iValueC = new IoTString(valueC);
+            IoTString iValueD = new IoTString(valueD);
+
+
+            IoTString testValA1 = t1.getCommitted(iKeyA);
+            IoTString testValB1 = t1.getCommitted(iKeyB);
+            IoTString testValC1 = t1.getCommitted(iKeyC);
+            IoTString testValD1 = t1.getCommitted(iKeyD);
+
+            IoTString testValA2 = t2.getCommitted(iKeyA);
+            IoTString testValB2 = t2.getCommitted(iKeyB);
+            IoTString testValC2 = t2.getCommitted(iKeyC);
+            IoTString testValD2 = t2.getCommitted(iKeyD);
+
+            if ((testValA1 == null) || (testValA1.equals(iValueA) == false)) {
+                System.out.println("Key-Value t1 incorrect: " + keyA + "    " + testValA1);
+                foundError = true;
+            }
+
+            if ((testValB1 == null) || (testValB1.equals(iValueB) == false)) {
+                System.out.println("Key-Value t1 incorrect: " + keyB + "    " + testValB1);
+                foundError = true;
+            }
+
+            if ((testValC1 == null) || (testValC1.equals(iValueC) == false)) {
+                System.out.println("Key-Value t1 incorrect: " + keyC + "    " + testValC1);
+                foundError = true;
+            }
+
+            if ((testValD1 == null) || (testValD1.equals(iValueD) == false)) {
+                System.out.println("Key-Value t1 incorrect: " + keyD + "    " + testValD1);
+                foundError = true;
+            }
+
+
+            if ((testValA2 == null) || (testValA2.equals(iValueA) == false)) {
+                System.out.println("Key-Value t2 incorrect: " + keyA + "    " + testValA2);
+                foundError = true;
+            }
+
+            if ((testValB2 == null) || (testValB2.equals(iValueB) == false)) {
+                System.out.println("Key-Value t2 incorrect: " + keyB + "    " + testValB2);
+                foundError = true;
+            }
+
+            if ((testValC2 == null) || (testValC2.equals(iValueC) == false)) {
+                System.out.println("Key-Value t2 incorrect: " + keyC + "    " + testValC2);
+                foundError = true;
+            }
+
+            if ((testValD2 == null) || (testValD2.equals(iValueD) == false)) {
+                System.out.println("Key-Value t2 incorrect: " + keyD + "    " + testValD2);
+                foundError = true;
+            }
+        }
+
+        for (TransactionStatus status : transStatusList) {
+            if (status.getStatus() != TransactionStatus.StatusCommitted) {
+                foundError = true;
+            }
+        }
+
+        if (foundError) {
+            System.out.println("Found Errors...");
+        } else {
+            System.out.println("No Errors Found...");
+        }
+    }
+
+    static void test4() throws ServerException {
+
+        boolean foundError = false;
+        long startTime = 0;
+        long endTime = 0;
+        List<TransactionStatus> transStatusList = new ArrayList<TransactionStatus>();
+
+        // Setup the 2 clients
+        Table t1 = new Table("http://dc-6.calit2.uci.edu/test.iotcloud/", "reallysecret", 321, -1);
+        t1.initTable();
+        Table t2 = new Table("http://dc-6.calit2.uci.edu/test.iotcloud/", "reallysecret", 351, -1);
+        t2.update();
+
+        // Make the Keys
+        System.out.println("Setting up keys");
+        startTime = System.currentTimeMillis();
+        for (int i = 0; i < 4; i++) {
+            String a = "a" + i;
+            String b = "b" + i;
+            String c = "c" + i;
+            String d = "d" + i;
+            IoTString ia = new IoTString(a);
+            IoTString ib = new IoTString(b);
+            IoTString ic = new IoTString(c);
+            IoTString id = new IoTString(d);
+            t1.createNewKey(ia, 321);
+            t1.createNewKey(ib, 351);
+            t2.createNewKey(ic, 321);
+            t2.createNewKey(id, 351);
+        }
+        endTime = System.currentTimeMillis();
+        System.out.println("Time Taken: " + (double)   ((endTime - startTime) / 1000.0)    );
+        System.out.println("Time Taken Per Key: " + (double)  (((endTime - startTime) / 1000.0) / (NUMBER_OF_TESTS * 4))   );
+        System.out.println();
+
+
+        // Do Updates for the keys
+        System.out.println("Setting Key-Values...");
+        startTime = System.currentTimeMillis();
+        for (int t = 0; t < NUMBER_OF_TESTS; t++) {
+            for (int i = 0; i < 4; i++) {
+                String keyA = "a" + i;
+                String keyB = "b" + i;
+                String keyC = "c" + i;
+                String keyD = "d" + i;
+                String valueA = "a" + i;
+                String valueB = "b" + i;
+                String valueC = "c" + i;
+                String valueD = "d" + i;
+
+                IoTString iKeyA = new IoTString(keyA);
+                IoTString iKeyB = new IoTString(keyB);
+                IoTString iKeyC = new IoTString(keyC);
+                IoTString iKeyD = new IoTString(keyD);
+                IoTString iValueA = new IoTString(valueA);
+                IoTString iValueB = new IoTString(valueB);
+                IoTString iValueC = new IoTString(valueC);
+                IoTString iValueD = new IoTString(valueD);
+
+                t1.startTransaction();
+                t1.addKV(iKeyA, iValueA);
+                transStatusList.add(t1.commitTransaction());
+
+                t1.startTransaction();
+                t1.addKV(iKeyB, iValueB);
+                transStatusList.add(t1.commitTransaction());
+
+                t2.startTransaction();
+                t2.addKV(iKeyC, iValueC);
+                transStatusList.add(t2.commitTransaction());
+
+                t2.startTransaction();
+                t2.addKV(iKeyD, iValueD);
+                transStatusList.add(t2.commitTransaction());
+            }
+        }
+        endTime = System.currentTimeMillis();
+        System.out.println("Time Taken: " + (double)   ((endTime - startTime) / 1000.0)    );
+        System.out.println("Time Taken Per Update: " + (double)  (((endTime - startTime) / 1000.0) / (NUMBER_OF_TESTS * 16))   );
+        System.out.println();
+
+
+        System.out.println("Updating Clients...");
+        t1.update();
+        t2.update();
+
+
+        System.out.println("Checking Key-Values...");
+        for (int i = 0; i < 4; i++) {
+
+            String keyA = "a" + i;
+            String keyB = "b" + i;
+            String keyC = "c" + i;
+            String keyD = "d" + i;
+            String valueA = "a" + i;
+            String valueB = "b" + i;
+            String valueC = "c" + i;
+            String valueD = "d" + i;
+
+            IoTString iKeyA = new IoTString(keyA);
+            IoTString iKeyB = new IoTString(keyB);
+            IoTString iKeyC = new IoTString(keyC);
+            IoTString iKeyD = new IoTString(keyD);
+            IoTString iValueA = new IoTString(valueA);
+            IoTString iValueB = new IoTString(valueB);
+            IoTString iValueC = new IoTString(valueC);
+            IoTString iValueD = new IoTString(valueD);
+
+
+            IoTString testValA1 = t1.getCommitted(iKeyA);
+            IoTString testValB1 = t1.getCommitted(iKeyB);
+            IoTString testValC1 = t1.getCommitted(iKeyC);
+            IoTString testValD1 = t1.getCommitted(iKeyD);
+
+            IoTString testValA2 = t2.getCommitted(iKeyA);
+            IoTString testValB2 = t2.getCommitted(iKeyB);
+            IoTString testValC2 = t2.getCommitted(iKeyC);
+            IoTString testValD2 = t2.getCommitted(iKeyD);
+
+            if ((testValA1 == null) || (testValA1.equals(iValueA) == false)) {
+                System.out.println("Key-Value t1 incorrect: " + keyA);
+                foundError = true;
+            }
+
+            if ((testValB1 == null) || (testValB1.equals(iValueB) == false)) {
+                System.out.println("Key-Value t1 incorrect: " + keyB);
+                foundError = true;
+            }
+
+            if ((testValC1 == null) || (testValC1.equals(iValueC) == false)) {
+                System.out.println("Key-Value t1 incorrect: " + keyC);
+                foundError = true;
+            }
+
+            if ((testValD1 == null) || (testValD1.equals(iValueD) == false)) {
+                System.out.println("Key-Value t1 incorrect: " + keyD);
+                foundError = true;
+            }
+
+
+            if ((testValA2 == null) || (testValA2.equals(iValueA) == false)) {
+                System.out.println("Key-Value t2 incorrect: " + keyA + "    " + testValA2);
+                foundError = true;
+            }
+
+            if ((testValB2 == null) || (testValB2.equals(iValueB) == false)) {
+                System.out.println("Key-Value t2 incorrect: " + keyB + "    " + testValB2);
+                foundError = true;
+            }
+
+            if ((testValC2 == null) || (testValC2.equals(iValueC) == false)) {
+                System.out.println("Key-Value t2 incorrect: " + keyC + "    " + testValC2);
+                foundError = true;
+            }
+
+            if ((testValD2 == null) || (testValD2.equals(iValueD) == false)) {
+                System.out.println("Key-Value t2 incorrect: " + keyD + "    " + testValD2);
+                foundError = true;
+            }
+        }
+
+        for (TransactionStatus status : transStatusList) {
+            if (status.getStatus() != TransactionStatus.StatusCommitted) {
+                foundError = true;
+            }
+        }
+
+        if (foundError) {
+            System.out.println("Found Errors...");
+        } else {
+            System.out.println("No Errors Found...");
+        }
+    }
+
+    static void test3() throws ServerException {
+
+        long startTime = 0;
+        long endTime = 0;
+        boolean foundError = false;
+
+        List<TransactionStatus> transStatusList = new ArrayList<TransactionStatus>();
+
+        // Setup the 2 clients
+        Table t1 = new Table("http://dc-6.calit2.uci.edu/test.iotcloud/", "reallysecret", 321, -1);
+        t1.initTable();
+        Table t2 = new Table("http://dc-6.calit2.uci.edu/test.iotcloud/", "reallysecret", 351, -1);
+        t2.update();
+
+
+        // Make the Keys
+        System.out.println("Setting up keys");
+        startTime = System.currentTimeMillis();
+        for (int i = 0; i < NUMBER_OF_TESTS; i++) {
+            String a = "a" + i;
+            String b = "b" + i;
+            String c = "c" + i;
+            String d = "d" + i;
+            IoTString ia = new IoTString(a);
+            IoTString ib = new IoTString(b);
+            IoTString ic = new IoTString(c);
+            IoTString id = new IoTString(d);
+            t1.createNewKey(ia, 321);
+            t1.createNewKey(ib, 351);
+            t2.createNewKey(ic, 321);
+            t2.createNewKey(id, 351);
+        }
+        endTime = System.currentTimeMillis();
+        System.out.println("Time Taken: " + (double)   ((endTime - startTime) / 1000.0)    );
+        System.out.println("Time Taken Per Key: " + (double)  (((endTime - startTime) / 1000.0) / (NUMBER_OF_TESTS * 4))   );
+        System.out.println();
+
+
+        // Do Updates for the keys
+        System.out.println("Setting Key-Values...");
+        startTime = System.currentTimeMillis();
+
+        System.out.println("B...");
+        for (int i = 0; i < NUMBER_OF_TESTS; i++) {
+            String keyB = "b" + i;
+            String valueB = "b" + i;
+
+            IoTString iKeyB = new IoTString(keyB);
+            IoTString iValueB = new IoTString(valueB);
+
+            t1.startTransaction();
+            t1.addKV(iKeyB, iValueB);
+            transStatusList.add(t1.commitTransaction());
+        }
+
+        System.out.println("C...");
+        for (int i = 0; i < NUMBER_OF_TESTS; i++) {
+            String keyC = "c" + i;
+            String valueC = "c" + i;
+
+            IoTString iKeyC = new IoTString(keyC);
+            IoTString iValueC = new IoTString(valueC);
+
+            t2.startTransaction();
+            t2.addKV(iKeyC, iValueC);
+            transStatusList.add(t2.commitTransaction());
+        }
+
+        System.out.println("A, D...");
+        for (int i = 0; i < NUMBER_OF_TESTS; i++) {
+            String keyA = "a" + i;
+            String keyD = "d" + i;
+            String valueA = "a" + i;
+            String valueD = "d" + i;
+
+            IoTString iKeyA = new IoTString(keyA);
+            IoTString iKeyD = new IoTString(keyD);
+            IoTString iValueA = new IoTString(valueA);
+            IoTString iValueD = new IoTString(valueD);
+
+            t1.startTransaction();
+            t1.addKV(iKeyA, iValueA);
+            transStatusList.add(t1.commitTransaction());
+
+            t2.startTransaction();
+            t2.addKV(iKeyD, iValueD);
+            transStatusList.add(t2.commitTransaction());
+        }
+        endTime = System.currentTimeMillis();
+        System.out.println("Time Taken: " + (double)   ((endTime - startTime) / 1000.0)    );
+        System.out.println("Time Taken Per Update: " + (double)  (((endTime - startTime) / 1000.0) / (NUMBER_OF_TESTS * 4))   );
+        System.out.println();
+
+
+        System.out.println("Updating Clients...");
+        t1.update();
+        t2.update();
+
+
+        System.out.println("Checking Key-Values...");
+        for (int i = 0; i < NUMBER_OF_TESTS; i++) {
+
+            String keyA = "a" + i;
+            String keyB = "b" + i;
+            String keyC = "c" + i;
+            String keyD = "d" + i;
+            String valueA = "a" + i;
+            String valueB = "b" + i;
+            String valueC = "c" + i;
+            String valueD = "d" + i;
+
+            IoTString iKeyA = new IoTString(keyA);
+            IoTString iKeyB = new IoTString(keyB);
+            IoTString iKeyC = new IoTString(keyC);
+            IoTString iKeyD = new IoTString(keyD);
+            IoTString iValueA = new IoTString(valueA);
+            IoTString iValueB = new IoTString(valueB);
+            IoTString iValueC = new IoTString(valueC);
+            IoTString iValueD = new IoTString(valueD);
+
+
+            IoTString testValA1 = t1.getCommitted(iKeyA);
+            IoTString testValB1 = t1.getCommitted(iKeyB);
+            IoTString testValC1 = t1.getCommitted(iKeyC);
+            IoTString testValD1 = t1.getCommitted(iKeyD);
+
+            IoTString testValA2 = t2.getCommitted(iKeyA);
+            IoTString testValB2 = t2.getCommitted(iKeyB);
+            IoTString testValC2 = t2.getCommitted(iKeyC);
+            IoTString testValD2 = t2.getCommitted(iKeyD);
+
+            if ((testValA1 == null) || (testValA1.equals(iValueA) == false)) {
+                System.out.println("Key-Value t1 incorrect: " + keyA);
+                foundError = true;
+            }
+
+            if ((testValB1 == null) || (testValB1.equals(iValueB) == false)) {
+                System.out.println("Key-Value t1 incorrect: " + keyB);
+                foundError = true;
+            }
+
+            if ((testValC1 == null) || (testValC1.equals(iValueC) == false)) {
+                System.out.println("Key-Value t1 incorrect: " + keyC);
+                foundError = true;
+            }
+
+            if ((testValD1 == null) || (testValD1.equals(iValueD) == false)) {
+                System.out.println("Key-Value t1 incorrect: " + keyD);
+                foundError = true;
+            }
+
+
+            if ((testValA2 == null) || (testValA2.equals(iValueA) == false)) {
+                System.out.println("Key-Value t2 incorrect: " + keyA + "    " + testValA2);
+                foundError = true;
+            }
+
+            if ((testValB2 == null) || (testValB2.equals(iValueB) == false)) {
+                System.out.println("Key-Value t2 incorrect: " + keyB + "    " + testValB2);
+                foundError = true;
+            }
+
+            if ((testValC2 == null) || (testValC2.equals(iValueC) == false)) {
+                System.out.println("Key-Value t2 incorrect: " + keyC + "    " + testValC2);
+                foundError = true;
+            }
+
+            if ((testValD2 == null) || (testValD2.equals(iValueD) == false)) {
+                System.out.println("Key-Value t2 incorrect: " + keyD + "    " + testValD2);
+                foundError = true;
+            }
+        }
+
+        for (TransactionStatus status : transStatusList) {
+            if (status.getStatus() != TransactionStatus.StatusCommitted) {
+                foundError = true;
+            }
+        }
+
+        if (foundError) {
+            System.out.println("Found Errors...");
+        } else {
+            System.out.println("No Errors Found...");
+        }
+    }
+
+    static void test2() throws ServerException {
+        TimingSingleton timer = TimingSingleton.getInstance();
+
+        boolean foundError = false;
+        List<TransactionStatus> transStatusList = new ArrayList<TransactionStatus>();
+
+        // Setup the 2 clients
+        Table t1 = new Table("http://dc-6.calit2.uci.edu/test.iotcloud/", "reallysecret", 321, -1);
+        t1.initTable();
+        System.out.println("T1 Ready");
+
+        Table t2 = new Table("http://dc-6.calit2.uci.edu/test.iotcloud/", "reallysecret", 351, -1);
+        t2.update();
+        System.out.println("T2 Ready");
+
+        // Make the Keys
+        System.out.println("Setting up keys");
+        for (int i = 0; i < NUMBER_OF_TESTS; i++) {
+            System.out.println(i);
+            String a = "a" + i;
+            String b = "b" + i;
+            String c = "c" + i;
+            String d = "d" + i;
+            IoTString ia = new IoTString(a);
+            IoTString ib = new IoTString(b);
+            IoTString ic = new IoTString(c);
+            IoTString id = new IoTString(d);
+            t1.createNewKey(ia, 321);
+            t1.createNewKey(ib, 351);
+            t2.createNewKey(ic, 321);
+            t2.createNewKey(id, 351);
+        }
+
+        // Do Updates for the keys
+        System.out.println("Setting Key-Values...");
+        for (int i = 0; i < NUMBER_OF_TESTS; i++) {
+            System.out.println(i);
+            String keyA = "a" + i;
+            String keyB = "b" + i;
+            String keyC = "c" + i;
+            String keyD = "d" + i;
+            String valueA = "a" + i;
+            String valueB = "b" + i;
+            String valueC = "c" + i;
+            String valueD = "d" + i;
+
+            IoTString iKeyA = new IoTString(keyA);
+            IoTString iKeyB = new IoTString(keyB);
+            IoTString iKeyC = new IoTString(keyC);
+            IoTString iKeyD = new IoTString(keyD);
+            IoTString iValueA = new IoTString(valueA);
+            IoTString iValueB = new IoTString(valueB);
+            IoTString iValueC = new IoTString(valueC);
+            IoTString iValueD = new IoTString(valueD);
+
+
+            t1.startTransaction();
+            t1.addKV(iKeyA, iValueA);
+            transStatusList.add(t1.commitTransaction());
+            t1.startTransaction();
+            t1.addKV(iKeyB, iValueB);
+            transStatusList.add(t1.commitTransaction());
+
+            t2.startTransaction();
+            t2.addKV(iKeyC, iValueC);
+            transStatusList.add(t2.commitTransaction());
+
+            t2.startTransaction();
+            t2.addKV(iKeyD, iValueD);
+            transStatusList.add(t2.commitTransaction());
+
+        }
+
+        System.out.println("Updating Clients...");
+        t1.update();
+        t2.update();
+
+
+
+
+        System.out.println("Checking Key-Values...");
+        for (int i = 0; i < NUMBER_OF_TESTS; i++) {
+
+            String keyA = "a" + i;
+            String keyB = "b" + i;
+            String keyC = "c" + i;
+            String keyD = "d" + i;
+            String valueA = "a" + i;
+            String valueB = "b" + i;
+            String valueC = "c" + i;
+            String valueD = "d" + i;
+
+            IoTString iKeyA = new IoTString(keyA);
+            IoTString iKeyB = new IoTString(keyB);
+            IoTString iKeyC = new IoTString(keyC);
+            IoTString iKeyD = new IoTString(keyD);
+            IoTString iValueA = new IoTString(valueA);
+            IoTString iValueB = new IoTString(valueB);
+            IoTString iValueC = new IoTString(valueC);
+            IoTString iValueD = new IoTString(valueD);
+
+
+            IoTString testValA1 = t1.getCommitted(iKeyA);
+            IoTString testValB1 = t1.getCommitted(iKeyB);
+            IoTString testValC1 = t1.getCommitted(iKeyC);
+            IoTString testValD1 = t1.getCommitted(iKeyD);
+
+            IoTString testValA2 = t2.getCommitted(iKeyA);
+            IoTString testValB2 = t2.getCommitted(iKeyB);
+            IoTString testValC2 = t2.getCommitted(iKeyC);
+            IoTString testValD2 = t2.getCommitted(iKeyD);
+
+            if ((testValA1 == null) || (testValA1.equals(iValueA) == false)) {
+                System.out.println("Key-Value t1 incorrect: " + keyA);
+                foundError = true;
+            }
+
+            if ((testValB1 == null) || (testValB1.equals(iValueB) == false)) {
+                System.out.println("Key-Value t1 incorrect: " + keyB);
+                foundError = true;
+            }
+
+            if ((testValC1 == null) || (testValC1.equals(iValueC) == false)) {
+                System.out.println("Key-Value t1 incorrect: " + keyC);
+                foundError = true;
+            }
+
+            if ((testValD1 == null) || (testValD1.equals(iValueD) == false)) {
+                System.out.println("Key-Value t1 incorrect: " + keyD);
+                foundError = true;
+            }
+
+
+            if ((testValA2 == null) || (testValA2.equals(iValueA) == false)) {
+                System.out.println("Key-Value t2 incorrect: " + keyA + "    " + testValA2);
+                foundError = true;
+            }
+
+            if ((testValB2 == null) || (testValB2.equals(iValueB) == false)) {
+                System.out.println("Key-Value t2 incorrect: " + keyB + "    " + testValB2);
+                foundError = true;
+            }
+
+            if ((testValC2 == null) || (testValC2.equals(iValueC) == false)) {
+                System.out.println("Key-Value t2 incorrect: " + keyC + "    " + testValC2);
+                foundError = true;
+            }
+
+            if ((testValD2 == null) || (testValD2.equals(iValueD) == false)) {
+                System.out.println("Key-Value t2 incorrect: " + keyD + "    " + testValD2);
+                foundError = true;
+            }
+        }
+
+        for (TransactionStatus status : transStatusList) {
+            if (status.getStatus() != TransactionStatus.StatusCommitted) {
+                foundError = true;
+                System.out.println(status.getStatus());
+            }
+        }
+
+        if (foundError) {
+            System.out.println("Found Errors...");
+        } else {
+            System.out.println("No Errors Found...");
+        }
+
+        // System.out.println();
+        // System.out.println();
+        // t1.printSlots();
+
+        // System.out.println();
+        // System.out.println();
+        // t2.printSlots();
+    }
 }