diff --git a/afrouter/afrouter/api.go b/afrouter/afrouter/api.go
index 8235525..7f7ba54 100644
--- a/afrouter/afrouter/api.go
+++ b/afrouter/afrouter/api.go
@@ -104,7 +104,8 @@
 			return b,nil
 		}
 	}
-	err := errors.New(fmt.Sprintf("Backend '%s' doesn't exist", bknd))
+	err := errors.New(fmt.Sprintf("Backend '%s' doesn't exist in cluster %s",
+						bknd, c.name))
 	return nil, err
 }
 
@@ -172,7 +173,6 @@
 }
 
 func (aa ArouterApi) SetConnection(ctx context.Context, in *pb.Conn) (*pb.Result, error) {
-	log.Debugf("SetConnection called! %v",in);
 	// Navigate down tot he connection and compare IP addresses and ports if they're
 	// not the same then close the existing connection. If they are bothe the same
 	// then return an error describing the situation.
@@ -182,9 +182,12 @@
 	var cn * beConnection
 	var err error
 
+	log.Debugf("SetConnection called! %v",in);
+
 	aap := &aa
 	if s,err = (aap).getServer(in.Server); err != nil {
 		err := errors.New(fmt.Sprintf("Server '%s' doesn't exist", in.Server))
+		log.Error(err)
 		return &pb.Result{Success:false,Error:err.Error()}, err
 	}
 	// The cluster is usually accessed via tha router but since each
@@ -192,18 +195,22 @@
 	// has the cluster we're looking for rather than fully keying
 	// the path
 	if c,err = aap.getCluster(s, in.Cluster); err != nil {
+		log.Error(err)
 		return &pb.Result{Success:false,Error:err.Error()}, err
 	}
 
 	if b,err = aap.getBackend(c, in.Backend); err != nil {
+		log.Error(err)
 		return &pb.Result{Success:false,Error:err.Error()}, err
 	}
 
 	if cn,err = aap.getConnection(b, in.Connection); err != nil {
+		log.Error(err)
 		return &pb.Result{Success:false,Error:err.Error()}, err
 	}
 
 	if err = aap.updateConnection(in, cn, b); err != nil {
+		log.Error(err)
 		return &pb.Result{Success:false,Error:err.Error()}, err
 	}
 
diff --git a/afrouter/afrouter/binding-router.go b/afrouter/afrouter/binding-router.go
index a87481b..11e852d 100644
--- a/afrouter/afrouter/binding-router.go
+++ b/afrouter/afrouter/binding-router.go
@@ -69,7 +69,10 @@
 
 	return rtrnK,rtrnV,nil
 }
-func (br BindingRouter) FindBackendCluster(string) (*backendCluster) {
+func (br BindingRouter) FindBackendCluster(becName string) (*backendCluster) {
+	if becName ==  br.bkndClstr.name {
+		return br.bkndClstr
+	}
 	return nil
 }
 func (br BindingRouter) ReplyHandler(v interface{}) error {
diff --git a/afrouter/afrouter/round-robin-router.go b/afrouter/afrouter/round-robin-router.go
index 4e81985..8201541 100644
--- a/afrouter/afrouter/round-robin-router.go
+++ b/afrouter/afrouter/round-robin-router.go
@@ -122,8 +122,11 @@
 	return rr.grpcService
 }
 
-func (rr RoundRobinRouter) FindBackendCluster(string) (*backendCluster) {
-	return rr.bkndClstr
+func (rr RoundRobinRouter) FindBackendCluster(becName string) (*backendCluster) {
+	if becName ==  rr.bkndClstr.name {
+		return rr.bkndClstr
+	}
+	return nil
 }
 
 func (rr RoundRobinRouter) ReplyHandler(sel interface{}) error { // This is a no-op
diff --git a/arouterd/arouterd.go b/arouterd/arouterd.go
index 0bcff08..68a7861 100644
--- a/arouterd/arouterd.go
+++ b/arouterd/arouterd.go
@@ -437,7 +437,8 @@
 }
 
 func setConnection(client pb.ConfigurationClient, cluster string, backend string, connection string, addr string, port uint64) {
-	log.Debugf("Configuring backend %s : connection %s\n\n", backend, connection)
+	log.Debugf("Configuring backend %s : connection %s in cluster %s\n\n",
+					backend, connection, cluster)
 	cnf := &pb.Conn{Server:"grpc_command",Cluster:cluster, Backend:backend,
 					Connection:connection,Addr:addr,
 					Port:port}
