Index: doc/user-guide/commands.xml
===================================================================
--- doc/user-guide/commands.xml	(revision 48b5fef4553ff38711bbdf1773b13841cf0f13c3)
+++ doc/user-guide/commands.xml	(revision 9b02bab9832308cf88d86a379b3afd2f142816e2)
@@ -1174,5 +1174,5 @@
 		<description>
 			<para>
-				By default, BitlBee generates a nickname for every contact by taking its handle and chopping off everything after the @. In some cases, this gives very inconvenient nicknames. The Facebook XMPP server is a good example, as all Facebook XMPP handles are numeric.
+				By default, BitlBee generates a nickname for every contact by taking its handle and chopping off everything after the @. In some cases, this gives very inconvenient nicknames. Some servers use internal identifiers, which are often just numbers.
 			</para>
 
@@ -1188,5 +1188,5 @@
 		<description>
 			<para>
-				This enables OAuth authentication for an IM account; right now the Twitter (working for Twitter only) and Jabber (for Google Talk, Facebook and MSN Messenger) module support it.
+				This enables OAuth authentication for an IM account; right now the Twitter (working for Twitter only) and Jabber (for Google Talk only) module support it.
 			</para>
 
Index: protocols/account.c
===================================================================
--- protocols/account.c	(revision 48b5fef4553ff38711bbdf1773b13841cf0f13c3)
+++ protocols/account.c	(revision 9b02bab9832308cf88d86a379b3afd2f142816e2)
@@ -88,6 +88,4 @@
 		    strstr(a->user, "@googlemail.com")) {
 			strcpy(tag, "gtalk");
-		} else if (strstr(a->user, "@chat.facebook.com")) {
-			strcpy(tag, "fb");
 		}
 	}
Index: protocols/jabber/jabber.c
===================================================================
--- protocols/jabber/jabber.c	(revision 48b5fef4553ff38711bbdf1773b13841cf0f13c3)
+++ protocols/jabber/jabber.c	(revision 9b02bab9832308cf88d86a379b3afd2f142816e2)
@@ -151,4 +151,10 @@
 	}
 
+	if (strstr(jd->server, ".facebook.com")) {
+		imcb_error(ic, "Facebook's XMPP service is gone. Try this instead: https://wiki.bitlbee.org/HowtoFacebookMQTT");
+		imc_logout(ic, FALSE);
+		return;
+	}
+
 	if ((s = strchr(jd->server, '/'))) {
 		*s = 0;
@@ -170,9 +176,7 @@
 		jd->fd = jd->r_inpa = jd->w_inpa = -1;
 
-		if (strstr(jd->server, ".facebook.com")) {
-			jd->oauth2_service = &oauth2_service_facebook;
-		} else {
-			jd->oauth2_service = &oauth2_service_google;
-		}
+		/* There are no other options atm, so assume google for everything 
+		   Facebook and MSN XMPP used to be here. RIP. */
+		jd->oauth2_service = &oauth2_service_google;
 
 		oauth_params_parse(&p_in, ic->acc->pass);
Index: protocols/jabber/jabber.h
===================================================================
--- protocols/jabber/jabber.h	(revision 48b5fef4553ff38711bbdf1773b13841cf0f13c3)
+++ protocols/jabber/jabber.h	(revision 9b02bab9832308cf88d86a379b3afd2f142816e2)
@@ -50,6 +50,4 @@
 	JFLAG_GTALK =  0x100000,        /* Is Google Talk, as confirmed by iq discovery */
 	JFLAG_HIPCHAT = 0x200000,       /* Is hipchat, because prpl->name says so */
-
-	JFLAG_SASL_FB = 0x10000,        /* Trying Facebook authentication. */
 } jabber_flags_t;
 
@@ -342,5 +340,4 @@
 
 extern const struct oauth2_service oauth2_service_google;
-extern const struct oauth2_service oauth2_service_facebook;
 
 /* conference.c */
Index: protocols/jabber/sasl.c
===================================================================
--- protocols/jabber/sasl.c	(revision 48b5fef4553ff38711bbdf1773b13841cf0f13c3)
+++ protocols/jabber/sasl.c	(revision 9b02bab9832308cf88d86a379b3afd2f142816e2)
@@ -38,13 +38,4 @@
 	"6C-Zgf7Tr7gEQTPlBhMUgo7R",
 };
-const struct oauth2_service oauth2_service_facebook =
-{
-	"https://www.facebook.com/dialog/oauth",
-	"https://graph.facebook.com/oauth/access_token",
-	"https://www.bitlbee.org/main.php/Facebook/oauth2.html",
-	"offline_access,xmpp_login",
-	"126828914005625",
-	"4b100f0f244d620bf3f15f8b217d4c32",
-};
 
 xt_status sasl_pkt_mechanisms(struct xt_node *node, gpointer data)
@@ -54,5 +45,5 @@
 	struct xt_node *c, *reply;
 	char *s;
-	int sup_plain = 0, sup_digest = 0, sup_gtalk = 0, sup_fb = 0, sup_anonymous = 0;
+	int sup_plain = 0, sup_digest = 0, sup_gtalk = 0, sup_anonymous = 0;
 	int want_oauth = FALSE, want_hipchat = FALSE, want_anonymous = FALSE;
 	GString *mechs;
@@ -89,6 +80,4 @@
 		} else if (c->text && g_strcasecmp(c->text, "X-OAUTH2") == 0) {
 			sup_gtalk = 1;
-		} else if (c->text && g_strcasecmp(c->text, "X-FACEBOOK-PLATFORM") == 0) {
-			sup_fb = 1;
 		}
 
@@ -101,5 +90,5 @@
 
 	if (!want_oauth && !sup_plain && !sup_digest) {
-		if (!sup_gtalk && !sup_fb) {
+		if (!sup_gtalk) {
 			imcb_error(ic, "This server requires OAuth "
 			           "(supported schemes:%s)", mechs->str);
@@ -137,7 +126,4 @@
 		reply->text_len = strlen(reply->text);
 		g_free(s);
-	} else if (sup_fb && want_oauth) {
-		xt_add_attr(reply, "mechanism", "X-FACEBOOK-PLATFORM");
-		jd->flags |= JFLAG_SASL_FB;
 	} else if (want_oauth) {
 		imcb_error(ic, "OAuth requested, but not supported by server");
@@ -299,25 +285,5 @@
 	dec = frombase64(node->text);
 
-	if (jd->flags & JFLAG_SASL_FB) {
-		/* New-style Facebook OAauth2 support. Instead of sending a refresh
-		   token, they just send an access token that should never expire. */
-		GSList *p_in = NULL, *p_out = NULL;
-		char time[33];
-
-		oauth_params_parse(&p_in, dec);
-		oauth_params_add(&p_out, "nonce", oauth_params_get(&p_in, "nonce"));
-		oauth_params_add(&p_out, "method", oauth_params_get(&p_in, "method"));
-		oauth_params_free(&p_in);
-
-		g_snprintf(time, sizeof(time), "%lld", (long long) (gettime() * 1000));
-		oauth_params_add(&p_out, "call_id", time);
-		oauth_params_add(&p_out, "api_key", oauth2_service_facebook.consumer_key);
-		oauth_params_add(&p_out, "v", "1.0");
-		oauth_params_add(&p_out, "format", "XML");
-		oauth_params_add(&p_out, "access_token", jd->oauth2_access_token);
-
-		reply = oauth_params_string(p_out);
-		oauth_params_free(&p_out);
-	} else if (!(s = sasl_get_part(dec, "rspauth"))) {
+	if (!(s = sasl_get_part(dec, "rspauth"))) {
 		/* See RFC 2831 for for information. */
 		md5_state_t A1, A2, H;
