diff --git a/core/store/dist/src/main/java/org/onlab/onos/store/service/impl/DatabaseManager.java b/core/store/dist/src/main/java/org/onlab/onos/store/service/impl/DatabaseManager.java
index f328842..0d06e08 100644
--- a/core/store/dist/src/main/java/org/onlab/onos/store/service/impl/DatabaseManager.java
+++ b/core/store/dist/src/main/java/org/onlab/onos/store/service/impl/DatabaseManager.java
@@ -25,7 +25,6 @@
 import net.kuujo.copycat.log.InMemoryLog;
 import net.kuujo.copycat.log.Log;
 
-import org.apache.commons.lang3.RandomUtils;
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Deactivate;
@@ -53,7 +52,6 @@
 import org.slf4j.Logger;
 
 import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Iterables;
 
 /**
  * Strongly consistent and durable state management service based on
@@ -125,30 +123,16 @@
         }
 
         final ControllerNode localNode = clusterService.getLocalNode();
-        TcpMember clientHandler = null;
         for (ControllerNode member : defaultMember) {
             final TcpMember tcpMember = new TcpMember(member.ip().toString(),
                                                       member.tcpPort());
             if (localNode.equals(member)) {
-                clientHandler = tcpMember;
                 clusterConfig.setLocalMember(tcpMember);
             } else {
                 clusterConfig.addRemoteMember(tcpMember);
             }
         }
 
-        // TODO should be removed after DatabaseClient refactoring
-        if (clientHandler == null) {
-            Set<TcpMember> members = clusterConfig.getMembers();
-            if (members.isEmpty()) {
-                log.error("No member found in [{}] tablet configuration.",
-                          DEFAULT_TABLET);
-                throw new IllegalStateException("No member found in tablet configuration");
-            }
-            int position = RandomUtils.nextInt(0, members.size());
-            clientHandler = Iterables.get(members, position);
-        }
-
         // note: from this point beyond, clusterConfig requires synchronization
         clusterEventLatch = new CountDownLatch(1);
         clusterEventListener = new InternalClusterEventListener();
@@ -182,8 +166,7 @@
         copycat = new Copycat(stateMachine, consensusLog, cluster, copycatMessagingProtocol);
         copycat.start();
 
-        // FIXME Redo DatabaseClient. Needs fall back mechanism etc.
-        client = new DatabaseClient(copycatMessagingProtocol.createClient(clientHandler));
+        client = new DatabaseClient(copycat);
 
         log.info("Started.");
     }
