diff --git a/src/main/java/edu/stanford/ramcloud/JRamCloud.java b/src/main/java/edu/stanford/ramcloud/JRamCloud.java
index 2bfd145..d7a1f63 100644
--- a/src/main/java/edu/stanford/ramcloud/JRamCloud.java
+++ b/src/main/java/edu/stanford/ramcloud/JRamCloud.java
@@ -278,9 +278,15 @@
      * underlying RamCloud C++ object.
      */
     public
+    JRamCloud(String coordinatorLocator, String clusterName)
+    {
+        ramcloudObjectPointer = connect(coordinatorLocator, clusterName);
+    }
+
+    public
     JRamCloud(String coordinatorLocator)
     {
-        ramcloudObjectPointer = connect(coordinatorLocator);
+        this(coordinatorLocator, "main");
     }
 
     /**
@@ -389,7 +395,7 @@
         return write(tableId, key.getBytes(StandardCharsets.UTF_8), value, rules);
     }
 
-    private static native long connect(String coordinatorLocator);
+    private static native long connect(String coordinatorLocator, String clusterName);
     private static native void disconnect(long ramcloudObjectPointer);
 
     public native long createTable(String name);
@@ -453,6 +459,13 @@
         }
     }
 
+    // TODO Define and support some of ClientException sub-classes.
+    public static class ClientException extends Exception {
+        public ClientException(String message) {
+            super(message);
+        }
+    }
+
     public static void tableEnumeratorTest(JRamCloud ramcloud) {
         long startTime = 0;
         for (int x = 0 ; x < 2 ; x ++){
diff --git a/src/main/java/net/onrc/onos/core/datastore/ramcloud/RCClient.java b/src/main/java/net/onrc/onos/core/datastore/ramcloud/RCClient.java
index c651e5f..a2d23a5 100644
--- a/src/main/java/net/onrc/onos/core/datastore/ramcloud/RCClient.java
+++ b/src/main/java/net/onrc/onos/core/datastore/ramcloud/RCClient.java
@@ -38,8 +38,12 @@
 import edu.stanford.ramcloud.JRamCloud.TableEnumerator2;
 
 public class RCClient implements IKVClient {
+
     private static final Logger log = LoggerFactory.getLogger(RCClient.class);
 
+    private static final String DEFAULT_LOCATOR = "zk:localhost:2181";
+    private static final String DEFAULT_CLUSTERNAME = "ONOS-RC";
+
     private static final String DB_CONFIG_FILE = "conf/ramcloud.conf";
     public static final Configuration CONFIG = getConfiguration();
 
@@ -74,7 +78,7 @@
     private static final ThreadLocal<JRamCloud> TLS_RC_CLIENT = new ThreadLocal<JRamCloud>() {
         @Override
         protected JRamCloud initialValue() {
-            return new JRamCloud(getCoordinatorUrl(CONFIG));
+            return new JRamCloud(getLocator(CONFIG), getClusterName(CONFIG));
         }
     };
 
@@ -116,13 +120,37 @@
         }
     }
 
-    public static String getCoordinatorUrl(final Configuration configuration) {
-        final String coordinatorIp = configuration.getString("ramcloud.coordinatorIp", "fast+udp:host=127.0.0.1");
-        final String coordinatorPort = configuration.getString("ramcloud.coordinatorPort", "port=12246");
+    public static String getLocator(final Configuration configuration) {
+
+        final String locator = configuration.getString("ramcloud.locator");
+        if (locator != null) {
+            return locator;
+        }
+
+        // TODO Stop reading obsolete coordinatorIp, etc. once we're ready.
+        final String coordinatorIp = configuration.getString("ramcloud.coordinatorIp");
+        if (coordinatorIp == null) {
+            return DEFAULT_LOCATOR;
+        }
+
+        final String coordinatorPort = configuration.getString("ramcloud.coordinatorPort");
+        if (coordinatorPort == null) {
+            return DEFAULT_LOCATOR;
+        }
+
         final String coordinatorURL = coordinatorIp + "," + coordinatorPort;
         return coordinatorURL;
     }
 
+    public static String getClusterName(final Configuration configuration) {
+        final String clusterName = configuration.getString("ramcloud.clusterName");
+        if (clusterName != null) {
+            return clusterName;
+        }
+
+        return DEFAULT_CLUSTERNAME;
+    }
+
     @Override
     public IMultiEntryOperation createOp(IKVTableID tableId, byte[] key, byte[] value) {
         return RCMultiEntryOperation.create(tableId, key, value);
