diff --git a/bin/ucoind b/bin/ucoind
index 998523e221c7dafb5cd75c5fc75b4f50efc90999..2f4eeebbf22d6eb2ad46300d1752d3420cd8a3f2 100755
--- a/bin/ucoind
+++ b/bin/ucoind
@@ -150,40 +150,25 @@ program
   .command('peer [host] [port]')
   .description('Exchange peerings with another node')
   .action(service(function(host, port, server) {
-    Q.nfcall(vucoin, host, port)
-      .then(function(node){
-        logger.info('Fetching peering record at %s:%s...', host, port);
-        return Q.nfcall(node.network.peering.get)
-          .then(function(peering){
-            logger.info('Apply peering ...');
-            return server.PeeringService.submitP(peering, ERASE_IF_ALREADY_RECORDED, !program.nocautious)
-              .then(function() {
-                logger.info('Applied');
-                return server.dal.getPeer(server.PeeringService.pubkey)
-                  .then(function(selfPeer){
-                    if (!selfPeer) {
-                      throw 'Generate self peer';
-                    }
-                    return selfPeer;
-                  })
-                  .catch(function(){
-                    return Q.nfcall(server.PeeringService.generateSelfPeer, server.conf, 0)
-                      .then(function(){
-                        return server.dal.getPeer(server.PeeringService.pubkey);
-                      });
-                  });
-              })
-              .then(function(selfPeer){
-                logger.info('Send self peering ...');
-                var caster = multicaster();
-                return Q.nfcall(caster.sendPeering, Peer.statics.peerize(peering), Peer.statics.peerize(selfPeer))
-                  .then(function(){
-                    logger.info('Sent.');
-                    process.exit();
-                  });
-              });
-          });
-      })
+    return co(function *() {
+      let node = yield Q.nfcall(vucoin, host, port);
+      logger.info('Fetching peering record at %s:%s...', host, port);
+      let peering = yield Q.nfcall(node.network.peering.get);
+      logger.info('Apply peering ...');
+      yield server.PeeringService.submitP(peering, ERASE_IF_ALREADY_RECORDED, !program.nocautious);
+      logger.info('Applied');
+      let selfPeer = yield server.dal.getPeer(server.PeeringService.pubkey);
+      if (!selfPeer) {
+        yield Q.nfcall(server.PeeringService.generateSelfPeer, server.conf, 0);
+        selfPeer = yield server.dal.getPeer(server.PeeringService.pubkey);
+      }
+      logger.info('Send self peering ...');
+      var caster = multicaster();
+      yield Q.nfcall(caster.sendPeering, Peer.statics.peerize(peering), Peer.statics.peerize(selfPeer));
+      logger.info('Sent.');
+      yield server.disconnect();
+      process.exit();
+    })
       .catch(function(err){
         logger.error(err.code || err.message || err);
         process.exit();