diff --git a/ym.js b/ym.js
index 7ce4a9f..7699985 100644
--- a/ym.js
+++ b/ym.js
@@ -1,5 +1,6 @@
 var YahooMessenger = require("yahoomessenger");
 var striptags = require('striptags');
+var sleep = require('sleep');
 var db = require('./db.js');
 
 var oldMessages = [];
@@ -31,7 +32,13 @@ function insertMessages(db_connection, logger_id, direction, partner, message, s
 function pm(destination, message) {
     logger.info("Sending to " + destination + ": " + message);
 
-    YahooMessenger.sendPM(destination, message);
+    try {
+        YahooMessenger.sendPM(destination, message);
+    }
+    catch (err) {
+        logger.info("Error sending message: " + err.message);
+        relogin();
+    }
 }
 
 
@@ -54,8 +61,14 @@ var keepAliveTimer;
 var _keepAliveLoop = function() {
     logger.info('Keep alive loop');
 
-    YahooMessenger.keepAlive();
-    keepAliveLoop();
+    try {
+        YahooMessenger.keepAlive();
+        keepAliveLoop();
+    }
+    catch (err) {
+        logger.info("Error when sending keepalive: " + err.message);
+        relogin();
+    }
 }
 
 function isAdmin(user) {
@@ -75,12 +88,24 @@ function login(){
 
 function logout() {
     logger.info("Logout from YM");
+
     clearTimeout(keepAliveTimer);
-    YahooMessenger.logout();
+
+    try {
+        YahooMessenger.logout();
+    }
+    catch(err) {
+        logger.info("Error on logout: " + err.message);
+    }
 }
 
 function relogin() {
+    logger.info("Going to relogin");
     logout();
+
+    logger.info("Sleeping 5 seconds before login");
+    sleep.sleep(5);
+
     YahooMessenger.newInstance();
 }