diff --git a/gajim/common/modules/contacts.py b/gajim/common/modules/contacts.py
index 9d4e17120f7cef4d5e3f24fc22ae7c8c7e627843..d996e9a05d8011d73fcd8cb89eb85623d0fb6af3 100644
--- a/gajim/common/modules/contacts.py
+++ b/gajim/common/modules/contacts.py
@@ -254,6 +254,10 @@ def subscription(self):
     def groups(self):
         return self._get_roster_attr('groups')
 
+    @property
+    def is_subscribed(self):
+        return self.subscription in ('from', 'both')
+
     @property
     def is_blocked(self):
         return self._module('Blocking').is_blocked(self._jid)
diff --git a/gajim/common/modules/entity_time.py b/gajim/common/modules/entity_time.py
index 3ccecbf1d4ee548b91f0a665dcee628e6c4f7915..61bcb697ccf7a9fe2368f9a046555d67c09f2de5 100644
--- a/gajim/common/modules/entity_time.py
+++ b/gajim/common/modules/entity_time.py
@@ -37,8 +37,20 @@ def set_enabled(self, enabled):
             self._nbxmpp('EntityTime').disable()
             return
 
-        if app.settings.get_account_setting(self._account, 'send_time_info'):
-            self._nbxmpp('EntityTime').enable()
+        if not app.settings.get_account_setting(self._account,
+                                                'send_time_info'):
+            return
+
+        self._nbxmpp('EntityTime').enable()
+        self._nbxmpp('EntityTime').set_allow_reply_func(self._allow_reply)
+
+    def _allow_reply(self, jid):
+        item = self._con.get_module('Roster').get_item(jid.bare)
+        if item is None:
+            return False
+
+        contact = self._get_contact(jid.bare)
+        return contact.is_subscribed
 
 
 def get_instance(*args, **kwargs):
diff --git a/gajim/common/modules/last_activity.py b/gajim/common/modules/last_activity.py
index 66716e5a714e95c60de1799df1756fecb75725d6..7f0a11210a46ecd6932b33b15124f806e0495e6f 100644
--- a/gajim/common/modules/last_activity.py
+++ b/gajim/common/modules/last_activity.py
@@ -32,15 +32,24 @@ def __init__(self, con):
         BaseModule.__init__(self, con)
 
     def set_enabled(self, enabled):
-        if enabled and app.is_installed('IDLE'):
-            if not app.settings.get_account_setting(self._account,
-                                                    'send_idle_time'):
-                return
-
-            self._nbxmpp('LastActivity').set_idle_func(
-                idle.Monitor.get_idle_sec)
-        else:
+        if not enabled or not app.is_installed('IDLE'):
             self._nbxmpp('LastActivity').disable()
+            return
+
+        if not app.settings.get_account_setting(self._account,
+                                                'send_idle_time'):
+            return
+
+        self._nbxmpp('LastActivity').set_idle_func(idle.Monitor.get_idle_sec)
+        self._nbxmpp('LastActivity').set_allow_reply_func(self._allow_reply)
+
+    def _allow_reply(self, jid):
+        item = self._con.get_module('Roster').get_item(jid.bare)
+        if item is None:
+            return False
+
+        contact = self._get_contact(jid.bare)
+        return contact.is_subscribed
 
 
 def get_instance(*args, **kwargs):
diff --git a/gajim/common/modules/software_version.py b/gajim/common/modules/software_version.py
index 031bb4bf6157942b36d8743e85f7c760f9c66084..4f908bf1e8d2a78713c72ee4fb295851e8c7bb02 100644
--- a/gajim/common/modules/software_version.py
+++ b/gajim/common/modules/software_version.py
@@ -32,14 +32,24 @@ def __init__(self, con):
         BaseModule.__init__(self, con)
 
     def set_enabled(self, enabled):
-        if enabled:
-            if not app.settings.get_account_setting(self._account,
-                                                    'send_os_info'):
-                return
-            self._nbxmpp('SoftwareVersion').set_software_version(
-                'Gajim', app.version, get_os_info())
-        else:
+        if not enabled:
             self._nbxmpp('SoftwareVersion').disable()
+            return
+
+        if not app.settings.get_account_setting(self._account, 'send_os_info'):
+            return
+
+        self._nbxmpp('SoftwareVersion').set_software_version(
+            'Gajim', app.version, get_os_info())
+        self._nbxmpp('SoftwareVersion').set_allow_reply_func(self._allow_reply)
+
+    def _allow_reply(self, jid):
+        item = self._con.get_module('Roster').get_item(jid.bare)
+        if item is None:
+            return False
+
+        contact = self._get_contact(jid.bare)
+        return contact.is_subscribed
 
 
 def get_instance(*args, **kwargs):