diff --git a/res/res_jabber.c b/res/res_jabber.c
index bfbdc7d440205f2cf7902aa0b33bb70437ef2316..3d4d136f69825f67b34f2176d81dbe56db2a40a8 100644
--- a/res/res_jabber.c
+++ b/res/res_jabber.c
@@ -3058,10 +3058,12 @@ static int aji_filter_roster(void *data, ikspak *pak)
 			if (ast_test_flag(&client->flags, AJI_AUTOPRUNE)) {
 				ast_set_flag(&buddy->flags, AJI_AUTOPRUNE);
 				ASTOBJ_MARK(buddy);
-			} else if (!iks_strcmp(iks_find_attrib(x, "subscription"), "none") || !iks_strcmp(iks_find_attrib(x, "subscription"), "from")) {
-				/* subscribe to buddy's presence only
-				   if we really need to */
-				ast_set_flag(&buddy->flags, AJI_AUTOREGISTER);
+			} else if (ast_test_flag(&client->flags, AJI_AUTOREGISTER)) {
+				if (!iks_strcmp(iks_find_attrib(x, "subscription"), "none") || !iks_strcmp(iks_find_attrib(x, "subscription"), "from")) {
+					/* subscribe to buddy's presence only
+					   if we really need to */
+					ast_set_flag(&buddy->flags, AJI_AUTOREGISTER);
+				}
 			}
 			ASTOBJ_UNLOCK(buddy);
 			if (buddy) {