diff --git a/adaptor-xmpp.js b/adaptor-xmpp.js
index bbc113c..4b3b3ee 100644
--- a/adaptor-xmpp.js
+++ b/adaptor-xmpp.js
@@ -65,7 +65,7 @@ function onBuddy(jid, state, statusText, resource) {
     matrixUtil.updateBuddyState(jid, state, statusText, resource);
 }
 
-function isPartnerOffline(partner) {
+function _isPartnerOffline(partner) {
     if (!matrix) { return false; }
 
     if (!isAFriend(partner)) {
@@ -89,6 +89,14 @@ function isPartnerOffline(partner) {
     return true;
 }
 
+function isPartnerOffline(partner) {
+    if (!matrixUtil.isAFriend(partner)) {
+        addFriend(partner);
+    }
+    
+    return matrixUtil.isPartnerOffline(partner);
+}
+
 function init(_username, _password, _logger, _callbacks) {
     username = _username;
     password = _password;
@@ -159,11 +167,7 @@ function addFriend(friend) {
 }
 
 function isAFriend(jid) {
-    if (!matrix) { return false; };
-    if (!matrix.buddies) { return false; }
-    if (!matrix.buddies[jid]) { return false; }
-
-    return true;
+    return matrixUtil.isAFriend(jid);
 }
 
 exports.init = init;
diff --git a/matrix-util.js b/matrix-util.js
index d0b2264..d87c3a8 100644
--- a/matrix-util.js
+++ b/matrix-util.js
@@ -54,3 +54,35 @@ MatrixUtil.prototype.updateBuddyState = function(jid, state, statusText, resourc
         catch(e) {};
     }
 }
+
+MatrixUtil.prototype.isAFriend = function(jid) {
+    var matrix = this.matrix;
+
+    if (!matrix) { return false; };
+    if (!matrix.buddies) { return false; }
+    if (!matrix.buddies[jid]) { return false; }
+
+    return true;
+}
+
+MatrixUtil.prototype.isPartnerOffline = function(partner) {
+    var matrix = this.matrix;
+    var logger = this.logger;
+
+    if (!matrix) { return false; }
+
+    if (!matrix.buddies[partner]) { return false; }
+    if (!matrix.buddies[partner].resources) { return false; };
+
+    var resources = matrix.buddies[partner].resources;
+    for (var key in resources) {
+        if (resources.hasOwnProperty(key)) {
+            var resource = resources[key];
+            if (resources[key].state == 'online') {
+                return false;
+            }
+        }
+    }
+    logger.verbose('Offline partner detected: ' + partner);
+    return true;
+}