From 34a6433f43eb9e1f2146d355dd255f976f297b1c Mon Sep 17 00:00:00 2001
From: lucha <lucha@paranoici.org>
Date: Sat, 25 Oct 2014 18:17:13 +0200
Subject: [PATCH] [auto] Plugin: buddypress 2.1.1

---
 .../bp-activity/admin/css/admin-rtl.css       |   80 +
 .../bp-activity/admin/css/admin-rtl.min.css   |    2 +
 .../bp-activity/admin/css/admin.css           |    2 +-
 .../bp-activity/admin/css/admin.min.css       |    3 +-
 .../buddypress/bp-activity/admin/js/admin.js  |   17 +-
 .../bp-activity/admin/js/admin.min.js         |    3 +-
 .../bp-activity/bp-activity-actions.php       |   29 +-
 .../bp-activity/bp-activity-admin.php         |   64 +-
 .../bp-activity/bp-activity-classes.php       |  119 +-
 .../bp-activity/bp-activity-cssjs.php         |   48 +
 .../bp-activity/bp-activity-filters.php       |   11 +-
 .../bp-activity/bp-activity-functions.php     |  661 +-
 .../bp-activity/bp-activity-loader.php        |   31 +-
 .../bp-activity/bp-activity-screens.php       |    4 +-
 .../bp-activity/bp-activity-template.php      |  651 +-
 .../bp-activity/css/mentions-rtl.css          |   80 +
 .../bp-activity/css/mentions-rtl.min.css      |    2 +
 .../buddypress/bp-activity/css/mentions.css   |   80 +
 .../bp-activity/css/mentions.min.css          |    2 +
 .../buddypress/bp-activity/js/mentions.js     |  204 +
 .../buddypress/bp-activity/js/mentions.min.js |    2 +
 .../buddypress/bp-blogs/bp-blogs-activity.php |  154 +-
 .../buddypress/bp-blogs/bp-blogs-classes.php  |   22 +-
 .../buddypress/bp-blogs/bp-blogs-filters.php  |   16 +
 .../bp-blogs/bp-blogs-functions.php           |  287 +-
 .../buddypress/bp-blogs/bp-blogs-loader.php   |   31 +-
 .../buddypress/bp-blogs/bp-blogs-screens.php  |    4 +-
 .../buddypress/bp-blogs/bp-blogs-template.php |  268 +-
 .../bp-core/admin/bp-core-functions.php       |   68 +-
 .../bp-core/admin/bp-core-schema.php          |  333 +-
 .../bp-core/admin/bp-core-settings.php        |   29 -
 .../bp-core/admin/bp-core-tools.php           |   43 +-
 .../bp-core/admin/css/common-rtl.css          |  432 +
 .../bp-core/admin/css/common-rtl.min.css      |    2 +
 .../buddypress/bp-core/admin/css/common.css   |   67 +-
 .../bp-core/admin/css/common.min.css          |    3 +-
 .../bp-core/admin/images/icons32.png          |  Bin 8840 -> 7629 bytes
 .../bp-core/admin/images/icons64.png          |  Bin 24272 -> 21191 bytes
 .../bp-core/admin/images/mentions.gif         |  Bin 0 -> 65381 bytes
 .../bp-core/admin/images/menu-2x.png          |  Bin 20362 -> 16946 bytes
 .../bp-core/admin/images/menu-wp.png          |  Bin 13585 -> 10144 bytes
 .../buddypress/bp-core/admin/images/menu.png  |  Bin 7151 -> 6063 bytes
 .../buddypress/bp-core/bp-core-actions.php    |    1 +
 .../buddypress/bp-core/bp-core-admin.php      |  368 +-
 .../buddypress/bp-core/bp-core-adminbar.php   |   45 +-
 .../buddypress/bp-core/bp-core-avatars.php    |   19 +-
 .../buddypress/bp-core/bp-core-buddybar.php   |  309 +-
 .../buddypress/bp-core/bp-core-caps.php       |   27 +
 .../buddypress/bp-core/bp-core-catchuri.php   |   57 +-
 .../buddypress/bp-core/bp-core-classes.php    |  384 +-
 .../buddypress/bp-core/bp-core-component.php  |   65 +-
 .../buddypress/bp-core/bp-core-cssjs.php      |  143 +-
 .../buddypress/bp-core/bp-core-dependency.php |    7 +
 .../buddypress/bp-core/bp-core-filters.php    |   65 +-
 .../buddypress/bp-core/bp-core-functions.php  |  278 +-
 .../buddypress/bp-core/bp-core-loader.php     |    6 +-
 .../buddypress/bp-core/bp-core-options.php    |   37 +-
 .../bp-core/bp-core-template-loader.php       |   16 +-
 .../buddypress/bp-core/bp-core-template.php   | 1000 +--
 .../bp-core/bp-core-theme-compatibility.php   |    3 +
 .../buddypress/bp-core/bp-core-update.php     |   14 +-
 .../buddypress/bp-core/bp-core-widgets.php    |    9 +-
 .../buddypress/bp-core/css/admin-bar-rtl.css  |   67 +-
 .../bp-core/css/admin-bar-rtl.min.css         |    3 +-
 .../buddypress/bp-core/css/admin-bar.css      |    2 +-
 .../buddypress/bp-core/css/admin-bar.min.css  |    3 +-
 .../buddypress/bp-core/css/buddybar-rtl.css   |  156 +-
 .../bp-core/css/buddybar-rtl.min.css          |    3 +-
 .../buddypress/bp-core/css/buddybar.css       |    8 +-
 .../buddypress/bp-core/css/buddybar.min.css   |    3 +-
 .../buddypress/bp-core/deprecated/1.9.php     |  265 +
 .../buddypress/bp-core/deprecated/2.1.php     |  636 ++
 .../jquery.autocompletefb-rtl.css             |   80 +
 .../jquery.autocompletefb-rtl.min.css         |    2 +
 .../autocomplete/jquery.autocompletefb.css    |   80 +
 .../jquery.autocompletefb.min.css             |    2 +
 .../js/autocomplete/jquery.autocomplete.js    |  730 ++
 .../autocomplete/jquery.autocomplete.min.js   |    2 +
 .../js/autocomplete/jquery.autocompletefb.js  |   76 +
 .../autocomplete/jquery.autocompletefb.min.js |    2 +
 .../js/autocomplete/jquery.bgiframe.js        |   39 +
 .../js/autocomplete/jquery.bgiframe.min.js    |    2 +
 .../js/autocomplete/jquery.dimensions.js      |  117 +
 .../js/autocomplete/jquery.dimensions.min.js  |    2 +
 .../js/autocomplete/license.bgiframe.txt      |   20 +
 .../bp-core/deprecated/js/jquery-scroll-to.js |  208 +
 .../deprecated/js/jquery-scroll-to.min.js     |    2 +
 .../buddypress/bp-core/images/60pc_black.png  |  Bin 109 -> 68 bytes
 .../buddypress/bp-core/images/Jcrop.gif       |  Bin 329 -> 323 bytes
 .../bp-core/images/admin-menu-arrow.gif       |  Bin 51 -> 49 bytes
 .../bp-core/images/mystery-man-50.jpg         |  Bin 1420 -> 582 bytes
 .../buddypress/bp-core/images/mystery-man.jpg |  Bin 1764 -> 1290 bytes
 .../plugins/buddypress/bp-core/js/confirm.js  |   11 +-
 .../buddypress/bp-core/js/confirm.min.js      |    3 +-
 .../buddypress/bp-core/js/jquery-cookie.js    |  120 +
 .../bp-core/js/jquery-cookie.min.js           |    2 +
 .../buddypress/bp-core/js/jquery-query.js     |    6 +
 .../buddypress/bp-core/js/jquery-query.min.js |    2 +
 .../buddypress/bp-core/js/jquery.atwho.js     |  824 ++
 .../buddypress/bp-core/js/jquery.atwho.min.js |    2 +
 .../buddypress/bp-core/js/jquery.atwho.txt    |   22 +
 .../buddypress/bp-core/js/jquery.caret.js     |  366 +
 .../buddypress/bp-core/js/jquery.caret.min.js |    2 +
 .../buddypress/bp-core/js/jquery.caret.txt    |   22 +
 .../buddypress/bp-core/js/widget-members.js   |   22 +-
 .../bp-core/js/widget-members.min.js          |    3 +-
 .../bp-forums/bp-forums-screens.php           |    2 +-
 .../bp-forums/bp-forums-template.php          |    4 +-
 .../bp-friends/bp-friends-activity.php        |    8 +-
 .../bp-friends/bp-friends-classes.php         |   28 +-
 .../bp-friends/bp-friends-filters.php         |    9 +-
 .../bp-friends/bp-friends-functions.php       |   55 +-
 .../bp-friends/bp-friends-loader.php          |   18 +-
 .../bp-friends/bp-friends-screens.php         |    6 +-
 .../bp-friends/bp-friends-template.php        |   13 +-
 .../bp-friends/bp-friends-widgets.php         |    7 +
 .../bp-friends/js/widget-friends.js           |   24 +-
 .../bp-friends/js/widget-friends.min.js       |    3 +-
 .../bp-groups/admin/css/admin-rtl.css         |   86 +
 .../bp-groups/admin/css/admin-rtl.min.css     |    2 +
 .../buddypress/bp-groups/admin/css/admin.css  |   36 +-
 .../bp-groups/admin/css/admin.min.css         |    3 +-
 .../buddypress/bp-groups/admin/js/admin.js    |   36 +-
 .../bp-groups/admin/js/admin.min.js           |    3 +-
 .../bp-groups/bp-groups-actions.php           |   94 +-
 .../bp-groups/bp-groups-activity.php          |   51 +-
 .../buddypress/bp-groups/bp-groups-admin.php  |  223 +-
 .../bp-groups/bp-groups-adminbar.php          |    7 +-
 .../buddypress/bp-groups/bp-groups-cache.php  |   29 +
 .../bp-groups/bp-groups-classes.php           |  640 +-
 .../bp-groups/bp-groups-filters.php           |  108 +-
 .../buddypress/bp-groups/bp-groups-forums.php |  435 +-
 .../bp-groups/bp-groups-functions.php         |  417 +-
 .../buddypress/bp-groups/bp-groups-loader.php |  251 +-
 .../bp-groups/bp-groups-notifications.php     |  235 +-
 .../bp-groups/bp-groups-screens.php           |  167 +-
 .../bp-groups/bp-groups-template.php          | 1155 ++-
 .../bp-groups/bp-groups-widgets.php           |   13 +-
 .../buddypress/bp-groups/js/widget-groups.js  |   22 +-
 .../bp-groups/js/widget-groups.min.js         |    3 +-
 wp-content/plugins/buddypress/bp-loader.php   |   67 +-
 .../bp-members/admin/bp-members-classes.php   |  134 +-
 .../bp-members/admin/css/admin-rtl.css        |  160 +
 .../bp-members/admin/css/admin-rtl.min.css    |    2 +
 .../buddypress/bp-members/admin/css/admin.css |   61 +-
 .../bp-members/admin/css/admin.min.css        |    3 +-
 .../buddypress/bp-members/admin/js/admin.js   |    4 +-
 .../bp-members/admin/js/admin.min.js          |    3 +-
 .../bp-members/bp-members-actions.php         |   17 +-
 .../bp-members/bp-members-admin.php           |  883 +-
 .../bp-members/bp-members-adminbar.php        |   23 +-
 .../bp-members/bp-members-classes.php         |   19 +-
 .../bp-members/bp-members-filters.php         |   62 +-
 .../bp-members/bp-members-functions.php       |  591 +-
 .../bp-members/bp-members-loader.php          |  186 +-
 .../bp-members/bp-members-screens.php         |  100 +-
 .../bp-members/bp-members-template.php        |  936 ++-
 .../bp-messages/bp-messages-actions.php       |   46 +-
 .../bp-messages/bp-messages-cache.php         |   11 +-
 .../bp-messages/bp-messages-classes.php       |  120 +-
 .../bp-messages/bp-messages-cssjs.php         |   32 +-
 .../bp-messages/bp-messages-filters.php       |    1 -
 .../bp-messages/bp-messages-functions.php     |  223 +-
 .../bp-messages/bp-messages-loader.php        |   36 +-
 .../bp-messages/bp-messages-notifications.php |   68 +-
 .../bp-messages/bp-messages-screens.php       |   54 +-
 .../bp-messages/bp-messages-template.php      | 1093 ++-
 .../bp-messages/bp-messages-widgets.php       |    2 +-
 .../bp-notifications-actions.php              |    6 +-
 .../bp-notifications-classes.php              |   26 +-
 .../bp-notifications-functions.php            |   85 +-
 .../bp-notifications-loader.php               |   24 +-
 .../bp-notifications-template.php             |  272 +-
 .../bp-settings/bp-settings-actions.php       |  120 +-
 .../bp-settings/bp-settings-loader.php        |    2 +-
 .../bp-settings/bp-settings-template.php      |   26 +
 .../bp-legacy/buddypress-functions.php        |  137 +-
 .../buddypress/activity/activity-loop.php     |   10 +-
 .../bp-legacy/buddypress/activity/entry.php   |    6 +-
 .../bp-legacy/buddypress/activity/index.php   |   32 +-
 .../buddypress/activity/post-form.php         |    8 +-
 .../bp-legacy/buddypress/groups/create.php    |   53 +-
 .../buddypress/groups/single/activity.php     |   12 +-
 .../buddypress/groups/single/admin.php        |   12 +-
 .../buddypress/groups/single/home.php         |   55 +-
 .../bp-legacy/buddypress/members/register.php |   13 +-
 .../buddypress/members/single/activity.php    |   37 +-
 .../members/single/groups/invites.php         |    2 +-
 .../members/single/messages/single.php        |    2 +-
 .../members/single/profile/change-avatar.php  |   16 +-
 .../members/single/profile/edit.php           |   10 +-
 .../members/single/settings/general.php       |    5 +-
 .../members/single/settings/profile.php       |    2 +-
 .../bp-legacy/css/buddypress-rtl.css          |  172 +-
 .../bp-legacy/css/buddypress-rtl.min.css      |    2 +
 .../bp-templates/bp-legacy/css/buddypress.css |   40 +-
 .../bp-legacy/css/buddypress.min.css          |    2 +
 .../bp-templates/bp-legacy/js/buddypress.js   |  924 ++-
 .../bp-legacy/js/buddypress.min.js            |    2 +
 .../bp-legacy/js/password-verify.js           |   43 +
 .../bp-legacy/js/password-verify.min.js       |    2 +
 .../buddypress/bp-themes/bp-default/.jshintrc |   25 +
 .../bp-themes/bp-default/_inc/ajax.php        |    2 +-
 .../bp-themes/bp-default/_inc/global.js       |   49 +-
 .../bp-default/_inc/images/45pc_black.png     |  Bin 123 -> 86 bytes
 .../bp-default/_inc/images/60pc_black.png     |  Bin 109 -> 68 bytes
 .../bp-default/_inc/images/activity_arrow.gif |  Bin 188 -> 188 bytes
 .../_inc/images/admin-menu-arrow.gif          |  Bin 51 -> 51 bytes
 .../bp-default/_inc/images/ajax-loader.gif    |  Bin 457 -> 445 bytes
 .../bp-default/_inc/images/background.gif     |  Bin 551 -> 543 bytes
 .../bp-default/_inc/images/closed.png         |  Bin 315 -> 220 bytes
 .../bp-default/_inc/images/default_header.jpg |  Bin 1062 -> 708 bytes
 .../bp-default/_inc/images/item_back.gif      |  Bin 126 -> 118 bytes
 .../bp-default/_inc/images/replyto_arrow.gif  |  Bin 66 -> 66 bytes
 .../bp-themes/bp-default/_inc/images/rss.png  |  Bin 689 -> 636 bytes
 .../bp-default/_inc/images/sidebar_back.gif   |  Bin 160 -> 152 bytes
 .../bp-default/_inc/images/white-grad.png     |  Bin 115 -> 82 bytes
 .../bp-themes/bp-default/activity/entry.php   |    2 +-
 .../bp-themes/bp-default/activity/index.php   |    2 +-
 .../bp-default/activity/post-form.php         |    2 +-
 .../bp-themes/bp-default/functions.php        |   36 +-
 .../bp-default/groups/single/activity.php     |    2 +-
 .../bp-default/members/single/activity.php    |    2 +-
 .../buddypress/bp-themes/bp-default/rtl.css   |    2 +-
 .../bp-themes/bp-default/screenshot.png       |  Bin 36316 -> 36065 bytes
 .../buddypress/bp-themes/bp-default/style.css |    2 +-
 .../bp-xprofile/admin/css/admin-rtl.css       |  251 +
 .../bp-xprofile/admin/css/admin-rtl.min.css   |    2 +
 .../bp-xprofile/admin/css/admin.css           |  141 +-
 .../bp-xprofile/admin/css/admin.min.css       |    3 +-
 .../buddypress/bp-xprofile/admin/js/admin.js  |  162 +-
 .../bp-xprofile/admin/js/admin.min.js         |    3 +-
 .../bp-xprofile/bp-xprofile-actions.php       |   17 +-
 .../bp-xprofile/bp-xprofile-activity.php      |  170 +-
 .../bp-xprofile/bp-xprofile-admin.php         |  319 +-
 .../bp-xprofile/bp-xprofile-classes.php       |  858 +-
 .../bp-xprofile/bp-xprofile-cssjs.php         |   23 +
 .../bp-xprofile/bp-xprofile-filters.php       |  143 +-
 .../bp-xprofile/bp-xprofile-functions.php     |  419 +-
 .../bp-xprofile/bp-xprofile-loader.php        |   94 +-
 .../bp-xprofile/bp-xprofile-screens.php       |   21 +-
 .../bp-xprofile/bp-xprofile-template.php      |  104 +-
 wp-content/plugins/buddypress/buddypress.pot  | 7385 +++++++++++++++++
 wp-content/plugins/buddypress/readme.txt      |   43 +-
 244 files changed, 26045 insertions(+), 6153 deletions(-)
 create mode 100644 wp-content/plugins/buddypress/bp-activity/admin/css/admin-rtl.css
 create mode 100644 wp-content/plugins/buddypress/bp-activity/admin/css/admin-rtl.min.css
 create mode 100644 wp-content/plugins/buddypress/bp-activity/bp-activity-cssjs.php
 create mode 100644 wp-content/plugins/buddypress/bp-activity/css/mentions-rtl.css
 create mode 100644 wp-content/plugins/buddypress/bp-activity/css/mentions-rtl.min.css
 create mode 100644 wp-content/plugins/buddypress/bp-activity/css/mentions.css
 create mode 100644 wp-content/plugins/buddypress/bp-activity/css/mentions.min.css
 create mode 100644 wp-content/plugins/buddypress/bp-activity/js/mentions.js
 create mode 100644 wp-content/plugins/buddypress/bp-activity/js/mentions.min.js
 create mode 100644 wp-content/plugins/buddypress/bp-core/admin/css/common-rtl.css
 create mode 100644 wp-content/plugins/buddypress/bp-core/admin/css/common-rtl.min.css
 create mode 100644 wp-content/plugins/buddypress/bp-core/admin/images/mentions.gif
 create mode 100644 wp-content/plugins/buddypress/bp-core/deprecated/1.9.php
 create mode 100644 wp-content/plugins/buddypress/bp-core/deprecated/2.1.php
 create mode 100644 wp-content/plugins/buddypress/bp-core/deprecated/css/autocomplete/jquery.autocompletefb-rtl.css
 create mode 100644 wp-content/plugins/buddypress/bp-core/deprecated/css/autocomplete/jquery.autocompletefb-rtl.min.css
 create mode 100644 wp-content/plugins/buddypress/bp-core/deprecated/css/autocomplete/jquery.autocompletefb.css
 create mode 100644 wp-content/plugins/buddypress/bp-core/deprecated/css/autocomplete/jquery.autocompletefb.min.css
 create mode 100644 wp-content/plugins/buddypress/bp-core/deprecated/js/autocomplete/jquery.autocomplete.js
 create mode 100644 wp-content/plugins/buddypress/bp-core/deprecated/js/autocomplete/jquery.autocomplete.min.js
 create mode 100644 wp-content/plugins/buddypress/bp-core/deprecated/js/autocomplete/jquery.autocompletefb.js
 create mode 100644 wp-content/plugins/buddypress/bp-core/deprecated/js/autocomplete/jquery.autocompletefb.min.js
 create mode 100644 wp-content/plugins/buddypress/bp-core/deprecated/js/autocomplete/jquery.bgiframe.js
 create mode 100644 wp-content/plugins/buddypress/bp-core/deprecated/js/autocomplete/jquery.bgiframe.min.js
 create mode 100644 wp-content/plugins/buddypress/bp-core/deprecated/js/autocomplete/jquery.dimensions.js
 create mode 100644 wp-content/plugins/buddypress/bp-core/deprecated/js/autocomplete/jquery.dimensions.min.js
 create mode 100644 wp-content/plugins/buddypress/bp-core/deprecated/js/autocomplete/license.bgiframe.txt
 create mode 100644 wp-content/plugins/buddypress/bp-core/deprecated/js/jquery-scroll-to.js
 create mode 100644 wp-content/plugins/buddypress/bp-core/deprecated/js/jquery-scroll-to.min.js
 create mode 100644 wp-content/plugins/buddypress/bp-core/js/jquery-cookie.js
 create mode 100644 wp-content/plugins/buddypress/bp-core/js/jquery-cookie.min.js
 create mode 100644 wp-content/plugins/buddypress/bp-core/js/jquery-query.js
 create mode 100644 wp-content/plugins/buddypress/bp-core/js/jquery-query.min.js
 create mode 100644 wp-content/plugins/buddypress/bp-core/js/jquery.atwho.js
 create mode 100644 wp-content/plugins/buddypress/bp-core/js/jquery.atwho.min.js
 create mode 100644 wp-content/plugins/buddypress/bp-core/js/jquery.atwho.txt
 create mode 100644 wp-content/plugins/buddypress/bp-core/js/jquery.caret.js
 create mode 100644 wp-content/plugins/buddypress/bp-core/js/jquery.caret.min.js
 create mode 100644 wp-content/plugins/buddypress/bp-core/js/jquery.caret.txt
 create mode 100644 wp-content/plugins/buddypress/bp-groups/admin/css/admin-rtl.css
 create mode 100644 wp-content/plugins/buddypress/bp-groups/admin/css/admin-rtl.min.css
 create mode 100644 wp-content/plugins/buddypress/bp-members/admin/css/admin-rtl.css
 create mode 100644 wp-content/plugins/buddypress/bp-members/admin/css/admin-rtl.min.css
 create mode 100644 wp-content/plugins/buddypress/bp-templates/bp-legacy/css/buddypress-rtl.min.css
 create mode 100644 wp-content/plugins/buddypress/bp-templates/bp-legacy/css/buddypress.min.css
 create mode 100644 wp-content/plugins/buddypress/bp-templates/bp-legacy/js/buddypress.min.js
 create mode 100644 wp-content/plugins/buddypress/bp-templates/bp-legacy/js/password-verify.js
 create mode 100644 wp-content/plugins/buddypress/bp-templates/bp-legacy/js/password-verify.min.js
 create mode 100644 wp-content/plugins/buddypress/bp-themes/bp-default/.jshintrc
 create mode 100644 wp-content/plugins/buddypress/bp-xprofile/admin/css/admin-rtl.css
 create mode 100644 wp-content/plugins/buddypress/bp-xprofile/admin/css/admin-rtl.min.css
 create mode 100644 wp-content/plugins/buddypress/buddypress.pot

diff --git a/wp-content/plugins/buddypress/bp-activity/admin/css/admin-rtl.css b/wp-content/plugins/buddypress/bp-activity/admin/css/admin-rtl.css
new file mode 100644
index 000000000..77e53e553
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-activity/admin/css/admin-rtl.css
@@ -0,0 +1,80 @@
+.akismet-status {
+	float: left;
+}
+.akismet-status a {
+	color: #AAA;
+	font-style: italic;
+}
+.akismet-history {
+	margin: 13px;
+}
+.akismet-history div {
+	margin-bottom: 13px;
+}
+.akismet-history span {
+	color: #999;
+}
+
+#wp-bp-activities-wrap {
+	padding: 5px 0;
+}
+#bp-activities {
+	height: 120px;
+}
+#bp-replyhead {
+	font-size: 1em;
+	line-height: 1.4em;
+	margin: 0;
+}
+#bp-replysubmit {
+	margin: 0;
+	padding: 0 0 3px;
+	text-align: center;
+}
+#bp-replysubmit .error {
+	color: red;
+	line-height: 21px;
+	text-align: center;
+	vertical-align: center;
+}
+#bp-replysubmit img.waiting {
+	float: left;
+	padding: 4px 10px 0;
+	vertical-align: top;
+}
+#bp-activities-form .column-response img {
+	float: right;
+	margin-left: 10px;
+	margin-top: 1px;
+}
+.activity-errors {
+	list-style-type: disc;
+	margin-right: 2em;
+}
+
+#bp_activity_action div.inside,
+#bp_activity_content div.inside {
+	line-height: 0;
+}
+#bp_activity_action h3,
+#bp_activity_content h3 {
+	cursor: auto;
+}
+#bp_activity_action td.mceIframeContainer,
+#bp_activity_content td.mceIframeContainer {
+	background-color: white;
+}
+#post-body #bp-activities-action_resize,
+#post-body #bp-activities-content_resize {
+	position: inherit;
+	margin-top: -2px;
+}
+#bp_activity_link input {
+	width: 99%;
+}
+#bp-activities-primaryid {
+	margin-bottom: 1em;
+}
+.column-action {
+	width: 12%;
+}
diff --git a/wp-content/plugins/buddypress/bp-activity/admin/css/admin-rtl.min.css b/wp-content/plugins/buddypress/bp-activity/admin/css/admin-rtl.min.css
new file mode 100644
index 000000000..af51f61fb
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-activity/admin/css/admin-rtl.min.css
@@ -0,0 +1,2 @@
+/*! buddypress - v2.1.0 - 2014-10-06 9:39:09 PM UTC - https://wordpress.org/plugins/buddypress/ */
+.akismet-status{float:left}.akismet-status a{color:#AAA;font-style:italic}.akismet-history{margin:13px}.akismet-history div{margin-bottom:13px}.akismet-history span{color:#999}#wp-bp-activities-wrap{padding:5px 0}#bp-activities{height:120px}#bp-replyhead{font-size:1em;line-height:1.4em;margin:0}#bp-replysubmit{margin:0;padding:0 0 3px;text-align:center}#bp-replysubmit .error{color:red;line-height:21px;text-align:center;vertical-align:center}#bp-replysubmit img.waiting{float:left;padding:4px 10px 0;vertical-align:top}#bp-activities-form .column-response img{float:right;margin-left:10px;margin-top:1px}.activity-errors{list-style-type:disc;margin-right:2em}#bp_activity_action div.inside,#bp_activity_content div.inside{line-height:0}#bp_activity_action h3,#bp_activity_content h3{cursor:auto}#bp_activity_action td.mceIframeContainer,#bp_activity_content td.mceIframeContainer{background-color:#fff}#post-body #bp-activities-action_resize,#post-body #bp-activities-content_resize{position:inherit;margin-top:-2px}#bp_activity_link input{width:99%}#bp-activities-primaryid{margin-bottom:1em}.column-action{width:12%}
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-activity/admin/css/admin.css b/wp-content/plugins/buddypress/bp-activity/admin/css/admin.css
index b2a69a7f4..96f017785 100644
--- a/wp-content/plugins/buddypress/bp-activity/admin/css/admin.css
+++ b/wp-content/plugins/buddypress/bp-activity/admin/css/admin.css
@@ -77,4 +77,4 @@
 }
 .column-action {
 	width: 12%;
-}
\ No newline at end of file
+}
diff --git a/wp-content/plugins/buddypress/bp-activity/admin/css/admin.min.css b/wp-content/plugins/buddypress/bp-activity/admin/css/admin.min.css
index d10ded477..aabb27cf9 100644
--- a/wp-content/plugins/buddypress/bp-activity/admin/css/admin.min.css
+++ b/wp-content/plugins/buddypress/bp-activity/admin/css/admin.min.css
@@ -1 +1,2 @@
-.akismet-status{float:right}.akismet-status a{color:#AAA;font-style:italic}.akismet-history{margin:13px}.akismet-history div{margin-bottom:13px}.akismet-history span{color:#999}#wp-bp-activities-wrap{padding:5px 0}#bp-activities{height:120px}#bp-replyhead{font-size:1em;line-height:1.4em;margin:0}#bp-replysubmit{margin:0;padding:0 0 3px;text-align:center}#bp-replysubmit .error{color:red;line-height:21px;text-align:center;vertical-align:center}#bp-replysubmit img.waiting{float:right;padding:4px 10px 0;vertical-align:top}#bp-activities-form .column-response img{float:left;margin-right:10px;margin-top:1px}.activity-errors{list-style-type:disc;margin-left:2em}#bp_activity_action div.inside,#bp_activity_content div.inside{line-height:0}#bp_activity_action h3,#bp_activity_content h3{cursor:auto}#bp_activity_action td.mceIframeContainer,#bp_activity_content td.mceIframeContainer{background-color:white}#post-body #bp-activities-action_resize,#post-body #bp-activities-content_resize{position:inherit;margin-top:-2px}#bp_activity_link input{width:99%}#bp-activities-primaryid{margin-bottom:1em}.column-action{width:12%}
\ No newline at end of file
+/*! buddypress - v2.1.0 - 2014-10-06 9:39:09 PM UTC - https://wordpress.org/plugins/buddypress/ */
+.akismet-status{float:right}.akismet-status a{color:#AAA;font-style:italic}.akismet-history{margin:13px}.akismet-history div{margin-bottom:13px}.akismet-history span{color:#999}#wp-bp-activities-wrap{padding:5px 0}#bp-activities{height:120px}#bp-replyhead{font-size:1em;line-height:1.4em;margin:0}#bp-replysubmit{margin:0;padding:0 0 3px;text-align:center}#bp-replysubmit .error{color:red;line-height:21px;text-align:center;vertical-align:center}#bp-replysubmit img.waiting{float:right;padding:4px 10px 0;vertical-align:top}#bp-activities-form .column-response img{float:left;margin-right:10px;margin-top:1px}.activity-errors{list-style-type:disc;margin-left:2em}#bp_activity_action div.inside,#bp_activity_content div.inside{line-height:0}#bp_activity_action h3,#bp_activity_content h3{cursor:auto}#bp_activity_action td.mceIframeContainer,#bp_activity_content td.mceIframeContainer{background-color:#fff}#post-body #bp-activities-action_resize,#post-body #bp-activities-content_resize{position:inherit;margin-top:-2px}#bp_activity_link input{width:99%}#bp-activities-primaryid{margin-bottom:1em}.column-action{width:12%}
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-activity/admin/js/admin.js b/wp-content/plugins/buddypress/bp-activity/admin/js/admin.js
index 95654c598..44d33281e 100644
--- a/wp-content/plugins/buddypress/bp-activity/admin/js/admin.js
+++ b/wp-content/plugins/buddypress/bp-activity/admin/js/admin.js
@@ -1,3 +1,4 @@
+/* global bp_activity_admin_vars, postboxes, wpAjax */
 (function( $ ) {
 
 /**
@@ -19,7 +20,7 @@ var activityReply = {
 
 		// Close textarea on escape
 		$(document).on( 'keyup', '#bp-activities:visible', function( e ) {
-			if ( 27 == e.which ) {
+			if ( 27 === e.which ) {
 				activityReply.close();
 			}
 		});
@@ -30,7 +31,7 @@ var activityReply = {
 	 *
 	 * @since BuddyPress (1.6)
 	 */
-	open : function( e ) {
+	open : function() {
 		// Hide the container row, and move it to the new location
 		var box = $( '#bp-activities-container' ).hide();
 		$( this ).parents( 'tr' ).after( box );
@@ -47,9 +48,9 @@ var activityReply = {
 	 *
 	 * @since BuddyPress (1.6)
 	 */
-	close : function( e ) {
+	close : function() {
 		// Hide the container row
-		$('#bp-activities-container').fadeOut( '200', function () { 
+		$('#bp-activities-container').fadeOut( '200', function () {
 
 			// Empty and unfocus the text area
 			$( '#bp-activities' ).val( '' ).blur();
@@ -67,7 +68,7 @@ var activityReply = {
 	 *
 	 * @since BuddyPress (1.6)
 	 */
-	send : function( e ) {
+	send : function() {
 		// Hide any existing error message, and show the loading spinner
 		$( '#bp-replysubmit .error' ).hide();
 		$( '#bp-replysubmit .waiting' ).show();
@@ -123,7 +124,7 @@ var activityReply = {
 		var bg, id, response;
 
 		// Handle any errors in the response
-		if ( typeof( xml ) == 'string' ) {
+		if ( typeof( xml ) === 'string' ) {
 			activityReply.error( { 'responseText': xml } );
 			return false;
 		}
@@ -136,7 +137,7 @@ var activityReply = {
 		response = response.responses[0];
 
 		// Close and reset the reply row, and add the new Activity item into the list.
-		$('#bp-activities-container').fadeOut( '200', function () { 
+		$('#bp-activities-container').fadeOut( '200', function () {
 
 			// Empty and unfocus the text area
 			$( '#bp-activities' ).val( '' ).blur();
@@ -169,4 +170,4 @@ $(document).ready( function () {
 	postboxes.add_postbox_toggles( bp_activity_admin_vars.page );
 });
 
-})(jQuery);
\ No newline at end of file
+})(jQuery);
diff --git a/wp-content/plugins/buddypress/bp-activity/admin/js/admin.min.js b/wp-content/plugins/buddypress/bp-activity/admin/js/admin.min.js
index fc4e8ce89..b36b5d37a 100644
--- a/wp-content/plugins/buddypress/bp-activity/admin/js/admin.min.js
+++ b/wp-content/plugins/buddypress/bp-activity/admin/js/admin.min.js
@@ -1 +1,2 @@
-(function(b){var a={init:function(){b(document).on("click",".row-actions a.reply",a.open);b(document).on("click","#bp-activities-container a.cancel",a.close);b(document).on("click","#bp-activities-container a.save",a.send);b(document).on("keyup","#bp-activities:visible",function(c){if(27==c.which){a.close()}})},open:function(d){var c=b("#bp-activities-container").hide();b(this).parents("tr").after(c);c.fadeIn("300");b("#bp-activities").focus();return false},close:function(c){b("#bp-activities-container").fadeOut("200",function(){b("#bp-activities").val("").blur();b("#bp-replysubmit .error").html("").hide();b("#bp-replysubmit .waiting").hide()});return false},send:function(d){b("#bp-replysubmit .error").hide();b("#bp-replysubmit .waiting").show();var c={};c["_ajax_nonce-bp-activity-admin-reply"]=b('#bp-activities-container input[name="_ajax_nonce-bp-activity-admin-reply"]').val();c.action="bp-activity-admin-reply";c.content=b("#bp-activities").val();c.parent_id=b("#bp-activities-container").prev().data("parent_id");c.root_id=b("#bp-activities-container").prev().data("root_id");b.ajax({data:c,type:"POST",url:ajaxurl,error:function(e){a.error(e)},success:function(e){a.show(e)}});return false},error:function(c){var d=c.statusText;b("#bp-replysubmit .waiting").hide();if(c.responseText){d=c.responseText.replace(/<.[^<>]*?>/g,"")}if(d){b("#bp-replysubmit .error").html(d).show()}},show:function(d){var e,f,c;if(typeof(d)=="string"){a.error({responseText:d});return false}c=wpAjax.parseAjaxResponse(d);if(c.errors){a.error({responseText:wpAjax.broken});return false}c=c.responses[0];b("#bp-activities-container").fadeOut("200",function(){b("#bp-activities").val("").blur();b("#bp-replysubmit .error").html("").hide();b("#bp-replysubmit .waiting").hide();b("#bp-activities-container").before(c.data);f=b("#activity-"+c.id);e=f.closest(".widefat").css("backgroundColor");f.animate({backgroundColor:"#CEB"},300).animate({backgroundColor:e},300)})}};b(document).ready(function(){a.init();b("#bp_activity_action h3, #bp_activity_content h3").unbind("click");postboxes.add_postbox_toggles(bp_activity_admin_vars.page)})})(jQuery);
\ No newline at end of file
+/*! buddypress - v2.1.0 - 2014-10-06 9:39:07 PM UTC - https://wordpress.org/plugins/buddypress/ */
+!function(a){var b={init:function(){a(document).on("click",".row-actions a.reply",b.open),a(document).on("click","#bp-activities-container a.cancel",b.close),a(document).on("click","#bp-activities-container a.save",b.send),a(document).on("keyup","#bp-activities:visible",function(a){27===a.which&&b.close()})},open:function(){var b=a("#bp-activities-container").hide();return a(this).parents("tr").after(b),b.fadeIn("300"),a("#bp-activities").focus(),!1},close:function(){return a("#bp-activities-container").fadeOut("200",function(){a("#bp-activities").val("").blur(),a("#bp-replysubmit .error").html("").hide(),a("#bp-replysubmit .waiting").hide()}),!1},send:function(){a("#bp-replysubmit .error").hide(),a("#bp-replysubmit .waiting").show();var c={};return c["_ajax_nonce-bp-activity-admin-reply"]=a('#bp-activities-container input[name="_ajax_nonce-bp-activity-admin-reply"]').val(),c.action="bp-activity-admin-reply",c.content=a("#bp-activities").val(),c.parent_id=a("#bp-activities-container").prev().data("parent_id"),c.root_id=a("#bp-activities-container").prev().data("root_id"),a.ajax({data:c,type:"POST",url:ajaxurl,error:function(a){b.error(a)},success:function(a){b.show(a)}}),!1},error:function(b){var c=b.statusText;a("#bp-replysubmit .waiting").hide(),b.responseText&&(c=b.responseText.replace(/<.[^<>]*?>/g,"")),c&&a("#bp-replysubmit .error").html(c).show()},show:function(c){var d,e,f;return"string"==typeof c?(b.error({responseText:c}),!1):(f=wpAjax.parseAjaxResponse(c),f.errors?(b.error({responseText:wpAjax.broken}),!1):(f=f.responses[0],void a("#bp-activities-container").fadeOut("200",function(){a("#bp-activities").val("").blur(),a("#bp-replysubmit .error").html("").hide(),a("#bp-replysubmit .waiting").hide(),a("#bp-activities-container").before(f.data),e=a("#activity-"+f.id),d=e.closest(".widefat").css("backgroundColor"),e.animate({backgroundColor:"#CEB"},300).animate({backgroundColor:d},300)})))}};a(document).ready(function(){b.init(),a("#bp_activity_action h3, #bp_activity_content h3").unbind("click"),postboxes.add_postbox_toggles(bp_activity_admin_vars.page)})}(jQuery);
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-activity/bp-activity-actions.php b/wp-content/plugins/buddypress/bp-activity/bp-activity-actions.php
index f8c5d524a..640a58505 100644
--- a/wp-content/plugins/buddypress/bp-activity/bp-activity-actions.php
+++ b/wp-content/plugins/buddypress/bp-activity/bp-activity-actions.php
@@ -437,7 +437,7 @@ function bp_activity_action_sitewide_feed() {
 		'id'            => 'sitewide',
 
 		/* translators: Sitewide activity RSS title - "[Site Name] | Site Wide Activity" */
-		'title'         => sprintf( __( '%s | Site Wide Activity', 'buddypress' ), bp_get_site_name() ),
+		'title'         => sprintf( __( '%s | Site-Wide Activity', 'buddypress' ), bp_get_site_name() ),
 
 		'link'          => bp_get_activity_directory_permalink(),
 		'description'   => __( 'Activity feed for the entire site.', 'buddypress' ),
@@ -540,7 +540,7 @@ function bp_activity_action_my_groups_feed() {
 		'title'         => sprintf( __( '%1$s | %2$s | Group Activity', 'buddypress' ), bp_get_site_name(), bp_get_displayed_user_fullname() ),
 
 		'link'          => trailingslashit( bp_displayed_user_domain() . bp_get_activity_slug() . '/' . bp_get_groups_slug() ),
-		'description'   => sprintf( __( "Public group activity feed of which %s is a member of.", 'buddypress' ), bp_get_displayed_user_fullname() ),
+		'description'   => sprintf( __( "Public group activity feed of which %s is a member.", 'buddypress' ), bp_get_displayed_user_fullname() ),
 		'activity_args' => array(
 			'object'           => buddypress()->groups->id,
 			'primary_id'       => $group_ids,
@@ -647,3 +647,28 @@ function bp_activity_setup_akismet() {
 	// Instantiate Akismet for BuddyPress
 	$bp->activity->akismet = new BP_Akismet();
 }
+
+/**
+ * AJAX endpoint for Suggestions API lookups.
+ *
+ * @since BuddyPress (2.1.0)
+ */
+function bp_ajax_get_suggestions() {
+	if ( ! bp_is_user_active() || empty( $_GET['term'] ) || empty( $_GET['type'] ) ) {
+		wp_send_json_error( 'missing_parameter' );
+		exit;
+	}
+
+	$results = bp_core_get_suggestions( array(
+		'term' => sanitize_text_field( $_GET['term'] ),
+		'type' => sanitize_text_field( $_GET['type'] ),
+	) );
+
+	if ( is_wp_error( $results ) ) {
+		wp_send_json_error( $results->get_error_message() );
+		exit;
+	}
+
+	wp_send_json_success( $results );
+}
+add_action( 'wp_ajax_bp_get_suggestions', 'bp_ajax_get_suggestions' );
diff --git a/wp-content/plugins/buddypress/bp-activity/bp-activity-admin.php b/wp-content/plugins/buddypress/bp-activity/bp-activity-admin.php
index 0150595b8..5547557ee 100644
--- a/wp-content/plugins/buddypress/bp-activity/bp-activity-admin.php
+++ b/wp-content/plugins/buddypress/bp-activity/bp-activity-admin.php
@@ -29,8 +29,8 @@ function bp_activity_add_admin_menu() {
 
 	// Add our screen
 	$hook = add_menu_page(
-		__( 'Activity', 'buddypress' ),
-		__( 'Activity', 'buddypress' ),
+		_x( 'Activity', 'Admin Dashbord SWA page title', 'buddypress' ),
+		_x( 'Activity', 'Admin Dashbord SWA menu', 'buddypress' ),
 		'bp_moderate',
 		'bp-activity',
 		'bp_activity_admin',
@@ -220,7 +220,7 @@ function bp_activity_admin_load() {
 			'title'   => __( 'Item, Link, Type', 'buddypress' ),
 			'content' =>
 				'<p>' . __( '<strong>Primary Item/Secondary Item</strong> - These identify the object that created the activity. For example, the fields could reference a comment left on a specific site. Some types of activity may only use one, or none, of these fields.', 'buddypress' ) . '</p>' .
-				'<p>' . __( '<strong>Link</strong> - Activity generated by posts and comments, forum topics and replies, and some plugins, uses the link field for a permalink back to the content item. Some types of activity may not use this field, even if it has been set.', 'buddypress' ) . '</p>' .
+				'<p>' . __( '<strong>Link</strong> - Used by some types of activity (e.g blog posts and comments, and forum topics and replies) to store a link back to the original content.', 'buddypress' ) . '</p>' .
 				'<p>' . __( '<strong>Type</strong> - Each distinct kind of activity has its own type. For example, <code>created_group</code> is used when a group is created and <code>joined_group</code> is used when a user joins a group.', 'buddypress' ) . '</p>' .
 				'<p>' . __( 'For information about when and how BuddyPress uses all of these settings, see the Managing Activity link in the panel to the side.', 'buddypress' ) . '</p>'
 		) );
@@ -284,6 +284,12 @@ function bp_activity_admin_load() {
  	) );
 	wp_enqueue_style( 'bp_activity_admin_css', $bp->plugin_url . "bp-activity/admin/css/admin.{$min}css", array(),                               bp_get_version()       );
 
+	wp_style_add_data( 'bp_activity_admin_css', 'rtl', true );
+	if ( $min ) {
+		wp_style_add_data( 'bp_activity_admin_css', 'suffix', $min );
+	}
+
+
 	// Handle spam/un-spam/delete of activities
 	if ( !empty( $doaction ) && ! in_array( $doaction, array( '-1', 'edit', 'save', ) ) ) {
 
@@ -903,7 +909,7 @@ function bp_activity_admin_index() {
 			<?php if ( !empty( $_REQUEST['aid'] ) ) : ?>
 				<?php printf( __( 'Activity related to ID #%s', 'buddypress' ), number_format_i18n( (int) $_REQUEST['aid'] ) ); ?>
 			<?php else : ?>
-				<?php _e( 'Activity', 'buddypress' ); ?>
+				<?php _ex( 'Activity', 'Admin SWA page', 'buddypress' ); ?>
 			<?php endif; ?>
 
 			<?php if ( !empty( $_REQUEST['s'] ) ) : ?>
@@ -1057,6 +1063,7 @@ class BP_Activity_List_Table extends WP_List_Table {
 			'display_comments' => 'stream',
 			'show_hidden'      => true,
 			'spam'             => 'spam_only',
+			'count_total'      => 'count_query',
 		) );
 		$this->spam_count = $spams['total'];
 		unset( $spams );
@@ -1072,6 +1079,7 @@ class BP_Activity_List_Table extends WP_List_Table {
 			'show_hidden'      => true,
 			//'sort'             => $sort,
 			'spam'             => $spam,
+			'count_total'      => 'count_query',
 		) );
 
 		// If we're viewing a specific activity, flatten all activites into a single array.
@@ -1138,8 +1146,6 @@ class BP_Activity_List_Table extends WP_List_Table {
 	 * @since BuddyPress (1.6.0)
 	*/
 	function display() {
-		extract( $this->_args );
-
 		$this->display_tablenav( 'top' ); ?>
 
 		<table class="<?php echo implode( ' ', $this->get_table_classes() ); ?>" cellspacing="0">
@@ -1238,10 +1244,10 @@ class BP_Activity_List_Table extends WP_List_Table {
 	function get_columns() {
 		return array(
 			'cb'       => '<input name type="checkbox" />',
-			'author'   => __( 'Author', 'buddypress' ),
-			'comment'  => __( 'Activity', 'buddypress' ),
-			'action'   => __( 'Action', 'buddypress' ),
-			'response' => __( 'In Response To', 'buddypress' ),
+			'author'   => _x('Author', 'Admin SWA column header', 'buddypress' ),
+			'comment'  => _x( 'Activity', 'Admin SWA column header', 'buddypress' ),
+			'action'   => _x( 'Action', 'Admin SWA column header', 'buddypress' ),
+			'response' => _x( 'In Response To', 'Admin SWA column header', 'buddypress' ),
 		);
 	}
 
@@ -1272,23 +1278,43 @@ class BP_Activity_List_Table extends WP_List_Table {
 	 * @param string $which 'top' or 'bottom'.
 	 */
 	function extra_tablenav( $which ) {
-		if ( 'bottom' == $which )
+
+		// Bail on bottom table nav
+		if ( 'bottom' === $which ) {
 			return;
+		}
 
-		$selected = !empty( $_REQUEST['activity_type'] ) ? $_REQUEST['activity_type'] : '';
+		// Is any filter currently selected?
+		$selected = ( ! empty( $_REQUEST['activity_type'] ) ) ? $_REQUEST['activity_type'] : '';
 
-		// Get all types of activities, and sort alphabetically.
-		$actions  = bp_activity_get_types();
-		natsort( $actions );
-	?>
+		// Get the actions
+		$activity_actions = buddypress()->activity->actions; ?>
 
 		<div class="alignleft actions">
 			<select name="activity_type">
-				<option value="" <?php selected( !$selected ); ?>><?php _e( 'Show all activity types', 'buddypress' ); ?></option>
+				<option value="" <?php selected( ! $selected ); ?>><?php _e( 'View all actions', 'buddypress' ); ?></option>
+
+				<?php foreach ( $activity_actions as $component => $actions ) : ?>
+
+					<optgroup label="<?php echo ucfirst( $component ); ?>">
+
+						<?php foreach ( $actions as $action_key => $action_values ) : ?>
+
+							<?php
+
+							// Skip the incorrectly named pre-1.6 action
+							if ( 'friends_register_activity_action' !== $action_key ) : ?>
+
+								<option value="<?php echo esc_attr( $action_key ); ?>" <?php selected( $action_key,  $selected ); ?>><?php echo esc_html( $action_values[ 'value' ] ); ?></option>
+
+							<?php endif; ?>
+
+						<?php endforeach; ?>
+
+					</optgroup>
 
-				<?php foreach ( $actions as $k => $v ) : ?>
-					<option value="<?php echo esc_attr( $k ); ?>" <?php selected( $k,  $selected ); ?>><?php echo esc_html( $v ); ?></option>
 				<?php endforeach; ?>
+
 			</select>
 
 			<?php submit_button( __( 'Filter', 'buddypress' ), 'secondary', false, false, array( 'id' => 'post-query-submit' ) ); ?>
diff --git a/wp-content/plugins/buddypress/bp-activity/bp-activity-classes.php b/wp-content/plugins/buddypress/bp-activity/bp-activity-classes.php
index f1e6054b1..ad6f9f098 100644
--- a/wp-content/plugins/buddypress/bp-activity/bp-activity-classes.php
+++ b/wp-content/plugins/buddypress/bp-activity/bp-activity-classes.php
@@ -146,10 +146,10 @@ class BP_Activity_Activity {
 		}
 
 		if ( ! empty( $row ) ) {
-			$this->id                = $row->id;
-			$this->item_id           = $row->item_id;
-			$this->secondary_item_id = $row->secondary_item_id;
-			$this->user_id           = $row->user_id;
+			$this->id                = (int) $row->id;
+			$this->item_id           = (int) $row->item_id;
+			$this->secondary_item_id = (int) $row->secondary_item_id;
+			$this->user_id           = (int) $row->user_id;
 			$this->primary_link      = $row->primary_link;
 			$this->component         = $row->component;
 			$this->type              = $row->type;
@@ -157,8 +157,8 @@ class BP_Activity_Activity {
 			$this->content           = $row->content;
 			$this->date_recorded     = $row->date_recorded;
 			$this->hide_sitewide     = $row->hide_sitewide;
-			$this->mptt_left         = $row->mptt_left;
-			$this->mptt_right        = $row->mptt_right;
+			$this->mptt_left         = (int) $row->mptt_left;
+			$this->mptt_right        = (int) $row->mptt_right;
 			$this->is_spam           = $row->is_spam;
 		}
 
@@ -257,6 +257,9 @@ class BP_Activity_Activity {
 	 *                     Default: false.
 	 *     @type array $meta_query An array of meta_query conditions.
 	 *                             See WP_Meta_Query::queries for description.
+	 *     @type array $date_query An array of date_query conditions.
+	 *                             See first parameter of WP_Date_Query::__construct()
+	 *                             for description.
 	 *     @type array $filter See BP_Activity_Activity::get_filter_sql().
 	 *     @type string $search_terms Limit results by a search term.
 	 *                                Default: false.
@@ -267,6 +270,9 @@ class BP_Activity_Activity {
 	 *     @type string $spam Spam status. Default: 'ham_only'.
 	 *     @type bool $update_meta_cache Whether to pre-fetch metadata for
 	 *           queried activity items. Default: true.
+	 *     @type string|bool $count_total If true, an additional DB query
+	 *           is run to count the total activity items for the query.
+	 *           Default: false.
 	 * }
 	 * @return array The array returned has two keys:
 	 *     - 'total' is the count of located activities
@@ -305,12 +311,14 @@ class BP_Activity_Activity {
 			'exclude'           => false,      // Array of ids to exclude
 			'in'                => false,      // Array of ids to limit query by (IN)
 			'meta_query'        => false,      // Filter by activitymeta
+			'date_query'        => false,      // Filter by date
 			'filter'            => false,      // See self::get_filter_sql()
 			'search_terms'      => false,      // Terms to search by
 			'display_comments'  => false,      // Whether to include activity comments
 			'show_hidden'       => false,      // Show items marked hide_sitewide
 			'spam'              => 'ham_only', // Spam status
 			'update_meta_cache' => true,
+			'count_total'       => false,
 		);
 		$r = wp_parse_args( $args, $defaults );
 		extract( $r );
@@ -325,6 +333,9 @@ class BP_Activity_Activity {
 		// Where conditions
 		$where_conditions = array();
 
+		// Excluded types
+		$excluded_types = array();
+
 		// Spam
 		if ( 'ham_only' == $spam )
 			$where_conditions['spam_sql'] = 'a.is_spam = 0';
@@ -333,8 +344,8 @@ class BP_Activity_Activity {
 
 		// Searching
 		if ( $search_terms ) {
-			$search_terms = esc_sql( $search_terms );
-			$where_conditions['search_sql'] = "a.content LIKE '%%" . esc_sql( like_escape( $search_terms ) ) . "%%'";
+			$search_terms_like = '%' . bp_esc_like( $search_terms ) . '%';
+			$where_conditions['search_sql'] = $wpdb->prepare( 'a.content LIKE %s', $search_terms_like );
 		}
 
 		// Filtering
@@ -372,17 +383,35 @@ class BP_Activity_Activity {
 			$where_conditions[] = $meta_query_sql['where'];
 		}
 
+		// Process date_query into SQL
+		$date_query_sql = self::get_date_query_sql( $date_query );
+
+		if ( ! empty( $date_query_sql ) ) {
+			$where_conditions['date'] = $date_query_sql;
+		}
+
 		// Alter the query based on whether we want to show activity item
 		// comments in the stream like normal comments or threaded below
 		// the activity.
 		if ( false === $display_comments || 'threaded' === $display_comments ) {
-			$where_conditions[] = "a.type != 'activity_comment'";
+			$excluded_types[] = 'activity_comment';
 		}
 
 		// Exclude 'last_activity' items unless the 'action' filter has
 		// been explicitly set
 		if ( empty( $filter['object'] ) ) {
-			$where_conditions[] = "a.type != 'last_activity'";
+			$excluded_types[] = 'last_activity';
+		}
+
+		// Exclude 'new_member' items if xprofile component is not active
+		if ( ! bp_is_active( 'xprofile' ) ) {
+			$excluded_types[] = 'new_member';
+		}
+
+		// Build the excluded type sql part
+		if ( ! empty( $excluded_types ) ) {
+			$not_in = "'" . implode( "', '", esc_sql( $excluded_types ) ) . "'";
+			$where_conditions['excluded_types'] = "a.type NOT IN ({$not_in})";
 		}
 
 		// Filter the where conditions
@@ -411,6 +440,12 @@ class BP_Activity_Activity {
 		$page     = absint( $page     );
 		$per_page = absint( $per_page );
 
+		$retval = array(
+			'activities'     => null,
+			'total'          => null,
+			'has_more_items' => null,
+		);
+
 		// Filter and return true to use the legacy query structure (not recommended)
 		if ( apply_filters( 'bp_use_legacy_activity_query', false, __METHOD__, $r ) ) {
 
@@ -431,17 +466,25 @@ class BP_Activity_Activity {
 			$activity_ids_sql = "{$select_sql} {$from_sql} {$join_sql} {$where_sql} ORDER BY a.date_recorded {$sort}";
 
 			if ( ! empty( $per_page ) && ! empty( $page ) ) {
-				$activity_ids_sql .= $wpdb->prepare( " LIMIT %d, %d", absint( ( $page - 1 ) * $per_page ), $per_page );
+				// We query for $per_page + 1 items in order to
+				// populate the has_more_items flag
+				$activity_ids_sql .= $wpdb->prepare( " LIMIT %d, %d", absint( ( $page - 1 ) * $per_page ), $per_page + 1 );
 			}
 
 			$activity_ids_sql = apply_filters( 'bp_activity_paged_activities_sql', $activity_ids_sql, $r );
 
 			$activity_ids = $wpdb->get_col( $activity_ids_sql );
-			$activities   = self::get_activity_data( $activity_ids );
-		}
 
-		$total_activities_sql = apply_filters( 'bp_activity_total_activities_sql', "SELECT count(DISTINCT a.id) FROM {$bp->activity->table_name} a {$join_sql} {$where_sql}", $where_sql, $sort );
-		$total_activities     = $wpdb->get_var( $total_activities_sql );
+			$retval['has_more_items'] = ! empty( $per_page ) && count( $activity_ids ) > $per_page;
+
+			// If we've fetched more than the $per_page value, we
+			// can discard the extra now
+			if ( ! empty( $per_page ) && count( $activity_ids ) === $per_page + 1 ) {
+				array_pop( $activity_ids );
+			}
+
+			$activities = self::get_activity_data( $activity_ids );
+		}
 
 		// Get the fullnames of users so we don't have to query in the loop
 		$activities = self::append_user_fullnames( $activities );
@@ -465,13 +508,23 @@ class BP_Activity_Activity {
 		// Generate action strings
 		$activities = BP_Activity_Activity::generate_action_strings( $activities );
 
+		$retval['activities'] = $activities;
+
 		// If $max is set, only return up to the max results
-		if ( !empty( $max ) ) {
-			if ( (int) $total_activities > (int) $max )
-				$total_activities = $max;
+		if ( ! empty( $r['count_total'] ) ) {
+
+			$total_activities_sql = apply_filters( 'bp_activity_total_activities_sql', "SELECT count(DISTINCT a.id) FROM {$bp->activity->table_name} a {$join_sql} {$where_sql}", $where_sql, $sort );
+			$total_activities     = $wpdb->get_var( $total_activities_sql );
+
+			if ( !empty( $max ) ) {
+				if ( (int) $total_activities > (int) $max )
+					$total_activities = $max;
+			}
+
+			$retval['total'] = $total_activities;
 		}
 
-		return array( 'activities' => $activities, 'total' => (int) $total_activities );
+		return $retval;
 	}
 
 	/**
@@ -547,7 +600,6 @@ class BP_Activity_Activity {
 	 * @return array
 	 */
 	protected static function append_user_fullnames( $activities ) {
-		global $wpdb;
 
 		if ( bp_is_active( 'xprofile' ) && ! empty( $activities ) ) {
 			$activity_user_ids = wp_list_pluck( $activities, 'user_id' );
@@ -656,6 +708,33 @@ class BP_Activity_Activity {
 		return $sql_array;
 	}
 
+	/**
+	 * Get the SQL for the 'date_query' param in BP_Activity_Activity::get().
+	 *
+	 * We use BP_Date_Query, which extends WP_Date_Query, to do the heavy lifting
+	 * of parsing the date_query array and creating the necessary SQL clauses.
+	 * However, since BP_Activity_Activity::get() builds its SQL differently than
+	 * WP_Query, we have to alter the return value (stripping the leading AND
+	 * keyword from the query).
+	 *
+	 * @since BuddyPress (2.1.0)
+	 *
+	 * @param array $date_query An array of date_query parameters. See the
+	 *        documentation for the first parameter of WP_Date_Query.
+	 * @return string
+	 */
+	public static function get_date_query_sql( $date_query = array() ) {
+		$sql = '';
+
+		// Date query
+		if ( ! empty( $date_query ) && is_array( $date_query ) && class_exists( 'BP_Date_Query' ) ) {
+			$date_query = new BP_Date_Query( $date_query, 'date_recorded' );
+			$sql = preg_replace( '/^\sAND/', '', $date_query->get_sql() );
+		}
+
+		return $sql;
+	}
+
 	/**
 	 * In BuddyPress 1.2.x, this was used to retrieve specific activity stream items (for example, on an activity's permalink page).
 	 *
diff --git a/wp-content/plugins/buddypress/bp-activity/bp-activity-cssjs.php b/wp-content/plugins/buddypress/bp-activity/bp-activity-cssjs.php
new file mode 100644
index 000000000..bc747c9fd
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-activity/bp-activity-cssjs.php
@@ -0,0 +1,48 @@
+<?php
+
+/**
+ * Activity component CSS/JS
+ *
+ * @package BuddyPress
+ * @subpackage ActivityScripts
+ */
+
+// Exit if accessed directly
+if ( ! defined( 'ABSPATH' ) ) exit;
+
+/**
+ * Enqueue @mentions JS.
+ *
+ * @since BuddyPress (2.1)
+ */
+function bp_activity_mentions_script() {
+	if ( ! bp_activity_maybe_load_mentions_scripts() ) {
+		return;
+	}
+
+	// Special handling for New/Edit screens in wp-admin
+	if ( is_admin() ) {
+		if (
+			! get_current_screen() ||
+			! in_array( get_current_screen()->base, array( 'page', 'post' ) ) ||
+			! post_type_supports( get_current_screen()->post_type, 'editor' ) ) {
+			return;
+		}
+	}
+
+
+	$min = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
+
+	wp_enqueue_script( 'bp-mentions', buddypress()->plugin_url . "bp-activity/js/mentions{$min}.js", array( 'jquery', 'jquery-atwho' ), bp_get_version(), true );
+	wp_enqueue_style( 'bp-mentions-css', buddypress()->plugin_url . "bp-activity/css/mentions{$min}.css", array(), bp_get_version() );
+
+	wp_style_add_data( 'bp-mentions-css', 'rtl', true );
+	if ( $min ) {
+		wp_style_add_data( 'bp-mentions-css', 'suffix', $min );
+	}
+
+	// Print a list of the current user's friends to the page for quicker @mentions lookups.
+	do_action( 'bp_activity_mentions_prime_results' );
+}
+add_action( 'bp_enqueue_scripts', 'bp_activity_mentions_script' );
+add_action( 'bp_admin_enqueue_scripts', 'bp_activity_mentions_script' );
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-activity/bp-activity-filters.php b/wp-content/plugins/buddypress/bp-activity/bp-activity-filters.php
index 9c6e5d9c7..e2819e527 100644
--- a/wp-content/plugins/buddypress/bp-activity/bp-activity-filters.php
+++ b/wp-content/plugins/buddypress/bp-activity/bp-activity-filters.php
@@ -22,7 +22,7 @@ add_filter( 'bp_get_activity_latest_update_excerpt', 'bp_activity_filter_kses',
 add_filter( 'bp_get_activity_feed_item_description', 'bp_activity_filter_kses', 1 );
 add_filter( 'bp_activity_content_before_save',       'bp_activity_filter_kses', 1 );
 add_filter( 'bp_activity_action_before_save',        'bp_activity_filter_kses', 1 );
-add_filter( 'bp_activity_latest_update_content',     'wp_filter_kses', 1 );
+add_filter( 'bp_activity_latest_update_content',     'bp_activity_filter_kses', 1 );
 
 add_filter( 'bp_get_activity_action',                'force_balance_tags' );
 add_filter( 'bp_get_activity_content_body',          'force_balance_tags' );
@@ -96,6 +96,9 @@ add_filter( 'bp_get_activity_parent_content',        'bp_create_excerpt' );
 add_filter( 'bp_get_activity_content_body', 'bp_activity_truncate_entry', 5 );
 add_filter( 'bp_get_activity_content',      'bp_activity_truncate_entry', 5 );
 
+add_filter( 'bp_get_total_favorite_count_for_user', 'bp_core_number_format' );
+add_filter( 'bp_get_total_mention_count_for_user',  'bp_core_number_format' );
+
 /** Actions *******************************************************************/
 
 // At-name filter
@@ -456,7 +459,7 @@ function bp_activity_timestamp_class( $classes = '' ) {
 	if ( empty( $activity_date ) ) {
 		return $classes;
 	}
-	
+
 	$classes .= ' date-recorded-' . strtotime( $activity_date );
 
 	return $classes;
@@ -489,6 +492,10 @@ function bp_activity_heartbeat_last_recorded( $response = array(), $data = array
 		'activity_latest_args'
 	);
 
+	if ( ! empty( $data['bp_activity_last_recorded_search_terms'] ) && empty( $activity_latest_args['search_terms'] ) ) {
+		$activity_latest_args['search_terms'] = addslashes( $data['bp_activity_last_recorded_search_terms'] );
+	}
+
 	$newest_activities = array();
 	$last_activity_recorded = 0;
 
diff --git a/wp-content/plugins/buddypress/bp-activity/bp-activity-functions.php b/wp-content/plugins/buddypress/bp-activity/bp-activity-functions.php
index 6e5d93b00..94b5de13f 100644
--- a/wp-content/plugins/buddypress/bp-activity/bp-activity-functions.php
+++ b/wp-content/plugins/buddypress/bp-activity/bp-activity-functions.php
@@ -15,16 +15,12 @@ if ( !defined( 'ABSPATH' ) ) exit;
 /**
  * Check whether the $bp global lists an activity directory page.
  *
- * @since BuddyPress (1.5)
- *
- * @global object $bp BuddyPress global settings
+ * @since BuddyPress (1.5.0)
  *
  * @return bool True if activity directory page is found, otherwise false.
  */
 function bp_activity_has_directory() {
-	global $bp;
-
-	return (bool) !empty( $bp->pages->activity->id );
+	return (bool) !empty( buddypress()->pages->activity->id );
 }
 
 /**
@@ -42,7 +38,7 @@ function bp_activity_has_directory() {
  *
  *   add_filter( 'bp_activity_do_mentions', '__return_false' );
  *
- * @since BuddyPress (1.8)
+ * @since BuddyPress (1.8.0)
  *
  * @uses apply_filters() To call 'bp_activity_do_mentions' hook.
  *
@@ -52,36 +48,60 @@ function bp_activity_do_mentions() {
 	return (bool) apply_filters( 'bp_activity_do_mentions', true );
 }
 
+/**
+ * Should BuddyPress load the mentions scripts and related assets, including results to prime the
+ * mentions suggestions?
+ *
+ * @return bool True if mentions scripts should be loaded.
+ * @since BuddyPress (2.1.0)
+ */
+function bp_activity_maybe_load_mentions_scripts() {
+	$retval =
+		bp_activity_do_mentions() &&
+		bp_is_user_active() &&
+		( bp_is_activity_component() || bp_is_blog_page() && is_singular() && comments_open() || is_admin() );
+
+	return (bool) apply_filters( 'bp_activity_maybe_load_mentions_scripts', $retval );
+}
+
 /**
  * Locate usernames in an activity content string, as designated by an @ sign.
  *
- * @since BuddyPress (1.5)
+ * @since BuddyPress (1.5.0)
  *
- * @param string $content The content of the activity, usually found in $activity->content.
- * @return array|bool Associative array with user ID as key and username as value. Boolean false if no mentions found.
+ * @param string $content The content of the activity, usually found in
+ *        $activity->content.
+ * @return array|bool Associative array with user ID as key and username as
+ *         value. Boolean false if no mentions found.
  */
 function bp_activity_find_mentions( $content ) {
+
 	$pattern = '/[@]+([A-Za-z0-9-_\.@]+)\b/';
 	preg_match_all( $pattern, $content, $usernames );
 
 	// Make sure there's only one instance of each username
-	if ( !$usernames = array_unique( $usernames[1] ) )
+	$usernames = array_unique( $usernames[1] );
+
+	// Bail if no usernames
+	if ( empty( $usernames ) ) {
 		return false;
+	}
 
 	$mentioned_users = array();
 
 	// We've found some mentions! Check to see if users exist
-	foreach( (array) $usernames as $key => $username ) {
+	foreach( (array) array_values( $usernames ) as $username ) {
 		$user_id = bp_activity_get_userid_from_mentionname( $username );
 
 		// user ID exists, so let's add it to our array
 		if ( ! empty( $user_id ) ) {
-			$mentioned_users[$user_id] = $username;
+			$mentioned_users[ $user_id ] = $username;
 		}
 	}
 
-	if ( empty( $mentioned_users ) )
+	if ( empty( $mentioned_users ) ) {
 		return false;
+	}
 
 	return $mentioned_users;
 }
@@ -89,7 +109,7 @@ function bp_activity_find_mentions( $content ) {
 /**
  * Reset a user's unread mentions list and count.
  *
- * @since BuddyPress (1.5)
+ * @since BuddyPress (1.5.0)
  *
  * @uses bp_delete_user_meta()
  *
@@ -97,7 +117,7 @@ function bp_activity_find_mentions( $content ) {
  */
 function bp_activity_clear_new_mentions( $user_id ) {
 	bp_delete_user_meta( $user_id, 'bp_new_mention_count' );
-	bp_delete_user_meta( $user_id, 'bp_new_mentions' );
+	bp_delete_user_meta( $user_id, 'bp_new_mentions'      );
 }
 
 /**
@@ -108,7 +128,7 @@ function bp_activity_clear_new_mentions( $user_id ) {
  *
  * Currently, only used in {@link bp_activity_delete()}.
  *
- * @since BuddyPress (1.5)
+ * @since BuddyPress (1.5.0)
  *
  * @uses bp_activity_find_mentions()
  * @uses bp_activity_update_mention_count_for_user()
@@ -117,21 +137,25 @@ function bp_activity_clear_new_mentions( $user_id ) {
  * @param string $action Can be 'delete' or 'add'. Defaults to 'add'.
  */
 function bp_activity_adjust_mention_count( $activity_id = 0, $action = 'add' ) {
-	if ( empty( $activity_id ) )
+
+	// Bail if no activity ID passed
+	if ( empty( $activity_id ) ) {
 		return false;
+	}
 
 	// Get activity object
-	$activity = new BP_Activity_Activity( (int) $activity_id );
+	$activity  = new BP_Activity_Activity( (int) $activity_id );
 
 	// Try to find mentions
 	$usernames = bp_activity_find_mentions( strip_tags( $activity->content ) );
 
 	// Still empty? Stop now
-	if ( empty( $usernames ) )
+	if ( empty( $usernames ) ) {
 		return false;
+	}
 
 	// Increment mention count foreach mentioned user
-	foreach( (array) $usernames as $user_id => $username ) {
+	foreach( (array) array_keys( $usernames ) as $user_id ) {
 		bp_activity_update_mention_count_for_user( $user_id, $activity_id, $action );
 	}
 }
@@ -142,7 +166,7 @@ function bp_activity_adjust_mention_count( $activity_id = 0, $action = 'add' ) {
  * This function should be used when you've already parsed your activity item
  * for @mentions.
  *
- * @since BuddyPress (1.7)
+ * @since BuddyPress (1.7.0)
  *
  * @uses bp_get_user_meta()
  * @uses bp_update_user_meta()
@@ -153,13 +177,19 @@ function bp_activity_adjust_mention_count( $activity_id = 0, $action = 'add' ) {
  * @return bool
  */
 function bp_activity_update_mention_count_for_user( $user_id, $activity_id, $action = 'add' ) {
-	if ( empty( $user_id ) || empty( $activity_id ) )
+
+	if ( empty( $user_id ) || empty( $activity_id ) ) {
 		return false;
+	}
 
 	// Adjust the mention list and count for the member
 	$new_mention_count = (int) bp_get_user_meta( $user_id, 'bp_new_mention_count', true );
-	if ( !$new_mentions = bp_get_user_meta( $user_id, 'bp_new_mentions', true ) )
+	$new_mentions      =       bp_get_user_meta( $user_id, 'bp_new_mentions',      true );
+
+	// Make sure new mentions is an array
+	if ( empty( $new_mentions ) ) {
 		$new_mentions = array();
+	}
 
 	switch ( $action ) {
 		case 'delete' :
@@ -275,9 +305,13 @@ function bp_activity_get_userid_from_mentionname( $mentionname ) {
  * @param string $type The action type.
  * @param string $description The action description.
  * @param callable $format_callback Callback for formatting the action string.
+ * @param string $label String to describe this action in the activity stream
+ *        filter dropdown.
+ * @param array $context Activity stream contexts where the filter should appear.
+ *        'activity', 'member', 'member_groups', 'group'
  * @return bool False if any param is empty, otherwise true.
  */
-function bp_activity_set_action( $component_id, $type, $description, $format_callback = false ) {
+function bp_activity_set_action( $component_id, $type, $description, $format_callback = false, $label = false, $context = array() ) {
 	$bp = buddypress();
 
 	// Return false if any of the above values are not set
@@ -303,7 +337,9 @@ function bp_activity_set_action( $component_id, $type, $description, $format_cal
 		'key'             => $type,
 		'value'           => $description,
 		'format_callback' => $format_callback,
-	), $component_id, $type, $description, $format_callback );
+		'label'           => $label,
+		'context'         => $context,
+	), $component_id, $type, $description, $format_callback, $label, $context );
 
 	return true;
 }
@@ -311,9 +347,8 @@ function bp_activity_set_action( $component_id, $type, $description, $format_cal
 /**
  * Retreive the current action from a component and key.
  *
- * @since BuddyPress (1.1)
+ * @since BuddyPress (1.1.0)
  *
- * @global object $bp BuddyPress global settings.
  * @uses apply_filters() To call the 'bp_activity_get_action' hook.
  *
  * @param string $component_id The unique string ID of the component.
@@ -321,19 +356,24 @@ function bp_activity_set_action( $component_id, $type, $description, $format_cal
  * @return string|bool Action value if found, otherwise false.
  */
 function bp_activity_get_action( $component_id, $key ) {
-	global $bp;
 
 	// Return false if any of the above values are not set
-	if ( empty( $component_id ) || empty( $key ) )
+	if ( empty( $component_id ) || empty( $key ) ) {
 		return false;
+	}
+
+	$bp     = buddypress();
+	$retval = isset( $bp->activity->actions->{$component_id}->{$key} )
+		? $bp->activity->actions->{$component_id}->{$key}
+		: false;
 
-	return apply_filters( 'bp_activity_get_action', $bp->activity->actions->{$component_id}->{$key}, $component_id, $key );
+	return apply_filters( 'bp_activity_get_action', $retval, $component_id, $key );
 }
 
 /**
  * Fetch details of all registered activity types.
  *
- * @since BuddyPress (1.7)
+ * @since BuddyPress (1.7.0)
  *
  * @return array array( type => description ), ...
  */
@@ -344,8 +384,9 @@ function bp_activity_get_types() {
 	foreach ( buddypress()->activity->actions as $action ) {
 		$action = array_values( (array) $action );
 
-		for ( $i = 0, $i_count = count( $action ); $i < $i_count; $i++ )
+		for ( $i = 0, $i_count = count( $action ); $i < $i_count; $i++ ) {
 			$actions[ $action[$i]['key'] ] = $action[$i]['value'];
+		}
 	}
 
 	// This was a mis-named activity type from before BP 1.6
@@ -359,7 +400,7 @@ function bp_activity_get_types() {
 /**
  * Get a users favorite activity stream items.
  *
- * @since BuddyPress (1.2)
+ * @since BuddyPress (1.2.0)
  *
  * @uses bp_get_user_meta()
  * @uses apply_filters() To call the 'bp_activity_get_user_favorites' hook.
@@ -370,8 +411,9 @@ function bp_activity_get_types() {
 function bp_activity_get_user_favorites( $user_id = 0 ) {
 
 	// Fallback to logged in user if no user_id is passed
-	if ( empty( $user_id ) )
+	if ( empty( $user_id ) ) {
 		$user_id = bp_displayed_user_id();
+	}
 
 	// Get favorites for user
 	$favs = bp_get_user_meta( $user_id, 'bp_favorite_activities', true );
@@ -382,7 +424,7 @@ function bp_activity_get_user_favorites( $user_id = 0 ) {
 /**
  * Add an activity stream item as a favorite for a user.
  *
- * @since BuddyPress (1.2)
+ * @since BuddyPress (1.2.0)
  *
  * @uses is_user_logged_in()
  * @uses bp_get_user_meta()
@@ -399,12 +441,14 @@ function bp_activity_get_user_favorites( $user_id = 0 ) {
 function bp_activity_add_user_favorite( $activity_id, $user_id = 0 ) {
 
 	// Favorite activity stream items are for logged in users only
-	if ( !is_user_logged_in() )
+	if ( ! is_user_logged_in() ) {
 		return false;
+	}
 
 	// Fallback to logged in user if no user_id is passed
-	if ( empty( $user_id ) )
+	if ( empty( $user_id ) ) {
 		$user_id = bp_loggedin_user_id();
+	}
 
 	$my_favs = bp_get_user_meta( $user_id, 'bp_favorite_activities', true );
 	if ( empty( $my_favs ) || ! is_array( $my_favs ) ) {
@@ -447,7 +491,7 @@ function bp_activity_add_user_favorite( $activity_id, $user_id = 0 ) {
 /**
  * Remove an activity stream item as a favorite for a user.
  *
- * @since BuddyPress (1.2)
+ * @since BuddyPress (1.2.0)
  *
  * @uses is_user_logged_in()
  * @uses bp_get_user_meta()
@@ -463,12 +507,14 @@ function bp_activity_add_user_favorite( $activity_id, $user_id = 0 ) {
 function bp_activity_remove_user_favorite( $activity_id, $user_id = 0 ) {
 
 	// Favorite activity stream items are for logged in users only
-	if ( !is_user_logged_in() )
+	if ( ! is_user_logged_in() ) {
 		return false;
+	}
 
 	// Fallback to logged in user if no user_id is passed
-	if ( empty( $user_id ) )
+	if ( empty( $user_id ) ) {
 		$user_id = bp_loggedin_user_id();
+	}
 
 	$my_favs = bp_get_user_meta( $user_id, 'bp_favorite_activities', true );
 	$my_favs = array_flip( (array) $my_favs );
@@ -483,7 +529,8 @@ function bp_activity_remove_user_favorite( $activity_id, $user_id = 0 ) {
 	$my_favs = array_unique( array_flip( $my_favs ) );
 
 	// Update the total number of users who have favorited this activity
-	if ( $fav_count = bp_activity_get_meta( $activity_id, 'favorite_count' ) ) {
+	$fav_count = bp_activity_get_meta( $activity_id, 'favorite_count' );
+	if ( ! empty( $fav_count ) ) {
 
 		// Deduct from total favorites
 		if ( bp_activity_update_meta( $activity_id, 'favorite_count', (int) $fav_count - 1 ) ) {
@@ -516,7 +563,7 @@ function bp_activity_remove_user_favorite( $activity_id, $user_id = 0 ) {
 /**
  * Check whether an activity item exists with a given content string.
  *
- * @since BuddyPress (1.1)
+ * @since BuddyPress (1.1.0)
  *
  * @uses BP_Activity_Activity::check_exists_by_content() {@link BP_Activity_Activity}
  * @uses apply_filters() To call the 'bp_activity_check_exists_by_content' hook.
@@ -531,7 +578,7 @@ function bp_activity_check_exists_by_content( $content ) {
 /**
  * Retrieve the last time activity was updated.
  *
- * @since BuddyPress (1.0)
+ * @since BuddyPress (1.0.0)
  *
  * @uses BP_Activity_Activity::get_last_updated() {@link BP_Activity_Activity}
  * @uses apply_filters() To call the 'bp_activity_get_last_updated' hook.
@@ -545,7 +592,7 @@ function bp_activity_get_last_updated() {
 /**
  * Retrieve the number of favorite activity stream items a user has.
  *
- * @since BuddyPress (1.2)
+ * @since BuddyPress (1.2.0)
  *
  * @uses BP_Activity_Activity::total_favorite_count() {@link BP_Activity_Activity}
  *
@@ -555,8 +602,9 @@ function bp_activity_get_last_updated() {
 function bp_activity_total_favorites_for_user( $user_id = 0 ) {
 
 	// Fallback on displayed user, and then logged in user
-	if ( empty( $user_id ) )
+	if ( empty( $user_id ) ) {
 		$user_id = ( bp_displayed_user_id() ) ? bp_displayed_user_id() : bp_loggedin_user_id();
+	}
 
 	return BP_Activity_Activity::total_favorite_count( $user_id );
 }
@@ -584,7 +632,6 @@ function bp_activity_total_favorites_for_user( $user_id = 0 ) {
  * @return bool True on success, false on failure.
  */
 function bp_activity_delete_meta( $activity_id, $meta_key = '', $meta_value = '', $delete_all = false ) {
-	global $wpdb, $bp;
 
 	// Legacy - if no meta_key is passed, delete all for the item
 	if ( empty( $meta_key ) ) {
@@ -611,7 +658,7 @@ function bp_activity_delete_meta( $activity_id, $meta_key = '', $meta_value = ''
 /**
  * Get metadata for a given activity item.
  *
- * @since BuddyPress (1.2)
+ * @since BuddyPress (1.2.0)
  *
  * @uses apply_filters() To call the 'bp_activity_get_meta' hook.
  *
@@ -636,7 +683,7 @@ function bp_activity_get_meta( $activity_id = 0, $meta_key = '', $single = true
 /**
  * Update a piece of activity meta.
  *
- * @since BuddyPress (1.2)
+ * @since BuddyPress (1.2.0)
  *
  * @param int $activity_id ID of the activity item whose metadata is being
  *        updated.
@@ -665,7 +712,7 @@ function bp_activity_update_meta( $activity_id, $meta_key, $meta_value, $prev_va
  * @param int $activity_id ID of the activity item.
  * @param string $meta_key Metadata key.
  * @param mixed $meta_value Metadata value.
- * @param bool $unique. Optional. Whether to enforce a single metadata value
+ * @param bool $unique Optional. Whether to enforce a single metadata value
  *        for the given key. If true, and the object already has a value for
  *        the key, no change will be made. Default: false.
  * @return int|bool The meta ID on successful update, false on failure.
@@ -683,7 +730,7 @@ function bp_activity_add_meta( $activity_id, $meta_key, $meta_value, $unique = f
 /**
  * Completely remove a user's activity data.
  *
- * @since BuddyPress (1.5)
+ * @since BuddyPress (1.5.0)
  *
  * @uses is_user_logged_in()
  * @uses bp_activity_delete()
@@ -696,14 +743,15 @@ function bp_activity_add_meta( $activity_id, $meta_key, $meta_value, $unique = f
 function bp_activity_remove_all_user_data( $user_id = 0 ) {
 
 	// Do not delete user data unless a logged in user says so
-	if ( empty( $user_id ) || !is_user_logged_in() )
+	if ( empty( $user_id ) || ! is_user_logged_in() ) {
 		return false;
+	}
 
 	// Clear the user's activity from the sitewide stream and clear their activity tables
 	bp_activity_delete( array( 'user_id' => $user_id ) );
 
 	// Remove any usermeta
-	bp_delete_user_meta( $user_id, 'bp_latest_update' );
+	bp_delete_user_meta( $user_id, 'bp_latest_update'       );
 	bp_delete_user_meta( $user_id, 'bp_favorite_activities' );
 
 	// Execute additional code
@@ -718,7 +766,7 @@ add_action( 'delete_user',       'bp_activity_remove_all_user_data' );
 /**
  * Mark all of the user's activity as spam.
  *
- * @since BuddyPress (1.6)
+ * @since BuddyPress (1.6.0)
  *
  * @global object $wpdb WordPress database access object.
  * @global object $bp BuddyPress global settings.
@@ -726,22 +774,30 @@ add_action( 'delete_user',       'bp_activity_remove_all_user_data' );
  * @param int $user_id ID of the user whose activity is being spammed.
  */
 function bp_activity_spam_all_user_data( $user_id = 0 ) {
-	global $bp, $wpdb;
+	global $wpdb;
 
 	// Do not delete user data unless a logged in user says so
-	if ( empty( $user_id ) || ! is_user_logged_in() )
+	if ( empty( $user_id ) || ! is_user_logged_in() ) {
 		return false;
+	}
 
 	// Get all the user's activities.
-	$activities = bp_activity_get( array( 'display_comments' => 'stream', 'filter' => array( 'user_id' => $user_id ), 'show_hidden' => true, ) );
+	$activities = bp_activity_get( array(
+		'display_comments' => 'stream',
+		'filter'           => array( 'user_id' => $user_id ),
+		'show_hidden'      => true
+	) );
+
+	$bp = buddypress();
 
 	// Mark each as spam
 	foreach ( (array) $activities['activities'] as $activity ) {
 
 		// Create an activity object
 		$activity_obj = new BP_Activity_Activity;
-		foreach ( $activity as $k => $v )
+		foreach ( $activity as $k => $v ) {
 			$activity_obj->$k = $v;
+		}
 
 		// Mark as spam
 		bp_activity_mark_as_spam( $activity_obj );
@@ -753,8 +809,9 @@ function bp_activity_spam_all_user_data( $user_id = 0 ) {
 		 * as we're going to be updating all the activity statuses directly, for efficency,
 		 * we need to update manually.
 		 */
-		if ( ! empty( $bp->activity->akismet ) )
+		if ( ! empty( $bp->activity->akismet ) ) {
 			$bp->activity->akismet->update_activity_spam_meta( $activity_obj );
+		}
 
 		// Tidy up
 		unset( $activity_obj );
@@ -771,7 +828,7 @@ add_action( 'bp_make_spam_user', 'bp_activity_spam_all_user_data' );
 /**
  * Mark all of the user's activity as ham (not spam).
  *
- * @since BuddyPress (1.6)
+ * @since BuddyPress (1.6.0)
  *
  * @global object $wpdb WordPress database access object.
  * @global object $bp BuddyPress global settings.
@@ -779,22 +836,31 @@ add_action( 'bp_make_spam_user', 'bp_activity_spam_all_user_data' );
  * @param int $user_id ID of the user whose activity is being hammed.
  */
 function bp_activity_ham_all_user_data( $user_id = 0 ) {
-	global $bp, $wpdb;
+	global $wpdb;
 
 	// Do not delete user data unless a logged in user says so
-	if ( empty( $user_id ) || ! is_user_logged_in() )
+	if ( empty( $user_id ) || ! is_user_logged_in() ) {
 		return false;
+	}
 
 	// Get all the user's activities.
-	$activities = bp_activity_get( array( 'display_comments' => 'stream', 'filter' => array( 'user_id' => $user_id ), 'show_hidden' => true, 'spam' => 'all', ) );
+	$activities = bp_activity_get( array(
+		'display_comments' => 'stream',
+		'filter'           => array( 'user_id' => $user_id ),
+		'show_hidden'      => true,
+		'spam'             => 'all'
+	) );
+
+	$bp = buddypress();
 
 	// Mark each as not spam
 	foreach ( (array) $activities['activities'] as $activity ) {
 
 		// Create an activity object
 		$activity_obj = new BP_Activity_Activity;
-		foreach ( $activity as $k => $v )
+		foreach ( $activity as $k => $v ) {
 			$activity_obj->$k = $v;
+		}
 
 		// Mark as not spam
 		bp_activity_mark_as_ham( $activity_obj );
@@ -806,8 +872,9 @@ function bp_activity_ham_all_user_data( $user_id = 0 ) {
 		 * as we're going to be updating all the activity statuses directly, for efficency,
 		 * we need to update manually.
 		 */
-		if ( ! empty( $bp->activity->akismet ) )
+		if ( ! empty( $bp->activity->akismet ) ) {
 			$bp->activity->akismet->update_activity_ham_meta( $activity_obj );
+		}
 
 		// Tidy up
 		unset( $activity_obj );
@@ -824,25 +891,26 @@ add_action( 'bp_make_ham_user', 'bp_activity_ham_all_user_data' );
 /**
  * Register the activity stream actions for updates
  *
- * @since BuddyPress (1.6)
- *
- * @global object $bp BuddyPress global settings.
+ * @since BuddyPress (1.6.0)
  */
 function bp_activity_register_activity_actions() {
-	global $bp;
+	$bp = buddypress();
 
 	bp_activity_set_action(
 		$bp->activity->id,
 		'activity_update',
 		__( 'Posted a status update', 'buddypress' ),
-		'bp_activity_format_activity_action_activity_update'
+		'bp_activity_format_activity_action_activity_update',
+		__( 'Updates', 'buddypress' ),
+		array( 'activity', 'group', 'member', 'member_groups' )
 	);
 
 	bp_activity_set_action(
 		$bp->activity->id,
 		'activity_comment',
 		__( 'Replied to a status update', 'buddypress' ),
-		'bp_activity_format_activity_action_activity_comment'
+		'bp_activity_format_activity_action_activity_comment',
+		__( 'Activity Comments', 'buddypress' )
 	);
 
 	do_action( 'bp_activity_register_activity_actions' );
@@ -860,6 +928,7 @@ add_action( 'bp_register_activity_actions', 'bp_activity_register_activity_actio
  *         the formatted action string.
  */
 function bp_activity_generate_action_string( $activity ) {
+
 	// Check for valid input
 	if ( empty( $activity->component ) || empty( $activity->type ) ) {
 		return false;
@@ -926,7 +995,7 @@ function bp_activity_format_activity_action_activity_comment( $action, $activity
  * the default for the bp_activity_get()).
  *   - 'per_page' (false)
  *
- * @since BuddyPress (1.2)
+ * @since BuddyPress (1.2.0)
  *
  * @see BP_Activity_Activity::get() For more information on accepted arguments
  *      and the format of the returned value.
@@ -940,7 +1009,8 @@ function bp_activity_format_activity_action_activity_comment( $action, $activity
  * @return array $activity See BP_Activity_Activity::get() for description.
  */
 function bp_activity_get( $args = '' ) {
-	$defaults = array(
+
+	$r = bp_parse_args( $args, array(
 		'max'               => false,        // Maximum number of results to return
 		'page'              => 1,            // page 1 without a per_page will result in no pagination.
 		'per_page'          => false,        // results per page
@@ -949,11 +1019,13 @@ function bp_activity_get( $args = '' ) {
 
 		'search_terms'      => false,        // Pass search terms as a string
 		'meta_query'        => false,        // Filter by activity meta. See WP_Meta_Query for format
+		'date_query'        => false,        // Filter by date. See first parameter of WP_Date_Query for format
 		'show_hidden'       => false,        // Show activity items that are hidden site-wide?
 		'exclude'           => false,        // Comma-separated list of activity IDs to exclude
 		'in'                => false,        // Comma-separated list or array of activity IDs to which you want to limit the query
 		'spam'              => 'ham_only',   // 'ham_only' (default), 'spam_only' or 'all'.
 		'update_meta_cache' => true,
+		'count_total'       => false,
 
 		/**
 		 * Pass filters as an array -- all filter items can be multiple values comma separated:
@@ -966,46 +1038,50 @@ function bp_activity_get( $args = '' ) {
 		 * );
 		 */
 		'filter' => array()
-	);
-	$r = wp_parse_args( $args, $defaults );
-	extract( $r, EXTR_SKIP );
+	) );
 
 	// Attempt to return a cached copy of the first page of sitewide activity.
-	if ( 1 == (int) $page && empty( $max ) && empty( $search_terms ) && empty( $meta_query ) && empty( $filter ) && empty( $exclude ) && empty( $in ) && 'DESC' == $sort && empty( $exclude ) && 'ham_only' == $spam ) {
-		if ( !$activity = wp_cache_get( 'bp_activity_sitewide_front', 'bp' ) ) {
-			$args = array(
-				'page'              => $page,
-				'per_page'          => $per_page,
-				'max'               => $max,
-				'sort'              => $sort,
-				'search_terms'      => $search_terms,
-				'meta_query'        => $meta_query,
-				'filter'            => $filter,
-				'display_comments'  => $display_comments,
-				'show_hidden'       => $show_hidden,
-				'spam'              => $spam,
-				'update_meta_cache' => $update_meta_cache,
-			);
-			$activity = BP_Activity_Activity::get( $args );
+	if ( ( 1 === (int) $r['page'] ) && empty( $r['max'] ) && empty( $r['search_terms'] ) && empty( $r['meta_query'] ) && empty( $r['date_query'] ) && empty( $r['filter'] ) && empty( $r['exclude'] ) && empty( $r['in'] ) && ( 'DESC' === $r['sort'] ) && empty( $r['exclude'] ) && ( 'ham_only' === $r['spam'] ) ) {
+
+		$activity = wp_cache_get( 'bp_activity_sitewide_front', 'bp' );
+		if ( false === $activity ) {
+
+			$activity = BP_Activity_Activity::get( array(
+				'page'              => $r['page'],
+				'per_page'          => $r['per_page'],
+				'max'               => $r['max'],
+				'sort'              => $r['sort'],
+				'search_terms'      => $r['search_terms'],
+				'meta_query'        => $r['meta_query'],
+				'date_query'        => $r['date_query'],
+				'filter'            => $r['filter'],
+				'display_comments'  => $r['display_comments'],
+				'show_hidden'       => $r['show_hidden'],
+				'spam'              => $r['spam'],
+				'update_meta_cache' => $r['update_meta_cache'],
+				'count_total'       => $r['count_total'],
+			) );
+
 			wp_cache_set( 'bp_activity_sitewide_front', $activity, 'bp' );
 		}
 
 	} else {
-		$args = array(
-			'page'             => $page,
-			'per_page'         => $per_page,
-			'max'              => $max,
-			'sort'             => $sort,
-			'search_terms'     => $search_terms,
-			'meta_query'       => $meta_query,
-			'filter'           => $filter,
-			'display_comments' => $display_comments,
-			'show_hidden'      => $show_hidden,
-			'exclude'          => $exclude,
-			'in'               => $in,
-			'spam'             => $spam
-		);
-		$activity = BP_Activity_Activity::get( $args );
+		$activity = BP_Activity_Activity::get( array(
+			'page'             => $r['page'],
+			'per_page'         => $r['per_page'],
+			'max'              => $r['max'],
+			'sort'             => $r['sort'],
+			'search_terms'     => $r['search_terms'],
+			'meta_query'       => $r['meta_query'],
+			'date_query'       => $r['date_query'],
+			'filter'           => $r['filter'],
+			'display_comments' => $r['display_comments'],
+			'show_hidden'      => $r['show_hidden'],
+			'exclude'          => $r['exclude'],
+			'in'               => $r['in'],
+			'spam'             => $r['spam'],
+			'count_total'      => $r['count_total'],
+		) );
 	}
 
 	return apply_filters_ref_array( 'bp_activity_get', array( &$activity, &$r ) );
@@ -1014,7 +1090,7 @@ function bp_activity_get( $args = '' ) {
 /**
  * Fetch specific activity items.
  *
- * @since BuddyPress (1.2)
+ * @since BuddyPress (1.2.0)
  *
  * @see BP_Activity_Activity::get() For more information on accepted arguments
  * @uses wp_parse_args()
@@ -1030,38 +1106,38 @@ function bp_activity_get( $args = '' ) {
  * @return array $activity See BP_Activity_Activity::get() for description.
  */
 function bp_activity_get_specific( $args = '' ) {
-	$defaults = array(
-		'activity_ids'      => false,       // A single activity_id or array of IDs.
-		'display_comments'  => false,       // true or false to display threaded comments for these specific activity items
-		'max'               => false,       // Maximum number of results to return
-		'page'              => 1,           // page 1 without a per_page will result in no pagination.
-		'per_page'          => false,       // results per page
-		'show_hidden'       => true,        // When fetching specific items, show all
-		'sort'              => 'DESC',      // sort ASC or DESC
-		'spam'              => 'ham_only',  // Retrieve items marked as spam
+
+	$r = bp_parse_args( $args, array(
+		'activity_ids'      => false,      // A single activity_id or array of IDs.
+		'display_comments'  => false,      // true or false to display threaded comments for these specific activity items
+		'max'               => false,      // Maximum number of results to return
+		'page'              => 1,          // page 1 without a per_page will result in no pagination.
+		'per_page'          => false,      // results per page
+		'show_hidden'       => true,       // When fetching specific items, show all
+		'sort'              => 'DESC',     // sort ASC or DESC
+		'spam'              => 'ham_only', // Retrieve items marked as spam
 		'update_meta_cache' => true,
-	);
-	$r = wp_parse_args( $args, $defaults );
-	extract( $r, EXTR_SKIP );
+	) );
 
 	$get_args = array(
-		'page'              => $page,
-		'per_page'          => $per_page,
-		'max'               => $max,
-		'sort'              => $sort,
-		'display_comments'  => $display_comments,
-		'show_hidden'       => $show_hidden,
-		'in'                => $activity_ids,
-		'spam'              => $spam,
-		'update_meta_cache' => $update_meta_cache,
+		'display_comments'  => $r['display_comments'],
+		'in'                => $r['activity_ids'],
+		'max'               => $r['max'],
+		'page'              => $r['page'],
+		'per_page'          => $r['per_page'],
+		'show_hidden'       => $r['show_hidden'],
+		'sort'              => $r['sort'],
+		'spam'              => $r['spam'],
+		'update_meta_cache' => $r['update_meta_cache'],
 	);
+
 	return apply_filters( 'bp_activity_get_specific', BP_Activity_Activity::get( $get_args ), $args, $get_args );
 }
 
 /**
  * Add an activity item.
  *
- * @since BuddyPress (1.1)
+ * @since BuddyPress (1.1.0)
  *
  * @uses wp_parse_args()
  * @uses BP_Activity_Activity::save() {@link BP_Activity_Activity}
@@ -1104,56 +1180,60 @@ function bp_activity_get_specific( $args = '' ) {
  */
 function bp_activity_add( $args = '' ) {
 
-	$defaults = array(
-		'id'                => false, // Pass an existing activity ID to update an existing entry.
-
-		'action'            => '',    // The activity action - e.g. "Jon Doe posted an update"
-		'content'           => '',    // Optional: The content of the activity item e.g. "BuddyPress is awesome guys!"
-
-		'component'         => false, // The name/ID of the component e.g. groups, profile, mycomponent
-		'type'              => false, // The activity type e.g. activity_update, profile_updated
-		'primary_link'      => '',    // Optional: The primary URL for this item in RSS feeds (defaults to activity permalink)
-
-		'user_id'           => bp_loggedin_user_id(), // Optional: The user to record the activity for, can be false if this activity is not for a user.
-		'item_id'           => false, // Optional: The ID of the specific item being recorded, e.g. a blog_id
-		'secondary_item_id' => false, // Optional: A second ID used to further filter e.g. a comment_id
+	$r = bp_parse_args( $args, array(
+		'id'                => false,                  // Pass an existing activity ID to update an existing entry.
+		'action'            => '',                     // The activity action - e.g. "Jon Doe posted an update"
+		'content'           => '',                     // Optional: The content of the activity item e.g. "BuddyPress is awesome guys!"
+		'component'         => false,                  // The name/ID of the component e.g. groups, profile, mycomponent
+		'type'              => false,                  // The activity type e.g. activity_update, profile_updated
+		'primary_link'      => '',                     // Optional: The primary URL for this item in RSS feeds (defaults to activity permalink)
+		'user_id'           => bp_loggedin_user_id(),  // Optional: The user to record the activity for, can be false if this activity is not for a user.
+		'item_id'           => false,                  // Optional: The ID of the specific item being recorded, e.g. a blog_id
+		'secondary_item_id' => false,                  // Optional: A second ID used to further filter e.g. a comment_id
 		'recorded_time'     => bp_core_current_time(), // The GMT time that this activity was recorded
-		'hide_sitewide'     => false, // Should this be hidden on the sitewide activity stream?
-		'is_spam'           => false, // Is this activity item to be marked as spam?
-	);
-	$params = wp_parse_args( $args, $defaults );
-	extract( $params, EXTR_SKIP );
+		'hide_sitewide'     => false,                  // Should this be hidden on the sitewide activity stream?
+		'is_spam'           => false,                  // Is this activity item to be marked as spam?
+	) );
 
 	// Make sure we are backwards compatible
-	if ( empty( $component ) && !empty( $component_name ) )
-		$component = $component_name;
+	if ( empty( $r['component'] ) && !empty( $r['component_name'] ) ) {
+		$r['component'] = $r['component_name'];
+	}
 
-	if ( empty( $type ) && !empty( $component_action ) )
-		$type = $component_action;
+	if ( empty( $r['type'] ) && !empty( $r['component_action'] ) ) {
+		$r['type'] = $r['component_action'];
+	}
 
 	// Setup activity to be added
-	$activity                    = new BP_Activity_Activity( $id );
-	$activity->user_id           = $user_id;
-	$activity->component         = $component;
-	$activity->type              = $type;
-	$activity->content           = $content;
-	$activity->primary_link      = $primary_link;
-	$activity->item_id           = $item_id;
-	$activity->secondary_item_id = $secondary_item_id;
-	$activity->date_recorded     = $recorded_time;
-	$activity->hide_sitewide     = $hide_sitewide;
-	$activity->is_spam           = $is_spam;
-	$activity->action            = ! empty( $action ) ? $action : bp_activity_generate_action_string( $activity );
-
-	if ( !$activity->save() )
+	$activity                    = new BP_Activity_Activity( $r['id'] );
+	$activity->user_id           = $r['user_id'];
+	$activity->component         = $r['component'];
+	$activity->type              = $r['type'];
+	$activity->content           = $r['content'];
+	$activity->primary_link      = $r['primary_link'];
+	$activity->item_id           = $r['item_id'];
+	$activity->secondary_item_id = $r['secondary_item_id'];
+	$activity->date_recorded     = $r['recorded_time'];
+	$activity->hide_sitewide     = $r['hide_sitewide'];
+	$activity->is_spam           = $r['is_spam'];
+	$activity->action            = ! empty( $r['action'] )
+										? $r['action']
+										: bp_activity_generate_action_string( $activity );
+
+	if ( ! $activity->save() ) {
 		return false;
+	}
 
 	// If this is an activity comment, rebuild the tree
-	if ( 'activity_comment' == $activity->type )
+	if ( 'activity_comment' === $activity->type ) {
+		// Also clear the comment cache for the parent activity ID
+		wp_cache_delete( $activity->item_id, 'bp_activity_comments' );
+
 		BP_Activity_Activity::rebuild_activity_comment_tree( $activity->item_id );
+	}
 
 	wp_cache_delete( 'bp_activity_sitewide_front', 'bp' );
-	do_action( 'bp_activity_add', $params );
+	do_action( 'bp_activity_add', $r );
 
 	return $activity->id;
 }
@@ -1161,9 +1241,8 @@ function bp_activity_add( $args = '' ) {
 /**
  * Post an activity update.
  *
- * @since BuddyPress (1.2)
+ * @since BuddyPress (1.2.0)
  *
- * @global object $bp BuddyPress global settings.
  * @uses wp_parse_args()
  * @uses bp_is_user_inactive()
  * @uses bp_core_get_userlink()
@@ -1182,41 +1261,42 @@ function bp_activity_add( $args = '' ) {
  * @return int $activity_id The activity id
  */
 function bp_activity_post_update( $args = '' ) {
-	global $bp;
 
-	$defaults = array(
+	$r = wp_parse_args( $args, array(
 		'content' => false,
 		'user_id' => bp_loggedin_user_id()
-	);
-	$r = wp_parse_args( $args, $defaults );
-	extract( $r, EXTR_SKIP );
+	) );
 
-	if ( empty( $content ) || !strlen( trim( $content ) ) )
+	if ( empty( $r['content'] ) || !strlen( trim( $r['content'] ) ) ) {
 		return false;
+	}
 
-	if ( bp_is_user_inactive( $user_id ) )
+	if ( bp_is_user_inactive( $r['user_id'] ) ) {
 		return false;
+	}
 
 	// Record this on the user's profile
-	$from_user_link   = bp_core_get_userlink( $user_id );
-	$activity_content = $content;
-	$primary_link     = bp_core_get_userlink( $user_id, false, true );
+	$activity_content = $r['content'];
+	$primary_link     = bp_core_get_userlink( $r['user_id'], false, true );
 
 	// Now write the values
 	$activity_id = bp_activity_add( array(
-		'user_id'      => $user_id,
+		'user_id'      => $r['user_id'],
 		'content'      => apply_filters( 'bp_activity_new_update_content', $activity_content ),
 		'primary_link' => apply_filters( 'bp_activity_new_update_primary_link', $primary_link ),
-		'component'    => $bp->activity->id,
+		'component'    => buddypress()->activity->id,
 		'type'         => 'activity_update',
 	) );
 
-	$activity_content = apply_filters( 'bp_activity_latest_update_content', $content, $activity_content );
+	$activity_content = apply_filters( 'bp_activity_latest_update_content', $r['content'], $activity_content );
 
 	// Add this update to the "latest update" usermeta so it can be fetched anywhere.
-	bp_update_user_meta( bp_loggedin_user_id(), 'bp_latest_update', array( 'id' => $activity_id, 'content' => $activity_content ) );
+	bp_update_user_meta( bp_loggedin_user_id(), 'bp_latest_update', array(
+		'id'      => $activity_id,
+		'content' => $activity_content
+	) );
 
-	do_action( 'bp_activity_posted_update', $content, $user_id, $activity_id );
+	do_action( 'bp_activity_posted_update', $r['content'], $r['user_id'], $activity_id );
 
 	return $activity_id;
 }
@@ -1224,7 +1304,7 @@ function bp_activity_post_update( $args = '' ) {
 /**
  * Add an activity comment.
  *
- * @since BuddyPress (1.2)
+ * @since BuddyPress (1.2.0)
  *
  * @global object $bp BuddyPress global settings.
  * @uses wp_parse_args()
@@ -1239,18 +1319,18 @@ function bp_activity_post_update( $args = '' ) {
  *     @type int $id Optional. Pass an ID to update an existing comment.
  *     @type string $content The content of the comment.
  *     @type int $user_id Optional. The ID of the user making the comment.
- *                        Defaults to the ID of the logged-in user.
+ *           Defaults to the ID of the logged-in user.
  *     @type int $activity_id The ID of the "root" activity item, ie the oldest
- *                            ancestor of the comment.
+ *           ancestor of the comment.
  *     @type int $parent_id Optional. The ID of the parent activity item, ie the
- *                          item to which the comment is an immediate reply. If
- *                          not provided, this value defaults to the $activity_id.
+ *           item to which the comment is an immediate reply. If not provided,
+ *           this value defaults to the $activity_id.
  * }
  * @return int|bool The ID of the comment on success, otherwise false.
  */
 function bp_activity_new_comment( $args = '' ) {
 
-	$params = wp_parse_args( $args, array(
+	$r = wp_parse_args( $args, array(
 		'id'          => false,
 		'content'     => false,
 		'user_id'     => bp_loggedin_user_id(),
@@ -1258,31 +1338,31 @@ function bp_activity_new_comment( $args = '' ) {
 		'parent_id'   => false  // ID of a parent comment (optional)
 	) );
 
-	extract( $params, EXTR_SKIP );
-
 	// Bail if missing necessary data
-	if ( empty( $content ) || empty( $user_id ) || empty( $activity_id ) ) {
+	if ( empty( $r['content'] ) || empty( $r['user_id'] ) || empty( $r['activity_id'] ) ) {
 		return false;
 	}
 
 	// Maybe set current activity ID as the parent
-	if ( empty( $parent_id ) ) {
-		$parent_id = $activity_id;
+	if ( empty( $r['parent_id'] ) ) {
+		$r['parent_id'] = $r['activity_id'];
 	}
 
+	$activity_id = $r['activity_id'];
+
 	// Check to see if the parent activity is hidden, and if so, hide this comment publically.
 	$activity  = new BP_Activity_Activity( $activity_id );
 	$is_hidden = ( (int) $activity->hide_sitewide ) ? 1 : 0;
 
 	// Insert the activity comment
 	$comment_id = bp_activity_add( array(
-		'id'                => $id,
-		'content'           => apply_filters( 'bp_activity_comment_content', $content ),
+		'id'                => $r['id'],
+		'content'           => apply_filters( 'bp_activity_comment_content', $r['content'] ),
 		'component'         => buddypress()->activity->id,
 		'type'              => 'activity_comment',
-		'user_id'           => $user_id,
+		'user_id'           => $r['user_id'],
 		'item_id'           => $activity_id,
-		'secondary_item_id' => $parent_id,
+		'secondary_item_id' => $r['parent_id'],
 		'hide_sitewide'     => $is_hidden
 	) );
 
@@ -1290,7 +1370,7 @@ function bp_activity_new_comment( $args = '' ) {
 	wp_cache_delete( $activity_id, 'bp_activity_comments' );
 
 	// Walk the tree to clear caches for all parent items
-	$clear_id = $parent_id;
+	$clear_id = $r['parent_id'];
 	while ( $clear_id != $activity_id ) {
 		$clear_object = new BP_Activity_Activity( $clear_id );
 		wp_cache_delete( $clear_id, 'bp_activity' );
@@ -1298,7 +1378,7 @@ function bp_activity_new_comment( $args = '' ) {
 	}
 	wp_cache_delete( $activity_id, 'bp_activity' );
 
-	do_action( 'bp_activity_comment_posted', $comment_id, $params, $activity );
+	do_action( 'bp_activity_comment_posted', $comment_id, $r, $activity );
 
 	return $comment_id;
 }
@@ -1306,7 +1386,7 @@ function bp_activity_new_comment( $args = '' ) {
 /**
  * Fetch the activity_id for an existing activity entry in the DB.
  *
- * @since BuddyPress (1.2)
+ * @since BuddyPress (1.2.0)
  *
  * @see BP_Activity_Activity::get() For more information on accepted arguments.
  * @uses wp_parse_args()
@@ -1317,7 +1397,8 @@ function bp_activity_new_comment( $args = '' ) {
  * @return int $activity_id The ID of the activity item found.
  */
 function bp_activity_get_activity_id( $args = '' ) {
-	$defaults = array(
+
+	$r = bp_parse_args( $args, array(
 		'user_id'           => false,
 		'component'         => false,
 		'type'              => false,
@@ -1326,12 +1407,18 @@ function bp_activity_get_activity_id( $args = '' ) {
 		'action'            => false,
 		'content'           => false,
 		'date_recorded'     => false,
-	);
-
-	$r = wp_parse_args( $args, $defaults );
-	extract( $r, EXTR_SKIP );
+	) );
 
- 	return apply_filters( 'bp_activity_get_activity_id', BP_Activity_Activity::get_id( $user_id, $component, $type, $item_id, $secondary_item_id, $action, $content, $date_recorded ) );
+	return apply_filters( 'bp_activity_get_activity_id', BP_Activity_Activity::get_id(
+		$r['user_id'],
+		$r['component'],
+		$r['type'],
+		$r['item_id'],
+		$r['secondary_item_id'],
+		$r['action'],
+		$r['content'],
+		$r['date_recorded']
+	) );
 }
 
 /**
@@ -1347,7 +1434,7 @@ function bp_activity_get_activity_id( $args = '' ) {
  *
  * If you are deleting an activity comment please use bp_activity_delete_comment();
  *
- * @since BuddyPress (1.0)
+ * @since BuddyPress (1.0.0)
  *
  * @see BP_Activity_Activity::get() For more information on accepted arguments.
  * @uses wp_parse_args()
@@ -1369,7 +1456,7 @@ function bp_activity_get_activity_id( $args = '' ) {
 function bp_activity_delete( $args = '' ) {
 
 	// Pass one or more the of following variables to delete by those variables
-	$defaults = array(
+	$args = bp_parse_args( $args, array(
 		'id'                => false,
 		'action'            => false,
 		'content'           => false,
@@ -1381,23 +1468,22 @@ function bp_activity_delete( $args = '' ) {
 		'secondary_item_id' => false,
 		'date_recorded'     => false,
 		'hide_sitewide'     => false
-	);
-
-	$args = wp_parse_args( $args, $defaults );
+	) );
 
 	do_action( 'bp_before_activity_delete', $args );
 
 	// Adjust the new mention count of any mentioned member
 	bp_activity_adjust_mention_count( $args['id'], 'delete' );
 
-	if ( !$activity_ids_deleted = BP_Activity_Activity::delete( $args ) )
+	$activity_ids_deleted = BP_Activity_Activity::delete( $args );
+	if ( empty( $activity_ids_deleted ) ) {
 		return false;
+	}
 
 	// Check if the user's latest update has been deleted
-	if ( empty( $args['user_id'] ) )
-		$user_id = bp_loggedin_user_id();
-	else
-		$user_id = $args['user_id'];
+	$user_id = empty( $args['user_id'] )
+		? bp_loggedin_user_id()
+		: $args['user_id'];
 
 	$latest_update = bp_get_user_meta( $user_id, 'bp_latest_update', true );
 	if ( !empty( $latest_update ) ) {
@@ -1419,7 +1505,7 @@ function bp_activity_delete( $args = '' ) {
 	 *
 	 * You should use bp_activity_delete() instead.
 	 *
-	 * @since BuddyPress (1.1)
+	 * @since BuddyPress (1.1.0)
 	 * @deprecated BuddyPress (1.2)
 	 *
 	 * @uses wp_parse_args()
@@ -1432,23 +1518,21 @@ function bp_activity_delete( $args = '' ) {
 	 */
 	function bp_activity_delete_by_item_id( $args = '' ) {
 
-		$defaults = array(
+		$r = bp_parse_args( $args, array(
 			'item_id'           => false,
 			'component'         => false,
 			'type'              => false,
 			'user_id'           => false,
 			'secondary_item_id' => false
-		);
-		$r = wp_parse_args( $args, $defaults );
-		extract( $r, EXTR_SKIP );
+		) );
 
-		return bp_activity_delete( array( 'item_id' => $item_id, 'component' => $component, 'type' => $type, 'user_id' => $user_id, 'secondary_item_id' => $secondary_item_id ) );
+		return bp_activity_delete( $r );
 	}
 
 	/**
 	 * Delete an activity item by activity id.
 	 *
-	 * @since BuddyPress (1.1)
+	 * @since BuddyPress (1.1.0)
 	 *
 	 * @uses bp_activity_delete()
 	 *
@@ -1464,7 +1548,7 @@ function bp_activity_delete( $args = '' ) {
 	 *
 	 * You should use bp_activity_delete() instead.
 	 *
-	 * @since BuddyPress (1.1)
+	 * @since BuddyPress (1.1.0)
 	 * @deprecated BuddyPress (1.2)
 	 *
 	 * @uses bp_activity_delete()
@@ -1476,7 +1560,12 @@ function bp_activity_delete( $args = '' ) {
 	 * @return bool True on success, false on failure.
 	 */
 	function bp_activity_delete_by_content( $user_id, $content, $component, $type ) {
-		return bp_activity_delete( array( 'user_id' => $user_id, 'content' => $content, 'component' => $component, 'type' => $type ) );
+		return bp_activity_delete( array(
+			'user_id'   => $user_id,
+			'content'   => $content,
+			'component' => $component,
+			'type'      => $type
+		) );
 	}
 
 	/**
@@ -1484,7 +1573,7 @@ function bp_activity_delete( $args = '' ) {
 	 *
 	 * You should use bp_activity_delete() instead.
 	 *
-	 * @since BuddyPress (1.1)
+	 * @since BuddyPress (1.1.0)
 	 * @deprecated BuddyPress (1.2)
 	 *
 	 * @uses bp_activity_delete()
@@ -1494,13 +1583,16 @@ function bp_activity_delete( $args = '' ) {
 	 * @return bool True on success, false on failure.
 	 */
 	function bp_activity_delete_for_user_by_component( $user_id, $component ) {
-		return bp_activity_delete( array( 'user_id' => $user_id, 'component' => $component ) );
+		return bp_activity_delete( array(
+			'user_id'   => $user_id,
+			'component' => $component
+		) );
 	}
 
 /**
  * Delete an activity comment.
  *
- * @since BuddyPress (1.2)
+ * @since BuddyPress (1.2.0)
  *
  * @uses apply_filters() To call the 'bp_activity_delete_comment_pre' hook.
  * @uses bp_activity_delete_children()
@@ -1522,15 +1614,20 @@ function bp_activity_delete_comment( $activity_id, $comment_id ) {
 	 * You may want to hook into this filter if you want to override this function and
 	 * handle the deletion of child comments differently. Make sure you return false.
 	 */
-	if ( !apply_filters( 'bp_activity_delete_comment_pre', true, $activity_id, $comment_id ) )
+	if ( ! apply_filters( 'bp_activity_delete_comment_pre', true, $activity_id, $comment_id ) ) {
 		return false;
+	}
 
 	// Delete any children of this comment.
 	bp_activity_delete_children( $activity_id, $comment_id );
 
 	// Delete the actual comment
-	if ( !bp_activity_delete( array( 'id' => $comment_id, 'type' => 'activity_comment' ) ) )
+	if ( ! bp_activity_delete( array( 'id' => $comment_id, 'type' => 'activity_comment' ) ) ) {
 		return false;
+	}
+
+	// Purge comment cache for the root activity update
+	wp_cache_delete( $activity_id, 'bp_activity_comments' );
 
 	// Recalculate the comment tree
 	BP_Activity_Activity::rebuild_activity_comment_tree( $activity_id );
@@ -1543,24 +1640,34 @@ function bp_activity_delete_comment( $activity_id, $comment_id ) {
 	/**
 	 * Delete an activity comment's children.
 	 *
-	 * @since BuddyPress (1.2)
+	 * @since BuddyPress (1.2.0)
 	 *
 	 * @uses BP_Activity_Activity::get_child_comments() {@link BP_Activity_Activity}
 	 * @uses bp_activity_delete_children()
 	 * @uses bp_activity_delete()
 	 *
 	 * @param int $activity_id The ID of the "root" activity, ie the
-	 *                         comment's oldest ancestor.
+	 *        comment's oldest ancestor.
 	 * @param int $comment_id The ID of the comment to be deleted.
 	 */
-	function bp_activity_delete_children( $activity_id, $comment_id) {
+	function bp_activity_delete_children( $activity_id, $comment_id ) {
+
+		// Get activity children to delete
+		$children = BP_Activity_Activity::get_child_comments( $comment_id );
+
 		// Recursively delete all children of this comment.
-		if ( $children = BP_Activity_Activity::get_child_comments( $comment_id ) ) {
+		if ( ! empty( $children ) ) {
 			foreach( (array) $children as $child ) {
 				bp_activity_delete_children( $activity_id, $child->id );
 			}
 		}
-		bp_activity_delete( array( 'secondary_item_id' => $comment_id, 'type' => 'activity_comment', 'item_id' => $activity_id ) );
+		
+		// Delete the comment itself
+		bp_activity_delete( array(
+			'secondary_item_id' => $comment_id,
+			'type'              => 'activity_comment',
+			'item_id'           => $activity_id
+		) );
 	}
 
 /**
@@ -1571,7 +1678,7 @@ function bp_activity_delete_comment( $activity_id, $comment_id ) {
  * be sure to pass the full $activity_obj parameter as well, if you already
  * have it available.
  *
- * @since BuddyPress (1.2)
+ * @since BuddyPress (1.2.0)
  *
  * @uses bp_get_root_domain()
  * @uses bp_get_activity_root_slug()
@@ -1583,8 +1690,9 @@ function bp_activity_delete_comment( $activity_id, $comment_id ) {
  */
 function bp_activity_get_permalink( $activity_id, $activity_obj = false ) {
 
-	if ( empty( $activity_obj ) )
+	if ( empty( $activity_obj ) ) {
 		$activity_obj = new BP_Activity_Activity( $activity_id );
+	}
 
 	if ( isset( $activity_obj->current_comment ) ) {
 		$activity_obj = $activity_obj->current_comment;
@@ -1606,7 +1714,7 @@ function bp_activity_get_permalink( $activity_id, $activity_obj = false ) {
 /**
  * Hide a user's activity.
  *
- * @since BuddyPress (1.2)
+ * @since BuddyPress (1.2.0)
  *
  * @uses BP_Activity_Activity::hide_all_for_user() {@link BP_Activity_Activity}
  *
@@ -1627,18 +1735,18 @@ function bp_activity_hide_user_activity( $user_id ) {
  * through the content, grabs the first image and converts it to a thumbnail,
  * and removes the rest of the images from the string.
  *
- * @since BuddyPress (1.2)
+ * @since BuddyPress (1.2.0)
  *
  * @uses esc_attr()
  * @uses apply_filters() To call the 'bp_activity_thumbnail_content_images' hook
  *
  * @param string $content The content of the activity item.
  * @param string $link Optional. The unescaped URL that the image should link
- *                               to. If absent, the image will not be a link.
- * @param array $activity_args Optional. The args passed to the activity
- *                             creation function (eg bp_blogs_record_activity()).
+ *        to. If absent, the image will not be a link.
+ * @param array $args Optional. The args passed to the activity
+ *        creation function (eg bp_blogs_record_activity()).
  * @return string $content The content with images stripped and replaced with a
- *                         single thumb.
+ *         single thumb.
  */
 function bp_activity_thumbnail_content_images( $content, $link = false, $args = false ) {
 
@@ -1648,17 +1756,18 @@ function bp_activity_thumbnail_content_images( $content, $link = false, $args =
 	$content = preg_replace('|(\[caption(.*?)\])?<img[^>]*>([^\[\[]*\[\/caption\])?|', '', $content );
 
 	if ( !empty( $matches ) && !empty( $matches[0] ) ) {
+
 		// Get the SRC value
-		preg_match( '/<img.*?(src\=[\'|"]{0,1}.*?[\'|"]{0,1})[\s|>]{1}/i', $matches[0][0], $src );
+		preg_match( '/<img.*?(src\=[\'|"]{0,1}.*?[\'|"]{0,1})[\s|>]{1}/i',    $matches[0][0], $src    );
 
 		// Get the width and height
 		preg_match( '/<img.*?(height\=[\'|"]{0,1}.*?[\'|"]{0,1})[\s|>]{1}/i', $matches[0][0], $height );
 		preg_match( '/<img.*?(width\=[\'|"]{0,1}.*?[\'|"]{0,1})[\s|>]{1}/i',  $matches[0][0], $width  );
 
 		if ( !empty( $src ) ) {
-			$src    = substr( substr( str_replace( 'src=', '', $src[1] ), 0, -1 ), 1 );
+			$src    = substr( substr( str_replace( 'src=',    '', $src[1]    ), 0, -1 ), 1 );
 			$height = substr( substr( str_replace( 'height=', '', $height[1] ), 0, -1 ), 1 );
-			$width  = substr( substr( str_replace( 'width=', '', $width[1] ), 0, -1 ), 1 );
+			$width  = substr( substr( str_replace( 'width=',  '', $width[1]  ), 0, -1 ), 1 );
 
 			if ( empty( $width ) || empty( $height ) ) {
 				$width  = 100;
@@ -1684,7 +1793,7 @@ function bp_activity_thumbnail_content_images( $content, $link = false, $args =
 /**
  * Fetch whether the current user is allowed to mark items as spam.
  *
- * @since BuddyPress (1.6)
+ * @since BuddyPress (1.6.0)
  *
  * @return bool True if user is allowed to mark activity items as spam.
  */
@@ -1695,17 +1804,15 @@ function bp_activity_user_can_mark_spam() {
 /**
  * Mark an activity item as spam.
  *
- * @since BuddyPress (1.6)
- *
- * @global object $bp BuddyPress global settings.
+ * @since BuddyPress (1.6.0)
  *
  * @param BP_Activity_Activity $activity The activity item to be spammed.
  * @param string $source Optional. Default is "by_a_person" (ie, a person has
- *                       manually marked the activity as spam). BP core also
- *                       accepts 'by_akismet'.
+ *        manually marked the activity as spam). BP core also accepts
+ *        'by_akismet'.
  */
 function bp_activity_mark_as_spam( &$activity, $source = 'by_a_person' ) {
-	global $bp;
+	$bp = buddypress();
 
 	$activity->is_spam = 1;
 
@@ -1735,17 +1842,15 @@ function bp_activity_mark_as_spam( &$activity, $source = 'by_a_person' ) {
 /**
  * Mark an activity item as ham.
  *
- * @since BuddyPress (1.6)
- *
- * @global object $bp BuddyPress global settings.
+ * @since BuddyPress (1.6.0)
  *
  * @param BP_Activity_Activity $activity The activity item to be hammed.
  * @param string $source Optional. Default is "by_a_person" (ie, a person has
- *                       manually marked the activity as spam). BP core also
- *                       accepts 'by_akismet'.
+ *        manually marked the activity as spam). BP core also accepts
+ *        'by_akismet'.
  */
 function bp_activity_mark_as_ham( &$activity, $source = 'by_a_person' ) {
-	global $bp;
+	$bp = buddypress();
 
 	$activity->is_spam = 0;
 
@@ -1785,7 +1890,7 @@ function bp_activity_mark_as_ham( &$activity, $source = 'by_a_person' ) {
  * This does not cover recursive activity comments, as they do not use a real loop.
  * For that, see {@link bp_activity_comment_embed()}.
  *
- * @since BuddyPress (1.5)
+ * @since BuddyPress (1.5.0)
  *
  * @see BP_Embed
  * @see bp_embed_activity_cache()
@@ -1809,7 +1914,7 @@ add_action( 'activity_loop_start', 'bp_activity_embed' );
  * necessary to grab each comment's embeds from the cache, or put them in
  * the cache if they are not there yet.
  *
- * @since BuddyPress (1.5)
+ * @since BuddyPress (1.5.0)
  *
  * @see BP_Embed
  * @see bp_embed_activity_cache()
@@ -1828,10 +1933,9 @@ add_action( 'bp_before_activity_comment', 'bp_activity_comment_embed' );
 /**
  * When a user clicks on a "Read More" item, make sure embeds are correctly parsed and shown for the expanded content.
  *
- * @since BuddyPress (1.5)
+ * @since BuddyPress (1.5.0)
  *
  * @see BP_Embed
- * @global object $bp BuddyPress global settings
  * @uses add_filter() To attach create_function() to 'embed_post_id'.
  * @uses add_filter() To attach 'bp_embed_activity_cache' to 'bp_embed_get_cache'.
  * @uses add_action() To attach 'bp_embed_activity_save_cache' to 'bp_embed_update_cache'.
@@ -1839,15 +1943,14 @@ add_action( 'bp_before_activity_comment', 'bp_activity_comment_embed' );
  * @param object $activity The activity that is being expanded.
  */
 function bp_dtheme_embed_read_more( $activity ) {
-	global $bp;
+	buddypress()->activity->read_more_id = $activity->id;
 
-	$bp->activity->read_more_id = $activity->id;
-
-	add_filter( 'embed_post_id',            create_function( '', 'global $bp; return $bp->activity->read_more_id;' ) );
-	add_filter( 'bp_embed_get_cache',       'bp_embed_activity_cache',      10, 3 );
-	add_action( 'bp_embed_update_cache',    'bp_embed_activity_save_cache', 10, 3 );
+	add_filter( 'embed_post_id',         create_function( '', 'return buddypress()->activity->read_more_id;' ) );
+	add_filter( 'bp_embed_get_cache',    'bp_embed_activity_cache',      10, 3 );
+	add_action( 'bp_embed_update_cache', 'bp_embed_activity_save_cache', 10, 3 );
 }
-add_action( 'bp_dtheme_get_single_activity_content', 'bp_dtheme_embed_read_more' );
+add_action( 'bp_dtheme_get_single_activity_content',       'bp_dtheme_embed_read_more' );
+add_action( 'bp_legacy_theme_get_single_activity_content', 'bp_dtheme_embed_read_more' );
 
 /**
  * Clean up 'embed_post_id' filter after comment recursion.
@@ -1855,7 +1958,7 @@ add_action( 'bp_dtheme_get_single_activity_content', 'bp_dtheme_embed_read_more'
  * This filter must be removed so that the non-comment filters take over again
  * once the comments are done being processed.
  *
- * @since BuddyPress (1.5)
+ * @since BuddyPress (1.5.0)
  *
  * @see bp_activity_comment_embed()
  * @uses remove_filter() To remove 'bp_get_activity_comment_id' from 'embed_post_id'.
@@ -1870,13 +1973,13 @@ add_action( 'bp_after_activity_comment', 'bp_activity_comment_embed_after_recurs
  *
  * Used during {@link BP_Embed::parse_oembed()} via {@link bp_activity_embed()}.
  *
- * @since BuddyPress (1.5)
+ * @since BuddyPress (1.5.0)
  *
  * @see BP_Embed::parse_oembed()
  * @uses bp_activity_get_meta()
  *
  * @param string $cache An empty string passed by BP_Embed::parse_oembed() for
- *                      functions like this one to filter.
+ *        functions like this one to filter.
  * @param int $id The ID of the activity item.
  * @param string $cachekey The cache key generated in BP_Embed::parse_oembed().
  * @return mixed The cached embeds for this activity item.
@@ -1890,15 +1993,15 @@ function bp_embed_activity_cache( $cache, $id, $cachekey ) {
  *
  * Used during {@link BP_Embed::parse_oembed()} via {@link bp_activity_embed()}.
  *
- * @since BuddyPress (1.5)
+ * @since BuddyPress (1.5.0)
  *
  * @see BP_Embed::parse_oembed()
  * @uses bp_activity_update_meta()
  *
  * @param string $cache An empty string passed by BP_Embed::parse_oembed() for
- *                      functions like this one to filter.
- * @param int $id The ID of the activity item.
+ *        functions like this one to filter.
  * @param string $cachekey The cache key generated in BP_Embed::parse_oembed().
+ * @param int $id The ID of the activity item.
  * @return bool True on success, false on failure.
  */
 function bp_embed_activity_save_cache( $cache, $cachekey, $id ) {
diff --git a/wp-content/plugins/buddypress/bp-activity/bp-activity-loader.php b/wp-content/plugins/buddypress/bp-activity/bp-activity-loader.php
index 0f68f9139..e3a8dadc1 100644
--- a/wp-content/plugins/buddypress/bp-activity/bp-activity-loader.php
+++ b/wp-content/plugins/buddypress/bp-activity/bp-activity-loader.php
@@ -47,6 +47,7 @@ class BP_Activity_Component extends BP_Component {
 	public function includes( $includes = array() ) {
 		// Files to include
 		$includes = array(
+			'cssjs',
 			'actions',
 			'screens',
 			'filters',
@@ -106,7 +107,7 @@ class BP_Activity_Component extends BP_Component {
 			'slug'                  => BP_ACTIVITY_SLUG,
 			'root_slug'             => isset( $bp->pages->activity->slug ) ? $bp->pages->activity->slug : BP_ACTIVITY_SLUG,
 			'has_directory'         => true,
-			'directory_title'       => _x( 'Sitewide Activity', 'component directory title', 'buddypress' ),
+			'directory_title'       => _x( 'Site-Wide Activity', 'component directory title', 'buddypress' ),
 			'notification_callback' => 'bp_activity_format_notifications',
 			'search_string'         => __( 'Search Activity...', 'buddypress' ),
 			'global_tables'         => $global_tables,
@@ -136,7 +137,7 @@ class BP_Activity_Component extends BP_Component {
 
 		// Add 'Activity' to the main navigation
 		$main_nav = array(
-			'name'                => __( 'Activity', 'buddypress' ),
+			'name'                => _x( 'Activity', 'Profile activity screen nav', 'buddypress' ),
 			'slug'                => $this->slug,
 			'position'            => 10,
 			'screen_function'     => 'bp_activity_screen_my_activity',
@@ -162,7 +163,7 @@ class BP_Activity_Component extends BP_Component {
 
 		// Add the subnav items to the activity nav item if we are using a theme that supports this
 		$sub_nav[] = array(
-			'name'            => __( 'Personal', 'buddypress' ),
+			'name'            => _x( 'Personal', 'Profile activity screen sub nav', 'buddypress' ),
 			'slug'            => 'just-me',
 			'parent_url'      => $activity_link,
 			'parent_slug'     => $this->slug,
@@ -173,7 +174,7 @@ class BP_Activity_Component extends BP_Component {
 		// @ mentions
 		if ( bp_activity_do_mentions() ) {
 			$sub_nav[] = array(
-				'name'            => __( 'Mentions', 'buddypress' ),
+				'name'            => _x( 'Mentions', 'Profile activity screen sub nav', 'buddypress' ),
 				'slug'            => 'mentions',
 				'parent_url'      => $activity_link,
 				'parent_slug'     => $this->slug,
@@ -185,7 +186,7 @@ class BP_Activity_Component extends BP_Component {
 
 		// Favorite activity items
 		$sub_nav[] = array(
-			'name'            => __( 'Favorites', 'buddypress' ),
+			'name'            => _x( 'Favorites', 'Profile activity screen sub nav', 'buddypress' ),
 			'slug'            => 'favorites',
 			'parent_url'      => $activity_link,
 			'parent_slug'     => $this->slug,
@@ -197,7 +198,7 @@ class BP_Activity_Component extends BP_Component {
 		// Additional menu if friends is active
 		if ( bp_is_active( 'friends' ) ) {
 			$sub_nav[] = array(
-				'name'            => __( 'Friends', 'buddypress' ),
+				'name'            => _x( 'Friends', 'Profile activity screen sub nav', 'buddypress' ),
 				'slug'            => bp_get_friends_slug(),
 				'parent_url'      => $activity_link,
 				'parent_slug'     => $this->slug,
@@ -210,7 +211,7 @@ class BP_Activity_Component extends BP_Component {
 		// Additional menu if groups is active
 		if ( bp_is_active( 'groups' ) ) {
 			$sub_nav[] = array(
-				'name'            => __( 'Groups', 'buddypress' ),
+				'name'            => _x( 'Groups', 'Profile activity screen sub nav', 'buddypress' ),
 				'slug'            => bp_get_groups_slug(),
 				'parent_url'      => $activity_link,
 				'parent_slug'     => $this->slug,
@@ -255,9 +256,9 @@ class BP_Activity_Component extends BP_Component {
 			if ( bp_activity_do_mentions() ) {
 				$count = bp_get_total_mention_count_for_user( bp_loggedin_user_id() );
 				if ( !empty( $count ) ) {
-					$title = sprintf( __( 'Mentions <span class="count">%s</span>', 'buddypress' ), number_format_i18n( $count ) );
+					$title = sprintf( _x( 'Mentions <span class="count">%s</span>', 'Toolbar Mention logged in user', 'buddypress' ), number_format_i18n( $count ) );
 				} else {
-					$title = __( 'Mentions', 'buddypress' );
+					$title = _x( 'Mentions', 'Toolbar Mention logged in user', 'buddypress' );
 				}
 			}
 
@@ -265,7 +266,7 @@ class BP_Activity_Component extends BP_Component {
 			$wp_admin_nav[] = array(
 				'parent' => $bp->my_account_menu_id,
 				'id'     => 'my-account-' . $this->id,
-				'title'  => __( 'Activity', 'buddypress' ),
+				'title'  => _x( 'Activity', 'My Account Activity sub nav', 'buddypress' ),
 				'href'   => trailingslashit( $activity_link )
 			);
 
@@ -273,7 +274,7 @@ class BP_Activity_Component extends BP_Component {
 			$wp_admin_nav[] = array(
 				'parent' => 'my-account-' . $this->id,
 				'id'     => 'my-account-' . $this->id . '-personal',
-				'title'  => __( 'Personal', 'buddypress' ),
+				'title'  => _x( 'Personal', 'My Account Activity sub nav', 'buddypress' ),
 				'href'   => trailingslashit( $activity_link )
 			);
 
@@ -291,7 +292,7 @@ class BP_Activity_Component extends BP_Component {
 			$wp_admin_nav[] = array(
 				'parent' => 'my-account-' . $this->id,
 				'id'     => 'my-account-' . $this->id . '-favorites',
-				'title'  => __( 'Favorites', 'buddypress' ),
+				'title'  => _x( 'Favorites', 'My Account Activity sub nav', 'buddypress' ),
 				'href'   => trailingslashit( $activity_link . 'favorites' )
 			);
 
@@ -300,7 +301,7 @@ class BP_Activity_Component extends BP_Component {
 				$wp_admin_nav[] = array(
 					'parent' => 'my-account-' . $this->id,
 					'id'     => 'my-account-' . $this->id . '-friends',
-					'title'  => __( 'Friends', 'buddypress' ),
+					'title'  => _x( 'Friends', 'My Account Activity sub nav', 'buddypress' ),
 					'href'   => trailingslashit( $activity_link . bp_get_friends_slug() )
 				);
 			}
@@ -310,7 +311,7 @@ class BP_Activity_Component extends BP_Component {
 				$wp_admin_nav[] = array(
 					'parent' => 'my-account-' . $this->id,
 					'id'     => 'my-account-' . $this->id . '-groups',
-					'title'  => __( 'Groups', 'buddypress' ),
+					'title'  => _x( 'Groups', 'My Account Activity sub nav', 'buddypress' ),
 					'href'   => trailingslashit( $activity_link . bp_get_groups_slug() )
 				);
 			}
@@ -334,7 +335,7 @@ class BP_Activity_Component extends BP_Component {
 		// Adjust title based on view
 		if ( bp_is_activity_component() ) {
 			if ( bp_is_my_profile() ) {
-				$bp->bp_options_title = __( 'My Activity', 'buddypress' );
+				$bp->bp_options_title = _x( 'My Activity', 'Page and <title>', 'buddypress' );
 			} else {
 				$bp->bp_options_avatar = bp_core_fetch_avatar( array(
 					'item_id' => bp_displayed_user_id(),
diff --git a/wp-content/plugins/buddypress/bp-activity/bp-activity-screens.php b/wp-content/plugins/buddypress/bp-activity/bp-activity-screens.php
index 24067712f..c70363095 100644
--- a/wp-content/plugins/buddypress/bp-activity/bp-activity-screens.php
+++ b/wp-content/plugins/buddypress/bp-activity/bp-activity-screens.php
@@ -385,7 +385,7 @@ class BP_Activity_Theme_Compat {
 			'post_author'    => 0,
 			'post_date'      => 0,
 			'post_content'   => '',
-			'post_type'      => 'bp_activity',
+			'post_type'      => 'page',
 			'post_status'    => 'publish',
 			'is_page'        => true,
 			'comment_status' => 'closed'
@@ -438,7 +438,7 @@ class BP_Activity_Theme_Compat {
 			'post_author'    => 0,
 			'post_date'      => 0,
 			'post_content'   => '',
-			'post_type'      => 'bp_activity',
+			'post_type'      => 'page',
 			'post_status'    => 'publish',
 			'is_page'        => true,
 			'comment_status' => 'closed'
diff --git a/wp-content/plugins/buddypress/bp-activity/bp-activity-template.php b/wp-content/plugins/buddypress/bp-activity/bp-activity-template.php
index 8e28b6b43..d65eac3c3 100644
--- a/wp-content/plugins/buddypress/bp-activity/bp-activity-template.php
+++ b/wp-content/plugins/buddypress/bp-activity/bp-activity-template.php
@@ -98,6 +98,14 @@ class BP_Activity_Template {
 
 	var $in_the_loop;
 
+	/**
+	 * URL parameter key for activity pagination. Default: 'acpage'.
+	 *
+	 * @since BuddyPress (2.1.0)
+	 * @var string
+	 */
+	var $pag_arg;
+
 	var $pag_page;
 	var $pag_num;
 	var $pag_links;
@@ -170,6 +178,7 @@ class BP_Activity_Template {
 			'filter'            => false,
 			'search_terms'      => false,
 			'meta_query'        => false,
+			'date_query'        => false,
 			'display_comments'  => 'threaded',
 			'show_hidden'       => false,
 			'spam'              => 'ham_only',
@@ -178,7 +187,8 @@ class BP_Activity_Template {
 		$r = wp_parse_args( $args, $defaults );
 		extract( $r );
 
-		$this->pag_page = isset( $_REQUEST[$page_arg] ) ? intval( $_REQUEST[$page_arg] ) : $page;
+		$this->pag_arg  = $r['page_arg'];
+		$this->pag_page = isset( $_REQUEST[ $this->pag_arg ] ) ? intval( $_REQUEST[ $this->pag_arg ] ) : $page;
 		$this->pag_num  = isset( $_REQUEST['num'] ) ? intval( $_REQUEST['num'] ) : $per_page;
 
 		// Check if blog/forum replies are disabled
@@ -211,6 +221,7 @@ class BP_Activity_Template {
 				'sort'              => $sort,
 				'search_terms'      => $search_terms,
 				'meta_query'        => $meta_query,
+				'date_query'        => $date_query,
 				'filter'            => $filter,
 				'show_hidden'       => $show_hidden,
 				'exclude'           => $exclude,
@@ -220,10 +231,17 @@ class BP_Activity_Template {
 			) );
 		}
 
-		if ( !$max || $max >= (int) $this->activities['total'] )
-			$this->total_activity_count = (int) $this->activities['total'];
-		else
-			$this->total_activity_count = (int) $max;
+		// The total_activity_count property will be set only if a
+		// 'count_total' query has taken place
+		if ( ! is_null( $this->activities['total'] ) ) {
+			if ( ! $max || $max >= (int) $this->activities['total'] ) {
+				$this->total_activity_count = (int) $this->activities['total'];
+			} else {
+				$this->total_activity_count = (int) $max;
+			}
+		}
+
+		$this->has_more_items = $this->activities['has_more_items'];
 
 		$this->activities = $this->activities['activities'];
 
@@ -507,8 +525,9 @@ function bp_has_activities( $args = '' ) {
 		$object = $bp->groups->id;
 		$primary_id = $bp->groups->current_group->id;
 
-		if ( ( 'public' != $bp->groups->current_group->status ) && ( groups_is_user_member( bp_loggedin_user_id(), $bp->groups->current_group->id ) || bp_current_user_can( 'bp_moderate' ) ) )
+		if ( groups_is_user_member( bp_loggedin_user_id(), $bp->groups->current_group->id ) || bp_current_user_can( 'bp_moderate' ) ) {
 			$show_hidden = true;
+		}
 	}
 
 	// The default scope should recognize custom slugs
@@ -550,6 +569,7 @@ function bp_has_activities( $args = '' ) {
 		'since'             => false,        // return only items recorded since this Y-m-d H:i:s date
 
 		'meta_query'        => false,        // filter on activity meta. See WP_Meta_Query for format
+		'date_query'        => false,        // filter by date. See first parameter of WP_Date_Query for format
 
 		// Searching
 		'search_terms'      => false,        // specify terms to search on
@@ -663,6 +683,7 @@ function bp_has_activities( $args = '' ) {
 		'filter'            => $filter,
 		'search_terms'      => $search_terms,
 		'meta_query'        => $meta_query,
+		'date_query'        => $date_query,
 		'display_comments'  => $display_comments,
 		'show_hidden'       => $show_hidden,
 		'spam'              => $spam,
@@ -704,6 +725,23 @@ function bp_the_activity() {
 	return $activities_template->the_activity();
 }
 
+/**
+ * Output the URL for the Load More link.
+ *
+ * @since BuddyPress (2.1.0)
+ */
+function bp_activity_load_more_link() {
+	echo bp_get_activity_load_more_link();
+}
+	function bp_get_activity_load_more_link() {
+		global $activities_template;
+
+		$link = bp_get_requested_url();
+		$link = add_query_arg( $activities_template->pag_arg, $activities_template->pag_page + 1, $link );
+
+		return apply_filters( 'bp_get_activity_load_more_link', $link );
+	}
+
 /**
  * Output the activity pagination count.
  *
@@ -734,7 +772,7 @@ function bp_activity_pagination_count() {
 		$to_num    = bp_core_number_format( ( $start_num + ( $activities_template->pag_num - 1 ) > $activities_template->total_activity_count ) ? $activities_template->total_activity_count : $start_num + ( $activities_template->pag_num - 1 ) );
 		$total     = bp_core_number_format( $activities_template->total_activity_count );
 
-		return sprintf( _n( 'Viewing item %1$s to %2$s (of %3$s item)', 'Viewing item %1$s to %2$s (of %3$s items)', $total, 'buddypress' ), $from_num, $to_num, $total );
+		return sprintf( _n( 'Viewing 1 item', 'Viewing %1$s - %2$s of %3$s items', $total, 'buddypress' ), $from_num, $to_num, $total );
 	}
 
 /**
@@ -777,13 +815,17 @@ function bp_activity_pagination_links() {
 function bp_activity_has_more_items() {
 	global $activities_template;
 
-	$remaining_pages = 0;
+	if ( ! empty( $activities_template->has_more_items )  ) {
+		$has_more_items = true;
+	} else {
+		$remaining_pages = 0;
 
-	if ( ! empty( $activities_template->pag_page ) ) {
-		$remaining_pages = floor( ( $activities_template->total_activity_count - 1 ) / ( $activities_template->pag_num * $activities_template->pag_page ) );
-	}
+		if ( ! empty( $activities_template->pag_page ) ) {
+			$remaining_pages = floor( ( $activities_template->total_activity_count - 1 ) / ( $activities_template->pag_num * $activities_template->pag_page ) );
+		}
 
-	$has_more_items  = (int) $remaining_pages ? true : false;
+		$has_more_items = (int) $remaining_pages > 0;
+	}
 
 	return apply_filters( 'bp_activity_has_more_items', $has_more_items );
 }
@@ -1004,6 +1046,37 @@ function bp_activity_date_recorded() {
 		return apply_filters( 'bp_get_activity_date_recorded', $activities_template->activity->date_recorded );
 	}
 
+/**
+ * Output the display name of the member who posted the activity
+ *
+ * @since BuddyPress (2.1.0)
+ *
+ * @uses bp_get_activity_member_display_name()
+ */
+function bp_activity_member_display_name() {
+	echo bp_get_activity_member_display_name();
+}
+
+	/**
+	 * Return the display name of the member who posted the activity
+	 *
+	 * @since BuddyPress (2.1.0)
+	 *
+	 * @global object $activities_template {@link BP_Activity_Template}
+	 * @uses apply_filters() To call the 'bp_get_activity_member_display_name' hook.
+	 *
+	 * @return string The date the activity was recorded.
+	 */
+	function bp_get_activity_member_display_name() {
+		global $activities_template;
+
+		$retval = isset( $activities_template->activity->display_name )
+			? $activities_template->activity->display_name
+			: '';
+
+		return apply_filters( 'bp_get_activity_member_display_name', $retval );
+	}
+
 /**
  * Output the activity object name.
  *
@@ -1138,10 +1211,11 @@ function bp_activity_user_link() {
 	function bp_get_activity_user_link() {
 		global $activities_template;
 
-		if ( empty( $activities_template->activity->user_id ) )
+		if ( empty( $activities_template->activity->user_id ) || empty( $activities_template->activity->user_nicename ) || empty( $activities_template->activity->user_login ) ) {
 			$link = $activities_template->activity->primary_link;
-		else
+		} else {
 			$link = bp_core_get_user_domain( $activities_template->activity->user_id, $activities_template->activity->user_nicename, $activities_template->activity->user_login );
+		}
 
 		return apply_filters( 'bp_get_activity_user_link', $link );
 	}
@@ -1596,24 +1670,41 @@ function bp_insert_activity_meta( $content ) {
 function bp_activity_user_can_delete( $activity = false ) {
 	global $activities_template;
 
-	if ( !$activity )
+	// Try to use current activity if none was passed
+	if ( empty( $activity ) && ! empty( $activities_template->activity ) ) {
 		$activity = $activities_template->activity;
+	}
 
-	if ( isset( $activity->current_comment ) )
+	// If current_comment is set, we'll use that in place of the main activity
+	if ( isset( $activity->current_comment ) ) {
 		$activity = $activity->current_comment;
+	}
 
+	// Assume the user cannot delete the activity item
 	$can_delete = false;
 
-	if ( bp_current_user_can( 'bp_moderate' ) )
-		$can_delete = true;
+	// Only logged in users can delete activity
+	if ( is_user_logged_in() ) {
 
-	if ( is_user_logged_in() && $activity->user_id == bp_loggedin_user_id() )
-		$can_delete = true;
+		// Community moderators can always delete activity (at least for now)
+		if ( bp_current_user_can( 'bp_moderate' ) ) {
+			$can_delete = true;
+		}
 
-	if ( bp_is_item_admin() && bp_is_single_item() )
-		$can_delete = true;
+		// Users are allowed to delete their own activity. This is actually
+		// quite powerful, because doing so also deletes all comments to that
+		// activity item. We should revisit this eventually.
+		if ( isset( $activity->user_id ) && ( (int) $activity->user_id === bp_loggedin_user_id() ) ) {
+			$can_delete = true;
+		}
 
-	return apply_filters( 'bp_activity_user_can_delete', $can_delete, $activity );
+		// Viewing a single item, and this user is an admin of that item
+		if ( bp_is_single_item() && bp_is_item_admin() ) {
+			$can_delete = true;
+		}
+	}
+
+	return (bool) apply_filters( 'bp_activity_user_can_delete', $can_delete, $activity );
 }
 
 /**
@@ -1750,7 +1841,7 @@ function bp_activity_is_favorite() {
 	function bp_get_activity_is_favorite() {
 		global $activities_template;
 
- 		return apply_filters( 'bp_get_activity_is_favorite', in_array( $activities_template->activity->id, (array) $activities_template->my_favs ) );
+ 		return (bool) apply_filters( 'bp_get_activity_is_favorite', in_array( $activities_template->activity->id, (array) $activities_template->my_favs ) );
 	}
 
 /**
@@ -2090,63 +2181,65 @@ function bp_activity_comment_count() {
 }
 
 	/**
-	 * Return the content of the activity comment currently being displayed.
-	 *
-	 * The content is run through two filters. 'bp_get_activity_content'
-	 * will apply all filters applied to activity items in general. Use
-	 * 'bp_activity_comment_content' to modify the content of activity
-	 * comments only.
+	 * Return the comment count of an activity item.
 	 *
 	 * @since BuddyPress (1.2)
 	 *
 	 * @global object $activities_template {@link BP_Activity_Template}
 	 * @uses bp_activity_recurse_comment_count()
 	 * @uses apply_filters() To call the 'bp_activity_get_comment_count' hook.
-	 * @todo deprecate $args
 	 *
-	 * @param array $args Deprecated.
+	 * @param array $deprecated Deprecated.
+	 *
 	 * @return int $count The activity comment count.
 	 */
-	function bp_activity_get_comment_count( $args = '' ) {
+	function bp_activity_get_comment_count( $deprecated = null ) {
 		global $activities_template;
 
-		if ( !isset( $activities_template->activity->children ) || !$activities_template->activity->children )
-			return 0;
+		// Deprecated notice about $args
+		if ( ! empty( $deprecated ) ) {
+			_deprecated_argument( __FUNCTION__, '1.2', sprintf( __( '%1$s no longer accepts arguments. See the inline documentation at %2$s for more details.', 'buddypress' ), __FUNCTION__, __FILE__ ) );
+		}
 
-		$count = bp_activity_recurse_comment_count( $activities_template->activity );
+		// Get the count using the purpose-built recursive function
+		$count = ! empty( $activities_template->activity->children )
+			? bp_activity_recurse_comment_count( $activities_template->activity )
+			: 0;
 
 		return apply_filters( 'bp_activity_get_comment_count', (int) $count );
 	}
 
 		/**
-		 * Return the content of the activity comment currently being displayed.
+		 * Return the total number of comments to the current comment.
 		 *
-		 * The content is run through two filters. 'bp_get_activity_content'
-		 * will apply all filters applied to activity items in general.
-		 * Use bp_activity_comment_content to modify the content of
-		 * activity comments only.
+		 * This function recursively adds the total number of comments each
+		 * activity child has, and returns them.
 		 *
 		 * @since BuddyPress (1.2)
 		 *
 		 * @uses bp_activity_recurse_comment_count()
-		 * @uses apply_filters() To call the 'bp_activity_get_comment_count' hook
-		 * @todo investigate why bp_activity_recurse_comment_count() is used while being declared
+		 * @uses apply_filters() To call the 'bp_activity_recurse_comment_count' hook
 		 *
 		 * @param object $comment Activity comment object.
 		 * @param int $count The current iteration count.
+		 *
 		 * @return int $count The activity comment count.
 		 */
 		function bp_activity_recurse_comment_count( $comment, $count = 0 ) {
 
-			if ( empty( $comment->children ) )
-				return $count;
+			// Copy the count
+			$new_count = $count;
 
-			foreach ( (array) $comment->children as $comment ) {
-				$count++;
-				$count = bp_activity_recurse_comment_count( $comment, $count );
+			// Loop through children and recursively count comments
+			if ( ! empty( $comment->children ) ) {
+				foreach ( (array) $comment->children as $comment ) {
+					$new_count++;
+					$new_count = bp_activity_recurse_comment_count( $comment, $new_count );
+				}
 			}
 
-			return $count;
+			// Filter and return
+			return apply_filters( 'bp_activity_recurse_comment_count', $new_count, $comment, $count );
 		}
 
 /**
@@ -2326,9 +2419,20 @@ function bp_activity_comment_permalink() {
 	function bp_get_activity_comment_permalink() {
 		global $activities_template;
 
-		$link = bp_activity_get_permalink( $activities_template->activity->id, $activities_template->activity ) . '#acomment-' . $activities_template->activity->current_comment->id;
+		// Check that comment exists
+		$comment_id = isset( $activities_template->activity->current_comment->id )
+			? $activities_template->activity->current_comment->id
+			: 0;
 
-		return apply_filters( 'bp_get_activity_comment_permalink', $link );
+		// Setup the comment link
+		$comment_link = ! empty( $comment_id )
+			? '#acomment-' .$comment_id
+			: false;
+
+		// Append comment ID to end of activity permalink
+		$link = bp_activity_get_permalink( $activities_template->activity->id, $activities_template->activity ) . $comment_link;
+
+		return apply_filters( 'bp_get_activity_comment_permalink', $link, $comment_id );
 	}
 
 /**
@@ -2466,21 +2570,63 @@ function bp_activity_delete_link() {
 	 *         if on single activity page.
 	 */
 	function bp_get_activity_delete_link() {
-		global $activities_template;
 
-		$url   = bp_get_root_domain() . '/' . bp_get_activity_root_slug() . '/delete/' . $activities_template->activity->id;
+		$url   = bp_get_activity_delete_url();
 		$class = 'delete-activity';
 
 		// Determine if we're on a single activity page, and customize accordingly
 		if ( bp_is_activity_component() && is_numeric( bp_current_action() ) ) {
-			$url   = add_query_arg( array( 'redirect_to' => wp_get_referer() ), $url );
 			$class = 'delete-activity-single';
 		}
 
-		$link = '<a href="' . wp_nonce_url( $url, 'bp_activity_delete_link' ) . '" class="button item-button bp-secondary-action ' . $class . ' confirm" rel="nofollow">' . __( 'Delete', 'buddypress' ) . '</a>';
+		$link = '<a href="' . esc_url( $url ) . '" class="button item-button bp-secondary-action ' . $class . ' confirm" rel="nofollow">' . __( 'Delete', 'buddypress' ) . '</a>';
+
 		return apply_filters( 'bp_get_activity_delete_link', $link );
 	}
 
+/**
+ * Output the URL to delete a single activity stream item
+ *
+ * @since BuddyPress (2.1.0)
+ *
+ * @uses bp_get_activity_delete_link()
+ */
+function bp_activity_delete_url() {
+	echo esc_url( bp_get_activity_delete_url() );
+}
+	/**
+	 * Return the URL to delete a single activity item
+	 *
+	 * @since BuddyPress (2.1.0)
+	 *
+	 * @global object $activities_template {@link BP_Activity_Template}
+	 * @uses bp_get_root_domain()
+	 * @uses bp_get_activity_root_slug()
+	 * @uses bp_is_activity_component()
+	 * @uses bp_current_action()
+	 * @uses add_query_arg()
+	 * @uses wp_get_referer()
+	 * @uses wp_nonce_url()
+	 * @uses apply_filters() To call the 'bp_get_activity_delete_link' hook.
+	 *
+	 * @return string $link Activity delete link. Contains $redirect_to arg
+	 *         if on single activity page.
+	 */
+	function bp_get_activity_delete_url() {
+		global $activities_template;
+
+		$url = trailingslashit( bp_get_root_domain() . '/' . bp_get_activity_root_slug() . '/delete/' . $activities_template->activity->id );
+
+		// Determine if we're on a single activity page, and customize accordingly
+		if ( bp_is_activity_component() && is_numeric( bp_current_action() ) ) {
+			$url = add_query_arg( array( 'redirect_to' => wp_get_referer() ), $url );
+		}
+
+		$url = wp_nonce_url( $url, 'bp_activity_delete_link' );
+
+		return apply_filters( 'bp_get_activity_delete_url', $url );
+	}
+
 /**
  * Output the activity latest update link.
  *
@@ -2642,39 +2788,69 @@ function bp_activity_filter_links( $args = false ) {
 function bp_activity_can_comment() {
 	global $activities_template;
 
+	// Assume activity can be commented on
 	$can_comment = true;
 
-	if ( false === $activities_template->disable_blogforum_replies || (int) $activities_template->disable_blogforum_replies ) {
-		if ( 'new_blog_post' == bp_get_activity_action_name() || 'new_blog_comment' == bp_get_activity_action_name() || 'new_forum_topic' == bp_get_activity_action_name() || 'new_forum_post' == bp_get_activity_action_name() )
+	// Determine ability to comment based on activity action name
+	$activity_action = bp_get_activity_action_name();
+	switch ( $activity_action ) {
+
+		// Maybe turn off for blog and forum updates
+		case 'new_blog_post'    :
+		case 'new_blog_comment' :
+		case 'new_forum_topic'  :
+		case 'new_forum_post'   :
+			if ( ! empty( $activities_template->disable_blogforum_replies ) ) {
+				$can_comment = false;
+			}
+			break;
+
+		// Turn off for activity comments
+		case 'activity_comment' :
 			$can_comment = false;
+			break;
 	}
 
-	if ( 'activity_comment' == bp_get_activity_action_name() )
-		$can_comment = false;
-
-	return apply_filters( 'bp_activity_can_comment', $can_comment );
+	return apply_filters( 'bp_activity_can_comment', $can_comment, $activity_action );
 }
 
 /**
- * Determine if a comment can be made on an activity reply item.
+ * Determine whether a comment can be made on an activity reply item.
  *
- * Defaults to true, but can be modified by plugins.
- *
- * @since BuddyPress (1.5)
- *
- * @uses apply_filters() To call the 'bp_activity_can_comment_reply' hook
+ * @since BuddyPress (1.5.0)
  *
  * @param object $comment Activity comment.
- * @return bool $can_comment True if comment can receive comments.
+ * @return bool $can_comment True if comment can receive comments, otherwise
+ *         false.
  */
-function bp_activity_can_comment_reply( $comment ) {
+function bp_activity_can_comment_reply( $comment = '' ) {
+
+	// Assume activity can be commented on
 	$can_comment = true;
 
-	if ( get_option( 'thread_comments' ) && bp_activity_get_comment_depth() >= get_option( 'thread_comments_depth' ) ) {
-		$can_comment = false;
+	// Check that comment exists
+	if ( empty( $comment ) ) {
+		$comment = bp_activity_current_comment();
+	}
+
+	if ( ! empty( $comment ) ) {
+
+		// Fall back on current comment in activity loop
+		$comment_depth = isset( $comment->depth )
+			? intval( $comment->depth )
+			: bp_activity_get_comment_depth();
+
+		// Threading is turned on, so check the depth
+		if ( get_option( 'thread_comments' ) ) {
+			$can_comment = (bool) ( $comment_depth < get_option( 'thread_comments_depth' ) );
+
+		// No threading for comment replies if no threading for comments
+		} else {
+			$can_comment = false;
+		}
 	}
 
-	return apply_filters( 'bp_activity_can_comment_reply', $can_comment, $comment );
+	return (bool) apply_filters( 'bp_activity_can_comment_reply', $can_comment, $comment );
 }
 
 /**
@@ -2686,12 +2862,10 @@ function bp_activity_can_comment_reply( $comment ) {
  *
  * @uses apply_filters() To call the 'bp_activity_can_favorite' hook.
  *
- * @return bool $can_favorite True if comment can receive comments.
+ * @return bool True if comment can receive comments.
  */
 function bp_activity_can_favorite() {
-	$can_favorite = true;
-
-	return apply_filters( 'bp_activity_can_favorite', $can_favorite );
+	return apply_filters( 'bp_activity_can_favorite', true );
 }
 
 /**
@@ -2720,13 +2894,20 @@ function bp_total_favorite_count_for_user( $user_id = 0 ) {
 	 * @return int The total favorite count for the specified user.
 	 */
 	function bp_get_total_favorite_count_for_user( $user_id = 0 ) {
-		if ( ! $user_id ) {
-			$user_id = bp_displayed_user_id();
-		}
 
-		return apply_filters( 'bp_get_total_favorite_count_for_user', bp_activity_total_favorites_for_user( $user_id ) );
+		// Default to displayed user if none is passed
+		$user_id = empty( $user_id )
+			? bp_displayed_user_id()
+			: $user_id;
+
+		// Get user meta if user ID exists
+		$retval = ! empty( $user_id )
+			? bp_activity_total_favorites_for_user( $user_id )
+			: false;
+
+		return apply_filters( 'bp_get_total_favorite_count_for_user', $retval );
 	}
-	add_filter( 'bp_get_total_favorite_count_for_user', 'bp_core_number_format' );
+
 
 /**
  * Output the total mention count for a specified user.
@@ -2754,13 +2935,19 @@ function bp_total_mention_count_for_user( $user_id = 0 ) {
 	 * @return int The total mention count for the specified user.
 	 */
 	function bp_get_total_mention_count_for_user( $user_id = 0 ) {
-		if ( ! $user_id ) {
-			$user_id = bp_displayed_user_id();
-		}
 
-		return apply_filters( 'bp_get_total_mention_count_for_user', bp_get_user_meta( $user_id, 'bp_new_mention_count', true ) );
+		// Default to displayed user if none is passed
+		$user_id = empty( $user_id )
+			? bp_displayed_user_id()
+			: $user_id;
+
+		// Get user meta if user ID exists
+		$retval = ! empty( $user_id )
+			? bp_get_user_meta( $user_id, 'bp_new_mention_count', true )
+			: false;
+
+		return apply_filters( 'bp_get_total_mention_count_for_user', $retval );
 	}
-	add_filter( 'bp_get_total_mention_count_for_user', 'bp_core_number_format' );
 
 /**
  * Output the public message link for displayed user.
@@ -2789,10 +2976,16 @@ function bp_send_public_message_link() {
 	 */
 	function bp_get_send_public_message_link() {
 
-		if ( ! is_user_logged_in() || ! bp_is_user() || bp_is_my_profile() )
-			return false;
+		// No link if not logged in, not looking at someone else's profile
+		if ( ! is_user_logged_in() || ! bp_is_user() || bp_is_my_profile() ) {
+			$retval = '';
+		} else {
+			$args   = array( 'r' => bp_get_displayed_user_mentionname() );
+			$url    = add_query_arg( $args, bp_get_activity_directory_permalink() );
+			$retval = wp_nonce_url( $url );
+		}
 
-		return apply_filters( 'bp_get_send_public_message_link', wp_nonce_url( bp_get_activity_directory_permalink() . '?r=' . bp_get_displayed_user_mentionname() ) );
+		return apply_filters( 'bp_get_send_public_message_link', $retval );
 	}
 
 /**
@@ -2832,7 +3025,7 @@ function bp_activity_recurse_comments_activity_ids( $activity = array(), $activi
  *
  * @param int|string $user_id_or_username See {@link bp_get_mentioned_user_display_name()}.
  */
-function bp_mentioned_user_display_name( $user_id_or_username ) {
+function bp_mentioned_user_display_name( $user_id_or_username = false ) {
 	echo bp_get_mentioned_user_display_name( $user_id_or_username );
 }
 
@@ -2847,9 +3040,15 @@ function bp_mentioned_user_display_name( $user_id_or_username ) {
 	 * @param int|string User ID or username.
 	 * @return string The mentioned user's display name.
 	 */
-	function bp_get_mentioned_user_display_name( $user_id_or_username ) {
-		if ( !$name = bp_core_get_user_displayname( $user_id_or_username ) )
+	function bp_get_mentioned_user_display_name( $user_id_or_username = false ) {
+
+		// Get user display name
+		$name = bp_core_get_user_displayname( $user_id_or_username );
+
+		// If user somehow has no name, return this really lame string
+		if ( empty( $name ) ) {
 			$name = __( 'a user', 'buddypress' );
+		}
 
 		return apply_filters( 'bp_get_mentioned_user_display_name', $name, $user_id_or_username );
 	}
@@ -2896,7 +3095,8 @@ function bp_send_public_message_button( $args = '' ) {
 	 * @return string The button for sending a public message.
 	 */
 	function bp_get_send_public_message_button( $args = '' ) {
-		$defaults = array(
+
+		$r = bp_parse_args( $args, array(
 			'id'                => 'public_message',
 			'component'         => 'activity',
 			'must_be_logged_in' => true,
@@ -2906,12 +3106,10 @@ function bp_send_public_message_button( $args = '' ) {
 			'link_title'        => __( 'Send a public message on your activity stream.', 'buddypress' ),
 			'link_text'         => __( 'Public Message', 'buddypress' ),
 			'link_class'        => 'activity-button mention'
-		);
-
-		$button = wp_parse_args( $args, $defaults );
+		) );
 
 		// Filter and return the HTML button
-		return bp_get_button( apply_filters( 'bp_get_send_public_message_button', $button ) );
+		return bp_get_button( apply_filters( 'bp_get_send_public_message_button', $r ) );
 	}
 
 /**
@@ -2955,28 +3153,52 @@ function bp_activity_post_form_action() {
  * @param array $args See {@link bp_core_fetch_avatar()}.
  */
 function bp_activity_comments_user_avatars( $args = array() ) {
-	$defaults = array(
+
+	$r = bp_parse_args( $args, array(
 		'height' => false,
 		'html'   => true,
 		'type'   => 'thumb',
 		'width'  => false,
-	);
-
-	$args = wp_parse_args( $args, $defaults );
-	extract( $args, EXTR_SKIP );
+	) );
 
 	// Get the user IDs of everyone who has left a comment to the current activity item
 	$user_ids = bp_activity_get_comments_user_ids();
+	$output   = array();
+	$retval   = '';
+
+	if ( ! empty( $user_ids ) ) {
+		foreach ( (array) $user_ids as $user_id ) {
+
+			// Skip an empty user ID
+			if ( empty( $user_id ) ) {
+				continue;
+			}
+
+			// Get profile link for this user
+			$profile_link = bp_core_get_user_domain( $user_id );
+
+			// Get avatar for this user
+			$image_html   = bp_core_fetch_avatar( array(
+				'item_id' => $user_id,
+				'height'  => $r['height'],
+				'html'    => $r['html'],
+				'type'    => $r['type'],
+				'width'   => $r['width']
+			) );
 
-	$output = array();
-	foreach ( (array) $user_ids as $user_id ) {
-		$profile_link = bp_core_get_user_domain( $user_id );
-		$image_html   = bp_core_fetch_avatar( array( 'item_id' => $user_id, 'height' => $height, 'html' => $html, 'type' => $type, 'width' => $width, ) );
+			// If user has link & avatar, add them to the output array
+			if ( ! empty( $profile_link ) && ! empty( $image_html ) ) {
+				$output[] = sprintf( '<a href="%1$s">%2$s</a>', esc_url( $profile_link ), $image_html );
+			}
+		}
 
-		$output[] = sprintf( '<a href="%1$s">%2$s</a>', esc_url( $profile_link ), $image_html );
+		// If output array is not empty, wrap everything in some list items
+		if ( ! empty( $output ) ) {
+			$retval = '<li>' . implode( '</li><li>', $output ) . '</li>';
+		}
 	}
 
-	echo apply_filters( 'bp_activity_comments_user_avatars', '<li>' . implode( '</li><li>', $output ) . '</li>', $args, $output );
+	echo apply_filters( 'bp_activity_comments_user_avatars', $retval, $r, $output );
 }
 
 /**
@@ -2987,10 +3209,12 @@ function bp_activity_comments_user_avatars( $args = array() ) {
  * @return bool|array An array of IDs, or false if none are found.
  */
 function bp_activity_get_comments_user_ids() {
-	if ( empty( $GLOBALS['activities_template']->activity ) || empty( $GLOBALS['activities_template']->activity->children ) )
-		return false;
+	global $activities_template;
+
+	$user_ids = ! empty( $activities_template->activity->children )
+		? (array) bp_activity_recurse_comments_user_ids( $activities_template->activity->children )
+		: array();
 
-	$user_ids = (array) bp_activity_recurse_comments_user_ids( $GLOBALS['activities_template']->activity->children );
 	return apply_filters( 'bp_activity_get_comments_user_ids', array_unique( $user_ids ) );
 }
 
@@ -3002,22 +3226,33 @@ function bp_activity_get_comments_user_ids() {
 	 * @param array $comments Array of {@link BP_Activity_Activity} items.
 	 * @return array Array of user IDs.
 	 */
-	function bp_activity_recurse_comments_user_ids( array $comments ) {
+	function bp_activity_recurse_comments_user_ids( array $comments = array() ) {
+
+		// Default user ID's array
 		$user_ids = array();
 
-		foreach ( $comments as $comment ) {
-			// If a user is a spammer, their activity items will have been automatically marked as spam. Skip these.
-			if ( $comment->is_spam )
-				continue;
+		// Loop through comments and try to get user ID's
+		if ( ! empty( $comments ) ) {
+			foreach ( $comments as $comment ) {
+
+				// If a user is a spammer, their activity items will have been
+				// automatically marked as spam. Skip these.
+				if ( ! empty( $comment->is_spam ) ) {
+					continue;
+				}
 
-			$user_ids[] = $comment->user_id;
+				// Add user ID to array
+				$user_ids[] = $comment->user_id;
 
-			// Check for commentception
-			if ( ! empty( $comment->children ) )
-				$user_ids = array_merge( $user_ids, bp_activity_recurse_comments_user_ids( $comment->children ) );
+				// Check for commentception
+				if ( ! empty( $comment->children ) ) {
+					$user_ids = array_merge( $user_ids, bp_activity_recurse_comments_user_ids( $comment->children ) );
+				}
+			}
 		}
 
-		return $user_ids;
+		// Filter and return
+		return apply_filters( 'bp_activity_recurse_comments_user_ids', $user_ids, $comments );
 	}
 
 /**
@@ -3054,11 +3289,11 @@ function bp_displayed_user_mentionname() {
  * }
  */
 function bp_activity_types_list( $output = 'select', $args = '' ) {
-	$defaults = array(
+
+	$args = bp_parse_args( $args, array(
 		'checkbox_name' => 'bp_activity_types',
 		'selected'      => array(),
-	);
-	$args = wp_parse_args( $args, $defaults );
+	) );
 
 	$activities = bp_activity_get_types();
 	natsort( $activities );
@@ -3070,19 +3305,24 @@ function bp_activity_types_list( $output = 'select', $args = '' ) {
 		$checked  = checked(  true, in_array( $type, (array) $args['selected'] ), false );
 		$selected = selected( true, in_array( $type, (array) $args['selected'] ), false );
 
-		if ( 'select' == $output )
-			printf( '<option value="%1$s" %2$s>%3$s</option>', esc_attr( $type ), $selected, esc_html( $description ) );
-
-		elseif ( 'checkbox' == $output )
-			printf( '<label style="">%1$s<input type="checkbox" name="%2$s[]" value="%3$s" %4$s/></label>', esc_html( $description ), esc_attr( $args['checkbox_name'] ), esc_attr( $type ), $checked );
+		// Switch output based on the element
+		switch ( $output ) {
+			case 'select' :
+				printf( '<option value="%1$s" %2$s>%3$s</option>', esc_attr( $type ), $selected, esc_html( $description ) );
+				break;
+			case 'checkbox' :
+				printf( '<label style="">%1$s<input type="checkbox" name="%2$s[]" value="%3$s" %4$s/></label>', esc_html( $description ), esc_attr( $args['checkbox_name'] ), esc_attr( $type ), $checked );
+				break;
+		}
 
 		// Allow custom markup
 		do_action( 'bp_activity_types_list_' . $output, $args, $type, $description );
 	}
 
 	// Backpat with BP-Default for dropdown boxes only
-	if ( 'select' == $output )
+	if ( 'select' === $output ) {
 		do_action( 'bp_activity_filter_options' );
+	}
 }
 
 
@@ -3155,18 +3395,30 @@ function bp_activities_member_rss_link() { echo bp_get_member_activity_feed_link
 	 */
 	function bp_get_member_activity_feed_link() {
 
-		if ( bp_is_profile_component() || bp_is_current_action( 'just-me' ) )
+		// Single member activity feed link
+		if ( bp_is_profile_component() || bp_is_current_action( 'just-me' ) ) {
 			$link = bp_displayed_user_domain() . bp_get_activity_slug() . '/feed/';
-		elseif ( bp_is_active( 'friends' ) && bp_is_current_action( bp_get_friends_slug() ) )
+
+		// Friend feed link
+		} elseif ( bp_is_active( 'friends' ) && bp_is_current_action( bp_get_friends_slug() ) ) {
 			$link = bp_displayed_user_domain() . bp_get_activity_slug() . '/' . bp_get_friends_slug() . '/feed/';
-		elseif ( bp_is_active( 'groups'  ) && bp_is_current_action( bp_get_groups_slug()  ) )
+
+		// Group feed link
+		} elseif ( bp_is_active( 'groups'  ) && bp_is_current_action( bp_get_groups_slug()  ) ) {
 			$link = bp_displayed_user_domain() . bp_get_activity_slug() . '/' . bp_get_groups_slug() . '/feed/';
-		elseif ( 'favorites' == bp_current_action() )
+
+		// Favorites activity feed link
+		} elseif ( 'favorites' === bp_current_action() ) {
 			$link = bp_displayed_user_domain() . bp_get_activity_slug() . '/favorites/feed/';
-		elseif ( 'mentions' == bp_current_action() && bp_activity_do_mentions() )
+
+		// Mentions activity feed link
+		} elseif ( ( 'mentions' === bp_current_action() ) && bp_activity_do_mentions() ) {
 			$link = bp_displayed_user_domain() . bp_get_activity_slug() . '/mentions/feed/';
-		else
+
+		// No feed link
+		} else {
 			$link = '';
+		}
 
 		return apply_filters( 'bp_get_activities_member_rss_link', $link );
 	}
@@ -3242,19 +3494,22 @@ function bp_activity_feed_item_title() {
 	function bp_get_activity_feed_item_title() {
 		global $activities_template;
 
-		if ( !empty( $activities_template->activity->action ) )
+		if ( !empty( $activities_template->activity->action ) ) {
 			$content = $activities_template->activity->action;
-		else
+		} else {
 			$content = $activities_template->activity->content;
+		}
 
 		$content = explode( '<span', $content );
-		$title = strip_tags( ent2ncr( trim( convert_chars( $content[0] ) ) ) );
+		$title   = strip_tags( ent2ncr( trim( convert_chars( $content[0] ) ) ) );
 
-		if ( ':' == substr( $title, -1 ) )
+		if ( ':' === substr( $title, -1 ) ) {
 			$title = substr( $title, 0, -1 );
+		}
 
-		if ( 'activity_update' == $activities_template->activity->type )
+		if ( 'activity_update' === $activities_template->activity->type ) {
 			$title .= ': ' . strip_tags( ent2ncr( trim( convert_chars( bp_create_excerpt( $activities_template->activity->content, 70, array( 'ending' => " [&#133;]" ) ) ) ) ) );
+		}
 
 		return apply_filters( 'bp_get_activity_feed_item_title', $title );
 	}
@@ -3283,7 +3538,11 @@ function bp_activity_feed_item_link() {
 	function bp_get_activity_feed_item_link() {
 		global $activities_template;
 
-		return apply_filters( 'bp_get_activity_feed_item_link', $activities_template->activity->primary_link );
+		$retval = ! empty( $activities_template->activity->primary_link )
+			? $activities_template->activity->primary_link
+			: '';
+
+		return apply_filters( 'bp_get_activity_feed_item_link', $retval );
 	}
 
 /**
@@ -3310,7 +3569,11 @@ function bp_activity_feed_item_date() {
 	function bp_get_activity_feed_item_date() {
 		global $activities_template;
 
-		return apply_filters( 'bp_get_activity_feed_item_date', $activities_template->activity->date_recorded );
+		$retval = ! empty( $activities_template->activity->date_recorded )
+			? $activities_template->activity->date_recorded
+			: '';
+
+		return apply_filters( 'bp_get_activity_feed_item_date', $retval );
 	}
 
 /**
@@ -3339,11 +3602,17 @@ function bp_activity_feed_item_description() {
 	function bp_get_activity_feed_item_description() {
 		global $activities_template;
 
-		$content = '';
-		if ( ! empty( $activities_template->activity->content ) )
-			$content = $activities_template->activity->content;
+		// Get the content, if exists
+		$content = ! empty( $activities_template->activity->content )
+			? $activities_template->activity->content
+			: '';
 
-		return apply_filters( 'bp_get_activity_feed_item_description', ent2ncr( convert_chars( str_replace( '%s', '', $content ) ) ) );
+		// Perform a few string conversions on the content, if it's not empty
+		if ( ! empty( $content ) ) {
+			$content = ent2ncr( convert_chars( str_replace( '%s', '', $content ) ) );
+		}
+
+		return apply_filters( 'bp_get_activity_feed_item_description', $content );
 	}
 
 /**
@@ -3362,3 +3631,91 @@ function bp_activity_sitewide_feed() {
 <?php
 }
 add_action( 'bp_head', 'bp_activity_sitewide_feed' );
+
+/**
+ * Display available filters depending on the scope.
+ *
+ * @since BuddyPress (2.1.0)
+ *
+ * @param string $context The current context. 'activity', 'member',
+ *	  'member_groups', 'group'.
+ * @uses bp_get_activity_show_filters()
+ */
+function bp_activity_show_filters( $context = '' ) {
+	echo bp_get_activity_show_filters( $context );
+}
+	/**
+	 * Get available filters depending on the scope.
+	 *
+	 * @since BuddyPress (2.1.0)
+	 *
+	 * @param string $context The current context. 'activity', 'member',
+	 *	  'member_groups', 'group'
+	 * @return string HTML for <option> values.
+	 */
+	function bp_get_activity_show_filters( $context = '' ) {
+		// Set default context based on current page
+		if ( empty( $context ) ) {
+
+			// On member pages, default to 'member', unless this
+			// is a user's Groups activity
+			if ( bp_is_user() ) {
+				if ( bp_is_active( 'groups' ) && bp_is_current_action( bp_get_groups_slug() ) ) {
+					$context = 'member_groups';
+				} else {
+					$context = 'member';
+				}
+
+			// On individual group pages, default to 'group'
+			} else if ( bp_is_active( 'groups' ) && bp_is_group() ) {
+				$context = 'group';
+
+			// 'activity' everywhere else
+			} else {
+				$context = 'activity';
+			}
+		}
+
+		$filters = array();
+
+		// Walk through the registered actions, and prepare an the
+		// select box options.
+		foreach ( buddypress()->activity->actions as $actions ) {
+			foreach ( $actions as $action ) {
+				if ( ! in_array( $context, (array) $action['context'] ) ) {
+					continue;
+				}
+
+				// Friends activity collapses two filters into one
+				if ( in_array( $action['key'], array( 'friendship_accepted', 'friendship_created' ) ) ) {
+					$action['key'] = 'friendship_accepted,friendship_created';
+				}
+
+				$filters[ $action['key'] ] = $action['label'];
+			}
+		}
+
+		/**
+		 * Modify the filter options available in the activity filter dropdown.
+		 *
+		 * @since BuddyPress (2.1.0)
+		 *
+		 * @param array $filters Array of filter options for the given
+		 *        context, in the following format:
+		 *            $option_value => $option_name
+		 * @param string $context Context for the filter. 'activity'
+		 *        'member', 'member_groups', 'group'.
+		 */
+		$filters = apply_filters( 'bp_get_activity_show_filters', $filters, $context );
+
+		// Build the options output
+		$output = '';
+
+		if ( ! empty( $filters ) ) {
+			foreach ( $filters as $value => $filter ) {
+				$output .= '<option value="' . esc_attr( $value ) . '">' . esc_html( $filter ) . '</option>' . "\n";
+			}
+		}
+
+		return apply_filters( 'bp_get_activity_show_filters', $output, $filters, $context );
+	}
diff --git a/wp-content/plugins/buddypress/bp-activity/css/mentions-rtl.css b/wp-content/plugins/buddypress/bp-activity/css/mentions-rtl.css
new file mode 100644
index 000000000..d19c1e03c
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-activity/css/mentions-rtl.css
@@ -0,0 +1,80 @@
+.atwho-view {
+	background: #FFF;
+	border-radius: 2px;
+	border: 1px solid rgb(204, 204, 204);
+	box-shadow: 0 0 5px rgba(204, 204, 204, 0.25), 0 0 1px #FFF;
+	color: #D84800;
+	display: none;
+	font-family: sans-serif;
+	margin-top: 18px;
+	position: absolute;
+	top: 0;
+	z-index: 1000; /* >999 for wp-admin */
+}
+/* @noflip */
+.atwho-view {
+	left: 0; 
+}
+.atwho-view ul {
+	list-style: none;
+	margin: auto;
+	padding: 0;
+}
+.atwho-view ul li {
+	border-bottom: 1px solid #EFEFEF;
+	box-sizing: content-box;
+	cursor: pointer;
+	display: block;
+	font-size: 14px;
+	height: 20px;
+	line-height: 20px;
+	margin: 0;
+	overflow: hidden;
+	padding: 5px 10px;
+}
+.atwho-view img {
+	border-radius: 2px;
+	float: left;
+	height: 20px;
+	margin-top:0;
+	width: 20px;
+}
+.atwho-view strong {
+	background: #EFEFEF;
+	font: bold;
+}
+.atwho-view .username strong {
+	color: #D54E21;
+}
+.atwho-view small {
+	color: #AAA;
+	float: left;
+	font-size: smaller;
+	font-weight: normal;
+	margin: 0 40px 0 10px;
+}
+.atwho-view .cur {
+	background: rgba(239, 239, 239, 0.5);
+}
+
+@media (max-width: 900px) {
+	.atwho-view img {
+		float: right;
+		margin: 0 0 0 10px;
+	}
+	.atwho-view small {
+		display: none;
+	}
+}
+@media (max-width: 400px) {
+	.atwho-view ul li {
+		font-size: 16px;
+		line-height: 23px;
+		padding: 13px;
+	}
+	.atwho-view ul li img {
+		height: 30px;
+		margin-top: -5px;
+		width: 30px;
+	}
+}
diff --git a/wp-content/plugins/buddypress/bp-activity/css/mentions-rtl.min.css b/wp-content/plugins/buddypress/bp-activity/css/mentions-rtl.min.css
new file mode 100644
index 000000000..abdf7d673
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-activity/css/mentions-rtl.min.css
@@ -0,0 +1,2 @@
+/*! buddypress - v2.1.0 - 2014-10-06 9:39:09 PM UTC - https://wordpress.org/plugins/buddypress/ */
+.atwho-view{background:#FFF;border-radius:2px;border:1px solid #ccc;box-shadow:0 0 5px rgba(204,204,204,.25),0 0 1px #FFF;color:#D84800;display:none;font-family:sans-serif;margin-top:18px;position:absolute;top:0;z-index:1000;left:0}.atwho-view ul{list-style:none;margin:auto;padding:0}.atwho-view ul li{border-bottom:1px solid #EFEFEF;box-sizing:content-box;cursor:pointer;display:block;font-size:14px;height:20px;line-height:20px;margin:0;overflow:hidden;padding:5px 10px}.atwho-view img{border-radius:2px;float:left;height:20px;margin-top:0;width:20px}.atwho-view strong{background:#EFEFEF;font:700}.atwho-view .username strong{color:#D54E21}.atwho-view small{color:#AAA;float:left;font-size:smaller;font-weight:400;margin:0 40px 0 10px}.atwho-view .cur{background:rgba(239,239,239,.5)}@media (max-width:900px){.atwho-view img{float:right;margin:0 0 0 10px}.atwho-view small{display:none}}@media (max-width:400px){.atwho-view ul li{font-size:16px;line-height:23px;padding:13px}.atwho-view ul li img{height:30px;margin-top:-5px;width:30px}}
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-activity/css/mentions.css b/wp-content/plugins/buddypress/bp-activity/css/mentions.css
new file mode 100644
index 000000000..351b9ebf3
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-activity/css/mentions.css
@@ -0,0 +1,80 @@
+.atwho-view {
+	background: #FFF;
+	border-radius: 2px;
+	border: 1px solid rgb(204, 204, 204);
+	box-shadow: 0 0 5px rgba(204, 204, 204, 0.25), 0 0 1px #FFF;
+	color: #D84800;
+	display: none;
+	font-family: sans-serif;
+	margin-top: 18px;
+	position: absolute;
+	top: 0;
+	z-index: 1000; /* >999 for wp-admin */
+}
+/* @noflip */
+.atwho-view {
+	left: 0; 
+}
+.atwho-view ul {
+	list-style: none;
+	margin: auto;
+	padding: 0;
+}
+.atwho-view ul li {
+	border-bottom: 1px solid #EFEFEF;
+	box-sizing: content-box;
+	cursor: pointer;
+	display: block;
+	font-size: 14px;
+	height: 20px;
+	line-height: 20px;
+	margin: 0;
+	overflow: hidden;
+	padding: 5px 10px;
+}
+.atwho-view img {
+	border-radius: 2px;
+	float: right;
+	height: 20px;
+	margin-top:0;
+	width: 20px;
+}
+.atwho-view strong {
+	background: #EFEFEF;
+	font: bold;
+}
+.atwho-view .username strong {
+	color: #D54E21;
+}
+.atwho-view small {
+	color: #AAA;
+	float: right;
+	font-size: smaller;
+	font-weight: normal;
+	margin: 0 10px 0 40px;
+}
+.atwho-view .cur {
+	background: rgba(239, 239, 239, 0.5);
+}
+
+@media (max-width: 900px) {
+	.atwho-view img {
+		float: left;
+		margin: 0 10px 0 0;
+	}
+	.atwho-view small {
+		display: none;
+	}
+}
+@media (max-width: 400px) {
+	.atwho-view ul li {
+		font-size: 16px;
+		line-height: 23px;
+		padding: 13px;
+	}
+	.atwho-view ul li img {
+		height: 30px;
+		margin-top: -5px;
+		width: 30px;
+	}
+}
diff --git a/wp-content/plugins/buddypress/bp-activity/css/mentions.min.css b/wp-content/plugins/buddypress/bp-activity/css/mentions.min.css
new file mode 100644
index 000000000..b9cce6d48
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-activity/css/mentions.min.css
@@ -0,0 +1,2 @@
+/*! buddypress - v2.1.0 - 2014-10-06 9:39:09 PM UTC - https://wordpress.org/plugins/buddypress/ */
+.atwho-view{background:#FFF;border-radius:2px;border:1px solid #ccc;box-shadow:0 0 5px rgba(204,204,204,.25),0 0 1px #FFF;color:#D84800;display:none;font-family:sans-serif;margin-top:18px;position:absolute;top:0;z-index:1000;left:0}.atwho-view ul{list-style:none;margin:auto;padding:0}.atwho-view ul li{border-bottom:1px solid #EFEFEF;box-sizing:content-box;cursor:pointer;display:block;font-size:14px;height:20px;line-height:20px;margin:0;overflow:hidden;padding:5px 10px}.atwho-view img{border-radius:2px;float:right;height:20px;margin-top:0;width:20px}.atwho-view strong{background:#EFEFEF;font:700}.atwho-view .username strong{color:#D54E21}.atwho-view small{color:#AAA;float:right;font-size:smaller;font-weight:400;margin:0 10px 0 40px}.atwho-view .cur{background:rgba(239,239,239,.5)}@media (max-width:900px){.atwho-view img{float:left;margin:0 10px 0 0}.atwho-view small{display:none}}@media (max-width:400px){.atwho-view ul li{font-size:16px;line-height:23px;padding:13px}.atwho-view ul li img{height:30px;margin-top:-5px;width:30px}}
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-activity/js/mentions.js b/wp-content/plugins/buddypress/bp-activity/js/mentions.js
new file mode 100644
index 000000000..4ee6b349c
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-activity/js/mentions.js
@@ -0,0 +1,204 @@
+(function( $, undefined ) {
+	var mentionsQueryCache = [],
+		mentionsItem;
+
+	/**
+	 * Adds BuddyPress @mentions to form inputs.
+	 *
+	 * @param {array|object} options If array, becomes the suggestions' data source. If object, passed as config to $.atwho().
+	 * @since BuddyPress (2.1.0)
+	 */
+	$.fn.bp_mentions = function( options ) {
+		if ( $.isArray( options ) ) {
+			options = { data: options };
+		}
+
+		/**
+		 * Default options for at.js; see https://github.com/ichord/At.js/.
+		 */
+		var suggestionsDefaults = {
+			delay:               200,
+			hide_without_suffix: true,
+			insert_tpl:          '</>${atwho-data-value}</>', // For contentEditable, the fake tags make jQuery insert a textNode.
+			limit:               10,
+			start_with_space:    false,
+			suffix:              '',
+
+			callbacks: {
+				/**
+				 * Custom filter to only match the start of spaced words.
+				 * Based on the core/default one.
+				 *
+				 * @param {string} query
+				 * @param {array} data
+				 * @param {string} search_key
+				 * @return {array}
+				 * @since BuddyPress (2.1.0)
+				 */
+				filter: function( query, data, search_key ) {
+					var item, _i, _len, _results = [],
+					regxp = new RegExp( '^' + query + '| ' + query, 'ig' ); // start of string, or preceded by a space.
+
+					for ( _i = 0, _len = data.length; _i < _len; _i++ ) {
+						item = data[ _i ];
+						if ( item[ search_key ].toLowerCase().match( regxp ) ) {
+							_results.push( item );
+						}
+					}
+
+					return _results;
+				},
+
+				/**
+				 * Removes some spaces around highlighted string and tweaks regex to allow spaces
+				 * (to match display_name). Based on the core default.
+				 *
+				 * @param {unknown} li
+				 * @param {string} query
+				 * @return {string}
+				 * @since BuddyPress (2.1.0)
+				 */
+				highlighter: function( li, query ) {
+					if ( ! query ) {
+						return li;
+					}
+
+					var regexp = new RegExp( '>(\\s*|[\\w\\s]*)(' + this.at.replace( '+', '\\+') + '?' + query.replace( '+', '\\+' ) + ')([\\w ]*)\\s*<', 'ig' );
+					return li.replace( regexp, function( str, $1, $2, $3 ) {
+						return '>' + $1 + '<strong>' + $2 + '</strong>' + $3 + '<';
+					});
+				},
+
+				/**
+				 * Reposition the suggestion list dynamically.
+				 *
+				 * @param {unknown} offset
+				 * @since BuddyPress (2.1.0)
+				 */
+				before_reposition: function( offset ) {
+					var $view = $( '#atwho-ground-' + this.id + ' .atwho-view' ),
+						caret = this.$inputor.caret( 'offset', { iframe: $( '#content_ifr' )[0] } ).left,
+						move;
+
+					// If the caret is past horizontal half, then flip it, yo.
+					if ( caret > ( $( 'body' ).width() / 2 ) ) {
+						$view.addClass( 'right' );
+						move = caret - offset.left - this.view.$el.width();
+					} else {
+						$view.removeClass( 'right' );
+						move = caret - offset.left + 1;
+					}
+
+					offset.top  += 1;
+					offset.left += move;
+				},
+
+				/**
+				 * Override default behaviour which inserts junk tags in the WordPress Visual editor.
+				 *
+				 * @param {unknown} $inputor Element which we're inserting content into.
+				 * @param {string) content The content that will be inserted.
+				 * @param {string) suffix Applied to the end of the content string.
+				 * @return {string}
+				 * @since BuddyPress (2.1.0)
+				 */
+				inserting_wrapper: function( $inputor, content, suffix ) {
+					var new_suffix = ( suffix === '' ) ? suffix : suffix || ' ';
+					return '' + content + new_suffix;
+				}
+			}
+		},
+
+		/**
+		 * Default options for our @mentions; see https://github.com/ichord/At.js/.
+		 */
+		mentionsDefaults = {
+			callbacks: {
+				/**
+				 * If there are no matches for the query in this.data, then query BuddyPress.
+				 *
+				 * @param {string} query Partial @mention to search for.
+				 * @param {function} render_view Render page callback function.
+				 * @since BuddyPress (2.1.0)
+				 */
+				remote_filter: function( query, render_view ) {
+					var self = $( this );
+
+					mentionsItem = mentionsQueryCache[ query ];
+					if ( typeof mentionsItem === 'object' ) {
+						render_view( mentionsItem );
+						return;
+					}
+
+					if ( self.xhr ) {
+						self.xhr.abort();
+					}
+
+					self.xhr = $.getJSON( ajaxurl, { 'action': 'bp_get_suggestions', 'term': query, 'type': 'members' } )
+						/**
+						 * Success callback for the @suggestions lookup.
+						 *
+						 * @param {object} response Details of users matching the query.
+						 * @since BuddyPress (2.1.0)
+						 */
+						.done(function( response ) {
+							if ( ! response.success ) {
+								return;
+							}
+
+							var data = $.map( response.data,
+								/**
+								 * Create a composite index to determine ordering of results;
+								 * nicename matches will appear on top.
+								 *
+								 * @param {array} suggestion A suggestion's original data.
+								 * @return {array} A suggestion's new data.
+								 * @since BuddyPress (2.1.0)
+								 */
+								function( suggestion ) {
+									suggestion.search = suggestion.search || suggestion.ID + ' ' + suggestion.name;
+									return suggestion;
+								}
+							);
+
+							mentionsQueryCache[ query ] = data;
+							render_view( data );
+						});
+				}
+			},
+
+			data: $.map( options.data,
+				/**
+				 * Create a composite index to search against of nicename + display name.
+				 * This will also determine ordering of results, so nicename matches will appear on top.
+				 *
+				 * @param {array} suggestion A suggestion's original data.
+				 * @return {array} A suggestion's new data.
+				 * @since BuddyPress (2.1.0)
+				 */
+				function( suggestion ) {
+					suggestion.search = suggestion.search || suggestion.ID + ' ' + suggestion.name;
+					return suggestion;
+				}
+			),
+
+			at:         '@',
+			search_key: 'search',
+			tpl:        '<li data-value="@${ID}"><img src="${image}" /><span class="username">@${ID}</span><small>${name}</small></li>'
+		},
+
+		opts = $.extend( true, {}, suggestionsDefaults, mentionsDefaults, options );
+		return $.fn.atwho.call( this, opts );
+	};
+
+	$( document ).ready(function() {
+		var users = [];
+
+		if ( typeof window.BP_Suggestions === 'object' ) {
+			users = window.BP_Suggestions.friends || users;
+		}
+
+		// Activity/reply, post comments, dashboard post 'text' editor.
+		$( '.bp-suggestions, #comments form textarea, .wp-editor-area' ).bp_mentions( users );
+	});
+})( jQuery );
diff --git a/wp-content/plugins/buddypress/bp-activity/js/mentions.min.js b/wp-content/plugins/buddypress/bp-activity/js/mentions.min.js
new file mode 100644
index 000000000..f63cef358
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-activity/js/mentions.min.js
@@ -0,0 +1,2 @@
+/*! buddypress - v2.1.0 - 2014-10-06 9:39:07 PM UTC - https://wordpress.org/plugins/buddypress/ */
+!function(a){var b,c=[];a.fn.bp_mentions=function(d){a.isArray(d)&&(d={data:d});var e={delay:200,hide_without_suffix:!0,insert_tpl:"</>${atwho-data-value}</>",limit:10,start_with_space:!1,suffix:"",callbacks:{filter:function(a,b,c){var d,e,f,g=[],h=new RegExp("^"+a+"| "+a,"ig");for(e=0,f=b.length;f>e;e++)d=b[e],d[c].toLowerCase().match(h)&&g.push(d);return g},highlighter:function(a,b){if(!b)return a;var c=new RegExp(">(\\s*|[\\w\\s]*)("+this.at.replace("+","\\+")+"?"+b.replace("+","\\+")+")([\\w ]*)\\s*<","ig");return a.replace(c,function(a,b,c,d){return">"+b+"<strong>"+c+"</strong>"+d+"<"})},before_reposition:function(b){var c,d=a("#atwho-ground-"+this.id+" .atwho-view"),e=this.$inputor.caret("offset",{iframe:a("#content_ifr")[0]}).left;e>a("body").width()/2?(d.addClass("right"),c=e-b.left-this.view.$el.width()):(d.removeClass("right"),c=e-b.left+1),b.top+=1,b.left+=c},inserting_wrapper:function(a,b,c){var d=""===c?c:c||" ";return""+b+d}}},f={callbacks:{remote_filter:function(d,e){var f=a(this);return b=c[d],"object"==typeof b?void e(b):(f.xhr&&f.xhr.abort(),void(f.xhr=a.getJSON(ajaxurl,{action:"bp_get_suggestions",term:d,type:"members"}).done(function(b){if(b.success){var f=a.map(b.data,function(a){return a.search=a.search||a.ID+" "+a.name,a});c[d]=f,e(f)}})))}},data:a.map(d.data,function(a){return a.search=a.search||a.ID+" "+a.name,a}),at:"@",search_key:"search",tpl:'<li data-value="@${ID}"><img src="${image}" /><span class="username">@${ID}</span><small>${name}</small></li>'},g=a.extend(!0,{},e,f,d);return a.fn.atwho.call(this,g)},a(document).ready(function(){var b=[];"object"==typeof window.BP_Suggestions&&(b=window.BP_Suggestions.friends||b),a(".bp-suggestions, #comments form textarea, .wp-editor-area").bp_mentions(b)})}(jQuery);
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-blogs/bp-blogs-activity.php b/wp-content/plugins/buddypress/bp-blogs/bp-blogs-activity.php
index 70ea20a19..8b67a1680 100644
--- a/wp-content/plugins/buddypress/bp-blogs/bp-blogs-activity.php
+++ b/wp-content/plugins/buddypress/bp-blogs/bp-blogs-activity.php
@@ -32,7 +32,8 @@ function bp_blogs_register_activity_actions() {
 			$bp->blogs->id,
 			'new_blog',
 			__( 'New site created', 'buddypress' ),
-			'bp_blogs_format_activity_action_new_blog'
+			'bp_blogs_format_activity_action_new_blog',
+			__( 'New Sites', 'buddypress' )
 		);
 	}
 
@@ -40,14 +41,18 @@ function bp_blogs_register_activity_actions() {
 		$bp->blogs->id,
 		'new_blog_post',
 		__( 'New post published', 'buddypress' ),
-		'bp_blogs_format_activity_action_new_blog_post'
+		'bp_blogs_format_activity_action_new_blog_post',
+		__( 'Posts', 'buddypress' ),
+		array( 'activity', 'member' )
 	);
 
 	bp_activity_set_action(
 		$bp->blogs->id,
 		'new_blog_comment',
 		__( 'New post comment posted', 'buddypress' ),
-		'bp_blogs_format_activity_action_new_blog_comment'
+		'bp_blogs_format_activity_action_new_blog_comment',
+		__( 'Comments', 'buddypress' ),
+		array( 'activity', 'member' )
 	);
 
 	do_action( 'bp_blogs_register_activity_actions' );
@@ -264,8 +269,9 @@ function bp_blogs_record_activity( $args = '' ) {
 	global $bp;
 
 	// Bail if activity is not active
-	if ( ! bp_is_active( 'activity' ) )
+	if ( ! bp_is_active( 'activity' ) ) {
 		return false;
+	}
 
 	$defaults = array(
 		'user_id'           => bp_loggedin_user_id(),
@@ -281,28 +287,30 @@ function bp_blogs_record_activity( $args = '' ) {
 	);
 
 	$r = wp_parse_args( $args, $defaults );
-	extract( $r, EXTR_SKIP );
 
 	// Remove large images and replace them with just one image thumbnail
- 	if ( !empty( $content ) )
-		$content = bp_activity_thumbnail_content_images( $content, $primary_link, $r );
+	if ( ! empty( $r['content'] ) ) {
+		$r['content'] = bp_activity_thumbnail_content_images( $r['content'], $r['primary_link'], $r );
+	}
 
-	if ( !empty( $action ) )
-		$action = apply_filters( 'bp_blogs_record_activity_action', $action );
+	if ( ! empty( $r['action'] ) ) {
+		$r['action'] = apply_filters( 'bp_blogs_record_activity_action', $r['action'] );
+	}
 
-	if ( !empty( $content ) )
-		$content = apply_filters( 'bp_blogs_record_activity_content', bp_create_excerpt( $content ), $content );
+	if ( ! empty( $r['content'] ) ) {
+		$r['content'] = apply_filters( 'bp_blogs_record_activity_content', bp_create_excerpt( $r['content'] ), $r['content'], $r );
+	}
 
 	// Check for an existing entry and update if one exists.
 	$id = bp_activity_get_activity_id( array(
-		'user_id'           => $user_id,
-		'component'         => $component,
-		'type'              => $type,
-		'item_id'           => $item_id,
-		'secondary_item_id' => $secondary_item_id
+		'user_id'           => $r['user_id'],
+		'component'         => $r['component'],
+		'type'              => $r['type'],
+		'item_id'           => $r['item_id'],
+		'secondary_item_id' => $r['secondary_item_id'],
 	) );
 
-	return bp_activity_add( array( 'id' => $id, 'user_id' => $user_id, 'action' => $action, 'content' => $content, 'primary_link' => $primary_link, 'component' => $component, 'type' => $type, 'item_id' => $item_id, 'secondary_item_id' => $secondary_item_id, 'recorded_time' => $recorded_time, 'hide_sitewide' => $hide_sitewide ) );
+	return bp_activity_add( array( 'id' => $id, 'user_id' => $r['user_id'], 'action' => $r['action'], 'content' => $r['content'], 'primary_link' => $r['primary_link'], 'component' => $r['component'], 'type' => $r['type'], 'item_id' => $r['item_id'], 'secondary_item_id' => $r['secondary_item_id'], 'recorded_time' => $r['recorded_time'], 'hide_sitewide' => $r['hide_sitewide'] ) );
 }
 
 /**
@@ -311,7 +319,6 @@ function bp_blogs_record_activity( $args = '' ) {
  * @since BuddyPress (1.0.0)
  *
  * @see bp_activity_delete() for description of parameters.
- * @global object $bp The BuddyPress global settings object.
  *
  * @param array $args {
  *     See {@link bp_activity_delete()} for complete description of arguments.
@@ -321,31 +328,22 @@ function bp_blogs_record_activity( $args = '' ) {
  * }
  * @return bool True on success, false on failure.
  */
-function bp_blogs_delete_activity( $args = true ) {
-	global $bp;
+function bp_blogs_delete_activity( $args = '' ) {
 
 	// Bail if activity is not active
-	if ( ! bp_is_active( 'activity' ) )
+	if ( ! bp_is_active( 'activity' ) ) {
 		return false;
+	}
 
-	$defaults = array(
+	$r = bp_parse_args( $args, array(
 		'item_id'           => false,
-		'component'         => $bp->blogs->id,
+		'component'         => buddypress()->blogs->id,
 		'type'              => false,
 		'user_id'           => false,
 		'secondary_item_id' => false
-	);
-
-	$params = wp_parse_args( $args, $defaults );
-	extract( $params, EXTR_SKIP );
-
-	bp_activity_delete_by_item_id( array(
-		'item_id'           => $item_id,
-		'component'         => $component,
-		'type'              => $type,
-		'user_id'           => $user_id,
-		'secondary_item_id' => $secondary_item_id
 	) );
+
+	bp_activity_delete_by_item_id( $r );
 }
 
 /**
@@ -646,16 +644,86 @@ add_action( 'bp_activity_before_save', 'bp_blogs_sync_activity_edit_to_post_comm
  * @since BuddyPress (2.0.0)
  *
  * @param int $post_id The post ID
- * @param array $statuses Array of comment statuses. The key is comment ID, the
+ * @param array $comments Array of comment statuses. The key is comment ID, the
  *        value is the $comment->comment_approved value.
  */
-function bp_blogs_remove_activity_meta_for_trashed_comments( $post_id, $statuses ) {
-	foreach ( $statuses as $comment_id => $comment_approved ) {
-		delete_comment_meta( $comment_id, 'bp_activity_comment_id' );
+function bp_blogs_remove_activity_meta_for_trashed_comments( $post_id = 0, $comments = array() ) {
+	if ( ! empty( $comments ) ) {
+		foreach ( array_keys( $comments ) as $comment_id ) {
+			delete_comment_meta( $comment_id, 'bp_activity_comment_id' );
+		}
 	}
 }
 add_action( 'trashed_post_comments', 'bp_blogs_remove_activity_meta_for_trashed_comments', 10, 2 );
 
+/**
+ * Filter 'new_blog_comment' bp_has_activities() loop to include new- and old-style blog activity comment items.
+ *
+ * In BuddyPress 2.0, the schema for storing activity items related to blog
+ * posts changed. Instead creating new top-level 'new_blog_comment' activity
+ * items, blog comments are recorded in the activity stream as comments on the
+ * 'new_blog_post' activity items corresponding to the parent post. This filter
+ * ensures that the 'new_blog_comment' filter in bp_has_activities() (which
+ * powers the 'Comments' filter in the activity directory dropdown) includes
+ * both old-style and new-style activity comments.
+ *
+ * This implementation involves filtering the activity queries directly, and
+ * should be considered a stopgap. The proper solution would involve enabling
+ * multiple query condition clauses, connected by an OR, in the bp_has_activities()
+ * API.
+ *
+ * @since BuddyPress (2.1.0)
+ *
+ * @param array $args Arguments passed from bp_parse_args() in bp_has_activities().
+ * @return array $args
+ */
+function bp_blogs_new_blog_comment_query_backpat( $args ) {
+	// Bail if this is not a 'new_blog_comment' query
+	if ( 'new_blog_comment' !== $args['action'] ) {
+		return $args;
+	}
+
+	// display_comments=stream is required to show new-style
+	// 'activity_comment' items inline
+	$args['display_comments'] = 'stream';
+
+	// For the remaining clauses, we filter the SQL query directly
+	add_filter( 'bp_activity_paged_activities_sql', '_bp_blogs_new_blog_comment_query_backpat_filter' );
+	add_filter( 'bp_activity_total_activities_sql', '_bp_blogs_new_blog_comment_query_backpat_filter' );
+
+	// Return the original arguments
+	return $args;
+}
+add_filter( 'bp_after_has_activities_parse_args', 'bp_blogs_new_blog_comment_query_backpat' );
+
+/**
+ * Filter activity SQL to include new- and old-style 'new_blog_comment' activity items.
+ *
+ * @since BuddyPress (2.1.0)
+ *
+ * @access private
+ * @see bp_blogs_new_blog_comment_query_backpat()
+ *
+ * @param string $query SQL query as assembled in BP_Activity_Activity::get().
+ * @return string $query Modified SQL query.
+ */
+function _bp_blogs_new_blog_comment_query_backpat_filter( $query ) {
+	$bp = buddypress();
+
+	// The query passed to the filter is for old-style 'new_blog_comment'
+	// items. We include new-style 'activity_comment' items by running a
+	// subquery inside of a large OR clause.
+	$activity_comment_subquery = "SELECT a.id FROM {$bp->activity->table_name} a INNER JOIN {$bp->activity->table_name_meta} am ON (a.id = am.activity_id) WHERE am.meta_key = 'bp_blogs_post_comment_id' AND a.type = 'activity_comment'";
+
+	// WHERE ( [original WHERE clauses] OR a.id IN (activity_comment subquery) )
+	$query = preg_replace( '|WHERE (.*?) ORDER|', 'WHERE ( ( $1 ) OR ( a.id IN ( ' . $activity_comment_subquery . ' ) ) ) ORDER', $query );
+
+	// Don't run this on future queries
+	remove_filter( current_filter(), '_bp_blogs_new_blog_comment_query_backpat_filter' );
+
+	return $query;
+}
+
 /**
  * Utility function to set up some variables for use in the activity loop.
  *
@@ -842,10 +910,16 @@ add_filter( 'bp_activity_can_comment_reply', 'bp_blogs_can_comment_reply', 10, 2
  * @param string $retval The activity comment permalink
  * @return string
  */
-function bp_blogs_activity_comment_permalink( $retval ) {
+function bp_blogs_activity_comment_permalink( $retval = '' ) {
 	global $activities_template;
 
-	if ( isset( buddypress()->blogs->allow_comments[$activities_template->activity->current_comment->item_id] ) ){
+	// Get the current comment ID
+	$item_id = isset( $activities_template->activity->current_comment->item_id )
+		? $activities_template->activity->current_comment->item_id
+		: false;
+
+	// Maybe adjust the link if item ID exists
+	if ( ( false !== $item_id ) && isset( buddypress()->blogs->allow_comments[ $item_id ] ) ) {
 		$retval = $activities_template->activity->current_comment->primary_link;
 	}
 
diff --git a/wp-content/plugins/buddypress/bp-blogs/bp-blogs-classes.php b/wp-content/plugins/buddypress/bp-blogs/bp-blogs-classes.php
index 956fbb82e..693265b62 100644
--- a/wp-content/plugins/buddypress/bp-blogs/bp-blogs-classes.php
+++ b/wp-content/plugins/buddypress/bp-blogs/bp-blogs-classes.php
@@ -156,9 +156,10 @@ class BP_Blogs_Blog {
 		}
 
 		if ( !empty( $search_terms ) ) {
-			$filter = esc_sql( like_escape( $search_terms ) );
-			$paged_blogs = $wpdb->get_results( "SELECT b.blog_id, b.user_id as admin_user_id, u.user_email as admin_user_email, wb.domain, wb.path, bm.meta_value as last_activity, bm2.meta_value as name FROM {$bp->blogs->table_name} b, {$bp->blogs->table_name_blogmeta} bm, {$bp->blogs->table_name_blogmeta} bm2, {$wpdb->base_prefix}blogs wb, {$wpdb->users} u WHERE b.blog_id = wb.blog_id AND b.user_id = u.ID AND b.blog_id = bm.blog_id AND b.blog_id = bm2.blog_id AND wb.archived = '0' AND wb.spam = 0 AND wb.mature = 0 AND wb.deleted = 0 {$hidden_sql} AND bm.meta_key = 'last_activity' AND bm2.meta_key = 'name' AND bm2.meta_value LIKE '%%$filter%%' {$user_sql} {$include_sql} GROUP BY b.blog_id {$order_sql} {$pag_sql}" );
-			$total_blogs = $wpdb->get_var( "SELECT COUNT(DISTINCT b.blog_id) FROM {$bp->blogs->table_name} b, {$wpdb->base_prefix}blogs wb, {$bp->blogs->table_name_blogmeta} bm, {$bp->blogs->table_name_blogmeta} bm2 WHERE b.blog_id = wb.blog_id AND bm.blog_id = b.blog_id AND bm2.blog_id = b.blog_id AND wb.archived = '0' AND wb.spam = 0 AND wb.mature = 0 AND wb.deleted = 0 {$hidden_sql} AND bm.meta_key = 'name' AND bm2.meta_key = 'description' AND ( bm.meta_value LIKE '%%$filter%%' || bm2.meta_value LIKE '%%$filter%%' ) {$user_sql} {$include_sql}" );
+			$search_terms_like = '%' . bp_esc_like( $search_terms ) . '%';
+			$search_terms_sql  = $wpdb->prepare( 'bm2.meta_value LIKE %s', $search_terms_like );
+			$paged_blogs = $wpdb->get_results( "SELECT b.blog_id, b.user_id as admin_user_id, u.user_email as admin_user_email, wb.domain, wb.path, bm.meta_value as last_activity, bm2.meta_value as name FROM {$bp->blogs->table_name} b, {$bp->blogs->table_name_blogmeta} bm, {$bp->blogs->table_name_blogmeta} bm2, {$wpdb->base_prefix}blogs wb, {$wpdb->users} u WHERE b.blog_id = wb.blog_id AND b.user_id = u.ID AND b.blog_id = bm.blog_id AND b.blog_id = bm2.blog_id AND wb.archived = '0' AND wb.spam = 0 AND wb.mature = 0 AND wb.deleted = 0 {$hidden_sql} AND bm.meta_key = 'last_activity' AND bm2.meta_key = 'name' AND {$search_terms_sql} {$user_sql} {$include_sql} GROUP BY b.blog_id {$order_sql} {$pag_sql}" );
+			$total_blogs = $wpdb->get_var( "SELECT COUNT(DISTINCT b.blog_id) FROM {$bp->blogs->table_name} b, {$wpdb->base_prefix}blogs wb, {$bp->blogs->table_name_blogmeta} bm, {$bp->blogs->table_name_blogmeta} bm2 WHERE b.blog_id = wb.blog_id AND bm.blog_id = b.blog_id AND bm2.blog_id = b.blog_id AND wb.archived = '0' AND wb.spam = 0 AND wb.mature = 0 AND wb.deleted = 0 {$hidden_sql} AND bm.meta_key = 'name' AND bm2.meta_key = 'description' AND {$search_terms_sql} {$user_sql} {$include_sql}" );
 		} else {
 			$paged_blogs = $wpdb->get_results( "SELECT b.blog_id, b.user_id as admin_user_id, u.user_email as admin_user_email, wb.domain, wb.path, bm.meta_value as last_activity, bm2.meta_value as name FROM {$bp->blogs->table_name} b, {$bp->blogs->table_name_blogmeta} bm, {$bp->blogs->table_name_blogmeta} bm2, {$wpdb->base_prefix}blogs wb, {$wpdb->users} u WHERE b.blog_id = wb.blog_id AND b.user_id = u.ID AND b.blog_id = bm.blog_id AND b.blog_id = bm2.blog_id {$user_sql} AND wb.archived = '0' AND wb.spam = 0 AND wb.mature = 0 AND wb.deleted = 0 {$hidden_sql} AND bm.meta_key = 'last_activity' AND bm2.meta_key = 'name' {$include_sql} GROUP BY b.blog_id {$order_sql} {$pag_sql}" );
 			$total_blogs = $wpdb->get_var( "SELECT COUNT(DISTINCT b.blog_id) FROM {$bp->blogs->table_name} b, {$wpdb->base_prefix}blogs wb WHERE b.blog_id = wb.blog_id {$user_sql} AND wb.archived = '0' AND wb.spam = 0 AND wb.mature = 0 AND wb.deleted = 0 {$include_sql} {$hidden_sql}" );
@@ -342,7 +343,8 @@ class BP_Blogs_Blog {
 	public static function search_blogs( $filter, $limit = null, $page = null ) {
 		global $wpdb, $bp;
 
-		$filter = esc_sql( like_escape( $filter ) );
+		$search_terms_like = '%' . bp_esc_like( $filter ) . '%';
+		$search_terms_sql  = $wpdb->prepare( 'bm.meta_value LIKE %s', $search_terms_like );
 
 		$hidden_sql = '';
 		if ( !bp_current_user_can( 'bp_moderate' ) )
@@ -353,8 +355,8 @@ class BP_Blogs_Blog {
 			$pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) );
 		}
 
-		$paged_blogs = $wpdb->get_results( "SELECT DISTINCT bm.blog_id FROM {$bp->blogs->table_name_blogmeta} bm LEFT JOIN {$wpdb->base_prefix}blogs wb ON bm.blog_id = wb.blog_id WHERE ( ( bm.meta_key = 'name' OR bm.meta_key = 'description' ) AND bm.meta_value LIKE '%%$filter%%' ) {$hidden_sql} AND wb.mature = 0 AND wb.spam = 0 AND wb.archived = '0' AND wb.deleted = 0 ORDER BY meta_value ASC{$pag_sql}" );
-		$total_blogs = $wpdb->get_var( "SELECT COUNT(DISTINCT bm.blog_id) FROM {$bp->blogs->table_name_blogmeta} bm LEFT JOIN {$wpdb->base_prefix}blogs wb ON bm.blog_id = wb.blog_id WHERE ( ( bm.meta_key = 'name' OR bm.meta_key = 'description' ) AND bm.meta_value LIKE '%%$filter%%' ) {$hidden_sql} AND wb.mature = 0 AND wb.spam = 0 AND wb.archived = '0' AND wb.deleted = 0 ORDER BY meta_value ASC" );
+		$paged_blogs = $wpdb->get_results( "SELECT DISTINCT bm.blog_id FROM {$bp->blogs->table_name_blogmeta} bm LEFT JOIN {$wpdb->base_prefix}blogs wb ON bm.blog_id = wb.blog_id WHERE ( ( bm.meta_key = 'name' OR bm.meta_key = 'description' ) AND {$search_terms_sql} ) {$hidden_sql} AND wb.mature = 0 AND wb.spam = 0 AND wb.archived = '0' AND wb.deleted = 0 ORDER BY meta_value ASC{$pag_sql}" );
+		$total_blogs = $wpdb->get_var( "SELECT COUNT(DISTINCT bm.blog_id) FROM {$bp->blogs->table_name_blogmeta} bm LEFT JOIN {$wpdb->base_prefix}blogs wb ON bm.blog_id = wb.blog_id WHERE ( ( bm.meta_key = 'name' OR bm.meta_key = 'description' ) AND {$search_terms_sql} ) {$hidden_sql} AND wb.mature = 0 AND wb.spam = 0 AND wb.archived = '0' AND wb.deleted = 0 ORDER BY meta_value ASC" );
 
 		return array( 'blogs' => $paged_blogs, 'total' => $total_blogs );
 	}
@@ -403,17 +405,19 @@ class BP_Blogs_Blog {
 	public static function get_by_letter( $letter, $limit = null, $page = null ) {
 		global $bp, $wpdb;
 
-		$letter = esc_sql( like_escape( $letter ) );
+		$letter_like = '%' . bp_esc_like( $letter ) . '%';
+		$letter_sql  = $wpdb->prepare( 'bm.meta_value LIKE %s', $letter_like );
 
 		$hidden_sql = '';
 		if ( !bp_current_user_can( 'bp_moderate' ) )
 			$hidden_sql = "AND wb.public = 1";
 
+		$pag_sql = '';
 		if ( $limit && $page )
 			$pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) );
 
-		$paged_blogs = $wpdb->get_results( "SELECT DISTINCT bm.blog_id FROM {$bp->blogs->table_name_blogmeta} bm LEFT JOIN {$wpdb->base_prefix}blogs wb ON bm.blog_id = wb.blog_id WHERE bm.meta_key = 'name' AND bm.meta_value LIKE '$letter%%' {$hidden_sql} AND wb.mature = 0 AND wb.spam = 0 AND wb.archived = '0' AND wb.deleted = 0 ORDER BY bm.meta_value ASC{$pag_sql}" );
-		$total_blogs = $wpdb->get_var( "SELECT COUNT(DISTINCT bm.blog_id) FROM {$bp->blogs->table_name_blogmeta} bm LEFT JOIN {$wpdb->base_prefix}blogs wb ON bm.blog_id = wb.blog_id WHERE bm.meta_key = 'name' AND bm.meta_value LIKE '$letter%%' {$hidden_sql} AND wb.mature = 0 AND wb.spam = 0 AND wb.archived = '0' AND wb.deleted = 0 ORDER BY bm.meta_value ASC" );
+		$paged_blogs = $wpdb->get_results( "SELECT DISTINCT bm.blog_id FROM {$bp->blogs->table_name_blogmeta} bm LEFT JOIN {$wpdb->base_prefix}blogs wb ON bm.blog_id = wb.blog_id WHERE bm.meta_key = 'name' AND {$letter_sql} {$hidden_sql} AND wb.mature = 0 AND wb.spam = 0 AND wb.archived = '0' AND wb.deleted = 0 ORDER BY bm.meta_value ASC{$pag_sql}" );
+		$total_blogs = $wpdb->get_var( "SELECT COUNT(DISTINCT bm.blog_id) FROM {$bp->blogs->table_name_blogmeta} bm LEFT JOIN {$wpdb->base_prefix}blogs wb ON bm.blog_id = wb.blog_id WHERE bm.meta_key = 'name' AND {$letter_sql} {$hidden_sql} AND wb.mature = 0 AND wb.spam = 0 AND wb.archived = '0' AND wb.deleted = 0 ORDER BY bm.meta_value ASC" );
 
 		return array( 'blogs' => $paged_blogs, 'total' => $total_blogs );
 	}
diff --git a/wp-content/plugins/buddypress/bp-blogs/bp-blogs-filters.php b/wp-content/plugins/buddypress/bp-blogs/bp-blogs-filters.php
index 07ad0e306..9cf0c92a7 100644
--- a/wp-content/plugins/buddypress/bp-blogs/bp-blogs-filters.php
+++ b/wp-content/plugins/buddypress/bp-blogs/bp-blogs-filters.php
@@ -36,3 +36,19 @@ function bp_blogs_creation_location( $url ) {
 	return apply_filters( 'bp_blogs_creation_location', trailingslashit( bp_get_root_domain() . '/' . bp_get_blogs_root_slug() . '/create', $url ) );
 }
 add_filter( 'wp_signup_location', 'bp_blogs_creation_location' );
+
+/**
+ * Only select comments by ID instead of all fields when using get_comments().
+ *
+ * @since BuddyPress (2.1.0)
+ *
+ * @see bp_blogs_update_post()
+ *
+ * @param array Current SQL clauses in array format
+ * @return array
+ */
+function bp_blogs_comments_clauses_select_by_id( $retval ) {
+	$retval['fields'] = 'comment_ID';
+	
+	return $retval;
+}
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-blogs/bp-blogs-functions.php b/wp-content/plugins/buddypress/bp-blogs/bp-blogs-functions.php
index 384693ab4..41f62f62a 100644
--- a/wp-content/plugins/buddypress/bp-blogs/bp-blogs-functions.php
+++ b/wp-content/plugins/buddypress/bp-blogs/bp-blogs-functions.php
@@ -44,57 +44,110 @@ function bp_blogs_has_directory() {
  */
 function bp_blogs_get_blogs( $args = '' ) {
 
-	$defaults = array(
-		'type'              => 'active', // active, alphabetical, newest, or random
-		'user_id'           => false,    // Pass a user_id to limit to only blogs that this user has privilages higher than subscriber on
-		'include_blog_ids'  => false,
-		'search_terms'      => false,    // Limit to blogs that match these search terms
+	// Parse query arguments
+	$r = bp_parse_args( $args, array(
+		'type'              => 'active', // 'active', 'alphabetical', 'newest', or 'random'
+		'include_blog_ids'  => false,    // Array of blog IDs to include
+		'user_id'           => false,    // Limit to blogs this user can post to
+		'search_terms'      => false,    // Limit to blogs matching these search terms
 		'per_page'          => 20,       // The number of results to return per page
 		'page'              => 1,        // The page to return if limiting per page
-		'update_meta_cache' => true,
+		'update_meta_cache' => true      // Whether to pre-fetch blogmeta
+	), 'blogs_get_blogs' );
+
+	// Get the blogs
+	$blogs = BP_Blogs_Blog::get(
+		$r['type'],
+		$r['per_page'],
+		$r['page'],
+		$r['user_id'],
+		$r['search_terms'],
+		$r['update_meta_cache'],
+		$r['include_blog_ids']
 	);
 
-	$params = wp_parse_args( $args, $defaults );
-	extract( $params, EXTR_SKIP );
-
-	return apply_filters( 'bp_blogs_get_blogs', BP_Blogs_Blog::get( $type, $per_page, $page, $user_id, $search_terms, $update_meta_cache, $include_blog_ids ), $params );
+	// Filter and return
+	return apply_filters( 'bp_blogs_get_blogs', $blogs, $r );
 }
 
 /**
  * Populate the BP blogs table with existing blogs.
  *
- * @global object $bp BuddyPress global settings
+ * @since BuddyPress (1.0.0)
+ *
  * @global object $wpdb WordPress database object
  * @uses get_users()
  * @uses bp_blogs_record_blog()
  */
 function bp_blogs_record_existing_blogs() {
-	global $bp, $wpdb;
-
-	// Truncate user blogs table and re-record.
-	$wpdb->query( "DELETE FROM {$bp->blogs->table_name} WHERE 1=1" );
+	global $wpdb;
 
+	// Query for all sites in network
 	if ( is_multisite() ) {
-		$blog_ids = $wpdb->get_col( $wpdb->prepare( "SELECT blog_id FROM {$wpdb->base_prefix}blogs WHERE mature = 0 AND spam = 0 AND deleted = 0 AND site_id = %d", $wpdb->siteid ) );
+
+		// Get blog ID's if not a large network
+		if ( ! wp_is_large_network() ) {
+			$blog_ids = $wpdb->get_col( $wpdb->prepare( "SELECT blog_id FROM {$wpdb->base_prefix}blogs WHERE mature = 0 AND spam = 0 AND deleted = 0 AND site_id = %d", $wpdb->siteid ) );
+
+			// If error running this query, set blog ID's to false
+			if ( is_wp_error( $blog_ids ) ) {
+				$blog_ids = false;
+			}
+
+		// Large networks are not currently supported
+		} else {
+			$blog_ids = false;
+		}
+
+	// Record a single site
 	} else {
-		$blog_ids = 1;
+		$blog_ids = $wpdb->blogid;
 	}
 
-	if ( !empty( $blog_ids ) ) {
-		foreach( (array) $blog_ids as $blog_id ) {
-			$users       = get_users( array( 'blog_id' => $blog_id, 'fields' => 'ID' ) );
-			$subscribers = get_users( array( 'blog_id' => $blog_id, 'fields' => 'ID', 'role' => 'subscriber' ) );
-
-			if ( !empty( $users ) ) {
-				foreach ( (array) $users as $user ) {
-					// Don't record blogs for subscribers
-					if ( !in_array( $user, $subscribers ) ) {
-						bp_blogs_record_blog( $blog_id, $user, true );
-					}
-				}
-			}
+	// Bail if there are no blogs in the network
+	if ( empty( $blog_ids ) ) {
+		return false;
+	}
+
+	// Get BuddyPress
+	$bp = buddypress();
+
+	// Truncate user blogs table
+	$truncate = $wpdb->query( "TRUNCATE {$bp->blogs->table_name}" );
+	if ( is_wp_error( $truncate ) ) {
+		return false;
+	}
+
+	// Truncate user blogsmeta table
+	$truncate = $wpdb->query( "TRUNCATE {$bp->blogs->table_name_blogmeta}" );
+	if ( is_wp_error( $truncate ) ) {
+		return false;
+	}
+
+	// Loop through users of blogs and record the relationship
+	foreach ( (array) $blog_ids as $blog_id ) {
+
+		// Ensure that the cache is clear after the table TRUNCATE above
+		wp_cache_delete( $blog_id, 'blog_meta' );
+
+		// Get all users
+		$users = get_users( array(
+			'blog_id' => $blog_id
+		) );
+
+		// Continue on if no users exist for this site (how did this happen?)
+		if ( empty( $users ) ) {
+			continue;
+		}
+
+		// Loop through users and record their relationship to this blog
+		foreach ( (array) $users as $user ) {
+			bp_blogs_add_user_to_blog( $user->ID, false, $blog_id );
 		}
 	}
+
+	// No errors
+	return true;
 }
 
 /**
@@ -295,7 +348,7 @@ add_action( 'update_option_close_comments_for_old_posts', 'bp_blogs_update_optio
  *        unused here.
  * @param string $newvalue Value to change meta to.
  */
-function bp_blogs_update_option_close_close_comments_days_old( $oldvalue, $newvalue ) {
+function bp_blogs_update_option_close_comments_days_old( $oldvalue, $newvalue ) {
 	global $wpdb;
 
 	bp_blogs_update_blogmeta( $wpdb->blogid, 'close_comments_days_old', $newvalue );
@@ -470,7 +523,7 @@ function bp_blogs_record_post( $post_id, $post, $user_id = 0 ) {
 
 			$activity_content = $post->post_content;
 
-			bp_blogs_record_activity( array(
+			$activity_id = bp_blogs_record_activity( array(
 				'user_id'           => (int) $post->post_author,
 				'content'           => apply_filters( 'bp_blogs_activity_new_post_content',      $activity_content, $post, $post_permalink ),
 				'primary_link'      => apply_filters( 'bp_blogs_activity_new_post_primary_link', $post_permalink,   $post_id               ),
@@ -478,7 +531,13 @@ function bp_blogs_record_post( $post_id, $post, $user_id = 0 ) {
 				'item_id'           => $blog_id,
 				'secondary_item_id' => $post_id,
 				'recorded_time'     => $post->post_date_gmt,
-			));
+			) );
+
+			// save post title in activity meta
+			if ( bp_is_active( 'activity' ) ) {
+				bp_activity_update_meta( $activity_id, 'post_title', $post->post_title );
+				bp_activity_update_meta( $activity_id, 'post_url',   $post_permalink );
+			}
 		}
 
 		// Update the blogs last activity
@@ -518,9 +577,77 @@ function bp_blogs_update_post( $post ) {
 
 	// update the activity entry
 	$activity = new BP_Activity_Activity( $activity_id );
-	$activity->content = $post->post_content;
+
+	if ( ! empty( $post->post_content ) ) {
+		// Make sure to update the thumbnail image
+		$post_content = bp_activity_thumbnail_content_images( $post->post_content, $activity->primary_link, (array) $activity );
+
+		// Make sure to apply the blop post excerpt
+		$activity->content = apply_filters( 'bp_blogs_record_activity_content', bp_create_excerpt( $post_content ), $post_content, (array) $activity );
+	}
+
+	// Save the updated activity
 	$activity->save();
 
+	// update post title in activity meta
+	$existing_title = bp_activity_get_meta( $activity_id, 'post_title' );
+	if ( $post->post_title !== $existing_title ) {
+		bp_activity_update_meta( $activity_id, 'post_title', $post->post_title );
+
+		// now update activity meta for post comments... sigh
+		add_filter( 'comments_clauses', 'bp_blogs_comments_clauses_select_by_id' );
+		$comments = get_comments( array( 'post_id' => $post->ID ) );
+		remove_filter( 'comments_clauses', 'bp_blogs_comments_clauses_select_by_id' );
+
+		if ( ! empty( $comments ) ) {
+			$activity_ids = array();
+			$comment_ids  = wp_list_pluck( $comments, 'comment_ID' );
+
+			// setup activity args
+			$args = array(
+				'update_meta_cache' => false,
+				'show_hidden'       => true,
+				'per_page'          => 99999,
+			);
+
+			// query for old-style "new_blog_comment" activity items
+			$args['filter'] = array(
+				'object'       => buddypress()->blogs->id,
+				'action'       => 'new_blog_comment',
+				'secondary_id' => implode( ',', $comment_ids ),
+			);
+
+			$activities = bp_activity_get( $args );
+			if ( ! empty( $activities['activities'] ) ) {
+				$activity_ids = (array) wp_list_pluck( $activities['activities'], 'id' );
+			}
+
+			// query for activity comments connected to a blog post
+			unset( $args['filter'] );
+			$args['meta_query'] = array( array(
+				'key'     => 'bp_blogs_post_comment_id',
+				'value'   => $comment_ids,
+				'compare' => 'IN',
+			) );
+			$args['type'] = 'activity_comment';
+			$args['display_comments'] = 'stream';
+
+			$activities = bp_activity_get( $args );
+			if ( ! empty( $activities['activities'] ) ) {
+				$activity_ids = array_merge( $activity_ids, (array) wp_list_pluck( $activities['activities'], 'id' ) );
+			}
+
+			// update activity meta for all found activity items
+			if ( ! empty( $activity_ids ) ) {
+				foreach ( $activity_ids as $aid ) {
+					bp_activity_update_meta( $aid, 'post_title', $post->post_title );
+				}
+			}
+
+			unset( $activities, $activity_ids, $comment_ids, $comments );
+		}
+	}
+
 	// add post comment status to activity meta if closed
 	if( 'closed' == $post->comment_status ) {
 		bp_activity_update_meta( $activity_id, 'post_comment_status', $post->comment_status );
@@ -618,7 +745,11 @@ function bp_blogs_record_comment( $comment_id, $is_approved = true ) {
 			$args['secondary_item_id'] = $comment_id;
 
 			// record the activity entry
-			bp_blogs_record_activity( $args );
+			$activity_id = bp_blogs_record_activity( $args );
+
+			// add some post info in activity meta
+			bp_activity_update_meta( $activity_id, 'post_title', $recorded_comment->post->post_title );
+			bp_activity_update_meta( $activity_id, 'post_url',   add_query_arg( 'p', $recorded_comment->post->ID, home_url( '/' ) ) );
 
 		// record comment as BP activity comment under the parent 'new_blog_post'
 		// activity item
@@ -682,6 +813,8 @@ function bp_blogs_record_comment( $comment_id, $is_approved = true ) {
 				if ( empty( $args['id'] ) ) {
 					// add meta to activity comment
 					bp_activity_update_meta( $comment_activity_id, 'bp_blogs_post_comment_id', $comment_id );
+					bp_activity_update_meta( $comment_activity_id, 'post_title', $recorded_comment->post->post_title );
+					bp_activity_update_meta( $comment_activity_id, 'post_url', add_query_arg( 'p', $recorded_comment->post->ID, home_url( '/' ) ) );
 
 					// add meta to comment
 					add_comment_meta( $comment_id, 'bp_activity_comment_id', $comment_activity_id );
@@ -705,40 +838,77 @@ add_action( 'edit_comment', 'bp_blogs_record_comment', 10    );
  * set/changed ('add_user_to_blog', 'profile_update', 'user_register'). It
  * parses the changes, and records them as necessary in the BP blog tracker.
  *
- * BuddyPress does not track blogs for Subscribers.
+ * BuddyPress does not track blogs for users with the 'subscriber' role by
+ * default, though as of 2.1.0 you can filter 'bp_blogs_get_allowed_roles' to
+ * modify this behavior.
+ *
+ * @param int         $user_id The ID of the user
+ * @param string|bool $role    User's WordPress role for this blog ID
+ * @param int         $blog_id Blog ID user is being added to
  *
- * @param int $user_id The ID of the user.
- * @param string|bool $role The WP role being assigned to the user
- *        ('subscriber', 'contributor', 'author', 'editor', 'administrator', or
- *        a custom role). Defaults to false.
- * @param int $blog_id Default: the current blog ID.
  * @return bool|null False on failure.
  */
 function bp_blogs_add_user_to_blog( $user_id, $role = false, $blog_id = 0 ) {
 	global $wpdb;
 
+	// If no blog ID was passed, use the root blog ID
 	if ( empty( $blog_id ) ) {
 		$blog_id = isset( $wpdb->blogid ) ? $wpdb->blogid : bp_get_root_blog_id();
 	}
 
+	// If no role was passed, try to find the blog role
 	if ( empty( $role ) ) {
-		$key = $wpdb->get_blog_prefix( $blog_id ). 'capabilities';
 
-		$roles = bp_get_user_meta( $user_id, $key, true );
+		// Get user capabilities
+		$key        = $wpdb->get_blog_prefix( $blog_id ). 'capabilities';
+		$user_roles = array_keys( (array) bp_get_user_meta( $user_id, $key, true ) );
+
+		// User has roles so lets
+		if ( ! empty( $user_roles ) ) {
+
+			// Get blog roles
+			$blog_roles      = array_keys( bp_get_current_blog_roles() );
+
+			// Look for blog only roles of the user
+			$intersect_roles = array_intersect( $user_roles, $blog_roles );
 
-		if ( is_array( $roles ) )
-			$role = array_search( 1, $roles );
-		else
-			return false;
+			// If there's a role in the array, use the first one. This isn't
+			// very smart, but since roles aren't exactly hierarchical, and
+			// WordPress does not yet have a UI for multiple user roles, it's
+			// fine for now.
+			if ( ! empty( $intersect_roles ) ) {
+				$role = array_shift( $intersect_roles );
+			}
+		}
+	}
+
+	// Bail if no role was found or role is not in the allowed roles array
+	if ( empty( $role ) || ! in_array( $role, bp_blogs_get_allowed_roles() ) ) {
+		return false;
 	}
 
-	if ( $role != 'subscriber' )
-		bp_blogs_record_blog( $blog_id, $user_id, true );
+	// Record the blog activity for this user being added to this blog
+	bp_blogs_record_blog( $blog_id, $user_id, true );
 }
 add_action( 'add_user_to_blog', 'bp_blogs_add_user_to_blog', 10, 3 );
 add_action( 'profile_update',   'bp_blogs_add_user_to_blog'        );
 add_action( 'user_register',    'bp_blogs_add_user_to_blog'        );
 
+/**
+ * The allowed blog roles a member must have to be recorded into the
+ * `bp_user_blogs` pointer table.
+ *
+ * This added and was made filterable in BuddyPress 2.1.0 to make it easier
+ * to extend the functionality of the Blogs component.
+ *
+ * @since BuddyPress (2.1.0)
+ *
+ * @return string
+ */
+function bp_blogs_get_allowed_roles() {
+	return apply_filters( 'bp_blogs_get_allowed_roles', array( 'contributor', 'author', 'editor', 'administrator' ) );
+}
+
 /**
  * Remove a blog-user pair from BP's blog tracker.
  *
@@ -748,8 +918,9 @@ add_action( 'user_register',    'bp_blogs_add_user_to_blog'        );
 function bp_blogs_remove_user_from_blog( $user_id, $blog_id = 0 ) {
 	global $wpdb;
 
-	if ( empty( $blog_id ) )
+	if ( empty( $blog_id ) ) {
 		$blog_id = $wpdb->blogid;
+	}
 
 	bp_blogs_remove_blog_for_user( $user_id, $blog_id );
 }
@@ -1050,16 +1221,24 @@ function bp_blogs_total_blogs() {
 /**
  * Get the total number of blogs being tracked by BP for a specific user.
  *
+ * @since BuddyPress (1.2.0)
+ *
  * @param int $user_id ID of the user being queried. Default: on a user page,
  *        the displayed user. Otherwise, the logged-in user.
  * @return int $count Total blog count for the user.
  */
 function bp_blogs_total_blogs_for_user( $user_id = 0 ) {
-
-	if ( empty( $user_id ) )
+	if ( empty( $user_id ) ) {
 		$user_id = ( bp_displayed_user_id() ) ? bp_displayed_user_id() : bp_loggedin_user_id();
+	}
+
+	// no user ID? do not attempt to look at cache
+	if ( empty( $user_id ) ) {
+		return 0;
+	}
 
-	if ( !$count = wp_cache_get( 'bp_total_blogs_for_user_' . $user_id, 'bp' ) ) {
+	$count = wp_cache_get( 'bp_total_blogs_for_user_' . $user_id, 'bp' );
+	if ( false === $count ) {
 		$count = BP_Blogs_Blog::total_blog_count_for_user( $user_id );
 		wp_cache_set( 'bp_total_blogs_for_user_' . $user_id, $count, 'bp' );
 	}
@@ -1245,7 +1424,7 @@ function bp_blogs_update_blogmeta( $blog_id, $meta_key, $meta_value, $prev_value
  * @param int $blog_id ID of the blog.
  * @param string $meta_key Metadata key.
  * @param mixed $meta_value Metadata value.
- * @param bool $unique. Optional. Whether to enforce a single metadata value
+ * @param bool $unique Optional. Whether to enforce a single metadata value
  *        for the given key. If true, and the object already has a value for
  *        the key, no change will be made. Default: false.
  * @return int|bool The meta ID on successful update, false on failure.
diff --git a/wp-content/plugins/buddypress/bp-blogs/bp-blogs-loader.php b/wp-content/plugins/buddypress/bp-blogs/bp-blogs-loader.php
index 89cf2a16e..112cc8049 100644
--- a/wp-content/plugins/buddypress/bp-blogs/bp-blogs-loader.php
+++ b/wp-content/plugins/buddypress/bp-blogs/bp-blogs-loader.php
@@ -1,9 +1,11 @@
 <?php
 
 /**
- * BuddyPress Blogs Streams Loader
+ * BuddyPress Blogs Loader
  *
- * An blogs stream component, for users, groups, and blog tracking.
+ * The blogs component tracks posts and comments to member activity streams,
+ * shows blogs the member can post to in their profiles, and caches useful
+ * information from those blogs to make quering blogs in bulk more performant.
  *
  * @package BuddyPress
  * @subpackage Blogs Core
@@ -22,7 +24,7 @@ class BP_Blogs_Component extends BP_Component {
 	public function __construct() {
 		parent::start(
 			'blogs',
-			__( 'Site Tracking', 'buddypress' ),
+			__( 'Site Directory', 'buddypress' ),
 			buddypress()->plugin_dir,
 			array(
 				'adminbar_myaccount_order' => 30
@@ -45,8 +47,9 @@ class BP_Blogs_Component extends BP_Component {
 	public function setup_globals( $args = array() ) {
 		$bp = buddypress();
 
-		if ( !defined( 'BP_BLOGS_SLUG' ) )
+		if ( ! defined( 'BP_BLOGS_SLUG' ) ) {
 			define ( 'BP_BLOGS_SLUG', $this->id );
+		}
 
 		// Global tables for messaging component
 		$global_tables = array(
@@ -58,8 +61,7 @@ class BP_Blogs_Component extends BP_Component {
 			'blog' => $bp->table_prefix . 'bp_user_blogs_blogmeta',
 		);
 
-		// All globals for messaging component.
-		// Note that global_tables is included in this array.
+		// All globals for blogs component.
 		$args = array(
 			'slug'                  => BP_BLOGS_SLUG,
 			'root_slug'             => isset( $bp->pages->blogs->slug ) ? $bp->pages->blogs->slug : BP_BLOGS_SLUG,
@@ -83,6 +85,7 @@ class BP_Blogs_Component extends BP_Component {
 	 * @param array $includes See {@link BP_Component::includes()}.
 	 */
 	public function includes( $includes = array() ) {
+
 		// Files to include
 		$includes = array(
 			'cache',
@@ -93,11 +96,11 @@ class BP_Blogs_Component extends BP_Component {
 			'filters',
 			'activity',
 			'functions',
-			'buddybar'
 		);
 
-		if ( is_multisite() )
+		if ( is_multisite() ) {
 			$includes[] = 'widgets';
+		}
 
 		// Include the files
 		parent::includes( $includes );
@@ -121,12 +124,13 @@ class BP_Blogs_Component extends BP_Component {
 		 * Although comments and posts made by users will still show on their
 		 * activity stream.
 		 */
-		if ( !is_multisite() )
+		if ( ! is_multisite() ) {
 			return false;
+		}
 
 		// Add 'Sites' to the main navigation
 		$main_nav =  array(
-			'name'                => sprintf( __( 'Sites <span>%d</span>', 'buddypress' ), bp_blogs_total_blogs_for_user() ),
+			'name'                => sprintf( __( 'Sites <span>%d</span>', 'buddypress' ), bp_get_total_blog_count_for_user() ),
 			'slug'                => $this->slug,
 			'position'            => 30,
 			'screen_function'     => 'bp_blogs_screen_my_blogs',
@@ -173,11 +177,12 @@ class BP_Blogs_Component extends BP_Component {
 
 		/**
 		 * Site/post/comment menus should not appear on single WordPress setups.
-		 * Although comments and posts made by users will still show on their
-		 * activity stream.
+		 *
+		 * Comments and posts made by users will still show in their activity.
 		 */
-		if ( !is_multisite() )
+		if ( ! is_multisite() ) {
 			return false;
+		}
 
 		// Menus for logged in user
 		if ( is_user_logged_in() ) {
diff --git a/wp-content/plugins/buddypress/bp-blogs/bp-blogs-screens.php b/wp-content/plugins/buddypress/bp-blogs/bp-blogs-screens.php
index bd62ece7d..b1ab65184 100644
--- a/wp-content/plugins/buddypress/bp-blogs/bp-blogs-screens.php
+++ b/wp-content/plugins/buddypress/bp-blogs/bp-blogs-screens.php
@@ -149,7 +149,7 @@ class BP_Blogs_Theme_Compat {
 			'post_author'    => 0,
 			'post_date'      => 0,
 			'post_content'   => '',
-			'post_type'      => 'bp_blogs',
+			'post_type'      => 'page',
 			'post_status'    => 'publish',
 			'is_page'        => true,
 			'comment_status' => 'closed'
@@ -212,7 +212,7 @@ class BP_Blogs_Theme_Compat {
 			'post_author'    => 0,
 			'post_date'      => 0,
 			'post_content'   => '',
-			'post_type'      => 'bp_group',
+			'post_type'      => 'page',
 			'post_status'    => 'publish',
 			'is_page'        => true,
 			'comment_status' => 'closed'
diff --git a/wp-content/plugins/buddypress/bp-blogs/bp-blogs-template.php b/wp-content/plugins/buddypress/bp-blogs/bp-blogs-template.php
index 7efaff034..1cd442514 100644
--- a/wp-content/plugins/buddypress/bp-blogs/bp-blogs-template.php
+++ b/wp-content/plugins/buddypress/bp-blogs/bp-blogs-template.php
@@ -90,7 +90,7 @@ class BP_Blogs_Template {
 	 * @access public
 	 * @var int
 	 */
-	var $current_blog = -1;
+	public $current_blog = -1;
 
 	/**
 	 * The number of blogs returned by the paged query.
@@ -98,7 +98,7 @@ class BP_Blogs_Template {
 	 * @access public
 	 * @var int
 	 */
-	var $blog_count;
+	public $blog_count = 0;
 
 	/**
 	 * Array of blogs located by the query..
@@ -106,7 +106,7 @@ class BP_Blogs_Template {
 	 * @access public
 	 * @var array
 	 */
-	var $blogs;
+	public $blogs = array();
 
 	/**
 	 * The blog object currently being iterated on.
@@ -114,7 +114,7 @@ class BP_Blogs_Template {
 	 * @access public
 	 * @var object
 	 */
-	var $blog;
+	public $blog;
 
 	/**
 	 * A flag for whether the loop is currently being iterated.
@@ -122,7 +122,7 @@ class BP_Blogs_Template {
 	 * @access public
 	 * @var bool
 	 */
-	var $in_the_loop;
+	public $in_the_loop = false;
 
 	/**
 	 * The page number being requested.
@@ -130,7 +130,7 @@ class BP_Blogs_Template {
 	 * @access public
 	 * @var public
 	 */
-	var $pag_page;
+	public $pag_page = 1;
 
 	/**
 	 * The number of items being requested per page.
@@ -138,7 +138,7 @@ class BP_Blogs_Template {
 	 * @access public
 	 * @var public
 	 */
-	var $pag_num;
+	public $pag_num = 20;
 
 	/**
 	 * An HTML string containing pagination links.
@@ -146,7 +146,7 @@ class BP_Blogs_Template {
 	 * @access public
 	 * @var string
 	 */
-	var $pag_links;
+	public $pag_links = '';
 
 	/**
 	 * The total number of blogs matching the query parameters.
@@ -154,7 +154,7 @@ class BP_Blogs_Template {
 	 * @access public
 	 * @var int
 	 */
-	var $total_blog_count;
+	public $total_blog_count = 0;
 
 	/**
 	 * Constructor method.
@@ -173,13 +173,16 @@ class BP_Blogs_Template {
 	 *        queried blogs.
 	 * @param array $include_blog_ids Array of blog IDs to include.
 	 */
-	function __construct( $type, $page, $per_page, $max, $user_id, $search_terms, $page_arg = 'bpage', $update_meta_cache = true, $include_blog_ids = false ) {
+	public function __construct( $type, $page, $per_page, $max, $user_id, $search_terms, $page_arg = 'bpage', $update_meta_cache = true, $include_blog_ids = false ) {
 
-		$this->pag_page = isset( $_REQUEST[$page_arg] ) ? intval( $_REQUEST[$page_arg] ) : $page;
-		$this->pag_num = isset( $_REQUEST['num'] ) ? intval( $_REQUEST['num'] ) : $per_page;
+		$this->pag_page = isset( $_REQUEST[ $page_arg ] ) ? intval( $_REQUEST[ $page_arg ] ) : $page;
+		$this->pag_num  = isset( $_REQUEST['num']       ) ? intval( $_REQUEST['num']       ) : $per_page;
 
-		if ( isset( $_REQUEST['letter'] ) && '' != $_REQUEST['letter'] ) {
+		// Backwards compatibility support for blogs by first letter
+		if ( ! empty( $_REQUEST['letter'] ) ) {
 			$this->blogs = BP_Blogs_Blog::get_by_letter( $_REQUEST['letter'], $this->pag_num, $this->pag_page );
+
+		// Typical blogs query
 		} else {
 			$this->blogs = bp_blogs_get_blogs( array(
 				'type'              => $type,
@@ -192,31 +195,35 @@ class BP_Blogs_Template {
 			) );
 		}
 
-		if ( !$max || $max >= (int) $this->blogs['total'] )
+		// Set the total blog count
+		if ( empty( $max ) || ( $max >= (int) $this->blogs['total'] ) ) {
 			$this->total_blog_count = (int) $this->blogs['total'];
-		else
+		} else {
 			$this->total_blog_count = (int) $max;
+		}
 
+		// Set the blogs array (to loop through later
 		$this->blogs = $this->blogs['blogs'];
 
-		if ( $max ) {
-			if ( $max >= count($this->blogs) ) {
-				$this->blog_count = count( $this->blogs );
-			} else {
-				$this->blog_count = (int) $max;
-			}
+		// Get the current blog count to compare maximum against
+		$blog_count = count( $this->blogs );
+
+		// Set the current blog count
+		if ( empty( $max ) || ( $max >= (int) $blog_count ) ) {
+			$this->blog_count = (int) $blog_count;
 		} else {
-			$this->blog_count = count( $this->blogs );
+			$this->blog_count = (int) $max;
 		}
 
-		if ( (int) $this->total_blog_count && (int) $this->pag_num ) {
+		// Build pagination links based on total blogs and current page number
+		if ( ! empty( $this->total_blog_count ) && ! empty( $this->pag_num ) ) {
 			$this->pag_links = paginate_links( array(
 				'base'      => add_query_arg( $page_arg, '%#%' ),
 				'format'    => '',
 				'total'     => ceil( (int) $this->total_blog_count / (int) $this->pag_num ),
 				'current'   => (int) $this->pag_page,
 				'prev_text' => _x( '&larr;', 'Blog pagination previous text', 'buddypress' ),
-				'next_text' => _x( '&rarr;', 'Blog pagination next text', 'buddypress' ),
+				'next_text' => _x( '&rarr;', 'Blog pagination next text',     'buddypress' ),
 				'mid_size'  => 1
 			) );
 		}
@@ -229,11 +236,8 @@ class BP_Blogs_Template {
 	 *
 	 * @return bool True if there are items in the loop, otherwise false.
 	 */
-	function has_blogs() {
-		if ( $this->blog_count )
-			return true;
-
-		return false;
+	public function has_blogs() {
+		return (bool) ! empty( $this->blog_count );
 	}
 
 	/**
@@ -241,9 +245,9 @@ class BP_Blogs_Template {
 	 *
 	 * @return object The next blog to iterate over.
 	 */
-	function next_blog() {
+	public function next_blog() {
 		$this->current_blog++;
-		$this->blog = $this->blogs[$this->current_blog];
+		$this->blog = $this->blogs[ $this->current_blog ];
 
 		return $this->blog;
 	}
@@ -251,7 +255,7 @@ class BP_Blogs_Template {
 	/**
 	 * Rewind the blogs and reset blog index.
 	 */
-	function rewind_blogs() {
+	public function rewind_blogs() {
 		$this->current_blog = -1;
 		if ( $this->blog_count > 0 ) {
 			$this->blog = $this->blogs[0];
@@ -269,11 +273,11 @@ class BP_Blogs_Template {
 	 *
 	 * @return bool True if there are more blogs to show, otherwise false.
 	 */
-	function blogs() {
-		if ( $this->current_blog + 1 < $this->blog_count ) {
+	public function blogs() {
+		if ( ( $this->current_blog + 1 ) < $this->blog_count ) {
 			return true;
-		} elseif ( $this->current_blog + 1 == $this->blog_count ) {
-			do_action('blog_loop_end');
+		} elseif ( ( $this->current_blog + 1 ) === $this->blog_count ) {
+			do_action( 'blog_loop_end' );
 			// Do some cleaning up after the loop
 			$this->rewind_blogs();
 		}
@@ -291,13 +295,15 @@ class BP_Blogs_Template {
 	 *
 	 * @see bp_the_blog()
 	 */
-	function the_blog() {
+	public function the_blog() {
 
 		$this->in_the_loop = true;
 		$this->blog        = $this->next_blog();
 
-		if ( 0 == $this->current_blog ) // loop has just started
-			do_action('blog_loop_start');
+		// loop has just started
+		if ( 0 === $this->current_blog ) {
+			do_action( 'blog_loop_start' );
+		}
 	}
 }
 
@@ -340,7 +346,8 @@ function bp_rewind_blogs() {
  *	     'active', 'alphabetical', 'newest', or 'random'.
  *     @type array $include_blog_ids Array of blog IDs to limit results to.
  *     @type string $sort 'ASC' or 'DESC'. Default: 'DESC'.
- *     @type string $search_terms Limit results by a search term. Default: null.
+ *     @type string $search_terms Limit results by a search term. Default: the
+ *           value of $_REQUEST['s'], if present.
  *     @type int $user_id The ID of the user whose blogs should be retrieved.
  *           When viewing a user profile page, 'user_id' defaults to the ID of
  *           the displayed user. Otherwise the default is false.
@@ -350,51 +357,34 @@ function bp_rewind_blogs() {
 function bp_has_blogs( $args = '' ) {
 	global $blogs_template;
 
-	/***
-	 * Set the defaults based on the current page. Any of these will be overridden
-	 * if arguments are directly passed into the loop. Custom plugins should always
-	 * pass their parameters directly to the loop.
-	 */
-	$type         = 'active';
-	$user_id      = 0;
-	$search_terms = null;
-
-	// User filtering
-	if ( bp_displayed_user_id() )
-		$user_id = bp_displayed_user_id();
+	// Checkfor and use search terms
+	$search_terms = ! empty( $_REQUEST['s'] )
+		? $_REQUEST['s']
+		: false;
 
-	$defaults = array(
-		'type'              => $type,
+	// Parse arguments
+	$r = bp_parse_args( $args, array(
+		'type'              => 'active',
+		'page_arg'          => 'bpage',                // See https://buddypress.trac.wordpress.org/ticket/3679
 		'page'              => 1,
 		'per_page'          => 20,
 		'max'               => false,
-
-		'page_arg'          => 'bpage',        // See https://buddypress.trac.wordpress.org/ticket/3679
-
-		'user_id'           => $user_id,       // Pass a user_id to limit to only blogs this user has higher than subscriber access to
+		'user_id'           => bp_displayed_user_id(), // Pass a user_id to limit to only blogs this user is a member of
 		'include_blog_ids'  => false,
-		'search_terms'      => $search_terms,  // Pass search terms to filter on the blog title or description.
-		'update_meta_cache' => true,
-	);
+		'search_terms'      => $search_terms,          // Pass search terms to filter on the blog title or description.
+		'update_meta_cache' => true
+	), 'has_blogs' );
 
-	$r = bp_parse_args( $args, $defaults, 'has_blogs' );
-	extract( $r );
-
-	if ( is_null( $search_terms ) ) {
-		if ( isset( $_REQUEST['s'] ) && !empty( $_REQUEST['s'] ) )
-			$search_terms = $_REQUEST['s'];
-		else
-			$search_terms = false;
+	// Set per_page to maximum if max is enforced
+	if ( ! empty( $r['max'] ) && ( (int) $r['per_page'] > (int) $r['max'] ) ) {
+		$r['per_page'] = (int) $r['max'];
 	}
 
-	if ( $max ) {
-		if ( $per_page > $max ) {
-			$per_page = $max;
-		}
-	}
+	// Get the blogs
+	$blogs_template = new BP_Blogs_Template( $r['type'], $r['page'], $r['per_page'], $r['max'], $r['user_id'], $r['search_terms'], $r['page_arg'], $r['update_meta_cache'], $r['include_blog_ids'] );
 
-	$blogs_template = new BP_Blogs_Template( $type, $page, $per_page, $max, $user_id, $search_terms, $page_arg, $update_meta_cache, $include_blog_ids );
-	return apply_filters( 'bp_has_blogs', $blogs_template->has_blogs(), $blogs_template );
+	// Filter and return
+	return apply_filters( 'bp_has_blogs', $blogs_template->has_blogs(), $blogs_template, $r );
 }
 
 /**
@@ -436,7 +426,7 @@ function bp_blogs_pagination_count() {
 	$to_num    = bp_core_number_format( ( $start_num + ( $blogs_template->pag_num - 1 ) > $blogs_template->total_blog_count ) ? $blogs_template->total_blog_count : $start_num + ( $blogs_template->pag_num - 1 ) );
 	$total     = bp_core_number_format( $blogs_template->total_blog_count );
 
-	echo sprintf( _n( 'Viewing site %1$s to %2$s (of %3$s site)', 'Viewing site %1$s to %2$s (of %3$s sites)', $total, 'buddypress' ), $from_num, $to_num, $total );
+	echo sprintf( _n( 'Viewing 1 site', 'Viewing %1$s - %2$s of %3$s sites', $total, 'buddypress' ), $from_num, $to_num, $total );
 }
 
 /**
@@ -488,25 +478,43 @@ function bp_blog_avatar( $args = '' ) {
 	 *     @type int|bool $width Default: false.
 	 *     @type int|bool $height Default: false.
 	 *     @type bool $id Currently unused.
-	 *     @type bool $no_grav Default: false.
+	 *     @type bool $no_grav Default: true.
 	 * }
 	 * @return string User avatar string.
 	 */
 	function bp_get_blog_avatar( $args = '' ) {
 		global $blogs_template;
 
-		$defaults = array(
+		// Bail if avatars are turned off
+		// @todo Should we maybe still filter this?
+		if ( ! buddypress()->avatar->show_avatars ) {
+			return false;
+		}
+
+		// Parse the arguments
+		$r = bp_parse_args( $args, array(
 			'type'    => 'full',
 			'width'   => false,
 			'height'  => false,
 			'class'   => 'avatar',
 			'id'      => false,
 			'alt'     => sprintf( __( 'Profile picture of site author %s', 'buddypress' ), bp_core_get_user_displayname( $blogs_template->blog->admin_user_id ) ),
-			'no_grav' => true
-		);
-
-		$r = wp_parse_args( $args, $defaults );
-		extract( $r, EXTR_SKIP );
+			'no_grav' => true,
+		) );
+
+		// Fetch the avatar
+		$avatar = bp_core_fetch_avatar( array(
+			'item_id'    => $blogs_template->blog->admin_user_id,
+			'title'      => $blogs_template->blog->admin_user_email,
+			//'avatar_dir' => 'blog-avatars',
+			//'object'     => 'blog',
+			'type'       => $r['type'],
+			'alt'        => $r['alt'],
+			'css_id'     => $r['id'],
+			'class'      => $r['class'],
+			'width'      => $r['width'],
+			'height'     => $r['height']
+		) );
 
 		/***
 		 * In future BuddyPress versions you will be able to set the avatar for a blog.
@@ -516,9 +524,9 @@ function bp_blog_avatar( $args = '' ) {
 		 * This filter is deprecated as of BuddyPress 1.5 and may be removed in a future version.
 		 * Use the 'bp_get_blog_avatar' filter instead.
 		 */
-		$avatar = apply_filters( 'bp_get_blog_avatar_' . $blogs_template->blog->blog_id, bp_core_fetch_avatar( array( 'item_id' => $blogs_template->blog->admin_user_id, 'type' => $type, 'alt' => $alt, 'width' => $width, 'height' => $height, 'class' => $class, 'email' => $blogs_template->blog->admin_user_email ) ) );
+		$avatar = apply_filters( 'bp_get_blog_avatar_' . $blogs_template->blog->blog_id, $avatar );
 
-		return apply_filters( 'bp_get_blog_avatar', $avatar, $blogs_template->blog->blog_id, array( 'item_id' => $blogs_template->blog->admin_user_id, 'type' => $type, 'alt' => $alt, 'width' => $width, 'height' => $height, 'class' => $class, 'email' => $blogs_template->blog->admin_user_email ) );
+		return apply_filters( 'bp_get_blog_avatar', $avatar, $blogs_template->blog->blog_id, $r );
 	}
 
 function bp_blog_permalink() {
@@ -633,39 +641,86 @@ function bp_blog_class() {
 
 /**
  * Output the last active date of the current blog in the loop.
+ *
+ * @param array $args See {@link bp_get_blog_last_active()}.
  */
-function bp_blog_last_active() {
-	echo bp_get_blog_last_active();
+function bp_blog_last_active( $args = array() ) {
+	echo bp_get_blog_last_active( $args );
 }
 	/**
 	 * Return the last active date of the current blog in the loop.
 	 *
+	 * @param array $args {
+	 *     Array of optional arguments.
+	 *     @type bool $active_format If true, formatted "Active 5 minutes
+	 *           ago". If false, formatted "5 minutes ago". Default: true.
+	 * }
 	 * @return string Last active date.
 	 */
-	function bp_get_blog_last_active() {
+	function bp_get_blog_last_active( $args = array() ) {
 		global $blogs_template;
 
-		return apply_filters( 'bp_blog_last_active', bp_core_get_last_activity( $blogs_template->blog->last_activity, __( 'active %s', 'buddypress' ) ) );
+		// Parse the activity format
+		$r = bp_parse_args( $args, array(
+			'active_format' => true
+		) );
+
+		// Backwards compatibilty for anyone forcing a 'true' active_format
+		if ( true === $r['active_format'] ) {
+			$r['active_format'] = __( 'active %s', 'buddypress' );
+		}
+
+		// Blog has been posted to at least once
+		if ( isset( $blogs_template->blog->last_activity ) ) {
+
+			// Backwards compatibility for pre 1.5 'ago' strings
+			$last_activity = ! empty( $r['active_format'] )
+				? bp_core_get_last_activity( $blogs_template->blog->last_activity, $r['active_format'] )
+				: bp_core_time_since( $blogs_template->blog->last_activity );
+
+		// Blog has never been posted to
+		} else {
+			$last_activity = __( 'Never active', 'buddypress' );
+		}
+
+		return apply_filters( 'bp_blog_last_active', $last_activity, $r );
 	}
 
 /**
  * Output the latest post from the current blog in the loop.
+ *
+ * @param array $args See {@link bp_get_blog_latest_post()}.
  */
-function bp_blog_latest_post() {
-	echo bp_get_blog_latest_post();
+function bp_blog_latest_post( $args = array() ) {
+	echo bp_get_blog_latest_post( $args );
 }
 	/**
 	 * Return the latest post from the current blog in the loop.
 	 *
+	 * @param array $args {
+	 *     Array of optional arguments.
+	 *     @type bool $latest_format If true, formatted "Latest post:
+	 *           [link to post]". If false, formatted "[link to post]".
+	 *           Default: true.
+	 * }
 	 * @return string $retval String of the form 'Latest Post: [link to post]'.
 	 */
-	function bp_get_blog_latest_post() {
+	function bp_get_blog_latest_post( $args = array() ) {
 		global $blogs_template;
 
+		$r = wp_parse_args( $args, array(
+			'latest_format' => true,
+		) );
+
 		$retval = bp_get_blog_latest_post_title();
 
-		if ( ! empty( $retval ) )
-			$retval = sprintf( __( 'Latest Post: %s', 'buddypress' ), '<a href="' . $blogs_template->blog->latest_post->guid . '">' . apply_filters( 'the_title', $retval ) . '</a>' );
+		if ( ! empty( $retval ) ) {
+			if ( ! empty( $r['latest_format'] ) ) {
+				$retval = sprintf( __( 'Latest Post: %s', 'buddypress' ), '<a href="' . $blogs_template->blog->latest_post->guid . '">' . apply_filters( 'the_title', $retval ) . '</a>' );
+			} else {
+				$retval = '<a href="' . $blogs_template->blog->latest_post->guid . '">' . apply_filters( 'the_title', $retval ) . '</a>';
+			}
+		}
 
 		return apply_filters( 'bp_get_blog_latest_post', $retval );
 	}
@@ -912,7 +967,7 @@ function bp_show_blog_signup_form($blogname = '', $blog_title = '', $errors = ''
 		$errors = $filtered_results['errors'];
 
 		if ( $errors->get_error_code() ) {
-			echo "<p>" . __('There was a problem, please correct the form below and try again.', 'buddypress') . "</p>";
+			echo "<p>" . __('There was a problem; please correct the form below and try again.', 'buddypress') . "</p>";
 		}
 		?>
 		<p><?php printf(__("By filling out the form below, you can <strong>add a site to your account</strong>. There is no limit to the number of sites that you can have, so create to your heart's content, but blog responsibly!", 'buddypress'), $current_user->display_name) ?></p>
@@ -1006,27 +1061,6 @@ function bp_blogs_signup_blog( $blogname = '', $blog_title = '', $errors = '' )
 	do_action('signup_blogform', $errors);
 }
 
-/**
- * Output the base URL for subdomain installations of WordPress Multisite.
- *
- * @since BuddyPress (1.6.0)
- */
-function bp_blogs_subdomain_base() {
-	echo bp_blogs_get_subdomain_base();
-}
-	/**
-	 * Return the base URL for subdomain installations of WordPress Multisite.
-	 *
-	 * @since BuddyPress (1.6.0)
-	 *
-	 * @return string The base URL - eg, 'example.com' for site_url() example.com or www.example.com.
-	 */
-	function bp_blogs_get_subdomain_base() {
-		global $current_site;
-
-		return apply_filters( 'bp_blogs_subdomain_base', preg_replace( '|^www\.|', '', $current_site->domain ) . $current_site->path );
-	}
-
 /**
  * Process a blog registration submission.
  *
diff --git a/wp-content/plugins/buddypress/bp-core/admin/bp-core-functions.php b/wp-content/plugins/buddypress/bp-core/admin/bp-core-functions.php
index ae902773d..c2cb42ad5 100644
--- a/wp-content/plugins/buddypress/bp-core/admin/bp-core-functions.php
+++ b/wp-content/plugins/buddypress/bp-core/admin/bp-core-functions.php
@@ -200,36 +200,35 @@ function bp_core_add_admin_notice( $notice = '' ) {
  * @since BuddyPress (1.2)
  */
 function bp_core_activation_notice() {
-	global $wpdb, $wp_rewrite;
-
-	$bp = buddypress();
+	global $wp_rewrite, $wpdb;
 
 	// Only the super admin gets warnings
 	if ( ! bp_current_user_can( 'bp_moderate' ) ) {
 		return;
 	}
 
-	// On multisite installs, don't load on a non-root blog, unless do_network_admin is overridden
-	if ( is_multisite() && bp_core_do_network_admin() && !bp_is_root_blog() ) {
+	// Bail in user admin
+	if ( is_user_admin() ) {
 		return;
 	}
 
-	// Bail if in network admin, and BuddyPress is not network activated
-	if ( is_network_admin() && ! bp_is_network_activated() ) {
+	// On multisite installs, don't load on a non-root blog, unless do_network_admin is overridden
+	if ( is_multisite() && bp_core_do_network_admin() && ! bp_is_root_blog() ) {
 		return;
 	}
 
-	// Bail in network admin
-	if ( is_user_admin() ) {
+	// Bail if in network admin, and BuddyPress is not network activated
+	if ( is_network_admin() && ! bp_is_network_activated() ) {
 		return;
 	}
 
 	/**
-	 * Check to make sure that the blog setup routine has run. This can't happen during the
-	 * wizard because of the order which the components are loaded. We check for multisite here
-	 * on the off chance that someone has activated the blogs component and then disabled MS
+	 * Check to make sure that the blog setup routine has run. This can't
+	 * happen during the wizard because of the order which the components
+	 * are loaded.
 	 */
 	if ( bp_is_active( 'blogs' ) ) {
+		$bp    = buddypress();
 		$count = $wpdb->get_var( "SELECT COUNT(*) FROM {$bp->blogs->table_name}" );
 
 		if ( empty( $count ) ) {
@@ -237,17 +236,14 @@ function bp_core_activation_notice() {
 		}
 	}
 
-	/**
-	 * Are pretty permalinks enabled?
-	 */
-	if ( isset( $_POST['permalink_structure'] ) ) {
-		return;
-	}
-
+	// Add notice if no rewrite rules are enabled
 	if ( empty( $wp_rewrite->permalink_structure ) ) {
 		bp_core_add_admin_notice( sprintf( __( '<strong>BuddyPress is almost ready</strong>. You must <a href="%s">update your permalink structure</a> to something other than the default for it to work.', 'buddypress' ), admin_url( 'options-permalink.php' ) ) );
 	}
 
+	// Get BuddyPress instance
+	$bp = buddypress();
+
 	/**
 	 * Check for orphaned BP components (BP component is enabled, no WP page exists)
 	 */
@@ -527,15 +523,15 @@ function bp_core_add_contextual_help_content( $tab = '' ) {
 
 	switch ( $tab ) {
 		case 'bp-comp-overview' :
-			$retval = __( 'By default, all BuddyPress components are enabled. You can selectively disable any of the components by using the form. Your BuddyPress installation will continue to function. However, the features of the disabled components will no longer be accessible to anyone using the site.', 'buddypress' );
+			$retval = __( 'By default, all but four of the BuddyPress components are enabled. You can selectively enable or disable any of the components by using the form below. Your BuddyPress installation will continue to function. However, the features of the disabled components will no longer be accessible to anyone using the site.', 'buddypress' );
 			break;
 
 		case 'bp-page-overview' :
-			$retval = __( 'BuddyPress Components use WordPress Pages for their root directory/archive pages. Here you can change the page associations for each active component.', 'buddypress' );
+			$retval = __( 'BuddyPress Components use WordPress Pages for their root directory/archive pages. You can change the page associations for each active component by using the form below.', 'buddypress' );
 			break;
 
 		case 'bp-settings-overview' :
-			$retval = __( 'Extra configuration settings.', 'buddypress' );
+			$retval = __( 'Extra configuration settings are provided and activated. You can selectively enable or disable any setting by using the form on this screen.', 'buddypress' );
 			break;
 
 		case 'bp-profile-overview' :
@@ -802,17 +798,37 @@ function bp_admin_wp_nav_menu_restrict_items() {
  */
 function bp_core_admin_user_row_actions( $actions, $user_object ) {
 
-	if ( current_user_can( 'edit_user', $user_object->ID ) && bp_loggedin_user_id() != $user_object->ID ) {
+	// Setup the $user_id variable from the current user object
+	$user_id = 0;
+	if ( !empty( $user_object->ID ) ) {
+		$user_id = absint( $user_object->ID );
+	}
+
+	// Bail early if user cannot perform this action, or is looking at themselves
+	if ( current_user_can( 'edit_user', $user_id ) && ( bp_loggedin_user_id() !== $user_id ) ) {
 
+		// Admin URL could be single site or network
 		$url = bp_get_admin_url( 'users.php' );
 
-		if ( bp_is_user_spammer( $user_object->ID ) ) {
-			$actions['ham'] = "<a href='" . wp_nonce_url( $url . "?action=ham&amp;user=$user_object->ID", 'bp-spam-user' ) . "'>" . __( 'Not Spam', 'buddypress' ) . "</a>";
+		// If spammed, create unspam link
+		if ( bp_is_user_spammer( $user_id ) ) {
+			$url             = add_query_arg( array( 'action' => 'ham', 'user' => $user_id ), $url );
+			$unspam_link     = wp_nonce_url( $url, 'bp-spam-user' );
+			$actions['ham']  = sprintf( '<a href="%1$s">%2$s</a>', esc_url( $unspam_link ), esc_html__( 'Not Spam', 'buddypress' ) );
+
+		// If not already spammed, create spam link
 		} else {
-			$actions['spam'] = "<a class='submitdelete' href='" . wp_nonce_url( $url . "?action=spam&amp;user=$user_object->ID", 'bp-spam-user' ) . "'>" . __( 'Mark as Spam', 'buddypress' ) . "</a>";
+			$url             = add_query_arg( array( 'action' => 'spam', 'user' => $user_id ), $url );
+			$spam_link       = wp_nonce_url( $url, 'bp-spam-user' );
+			$actions['spam'] = sprintf( '<a class="submitdelete" href="%1$s">%2$s</a>', esc_url( $spam_link ), esc_html__( 'Spam', 'buddypress' ) );
 		}
 	}
 
+	// Create a "View" link
+	$url             = bp_core_get_user_domain( $user_id );
+	$actions['view'] = sprintf( '<a href="%1$s">%2$s</a>', esc_url( $url ), esc_html__( 'View', 'buddypress' ) );
+
+	// Return new actions
 	return $actions;
 }
 
diff --git a/wp-content/plugins/buddypress/bp-core/admin/bp-core-schema.php b/wp-content/plugins/buddypress/bp-core/admin/bp-core-schema.php
index 36edb0a05..5ad10b92a 100644
--- a/wp-content/plugins/buddypress/bp-core/admin/bp-core-schema.php
+++ b/wp-content/plugins/buddypress/bp-core/admin/bp-core-schema.php
@@ -1,4 +1,5 @@
 <?php
+
 /**
  * BuddyPress DB schema
  *
@@ -9,81 +10,121 @@
 // Exit if accessed directly
 if ( !defined( 'ABSPATH' ) ) exit;
 
+/**
+ * Get the DB schema to use for BuddyPress components
+ *
+ * @since BuddyPress (1.1.0)
+ *
+ * @global $wpdb $wpdb
+ * @return string The default database character-set, if set
+ */
 function bp_core_set_charset() {
 	global $wpdb;
 
 	require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
 
-	// BuddyPress component DB schema
 	return !empty( $wpdb->charset ) ? "DEFAULT CHARACTER SET {$wpdb->charset}" : '';
 }
 
+/**
+ * Main installer
+ *
+ * Can be passed an optional array of components to explicitly run installation
+ * routines on, typically the first time a component is activated in Settings.
+ *
+ * @since BuddyPress (1.0.0)
+ *
+ * @param array $active_components Components to install
+ */
 function bp_core_install( $active_components = false ) {
 
-	if ( empty( $active_components ) )
+	// If no components passed, get all the active components from the main site
+	if ( empty( $active_components ) ) {
 		$active_components = apply_filters( 'bp_active_components', bp_get_option( 'bp-active-components' ) );
+	}
 
-	// Activity Streams
-	// Install tables even when inactive, to store last_activity data
+	// Install Activity Streams even when inactive (to store last_activity data)
 	bp_core_install_activity_streams();
 
+	// Install the signups table
+	bp_core_maybe_install_signups();
+
 	// Notifications
-	if ( !empty( $active_components['notifications'] ) )
+	if ( !empty( $active_components['notifications'] ) ) {
 		bp_core_install_notifications();
+	}
 
 	// Friend Connections
-	if ( !empty( $active_components['friends'] ) )
+	if ( !empty( $active_components['friends'] ) ) {
 		bp_core_install_friends();
+	}
 
 	// Extensible Groups
-	if ( !empty( $active_components['groups'] ) )
+	if ( !empty( $active_components['groups'] ) ) {
 		bp_core_install_groups();
+	}
 
 	// Private Messaging
-	if ( !empty( $active_components['messages'] ) )
+	if ( !empty( $active_components['messages'] ) ) {
 		bp_core_install_private_messaging();
+	}
 
 	// Extended Profiles
-	if ( !empty( $active_components['xprofile'] ) )
+	if ( !empty( $active_components['xprofile'] ) ) {
 		bp_core_install_extended_profiles();
+	}
 
 	// Blog tracking
-	if ( !empty( $active_components['blogs'] ) )
+	if ( !empty( $active_components['blogs'] ) ) {
 		bp_core_install_blog_tracking();
-
-	// Maybe install (or upgrade) the signups table
-	bp_core_maybe_install_signups();
+	}
 }
 
+/**
+ * Install database tables for the Notifications component
+ *
+ * @since BuddyPress (1.0.0)
+ * 
+ * @uses bp_core_set_charset()
+ * @uses bp_core_get_table_prefix()
+ * @uses dbDelta()
+ */
 function bp_core_install_notifications() {
-
 	$sql             = array();
 	$charset_collate = bp_core_set_charset();
 	$bp_prefix       = bp_core_get_table_prefix();
 
 	$sql[] = "CREATE TABLE {$bp_prefix}bp_notifications (
-	  		    id bigint(20) NOT NULL AUTO_INCREMENT PRIMARY KEY,
-			    user_id bigint(20) NOT NULL,
-			    item_id bigint(20) NOT NULL,
-			    secondary_item_id bigint(20),
-	  		    component_name varchar(75) NOT NULL,
-			    component_action varchar(75) NOT NULL,
-	  		    date_notified datetime NOT NULL,
-			    is_new bool NOT NULL DEFAULT 0,
-		        KEY item_id (item_id),
-			    KEY secondary_item_id (secondary_item_id),
-			    KEY user_id (user_id),
-			    KEY is_new (is_new),
-			    KEY component_name (component_name),
-	 	   	    KEY component_action (component_action),
-			    KEY useritem (user_id,is_new)
-		       ) {$charset_collate};";
+				id bigint(20) NOT NULL AUTO_INCREMENT PRIMARY KEY,
+				user_id bigint(20) NOT NULL,
+				item_id bigint(20) NOT NULL,
+				secondary_item_id bigint(20),
+				component_name varchar(75) NOT NULL,
+				component_action varchar(75) NOT NULL,
+				date_notified datetime NOT NULL,
+				is_new bool NOT NULL DEFAULT 0,
+				KEY item_id (item_id),
+				KEY secondary_item_id (secondary_item_id),
+				KEY user_id (user_id),
+				KEY is_new (is_new),
+				KEY component_name (component_name),
+				KEY component_action (component_action),
+				KEY useritem (user_id,is_new)
+			) {$charset_collate};";
 
 	dbDelta( $sql );
 }
 
+/**
+ * Install database tables for the Activity component
+ *
+ * @since BuddyPress (1.0.0)
+ * 
+ * @uses bp_core_set_charset()
+ * @uses bp_core_get_table_prefix()
+ * @uses dbDelta()
+ */
 function bp_core_install_activity_streams() {
-
 	$sql             = array();
 	$charset_collate = bp_core_set_charset();
 	$bp_prefix       = bp_core_get_table_prefix();
@@ -122,52 +163,68 @@ function bp_core_install_activity_streams() {
 				meta_value longtext DEFAULT NULL,
 				KEY activity_id (activity_id),
 				KEY meta_key (meta_key)
-		   	   ) {$charset_collate};";
+			) {$charset_collate};";
 
 	dbDelta( $sql );
 }
 
+/**
+ * Install database tables for the Notifications component
+ *
+ * @since BuddyPress (1.0.0)
+ * 
+ * @uses bp_core_set_charset()
+ * @uses bp_core_get_table_prefix()
+ * @uses dbDelta()
+ */
 function bp_core_install_friends() {
-
 	$sql             = array();
 	$charset_collate = bp_core_set_charset();
 	$bp_prefix       = bp_core_get_table_prefix();
 
 	$sql[] = "CREATE TABLE {$bp_prefix}bp_friends (
-	  		    id bigint(20) NOT NULL AUTO_INCREMENT PRIMARY KEY,
-	  		    initiator_user_id bigint(20) NOT NULL,
-	  		    friend_user_id bigint(20) NOT NULL,
-	  		    is_confirmed bool DEFAULT 0,
-			    is_limited bool DEFAULT 0,
-	  		    date_created datetime NOT NULL,
-		        KEY initiator_user_id (initiator_user_id),
-		        KEY friend_user_id (friend_user_id)
-	 	       ) {$charset_collate};";
+				id bigint(20) NOT NULL AUTO_INCREMENT PRIMARY KEY,
+				initiator_user_id bigint(20) NOT NULL,
+				friend_user_id bigint(20) NOT NULL,
+				is_confirmed bool DEFAULT 0,
+				is_limited bool DEFAULT 0,
+				date_created datetime NOT NULL,
+				KEY initiator_user_id (initiator_user_id),
+				KEY friend_user_id (friend_user_id)
+			) {$charset_collate};";
 
 	dbDelta( $sql );
 }
 
+/**
+ * Install database tables for the Groups component
+ *
+ * @since BuddyPress (1.0.0)
+ * 
+ * @uses bp_core_set_charset()
+ * @uses bp_core_get_table_prefix()
+ * @uses dbDelta()
+ */
 function bp_core_install_groups() {
-
 	$sql             = array();
 	$charset_collate = bp_core_set_charset();
 	$bp_prefix       = bp_core_get_table_prefix();
 
 	$sql[] = "CREATE TABLE {$bp_prefix}bp_groups (
-		  		id bigint(20) NOT NULL AUTO_INCREMENT PRIMARY KEY,
+				id bigint(20) NOT NULL AUTO_INCREMENT PRIMARY KEY,
 				creator_id bigint(20) NOT NULL,
-		  		name varchar(100) NOT NULL,
-		  		slug varchar(200) NOT NULL,
-		  		description longtext NOT NULL,
+				name varchar(100) NOT NULL,
+				slug varchar(200) NOT NULL,
+				description longtext NOT NULL,
 				status varchar(10) NOT NULL DEFAULT 'public',
 				enable_forum tinyint(1) NOT NULL DEFAULT '1',
 				date_created datetime NOT NULL,
-			    KEY creator_id (creator_id),
-			    KEY status (status)
-		 	   ) {$charset_collate};";
+				KEY creator_id (creator_id),
+				KEY status (status)
+			) {$charset_collate};";
 
 	$sql[] = "CREATE TABLE {$bp_prefix}bp_groups_members (
-		  		id bigint(20) NOT NULL AUTO_INCREMENT PRIMARY KEY,
+				id bigint(20) NOT NULL AUTO_INCREMENT PRIMARY KEY,
 				group_id bigint(20) NOT NULL,
 				user_id bigint(20) NOT NULL,
 				inviter_id bigint(20) NOT NULL,
@@ -182,10 +239,10 @@ function bp_core_install_groups() {
 				KEY group_id (group_id),
 				KEY is_admin (is_admin),
 				KEY is_mod (is_mod),
-			 	KEY user_id (user_id),
+				KEY user_id (user_id),
 				KEY inviter_id (inviter_id),
 				KEY is_confirmed (is_confirmed)
-		 	   ) {$charset_collate};";
+			) {$charset_collate};";
 
 	$sql[] = "CREATE TABLE {$bp_prefix}bp_groups_groupmeta (
 				id bigint(20) NOT NULL AUTO_INCREMENT PRIMARY KEY,
@@ -194,54 +251,71 @@ function bp_core_install_groups() {
 				meta_value longtext DEFAULT NULL,
 				KEY group_id (group_id),
 				KEY meta_key (meta_key)
-			   ) {$charset_collate};";
+			) {$charset_collate};";
 
 	dbDelta( $sql );
 }
 
+/**
+ * Install database tables for the Messsages component
+ *
+ * @since BuddyPress (1.0.0)
+ * 
+ * @uses bp_core_set_charset()
+ * @uses bp_core_get_table_prefix()
+ * @uses dbDelta()
+ */
 function bp_core_install_private_messaging() {
-
 	$sql             = array();
 	$charset_collate = bp_core_set_charset();
 	$bp_prefix       = bp_core_get_table_prefix();
 
 	$sql[] = "CREATE TABLE {$bp_prefix}bp_messages_messages (
-		  		id bigint(20) NOT NULL AUTO_INCREMENT PRIMARY KEY,
-		  		thread_id bigint(20) NOT NULL,
-		  		sender_id bigint(20) NOT NULL,
-		  		subject varchar(200) NOT NULL,
-		  		message longtext NOT NULL,
-		  		date_sent datetime NOT NULL,
-			    KEY sender_id (sender_id),
-			    KEY thread_id (thread_id)
-		 	   ) {$charset_collate};";
+				id bigint(20) NOT NULL AUTO_INCREMENT PRIMARY KEY,
+				thread_id bigint(20) NOT NULL,
+				sender_id bigint(20) NOT NULL,
+				subject varchar(200) NOT NULL,
+				message longtext NOT NULL,
+				date_sent datetime NOT NULL,
+				KEY sender_id (sender_id),
+				KEY thread_id (thread_id)
+			) {$charset_collate};";
 
 	$sql[] = "CREATE TABLE {$bp_prefix}bp_messages_recipients (
-		  		id bigint(20) NOT NULL AUTO_INCREMENT PRIMARY KEY,
-		  		user_id bigint(20) NOT NULL,
-		  		thread_id bigint(20) NOT NULL,
-		  		unread_count int(10) NOT NULL DEFAULT '0',
+				id bigint(20) NOT NULL AUTO_INCREMENT PRIMARY KEY,
+				user_id bigint(20) NOT NULL,
+				thread_id bigint(20) NOT NULL,
+				unread_count int(10) NOT NULL DEFAULT '0',
 				sender_only tinyint(1) NOT NULL DEFAULT '0',
 				is_deleted tinyint(1) NOT NULL DEFAULT '0',
-			    KEY user_id (user_id),
-			    KEY thread_id (thread_id),
+				KEY user_id (user_id),
+				KEY thread_id (thread_id),
 				KEY is_deleted (is_deleted),
 				KEY sender_only (sender_only),
-			    KEY unread_count (unread_count)
-		 	   ) {$charset_collate};";
+				KEY unread_count (unread_count)
+			) {$charset_collate};";
 
 	$sql[] = "CREATE TABLE {$bp_prefix}bp_messages_notices (
-		  		id bigint(20) NOT NULL AUTO_INCREMENT PRIMARY KEY,
-		  		subject varchar(200) NOT NULL,
-		  		message longtext NOT NULL,
-		  		date_sent datetime NOT NULL,
+				id bigint(20) NOT NULL AUTO_INCREMENT PRIMARY KEY,
+				subject varchar(200) NOT NULL,
+				message longtext NOT NULL,
+				date_sent datetime NOT NULL,
 				is_active tinyint(1) NOT NULL DEFAULT '0',
-			    KEY is_active (is_active)
-		 	   ) {$charset_collate};";
+				KEY is_active (is_active)
+			) {$charset_collate};";
 
 	dbDelta( $sql );
 }
 
+/**
+ * Install database tables for the Profiles component
+ *
+ * @since BuddyPress (1.0.0)
+ * 
+ * @uses bp_core_set_charset()
+ * @uses bp_core_get_table_prefix()
+ * @uses dbDelta()
+ */
 function bp_core_install_extended_profiles() {
 	global $wpdb;
 
@@ -259,43 +333,43 @@ function bp_core_install_extended_profiles() {
 	}
 
 	$sql[] = "CREATE TABLE {$bp_prefix}bp_xprofile_groups (
-			    id bigint(20) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
-			    name varchar(150) NOT NULL,
-			    description mediumtext NOT NULL,
-			    group_order bigint(20) NOT NULL DEFAULT '0',
-			    can_delete tinyint(1) NOT NULL,
-			    KEY can_delete (can_delete)
-			   ) {$charset_collate};";
+				id bigint(20) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
+				name varchar(150) NOT NULL,
+				description mediumtext NOT NULL,
+				group_order bigint(20) NOT NULL DEFAULT '0',
+				can_delete tinyint(1) NOT NULL,
+				KEY can_delete (can_delete)
+			) {$charset_collate};";
 
 	$sql[] = "CREATE TABLE {$bp_prefix}bp_xprofile_fields (
-			    id bigint(20) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
-			    group_id bigint(20) unsigned NOT NULL,
-			    parent_id bigint(20) unsigned NOT NULL,
-			    type varchar(150) NOT NULL,
-			    name varchar(150) NOT NULL,
-			    description longtext NOT NULL,
-			    is_required tinyint(1) NOT NULL DEFAULT '0',
-			    is_default_option tinyint(1) NOT NULL DEFAULT '0',
-			    field_order bigint(20) NOT NULL DEFAULT '0',
-			    option_order bigint(20) NOT NULL DEFAULT '0',
-			    order_by varchar(15) NOT NULL DEFAULT '',
-			    can_delete tinyint(1) NOT NULL DEFAULT '1',
-			    KEY group_id (group_id),
-			    KEY parent_id (parent_id),
-			    KEY field_order (field_order),
-			    KEY can_delete (can_delete),
-			    KEY is_required (is_required)
-			   ) {$charset_collate};";
+				id bigint(20) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
+				group_id bigint(20) unsigned NOT NULL,
+				parent_id bigint(20) unsigned NOT NULL,
+				type varchar(150) NOT NULL,
+				name varchar(150) NOT NULL,
+				description longtext NOT NULL,
+				is_required tinyint(1) NOT NULL DEFAULT '0',
+				is_default_option tinyint(1) NOT NULL DEFAULT '0',
+				field_order bigint(20) NOT NULL DEFAULT '0',
+				option_order bigint(20) NOT NULL DEFAULT '0',
+				order_by varchar(15) NOT NULL DEFAULT '',
+				can_delete tinyint(1) NOT NULL DEFAULT '1',
+				KEY group_id (group_id),
+				KEY parent_id (parent_id),
+				KEY field_order (field_order),
+				KEY can_delete (can_delete),
+				KEY is_required (is_required)
+			) {$charset_collate};";
 
 	$sql[] = "CREATE TABLE {$bp_prefix}bp_xprofile_data (
-			    id bigint(20) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
-			    field_id bigint(20) unsigned NOT NULL,
-			    user_id bigint(20) unsigned NOT NULL,
-			    value longtext NOT NULL,
-			    last_updated datetime NOT NULL,
-			    KEY field_id (field_id),
-			    KEY user_id (user_id)
-			   ) {$charset_collate};";
+				id bigint(20) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
+				field_id bigint(20) unsigned NOT NULL,
+				user_id bigint(20) unsigned NOT NULL,
+				value longtext NOT NULL,
+				last_updated datetime NOT NULL,
+				KEY field_id (field_id),
+				KEY user_id (user_id)
+			) {$charset_collate};";
 
 	$sql[] = "CREATE TABLE {$bp_prefix}bp_xprofile_meta (
 				id bigint(20) NOT NULL AUTO_INCREMENT PRIMARY KEY,
@@ -305,35 +379,45 @@ function bp_core_install_extended_profiles() {
 				meta_value longtext DEFAULT NULL,
 				KEY object_id (object_id),
 				KEY meta_key (meta_key)
-		   	   ) {$charset_collate};";
+			) {$charset_collate};";
 
 	dbDelta( $sql );
 
 	// Insert the default group and fields
 	$insert_sql = array();
 
-	if ( !$wpdb->get_var( "SELECT id FROM {$bp_prefix}bp_xprofile_groups WHERE id = 1" ) )
+	if ( ! $wpdb->get_var( "SELECT id FROM {$bp_prefix}bp_xprofile_groups WHERE id = 1" ) ) {
 		$insert_sql[] = "INSERT INTO {$bp_prefix}bp_xprofile_groups ( name, description, can_delete ) VALUES ( " . $wpdb->prepare( '%s', stripslashes( bp_get_option( 'bp-xprofile-base-group-name' ) ) ) . ", '', 0 );";
+	}
 
-	if ( !$wpdb->get_var( "SELECT id FROM {$bp_prefix}bp_xprofile_fields WHERE id = 1" ) )
+	if ( ! $wpdb->get_var( "SELECT id FROM {$bp_prefix}bp_xprofile_fields WHERE id = 1" ) ) {
 		$insert_sql[] = "INSERT INTO {$bp_prefix}bp_xprofile_fields ( group_id, parent_id, type, name, description, is_required, can_delete ) VALUES ( 1, 0, 'textbox', " . $wpdb->prepare( '%s', stripslashes( bp_get_option( 'bp-xprofile-fullname-field-name' ) ) ) . ", '', 1, 0 );";
+	}
 
 	dbDelta( $insert_sql );
 }
 
+/**
+ * Install database tables for the Sites component
+ *
+ * @since BuddyPress (1.0.0)
+ * 
+ * @uses bp_core_set_charset()
+ * @uses bp_core_get_table_prefix()
+ * @uses dbDelta()
+ */
 function bp_core_install_blog_tracking() {
-
 	$sql             = array();
 	$charset_collate = bp_core_set_charset();
 	$bp_prefix       = bp_core_get_table_prefix();
 
 	$sql[] = "CREATE TABLE {$bp_prefix}bp_user_blogs (
-	  		    id bigint(20) NOT NULL AUTO_INCREMENT PRIMARY KEY,
-			    user_id bigint(20) NOT NULL,
-			    blog_id bigint(20) NOT NULL,
-			    KEY user_id (user_id),
-			    KEY blog_id (blog_id)
-		       ) {$charset_collate};";
+				id bigint(20) NOT NULL AUTO_INCREMENT PRIMARY KEY,
+				user_id bigint(20) NOT NULL,
+				blog_id bigint(20) NOT NULL,
+				KEY user_id (user_id),
+				KEY blog_id (blog_id)
+			) {$charset_collate};";
 
 	$sql[] = "CREATE TABLE {$bp_prefix}bp_user_blogs_blogmeta (
 				id bigint(20) NOT NULL AUTO_INCREMENT PRIMARY KEY,
@@ -342,7 +426,7 @@ function bp_core_install_blog_tracking() {
 				meta_value longtext DEFAULT NULL,
 				KEY blog_id (blog_id),
 				KEY meta_key (meta_key)
-		       ) {$charset_collate};";
+			) {$charset_collate};";
 
 	dbDelta( $sql );
 }
@@ -407,6 +491,11 @@ function bp_core_install_signups() {
 function bp_core_upgrade_signups() {
 	global $wpdb;
 
+	// Bail if global tables should not be upgraded
+	if ( defined( 'DO_NOT_UPGRADE_GLOBAL_TABLES' ) ) {
+		return;
+	}
+
 	// Never use bp_core_get_table_prefix() for any global users tables
 	$wpdb->signups = $wpdb->base_prefix . 'signups';
 
diff --git a/wp-content/plugins/buddypress/bp-core/admin/bp-core-settings.php b/wp-content/plugins/buddypress/bp-core/admin/bp-core-settings.php
index e112df708..71f8f331e 100644
--- a/wp-content/plugins/buddypress/bp-core/admin/bp-core-settings.php
+++ b/wp-content/plugins/buddypress/bp-core/admin/bp-core-settings.php
@@ -49,21 +49,6 @@ function bp_admin_setting_callback_account_deletion() {
 <?php
 }
 
-/**
- * If user has upgraded to 1.6 and chose to retain their BuddyBar, offer then a switch to change over
- * to the WP Toolbar.
- *
- * @since BuddyPress (1.6)
- */
-function bp_admin_setting_callback_force_buddybar() {
-?>
-
-	<input id="_bp_force_buddybar" name="_bp_force_buddybar" type="checkbox" value="1" <?php checked( ! bp_force_buddybar( true ) ); ?> />
-	<label for="_bp_force_buddybar"><?php _e( 'Switch to WordPress Toolbar', 'buddypress' ); ?></label>
-
-<?php
-}
-
 /** Activity *******************************************************************/
 
 /**
@@ -117,20 +102,6 @@ function bp_admin_setting_callback_heartbeat() {
 <?php
 }
 
-/**
- * Sanitization for _bp_force_buddyvar
- *
- * If upgraded to 1.6 and you chose to keep the BuddyBar, a checkbox asks if you want to switch to
- * the WP Toolbar. The option we store is 1 if the BuddyBar is forced on, so we use this function
- * to flip the boolean before saving the intval.
- *
- * @since BuddyPress (1.6)
- * @access Private
- */
-function bp_admin_sanitize_callback_force_buddybar( $value = false ) {
-	return $value ? 0 : 1;
-}
-
 /**
  * Sanitization for bp-disable-blogforum-comments setting
  *
diff --git a/wp-content/plugins/buddypress/bp-core/admin/bp-core-tools.php b/wp-content/plugins/buddypress/bp-core/admin/bp-core-tools.php
index 5f2f32040..b2dca2c3c 100644
--- a/wp-content/plugins/buddypress/bp-core/admin/bp-core-tools.php
+++ b/wp-content/plugins/buddypress/bp-core/admin/bp-core-tools.php
@@ -132,6 +132,16 @@ function bp_admin_repair_list() {
 		);
 	}
 
+	// Blogs:
+	// - user blog count
+	if ( bp_is_active( 'blogs' ) ) {
+		$repair_list[90] = array(
+			'bp-blog-records',
+			__( 'Repopulate blogs records', 'buddypress' ),
+			'bp_admin_repair_blog_records',
+		);
+	}
+
 	ksort( $repair_list );
 
 	return (array) apply_filters( 'bp_repair_list', $repair_list );
@@ -238,6 +248,38 @@ function bp_admin_repair_group_count() {
 	return array( 0, sprintf( $statement, __( 'Complete!', 'buddypress' ) ) );
 }
 
+/**
+ * Recalculate user-to-blog relationships and useful blog meta data
+ *
+ * @since BuddyPress (2.1.0)
+ *
+ * @return array
+ */
+function bp_admin_repair_blog_records() {
+
+	// Description of this tool, dispalyed to the user
+	$statement = __( 'Repopulating Blogs records&hellip; %s', 'buddypress' );
+
+	// Default to failure text
+	$result    = __( 'Failed!',   'buddypress' );
+
+	// Default to unrepaired
+	$repair    = false;
+
+	// Run function if blogs component is active
+	if ( bp_is_active( 'blogs' ) ) {
+		$repair = bp_blogs_record_existing_blogs();
+	}
+
+	// Setup success/fail messaging
+	if ( true === $repair ) {
+		$result = __( 'Complete!', 'buddypress' );
+	}
+
+	// All done!
+	return array( 0, sprintf( $statement, $result ) );
+}
+
 /**
  * Recalculate the total number of active site members.
  *
@@ -281,7 +323,6 @@ function bp_admin_tools_feedback( $message, $class = false ) {
 		switch ( count( $errors ) ) {
 			case 0:
 				return false;
-				break;
 
 			case 1:
 				$message = '<p>' . $errors[0] . '</p>';
diff --git a/wp-content/plugins/buddypress/bp-core/admin/css/common-rtl.css b/wp-content/plugins/buddypress/bp-core/admin/css/common-rtl.css
new file mode 100644
index 000000000..661e09c65
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-core/admin/css/common-rtl.css
@@ -0,0 +1,432 @@
+/**
+ * CSS that is always loaded when in wp-admin
+ *
+ * @since BuddyPress (1.6)
+ */
+
+/* User's Lists
+------------------------------------------------------------------------------*/
+
+body.site-users-php th#role,
+body.users-php th#role,
+body.users_page_bp-signups th#count_sent {
+	width: 10%;
+}
+
+body.site-users-php th#name,
+body.site-users-php th#email,
+body.users-php th#name,
+body.users-php th#registered,
+body.users-php th#email,
+body.users_page_bp-signups th#name,
+body.users_page_bp-signups th#registered,
+body.users_page_bp-signups th#email,
+body.users_page_bp-signups th#date_sent {
+	width: 15%;
+}
+
+body.users-php th#blogs,
+body.users_page_bp-signups th#blogs {
+	width: 20%;
+}
+
+body.users_page_bp-signups th.column-count_sent,
+body.users_page_bp-signups td.count_sent {
+	text-align: center;
+}
+
+/* Icon 32's
+------------------------------------------------------------------------------*/
+
+body.branch-3-6 div#icon-buddypress,
+body.branch-3-7 div#icon-buddypress {
+	background: url('../images/icons32.png') no-repeat -370px -6px;
+}
+
+body.branch-3-6 div#icon-buddypress-activity,
+body.branch-3-7 div#icon-buddypress-activity {
+	background: url('../images/icons32.png') no-repeat -10px -6px;
+}
+
+body.branch-3-6 div#icon-buddypress-groups,
+body.branch-3-7 div#icon-buddypress-groups {
+	background: url('../images/icons32.png') no-repeat -250px -6px;
+}
+
+/* Menu Icons
+------------------------------------------------------------------------------*/
+
+/* Backpat */
+body.branch-3-6 ul#adminmenu li.toplevel_page_bp-components .wp-menu-image,
+body.branch-3-6 ul#adminmenu li.toplevel_page_bp-general-settings .wp-menu-image,
+body.branch-3-7 ul#adminmenu li.toplevel_page_bp-components .wp-menu-image,
+body.branch-3-7 ul#adminmenu li.toplevel_page_bp-general-settings .wp-menu-image {
+	background-image: url('../images/menu.png') !important;
+	background-position: -178px -34px;
+}
+
+body.branch-3-6 ul#adminmenu li.toplevel_page_bp-components:hover .wp-menu-image,
+body.branch-3-6 ul#adminmenu li.toplevel_page_bp-general-settings:hover .wp-menu-image,
+body.branch-3-6 ul#adminmenu li.toplevel_page_bp-components.wp-has-current-submenu .wp-menu-image,
+body.branch-3-6 ul#adminmenu li.toplevel_page_bp-general-settings.wp-has-current-submenu .wp-menu-image,
+body.branch-3-7 ul#adminmenu li.toplevel_page_bp-components:hover .wp-menu-image,
+body.branch-3-7 ul#adminmenu li.toplevel_page_bp-general-settings:hover .wp-menu-image,
+body.branch-3-7 ul#adminmenu li.toplevel_page_bp-components.wp-has-current-submenu .wp-menu-image,
+body.branch-3-7 ul#adminmenu li.toplevel_page_bp-general-settings.wp-has-current-submenu .wp-menu-image {
+	background-position: -178px -2px;
+}
+
+/* Activity */
+body.branch-3-6 ul#adminmenu li.toplevel_page_bp-activity .wp-menu-image,
+body.branch-3-6 ul#adminmenu li.toplevel_page_bp-activity_network .wp-menu-image,
+body.branch-3-7 ul#adminmenu li.toplevel_page_bp-activity .wp-menu-image,
+body.branch-3-7 ul#adminmenu li.toplevel_page_bp-activity_network .wp-menu-image {
+	background-image: url('../images/menu.png');
+	background-position: 0 -34px;
+}
+body.branch-3-6 ul#adminmenu li.toplevel_page_bp-activity:hover .wp-menu-image,
+body.branch-3-6 ul#adminmenu li.toplevel_page_bp-activity.current .wp-menu-image,
+body.branch-3-6 ul#adminmenu li.toplevel_page_bp-activity.wp-has-current-submenu .wp-menu-image,
+body.branch-3-6 ul#adminmenu li.toplevel_page_bp-activity_network:hover .wp-menu-image,
+body.branch-3-6 ul#adminmenu li.toplevel_page_bp-activity_network.current .wp-menu-image,
+body.branch-3-6 ul#adminmenu li.toplevel_page_bp-activity_network.wp-has-current-submenu .wp-menu-image,
+body.branch-3-7 ul#adminmenu li.toplevel_page_bp-activity:hover .wp-menu-image,
+body.branch-3-7 ul#adminmenu li.toplevel_page_bp-activity.current .wp-menu-image,
+body.branch-3-7 ul#adminmenu li.toplevel_page_bp-activity.wp-has-current-submenu .wp-menu-image,
+body.branch-3-7 ul#adminmenu li.toplevel_page_bp-activity_network:hover .wp-menu-image,
+body.branch-3-7 ul#adminmenu li.toplevel_page_bp-activity_network.current .wp-menu-image,
+body.branch-3-7 ul#adminmenu li.toplevel_page_bp-activity_network.wp-has-current-submenu .wp-menu-image {
+	background-position: 0 -2px;
+}
+
+/* Groups */
+body.branch-3-6 ul#adminmenu li.toplevel_page_bp-groups .wp-menu-image,
+body.branch-3-6 ul#adminmenu li.toplevel_page_bp-groups_network .wp-menu-image,
+body.branch-3-7 ul#adminmenu li.toplevel_page_bp-groups .wp-menu-image,
+body.branch-3-7 ul#adminmenu li.toplevel_page_bp-groups_network .wp-menu-image {
+	background-image: url('../images/menu.png');
+	background-position: -61px -34px;
+}
+body.branch-3-6 ul#adminmenu li.toplevel_page_bp-groups:hover .wp-menu-image,
+body.branch-3-6 ul#adminmenu li.toplevel_page_bp-groups.current .wp-menu-image,
+body.branch-3-6 ul#adminmenu li.toplevel_page_bp-groups.wp-has-current-submenu .wp-menu-image,
+body.branch-3-6 ul#adminmenu li.toplevel_page_bp-groups_network:hover .wp-menu-image,
+body.branch-3-6 ul#adminmenu li.toplevel_page_bp-groups_network.current .wp-menu-image,
+body.branch-3-6 ul#adminmenu li.toplevel_page_bp-groups_network.wp-has-current-submenu .wp-menu-image,
+body.branch-3-7 ul#adminmenu li.toplevel_page_bp-groups:hover .wp-menu-image,
+body.branch-3-7 ul#adminmenu li.toplevel_page_bp-groups.current .wp-menu-image,
+body.branch-3-7 ul#adminmenu li.toplevel_page_bp-groups.wp-has-current-submenu .wp-menu-image,
+body.branch-3-7 ul#adminmenu li.toplevel_page_bp-groups_network:hover .wp-menu-image,
+body.branch-3-7 ul#adminmenu li.toplevel_page_bp-groups_network.current .wp-menu-image,
+body.branch-3-7 ul#adminmenu li.toplevel_page_bp-groups_network.wp-has-current-submenu .wp-menu-image {
+	background-position: -61px -2px;
+}
+
+/* Tools */
+#adminmenu .toplevel_page_network-tools div.wp-menu-image:before {
+    content: "";
+}
+
+/* Components
+------------------------------------------------------------------------------*/
+
+/* Dashicons */
+#adminmenu #toplevel_page_bp-activity .wp-menu-image:before,
+#adminmenu #toplevel_page_bp-activity_user .wp-menu-image:before,
+#adminmenu #toplevel_page_bp-activity_network .wp-menu-image:before {
+	content: "\f452";
+}
+
+#adminmenu #toplevel_page_bp-groups .wp-menu-image:before,
+#adminmenu #toplevel_page_bp-groups_user .wp-menu-image:before,
+#adminmenu #toplevel_page_bp-groups_network .wp-menu-image:before {
+	content: "\f456";
+}
+
+#adminmenu #toplevel_page_bp-notifications .wp-menu-image:before,
+#adminmenu #toplevel_page_bp-notifications_user .wp-menu-image:before,
+#adminmenu #toplevel_page_bp-notifications_network .wp-menu-image:before {
+	content: "\f439";
+}
+
+#adminmenu #toplevel_page_bp-messages .wp-menu-image:before,
+#adminmenu #toplevel_page_bp-messages_user .wp-menu-image:before,
+#adminmenu #toplevel_page_bp-messages_network .wp-menu-image:before {
+	content: "\f457";
+}
+
+#adminmenu #toplevel_page_bp-friends .wp-menu-image:before,
+#adminmenu #toplevel_page_bp-friends_user .wp-menu-image:before,
+#adminmenu #toplevel_page_bp-friends_network .wp-menu-image:before{
+	content: "\f454";
+}
+
+#adminmenu #toplevel_page_bp-settings .wp-menu-image:before,
+#adminmenu #toplevel_page_bp-settings_user .wp-menu-image:before,
+#adminmenu #toplevel_page_bp-settings_network .wp-menu-image:before {
+	content: "\f108";
+}
+
+#adminmenu li.toplevel_page_bp-components .wp-menu-image,
+#adminmenu li.toplevel_page_bp-general-settings .wp-menu-image {
+	content: "\f448";
+}
+
+/* Dashicons overrides for backward compatibility */
+body.branch-3-6 #adminmenu #toplevel_page_bp-activity .wp-menu-image:before,
+body.branch-3-6 #adminmenu #toplevel_page_bp-activity_network .wp-menu-image:before,
+body.branch-3-6 #adminmenu #toplevel_page_bp-groups .wp-menu-image:before,
+body.branch-3-6 #adminmenu #toplevel_page_bp-groups_network .wp-menu-image:before,
+body.branch-3-6 #adminmenu li.toplevel_page_bp-components .wp-menu-image,
+body.branch-3-6 #adminmenu li.toplevel_page_bp-general-settings .wp-menu-image,
+body.branch-3-7 #adminmenu #toplevel_page_bp-activity .wp-menu-image:before,
+body.branch-3-7 #adminmenu #toplevel_page_bp-activity_network .wp-menu-image:before,
+body.branch-3-7 #adminmenu #toplevel_page_bp-groups .wp-menu-image:before,
+body.branch-3-7 #adminmenu #toplevel_page_bp-groups_network .wp-menu-image:before,
+body.branch-3-7 #adminmenu li.toplevel_page_bp-components .wp-menu-image,
+body.branch-3-7 #adminmenu li.toplevel_page_bp-general-settings .wp-menu-image {
+	content: "";
+}
+
+/* Settings - Dashicons (WP 3.8+) */
+.settings_page_bp-components td.plugin-title span {
+	float: right;
+	width: 18px;
+	height: 18px;
+	margin-left: 5px;
+}
+
+.settings_page_bp-components td.plugin-title span:before {
+	font-family: 'dashicons';
+	font-size: 18px;
+}
+
+.settings_page_bp-components tr.activity td.plugin-title span:before {
+	content: "\f452";
+}
+
+.settings_page_bp-components tr.notifications td.plugin-title span:before {
+	content: "\f339";
+}
+
+.settings_page_bp-components tr.xprofile td.plugin-title span:before {
+	content: "\f336";
+}
+
+.settings_page_bp-components tr.settings td.plugin-title span:before {
+	content: "\f108";
+}
+
+.settings_page_bp-components tr.groups td.plugin-title span:before {
+	content: "\f456";
+}
+
+.settings_page_bp-components tr.messages td.plugin-title span:before {
+	content: "\f457";
+}
+
+.settings_page_bp-components tr.forums td.plugin-title span:before {
+	content: "\f452";
+}
+
+.settings_page_bp-components tr.blogs td.plugin-title span:before {
+	content: "\f120";
+}
+
+.settings_page_bp-components tr.friends td.plugin-title span:before {
+	content: "\f454";
+}
+
+/* Settings - Legacy (< WP 3.8) */
+body.branch-3-6.settings_page_bp-components tr.activity td.plugin-title span:before,
+body.branch-3-6.settings_page_bp-components tr.notifications td.plugin-title span:before,
+body.branch-3-6.settings_page_bp-components tr.xprofile td.plugin-title span:before,
+body.branch-3-6.settings_page_bp-components tr.settings td.plugin-title span:before,
+body.branch-3-6.settings_page_bp-components tr.groups td.plugin-title span:before,
+body.branch-3-6.settings_page_bp-components tr.messages td.plugin-title span:before,
+body.branch-3-6.settings_page_bp-components tr.forums td.plugin-title span:before,
+body.branch-3-6.settings_page_bp-components tr.blogs td.plugin-title span:before,
+body.branch-3-6.settings_page_bp-components tr.friends td.plugin-title span:before,
+body.branch-3-7.settings_page_bp-components tr.activity td.plugin-title span:before,
+body.branch-3-7.settings_page_bp-components tr.notifications td.plugin-title span:before,
+body.branch-3-7.settings_page_bp-components tr.xprofile td.plugin-title span:before,
+body.branch-3-7.settings_page_bp-components tr.settings td.plugin-title span:before,
+body.branch-3-7.settings_page_bp-components tr.groups td.plugin-title span:before,
+body.branch-3-7.settings_page_bp-components tr.messages td.plugin-title span:before,
+body.branch-3-7.settings_page_bp-components tr.forums td.plugin-title span:before,
+body.branch-3-7.settings_page_bp-components tr.blogs td.plugin-title span:before,
+body.branch-3-7.settings_page_bp-components tr.friends td.plugin-title span:before {
+	content: "";
+}
+
+body.branch-3-6.settings_page_bp-components td.plugin-title span,
+body.branch-3-7.settings_page_bp-components td.plugin-title span {
+	background-image: url('../images/menu.png');
+	background-position: -4px -40px;
+	background-repeat: no-repeat;
+}
+
+body.branch-3-6.settings_page_bp-components tr.active td.plugin-title span,
+body.branch-3-7.settings_page_bp-components tr.active td.plugin-title span {
+	background-position-y: -7px;
+}
+
+body.branch-3-6.settings_page_bp-components tr.activity td.plugin-title span,
+body.branch-3-7.settings_page_bp-components tr.activity td.plugin-title span {
+	background-position: -4px -40px;
+}
+
+body.branch-3-6.settings_page_bp-components tr.activity.active td.plugin-title span,
+body.branch-3-7.settings_page_bp-components tr.activity.active td.plugin-title span {
+	background-position: -4px -7px;
+}
+
+body.branch-3-6.settings_page_bp-components tr.xprofile td.plugin-title span,
+body.branch-3-7.settings_page_bp-components tr.xprofile td.plugin-title span {
+	background-image: url('../images/menu-wp.png');
+	background-position: -305px -40px;
+}
+
+body.branch-3-6.settings_page_bp-components tr.xprofile.active td.plugin-title span,
+body.branch-3-7.settings_page_bp-components tr.xprofile.active td.plugin-title span {
+	background-position: -305px -7px;
+}
+
+body.branch-3-6.settings_page_bp-components tr.settings td.plugin-title span,
+body.branch-3-7.settings_page_bp-components tr.settings td.plugin-title span {
+	background-image: url('../images/menu-wp.png');
+	background-position: -334px -40px;
+}
+
+body.branch-3-6.settings_page_bp-components tr.settings.active td.plugin-title span,
+body.branch-3-7.settings_page_bp-components tr.settings.active td.plugin-title span {
+	background-position: -334px -7px;
+}
+
+body.branch-3-6.settings_page_bp-components tr.groups td.plugin-title span,
+body.branch-3-7.settings_page_bp-components tr.groups td.plugin-title span {
+	background-position: -66px -40px;
+}
+
+body.branch-3-6.settings_page_bp-components tr.groups.active td.plugin-title span,
+body.branch-3-7.settings_page_bp-components tr.groups.active td.plugin-title span {
+	background-position: -66px -7px;
+}
+
+body.branch-3-6.settings_page_bp-components tr.messages td.plugin-title span,
+body.branch-3-7.settings_page_bp-components tr.messages td.plugin-title span {
+	background-position: -154px -40px;
+}
+
+body.branch-3-6.settings_page_bp-components tr.messages.active td.plugin-title span,
+body.branch-3-7.settings_page_bp-components tr.messages.active td.plugin-title span {
+	background-position: -154px -7px;
+}
+
+body.branch-3-6.settings_page_bp-components tr.forums td.plugin-title span,
+body.branch-3-7.settings_page_bp-components tr.forums td.plugin-title span {
+	background-image: url('../images/menu-wp.png');
+	background-position: -36px -40px;
+}
+
+body.branch-3-6.settings_page_bp-components tr.forums.active td.plugin-title span,
+body.branch-3-7.settings_page_bp-components tr.forums.active td.plugin-title span {
+	background-position: -36px -7px;
+}
+
+body.branch-3-6.settings_page_bp-components tr.blogs td.plugin-title span,
+body.branch-3-7.settings_page_bp-components tr.blogs td.plugin-title span {
+	background-position: -125px -40px;
+}
+
+body.branch-3-6.settings_page_bp-components tr.blogs.active td.plugin-title span,
+body.branch-3-7.settings_page_bp-components tr.blogs.active td.plugin-title span {
+	background-position: -125px -7px;
+}
+
+body.branch-3-6.settings_page_bp-components tr.friends td.plugin-title span,
+body.branch-3-7.settings_page_bp-components tr.friends td.plugin-title span {
+	background-position: -95px -40px;
+}
+
+body.branch-3-6.settings_page_bp-components tr.friends.active td.plugin-title span,
+body.branch-3-7.settings_page_bp-components tr.friends.active td.plugin-title span {
+	background-position: -95px -7px;
+}
+
+body.branch-3-6.settings_page_bp-components tr.core td.plugin-title span,
+body.branch-3-7.settings_page_bp-components tr.core td.plugin-title span {
+	background-position: -184px -40px;
+}
+
+body.branch-3-6.settings_page_bp-components tr.core.active td.plugin-title span,
+body.branch-3-7.settings_page_bp-components tr.core.active td.plugin-title span {
+	background-position: -184px -7px;
+}
+
+body.branch-3-6.settings_page_bp-components tr.members td.plugin-title span,
+body.branch-3-7.settings_page_bp-components tr.members td.plugin-title span {
+	background-position: -36px -40px;
+}
+
+body.branch-3-6.settings_page_bp-components tr.members.active td.plugin-title span,
+body.branch-3-7.settings_page_bp-components tr.members.active td.plugin-title span {
+	background-position: -36px -7px;
+}
+
+#bp-admin-component-form .widefat th {
+    display: table-cell;
+    vertical-align: top;
+}
+
+/* Version Badge */
+
+.bp-badge {
+	font: normal 150px/1 'dashicons' !important;
+	color: #D84800;
+	display: inline-block;
+}
+
+.bp-badge:before {
+	content: "\f448";
+}
+
+.about-wrap .bp-badge {
+	position: absolute;
+	top: 0;
+	left: 0;
+}
+
+/* HiDPI
+------------------------------------------------------------------------------*/
+
+@media only screen and (-webkit-min-device-pixel-ratio: 1.5) {
+
+	/* Icon 32 */
+	body.branch-3-6 div#icon-buddypress,
+	body.branch-3-6 div#icon-buddypress-activity,
+	body.branch-3-6 div#icon-buddypress-groups,
+	body.branch-3-7 div#icon-buddypress,
+	body.branch-3-7 div#icon-buddypress-activity,
+	body.branch-3-7 div#icon-buddypress-groups {
+		background-image: url('../images/icons64.png');
+		background-size: 419px 45px;
+	}
+
+	/* Backpat */
+	body.branch-3-6 ul#adminmenu li.toplevel_page_bp-components .wp-menu-image,
+	body.branch-3-6 ul#adminmenu li.toplevel_page_bp-general-settings .wp-menu-image,
+	body.branch-3-6 ul#adminmenu li.toplevel_page_bp-activity .wp-menu-image,
+	body.branch-3-6 ul#adminmenu li.toplevel_page_bp-activity_network .wp-menu-image,
+	body.branch-3-6 ul#adminmenu li.toplevel_page_bp-groups .wp-menu-image,
+	body.branch-3-6 ul#adminmenu li.toplevel_page_bp-groups_network .wp-menu-image,
+	body.branch-3-7 ul#adminmenu li.toplevel_page_bp-components .wp-menu-image,
+	body.branch-3-7 ul#adminmenu li.toplevel_page_bp-general-settings .wp-menu-image,
+	body.branch-3-7 ul#adminmenu li.toplevel_page_bp-activity .wp-menu-image,
+	body.branch-3-7 ul#adminmenu li.toplevel_page_bp-activity_network .wp-menu-image,
+	body.branch-3-7 ul#adminmenu li.toplevel_page_bp-groups .wp-menu-image,
+	body.branch-3-7 ul#adminmenu li.toplevel_page_bp-groups_network .wp-menu-image {
+		background-image: url('../images/menu-2x.png') !important;
+		background-size: 209px 64px;
+	}
+}
diff --git a/wp-content/plugins/buddypress/bp-core/admin/css/common-rtl.min.css b/wp-content/plugins/buddypress/bp-core/admin/css/common-rtl.min.css
new file mode 100644
index 000000000..8231fd8ab
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-core/admin/css/common-rtl.min.css
@@ -0,0 +1,2 @@
+/*! buddypress - v2.1.0 - 2014-10-06 9:39:09 PM UTC - https://wordpress.org/plugins/buddypress/ */
+body.site-users-php th#role,body.users-php th#role,body.users_page_bp-signups th#count_sent{width:10%}body.site-users-php th#email,body.site-users-php th#name,body.users-php th#email,body.users-php th#name,body.users-php th#registered,body.users_page_bp-signups th#date_sent,body.users_page_bp-signups th#email,body.users_page_bp-signups th#name,body.users_page_bp-signups th#registered{width:15%}body.users-php th#blogs,body.users_page_bp-signups th#blogs{width:20%}body.users_page_bp-signups td.count_sent,body.users_page_bp-signups th.column-count_sent{text-align:center}body.branch-3-6 div#icon-buddypress,body.branch-3-7 div#icon-buddypress{background:url(../images/icons32.png) -370px -6px no-repeat}body.branch-3-6 div#icon-buddypress-activity,body.branch-3-7 div#icon-buddypress-activity{background:url(../images/icons32.png) -10px -6px no-repeat}body.branch-3-6 div#icon-buddypress-groups,body.branch-3-7 div#icon-buddypress-groups{background:url(../images/icons32.png) -250px -6px no-repeat}body.branch-3-6 ul#adminmenu li.toplevel_page_bp-components .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-general-settings .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-components .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-general-settings .wp-menu-image{background-image:url(../images/menu.png)!important;background-position:-178px -34px}body.branch-3-6 ul#adminmenu li.toplevel_page_bp-components.wp-has-current-submenu .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-components:hover .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-general-settings.wp-has-current-submenu .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-general-settings:hover .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-components.wp-has-current-submenu .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-components:hover .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-general-settings.wp-has-current-submenu .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-general-settings:hover .wp-menu-image{background-position:-178px -2px}body.branch-3-6 ul#adminmenu li.toplevel_page_bp-activity .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-activity_network .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-activity .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-activity_network .wp-menu-image{background-image:url(../images/menu.png);background-position:0 -34px}body.branch-3-6 ul#adminmenu li.toplevel_page_bp-activity.current .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-activity.wp-has-current-submenu .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-activity:hover .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-activity_network.current .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-activity_network.wp-has-current-submenu .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-activity_network:hover .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-activity.current .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-activity.wp-has-current-submenu .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-activity:hover .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-activity_network.current .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-activity_network.wp-has-current-submenu .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-activity_network:hover .wp-menu-image{background-position:0 -2px}body.branch-3-6 ul#adminmenu li.toplevel_page_bp-groups .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-groups_network .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-groups .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-groups_network .wp-menu-image{background-image:url(../images/menu.png);background-position:-61px -34px}body.branch-3-6 ul#adminmenu li.toplevel_page_bp-groups.current .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-groups.wp-has-current-submenu .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-groups:hover .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-groups_network.current .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-groups_network.wp-has-current-submenu .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-groups_network:hover .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-groups.current .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-groups.wp-has-current-submenu .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-groups:hover .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-groups_network.current .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-groups_network.wp-has-current-submenu .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-groups_network:hover .wp-menu-image{background-position:-61px -2px}#adminmenu .toplevel_page_network-tools div.wp-menu-image:before{content:""}#adminmenu #toplevel_page_bp-activity .wp-menu-image:before,#adminmenu #toplevel_page_bp-activity_network .wp-menu-image:before,#adminmenu #toplevel_page_bp-activity_user .wp-menu-image:before{content:"\f452"}#adminmenu #toplevel_page_bp-groups .wp-menu-image:before,#adminmenu #toplevel_page_bp-groups_network .wp-menu-image:before,#adminmenu #toplevel_page_bp-groups_user .wp-menu-image:before{content:"\f456"}#adminmenu #toplevel_page_bp-notifications .wp-menu-image:before,#adminmenu #toplevel_page_bp-notifications_network .wp-menu-image:before,#adminmenu #toplevel_page_bp-notifications_user .wp-menu-image:before{content:"\f439"}#adminmenu #toplevel_page_bp-messages .wp-menu-image:before,#adminmenu #toplevel_page_bp-messages_network .wp-menu-image:before,#adminmenu #toplevel_page_bp-messages_user .wp-menu-image:before{content:"\f457"}#adminmenu #toplevel_page_bp-friends .wp-menu-image:before,#adminmenu #toplevel_page_bp-friends_network .wp-menu-image:before,#adminmenu #toplevel_page_bp-friends_user .wp-menu-image:before{content:"\f454"}#adminmenu #toplevel_page_bp-settings .wp-menu-image:before,#adminmenu #toplevel_page_bp-settings_network .wp-menu-image:before,#adminmenu #toplevel_page_bp-settings_user .wp-menu-image:before{content:"\f108"}#adminmenu li.toplevel_page_bp-components .wp-menu-image,#adminmenu li.toplevel_page_bp-general-settings .wp-menu-image{content:"\f448"}body.branch-3-6 #adminmenu #toplevel_page_bp-activity .wp-menu-image:before,body.branch-3-6 #adminmenu #toplevel_page_bp-activity_network .wp-menu-image:before,body.branch-3-6 #adminmenu #toplevel_page_bp-groups .wp-menu-image:before,body.branch-3-6 #adminmenu #toplevel_page_bp-groups_network .wp-menu-image:before,body.branch-3-6 #adminmenu li.toplevel_page_bp-components .wp-menu-image,body.branch-3-6 #adminmenu li.toplevel_page_bp-general-settings .wp-menu-image,body.branch-3-7 #adminmenu #toplevel_page_bp-activity .wp-menu-image:before,body.branch-3-7 #adminmenu #toplevel_page_bp-activity_network .wp-menu-image:before,body.branch-3-7 #adminmenu #toplevel_page_bp-groups .wp-menu-image:before,body.branch-3-7 #adminmenu #toplevel_page_bp-groups_network .wp-menu-image:before,body.branch-3-7 #adminmenu li.toplevel_page_bp-components .wp-menu-image,body.branch-3-7 #adminmenu li.toplevel_page_bp-general-settings .wp-menu-image{content:""}.settings_page_bp-components td.plugin-title span{float:right;width:18px;height:18px;margin-left:5px}.settings_page_bp-components td.plugin-title span:before{font-family:dashicons;font-size:18px}.settings_page_bp-components tr.activity td.plugin-title span:before{content:"\f452"}.settings_page_bp-components tr.notifications td.plugin-title span:before{content:"\f339"}.settings_page_bp-components tr.xprofile td.plugin-title span:before{content:"\f336"}.settings_page_bp-components tr.settings td.plugin-title span:before{content:"\f108"}.settings_page_bp-components tr.groups td.plugin-title span:before{content:"\f456"}.settings_page_bp-components tr.messages td.plugin-title span:before{content:"\f457"}.settings_page_bp-components tr.forums td.plugin-title span:before{content:"\f452"}.settings_page_bp-components tr.blogs td.plugin-title span:before{content:"\f120"}.settings_page_bp-components tr.friends td.plugin-title span:before{content:"\f454"}body.branch-3-6.settings_page_bp-components tr.activity td.plugin-title span:before,body.branch-3-6.settings_page_bp-components tr.blogs td.plugin-title span:before,body.branch-3-6.settings_page_bp-components tr.forums td.plugin-title span:before,body.branch-3-6.settings_page_bp-components tr.friends td.plugin-title span:before,body.branch-3-6.settings_page_bp-components tr.groups td.plugin-title span:before,body.branch-3-6.settings_page_bp-components tr.messages td.plugin-title span:before,body.branch-3-6.settings_page_bp-components tr.notifications td.plugin-title span:before,body.branch-3-6.settings_page_bp-components tr.settings td.plugin-title span:before,body.branch-3-6.settings_page_bp-components tr.xprofile td.plugin-title span:before,body.branch-3-7.settings_page_bp-components tr.activity td.plugin-title span:before,body.branch-3-7.settings_page_bp-components tr.blogs td.plugin-title span:before,body.branch-3-7.settings_page_bp-components tr.forums td.plugin-title span:before,body.branch-3-7.settings_page_bp-components tr.friends td.plugin-title span:before,body.branch-3-7.settings_page_bp-components tr.groups td.plugin-title span:before,body.branch-3-7.settings_page_bp-components tr.messages td.plugin-title span:before,body.branch-3-7.settings_page_bp-components tr.notifications td.plugin-title span:before,body.branch-3-7.settings_page_bp-components tr.settings td.plugin-title span:before,body.branch-3-7.settings_page_bp-components tr.xprofile td.plugin-title span:before{content:""}body.branch-3-6.settings_page_bp-components td.plugin-title span,body.branch-3-7.settings_page_bp-components td.plugin-title span{background-image:url(../images/menu.png);background-position:-4px -40px;background-repeat:no-repeat}body.branch-3-6.settings_page_bp-components tr.active td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.active td.plugin-title span{background-position-y:-7px}body.branch-3-6.settings_page_bp-components tr.activity td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.activity td.plugin-title span{background-position:-4px -40px}body.branch-3-6.settings_page_bp-components tr.activity.active td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.activity.active td.plugin-title span{background-position:-4px -7px}body.branch-3-6.settings_page_bp-components tr.xprofile td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.xprofile td.plugin-title span{background-image:url(../images/menu-wp.png);background-position:-305px -40px}body.branch-3-6.settings_page_bp-components tr.xprofile.active td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.xprofile.active td.plugin-title span{background-position:-305px -7px}body.branch-3-6.settings_page_bp-components tr.settings td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.settings td.plugin-title span{background-image:url(../images/menu-wp.png);background-position:-334px -40px}body.branch-3-6.settings_page_bp-components tr.settings.active td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.settings.active td.plugin-title span{background-position:-334px -7px}body.branch-3-6.settings_page_bp-components tr.groups td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.groups td.plugin-title span{background-position:-66px -40px}body.branch-3-6.settings_page_bp-components tr.groups.active td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.groups.active td.plugin-title span{background-position:-66px -7px}body.branch-3-6.settings_page_bp-components tr.messages td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.messages td.plugin-title span{background-position:-154px -40px}body.branch-3-6.settings_page_bp-components tr.messages.active td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.messages.active td.plugin-title span{background-position:-154px -7px}body.branch-3-6.settings_page_bp-components tr.forums td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.forums td.plugin-title span{background-image:url(../images/menu-wp.png);background-position:-36px -40px}body.branch-3-6.settings_page_bp-components tr.forums.active td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.forums.active td.plugin-title span{background-position:-36px -7px}body.branch-3-6.settings_page_bp-components tr.blogs td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.blogs td.plugin-title span{background-position:-125px -40px}body.branch-3-6.settings_page_bp-components tr.blogs.active td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.blogs.active td.plugin-title span{background-position:-125px -7px}body.branch-3-6.settings_page_bp-components tr.friends td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.friends td.plugin-title span{background-position:-95px -40px}body.branch-3-6.settings_page_bp-components tr.friends.active td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.friends.active td.plugin-title span{background-position:-95px -7px}body.branch-3-6.settings_page_bp-components tr.core td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.core td.plugin-title span{background-position:-184px -40px}body.branch-3-6.settings_page_bp-components tr.core.active td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.core.active td.plugin-title span{background-position:-184px -7px}body.branch-3-6.settings_page_bp-components tr.members td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.members td.plugin-title span{background-position:-36px -40px}body.branch-3-6.settings_page_bp-components tr.members.active td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.members.active td.plugin-title span{background-position:-36px -7px}#bp-admin-component-form .widefat th{display:table-cell;vertical-align:top}.bp-badge{font:400 150px/1 dashicons!important;color:#D84800;display:inline-block}.bp-badge:before{content:"\f448"}.about-wrap .bp-badge{position:absolute;top:0;left:0}@media only screen and (-webkit-min-device-pixel-ratio:1.5){body.branch-3-6 div#icon-buddypress,body.branch-3-6 div#icon-buddypress-activity,body.branch-3-6 div#icon-buddypress-groups,body.branch-3-7 div#icon-buddypress,body.branch-3-7 div#icon-buddypress-activity,body.branch-3-7 div#icon-buddypress-groups{background-image:url(../images/icons64.png);background-size:419px 45px}body.branch-3-6 ul#adminmenu li.toplevel_page_bp-activity .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-activity_network .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-components .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-general-settings .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-groups .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-groups_network .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-activity .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-activity_network .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-components .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-general-settings .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-groups .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-groups_network .wp-menu-image{background-image:url(../images/menu-2x.png)!important;background-size:209px 64px}}
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-core/admin/css/common.css b/wp-content/plugins/buddypress/bp-core/admin/css/common.css
index e4766795a..0899ce738 100644
--- a/wp-content/plugins/buddypress/bp-core/admin/css/common.css
+++ b/wp-content/plugins/buddypress/bp-core/admin/css/common.css
@@ -4,6 +4,37 @@
  * @since BuddyPress (1.6)
  */
 
+/* User's Lists
+------------------------------------------------------------------------------*/
+
+body.site-users-php th#role,
+body.users-php th#role,
+body.users_page_bp-signups th#count_sent {
+	width: 10%;
+}
+
+body.site-users-php th#name,
+body.site-users-php th#email,
+body.users-php th#name,
+body.users-php th#registered,
+body.users-php th#email,
+body.users_page_bp-signups th#name,
+body.users_page_bp-signups th#registered,
+body.users_page_bp-signups th#email,
+body.users_page_bp-signups th#date_sent {
+	width: 15%;
+}
+
+body.users-php th#blogs,
+body.users_page_bp-signups th#blogs {
+	width: 20%;
+}
+
+body.users_page_bp-signups th.column-count_sent,
+body.users_page_bp-signups td.count_sent {
+	text-align: center;
+}
+
 /* Icon 32's
 ------------------------------------------------------------------------------*/
 
@@ -96,28 +127,6 @@ body.branch-3-7 ul#adminmenu li.toplevel_page_bp-groups_network.wp-has-current-s
     content: "";
 }
 
-th.column-gid {
-	width: 60px;
-}
-td.column-gid {
-	vertical-align: middle;
-}
-table.bp-group-members th,
-table.bp-group-members td {
-	padding: 5px 0;
-}
-table.bp-group-members .uid-column {
-	padding-left: 20px;
-	padding-right: 20px;
-}
-table.bp-group-members .uname-column {
-	width: 70%;
-}
-table.bp-group-members .urole-column {
-	padding-left: 20px;
-	padding-right: 20px;
-}
-
 /* Components
 ------------------------------------------------------------------------------*/
 
@@ -374,7 +383,7 @@ body.branch-3-7.settings_page_bp-components tr.members.active td.plugin-title sp
 
 .bp-badge {
 	font: normal 150px/1 'dashicons' !important;
-	color: #000;
+	color: #D84800;
 	display: inline-block;
 }
 
@@ -387,10 +396,6 @@ body.branch-3-7.settings_page_bp-components tr.members.active td.plugin-title sp
 	top: 0;
 	right: 0;
 }
-	body.rtl .about-wrap .bp-badge {
-		right: auto;
-		left: 0;
-	}
 
 /* HiDPI
 ------------------------------------------------------------------------------*/
@@ -424,10 +429,4 @@ body.branch-3-7.settings_page_bp-components tr.members.active td.plugin-title sp
 		background-image: url('../images/menu-2x.png') !important;
 		background-size: 209px 64px;
 	}
-
-	/* Badge */
-	.bp-badge {
-		background-image: url('../images/badge-2x.png');
-		background-size: 173px 194px;
-	}
-}
\ No newline at end of file
+}
diff --git a/wp-content/plugins/buddypress/bp-core/admin/css/common.min.css b/wp-content/plugins/buddypress/bp-core/admin/css/common.min.css
index 9cfa2969b..4d7f48096 100644
--- a/wp-content/plugins/buddypress/bp-core/admin/css/common.min.css
+++ b/wp-content/plugins/buddypress/bp-core/admin/css/common.min.css
@@ -1 +1,2 @@
-body.branch-3-6 div#icon-buddypress,body.branch-3-7 div#icon-buddypress{background:url('../images/icons32.png') no-repeat -370px -6px}body.branch-3-6 div#icon-buddypress-activity,body.branch-3-7 div#icon-buddypress-activity{background:url('../images/icons32.png') no-repeat -10px -6px}body.branch-3-6 div#icon-buddypress-groups,body.branch-3-7 div#icon-buddypress-groups{background:url('../images/icons32.png') no-repeat -250px -6px}body.branch-3-6 ul#adminmenu li.toplevel_page_bp-components .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-general-settings .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-components .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-general-settings .wp-menu-image{background-image:url('../images/menu.png') !important;background-position:-178px -34px}body.branch-3-6 ul#adminmenu li.toplevel_page_bp-components:hover .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-general-settings:hover .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-components.wp-has-current-submenu .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-general-settings.wp-has-current-submenu .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-components:hover .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-general-settings:hover .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-components.wp-has-current-submenu .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-general-settings.wp-has-current-submenu .wp-menu-image{background-position:-178px -2px}body.branch-3-6 ul#adminmenu li.toplevel_page_bp-activity .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-activity_network .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-activity .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-activity_network .wp-menu-image{background-image:url('../images/menu.png');background-position:0 -34px}body.branch-3-6 ul#adminmenu li.toplevel_page_bp-activity:hover .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-activity.current .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-activity.wp-has-current-submenu .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-activity_network:hover .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-activity_network.current .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-activity_network.wp-has-current-submenu .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-activity:hover .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-activity.current .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-activity.wp-has-current-submenu .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-activity_network:hover .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-activity_network.current .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-activity_network.wp-has-current-submenu .wp-menu-image{background-position:0 -2px}body.branch-3-6 ul#adminmenu li.toplevel_page_bp-groups .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-groups_network .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-groups .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-groups_network .wp-menu-image{background-image:url('../images/menu.png');background-position:-61px -34px}body.branch-3-6 ul#adminmenu li.toplevel_page_bp-groups:hover .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-groups.current .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-groups.wp-has-current-submenu .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-groups_network:hover .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-groups_network.current .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-groups_network.wp-has-current-submenu .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-groups:hover .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-groups.current .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-groups.wp-has-current-submenu .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-groups_network:hover .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-groups_network.current .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-groups_network.wp-has-current-submenu .wp-menu-image{background-position:-61px -2px}#adminmenu .toplevel_page_network-tools div.wp-menu-image:before{content:""}th.column-gid{width:60px}td.column-gid{vertical-align:middle}table.bp-group-members th,table.bp-group-members td{padding:5px 0}table.bp-group-members .uid-column{padding-left:20px;padding-right:20px}table.bp-group-members .uname-column{width:70%}table.bp-group-members .urole-column{padding-left:20px;padding-right:20px}#adminmenu #toplevel_page_bp-activity .wp-menu-image:before,#adminmenu #toplevel_page_bp-activity_user .wp-menu-image:before,#adminmenu #toplevel_page_bp-activity_network .wp-menu-image:before{content:"\f452"}#adminmenu #toplevel_page_bp-groups .wp-menu-image:before,#adminmenu #toplevel_page_bp-groups_user .wp-menu-image:before,#adminmenu #toplevel_page_bp-groups_network .wp-menu-image:before{content:"\f456"}#adminmenu #toplevel_page_bp-notifications .wp-menu-image:before,#adminmenu #toplevel_page_bp-notifications_user .wp-menu-image:before,#adminmenu #toplevel_page_bp-notifications_network .wp-menu-image:before{content:"\f439"}#adminmenu #toplevel_page_bp-messages .wp-menu-image:before,#adminmenu #toplevel_page_bp-messages_user .wp-menu-image:before,#adminmenu #toplevel_page_bp-messages_network .wp-menu-image:before{content:"\f457"}#adminmenu #toplevel_page_bp-friends .wp-menu-image:before,#adminmenu #toplevel_page_bp-friends_user .wp-menu-image:before,#adminmenu #toplevel_page_bp-friends_network .wp-menu-image:before{content:"\f454"}#adminmenu #toplevel_page_bp-settings .wp-menu-image:before,#adminmenu #toplevel_page_bp-settings_user .wp-menu-image:before,#adminmenu #toplevel_page_bp-settings_network .wp-menu-image:before{content:"\f108"}#adminmenu li.toplevel_page_bp-components .wp-menu-image,#adminmenu li.toplevel_page_bp-general-settings .wp-menu-image{content:"\f448"}body.branch-3-6 #adminmenu #toplevel_page_bp-activity .wp-menu-image:before,body.branch-3-6 #adminmenu #toplevel_page_bp-activity_network .wp-menu-image:before,body.branch-3-6 #adminmenu #toplevel_page_bp-groups .wp-menu-image:before,body.branch-3-6 #adminmenu #toplevel_page_bp-groups_network .wp-menu-image:before,body.branch-3-6 #adminmenu li.toplevel_page_bp-components .wp-menu-image,body.branch-3-6 #adminmenu li.toplevel_page_bp-general-settings .wp-menu-image,body.branch-3-7 #adminmenu #toplevel_page_bp-activity .wp-menu-image:before,body.branch-3-7 #adminmenu #toplevel_page_bp-activity_network .wp-menu-image:before,body.branch-3-7 #adminmenu #toplevel_page_bp-groups .wp-menu-image:before,body.branch-3-7 #adminmenu #toplevel_page_bp-groups_network .wp-menu-image:before,body.branch-3-7 #adminmenu li.toplevel_page_bp-components .wp-menu-image,body.branch-3-7 #adminmenu li.toplevel_page_bp-general-settings .wp-menu-image{content:""}.settings_page_bp-components td.plugin-title span{float:left;width:18px;height:18px;margin-right:5px}.settings_page_bp-components td.plugin-title span:before{font-family:'dashicons';font-size:18px}.settings_page_bp-components tr.activity td.plugin-title span:before{content:"\f452"}.settings_page_bp-components tr.notifications td.plugin-title span:before{content:"\f339"}.settings_page_bp-components tr.xprofile td.plugin-title span:before{content:"\f336"}.settings_page_bp-components tr.settings td.plugin-title span:before{content:"\f108"}.settings_page_bp-components tr.groups td.plugin-title span:before{content:"\f456"}.settings_page_bp-components tr.messages td.plugin-title span:before{content:"\f457"}.settings_page_bp-components tr.forums td.plugin-title span:before{content:"\f452"}.settings_page_bp-components tr.blogs td.plugin-title span:before{content:"\f120"}.settings_page_bp-components tr.friends td.plugin-title span:before{content:"\f454"}body.branch-3-6.settings_page_bp-components tr.activity td.plugin-title span:before,body.branch-3-6.settings_page_bp-components tr.notifications td.plugin-title span:before,body.branch-3-6.settings_page_bp-components tr.xprofile td.plugin-title span:before,body.branch-3-6.settings_page_bp-components tr.settings td.plugin-title span:before,body.branch-3-6.settings_page_bp-components tr.groups td.plugin-title span:before,body.branch-3-6.settings_page_bp-components tr.messages td.plugin-title span:before,body.branch-3-6.settings_page_bp-components tr.forums td.plugin-title span:before,body.branch-3-6.settings_page_bp-components tr.blogs td.plugin-title span:before,body.branch-3-6.settings_page_bp-components tr.friends td.plugin-title span:before,body.branch-3-7.settings_page_bp-components tr.activity td.plugin-title span:before,body.branch-3-7.settings_page_bp-components tr.notifications td.plugin-title span:before,body.branch-3-7.settings_page_bp-components tr.xprofile td.plugin-title span:before,body.branch-3-7.settings_page_bp-components tr.settings td.plugin-title span:before,body.branch-3-7.settings_page_bp-components tr.groups td.plugin-title span:before,body.branch-3-7.settings_page_bp-components tr.messages td.plugin-title span:before,body.branch-3-7.settings_page_bp-components tr.forums td.plugin-title span:before,body.branch-3-7.settings_page_bp-components tr.blogs td.plugin-title span:before,body.branch-3-7.settings_page_bp-components tr.friends td.plugin-title span:before{content:""}body.branch-3-6.settings_page_bp-components td.plugin-title span,body.branch-3-7.settings_page_bp-components td.plugin-title span{background-image:url('../images/menu.png');background-position:-4px -40px;background-repeat:no-repeat}body.branch-3-6.settings_page_bp-components tr.active td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.active td.plugin-title span{background-position-y:-7px}body.branch-3-6.settings_page_bp-components tr.activity td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.activity td.plugin-title span{background-position:-4px -40px}body.branch-3-6.settings_page_bp-components tr.activity.active td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.activity.active td.plugin-title span{background-position:-4px -7px}body.branch-3-6.settings_page_bp-components tr.xprofile td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.xprofile td.plugin-title span{background-image:url('../images/menu-wp.png');background-position:-305px -40px}body.branch-3-6.settings_page_bp-components tr.xprofile.active td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.xprofile.active td.plugin-title span{background-position:-305px -7px}body.branch-3-6.settings_page_bp-components tr.settings td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.settings td.plugin-title span{background-image:url('../images/menu-wp.png');background-position:-334px -40px}body.branch-3-6.settings_page_bp-components tr.settings.active td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.settings.active td.plugin-title span{background-position:-334px -7px}body.branch-3-6.settings_page_bp-components tr.groups td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.groups td.plugin-title span{background-position:-66px -40px}body.branch-3-6.settings_page_bp-components tr.groups.active td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.groups.active td.plugin-title span{background-position:-66px -7px}body.branch-3-6.settings_page_bp-components tr.messages td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.messages td.plugin-title span{background-position:-154px -40px}body.branch-3-6.settings_page_bp-components tr.messages.active td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.messages.active td.plugin-title span{background-position:-154px -7px}body.branch-3-6.settings_page_bp-components tr.forums td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.forums td.plugin-title span{background-image:url('../images/menu-wp.png');background-position:-36px -40px}body.branch-3-6.settings_page_bp-components tr.forums.active td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.forums.active td.plugin-title span{background-position:-36px -7px}body.branch-3-6.settings_page_bp-components tr.blogs td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.blogs td.plugin-title span{background-position:-125px -40px}body.branch-3-6.settings_page_bp-components tr.blogs.active td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.blogs.active td.plugin-title span{background-position:-125px -7px}body.branch-3-6.settings_page_bp-components tr.friends td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.friends td.plugin-title span{background-position:-95px -40px}body.branch-3-6.settings_page_bp-components tr.friends.active td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.friends.active td.plugin-title span{background-position:-95px -7px}body.branch-3-6.settings_page_bp-components tr.core td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.core td.plugin-title span{background-position:-184px -40px}body.branch-3-6.settings_page_bp-components tr.core.active td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.core.active td.plugin-title span{background-position:-184px -7px}body.branch-3-6.settings_page_bp-components tr.members td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.members td.plugin-title span{background-position:-36px -40px}body.branch-3-6.settings_page_bp-components tr.members.active td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.members.active td.plugin-title span{background-position:-36px -7px}#bp-admin-component-form .widefat th{display:table-cell;vertical-align:top}.bp-badge{font:normal 150px/1 'dashicons' !important;color:#000;display:inline-block}.bp-badge:before{content:"\f448"}.about-wrap .bp-badge{position:absolute;top:0;right:0}body.rtl .about-wrap .bp-badge{right:auto;left:0}@media only screen and (-webkit-min-device-pixel-ratio:1.5){body.branch-3-6 div#icon-buddypress,body.branch-3-6 div#icon-buddypress-activity,body.branch-3-6 div#icon-buddypress-groups,body.branch-3-7 div#icon-buddypress,body.branch-3-7 div#icon-buddypress-activity,body.branch-3-7 div#icon-buddypress-groups{background-image:url('../images/icons64.png');background-size:419px 45px}body.branch-3-6 ul#adminmenu li.toplevel_page_bp-components .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-general-settings .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-activity .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-activity_network .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-groups .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-groups_network .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-components .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-general-settings .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-activity .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-activity_network .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-groups .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-groups_network .wp-menu-image{background-image:url('../images/menu-2x.png') !important;background-size:209px 64px}.bp-badge{background-image:url('../images/badge-2x.png');background-size:173px 194px}}
\ No newline at end of file
+/*! buddypress - v2.1.0 - 2014-10-06 9:39:09 PM UTC - https://wordpress.org/plugins/buddypress/ */
+body.site-users-php th#role,body.users-php th#role,body.users_page_bp-signups th#count_sent{width:10%}body.site-users-php th#email,body.site-users-php th#name,body.users-php th#email,body.users-php th#name,body.users-php th#registered,body.users_page_bp-signups th#date_sent,body.users_page_bp-signups th#email,body.users_page_bp-signups th#name,body.users_page_bp-signups th#registered{width:15%}body.users-php th#blogs,body.users_page_bp-signups th#blogs{width:20%}body.users_page_bp-signups td.count_sent,body.users_page_bp-signups th.column-count_sent{text-align:center}body.branch-3-6 div#icon-buddypress,body.branch-3-7 div#icon-buddypress{background:url(../images/icons32.png) -370px -6px no-repeat}body.branch-3-6 div#icon-buddypress-activity,body.branch-3-7 div#icon-buddypress-activity{background:url(../images/icons32.png) -10px -6px no-repeat}body.branch-3-6 div#icon-buddypress-groups,body.branch-3-7 div#icon-buddypress-groups{background:url(../images/icons32.png) -250px -6px no-repeat}body.branch-3-6 ul#adminmenu li.toplevel_page_bp-components .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-general-settings .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-components .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-general-settings .wp-menu-image{background-image:url(../images/menu.png)!important;background-position:-178px -34px}body.branch-3-6 ul#adminmenu li.toplevel_page_bp-components.wp-has-current-submenu .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-components:hover .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-general-settings.wp-has-current-submenu .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-general-settings:hover .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-components.wp-has-current-submenu .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-components:hover .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-general-settings.wp-has-current-submenu .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-general-settings:hover .wp-menu-image{background-position:-178px -2px}body.branch-3-6 ul#adminmenu li.toplevel_page_bp-activity .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-activity_network .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-activity .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-activity_network .wp-menu-image{background-image:url(../images/menu.png);background-position:0 -34px}body.branch-3-6 ul#adminmenu li.toplevel_page_bp-activity.current .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-activity.wp-has-current-submenu .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-activity:hover .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-activity_network.current .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-activity_network.wp-has-current-submenu .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-activity_network:hover .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-activity.current .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-activity.wp-has-current-submenu .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-activity:hover .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-activity_network.current .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-activity_network.wp-has-current-submenu .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-activity_network:hover .wp-menu-image{background-position:0 -2px}body.branch-3-6 ul#adminmenu li.toplevel_page_bp-groups .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-groups_network .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-groups .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-groups_network .wp-menu-image{background-image:url(../images/menu.png);background-position:-61px -34px}body.branch-3-6 ul#adminmenu li.toplevel_page_bp-groups.current .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-groups.wp-has-current-submenu .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-groups:hover .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-groups_network.current .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-groups_network.wp-has-current-submenu .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-groups_network:hover .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-groups.current .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-groups.wp-has-current-submenu .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-groups:hover .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-groups_network.current .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-groups_network.wp-has-current-submenu .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-groups_network:hover .wp-menu-image{background-position:-61px -2px}#adminmenu .toplevel_page_network-tools div.wp-menu-image:before{content:""}#adminmenu #toplevel_page_bp-activity .wp-menu-image:before,#adminmenu #toplevel_page_bp-activity_network .wp-menu-image:before,#adminmenu #toplevel_page_bp-activity_user .wp-menu-image:before{content:"\f452"}#adminmenu #toplevel_page_bp-groups .wp-menu-image:before,#adminmenu #toplevel_page_bp-groups_network .wp-menu-image:before,#adminmenu #toplevel_page_bp-groups_user .wp-menu-image:before{content:"\f456"}#adminmenu #toplevel_page_bp-notifications .wp-menu-image:before,#adminmenu #toplevel_page_bp-notifications_network .wp-menu-image:before,#adminmenu #toplevel_page_bp-notifications_user .wp-menu-image:before{content:"\f439"}#adminmenu #toplevel_page_bp-messages .wp-menu-image:before,#adminmenu #toplevel_page_bp-messages_network .wp-menu-image:before,#adminmenu #toplevel_page_bp-messages_user .wp-menu-image:before{content:"\f457"}#adminmenu #toplevel_page_bp-friends .wp-menu-image:before,#adminmenu #toplevel_page_bp-friends_network .wp-menu-image:before,#adminmenu #toplevel_page_bp-friends_user .wp-menu-image:before{content:"\f454"}#adminmenu #toplevel_page_bp-settings .wp-menu-image:before,#adminmenu #toplevel_page_bp-settings_network .wp-menu-image:before,#adminmenu #toplevel_page_bp-settings_user .wp-menu-image:before{content:"\f108"}#adminmenu li.toplevel_page_bp-components .wp-menu-image,#adminmenu li.toplevel_page_bp-general-settings .wp-menu-image{content:"\f448"}body.branch-3-6 #adminmenu #toplevel_page_bp-activity .wp-menu-image:before,body.branch-3-6 #adminmenu #toplevel_page_bp-activity_network .wp-menu-image:before,body.branch-3-6 #adminmenu #toplevel_page_bp-groups .wp-menu-image:before,body.branch-3-6 #adminmenu #toplevel_page_bp-groups_network .wp-menu-image:before,body.branch-3-6 #adminmenu li.toplevel_page_bp-components .wp-menu-image,body.branch-3-6 #adminmenu li.toplevel_page_bp-general-settings .wp-menu-image,body.branch-3-7 #adminmenu #toplevel_page_bp-activity .wp-menu-image:before,body.branch-3-7 #adminmenu #toplevel_page_bp-activity_network .wp-menu-image:before,body.branch-3-7 #adminmenu #toplevel_page_bp-groups .wp-menu-image:before,body.branch-3-7 #adminmenu #toplevel_page_bp-groups_network .wp-menu-image:before,body.branch-3-7 #adminmenu li.toplevel_page_bp-components .wp-menu-image,body.branch-3-7 #adminmenu li.toplevel_page_bp-general-settings .wp-menu-image{content:""}.settings_page_bp-components td.plugin-title span{float:left;width:18px;height:18px;margin-right:5px}.settings_page_bp-components td.plugin-title span:before{font-family:dashicons;font-size:18px}.settings_page_bp-components tr.activity td.plugin-title span:before{content:"\f452"}.settings_page_bp-components tr.notifications td.plugin-title span:before{content:"\f339"}.settings_page_bp-components tr.xprofile td.plugin-title span:before{content:"\f336"}.settings_page_bp-components tr.settings td.plugin-title span:before{content:"\f108"}.settings_page_bp-components tr.groups td.plugin-title span:before{content:"\f456"}.settings_page_bp-components tr.messages td.plugin-title span:before{content:"\f457"}.settings_page_bp-components tr.forums td.plugin-title span:before{content:"\f452"}.settings_page_bp-components tr.blogs td.plugin-title span:before{content:"\f120"}.settings_page_bp-components tr.friends td.plugin-title span:before{content:"\f454"}body.branch-3-6.settings_page_bp-components tr.activity td.plugin-title span:before,body.branch-3-6.settings_page_bp-components tr.blogs td.plugin-title span:before,body.branch-3-6.settings_page_bp-components tr.forums td.plugin-title span:before,body.branch-3-6.settings_page_bp-components tr.friends td.plugin-title span:before,body.branch-3-6.settings_page_bp-components tr.groups td.plugin-title span:before,body.branch-3-6.settings_page_bp-components tr.messages td.plugin-title span:before,body.branch-3-6.settings_page_bp-components tr.notifications td.plugin-title span:before,body.branch-3-6.settings_page_bp-components tr.settings td.plugin-title span:before,body.branch-3-6.settings_page_bp-components tr.xprofile td.plugin-title span:before,body.branch-3-7.settings_page_bp-components tr.activity td.plugin-title span:before,body.branch-3-7.settings_page_bp-components tr.blogs td.plugin-title span:before,body.branch-3-7.settings_page_bp-components tr.forums td.plugin-title span:before,body.branch-3-7.settings_page_bp-components tr.friends td.plugin-title span:before,body.branch-3-7.settings_page_bp-components tr.groups td.plugin-title span:before,body.branch-3-7.settings_page_bp-components tr.messages td.plugin-title span:before,body.branch-3-7.settings_page_bp-components tr.notifications td.plugin-title span:before,body.branch-3-7.settings_page_bp-components tr.settings td.plugin-title span:before,body.branch-3-7.settings_page_bp-components tr.xprofile td.plugin-title span:before{content:""}body.branch-3-6.settings_page_bp-components td.plugin-title span,body.branch-3-7.settings_page_bp-components td.plugin-title span{background-image:url(../images/menu.png);background-position:-4px -40px;background-repeat:no-repeat}body.branch-3-6.settings_page_bp-components tr.active td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.active td.plugin-title span{background-position-y:-7px}body.branch-3-6.settings_page_bp-components tr.activity td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.activity td.plugin-title span{background-position:-4px -40px}body.branch-3-6.settings_page_bp-components tr.activity.active td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.activity.active td.plugin-title span{background-position:-4px -7px}body.branch-3-6.settings_page_bp-components tr.xprofile td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.xprofile td.plugin-title span{background-image:url(../images/menu-wp.png);background-position:-305px -40px}body.branch-3-6.settings_page_bp-components tr.xprofile.active td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.xprofile.active td.plugin-title span{background-position:-305px -7px}body.branch-3-6.settings_page_bp-components tr.settings td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.settings td.plugin-title span{background-image:url(../images/menu-wp.png);background-position:-334px -40px}body.branch-3-6.settings_page_bp-components tr.settings.active td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.settings.active td.plugin-title span{background-position:-334px -7px}body.branch-3-6.settings_page_bp-components tr.groups td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.groups td.plugin-title span{background-position:-66px -40px}body.branch-3-6.settings_page_bp-components tr.groups.active td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.groups.active td.plugin-title span{background-position:-66px -7px}body.branch-3-6.settings_page_bp-components tr.messages td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.messages td.plugin-title span{background-position:-154px -40px}body.branch-3-6.settings_page_bp-components tr.messages.active td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.messages.active td.plugin-title span{background-position:-154px -7px}body.branch-3-6.settings_page_bp-components tr.forums td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.forums td.plugin-title span{background-image:url(../images/menu-wp.png);background-position:-36px -40px}body.branch-3-6.settings_page_bp-components tr.forums.active td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.forums.active td.plugin-title span{background-position:-36px -7px}body.branch-3-6.settings_page_bp-components tr.blogs td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.blogs td.plugin-title span{background-position:-125px -40px}body.branch-3-6.settings_page_bp-components tr.blogs.active td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.blogs.active td.plugin-title span{background-position:-125px -7px}body.branch-3-6.settings_page_bp-components tr.friends td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.friends td.plugin-title span{background-position:-95px -40px}body.branch-3-6.settings_page_bp-components tr.friends.active td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.friends.active td.plugin-title span{background-position:-95px -7px}body.branch-3-6.settings_page_bp-components tr.core td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.core td.plugin-title span{background-position:-184px -40px}body.branch-3-6.settings_page_bp-components tr.core.active td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.core.active td.plugin-title span{background-position:-184px -7px}body.branch-3-6.settings_page_bp-components tr.members td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.members td.plugin-title span{background-position:-36px -40px}body.branch-3-6.settings_page_bp-components tr.members.active td.plugin-title span,body.branch-3-7.settings_page_bp-components tr.members.active td.plugin-title span{background-position:-36px -7px}#bp-admin-component-form .widefat th{display:table-cell;vertical-align:top}.bp-badge{font:400 150px/1 dashicons!important;color:#D84800;display:inline-block}.bp-badge:before{content:"\f448"}.about-wrap .bp-badge{position:absolute;top:0;right:0}@media only screen and (-webkit-min-device-pixel-ratio:1.5){body.branch-3-6 div#icon-buddypress,body.branch-3-6 div#icon-buddypress-activity,body.branch-3-6 div#icon-buddypress-groups,body.branch-3-7 div#icon-buddypress,body.branch-3-7 div#icon-buddypress-activity,body.branch-3-7 div#icon-buddypress-groups{background-image:url(../images/icons64.png);background-size:419px 45px}body.branch-3-6 ul#adminmenu li.toplevel_page_bp-activity .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-activity_network .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-components .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-general-settings .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-groups .wp-menu-image,body.branch-3-6 ul#adminmenu li.toplevel_page_bp-groups_network .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-activity .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-activity_network .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-components .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-general-settings .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-groups .wp-menu-image,body.branch-3-7 ul#adminmenu li.toplevel_page_bp-groups_network .wp-menu-image{background-image:url(../images/menu-2x.png)!important;background-size:209px 64px}}
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-core/admin/images/icons32.png b/wp-content/plugins/buddypress/bp-core/admin/images/icons32.png
index 2cc8f004fbefa323ccadf52d444c1699920868ec..2ee69e9a36802e52ae1c90c6e3e634a5ea01f5d6 100644
GIT binary patch
literal 7629
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

literal 8840
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

diff --git a/wp-content/plugins/buddypress/bp-core/admin/images/icons64.png b/wp-content/plugins/buddypress/bp-core/admin/images/icons64.png
index 511c7f55606f1a941e18bd148a4fde938dd03062..0cd9c613bc11ddc434850d57aa9ead29c0ceccc5 100644
GIT binary patch
literal 21191
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

literal 24272
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

diff --git a/wp-content/plugins/buddypress/bp-core/admin/images/mentions.gif b/wp-content/plugins/buddypress/bp-core/admin/images/mentions.gif
new file mode 100644
index 0000000000000000000000000000000000000000..23dc4ccf391b4172784988c7af4ebdb609c2fb00
GIT binary patch
literal 65381
zcmZ?wbhEHbe8Qy6c-5Za_4?VXmoIts>ecDfC*PgkrqIQD%SU4Il#cZmo;~j`eq0&x
z<;K|`&#zThR5ndoasI{kiDl_pnwp^@VVk$@ik&LA<iyIaU%#eRPl{ey@#ots^&JnN
zfBPE}U4AD_^XIE)Ij&mQuHU$qWR)HkWa^n}I>pD&MCU<{`{T98E}UpAPmP?oJzL+{
z_2ro-UB@mzee*dqqt@Hmxh>q~^PhkJe!pMPlDoh_>)pF|AHV&qF!K2P>C*{TmWo}=
z@8@a!`Sa)BzkmP#|5yCa?dKX2?CcoeYNTht%*epNp!lCV!Z$#{C9xzi!Z*OizM>#8
zIXksPAt^OIGtXA({qFrr3YjUkO5vuy2EGN(sTr9bRYj@6RemAKRoTgwDN6Qs3N{s1
z6}bhusU?XD6}dTi#a0!zN{K1?NvT$O#a19;eI*63l9Fs&B}b5i0?1D1{GwC^Q$17N
zWCJ5Z1#?S1LsL_8b0ZxEBLhPdeFH;%Lt|Y-ODhu-D+2=sC{VIfuqjGOvkG!?gW6S;
zl4h%vQBqQ1rLSLJUanVete0Puu5V~*X{m2uq;F)TTa=QfTU?n}l31aeSF8*(!6mgg
zxhS)sBr`ux0c2ugQhsTPt&$Sd*oxc&xUqS~dSLJ9CFkerS0onb8|oQ=yae%UZh@~a
zex<p&aMi^nL8%D$Vl}upq_QAYKPa_0zqBYhH7GSr8RVt{E9aur#FG4?ko^1{SSSW$
z<d@_ZXXF<sI6H$wO+mvqF*!32B&Z42<?CzZnO9trn3tUD>0+x?kz1gbnVDi`YU1Kz
zZfRj`Y;0*{Xy|HUVPWj(;%sbaXzu7{>}KE!)9aF-T$-DjR|3<Ug3xP%Q!gk%fC9zJ
zCABECEH%ZgC_h&L>~X71+-@<%X&zK>3U0R;;nb^dr(mNGie9AXh6x3^xPh49lnF|u
zb_$5(pPH9qt5l?9Z^!um-`_vKfBpRN{oB_spFe&4@c!M~H?Lp4eDVC*(<hG~J$!Kg
z-rYO5Z{56c{o2(lmoHtsaQ@ucGpA3TJaPQk(IbZs9Xzmq-`+jDckSG<ecRS8n>TIT
zuzuazHLF*xT(NxF(j|)*EnF~v-rPB}XU&{3ecIG1lP67_(BIeF)7{nC(caeD(%jV8
zP+wPDQ(aYAQC?PBQe0G6ke`>Elbw~Bk)D>ClAM&75FZyC6CD*95gryA5*!p5;P2<_
z<L%|?;qK<@;_T$;U~gw@V{K(=VQyw>Vr*n+ps%N^qphW>p{}N?qO7E-ATK8?BP}H<
zAuc8=A}k~*z|Y6a!_CFX!Oq6Y!py|Tz@Ye(g;kEho<WC!fq?;35Hhg+cbH$`p(E9Q
zVoA}-9IN>kR+M<Hjaq+WP1)(URr?=osPNI7eg4Iks<U~!?|;})<G23y`yYGi&cFZt
zzoD_IxuvzOy`!_MyQjCWf5OB`lc!9bHhsp-S+nQNoi~5M!bOXhEM2yI#mZHy*Q{N)
ze#6F1o40J;wtdIWUAy<}-M9b1!9$0S96fgY#K}{q&zwDX{=&sem#<vCcKyc9Tet7r
zy?6h?!$*&wJbm{3#miT(-;{8(v-7)4vI~0%voqSsYxBkb_{7KC;BFw_q01AthND8|
zp_4if*P+=5F8H=F@Jd-&+*r4GJ*%KnjD?eOimRfeQ{NwfgY&1d3Y&>|3NkV-Vpc4E
z7PF9_oB97_&pJ1YnJo=|bA@uYaTaV@dVKlrh;<f+E@cWbC`P~89JTa`=PWPYhdmPv
zmCsJlTg#zpm9kcNv0&U3(TSJu&EipY@#AnXZ;D;fa69G0h6KjO!z>IMaXmW>nE8vm
zuIVtDAL39Ja5|MTbDCGrLSuFLLpz<GO<*-pnzHYam}j<H!Qo#L6Uwz_Gj4j>$8+X(
z4?8~(kG7vfOe2%<iHXwT4l#y}hxQw9X}o>Y{p6Jeolj~NTRw|Ui+Ak~&8_0N{3bL`
zI&i&8*~HJA?ml>OZ?~NUTc@y$xuB9u`~Ux6)fdz=lwFw5c}8;^LrT_z)JVZf-v@UE
zu9QB%!XRnsAi}|(a^-(;w4$Oy1H-aPR~Hw#Y2ioWoDx<D2FfK|abVD!BX*$O$>qy*
z0dAHJj|G>ke9>HO7vrKV=(g&IpBwXv?J3N@v#umFIGqz~@O5d*xEg2VJK<uVVO2!3
zpvJisNi#!~953g6+giz*`19rTIfX||x8In{a3wOPh(qnc9i~fjCrVZo<OW<yb@oV;
z@)rLR8Xn!(X3}KCC$}}4L3v8~JU<J*gF&nlf4LrsnDa?ONw7<3<1-;gv5Twtolbtc
zwZO8FVT!<(wv^WaPNB~i*hfC=nAXZsv+R<<l4mWCm!0A|nBy_`7sLG7SNt3!=5Yx~
zG;yA_{eDBJnX_HD{(m7i10xTM*MGLKn5jo%r_EQ~B^p(IHSJdV-v`1%wd_1q2dBFq
zC}reeo)R**^$T0VdVyqKo~D#C-;RPP&Cd2CtIzRiuQ|Hb^V=Z?*5@J<jw^VxMWua8
z+Y`0n(!5<$S*DpPG<x$ke<<)M<Mi2Z(0SDs<8UXBvVyHH$`2VCi>AF^zWt)Bp+v!<
zm(TBStJ4c;YtDJLbSi)4&MT{zPcvk>evR28KyEkV#^<k^eKweAwniRYWq3G8p6mNQ
z=Y*}Zgp#LTJ;1f<p~UM>2hO9*_=QF4-UxIyo0$m;vspJRN$7TYcE|2P%Zg_Xn|fO|
z+KcI02?l;X{`L}g-bBZO!*8c2yh^&TWmB5t=Gy;q&O*@^B@^{l+h*O!W!^j0eu-${
zMxTP-J3?>mQp$cD^?h1$a7Ixv&y|SuxbuIGG1eYCc$blr$Dg^c?ddkbqspGUpSf&&
zKkM}3<N8Ooa%t4+H9xTX8(s2B>!8EDCy&H-9Wl@?zk62A#53|;TRRK8=F#%<XvQg1
zHaNVW;?g93;sGn0=!A8VFBnZOb~SH1W<I$mgPF;~A@>s7{#PdtH?%PG@@y5EkZF3p
z$Z5ryz)4J&4<p@8c`rO*Yh)7V<ZIw?o%7&nkedBPT?U4mi=-G5rn4OC;P&r{bl5e8
zVXMtg_l6&@osQ}mIKAESB;0mQ-x0k_3~#=?3-e64#!(jTxO~okR<?>W%5qbW%T9=C
z(^NJ*b<fM<MDN?Q0+TNXS0!omyQ*#SsFdVXs#X(fVrfv$G&v;ub;fb2S1EnZex{@c
zecGcI^twK%I#!~6!!GS>nU?Do2hZKK<J9FR?3SUcQ^g*c?&MhUBH+y=U)k78J9d~P
z=<v5J7BWz>UBz*}$wH?qtzz1wOH-CinXA1-Aj4_C=dKTJUp!ON4xO}3nb=;;9&?DP
zzQb49pt$f{mV>eH%_IM>>a%doSafmGw6%N^59TxQu5kFDxnHyHG>5x)11HZE2BsIE
zxRM(sEj2lfZ#Ve%`mGf3`ZUSsi@`zWl8qT^#+l}-JpwjPKYCh}9GslOI%ofvo-7*R
zHOphxG-1_@#FKpyX)UF<N;nlld7YfS&i_y?S@?6wqs|FsGE6^<7X-*^G<=xpt-R)3
z_YW2Z=3NR?b~t9t6W47jzpyj#qJscu)0#^Lnv%PerW^_Tl;q{QdWx@NBTKtzcIKz3
zXMtNjZdIz2Wm?O1GI--J0li#T?aH1B*A|KKPTg@OU2vW2oL0B5n`WqLgq~+zaneZC
z@%bxxu~m<}m1pSKWv8CH*OYZFQMW;tC4<4aZk6@nT`EfwB^x;S!e?$Nnd;l|R;G$&
zfx(ZBE=-Iw9pW66Mfhf<1%JwTSM2JxYfi}W4a&MqdF=~s-#t>cjsI8PBAe%S$3GpL
zCoAxOL5A@MmsUH|%^%L@uzz|P(Bibwp11aeh>h5W2^qy}%Ud0p1ExuRZdEb8e>ug&
z=+g8bSIU;~95~1EZ<)4=?slbPN{NSCq-_IRiw>@Aj4bnDWj^p$OF_kKqmk&&q&ID)
zwnEDaScGcC*ygV~_M|z!?X2_+^-t<67qz~rf8?F=GiWNqB43TV*Rxx9Z@bd7G)DW;
z9gDq_o`_l7%w*?fSgy@(|Kq6Zq(T-IfwgB;ejI+<xq;tU+?Frn#M}tElj#yd3_8D)
z&pq3?ng4?i%X7nRt>^B<vK{eB3(MOX=5_MG!reVuS2wgCe^rsRZI#=yBUjd+n9-JB
zwffrr7C$M5UrP^n{GaBqsGn;A_m%3-qiYOa8CD4Mtep2|W&eZ5NM(^r0g(+(&JULV
z+i33p{_K_w`nxmL=Cd(ye+^#ItJq}xyK&o&zHJgEz23>sFYG<sm*3bVd-cD{Rt~#!
zuQs(aHnjga=-4@R+pg^ok`3ma=)QB#%z^iaj5V)%=8<Lj|5eUr2Us_+t5SHqi~U^d
zf7RIx589IUJoODI*1XC-<?Zv-%G_Ljh26|QRd*aSU&q=UY|~>GXL0zswd>!1ZkLq)
z`>*$G&xwofeQePGQ&?wSL*3)|*Qcdcgq;04N0npe?Ne%Z*9m_pnkoJFg@=zr72}3{
zh8BnCEO)<Ed;TjpcFpD~*M@EDwm<!!zogps*%h<Ku*i4vE0%A+=UJ__S9LZ^)^llw
zDJv`Oj{p6->+<CXceJe5i0HlF{QIP3d!$e5U(cfK=-4N02X<`Kt&>@F`|rm~Y7T#;
zR_Qf=-+Lq4bk@?->wc(u$bFQ!zWeCU!(}IC-<uLW-&*j;yj;dS!4;j6D^5+65m_#L
z`>9j>ub1We_Q%>6eDQGJQ#0ACe9D4543*)BnDp-EZcLBk_+D!BetG=br;mjnE?-%>
zZTi0&4TF30_rL#_B04Mb>SvCdN&0qQulMsc&#r%ODPCrG^nGpXWE)ONhgmgC&nxeI
zJ@+re4MC6QYLP`HH{BXu78WkNUdGlDxj(#QpLrRhMdSb1357A`O1v65bK6;WJ@bEW
z9?76k(>dLL=k)-Qil!F^4S%LHu2Ij~zr4=7pm2{{eWh|!=ka>G3q`T*O*R~Si>KG!
z{9ba{EdKv@Ausdz8|5sD67lbsH@V(u4(Q;$wwytrBj*!aOO!zs+lMBP4K1^d)i3_u
z7--RU<wLXejmA%EZQ&bgI>W10r#E-Dx7sDtT6naTaqvdFS5^ww9|~)?D{N6)(Na*+
zEU+R#&7rz{M#njY$~|rNauXU4Ph&8+!P5UizR{wtxuRafut8`=$GjOle(GhO<{bg8
zg^OBQ7ccL8z}ESxw9Tu$)3t#?%Ak8oMEACe?j19_ckSrjbEEtJz8~EOBzg{6^c;!k
zIabkgVn)xY9X)4m^ql+Ab3vl_Qbtdl8XHeQ@$?m~we01w6S`C~YyzfaYQHGCFVU^b
zP%wW+U*`r!-GJVN1D&qry-Omx?wnw~7t!zhp+jv#=KJ#a9~LZ94SlaHCbVr}lqz5o
zJfZM&d%u->=iQ3J$aI#|=Kaw#7|x5=h-I>{drpu!$srxd_N$^JH?f-6vQxgabi<Bv
zr;bdQiX0L3DEXTcjWRh5UuJO~t<ShI!GDEV!;gC1j!eadj>H|!P63mRE2lIhOiA2O
zbEjzH8jGB)A3|IkTIX7*_<N>2ESEarIK^(k6px=%s~${^+c2T1qA=k4l>gBSS{+X+
zv^dt?ZlBz%UYEo<t;CbPIJ5u6wSJMCxgjU=+;2>GHEK|v-pj>0gCTNy$4vI}P65B=
z?E=qR1Ex=nEGW$IEKa>%{#0Vp|Lrq6Z_dm-Fw?iK_hZFW=NXeiE;P1Im)E{ozR1G<
z#q<`}moqm>vM)H<xc*1YF1Av}tqoa;trE*6&McoT8_?fV-tjkh_U4&$;u_|JHB9`m
zxPBLBz`5xSmgx%4(<-i2&XtPj*O{T~a&pco$$1eB^Fjn_?r_e%XxWs<A$TCH>#tfx
zka54n_c^BFQ=j}~6H=I0Rxv;5K*t@)zLz%(RKK(A7n{ShweeWH?k&!EzRKK5lCv8p
z%>Vz(vh9x~>%W=(3{ndUU#OdO1b7^7-#xQ%a;y9ev3SXw_52<zqNmt|tQH3BSmghp
zU&3lCqg9I5as~FO{cD)>Z)k>o-tKQ-8L4j7{&i)!!74W0SBq>amiQ_xUgx=Zdb+~x
zCWYxcGv_RIZJj88CS8H!kUYz#h0I>rX)`08ca<(Zz9eJ960fSJ45{XOmW!>nN1hLq
zs5HtCI;9?0HJ2w;;!lXe-))npxi8xhxkRgqjpu=KZsUr;1<M*5-G2q78*Es%C6i73
z*OJ@Ei=&q4-49Qhy{z2&Rop!@*X15dR&$1?daY=e6cK8OaTj0^y5PsC%$V-Rut|%x
zM@phnWo6NYW&huPT&6K`;hbNyt$)s7^U68d&T_oHrmiCQ(DemjKNrNlv|oKnY#rC?
zp3v2nEo%b`RyQaz2qt9jdd0RUO2q5?`~a^Mwjz6ntMg`TEjc_(nOQ>NbXH@>^EGpB
z)E1v)xO{8X`d=(ttXALp#d3#BLQr7c<S4dtkqtVWDN|0YTdGm^epbJHlwN3LgXZy)
z*%9*-r>y_|%J1(lv0J~^Z}ZY+&EAl2urA|k*N@4wUs%mG7GJ`<eGSiv30Xf}mRjXM
z+cm9q)v7hGHlCl%SiNwCh|nfRZ5Bsqh8)8U0fC#;ZnJ4rvs6ZuSaQZ|O0jYt&3&iE
znsH*bhZ6%&<%0d@i<Ne6UUzZh|Mwp^>MAj<-nB}m!Bc7W+H=dIvv;pzU%bWt;1=KA
zZ2sC4dm}pvR#Yth705SxYp_7giSUiZ5o-!P=CtjYdFj^X^wVn08&)wID6M-HQ((O%
z-E8N2E~X={+g%g3%QbGV{5>-*p+IR?bAiNEzXFr#$7(|hOg5#@nyL}n(y7pQdUNsa
z-5K1B#>QGg6O3J|)Arq#oW5FV(QQ7<z+F|ZrQ>e*Pxs7m_F@fxz3F9PX(D%1ymkJc
z^4{aKR;6k));%`Y{IKyC*G}h88}n!H<1E`JI*~DJxAMu=d(Pb6lXhT=^RLRcw`S!x
znY`9yy}PpL(e=4ON6UU_Pw)3$`|9-W?ANh}xwrp!dbHcZX#X3BU0<Wws&~toN0zi{
z?-lf3pe8B8He=Uyvw#?m!t<x6%5?90w()?B0i%J;Vc`OoH>-EfjAjw?VG-HGCsuPX
zdBVZR?Ys3}HpE!6`)w~-ZL+mcqQAGZ<H2o#G;fxxr<6B!^}YVRZHpG8pv)dCpG|f>
zYz{swM>VI!Wv|%~$v)q_d4|NIAnjRFGY|aPCH>*FbH>*Lu8X#9+O%rZ#=|cktbOq7
zXp+D&&+iL_PfnM=!?q%G#yZKIq92v#ejRx&cvSa{8oL6ceuF2opk3J<%V{zKk`HzZ
zA3gqJ!s-Sewx&6?98tRimL97}*nFb=*edCOzM0L@l`Pt84&)eR{9j$=V|4haY0crp
zZKv4-_T@_N`o_rI`fSz2s8fjrr}obZUBj}5QMJ8HVR!V4BNxm|oufLJNv^f&KD}<y
zw$)XPiH@rurkwLAVt8a@?4o$;%$mG&Jhe-<Zwf!Tt7rqm?;j1nnPuW;tZV+W|Kl3g
zcYn@Z6uaQJqv|4eK&1Gg^aE|5zm~6ETy~Sg^$O3)T7wHLyqSz|>#T1a+|+Zn>;S{p
zV7-c8aV;@3tR*i*He8g<jnnGg@3Uv`f0fO}3jK%K8{<yv@-Mv<ap00}Y>1ZZqz#cL
zHr1TSOSn8Eb#EodC9$*Yc7HD~TXN}c<ko)8%O<+){TekKvzjMgTX>J>D%<JH*E!Dq
zUlDVqdcxIXT^qa4?BB+7P3`pMn6sxo{fP^gW%r2fdi>&;C&Tr;y-RW?RHb`NVskj8
zxONB2)(bb=W!l17YVKaoImPzVJhN*0WY41v(`s+dn0s^9-kWpo-keu^GfumxNMm=#
zN|xTYH-t}Izn8tY=X$}0FSj<x-ri(;dyDUFg;RU0+9&#)y|F@fW$)Ui4VeWk>ZM0w
z?;NYWb0YVSgZP~n;YafC-1e%vCEnf~y?o)dyX!jsE{WcI{etY>{DjR{V(wnIy~p^q
zapm?Kxp(ghSKV^|TKCg^)|1>a0qv3nPp|G-d+%4}ts`EAh1;ip)Q$h#yYNro^_1@W
zr&it%?QPKDx&L3c{{PbF)pyU_Ws{r7;kRUmO4Y|(50t;>CS{+0Y5VYG<ijOW4_GU1
zORdYbmpWVY{LV7oN9=a&?|pZ0X5CQN+k5R;lWF>1e}zYS|4MDvrSMeegoi(7@H^!0
z`Y7PQW81zGuXQON`yQzIJz4mxe%jByfeW5^=aod%ZPo8odHeMK#mJo1PpbXrJ&Alb
zGlK8wGo?BetwPhhrTprd3sSFmOn8=luCVM}+`FR-zp<|RFRLJ<ckGH=5zpN#<#kia
z>gu?smcMS5H<&%IAkKS5OT13rv-Y^@opp6>9+{KBx;$ojmQZc=+^OFEvFn+}dqERk
zPUkycvmhnpd%)YPA*_pXgH>H${LTLVF7#RGf>*2KF4P7r_$&BiGOPMpXFbj5<tsi*
zEcPny_PY^&;Pu{h7wa3mZcb8Q-s0a_o?m6;9XVz3TsxVGt*>^=y^ZI5t8?AI{+G1h
z0(;-fyV@4YdnvyQOL+H$?@E(HB=^?H(CdZUUGjNT@1Ku*FU!gF&Efr2GrihR>aBM6
z2L;tnUX=O0kCjdTgDW!=Z-IdD`R%)xnVj5bFDbA?e!o3$zwWJ~SKRv_i>&VxJ1;2N
zAJ8W^Kc=g!r%}R$f4;A)!i=g<)8>8Z+VRP*AWQeXROdwXqC@JNw!A%>DC1`DeSYER
z@N=JS>p$8hd}I>%;_&okwUL6~(yym3>N5O498ll>-|qeAu=6bb!ZK}!Un0J!M}3j-
z`~QYX@*ATCBfBC)Q2vA&AEamBeOJ=J@Lc12c}3Qn7k!r$x-VD!=$QYbYyXd)`#<{r
z|Ck{EbCUhf{T@FW>VM9d|8v&<pL6d2ocI6d0{LHy?0+qZ|Fx|C*NXYSR_*__=KimB
z|9@?e|Gmln_m=qI+v<PsnE!j%{@;7-d6*cC4#@vGWdG+#{GVg>e@@K*b87#eGxz_T
z<Ns5C=l3Nwh8Zoq^R)jmyC1&2;O`Cj+&lAm@8ADxBlhpQ!@o!IA<yD@U)KNg-SY49
zgMV-Atv<-}ewP3568!&s!~bvZ)qe4_*gc#OVInut^Xa6UC3XvsI!=k&8n^L(<lAYt
zzt$a0{5T`VZ2sKfFSGWBZGTw!b57j$`yVU+ew7v5F^%OLTk9_lenDYTaY<>}mps#%
zq%<`3nH;)|m=v_6ndFw(NH4Q;w{>o}(l@b|ZBet;H*V$glU6gEkf9;i;gc^dmy;hn
zTS<QM)af&4&z*mI!sI0X+E%d!_qDZbdFq?|duzj@rQ>Q>Y|U=g-_|asb-wk0dwcWI
z=}Q)V|M~mxf5uxE%T>gf7!{IYFC0BErI}HIO(6S$_Tg2GOuIB&ED{*>gJgIoDhFMZ
zSrf-D{7Q+fDfNigy9*1YHf>Z^oe&(h=?Z6Rg2R0KMmABdE$I^@j&c1`5OWA&4&%}A
z4fyZmb6s$vv&TGZD;3R9rMq+b-njUz5?t?mE=<#EN^bP_{D-F^Pfwj>xIuV9o9S)s
z^?Q^vyJJKrU0t$4v3zRKs;+I<6TK92Hr~3OP?&V8=26<UJu{2bwTrox-?rZ1VDw`2
zu$t?zn&Uxy)y7?1zU7Oap0e|)mparf8Zl#Ar$Dtr!w!Xc^Cqf?@0+9hVg|1f=Zu8R
z!(VQ>J($WO-T!sh>99opX@6~Ym9`$}{IXZ<D*MB0UCr|+{W)S;{QLXI=kp)i%vF!S
zc3Mkmcd^(Df0^qcoa^^~{8fE&_w6gydQ;av`hCtia?uL^{k)cME;w&pka2-A$|Ji=
zQ%S*k?V;O3bMg(m{%^5LbvdRZqGZ0zV^>0x?8&P2ZY(c<2b@ss)G?YbApd)D$DWua
zAI-nZ-C^BV9-`v!DW9)=Z2H?Lhl^a#^za0qG5q{^y`D<P$J6YexeVF7zVviFb$P#L
zVZo+T2PWmLl&#F^Id-bSr}>N{r>=>fF|T!#qJ;Vbk3~N3k~~lAi}oH5e3kb5^s;Gk
zUlk82+O=NZ)Lv5L=j<Hl8ye~&aJ0SSP2S4SVy4Vb)g-RH`4VUsHA(A`ax%l@74sCr
zb+6q>7S0Uq<XN+tMMR{P_k+Kxn83HlTQPeL=EVr*Jm?T=-rF9La#HvD9Wy`M>C&Y)
zbFbgkxnyg8ul(iO>o+P-AH9CB_Ww`W;P{mPZ^IunTJrpeYZCOk5zyS78u74QvFvnW
zsCwUxN8SHdN`&?rzPpi}YN2QHq~B9-=7eTBwu2UvBl9d3dh)s=pUuo%ck|io!gG<&
z=T^R}d^R<fFY3j@PQ6<%7EknxdbxCF-mRC*7xqQHTDfxFtyilzo{M_DcIUfWuh$>s
zi+;25q~7f}n=krBzukH>@Alj65Bs9u?R>fJ_PgC5&qcrA`}5uH_xl<7V?G?@)W7rL
zu%Lg;$D@+@cRn6h?2q|$Qgi*CPp1vf$9z6(`Tox5^N#$nUoLv;-~Dnq&_DL;)yVw2
zU#}<j$9}t+x&H3A+lA+2zu&EVfA{<SM*g@T4?Fem{doL;qJP}ar!({K{d~SqzS&}K
ziBjL|X0s&D7cWj8tE-mZvtLU2ZTIZB>UT%&UQ{bzSw8E}r-#So{;m(Kb9%bMuq*!m
zBfVMi{6G2?8W>m<9GFxTgialAVVT6J$S4sh`ii~v_f+ks!V~xZ8Qie{e>c(k(kxF^
zI}c8koOA`If-uQ7#_Bd90Zp%8JF#g5Fz^^Sva)J8Y@5O0Ed6dmyUGq`uACjrmN5d&
zk|l}a0SlV$OC&OA1u%9Wn!u?3=tJ?LUveA{8Z0_pAEM`3D4B*xw2Ay%ZyhotL8SZ!
zld3>Mdq|8J|HB9d`CALyjE-=zwp6f96`k0h`p1dw){Zq2_XK$OHUBdSyp7nU8>S@G
z&9iX(t_V(kzJo35Du*RLC+yYE5b8CXqb$Vc>7m82iNX4UyuzCe4H9|DjGa1%fB)EF
zKdq;6$~qe-S=XDaY&R~kcbrjv`Ky>g*&?VrGUbuRwds8ZO^lPv6B0$w{cxB2_i2Jn
zNwScK=UG>V!nU*<$vWLHj*CYLbMEF@B7WnBuTsbYre&*DO0+iGCjCm7=etp*%T3Vj
zbMATzrwn=3?;b6Ne&<_%>p0mTEVrv)^}Zu2XT{$m4yPQQ4BJ#TJT#p+;jFsN6mH(9
zYGOGTTJoEW=LkMsXw}_tI;QC1;<dN?Qf(~GSJgcgxh*^`ukFH`%WKY9ajZPT_@7T{
zjro!Z-VVA=e)b11A1@K8@!)lEJZd?aQOICblu0I|fPi!Ew@YozJ67;(I517Q)xn~&
zqt|Wv(x!kU1<^!V?YvV_QyE((v0QO!jHqom?K7j;J8SA<;rSI3yAGwSvsO7M#4mih
z!>6HN>hv<+`s8!6HD9$GS~;1u9&qzBY@6${LXk~i7Gv3>PX=?=@}!xbj#P^ZE3m!A
zcOfOqNBAV?e6y9481kh26&1cN-@bq~fA5R)cY+RCToZg%{HgPRve^V><~3UCdmX%3
z6oO=|?lf9DH+sxC@?mX;Ym=6(rN`!?(xnN$DtfxFPOf5@$f6a?k#dszc*vE&HO+rg
zS#3K1H##a!TPQK-03+Xl8wEvMxGt?-A*j_A8_;@b^05T{I)5z|ms8h+KZr6hOXM6r
zS2UGH;NC(jLmqdbgp#~&kt5c-g`@T4j8{%wz?!$1X_~O<YbDJ?NAv2r1pQ?kj!zMI
zHp}LtK-P-JV~(l(6Uy%}JTeec^$N=qQfugRlKF5lVZu7Tz^LQA8WN{pZv5cUw4x<e
z?wVWTx4hPkUU8*WrW1vaF?d^@zOGoaZ5HbdgO=N`PBG?G%&7U3&%h*edR3C+uC+Q1
zQtb!a)@a=b7G2BW!l#pXc+=&5cRplS&;4=F#N4W*T25t=`kjYdA-DF(vK?G;dbRoE
zOKz=NZ7SU}H)Tct7Ysl4AX!CqvqrXxb>+1QIoD1lDV{0c_i(O7->Fk+vsxVaFIaHQ
zROzyM$^ACY;!MxAPjjADv_u{IxOSdx{<e*_$36HPcV(G1&1rQ=S1Q=f5tVy>`gDU!
zKOEH<csNSr7tals)_Zo~+O)?>B^kW&>!k1elGEPxTBFZ{zlMXI&*EX*Uyl@N<D0Dk
zf?djS*&@OI+t0F`?$7m&QQ2-aPx`v&@!FaTGWI1G0@XG#Pc?X<?Ger~aoxiTN!^<V
zj|g0x)$zD}>VbRNH8<}rdGj+NXT`B1{g<a-x&2!BaQV9~rEMIa=51$qqx)b|l;l1u
z_4WD^XFpGw7IcYqMbCxHXT3{y&;HNRHSOEJPKA=!LVYbV_C~gvdeO5UUD>gIu4%BC
zB#&c-&C`D_mVVuycMjZ7`VhKm!scnKSzh`~J$34wdETVF3>V|5`^7FQBIkR~s>SVk
znA^5{Vg2KG=jZQ!xy|JHdEu82zw!N2+IVJHlK%XH&t<^}pB*ttxaoUu^WnP>eEf}f
zaq1npI$8SNqqPi~f6eX$+D!U2(dMFc{@?OF^V>cJ=h{57@5`QOUi{lDF6H}P`=W2A
z8mpS~6rM_J6>DGE^Q=h5{JH2_w{6mjUwqCK96YW2L*#5|NdJ#LIhVWmLz+6~N=%p=
zk<4JAaLA2gPTu;Bdi<xS`5hGT?K`!K`Sq$dZRg)y`v301gKP%Do;TC@SuEck_Rz`O
zpf9mN`D5JLM_bN6syk&^a`?!CGanC~|8VU5$5ZbWO1L>s^m7<EDNQ@MO5nuKWjdVc
zk3L;^bJ}A46`z3HhjcgvIGME^1oGbXd2!yIu>Q-G^9-T_jC1+UuE<jf;ALFh$Min;
z^%71-^`18?dM7Nqz!4Pi!|lS48pf}F1w5`3ellHT7dx<CBRjuNw{Dsf+iL!6N8TG2
zOwd&7<EY&5!Rg$|6Z$vw0_D3V9CcXtYSMv*j)t2${jYCq=nKf=64d;$W&)q%Nm0u)
zw{NX}@a$da18x4-1=8m(?AhkU`E5OK?t5NCkAGY|_na~fcj&xq>f@RIKVSUmnHM$h
zE_?|Ph-8`A$CrOkle2#9AE}Ej-`)vl=U%_!(BN_K#<L~t`X7HMZMfc{^ZUd`Swa2f
z5~tbb3he4BXwc{sVeUBK#(A&AL*|{qlojj#Z#X2ut;e-g@OD_%gpdjR8*|r`<a5|0
z9JX0-S7_7uroh*2f?S6DVu#-;e4HTJd0tXC=guj;-7ZA}ll$|<Jm)B#yXwZl@zS&T
z#YOh!gEEBzPwsijN}gBCXH@_GPPlE&DUPNFKBZIhau-@`n!~s8jonJo>WyFA&M<Rv
ztMnV%YI(8R_)0GS$WR)1SSw*q$%-ioi~6o)oSEm(pfss=jb5Erfy7Tkt{3?nH%|Tt
z`tNwrV1d?>j3ZK;6!ZPWuQ1$|Sf{*OlRw;_)l7%yW1G~Z28k9<wYB}6hXiZdUT@dh
z$XN2}LlJjI!W$7CW4Y7kg(n4ZGIRV@%GVTKs(JB^)M7)e(|MO1jJVIg{cpx2esKfO
z<rjzk>FbA2X#dgE+4W*SLykqebG;1ry%|Q+FL*2bE|L<|+<Rc%*F&oh&iedWg!i(|
z%KRTsI+i56cO<)a@Y)D^*f2NRq${0T!R2~pv-RO(_bn%^)%l<GF|b@HHodYr@Y!a&
zNWFh$N+ORZacMcQ8hCXvX}>%1frH6}moso{%>un(F9-J%TP_{$+>+a+cBS)F#uuF}
zn;5u%Ju{w@@+VDsamLgc30$i$wJB_|;uV;F<CWRVN$biI40(j#`E8l9Afwr+Q{wSk
z``Zu1JD2EscGZhHGB{;Ddo;;o;{&gP5WzQwT(eC0S6%Q((Ddj|o;FRSzC?s`Q6_(c
zp-)!7*J*X{^;0tDo#fmW!q2gV^=os-fiFJCw`86wai8Dj>v_uezKGw^D}IyP{G_|x
z-%s)RDze~DNXD{|`ZZtt*Q(X<c`aPUR=s9jl|X3rnf9uATLPn-LfA}$OiP0;w+7pO
z4R$mQaV-t;+#2HhH6+k9G_*7{a%*Vp*U&`Mu+-A9%&lR$U&9Jb!%IuUE4PN%ehqIl
zjc6^6=-e97uEGIX5X28!5Oj>ei-D0rnt_3h1F|5f*O39fS_mX543@lj0JK_&PxV-e
z;L04M*(cRYEPJ(BBeV-0CRgn3WBh3O+Dm5g!6yn<r(4cMKHj5wj&BloOh>uNM`3#p
z?#gIJc6LT-V@>@g`wD(1xnd#BxJisc{6fY`RrWo3J$?2JLL5Sp=}xoi?0MGMv#b!>
z$mk>>RBA80!fE-+?M}VUv3risoqt58bj$9|Ydi$bP7u<sC>F2KFZGz!D9PTt<FO{+
z9*;$nLVdQ#D0mrv>~~_$P0V*vV9dSe!t<d<vcl2FR!K~aB|;*hsoOBL$D>n2g9GeK
za1h*J@M2&G`_kB9eu0LhQ12n7piG@ArpZhC6&`x542u`6UR$;~dVQG|U-QZIcM-Y&
zc3n^1Qqn1N`Tbc1usPnKpuE8l!(hmGjDdme{{cD2LodIo979=K<sZP(0$y8H5@FK?
zT3eOdvh(JL9e+H{l%D_CbB}8>OBJJ#L3K-On6rLa8+dJ1Px%D!+A43&8KAXQ*?bDj
z*w<FAGYb~pJ%9g!gHz4+1u!2vaq?8v@xZgEFI>D7d*1)*<r_C|*<Sa(d;7t|1NXh3
zJbM0O$}`W`FW<edetYM`m#;0KK7IRjh*4ANKg0i>o{kshAF#_4lH1UfKi@g?FO!#!
z;vxk{K~CdcnvRRT4!0{z_MF1eti&=&%6nSG%RnzX<s(U_=6Fs{J25*>D2`=?(4mw6
z8zjTIbOjeK-K=FgSxdD|_}rzW(_V)J91q_Q5VT`m7vgEsbbY;BuVSs&w9Lz<{!4jV
z3m!1s-X@S#6Y+EFy4dxJYkTK%Dl~Qq$oi-#I80_>U{F|K6;<H0aS|&-1dF$Hul8-u
zMQkiTG?P|b*sZg&X3nAQ&5f63o#vP=P$)dZvRpbiDB-~o;Tzi;Z!#R*y-ablk3_-B
zq>l~_oXl!04Zp>j9D6kHca-hC&X&X6oGP^A+@sQ*<2@PA^O~wRePURbD#ay`;4J*~
z-AW68#>7KEnN1WfWb96GT*<7=Ic2)A{?`Yw?7cTPFfiT~WNu(os|c5_=<X<w&V9CV
zdYsSezaRh4Yyb4O_y7y9%Z3;(!2=I2bN>5S=EPvaV0u;IvaBnsA@`hXvdlJX*c{kp
zBg_|05LTP$7(dbUphG-oPdZD!t<FpahCa`mPlUwOHmWdeo4WjVr8Lua_G&+k^j61X
z8^15|&ym}pz{u_MK+NCxlEu-CAOYrRrXwrb?v`@ha9}8_s!KnzV6~(`Q;KKI_FIcQ
z=R8}{=jF3XW3g?@&BIG%Gk$gQCfrJSP&q@Bk!j`OR0D?mQ&VRhS@~us7e~j2q_i|q
z&b>=zX74GgWMVjN*?y_vUQcP%LSZ9?l}#-|n$nBZWUeK%>q!*eO<?$v;jq=#MoV|;
zY_F^t+wP=sX2h?yeEFYqh14w;r!@&u3vU*FOgj*_=8dWG`dTR|M>X>w_p(_XG#{`l
zhwa(7RVGGbs)LR&>#YSj3(USqF!fn+-Fj2H>FW#!A-OLc4*ZgH%r*&1R^%MXRFqg*
zbdqh3&!$r|lQ=e?;ZORJy4(0>_dG%F4ci;p-`FykRO|idIWXB(ShnG!EsLzf))cF=
zu58bF|M1uTkUXNz`+F<v^)SxXGWAk(Kc6$3oZ@s;rk?Yvk=lN3lUfU-?2+*8oZ7E*
zjx_7?&njOkAeH#Axmo?<;$3q$bj$g^_gm0Xw1;&=iO`haYs{a%kIQ3uy7}9MofH2D
zZ8VLZ{qqU`?1bjE^Ix%Zel4){Seg5u`L>*Kc0)_=(>Vv;@Be<nJcmoiFyr)HsfNre
z75NT(K6Xj<J^b8ae6I6x;yX6|{Vy`j=InWKQ~T%YyZ_IeJD*ZzZ`lzn@Z>Th^Ny(o
zuQ`?PgmJl?UFUK{^!+{iCbfjfZAr(hl~i8^KKwO9sPFprr<$i3&K>6aG9i7Tt?ohZ
z{RiZHzopLS>pE2PfVuI9Pw2k)j6K{bOtQ~zsI$hgDp-D+J^%HM5T?0z{OjLHoStX$
zY_ZG7l?@HWjqGh6M`9xaI2*DbBrhsIqN1`fEp}7%SEDaGX7=cD?!MXZD@^0i<2UPD
zUOPXOHwo^&<h#(9z2f4bXUFI4s9@8UT{$r#Ph~r2<NpT+orwpgR0SW9$<1yIe#Q9c
zi`cqHs^>k=ORGHOsoZf{z{o7brB73$!DNc4ZiaA2|K&+xCdw9X8E0HcQ9UVgYVk$`
zuJ~mC=%%B)B%K=c1O>V{q#B$n-ySVDjdWm;7TGR$LC0&tmxhy*9vr{3;f(mvH;o3#
zZayAPfiov%O))mEm{)z*yJ&6F)TbWPd?R$vroX71F21o$CO59n=gE;Xd;B<CTUHwR
z8m^hoQSd-=&xt_&k`jTeWnZ-S&uL3KQFSeIQK{^c)^5`mlafAt_-1{@LwI3>SJTda
zGZ}9Ad=9?4<(Y+XSHlmBK3iGU$OC<c*Y-#0**QsHHO*I*FTbZf?|;rOcD^J5=Bm0>
zt*vw1?Fv&?)(g3*$$VyA6t<XQ7w4yj#;%YvLa9wppZ2Ucdf`fNWb;9PUDocsiA?!I
z&Q>Q=OF5&LUYP8_uvL3UzMcLZ9$p54!xAM+Su8qU`=tNspYv(GL3^i9q}U174;2p#
zHU&2I*%UMh&k#sy5Y;}xwR_LWn62E(B`vNTLJUki4QwnNVd)8+*LO@)U^6|?$YGao
z{nZp#&2)zFV2$S16J|-9G%XG?M2M_8pTo-Zr6-%$Df)V~(1|U}zxGOmbPHdLW6YkH
z?Be>z@utbURV>AgPwV0;85k}&Oj~+4v!GR)?a@3}nP}z?|E%c4=Uo`=AE*A;wymx<
zlb)EidxfZTqUi6tnJgUIN*$>siIIYWM;a1E1Rcv>dnb6@Dc4@CdorBKM`ZpEQ&*;M
zx%?&$iCo(kIIx~GkY+FuozgQ+Pt_tj%<Az}AsrVJ-4zC{ipw5~={Fs|_>(=*iRbpy
zt`5bF;*EWm8<)%eu8_9<w{gN!!6%B+mXfY^n<mvye4=VyDePOfY0A}yLO-H@o{BiP
zY1;NPPxY#Qo=!MdG-bKZGq;|dXEOG=_gy}d<~C>N*@Cpgvmg6BH$JoTT*bFTb3dPX
z&iMW3`NSK>3-<qJV3GL6*x|Qjk@(yUXX{;S-p+lzpf%=&v$530q9O(+y|*u%e^*|z
zez#@OfAtN_zfBU>=FB~?R6F;Dzw^P<3;NoYO8bVfi|}~n)JiS3e)~%OfYmi$gFI!k
zy%}c`zA>;km`&niXo^(6b#ZUmq4kY>SrUz#ZgjaFVEM$wz$9_(HcLP$ciG&S?~gw3
zt@+5E!16ix?Sn#b?nV0Z*Y54`{=Vq;gLB(g2^zd}-5zyF=i0meu*p)3@-$ZL`y#!e
z{P6La5+3)8c5LBhd+_$K&&t~j4kg@W4q<NY);EMs`T1;{ys_b3QsI?0&lNIxZq5c(
z%-&4j6DP^$xx7zczY+H3_{@R@EV>=j`MV~Z432v{b@g$(zKAbuTV}j}8)9?Ox}af|
zEnmT{ix>N?FNK|HQ2D=vMX{zMD(b-fWltP7YBw^bl|OpFLM4UQN=C@*{sER*eD64I
zZZZCi`*Loz?h^T5D;KW0c!OWC?^8>(SDI~9+@r>2U%PkRc>7B7=ySFM4WDfeznlE|
zj+Nn^<{jtn8eCm#!6d_QN%qO!i`C(WZv7Fz!v0Cqz1ckE;nu5-nwh7?yTj*v>baoI
zS~1(&uFa<XU+US<HJeK&=3d>mX2FZ4{A+KEzc*tl3y4e*-SyaN{jYyn;y?cF<bB;F
z|Le`iXWTQMs(s&c-}cOu2P?(6=W8ChpEl(}XN`VPQH^atU*O^kHT`XN>-imO+cst{
zpPsR@-F4exvkec;HZYpEEH`ddw|&07`u{F<N%O@lavzf4Z|DBF-24l>lCp~@;{)#9
z2WvW>)%bm><}_f`4Txl3k?Xy@{MK~m%*(YqoHgn~95~GzJ6IY;X4Lg8D&?BM(EGK*
z&Adh~$xZ%7==@@Rj)I7w2^rqU`5uTdnHn(iHRLlmWSI#x-xSY$K280vGtcEBCdMTi
z%q-@6P3lfRR(&zOU`CRrxNwa-N4@6>JMRq7AMD!Sojm@OH~nMJ+pXFl>Yio$pq0&{
zd7F#7wMmHgRw;XxI=dTflQkmjUwCpZb+FpjxbSl4zfbITi&Y<o@N8ge^=Ih#Sjc4f
zAXjYxv*`xr6KN9l2__vK8SEUwrB@`%TO@=wyZ>ibub!&mYqLUi$|hOAPcE}Pw3c7!
z^r~q8xKJ{V)#-gwmtRAde-pDn0JGJDE`<vWJEt*v26RtI%iBNIe}{|kt|c~BC)$Ej
zDt2wJ=6T}6mD(az>U*Z6U2c-^Y4xT~MZd=!tPLHFw|4XzHe~P}VDMJx+y0~A*O7pj
zOXBGq0of8grIV#Cja!y6>M>0TxE7qC7FzRt1<U_OCO;p!G9>$6iRk6uP_n?7;r5PR
z_76FaS4`+y5&Ys<F#D5W<Btu(9-WU3HD4UksGFi;w7Ik2RLpNfXhcJXo`TtjVuss0
zqD>Ntk1Q}Z;cR<aG5KAY#GaBV$FIu!ACQPKO8N4vh+n||{{d#kjUmkYiy5pxFz8;$
ze7BJ?q<!kqMX`}?C99rK?QO_7J(1x@Awygt!vSYz-3^8Lkr|JE^e4`knsg$ys?)XR
zBuCxNX$_Lz2PQL^7}T~On;HDQHT&6&K!e<gKRN3>XY6-o)|@mmcx7fgXX&|Z6P85I
zn%j^uoz+HOz<b5YnXO`_73|Z^j_1$bHepL7e<z#r4@Ji3uFScTjC>Cm@^>;`Zl4h-
zK3&&g&QVVOu4yts7K{nalF|>DN`B_->nvY<e8!^6={G$yR)1r7^pffA&5Ugwb6<0&
zH-*j5Et~&iX4<cv^HZ<Q|7V%XAhp2XYyr!zlpg|VT)P(V+*-i*Yk|P71^?Nq7Py-&
z6tPMXt6FG3ZK2ezWSLtF^}a1sSe2+`wTLxrky=!|#;irt71Zq}${Vb*(q>@R4p?lu
zMbOl1vGxN73%5QUDZZ>yAwvUujYW%_1Z1sFEjB$_Y2U@e=^XrZvXZ5gh-uVP!3|8C
zZl?O~V)y?Qe@2l>TY)jOYOzJuQrC@34z#9zjht5bVTk~P4!Zy|lj1TnuVt!<%ObgE
zzCO9E!oXhsf|$I)5(&rUp;n6}6PH$M2@CAZQ`$Z?X6y3FCzr;5UiR~#*bnCwtyW7r
zx|T6bpIGr&ea**i*G<b4RkgZ5nC3F-{Cp^8x`ioxm7r;scxRRFTQ!Y43!AH>+6CCz
z|NCXiFf1})zp$!JN_JhAf0<;#3pQzvCS@KWVaN8>H&1r<Tv(mkD7w0YA<tmxhOXsv
ze#JdFu55RxbcbO{#&(vcRb>Z)Tf#0)bW>Zq{Fm7EUGm?VWDi%ZxKp(z?0cMb3UfWX
z#zXUoUEiCh9Wv*is^NNL-L6^nCtEB1owSy8XoV}RKP|{mFl$xL(#4vAD-tfQO{&l-
zd|Y)#sM_^Y+fMh@`#zgbVv@Y9lqxOJRdvGT%cLNgEBc`fI#Q};h7Qc%CNiy?wYDv5
z*)geEuV$)mOE#2P+}EtMNw&DNyS%Yo$o8R;oWbULj?>0Q4>u{PTG}z2rc9|1PG*@B
zk{5U&mqEb(|Juo$7dNbZ8p<>?YK`OT#V5SBnC&p^3ew=?=wZ~B>?m^N63IXE!`<)N
zrmy0?^ByyvP_())ye%w2e#wKmMXk&x7k12ADip4@TE==7=M9~mlba{a*xt&*>i)@k
zf!EfQm8&DHouZe7o_yHS9nB>i5Nsh3W%yuMdt=<}r`yuI*57t_w{>c(NN!_NF?xMs
z%kJwgJ`Xx>7@GU5?NE5(x^lPO@kWMOirWGdJQoWv$SjC1Oy#;GrlYwaAzwSQ_h(k^
zac8y1&JL~Hr)fxDVK$QFFy@+2c1n83vS_RC>Q)L%w5Cq>Owg`h6v$<LfYCr9+~9-L
zo$SrI6XjK=E#+U*{eGGI{|?1f-qv#bDw3APWy=rR$Sz<B-o58k2G{0KJ#iwI&o^uR
zv);Sbn~TqYiCHGx-~q#u36iT%hxt_sRaW&GPwd<CrD4_zT`>!v(qNmqB`i-K9sDYx
z9k<%gW6lwI6VpF8j%<1)bkdMZ+<?h)7n5=U<E3n_JD>e>C$6vzuI7K~f7iT3d?v%Z
zQyS@S4y$bTpX}7~rTR#m%cM+GyC)_3G2N5a2C>STaOo!;HML@D`orX3!FBuDQT1iJ
zO;$|hz7V`7aP{7j05xXm8AhS94h&~q3RIRCyses&w5Y0|%V^=A)$<SU5I(@z5VKTf
z1JjvfM`Lx&I(JR2ausu9npSc^!PkM|zs{q5r=?d`C7fFRhAnO*(;`;p56xWde}Xp7
znLa@(zS}|nn<C?vkfnMxXV%5^pI)=<>>QEa3tGn&4;<Et5=c0(?)FjP*=NJIEv;(M
z7jB5QxNykWRO!UQ9Vah3O0}K~TXwE8!8a!~SYBX70N2^CG3Rg8?EKZkdrigO<ZFCD
zmcfCX^VeMFv%lqhz2t(4=yK;St0hG;Un3N>tuE$$^Aq@R{=cZW^DeKVIr_F*`xJT?
zINiSF_U)npFTauP<#z#>&3gGP=3aiZ;j#@cAE(qpC)+D7u~*z`uXsPaY`>P*YwwjC
z7q0mErs&IFm1MgbvX>{U_Ns^3)u_L*k$0~i{BSkl?D7BXALgX}o%8fc|A~z<>9yB>
zEI-k0acz!*dT!yh56R5443(5OY3;dqE$#2Mg4yefdO5E|U0d~KuciVAZ@@L)19EkL
z=ltM_Z}w$veY;xY(W+BF4=uUQ5b@)NTwta5V@553?Tc3~U2tr9f56RLMfFpj0-?VS
zDFj@rdn?Eiz@XB=#2Ub`#CKnnRpyGf98=#i+`Pqp>ZfSu-W&6DrMAw!trEbv`)#(#
z#ubehS15na+xYEvZ@^9F2MmXGmT4x)^Ic$Av&SIU_x8@UOU~=&cD-83`rTj1=Ty$I
zf}70ut2?{D)v{%7GFbhDLHoeX8j;&V7h*QAy|e9Yd-tCiE>3r6?>XF7bn8FoZPt(9
zJ2M(CtvVvdBFJ@Xi;V5<)oHo+R1zK({+)5^Rq@$X{!Zd2_x*hk(NLn;dH-jvuZ{KM
z+qR2O+`Zo&dtKJ=f&9FA7yhn|`mXF~v~F+7y2SK#FTH%Y7f5V-Q>XQhRj`gtvz9^V
z!i_}=x7WlPT<N-}7kJy+Zp+fW>;L}p|NpCDUbMN-)Vf(5KGR=J<UGA${$tCU8{D5R
z@%XRvS<*DmKcI$lZdipc&vK!A9XzM4_#T<v+_>hutO9rST<;?y8JjM)SaeV636mCH
zo;~T&5!-hkpZr&9x-)r_?}i{*7bWFO_t`f{&yDrH^6FuWoS|#<_Fb1{J$Jtly>aZ!
zmo2)?#{XvsHA)@Z<FjMygJPapb?t{0{lXYt$zEaTy?f(N(v6>UUp1e5d}-RwjmH~U
zST^*m+b$WS$yMUQ?{fe5f!F%gu4R00$~7LU>~X3%$FgwWJN63<ckZ&woV}_4^iBDp
zr>oD^iWE1mf4=dW-Rrm2dn$yFShKy0tah3o_ikbFOM$m9y)PVp-PfvoNP5;prXch8
zdsn@>z*n^QxBY?cwnN&l9cDNLIB4$L_xkJYJ(E7~@f3LTgZr%Ply|)LT>Sa+iLc%n
z{yX*M+*S5}Pg@>!1dDe5UFY(DosVRMIp+t55{s8d8n%A7?seOwrR%5mXr0f8yE_E-
z-ev52!~1~EqW&Wr?_J(K(*OD2bicITR2O{EJ(WRX%{Pa`0YWAp<YTxLdF(EB)W@Fw
zq@*$F?L)zZ^YnK&tkt~0z+(7RGW3S|88gd0-iL1=p7LnR{Mjs-bH2Fu_&(iI<71;A
z(){87CErtyd;JYQPj?qEKbOOJ;YQ@V6ISw%mfoF^bjM#X^4q4uV-x3pb3Sp5KQ&;I
z-Op1gz85--Bw0;$`0dv0-f=3BhkXI3f#T=*8Wtge+m`Y-cAq}c_omwV<^u=Mlb=?c
ze8zQz`Ta?eP15(?G464E5wPHrm%xunGbQ~uv7UR+u&MW4+rg>Ttw!GSPVYFwV(|Da
zf8*UA2A0N#wc$EVO2UhIO=dK7Ok#WSU_(^z|H!q48}63vjk^t6TXi;Zt5ssa8pztJ
z?-!o_u9FW)>y%OI=sL#6=1|2J#<psm%!>opR33lQ(fzqeh=GSE!pPCt^}8OYyMHf}
z(Doc96^7XylCtZS9&0@GDn039%_|hp+}hsR&F-_6X%g2=2ccXkri_ix3ihtKT2}7L
z$l%v?@bJ;&hZk&_(WRs`ZC0P7TF^4Z)%hpizW@07>*mViYJJrj#T!m_u96d0l9`dl
z&9|+VU(s!f1$*x*M&2tcqdz{GKT-7Kx<3;i8*rcOR1aKs#l5AISwb>#*DQl49!{-F
z?$?5MPEPlqU*jXj`D=1U;9|jcKHFVWGJ_L6=ekXewJH?}Srxu9jW;<oJA8f6&N@-+
zZ_fjA(=RRy-8~Jww(8ha>+d}>((NCfUEMuBKYo8bBfFT*jDp0&?SkrIduDu0NJ&w2
zpJp?&DE0Jo!*uZ4s`K+5+r`eBAdTGLWAI{F0Uo*E2${SfW;b(&gw6x*6Ayp<xvbP4
z`K6)JgGrF7slCHau(PM3yLUo<|HLU-lc&x|oj!9;yx{z~3+F9b5;J@0is0od*Z8eo
zyTL<2P+{XX&zhq8?R%UIgi08N4E7#9cD$JxeK+$}CMGeo-OO)aGQa!y>GPMb-#$TR
zS-|rTwTuA_Dhw{*d4u`+8Y=(#Kzp)v_-fCt2>CfDYWaoL(`MeS>c9KmOlRMu)0ebv
z?YTDZcFYdbKWlEkuUITR^ZoCGr44n>jiGHV9r;b2^}anVMcHEDd4uVJGiGDklRY<h
z&8F2`R&86kW5urJdzNis@|t>R#wOp%-m`-(Jx;ivIV)y=D*UiJv%T>AqT2;`gPEru
zyl{D5^yCYA9+oGr%<{SQ<l@XAu}?SOh#mBNcYN}1rWb!XBG%kf;S}WiV`QPw)X(wI
z<KirZL&sa#HmEf=JY;TZ;e42LBO{f$t)X2|siQ$Kk;yT{jKzcFLqIf(fI^U)L#aY)
za}%3gf=@-p!-WhBm&=%yR6Kv;6Rhh0Y)j(u75yT&yl!SNEM9Sy+3tXsgpy*Crhrm|
zo#g4V6K8|X*bYd1Sdw&`!NBd1Ed%orfelIKY!|AzT$*Q>>fG@7EhO3@;uC1c;>hWD
zc#BZNhCL^rUzFu$uQQubu#qwJd~Fh!g2n@rSJ&;DkY>j2GbA%8Glqbo#UUUcZL7TM
zzjg4f@)6o=W`U-2&YJbXx60S-oqGkkRlc~!qZPbWzN_86ZxSe4Cge>6ZIy4E5jJnp
z;w5tyEL^&B)#|3@&TBSo+*G*EcJuZfJMFjb+PiP*p8baoPpyp)I&$(<f5-8_ol1we
z7qKMDEjbo<;`HLnt2y`9-ix{2Y-V=n^n+bDW1p69d-u|w;qdF7Z=ams$NhMgT1n2;
z*G0V#wq}2Ql&X2+sob=tt07Nsf69wfZAh}p5S);jAl8>}lf?M*aN^+*;jKK0KOQ>@
zvPH_pbUxST_R%rgc|}IVVe+y6+DgwgEGDYP1?arkBH+rk#XG3oUDfPzS#WCq+-S9&
zgS%LdED(vx$T{>v{qWSK>DyiI9%a>?)~L4Cg~crNo=>aonR|P8GM;YGuKAkuaJK9E
zGjjEuom*QzrUzSay$pP#p}y%vwV<+h@0X*|6SevG@cpn+GnBa8c%Ull&C!q3cE-Ls
zdiT+xXFfOM->r3xG*=K@U({gi<tWqhDq{EJEAwR1%GOMYY{@>k^L4q{mG~v`2j9K;
zp>loQ!IBrkqTi-I4SzQ6{G#7tC0#ByHx6`r^_N+7Z+vonzWpra<M)1C?iV*#UCL_{
zcSJO@V&0zgtJ?NoO2gyAJtA&YMjTl@z11~x$^VYzCf+huZY{>Lg<|FtBZS1NDyPg*
z<J+|LXvVDE<E>%!SAQ^<O}zX3p+exqtF9dRg^pq&`Igr`dz=@zDYstNToT%D-?Ae)
zWn08e4i<|SLi74UsuCB(YHzwMU1KY<<)ENv;R%r{AJ-qOKFQ0T#fz68D{88goVOue
zT<=Q&uczzJlj`DC8(YrK<hPsHU2fmUn7%~PDC&yclq!qNWj;w+$;(dVcx4(aC<^AC
zVL$0rch-byuU@q**rWB@X4Sc@)dpMdt<ttz_vY2=nalrZz0ujpm;FZLsNCu|YA5wx
zzfn1Br~OvxqF;8d*7KCrxpS|Vo%Y#qug%+I>!WGEId?o;w)+3OU2nF%ez*I>G41zz
zzFf<GzxM~zq1b(YE?o@X&oI5rmD&Ey_V@!F)r!{+a+?2HY|b)g!HUD%JFK|FMamls
zH7Eb8J~~CR`Bj>#nD`!7*1kOwn^tSo=yXj;HrU`0#4V6;_(-^qaoSn7tev0aRjUQJ
zC>v-yIaFxPe(fKh)|eBP)YYf+QtW5rALdj4MLkbk2<LE{!gR??;2>k=o9ajWVW%0F
zACE}*%Y3_6WNv$xg>b~et;{YToLSPE4ISg9lOOgcX0=aky~_B-mm@ps@<bEyP}`Ee
zO~MVPj0ao8HQUTB52|dH@AN-pA<lD%u}rq{KGz{G`v!%BEM1QU7lqBQKls0N+4BC0
zj0_J~W~|{gSRj1xgTWdBM+Uol6B*04ryFV>jy&);R%|J^sr!?i+|_+7wyp+_{DKV(
zhdxyOPGsgd%gvl{E|Mq0{acbv-D}3f<_;gY?z<bfupF4o+a5Q&>#oeQi&~Q}s!4tj
zX5QYjbo-vE>#dw;^s^XzZ)a5T7kruQ%2cngo#&5>=WZrBt7FrrC@*PfidZqXlO;{>
zN3H<3`{Zf7QVh(xG7H#wUo^6`eXz1JU|_jp6u@@aiTTCdQ_L(02btu9&0`xMv_#%m
zDDu7B(fbK|5RdU$f%;<{(mV`o%RC$Tj!QI1O-o8-GkLUp+liyDX9U;|>`dfS-C*^y
zGl;1-SB8y4O2AI{#)B5`J1tV5Z*;5M6;xEOex!fL&BOo6+ZLe)MxM6i9*#wgi9Kfy
z@k!n6l)SZ`k#R>1Gm~c5f{ha=PqLW*;~b+)%z>9v;y9SVv*zI14^)S%FwOuMv!3Y1
z?AoaH5i1N}Cz6=uod%ys(tiFO=tPq0hu`+po$r7A8+0N`V0}w_M`ul2S8rc`Y7c1E
zJZRFinX_ikm_2WP@7x88m((s=x?*MBsx@m%map5mDPqIsZQK2}?%2J@W!K&V+x8z^
zV~>0y$*IFfR$c;~NOJSa)up!|JbZNh?!Cp2U%Y(z^x6DZ??2qoe0$*Ix9_KU&3^p(
z`|m#kGgpXN;(~+C9Ku>LCpIiR+%BN(HOFJ)qNCjs##whxY+QW2U%|Oc#&gq>lan=q
zSH+y%wDk0JgXB|lJU1^pJKLi8)t!@@m!JPXUA~S>)@#d(i;F!bYsH@0vNCuw+dMB(
ziPBY9Qw1i;?l>j-IIKN%w~@<+ULBLo-#7X3tnOKRKp@H3X~u7#+?a(K*0)?wTw80r
zqkQqxuRp#<Bpz-}mie-JQencfK6zzno1KzRlc%d@uREjj+4ww1vc^A&%FW&!i)Su1
zJ6m=8-n9+M+u3w?Z+m;&JN)szv%9yyzki^aTi$Qaj*pK|OxBJ+w`b?)=NA@x&-dHA
z>+9<qo3rnq+q?Vw`v<|7`26?n*}tcqf42Fq(7(UF9}^R}!ES%I`Ipc8$Lnt#UidHd
zUGMh$C2|!P?(_5L7#!he_@lsJ#Pg?Mfgz`#g<{43*vSihxj#(!e};3mYlTn!--V%z
z48^@T&b8U^NbhO*IE9VB_PmeB0e()2&kBJqOPp`FFn1hIGBT)hiD$c^ureu#TW<v~
z)8Eb?JyX1QEjZhzm$Yp{&y9v1y^~ISNl@rlS*CH8O~XxDsrL5_N&ku8U5+g^wro4x
z6zI$6_}Er_($i<g&i6u=oBZ9mb-BOoD@#WP#)g6nE8B(%JhN^jbOy%1;_2#TKap`O
zSWxI&!r?`|w?3?}ki1dwfJy(XX5aD)6_ry27xtZc!NUAx*4f4>O3Im040^&Z+&4IV
zR$sKxFGG9rnOl!DoDNrotYJF+B_OofRrS@AO=s8^oY{D+K<n)K;L0c+qjit2{7;^-
zY};);i)FJi6D`=USckB2YuxCW{$SN>m9BTYtOFC*vsU<QVOC?-I>0#pRzS6`)a0k#
z#}wui%y`{(YlEvm{F&#wl$&HO9+BJ6Tr^MT;LHy~;yW`w80k)V!*g1~HGAWkvnm$@
z+sq%o`F!4iUH8ic7xCOL7d_P1e!1jh{`Sk|0C(N5`9dxZpRUO93LNAYWSJSvZ0|qe
z5WjH4+Q~PKnl~KcSMX?f&A%*3b`r0_8{va@H4g|JWZ^p<J8`8@#cuQK3JnF{uhpfO
z9JtHdu-D14!`-3Wao@(M+t;F$=bf=@EPj&fG3~qCce^(0IZRI%s>@B}<vp<ADu04^
zLJvz^dF%hTMG8wAzVUDRp6A2zge|SfY|T5(`5%wp`7wo;`9Q$$8~fM;%5x4cF5YdZ
z7?H`d^`wTr$ZLZ?yF%Y&v0wOZ=n?dfdB&kfi~sTW_?6h&Y(KrL=ezxvU&0)`4EuM!
zdp_CiE#I`h^O;Mk*j_TsT4B0>@e{w|a%CB-Bd#hx{yNyNsggHQJK)Hd#L{>o<AKGN
z?RLo#oebZskM(sdGQI1`z*hA+-s+0D;;EDkstQNk`6essy?c2=V@-ApGgE+B?VrcB
zQZ4R(3XJUEt(~A@rZH#nB8dZq8~TepkF>p+b?~6-I+gaq$wJ)Uz8ty5va;;aCK=9?
zYJIv^hnu-K#=QE}%J+9>PC(^ep+HII#Y;?&9hdlZ+DGht;(=)a*%hZQ%l&Tq%y61D
zbAszlMH7t*X|0b2k_Ur1RJ0#CXP)4yxA#!YmiVBP>Y_1ui80%xRUUj(D;gM*Q{1Gc
zZag7>!O$je&oQ;o<KF9@Y?^-H&RM<3f-HyvxQp=^g9x+})m?zx&V3OiWa+>z7@zWC
zPDjn;W5O(-8&!nYIV=!4z;esOg{9l)#<8s`3+6^BDJT>Py0RDX^4b{)M~Ow{)j3B-
zMA}W8UQq3vSI|^2-LB70bD|g%uR-4;b~`>hp=m-f&I(GM(>Ls#*5Ja#Y`{D{eiviD
zD-)lA!n8H(gi;tQToia47A)I#$yGsfYGIUuSHw0UgVH^oCpvf;6M1jBGc_t?e+lw{
zbfWk`i?2Ev&oKxyNHQ?6t#d&3#q3EZ9$I$%P-1@W@?^Hj9EBPDDl=19o0c%B?Qm04
zib$EHw@9_|^${V)#(RP;?D=3Xgo}k|S38A;hS^P?l3U@Fom-zf#je{<vyX|_pnE>p
z2a|;&ofMSXrmWdIxz-uvgDElF7;{`eKA5~>l~5vMsj~ua?OZXYP3K$`G$-YSD|m)(
z5;7>-;c=vumobj_x*JoSLdHjbPly-bHQ`={dElB5wAzmPXLEHh*<+l|wPE4>IriJO
z@0`73_sqTfrXM&s_3)9&$Bs`td8+@++1~RPx-YqHUVb_As_XS-H-lDt-*&mX^nTz&
zugA`-71!vzPFd`^h^hAF7yni7mV8)I_;~`$ozKiJT7|!&G=E%ts4%DTn#<kb)(f7N
zK@6%~S3D*x+SRhw$?}WgV|S*$CkD&DD85?K+943R=!k?czg?q(JLdyMZw}}G`Obb!
zQzKU?3NCzBQ)IH$;NI+#r7;`4Zv;HiS+p!q!}O}+@vvaIeUo183eCCH$NqognaDnk
z-Ic1A$KIM2=$+if_>hk!;PW}H-7cvMMBGokGF_Wr*gI+Bq<21@-O|&a{%$UO)VW5A
zKP-I5=No)&?t%Z*r_6TiSY&lVL-(fc>(e!Q&v<GlK6|jIU;FrxwLiY4?cW^p=iZ7{
z3s+oRVRdK2fjyOxN>k=f@0Gl}HGg?t6t6;(b3?-NRew5@6z!&lmvJ+1cjJwm^7Q%V
zp#9$yWj<>iDJ<r(FX}3L)@c8An@GNXV(NqN%ZxXs%RZd5Db_P*<D>Zv&b=uMqw*4`
zIt2f|DER+e%p#ry$%>@~9NqrMdYfiM+KY6EY9^|>b#-$k3D0)7yP<HZ($2M_H_bg_
zK~R#@zp#|{=$p(ZeE<Bc5EbM8*QD$xcC}5`)+6fB5>vl#EUD9OPKbyWOK7X?GfuZE
zN}aWF<H-}V@}4oK&#AjO^TeF8su|A}E8fkVIJJRI>&1eWQ_s{DYvpFmUDT{{>V;IF
z-KyRt-a)_ImrR@1n7J%D=TxS|yt-elGupaV`A^?CW0t@w^;NfAX6ny6<X^$Gt4np&
z=Dz7-Yi1sLb;?PzN_gq&eNma(!bjU&CTg&HsXWOx+9~l?K%tGxbCcD_DO&lW&yFqH
znl&jR)Le3w`rPQNMH2tjR_1;bQ%-op`QzS(oe94WxBQ>`EVqrbD5a72l2-Ei#D%2{
zQf7PBZeQQ~`kY(dp$$j1kMMA^{C4iSaHHC*>%>fE!<ygwmcBEQ`hMBJQtq|&nd2r)
z*`trWxpw*T@uz$mfu+y6WIk&NU)!_k)QvL<hI_YV<UG>0+y3nE#Y*14z9;>gluvan
zGpy#j5+_%kJvBLN@7LAGs^;=vU)ptc=}rEHbGO~<-gK93M_#muxpcw#*ok*DuJoEu
zt)3nD;(i0W-j1nfMe}|<>`-6#<57?KyC07yxa<9VGKD+x=hGSK>wZ3)Q+_Y$`GR)6
zUoV#E|EqktV)?pXuX^U6`}KOm@pn7lY`LEI|M%l{_t*V?x8?b{-|r8&>v?}TB7XnJ
zhhysNZHiCmzpwdlR^I=|=PT-RwXZLSudgk>K6~EZZ@0?VS6ILQ!ME@8qv-iw>+BcU
zJpOt0Jk!thjPsc4|GZS@d-3<m>Hgi?Ke8@raG5*2+uPs3{zU%ypXV0AZ&E5)Q{*<!
zXr98n$f=S0%>9Q!#q0BAI2-4Cx3c(8Wai20YrM4jEIaQFC4QFz5mk|+oU<Mu;+*xN
zNG#^)9~)*z>ADXMzY@c2BQo|$zuVv{)Nz2ZujJtWmo4opEoW$kSvYCETHoom<c<cL
zK%=}%0)tga68rkZql|6^%}Qq$iMbjw3jRr8;!U{6alT{kqmKV>E$JqU`E?Z-7!3-W
zN<tP3^FCr0@JL`{{vm!~M#YifDeX2DTORf#c({0-3!E@Hc^Yqm!XyqC2Nr{l11x_e
zPJFc7(7t?jAaAhd5hk|6{uws+_OmE7GE@XMC>V68cVF>Hz3DGntaDWUHT&s^zV{6C
zavYfJ7@9dN0zCu;9E`hH+65V`6+L)np~2>zzR6a4Om+{HS_=fbqJlnmY3)&YRB~nC
zVb+PPY+s%|Hp}D}aB*<Y7JR@T^x%xrqR&d7uFM7X$4+-XVz7^RrlG>%R=>z_F5}u*
zN0$o>i#!g<2pV)a^KReY;dO<Lx#3`$%fn;ckCYe;64Lc;UtGNRH(^1L0RyAAKvW=S
z0|OglK&Cgd6_<dC!s5?A#9h~J3ZD1Pg!RCOlr>#i=YtA1E-~Ox4e&l0qC72W!KoYv
zh6gto4u@Qw!FNWLBPW4bpyk=>4AU3^$ha1`rfg=gW$<G1230c$=KDL~IRdigD<|u-
z`FM|jta9$@>gz{30<zqhY4-dDup=PtT~@-5fUI1-1$qQz@wR=CBOqH390w1YZaH}#
zd<10s#p|FWAg|rL2RZ`s!n~)TBOqr#c=P_l$4^_IfBrVp?&q)H&<>Z3N5O-=sqgr-
zLP8)Nu6NNHI*LcTn^m&zocO4CEK$t9>&fMfOHNMCbo<1$a#O186oX`|lAYa8_1H|}
zPu@9sIsV-L7_)jV(My{(&M$n{V(K7udd1}#KB=s_QyKlZOf?tJt2%XcNmxX%duZ$A
zudlDI%P^f)DjFuzyLJ1eQ>`4+LvPy%8BATvowe?MQ%&IAqpOcQ&f^ha+WhOZ#e$^Z
zW>w!G6Q`ezSmWJkr+0Nn@&2<*l!BcE(v4nho)<h{O!Zg5)2q9KPPg%{+B*CCmbE9t
z=0;C`Yqmo;HcU9?Y{R{2Wz}x;UVdNtpe_E-i9KqmcF#JdWZ&<Wjka}^@rZnW@9+7t
zr%z=qx8FK$@X`G6%N~FK7k~18bzVE1S@0*|zs0psce%Rm8^@&^Pt>$~M}{XJ<!@?`
zs8DEWdeJ`1PUM&3!y?JB75^XTB+C{Yke=Uo;h|GTO_`E{*sMj5x+-!yrfKOPI^o_u
z$2LP*-Kfm<ii`EV9}5jk*)-kz?Zh&d$XawQe>}-u>F1Sx38zl?$%{2IRi%UcRz96p
zkf3>LdP3Ptk*U`kBim;zoUn80Ot*!W3ufhPxOshY2^Yunz`SQGPfa-Zg>z|RZO4OS
zK24W0pR0FDWyUMAo2V?GU!=3kbFrgcRL7DTd6_HK<`#XNvFt13wUtxnKWbK&T~v4F
zh|H3I21zZ;)_G;lZTKbhN=#|5)YGz3iBrmslkfd<TUB*4N>eDOWCPpgES(A3nsQqn
zX*WEVJhXDtF{SF0>s+@y)RDf__B&@i_lk-CS=JZ`e(c{pDKAQU!m(`+bBpe@Wxm_|
zTk6B}^2_I#KM1~A^khMo@k#GDD+BIDbMDyjDf;}rRbRSR3$o5H+0e&1eOJN0DONrw
z*OhMKDk!yQVCXni99Cj@ROQeX!wItKCizppy4CQUeDzP@kQCRP)$dN0uIOpspCfVB
zooPK!&qitf1$Wra#RS!UxY~Z~^+rb?ea%lQHsLxY=bfkXERbQlVbFf7aEWfuWrN#>
z39}-tJ*HjD>aj>_&ffF&(%F*dG2hN9>^A)PFzx@$3Ym|8FZ{SNZRf`wQj^X9ZrYs^
zTKoN3P`YdR*~;S&%a1XMYX5j}tflJRjssi#wg_yPC9Z5To&C@M!wg@-V#VHBET72s
z{xPE(`~Aa3u@&>;y%$xTUo-n{zR@=Az3u#$E(h)n+4^7h$Fa!zzNz!}J-+M4_2j(c
zpEG@>xhbC}w&YqL-FEsN&mB(Jv$oO)-n*`U|6uWZ3Hj&D@h`84t9)}jRBJCWU0Uda
z$)=MlQ#*FV>AWyslEvy@AGSE?`LFK|4PVysE`ELcMa$JT4@SPGuC91Jk867}t|l`+
zZMr9Qqs)x=?m-3(9oIiUzBlu}=qwKAmf^2gIdExhV%RgwhcACD<>^TEPwMWTU=~ub
z!u$ar-=57$v$lmF`Ttds>8^3yJC^hV?hW3pADmekX0T1W;po@><fOufH)6&Q-yUOR
zvRJWL!Z>2Rk=3IfM&%nfR#hz7y3<hN`l>Mg)nWbj<}Q}+{i4wOBB@<u!Ux_%x2{PP
zKXY%BSzmUsf=T^Ju!pV2rc57&yZ`<Ov8%8N^klDSeE03dQM({Rz4=oj#HyyAir@P}
z|5nf=AyM}ozIxu=dt#cjR!`Z#h2?Ydu{YOrGZ{~4_h>~o{%{cgpSbICqF(7v87U)C
zVQpKM4b66n3wk9Q*$Uh?``oy5i{Y^4in6jMo*zq`_MVdD@O=6id<5jogf<08(GKoG
zK#KOK;G$jL$r)eK?#dB88-LMWEv@UE*@aZJ&z@5z?J^fuw69!czhE`&bl-}#+n}fW
z7VS6yIo-GA(8)8P(|xy|zIX+6x^LU%n|JQsyMO)m1JLQdm!zJ*dj00@!bjlwu<b9u
z<_rD!{pan6FTZ|q%KUhHe@_F8uvSl6fZU;00cEjliT4YSbW0QmmZTdlKHk6DY};#&
zO-oLee=ji=aQ(F8^z<n%o3c4KFFWgG<R2^H`gz&;|MRPh`m7$LA829Ek?@f?pmw;0
zfl<vS=&-_p#ueFBOm|P2_Fae*Q1MA%b~xl`%B->?*4m7@cWajZl8d*t=G|RC;oPIh
zPW3l8OjFMbb#O0Q#lddR<nh3O@d%5c5YwLp+1o$)@2ODvd@<*Qe&pt?L$7j`OM4&9
zoua$Ct#jw4cvHC>1@E-KefDF^ns`a_OyZ|k_hX}H&(b|^oN%F8)u&cDq2cP$eU0AV
zHSbI-G;OR`={Htnjd`(hd3S$AtWcrD_4*Y5eKltrk1|g9)MvM^?&PP1KW<f8TUWE4
zSikn;e3o6A?DJ|l>RRNLe(f#1C;NWyhZ77F=87gZvinSM%*#p<_#c-4P*p?8mRso3
z1H~P>We&_j73E=U_dFjQVAT8f;4XLAQI1C)HhLkCq|@dYIrL0?xNJJ_`?XIUq__ok
zrf}(Bxc+#`pFbAfY)l^}rb;UYy?kmB7I*pS^pqmuW!iR2Rz91Rv+d=xSwed>pU)||
zmic^c#j};q=hb|B`FwuExyWY<>8mC^Q%vTQI=!&#Utoroox-Gy#p_+XGUfXhCB0nw
zHs@5P+{}58UM_#$<CP`5a8}Z*m5<k)S{1Ho`}o!ByJx(zrB_Z%dcF4gn^W4_8?7F{
zUVo9NI(yv`3GX+mjq5twH?3E)=Gt=F?~=~!@__19TNY(R>#AJ0%5L92zeu`k)Ac&*
z|L!}o(pImNepc3$x0(CmOzz!1*Btehe=IV}U+|SHi+kUTecjm`&i>(kvGeDyi+Zz|
zt~+hm&9?sHdo`~ACqJy=U!Rn(%DY+c)2<&uF@_tiq`Y~4tgs{}<H)sLR-0sm`>Que
ziDxe=ny+*Cq0tfpZ==ur&c9<eoi%?x=j6GXu0NZlZdmz#xg7le&8E#EtEEa*oW=jT
zo&9yMr)cBNOVOoQ0(S3go8z~AXW70SXPND{^Si6RUClV``+bLd`&^SlXAJf}zgxzg
z^W#oWp6;pz`ODs#Jt|ROS9bHwteB0LW^k-azgp@Z_2Y0w^}UTd-qyYQx~0ckZ`Z3p
z^SW<W)))I#?wBUs^WSpw=Gn2^-|YT;Zs*lizxDPkE88Z!>*d13cE4WcHuxUjH~n5-
z=d&%$`I(=tS?kqY+ogA>@^JP4eY>vgeEo0FjZ4ijb_XACU;Fpn&2D?G?<cF?|M>Vo
zepUUy^WSR!-Peqsf2_xB|AT}2DGP4LGcI)RwD#n!pT`yd^49ci|3djP)xG1HSuGsi
z9_6p*;EDTV6Sn7l?y1tr)pMDuk8kJxrQ6)#&Gz-f5$iR&=Nq*4Jp3wB;q+@^U#>=o
z^pmLVhd<b!uYc_n&oj}`nf+LAfz_GWuTz#=tmO^NcexYI6`5{ct2i;uizk75@AN~z
z9Y6HEGfoz7{C33jm|q>=;`#iX9@ac@|MNPJXC!gHcR&7Y?T75*5@pW$Gukb+4pn-x
zDBL`D!_i*Cs36oviTQtnhk=%mRMnbb1v$;b9+Pq=_5DdYeQ1Y=J`<0?oHhQc?mxGG
zW9e(2?X0SyyV-00-8aG<4$Nvtml+4%+LY8|a9H4k!<i(h&ofT=EHj#Z@=Ti5=b0B;
zoF*uAnuTqAKkG(`f_`V<vEbCtvmdN^W>$OAH>maVocl7*4Nm>kEZH@=_7w}8wdL1y
zRo4vX?Va&_>6?@OzaJKh|5_4a&wgu5{U@aby-F*bGBW}i^u8<<=w0C=ek-88>+&4o
zvl*_XjRCHyA&aGDX9ybpy4cYcvP3*L-P5-!D5|6+;J<cirg!ScOGZaU78%cV^*vc~
zx&7IcWy+zM{+z!qyRuH5=d79)s9k!cR;_e_cWRc`#9twGZlQTiOOloIgRa)al}?Cc
zeWF==DRh0^)ZWD2#}PZD!m8(quASo(uBCV>Z2P{_!eG(Yhn`7o*tP5Px(eUb@{GsA
zTYr3=+pu*}Lhtsgvt+)l?_3)ncXe0z$-BC}@0DYg%T=E{;Z?R#?MWol_8I$?{H{sQ
zdAlZk_tlV7SvgxKGd~nLJMmV*x@lXNr@lFraN7O8uR!<f6}lGbg-T{3<wD0}or`2|
z-#Qq!ts`?vE`Rz=_lIel#ZOOlDSN-+Zp)jHbrwsKGOv2Xszr&<-ge=?e|i0eNo;Gk
z^S!QJ@4nA_{YAI(Jpn0kX6L%^)tw0E=dBX3ec^rM!>#G9Sv-364^MXgmpXK?wxPh1
z<IkNlUFEw(Wa3tf#ds%ua6MGaVCbXqCyM#;g*L$}`eqh)9)@=OIQZf3;qHTukM7R8
zv87-6NlWCLL$zmqsF;eq?R7qV^pIHh@$YZEs$brUx%(-HKk{tu+6i;ku`yfh{mW70
zc+xBNv*Y9A9G5;lsJoP^f1T-!(Y(GH$)3-Q%*E7Rt9nhF?eoNN`^~fd&$wn~dZ*8R
zWO;u3(TMq#zn<%|@0uR;t$5+hniorXe|dLrD_(5;JwxAh*2T&5;+C!~d1;e+>td%`
z$@2f-e`HR`t@2uYEp4T*Y?jCJsL89-Ofy9PX2~9xirIQ@>$>#X*S_z5UElhy^h|^A
z8*lFDjH7;K3;WNSrdsblbLQCB&CAa|%8;LQ>&CP7TZJdS&Eqb=-SJ`D4tef(&ON{H
z<mzr$ym0p2@>RP9-u8X>z3<CWdHeU`FLFore%HNR6FliYL-?xw|7AZkT`zvH$z;c&
z(C!a*I)5G>&fRfX(XWurTjrGL`HD&Ud5*o+HK{V!4<C2udojUy(i4sUGfpPXEV{d~
z`l)Qb<vxc8DLIGdJT>}$dBQ83x3lNlJU@GDQg0nYQ{nGBQykuJlnQE?_DAUVi%C9J
zQ(d3kN^$->If#8qL+7#oZH!<3ywW}WD{66G>4xmkH*NnKFDwlE96$T-n~eK0b9VS`
zPTwE9zEED~@=Jw=_4oI_tyKSd>0{it{hw_<luj}(Uy)mJKsoN|S>XfsB=1*zvWvS~
zpkMY>x4zQ)V$J(=rQe>-y;m8rTG7Gme$C5DwT5fUHN9`j{e5Mt_xoo0o^RWhTf8g&
z|KaZExQF}x*B)%vuW1mz|BZ=(k%P^E;punVd&l3`6wkT;>y@@V%X$0qFY^9>Usd1#
z<$8VJtBLjv?`Qx2{nY%|kG*sMG@3pC^I?76uf2O~%~KngSPwYN4GCyqvT5-De!ZT_
zqCsUtfX0P->jVDp#p`)2>TfJz(rRERHDdTLu!Hg86h?^##{c0(^~=>I6&i#z)L9f7
zq+c{LS2VE(G;kfQ|G8Z4`}Br~Ewwxr%@50c<!{uhX4L<9Ue9v5Ca0)D_e5iPdeh(K
zP5GOeZFZ=e?_hrZoQZoY!w>N$yA2GEKYZ_+H-A`ObEBj=^o5$vjFyLo7-C;AJ8(2-
zUT>^C)XJLBW^d78*`e<JBZPfL{R5Teh!YK_9tK%I+Om||R66vPJ=(K_7;`i-+uU2M
zGa7T7>Qx$=89Ev&Ce_|l>C821uTNs0SKeMeqy5dIwx$zm@f>Z}lREdMl(}>;{0Q$z
zxlzyjphLugY5oi~76&Gk1s!@EoyC(FwHjKaW~lvNFVSsh(7knr8goO7%7M0NKU)7k
zZx`}t?3vLhk<fiqqd`TX^+-m~wHs<r&6}AgDBj6v=D1OR^96I=4(7fcY9btsH%~B#
zDm0ogG-?GfE|^h&b-J2l0Hf%GmKPlTq6ys-gBV?snHRfPeN*pqn9<C*gSqZUy~B*&
zAM8Da8tMTNE!Gx2>?hUuXR5{D=x|-p!S2DdFr)Fz3+9DC+EpT3BsMgsakOmM(fs&F
zRT)RUZ~?=;j`k@Py5=2Snmal)cTA}5XmO2blILt;@@Q9m*`YjBjfY{%U-kaXCMM>W
z6}gipGydq**}-TRIW>FIlx(4i`ATh9HM%FfnEFJcZ*@fL|Fse=E}e|0o==H6S-&x&
zEvsmv-GqrpR&-?vO@3}ZIn0nT;zXx~W?x7IgYE`3<p>6j2a}(i=n&md(_=CHN(AHO
z9c^|GdNeuul`^MwcQ!BwFj_~<NV&o0^O23Upmce~G{uO%)R`^eE7ks_x5Rcfxmv0h
ztej~5a@O{rGqQ^&I&k#lTeg+0R9pFi*|Ji->SwJ&fhbSF<cbq^M{myBw_|eG&sp0f
z8Wc6AAF7<KF4^sQvdMDA?0}!l1`+kaD`)QVoV$8w<0{WNKiFsGENWBd=*j*xE7NF3
zki{Ii3-#}2s{Qnwk$$p$|Ig09H<|8-&n}(Wq<>TGc;_6Z4Rh)|o6luV`~UjpgqM<Y
zfA5^@f3yDIkBK`@&VA-Nvn_L4K;$f~vf|~EJ-;kxELb^1ePxrwi~j8#i%KRjzFaYz
z-K$;Ss&&>*wZk(P=Lju`)||b$a@ybJObwlV<u4XQyeO?&G4o#KVz16A8l1hFE2l~A
znjPM?(6MXAYRf*`U(6~|aqr6(v3oI@om$i$Ipc8T1fySSlRX<IoNO+uoKbUQapbP0
zK^Y4IceVYvvHV9wGjjtYv&Q@*GnSl@toP~CKYDWBPxt9|l`}Lwx+hijNJcS8&stiw
zYq^lea+{eA%3Rj3%hkJg&9XkVDD~9JoUZAGU5ug^%D-gxubeR@X6D>^Rm*F4ES_n#
zx~QoCzur$Z?yNd5u7$p*mQL;J7R_2UHDk5itd+5=79Tmac*@U}s$9h>Rg+>fRyjz_
zd3tl%T&wxFZZ2AXYDH_t{B+L6XR~H++_9{D(Yl;ZtM7}iIcvG*T1U&a8B>2*s@p}a
z>^iYV*>XY7qxF}xmc0sF%Q&MsL92^>*W%l&RvlTn!OUybzs}i<b~OLGrRMNz?V=23
zzn9E2IM#~Kn%?$n!N*lAxT<I5teC++d(E`2rP`~PZueTFd3tsN*Q%-EYvU{X3b|%;
zTdVi{U@$Y7Y302>dS|oNg_-jsH`;ft=2*dWSfU|&M~zOzjD(r}OdpoyO{$6DSpQ*p
znc%NAnNA&^vs>CFd%vBi|1Ujb{nM=3hfgf=?3}ByYMQb2TJ7}Bc};8Ter()$a&4|h
zgXo8~=`UydL^4QsZ=3aN6Vr}Gjo#b5JDa3mtKHU^Y$Can{R6{?=_^!TZ#Cy`lkRM}
zzH&{Z*A$^uTSO$M_)Biz-Nfj=U0vWrdvIi9b@sXi5{)IB7_=G~KdzYAyLzJ5fn8Hi
z_WwJ<AdpeNdiT^1CpuqR?D?IsTWdjo(W7-IkJnuIz2lktgu0};rAe#uXVp8s+^L(r
z_Ez<}c<w3I3Ehm|^H>hAyZda<tc;!VstmHX)gy#D-)Cn#zwle3l^4FE^WO5-jpC~w
zE?N6XZSSw_+Aq)d-(S+b`*a?+#euc$wX89lJ2!7X@ay#f{yP;r)em}CO`gJjaOd>>
z&yVkab^M@sP3<%HL;C3ll=sw}bwBtvZQs%ILrQ-R9cw>il#{O)bNEr&VT(JtR(lSw
z6hCaoQ)?n~<PrN3m!3S^nj@#C9r0RI>3rwN-|Qm+XAb+@9IZ<~7#4FRV$M;^n4>W<
z714i=2Fe^u+H)`^=2+QsJx9psgf3``wu|vHg8+jF0|Q&R!~6@6HVd?#SQ21hqcu@%
z0)JSE-Qs;5SAWQODc{Nx=jJP(`sCBKs6W%rUi(tbTe|<@y)|ZYQnqb2U@{OCR$y$c
ziwIE=PGnYKa*wcMWDIU$npkQl%*@QxYamwV!K5&OiFvx+66c9-6TH{@uN0oUIb-I`
zoa8X1xz_&-UJL@@N$+a#%3-fAk4J_xV~l$Jml$i!30fQYCiwIfBc=x@FU(r#dG2}J
znRH%{IN=K}Dx4d-H=oRXvG2}e79p8>4<=?t_NEqRVa<&6=CDo~Mg_6Pi7v(^{LVAF
zCDZ5HNeXlY8~5oa^euPgUMs|>r#aKZ(kv*%Yj^VA(ET|`?%`wfV&Db4Ck^Bt5w9+f
z`-Yw|M!n}3ezr^vn;f39ts=%JW}l;i!A?hJA$FHT)Ak&2-_l~t=<AZXl>e`s-<_%q
zJ{RsB>B359p0<wWuAb^nr*5J4iG7nNG`UQfHoJdn@0<yNRZF9Nmo5twf>;fn50HXe
zU50M;<{cb9Q+yhpH2G%j41Tn|TgF<l(d2{<kH@|D$HcrVtXY`8|KXTu(UF(Hlh2=2
zT`DBqmQX5V)a}*L<($?m#L-Y~S1WGr#GIdC*CE4ORJ6#BSu<ZoxOt_MrKLxr=eDhZ
z0lT110gqp)F=9WA#s-vpv>3e@guy{HOb??0U(jWPF9<-ALf{~n2R@I7OZAwF;K~rA
z*~dWV@q~3>%HFnXu9upyc%dMJpzY+w7PUeF#Yx;BFHB=lS+D4P=srifCg`M{8h)qp
z8eu1HAsHi&f^Pd9;X)_ITzik1MXmbAN<wu79JB4K7nd{ImvB_e)cGvUX=lkT&s%Ok
zlTWGAexb}#cc+y?Yn)1Ik2)0ywL5K}b#~8m=Y{dku>p5{@A-v?JaUJmE?H2l`Qq>o
zxI_R+@__wQ4D!z(&#n{7lUBrV&Gvf{G^>PfrK?Wy362W&>+x-Bn$x9?9_uSq`Z@?t
zR9P_3H_!Q-Yp;rjMU4|E3)a^NYo?_(xVM3FU|p|q5x?^kH_6l)NdoOc#$EbxT?_5G
zmxJ<Oud}6DXjo(5)@{KMM}plE#2CXM&S(Q3H;sGmF2jYfkHBoU^1q(j&|A?qZU5oB
z`~HU=HFj$EZhQgViZ=UpU1L*oOO<A8M`u@e7_S2J1Z=mW&0q=?W)j1CE81qJ<^IeE
zjzMol+s_<u^xS3exapn?M{eE)?IYNE+wamN(5+~vp7=g{{o&)M&#T}1y#Mm^*YB&}
zynp;*;*!~MdcF{7+?1tEq3y7UfRfi755uIcZo?oJ3Gv*8$NTs2bqGw{xX5#|xPIQA
zR0B?@2?oiVq#`FN_0F~^oafWIT6NO@=^Ju5U~3Thrk>n#jlJEh*z0WM$E5Rp+oxpR
zJr$a9IVN^zS+iB)s>qeX!7)##nXZZ69$&aO^w!(Vo0}{0y+Te4tzNsBL1+et;2{?#
zrsBg<5d}`6F_E1Uul;2ZY>GTx`PC~X+D|W#L6)aOP3Kkvli0+qQ2_}Lj%cx|N7&@C
zF51?xaH}Ja=!DtpHe|~;S@#%Dv`Cx7elG9b>2L2Zuq@&iRy}Zw;nkH%k-N7s9B^p5
zxkinJ!@xnK<0E6qZ43DXrn?`_bqp8;_s=}M{P04jsZ|T=>$eCLJnKt0E4hA<(@EFi
zKq;$K0#n(|t=qiH?>D9&WO%$Yow@Dt)b0Nh+uyHMxyO7?VEX+|!KY8|cV%!^^rv%o
zv`I1BOks;+XUYgyU|@)GXXxj+b-;nC@vfRf0;kH!2U$XT40D;dZyfOAYyA4+6jR_k
zi3?0GIFBY)J9SQ%3p^x{da&Xv%LAuQ^=Iif3r*IXSmdYo@3CYF=M4o1j*Fq+6&UZ`
z3`kyJ79!ph&>+>I%(!r>+AOBH%=E^^LQxYkG8Ip3<I27(Dd6N_w%~gMZ&H({!}O|Y
zx9;Vp=cznnxy127i{qj1frg5&SDTbr4)3j;GpG1o$aBYeon_I>IgAA6@)|zloZIZg
zn>CmBypxvh{H2N~mSi(rk#J(#q?*OlZ~ACQW+qq2j{oP|U(UUCuY!NW@`bA;y*krY
z3P&icpRr|Imz-YSy(_QTH9x7R`yJk;GJO+2*Q?AXqgxCa^QLnx$k}E#L*W*u`1WPb
z7ch8eYL?&I7_@j7Uw-)9WeZN7zIR&Y)ia~&tZloxDzcv$#O;q^6Nqn9d8BlwKvf_|
zsW6za+n{)E>d_7JPMh6m47kv$<B+Kn^Xl$ZBe|2xixj$JG+Wn8-aa+?`6_NL<`;!8
z-Z3QgonlZ?_@MS|Rz{S;qJ3|-D#@+=@XE-fD=#T+<|PZ&KbH?(D4M&RLESieO~BQ;
z7v^%Vany`D%o_GQ<HT*h2&0qtRA;92s?FIw*C8>DV_C)eM{fCNE8p+^|DNT~tu@}9
z?%Olxq%vG6_;Ik)*ft^B^xm_#oKn@d)-oz`U(IA%Be?R#my1ESG+roA_O)8Nc%|Qj
z=`SW8*XwYa*8jVrqFaKYQ|6K0f0l;zQ@HE){XdsI$A-;e&xT{wfzcmSHlDZC@^|i>
zxX7uPsnB&z@V$#?H}5dtc2V+$nVaB!2cZzVnWYnIo+*p|E=jlkw57@1e)IebAExjB
zbBBe2<;TVPX=&W^Wf(Qq3!FMCu!TYHY=?(V!1;hBsdM`@yRrg{CB7WlCi`CVg5l}~
zd<-ThtQJo3&wDEEb>>?0yl;2cq~&loB$v2Zi{48rF#N&5*Y$161CDk!P78+q1P+G(
zqW{;o)vY`lu&mv2k&Z($&!Vu*Wy@TgO0|NWHwg;6E@znB>t`puSZRfW1jE7|+&)uu
z?*A@nSN!#It?kyvyIP;h?8WL9u;kdNYWZ94`S?MjjlrYuQJ%*FHq9=NX~Jg~|B5)^
zu2`7d!4#kQNyO^X++#trxqW`9oaDcAWp!!tCY610S6BTwahl08;3~^2X8BkbmEIqQ
zsumxGmosNf>f0>B#1|Vlg|*^bAeVzr;EuEtm%a!#Eo)q$<u<L^G1onNS>vM<tA0$o
zH=}bd(+Sc1S7|(lw+1Nb=`5df#)4aV)#hoJXC^BID>n!qQET3i5UO2wWyTDL7YlA^
z%!q3dzc^bZ-TuEt<0-~VH=9ehJzAo^^@2{ptEo9}{MGjry*yZPboGM;n^+jR7R<eM
z=<<mdB1Sf{-Cm_h8zi~T_qzLP$<1DTe3{kPmA*e^qgGXI=-Cmtdh3P^U&B|SM;oSU
zmY?kLeyn066~d-uvh`*3_gTDu4{}<1F6LU_5xm^=&jQw}r>m1z3O2+&Ji4l>Hke04
ztDAAlfelBZ)}$R2Y{(Z1UDx(mCslj)@w2n8Ic532$qe5;;mW3OTMG+ybJC@SZ(jPg
zZLO|uUioSM+n>H|{}rIEf7|QMBdPB@PWY}X`YOW8IOWmK3%%<~mV4iQ6%{UWIH9F%
z`{}#ys=n`jz`MTUxc9wJv%c?n;mg0i>iX$>-*$c9`=M7~2)Z2#+)RvM^kPV4SPH5m
z9quEo)9*dByu@p**Wzny%5EPi+Mlr2+(*y&__Hm)+T(T~e7oI7dj9S8-}h`?_g?;I
zU1LsDi$_CiWqU_iS9eiwU*3d?S$31Bq)waBIBRz8+<BeT7sf1DQf$YxynGdWZjsEJ
zL*KpwEgSj#<?FZaKaiJ=Y(QP7FO_6`DqJM^lnLj-4xh)zx^~*s#i$jfY?`FjztAT#
zN7Y-?vhGR8&r?sm)z_w7`;(D*X6XVMg}MV1JU>r4J1?Z+Uxz`+@{7G9-fFy3jhYvi
zJBNh@MqOPM?C-v|;O(s~FP6>oFzs4;>+0%AuZ)R7F}t^{jSer=?%Nt&78<uJG%-T=
z(kXq9nIVZB0yc~;4aZvBHD$SynyxY`u<YSo_Qkz{!AaRiV8PEBmpGZ(I5zMoyFW={
za!3&~Q25e+{YcDtmRnt0jBg1CJa&6Ft0dEZ_SKrd(6znrNNZ+T1&*|nNRc-G!cqgT
zwNdMDyfQicwrc-L-3lK)>!Z)M?COczegC>yjo<WZ?<<zroUecXyCJQ<u_eB_wIiav
zvnQ~-cY;s<#3}BRr_QjSK6A?KITM`hP?wahT)1KLmaW^iZ{D;6blvOnUHcCmKC<TE
z(Gw>RYucYWcYY7={L3D~S3sL9Zi6O-QLcM^`!1H{edEVZ_Of5|n11A|#WT2ZEqc-X
zC{e0kkwK^;^1@R&^Y%ElX`C7FqwUoN7*}b|=uMi|<E-*7dD2Ga6N+4heJ+nax_78)
z_Q%AmWO=k-S%3bWB`aH4{r{WlE<VCi{Aqchw)O55hoCPn_?cK-q82{ivg+#Uh|O7d
zPi<X&eSN~=E?MtwIcoB0vmK&OZ(DnNd%@#VbG^5(ySuyM^Q*m6x2?awzk!)s&S%Gl
zhle|awd2n0*!cMP1ZD4eK07x(Jw3xX``($Io1f>1)kSdFRy@c!DCY2|L2=fX`&aCh
zHrV}*DrLF3Hv9NK+uK_sZ)~r8?#FFok#{S#Tl)Rq+uI5so;WJj-nhG?_sO<Ijs<p%
zE)DOlpFEVto5b{vQGw+LANOzf28PwjJ{uB~ZL6;ev+)Qd$hEb8NaJL1s$$|1xX&Nd
z`}KatN?sL*rp%iL2UvbG{+Pwff6YCjWPa(3-iPf9Z5od{RO(u%X|yc7+SAprutKT3
zZs(7rZvAr-$-QRFR3B?-f7`0uuQBVZ@&tn}Q<aISyqPW&6J#U3CaJIcp*+P|MpLEF
z|J9Er-FCBrR3}GGQkpUS*$wlSnW-$1eXU<Erq6A1*`k>~+hsv#Xhrce&*%JNS*^?G
zHSk@09(tWIOJi<xpCPlzs!(VO1$X(jF-~BRWpH3%V0+>)`+{1hOxuYiLY5h9O8Yz(
zc&?3F&pcn>T;Qi#@0>Cpz1hb>%eQBxv_7}E$tLWgEGVdBwBh7=OBcpKVM{>;g^Gas
zWPd^M67IkxK_-L9o<KY1iu5v}<{rz^Y{9yeBs<M1OL&EnR<qk}5sDI;)uW&}F?sue
zsOht#m}e%(9b`0EJ=>DqKp|?&w#?QeQ3|~6tIU*mSKi3h>@E+y^eCfpgF*G3mr>^@
z@Cqk9_>gSI^xM*s>ERD1E*THBVg>8=AE9Ug#Ik$HT8&gt);uuZ74I^<tsJcT2&~nx
zW5QUg(ZhtiR>K8eo>s!wY81oPYP3SvYHT|VS*y_wS*vjax>jQWc&)}<_*#vd{Xc&H
zsrvBu>=#BEj}2${HyvY9iaGIK!8w6T-mB+%fztX8G2>aQS6mc3)~B$$kVo^i^2y0p
z+*U0rT<54XStHpj*wg#iW}bqeJyT8^KehcI&3ETaN84wiGxIzeFJ4Jj^AEPt;q^Tr
zykLT_Ir{>!qz}of<}CI+{4Po=J7Xoc^s^;rHM!pMZ%BH4Nl98WLyn{4&9{dPFBrqE
zB|jYdIIDfV^o}Co{flO|8!QyhI`eOWqUD4*v#BrFtPL*hJ!fU1xVq4D>$x<u4$;+a
zM`v70H*=l1EY7z&<n=9ktJ{^e>1OZl&&-qGCDpaVc)if8A8hC5O#0y2=V?3jvqE5w
z>B+l16~eK;-%YOun#=pYs$BQJX`TD2eaBQ&F6BS?e`3MprPp8EeR;Zl#{T{P|1+>@
zJZNAM%XrYpp|&ES;r@*29SH>s%1`j@3N4aSw>z@!z6*ERi~o?U*{1aOh+nFx*rvPu
zZ;md!r=ntK@~Fq;TE^l=-dR7`TXWY`xOdg2T=R@tv{K?kcfNq6va`9_%O{iNpH+0Q
zUN#I>l|3ftv{X9$kYS5_^uL3*<@y*-$WO^wwlb|gXwr1fW|?)G&*zwKd#NVlDmy_`
zk+G@ZxkbUWAIk&(zqH7(`+u`?g-V*<FW<#YR;Mx+O)6v7H0KNZCAxH0QgNo)%(7p{
zmM?O1er39FT9?%FRkKcMt!Uf!>-fq|YR=iFD^FErujSk;<+o;!-lOad(|RP`xsE;C
zm~FCi+b*4r?MD{4Z7Nc@eSGtIlhs<=F7PS6<-c+%ajo2)b1XUA=kZAYXO|4<5r3EW
zWL5X;oi8p0>S@2RdU#oE`kw0c{p}}T2k*Vk^~P=AFQe10`)Ayl-Lq}!z1b|%vTF?6
zq|{S(Z_p5sdt_iF(5<ymFgN7PF{Z>lg@>4)-3w-s_ObZ<(NMA6>XV7e>O_Wpaeq#2
zI%<D(&9OA`Z$_I9O|z?v&%E65VUtwCpR9lj-Y0SlOgzJ_jLz79P+-66vwk9jb`o>#
zI^JxBn{2l>KkzZtv)nEy=MtXnV;~>x{MVTyOJzaB(FSJOZ&G>!497jJe+zAKY?hbt
zxVTIv*5}%!zBxZ0HBQ$3A>~)Rx9#N2%ZW`=asMAQnH2x&dH=9zMP1<Ca{=#G9GTs|
z;eXHRY?ZtVFY;%2yqC^-{%P`Sc47W|(pOjV?$n+nto(b?mj4M%Hv%62YkN1xd|kQh
za_u_y4aK_?YgA>~Fa0q%FE6$CS=DsDE=Fs8<^#KSB<#1nX7$Yf$d8B0#ruNx@4mev
zA$;$F(4O)otLH6zX1?{(*Sv(D*-<jT%6tC*RjO@1CH=cdecO)4ca2HTGoQb>us1Hp
zxxRPtg0!qe$D^zP4Y?N-e!Hw_V_l$=_a#~CnMZ}=9ADjxRl$irc7=<GCM~Kd&RED9
z&vDpP$G2Vou`FNsaTB((0~J0g&3|u|S>I3mAmDJQS*Y^kQR};JT7yfX4ZbZsY_{$~
zslL_OPd`2|y7v4p)QQY_B>A$H#Z2WuZe>gJUoQ)Btv_!#3T7;J=Qz=0v@5gU-&k6#
zuAoWSf_LJYV&`KYPUw4GP|(U^NL6{ag4=x(`y`ITD*vob@&s||PhfIM)lyz*7?$TW
zrK3RAYL<qZ+qq3ydwi6X<=fg4w2n{TKWB#F;|1PP28RSs-<eXs=;yA?qQ^7SJ(ihm
zKY2DjX!7K{JnF)`zMKt>+&rh{z*FzG&U0BNo9C9LsM{?3c&@U_XWlm+4!c^#Mvga`
zWxvlX|If6mo6+R}yWoe3zc{omBwYy>74~T4S5uhJW3*-A;ff3`hYd{f4Gv7gH~KVx
zE)48BwrI(60S2B60*%v_F|hp?oWY=zS{yj}*CC%rZ=Sg`H(cP1P+(GEaP(H5aCwo`
zSI+#ED}7g=RLe41uv93cfj{hlD7Qk$(*J*a7fgGlx%Akh<@N?I9KT<d5AaZ6c=CpK
z?zL0b_zJ(yife84a#Rd4S)ynk#yY*_%B^ereuX;ZyI!%JpV-Leaeyc7!$HOxg;35X
z?o7-PlQ#YHx_OFi+v?_8HjW?%sZCbbHiqY}+MwlqYg^nmDUGS;7!m|-{_*&-d1qr|
zsH^qOOSj7WmTz^-T3XB?@xyatPpTkC!h_4Z_1t;4`@Wl1blXM1=IizfQHJ#HnIX@j
z#8qb7zKD+Mx^Q3V`;P0p?`@P0L~<TrSmsdcbh`ZL>3i)W+ZaF0WpI^d;CkG&eeaLE
z9)c@eSblq%?PpkbJmIm_1Eyf-Eh&4~H;VIwA29lH@RNc-i~1Wr_TU);&`Abxdje9e
zMuV$Wd8Z+@1oB6@(9b`QKm7gsjZvoKt^C0%CVs7&w1UJvEquyS*&2niN4g}c14W)J
z^gZq=FJ8rA@bJRX9*x{wAJ6Uv7CyDeQ!eJkGrVVH$ISX!ylL6_|H0b6XMdP|x#Vlc
zsPg8^<<HB5106j@-<n;$bkUT33RBjvEvuKUC@I>o^W$;XIn3>B8w7VBb6dtxazW_T
zin4Q8<t-IFW+*r`M4MWwu_$<!oo(Xeuj7&U)3Eyb@u>$M9pwCZ;p!S8qx7-`X$>4_
z^&QuEN;R}S<LuL3?WZEi$7nj|dcd;JyRNj#GnqA>(B)uQxVqckT0-a6QWo~w$wd`Y
zz7#hz@Jg+p=eN>SZbyyRu9d%(UDr>tP`vT*oos)ZUHR_p*v01CX05p~SuTC@tX;JZ
z*Hq666#jSrCGz_30f)5Crz!_??Nz=u@qGFEJVEj2%py5+;Y$bS%l&7~kja>(IOG46
z>Z~i@A9R$u+&GpqWr0RV*ZK_=$NltnO?((+?wjzqSNO`;L}{f-FO+4}xHdJ&+*o-~
zwtMSa!xUKs5i|G69Wp=NCgtcHZObokIC-q6E%n<8X=}3|k7s=2I25a5crP$TI(^;6
zXVUpflb%(Gb0sc`)!)eYAm}&i3%42BUp&-iI*KJt3$4A7(7tGo!78^l)td(r!elzG
z-DG5Cl6tgY&bh!93QsQzF4y0B_UGXh6PC0`GJj4zu!@COhT%b6R>rU91#>6;SShP9
z>(wl|eTM`WM=le}j#OB&DsfGH<+_6h*2r8jb!M2Kdd(r0^PGCxx;yJOzLv7waMXRr
zqz-BJow+l#|F`d|TCkgQckvB|^}CB7+{&%Le^0w>@2{Zg?^Sbnr}-YpR(f>!Acy*z
z4~Ka4bsP^1xa)j8A`+hS@u)=lnvch1%GYeL`v1+k{kX8b&!>|b%h!B5rL$e;qorcE
zO#5k$**>4oT0CF#`JDLSn*KABKj?tB6PFybWA;6H5xkvPPkrqcm4NWvuU8|Cb-rGi
zkn;BH^#uOCrq?@La=+com~Uftvwg|iZ?_Aa_n6&oJ(BzVZsvL4?+O*)-<n^mdM|t8
zev5cr$%Cf<i9a6oJnyM^RBNL5^NFTC-%q(I>FX>nJv-v_{n>(cz4GVw@pe02tXQ14
z^JT@7cUCV}Z_YdZdP}g}|J`p&uB@|uy#2A>@plJ=@9lnHz>;rs@38RuV;|2Pp1bE$
zj)}hQt@F<7kA1n(9J}}H&2oN=m)DZt{r%ye&u{zlg>mk_PcOIofBAJ}xBmZgAAZ~Y
z|7(7|-}>L5&1?3*`OB?v>fdoIMyU<SEGBmu#ZT-k5_stSaJDS7x`$zL4HIKV#{*f7
z69=bHY!*zDV3Kt6I3zUdLyLybLay)=hs1V$XbspfiB0v!K`FJIHkOSG`S{xoH@*pI
zw`K8ooAuRs4(mqwEt{`=?ULB4{H(d`#xF+U*)NV%UGQTt2xu;Mc+gznTi6h~<<aX0
zS0y#;1RE2V9G9qMUiWlvVREL(;ujk(Gnl3r3mW7|9FUflIIjF_L1`^dO8to&ZjMq#
z6Dm}mD2ksv;b!$os(wwglDwy9r;kwo)F&>`T|(e_n@x<J41(av+A4?n7t$5Q+D|NT
z$gorcP1dH>I4u>-x_s(L+Ujd7^qsC*txx_`K3in<=?4pc@3lMsGHs{$H&?yg$p%a{
z!U~M7^)5jn3c~Ts3QT@UpxIhMVWvqLpxN3!1F=qLCWVPi%roqk`b_ej=rlWK8ME-b
zb^c3c&)Hg(4w<0=Pm5JEdNFW<XNo*QcQi~9=scDjxHCm<s%KM+agX0>C(W%ZkN(<q
zC;P|KSP#9pV>f3{wAi!xzya>mUy~NJIbXB!P~q?u7SfmYwX^gn^LOv*@`IQTp8siP
z^kQHIn=a=t|AM-tQ18*ipdB_^6E7^EBDvIW?lqmV+i${lo`78TpaYuMYG?Ff5C?17
z1)4S0k*b}v_|uFStJbs6jkHq3mTR7T$}!QWhr9EK!ab40QOOR6CN2<k-Si{yjFpP9
zwW0nuA;}~T&lDLW=R}$8XlI60PnJgK6ut(b5+{>PPh%w^KBt<3*myh1x$(X;^_?cP
z+I6i-^>FH)W;fYsYDr4B@3Ods&XK}3O9E$#uWfVc%9tLwb%*oRl+^*3YlRA2B9rD{
zcaF_D?VLUF!I^t*Q`fz)n|ix+o=Zshmv3P|T)+PM^Fs()ZGyvhE_@QW3gjJ>`DaZ>
zm#LdxPub~fRXo`tp=dG}yHaP=Ax1~etafjKg#0OX9Y-8(Jea(AviMyJYJ>{1yM)BO
z3S@*QP7-GJ;?9bUGtLZ)v#ZN>W@c}3m*majW!KCSuCOy^%v?Ejy|bmIYploaUE$k8
zAQ1wt#aA+VQF<i@*qrr@UJTseSOQP0PZ8+1Q!ZK&qc-=@v!Jdea%){*1kaew!X$jX
zOhI$Dx|`EaCLtCVK4q6jD~wL{uZr4q(c8i(lsmOH+*nCSIMj|^NWap~m_5TzPBWE{
zeY&`pTyLrjpLvL-rB77E@_?0rNM6_p57APL5QWa@zu4l#lrTNSLcsG}I{TCfY@AG)
zOZk-o`PHBIwiMP0q^EHR<p@c;mK5a37_|!(a98#gNH)6E2sMEml4K`YqF*GbnaRFX
zNTFyxds=4QYG+H!n81K-(Z1WfkX&+<(ThPI90*T9F42+dcj7EMDWf$z;IXmSSKrka
zw5P4StF${Va|frKb!~U2wlOD5-l4|oq%&KYg)1(JPp}9QYScI5ZEWN<a%NU)6OvJ=
zt`*{CR%mTxRG3s^$1+2Ysa8fhtVT$@(~hT+&zXI>lR%xzdd8)-Yn_aHIGh<atQO*T
znYY$!hfBj=r~Tq{doP?jzS;TIz76wagm2#wX5N0q>DrkM+>I-fPFxi_ZFkmg_nY`-
zJ0E>|a?Wmje;51V%U^4HirG)Qw|VpOF-&q`PuNt=^7$b5ffpCH2c^|KIT5(T$E`oj
zp-)iK%?UEZ!UxKukKs{}2=X{eqP9#8t7YMI>f*`RdGxTj*BM6@;l>AMqTcuN^$P_A
zJY^agUd)oxo>&{5;?kJVQdiT_(B)byY-eT^Zj#Si9?nxMB*PKzWM<hM61XUA2{gFD
zS?N8a7lR-;xFJhReyJRLBCyiOX!cR?Bz@<ltg>CLcDj=rZafv?bD30fE73*hnu23O
zZmY+Q!=6>msY~Qtj59bQ@`Y+#${1UPWQ<(9BDkw32z7f)HoMdbwS=$>>8IF9mg$E{
zYG$*q5>g0T!k&@cu)*2V(l>Tjc*tJ&{m>bBa31*2=*1uncF!5;z`bjyz{wn~*%uxg
zd;Nt(e~QPx1kdD6Z<|~*KCos_v+0n#B_5c&zjN~xm4NS+cioEkoSB8ooq2?r!|LMO
z?Io3jQtSmLyD|u6m$@kLCK)+To8mlkc5h<V!bQ_vmi5&0ZsM&H;*(yp#D4vpxmDRy
z*Djs4q0fyae#hb&NA|jKA3MG7?23MSMj@GnMKza~*SCua$2Z%v3+eB$XP$I_W#Y?@
zcp3KjZ;!rDUfr^_I&OJ%+l>v1sh$ohQG9BKD+&^wHKAn}*n^Txu(dM-zJNt_@HoYg
z$%}yp9PQvx`GRF_g;AwQdJLy;ktUOh{z)gLk9>-g4hX)JSf@H$xpA+coJy&?v1Xy2
zq*AV%Q<1(=dTLi&2S)*izjJ*{?{p`g93kOwm*k2?Ga7uH+dG%p6-`*yEHrJU9XBtZ
zQDm4uQUPSc<i)@Tc1kWNAIf-jc|0_X1TD5&WL!0;Q{~2*<ON?MH!j+6Eqt$E8#jko
z;IujIo2ML6yjgSqaPt$TiFdoJYU0vdB#TO#^D=lN_;ZCcHNzv)`y-1LV#~$EJaQ|1
zI~N2k@|nMEsb{eN>J@>p>r*zSAi2Pk$%}yt>;h2p!D5O)Ke+kuYm(23pso_Twa1Pg
zc`D7q#GmXSw7~P6@J1Jvoh(v`_h<No>`y7(c_dKw^XIzS>ZW?{#)jrfzmTrLhzKOp
zgP34#f!!egVYCIpRZXq$6ivLJWMa<AqP9J0S&d(FE%U?_y@w5LES7VP8HAtlF)=Zg
zO4}K03i0VRYnFQobh)q#G1~DIw<XOG;&-X%vy*Jdi>)tNAtdfJrJ**UUPgHH7UA`F
z!n`HCdLG;}gPMyL3K<u1gtx5roKoh@%sy|&CA%p{7VQ$^W$zRcwp-4}Xi_}S*O;;D
z)^_2$tIG48EiJt)nU;P`{FxXR^EXlmI@Jd*!7`X&wPrTRKUiwb%hPAFFinoW;x6EM
zPKZy*(%Vx;&ryNZ%jn$ftY>co()ly^n0=gtc{6zRqMeG;_`01Lg~a`Z`JEg3g;;7B
zP12{k3FoDYmv&n+)g=c+w5*L1f`q3msN61MqETZHTwH8r>|{`8kYHe7>je1@X_I8e
zrAM0smijba=n9Q;u#5P5%e1am&~ST<jr*l!vx|SjCg1#06*KSp`qQ;_<w1>24GE<M
zE>W?0&_#)pdm_@46od<y6_}a>((M=-6DKh(s7L@cbmtg|O;2S~n9sz#+-^(ng0T5c
zD~sHA3a{OJWb?{ZN7Bk6eh1fCCmFpMHZg>Q$1l(hfw}TxcGUVCYszM?E!zKJLq*J&
zN#|c|*|jHc_x;!%HGcN9UjHyq_kXG%tXb#P(3I2K-Vs*b+0*M`C*~~O=f|C>7okwu
zJ!Ni&kf#u{=Nw<AQt^52yzY#dOIK}l;w#y(siwMj+x9(qyZ2@Yds<p%=zAVt5;*z5
z0Xfg}KKpymoZWZLjm6{YZNGI>Zn<3E-gqPN@w1oVFQ!;7fA##sr-V13zn%L2Gx+PT
zzkmKRFcUc+g6lZ6Rb45Hlg`~ReqZ%ZCfQNAN8YKuN%NQTp^HnrSN-@AJ~@+Rxks(m
zN2Ab8q1EB@v$iUKbq`<fcA)L7m)EN3Ev{GAwMHF#8@<En$vIi;C9gyFhs3|S>wQ!&
zVNXJ0g6b!~IS&tKtUV;Kpn|D`VVd;!TAoPF%ZnA%5@Z>i7~(h2vHqX(OSxh7DJGxE
zu79sz2v{b}#v`C0)y8_ZFY~{wT*Xobfu*cHL4TNkq-{R5xccwi%`bM}=-*Lv%sa)Y
zftlSPUEFVu^~C!dQ`6=9q;~!My!`dF{Qq@#|NQ#>?(zBk_dOvE6mU{BX6j^^&tL|M
zY_z1fq69oWyQT~@J^KK<?raO*qZphOgnLnrVwgRrSHVt!nQ8HorOTGDSh)(e?rbr0
z59o-|UAy<J?%jLf;Gx62_8&QZ;^dKIr_P=`zwXS1%U8}{x_aa0!Rxo~-rIEN{-eh$
z9zJ>g_}Kvkg*9(qd|2{o1-sC<Z!&y~ma!{+7vj5j(!21zD+43Te@&NwE(P{ro<Fe?
zq3`4O)iNn)Ou3-Y;1JBIZgS@bf1}$Zp7^uYp@oY*qW*d86A@@gX=qVVT_W>TV3EuJ
zF3b3NQ!2X-?Co4qut;W?z%{SBZ)z=BKOGJ<&5&jHSy1So;=(Dj#Lwg4!^UfFin2Q;
zer~uDzC?5>--1~e?=|d>-aYG4RsQpv8w0P-+v8nvAZn^{Z0Mbn;VSX$%d)&G9v)iJ
z(!9z~&hF~vxBiR<N(T~TwytYAYw|Ww?d#S?`xDDercdg9ow@Sp5*7A{2L7)rj_py6
z`Cxlnu5eyLEtj|f=t$cc!SQBqcNgYWs~r?tZrk-+=k}5U=Bu0s<Z^<aGS;zHGbDe!
zywYm(KTF4^eop;E$;<oh)m%EMw`6)m`LVsn&ow^aIl+~u;GuSqdDp@u$&{~uKQ~qX
zS*UbhBcGGu{~@jgF=ma;p_S?fS{5(3u~74#VXJ@B#w|-OI0}kAl`l4W_2ph6hwAg2
zMG6NL4ipQDL_T4CJELO}!=sN|g&RLie6*<FPjiP?pUmDV_bQj>WS(N-y~Cl}FU@tJ
z!B)7D;cl_;69GnRw^=WqhRd)dJWtjU(^zU7dNpmSR`<qauL7Bz@L5G3y)#dF)-J2?
zpJ-t6fSE_wX8Pgc1*##jnS6O6FZvezl6+jZ;z49r%IZoJd549YRF-9)Gkrcs(Ai5s
zIBUha(o2kcK1nTO>D;>Fx$cAB?<tz$E5#0UICrYdv}67w^=3n}T<Y`nG8~*<EY3oO
zEBV*49$OPPP4(4_qG~tJ8>uQb(>|wbJz8kg5cGdf%hG}sGb6lO^-LKKFTF4Kpqbh3
zM!3P=uYJoE7QcKp`|`$pd%XEqt~4lU2x6Qn^w#$0k7etR?Vol19D|aFRZFb~x8T7k
zvYaj#vf^(E&)uLAD#>pke8Av<fRf0YVg{#sZ`NJd`{Q>fKa;SI<AjTXy8TD|b_>0o
zeUIzFMfX5)=~69~^IlJiCDM4mUR!GtzKO-4Ma=PrU$*ZzO$8H$a(BiPy<2bOzb<-U
z-SkYi;dUMSIj#py;&ojyZR&R3x(iAk{eYbKGr2|xa?TpKR&8bgox9Qv%IpW?{qRos
zp5<iSH<%`TfBgLQ<HPTN{}~S7<p#}kr~Kv9iaGHi^iZ3Cve%g}1)zg2*+Zv1eH4AX
zM}a?&r&6!spoofpuaD&U6gz1h&$T_8=T*<nu1K4-=;F%;+5hu%9RwcTbkC4o(AKlc
zF)G7JaYpGBw<f91#+B^eoUe3lFw8vb8J`-<&=%wu>Bs$O$=hwF=NL>A-|x|VdZ72R
zRk`=mt(&Kxzq4Z^!~Y-F6a4O)6|<{;TkZKu`uGH~+l~V5Mq9TnJhtlPtJkfwHkX?G
zf6z1eTB7xW`%9K3hx)zln4!6F%b#WM_4w*?jtkE5{WAY*L(OZ(Jl`F=ZY=%XqsrI4
z-S^(fOeOKBH>1D4*vK%WNv~sz^!p3TmQU*Gt&zFA>caJ#0aXm2T|(|2S+6GdyWsb<
zE03>-MTnK#JllHkO4(7J4{~x5e}x|yvsne-S9q}2C_zT}(#8d9qPrYJG_QZ0_`gwR
zj_VB1j@k~6<E_na)sHu4r|fWRw?FVgDXHp!M@MhL0}hU^$_rxd?FL;I$!gAJ7Wetz
zC>p6qFZt+kcGB^$%O6b%S$8;TYDAjlnW<4_FH?16>NKCtSlQzFY-UDLQrfJXZJH-%
z<sH*p?iO?|^ZDEv2Rfh6t2wkVeSX8YpXm!)Zdqn5?ATVBv8ZR#&Wyzq%6?`nnG$4~
zxpc;@^2}v(9&O27zF^sx%oR(LOtMz4I24w?YE4~b*6IyeTeH?|S@k1p?T%~3+3WV~
z+MK=qz`W1d8;&#?=WINYR-CixOq^Nv<_le4a<*Jy+LE*NMxJHvwmavFbGJWOB>Zm2
z&l>M{J6F%>{{L>*GJ%gAyFc_D?oj@C?e^I{=@S;d-}mR+>-YN^*mXV}U=hzT5J|hS
z`okd}^EV$bN2cF=Jg(5L^XY`j^c?ue^qWto4UX%4K4Wq{2Rbrs^BwJ=%id>=EB6%4
zx@2h0S-Mg_anXH+aR1oXj6xn0+^<C$uX<cQf#bkd7CWX*i8pGSVmoifF8|wpJI9^d
z{1%f#SoyY~`-SD#8@vS$Y|DGGcl+F57uR0A*=TOyDA*o;t6b^5rNfb%%nb}pf@>Ta
zuJ=z&xBhXLL*`%?!@SQEt6t1pch0><cH+90*I79h|1Dpi<qJ4+bE&$cwS3#-ea~;z
z39LW%u27rt_~k?Exm`aC+B4c7VXCNYcsarU{RalYB_Az>ZrR&7a@qM@a1eTE&2xy$
zu0dhPyE)6x8*mu>dEm_Q!<)gGMVLk3e%Cwh1Ao;fG;?I|)eHWJ-^<sqU&Q19yY`F&
ze~SwC%O7wk<Z21~zT>*Be8q?6Z^AKbH@7mGG$=4-{8+%R@q(GXPaxJZqk-kj1cUh{
zN3-oG9C#bop(C)PfH#hNkyOA5=Mr89wob=R0cM8g7SX~OOA7{`o}|Mvm--w0ZNxdG
z5**BU4mP%&PTE{E<A9>thVCSm1QwYU`~NO9?0wRe$o$NL@$+0B{=OGRPJC?w$9!2B
z!7F0GO<x_R$qdUF48aBDJd}edF<L`z&(48Q0tT<b_gjCv_~h1v^Y5VtuD7<ecXYO9
zxn*`i4yI~Pcg<jCL_Y_AHZ#)<OJ-qv@M5(c(9=r}96YpHnAs(riSh7h@aZMH8IN0@
zya-yXcJ8wCiBq>9K6-rnuG7_PPhP!#v;UdxiwAE%e|h`<<JX_R9)7R>^qYZM@AY)Q
z1qYk=aQt&Vv0>q%HUU|=&*C}`&D|2>=Qee0Y&^y&D}AC#z(}PdN=5q4t``Z(C+pe0
zs;;;`UbJ?Kk#s|c=I155|97(17V2bbFZYTPPVqZ%Q+VmwMZ8h}B%~&Z`On<Jkub%o
zJM-jR%UUkhRe`rIuarn{yrK2_cqq%}OXpTuW;fiOrS+C?N98mz@9FLr?Vj!|zZM-G
zUV80P_xJX=?c&`0D$ySoMa(OxyyulweDLVDofUQ`rWU1!9GI@3w$EbMw3z*Y`qM;X
zyUjMYAF$|ps`I+^?ehB4oBKkgR)yU4uy@Y8a4ReR-04Ez_<J=HdF9hG3rlpQ#ZSzX
zJsqTe*Zf`P!KCf|@po$VJ{;IT^Z0W&%kukM_7u<MJ$ZF!P0Z1qW%H_@$(r8fpLg(j
zT*1fC=`-?^E1f6Sdi|XsulIE36@|(VGt2+S_~pvZSWuR(xP4)LXlRIh*&oqwv61?>
zj2hC^g~IRg9}GM?DTV!5$K!Nip97bjE?=y;-Q~1$+5O(r2UDZ!*)Ls^2vIS6@I;qg
zDl??rb<?#orJh=9bA9!$9J(2}U}pP_={pKoCKtVEJ*H+@^zbQXn&~?8nJtcAlOE}2
zCx-M)kT`f$(!x#3Y`Jcuo9L6!(5|g%aT^`F6q+}ya6DZ!>t*Wnu9~jtr{_yN3sJ3~
z9F{H>IPuiX;6#>dMoSm{zxXRO&*Rt3xq2sCmINm4*RxV<Ddf97k@-IhhiFEu+1KC|
zg09&DGcJXB^KZSDwwiC-Ew0PX+v}cj=@}^1Sg+Ij9-_SD)y`c967+U&UvgW0&%Qn0
z@7=DPseZ5b?cQ%b8_PAj*T>s`VQ@aU`OEFM`_qpYZP0r!*J!Zg=pLm8wbdzWHXh@=
z9OQD)w!`4+F_qOu407ui1fM*mGr#1+b|;Y<hBNp54tzS>7;~vZ&f<H|2?izMMuW5V
z4G%t_&3;mN{F0BcZo_e>Db`<fm`rlN%BH6LJ#v}zu+8Q&g>2n#H{z}+ec@MX_x&b<
zJOF3FG@W4)gDyDZ&M&y}Iud+=MUK_{3!sea*X_LU;wjL@*9BXbho*sVO2`9eTsxnC
z+xB<Xp=R7Fd$FEg=8}n%KsP01O^6nrK4<Q{`BQ{vEm*R2*%D#*%H?a;t}9&GJA3_>
zty?y(-nMJ^f*qUp95^^>-=U+&@{b%pb=vvlne#`_UAVma(v|D$uid!4?AD$8^X@%(
zJoV9&=OxcxygspN|C<jR-hKR1@apT2??1l$`u*YWziW&<6?qB=3)%SVyjK)RA8xxY
z=QKyH@X_WjvFS%Qeb8HcAW%-4v*e0l0+)%>$=o2;laF^zs}MOk$MSOTiOD9#T1g?t
z{A@KCourn!JpbG`W3k7?KMaEED}&WiHi=YvUG18)%75{$9OIJLJJvmb4z_^%fRMn`
zfd-z&8%gB7M^lA5uY&u4t8Xkx_0gLR4?K(L$Ty8_KlY#mUWJ0Ky_-Tfq|}=_ZTgIv
zv!?gCG0%n^$2WQYyk($1;9_R?`Rg`s*}87S%5A%L@0q?sY}4LDhxhJ3c;v*%HK0D=
zdbb1TFJGB<=IV``&ew0<y?p21!;=plJw1By__J5rp1gjy_U-#mOFw@8w&3gcU;AGC
z{x|#QKh8Zu1q%)~v9T)oyvSE{uH}=z)vXaIceLxBUQ)>N!sMNOa)%$jn)vQvSMx?E
zxfGY6rw$>yq4RQ1T$*^g-b`BY*2&4wS#*8atGHa3WN=K9FPfwkJ1g_RrRAReQh%Mc
zW^M5a+pO2QWNWr4_l!MRdpo}*BK4wmn5Hu<V=#t>poh-Cq7%sXuFpJ{^AVi<3_`U<
zW}kmy5;gm`@4XM86Xb8dhlJpLcemV>7I3}M)!oyZ;vo#VsAKX(mkHqH*FDpD_JXC$
zmQP=lYPo8~y7e0(*Dl$(b=!)~Yqsy+Gk2Be+P#MkckJJC<iyEMvyPuSck<Y-^OsLt
zJb2~C)@wKKY`=Z?!TS3TpDca+^u?U#FW<~KbLs8JzSp0=wtxBdGwR2$zs`UD{bJ;q
zk*{#DijDu6_lgO!hudBh#eP;_kaSS@17Fx34aGx^trF_5Zfhhsw8#m%6iw!s_=H8!
zR?Q^i_@;%fj0y=~7!(x`F#Kl}bl!GnMli!E4ttdY9-K@u8+t@MAHC@;a_ZwyaB#VC
z>+Q<3z3khT&EQOCIwhk~KPC10v;N!L^Y0$`dGWAH&@QK{F9uo*8Sm_`W=aiow&-Dy
zaM;T9cA|K0zX&6Xh@ErBrc`YvsRIt(-;N(=wpHPnXz-v&!gX1&F{9!l#^hs*ow*OL
zy2W+GxvKh!1Vb`I+zg=<c88kTvF~Kq6HMMRN^NPG!^oC;+81$xe08Y+?}niBiVL;|
zzJGCfb^Q5#dw;)E2%2+cx2S5z_aC2M-#>4^J512?;D#v`e?>tnDZ|=hn0fXcd{D{h
zrtz@l)x;JTSCO<858GtaBp4yxEpWbqv?jpEToM{v0ktMjx?2_IQgeM)vo?VC^ubd_
zUsrazTY7yzIA6`~wzqVh!pw*{w!*Z)o_SvC?mc@fcew0lVw}JC*ztHv#)I~UPn^FH
zdD{8V<%`#E_+7KJY`A^%!9(ZUch5a~{_x4Y7jJIdKKtzLr{nKmfBwGb>&G8|5`W!~
z*>yAE(%Ojq>HilTU}Vf{n$7Nd@5c=0!j4(ou4!uoH(gjH%`P0H5ZT<oanwR|wn~lA
z@+A{kb=#ku`mFr)h`dB+M#y2oKJWjQdYuREybx49rLH}9f(S#?SvGl|8$1k##gF}B
zn9}kxZY^8IGugseDE3t7*~_L1m%^TUsxZu+l6t+ub@sM*;kjyWHA5#~(mii_KP_&8
z;MBDfcDv4(+o>__?W}#$*EPhHBnsQigvDmF{!ZRBWr?rc>6qXj?2i_4c+KzI5m|gr
zF}(Vk%-`*%S+`Qd@4q>7vsmPUkIU(Qjt;(Q%15up{55P`D0ou&@GF_q+h6qG-8VV@
zy`@Fvg(Gw1IeyJ8k1yDFS7w%KWy*`MTeIdgm*1`U{rJm;g~FPDFYV~RvF2miU8(gC
zQzynPJi76And^@4lj0AZd^X#i^`E<}jF8yD`+1_SGyXqp=y7DcBP9EC!kt3b40G9p
zy{_R8Q~UNR&aZP`!J#Z&xA4cqzWGzxCkSP58eFK$esQc#(0tp9nGJvc8u(6d)~cLc
zmOsZ$xh%AYBc;^aNaJ>b9go5!0nc;aWdb+-J@Ry>Pg~{1aP~EZ2j{$!Y+E|hRxU%X
zGdpWX8*|oy=W4~78{5?<7Oh=6qkWFAtEjYUu0_j|@>9<;7Vc7Am@3r6C3?9jHzISk
z;D?2wQ+($n?zmm<bmZsZ8B?2ni3QndT~VJ@x{h%*f1%;_TT|V3EO%qrU1lXCt;kt8
zH81pG<&;Jl#T%`xlfEQQ5WOnrGH;%J*6ZA92R(kj-4VQEv--{#PN)C(?s&OvHH+oh
zlGpF{<Qf+1?fvnK;r-s9=YF5nKk`L;gVFXUMQabd{b$6Waks<hG_<?5c+zQ=Lj{XI
z9&0vX?q`q}7cx37^}4B0T4j07$rD=JWjLg7CcR<zHM#C{S<d45pYF3Z$2YPc!njx9
zuJ`!>cipd7_6Hb!y&93e)>KZRdei4?3GKROS1e6fo3AG?U;FKrow?}2n_-)Ezu!ri
z{@0l$f3ffPdo`2an%yg?zx(|`%jHD#dkwE+e?01O|78BC(Oj?cVY~9YiaV3j^~#@4
zd)~YA*@Es^OP<Qj7fWBPxc=6RhiSsS7>2WR=lyyUe!JGoj6?W|?No-Q%kQesms!7@
z_PXKAzuzBCZrdJY*!qOe+5Ck2dE;OOhDqEn<-FI|%CXK3tW~|;?q3{Md`;=!&+;k3
zHox9n|M>F?dYfk%Lq5FHK{~Ac;`Aj##g{<Uc2RM}`U)St*%Kc=d2%Li_sQ2^s{Ph?
zuiUw{_Wb?V;A=}-T2qSJI=lQjy3vMi=gvc%qKg>1MeeMW_U@l@@X%4vmf;-Xuv6#G
zRoK^`?>llO|JqsS1k{~1PyBCPN8S##FvRZduiUU-f2)-z%-`Rb%q8Vg;r7s}Ek(wz
z<%R1bm#%1?xFZ^_kKOv-@O+d0DX1dc?aDVR<k7?@UK*_RJ4$|D>U5Z?<bI8(bMlgN
zTjwgKe`1!J^2~QpV9hF*Q<u~)>$uPNn(MU{b7#$(n<)_odPEgmbZ>w*QT=#$P5X|#
z;InH_tIVC^c3oTb?dxju4_6MhFn;cRy}j_^+74Omb5fC?;tuwF{-=6KEIVF;DZyn1
zgA&8bbK&pLu^K*n&mh3WBfR&wvIE1;#jHoJRh1uVU}TCqe4^26HG{wgR-OZY7w>p}
zBO!tNqHNetmiy;^zPhGsy>$*`B@eiw05!n2FtkHs@`W~1OqO`bMy<c0Qwko0&n>Ir
z1vS8Kx#vl<Ht(qMTMuhK{BI~^%E?W3Wm0Hq?e2jL!uQ)LFimo0?wSm0y)Kww$2`$(
z$wJT|eE;$(GuLd~w0Xt4zGYi>?%LhDt#`+sgNJtR>p5`v#L0z6yN{nbe_`#?4HvIo
zOF7ee?)sf;H}kICeRT1D%I(K54n1vq`10MJ*HLfZf7$#o;`!HKE5E0H{>|X{b@L?s
z1&*G~oqw!P1k75|%B%csmYLV0qi&q7B705*dK{CNwvPKF5wyf*l7MfNOJv|uuW9nJ
zmzp&%tDK!BoBv40)9~53|AkidZai936fZ7fOJ3&Uwf?EI%j_A~R+n&2=C^3vlm*%&
z6>i<EwpP-6+nSqxX_r^UT0a%Oy}jVN7krP@-P7BN+aq;;fpfQ<@2)K`FRut*9d~xu
z*4NiJB%hw=yL;Q)+dIxS_RNZ&?RIbP)5bfpG19Y@j&yInT`RMr=!yFzZS@;>I=;L-
zGC8I`&ep2v&4sBs?`7{<Iexf%)W7}Q9_wHC-|k=UFE9H$|NZf|_t)#k??3eG-{17O
zhAV=g=7ZV{A3pmh2NIe>EjtqU6#g(cH}ea5JmeRQ(MVj_ChB%Uu}z^!V^O>0t?dgt
z)XgLwbm{c{Na`>=wL-qf^jwA#kJ+#7N<2&-EF4?y!YULwgukp%n#jnKkjNtZ!lF^Z
zGfqN5Y1)C0OWK$$JQ72>4jDR5;e4iWU?vyW!vv&8s}a*oh6N1j3=C`s4$Lpe&_qsk
zT(VJ)*Ffb*6=<H%N3VFJ{g%qJpgvPEN~#lUXl`k2ZSN>=>g?&w>F%32DQ?2#Y15}p
zpVc?BY;IK3{Mo&W7B8z`x_njD%GK*i*RJ1`zj5=nw5{8BCGL#gJ8A#ygS(GJ9zJ^F
z_=zK@PVYK<Zrg>6n=W5jcP-v^%FWx?7u<gscJtApr;naIpZ4<ATX6Z2mi2jC#@BD_
ze%gnCuRW4^al{MBQ=qK0h(Q~gm42K?>C4PT^ko+3qV#2CG)?%_AT9C#ur^l(v!$yg
zb5}U>ISNyHnR|riK(-rBwp{485Y!UixJ1~^Z0)8UJ9ll|V!3VifrE!;?%jX*_=)33
zx1T(FZo}#Gmo6{8c;)(yY1eMvx$AU$)4r+uy6-)E@a*OJ7q8x)+Ir^Qr-N@kf7|r+
z`>z#0fB#OM{i}ELM*lhc6`A<8j!Y?7c-WIyRq)SugGYzEIUXk7S>daEynmujQ;0^;
zl!<;%edfw|E>ZEW)r-H?tr;wLcGlaxM?TAomv6TUT~(9EBIW<$;DRzaN!wQ|{FGe+
z7J~~#`K3KsCvQTw8(zO4`Dy8zo0~JvdwHGSwl;d3Gji9Eo57#qIMWqyaL(J{{zJ0;
z7^Gu!M!-Zfm2dstm7zQK{M&$QdT{^$uBjeT0im%mP5yB{Y^@RP?rolNHK2a=^cgcj
zHxSO7pIw*OFrm+@C3#s-LdfdQrpAdL3qZR!Ap>HOEA4|eu3ERoby;f1n)bts_V2rJ
z@e=r0imY?J2m2$BEIH}c5|DoCcGS|l=Wo1$q>+?couOw>WZEAOzUh1V?<LFC=IbF_
zZs#}~$l9eXyx=;e=)H_(`y?^Q)mUY`drt~!a){0ji}ov${yAad>Iw46psTUe=1$P;
z-0OJKD9P}Dr^?oYTRgX{xVTupaMzjb!7=_*A4D}(cY=3sK0X-3W$0(PBCvVhD>u{C
zH#cWoZn|Yvn(AQrYR@u}8B012xMh8Qb@#Nm-rjAog=a;%cRatauR~bd?)0=N%5lxJ
zLwHVQZG3uq##+9ozs#mz-XXr%ciz;UTV7t4HeWyG*VbzZhf?ORa|V@6*{j^y#AJTT
zyY1QD%q_2XgD1UsSBaUl>z<vTpHJgk&onDW)b81Z&Dr<&UH(ycfA=vxN%81!IqzOv
zUj001oxzU}KJlC5{rB5_IXoru_oh1W-GBcxTx*N>I}s`#k^P)?#e=5KhtuU_3oF0P
zP+S~(>_Mx<tEUf|H@v<6e`?K=RE<X+vtE9lTe+^bBcVxU+l!<iHMg&4drYi0dSocH
z{dm-8qqk*Y#G0!bPbPd@U=iQ%p{9AhUxx4HlgY21tXMoLB+Qd{@*-Exr_+p&1wE7x
zYtwvImymh#>C6o=>33%2Y<n3s^XbI)XLFd>&X_p6;#no<GzT$H^||XMIOoi35$j@~
zU+bjwe7+x>l%j2$o7T#3-;*aaX7$<4I<;g@Sr^-)zpRy-^)Vk7zg#wN*{WA_b3aUZ
zxgu66QES?Qby?a|x0Y#Wtyw5|?bX@?ezR7uU;pWr<VJPY)j9JNd=4muJZ9OoVq=@<
z%rl#A^l>^dE7))^k3AX`y>{;PwCr`0ZkN6OuN$G}sjcUb7g+UfkM*+K%?z)%{gTXh
z)XSA0vHz0xhmLP~+6OlLw{y)s)Kq8n;jp;ancRJOA|2<q-0!)xUiOF6n~(LvCE5p$
z$UeXLdYxZ_Pr!bTWW@snXAIVU0bh-EUSW^V$&(NLP8b}JPhb1hpr|fu?P5ij-Cu8{
zEWf<<q|Wx3Z?{&yV_SYS=lI`3kt?CPe3eDdW4EPf%@+E0y^3AWU`>;_T)Aic_1qti
zvdvHZc-*GVXZhq&Sl-Y1b`lSrpGEk;+i5bp9dsec^t@k?3qjUwfA{P4TIPR0-)xV`
z`~UlG&!u(MCOf{r`#pI#JO9o1N5s!h`EX)+#-C4TPS5-Ed9sQA-Y*xz@1Oi~LpuNO
zx0xyL_rAZ=9^a|V#FOyv=Zod*|NVNi{r$h+ACBw)|MTT~{=b8dp5Jd*U~2gA_kVQP
ztbc43?an+54IDL>7&uNiv~fIY;OtT86}xeOE9_09&>00ojf{hQ$1=DCt}Ni#dccu?
z)(3qRnT1>n0}cuAx}c;Jvyf-zg+t=EE;M*H%;hUTaaiuxhxSF@PQ1A<oS2zDc6j(K
z5~{XvQJQt3!@FmZ$nqUW)T}l(H+?wButI}De2E`J2+v{(*Yu;>VFBE;e>+OC3O2Cq
zxY#Ss(eQuDghmF3{||b3ISw#SGhnbWd(cq+MOp6qj27#-1Ww5vi<x^axY-;l?6bFM
zP>?og<h5vI%X4WEVzNBRX5%nvvdR;YOBu(c`+~ZcWh_xJ&1_*UxYWPqkE1-RWn(y3
z&=h+E6(!M=C;T=EO=;TWpfh<xgSp<O33E#xt6O(^Yh-MkqVJ-tC413><;(hs;u}<$
znO-(9HY6|{xRRnIUC_ulrGJj}k7Yj%ejfj<>o~pS$y5GSmA)2HLQ@n@s9W5(I8(`I
z#Q92w!TO@Or}?wb3ntVkm~_85bGCIt?<pTAQ|?*rc85N)^AtR0S-{}sZN@myQ{uUy
zwC1VKvJlSAHYpzOIZpK&JzVnNv*D%rsT~1-=N8RsS6C@vIxDcqjByIbi<gFT6)u<m
zGMUFKk?GQFaJpA)>Y|NvR5?^uUQ!kLx^mfqOy8sBm)o-(m+#GCV48J{g=vQ&!()~7
z6LqiL`i&TuxCvxNc+c|e+I5v9ZS4v{gUS<;-!8B7VtC4&w2W(Q-qh+?-=&WA3Jsh$
zE^kcAbuyf+<!x`Ju(09pi@<QN$oiu0jT6qMrA=125|;Iay=ZGzG_&-XLvmu>yhk-%
z)K_|**j2(g+4dPz$j%VugsU6{u4`>7yN}1O3*%h+RY&ol)aA#&wr!29UCS!$?dupf
zZRPT%4<n}=TzzY{ow5AxleEXL+?Ga(P4YkcKbxUt^)*hP1xr`4>SsT-RzB<{UUlW{
zO2^$hTIPk7?yL8GTm14gOWD2BO|QS^T#5M*^qenZ^5!{D>fOB)uiu;A_;YTq@&4T>
zF8o#4;&b=$GnSad&Z_SRi&a-O2U|U0*l~TY!`%0=_1OowlP$Kz*&bnbbC1gNJ5Y1r
zOMLL>$_Dw4&=S{w2iclDqLkG|Pw@U|%$T|%S#5F1e8*!Ml~*OK7AoE3@cw2HEV#?n
z{l@iUhfZ%$UX_#DVRVpjv3Jpo>nnD0JpRb8@E}I$hR!qfn1sHoPYkVZ>O42|7dXot
zvboRu_){K-Z@pDMi}{zmO7WVs?n3RePfQInk89~So}YPaG4p?|na3Q8X7)(&$}W3Z
z<87>bYng>v>(u6q7ne01&(AvjW$nv3uT9V0I-L8ga6PZ>o7m5{4z1^#zbJWidbIw*
zo4yKV>*wn}i}#MYeobuK#zNh<QtHt+H<r0<TRL}F#%rtg<7q|P{Cl&@7SAs6;V@gg
z_;>D+w%-C9yUjN||NE|N|Lj})+~)4y9-EVNTKe9Xb=$vA`^(ZedH1b9ay$0jUYnPG
zUFs2|fB7=s_MFzo-|s~}*>QyPUVdD;^lb_EA1Cg{=1mgcy-zOQ;>6O*kHyk8kDu55
zJRN#3zaibPR4=~rQ1U#RHtUB^H13z5pKe!}xBSlwi~HLT%+xCh7yeu6X8wJn_qqQc
zSH8aUT*-ac;mPkxCOgk=2|r$y^IQGh9RBKiaqEBG-m3d;!|gri+50U-SZ0(xxqF5E
z>E`(l*!_PTI`2QNZMwX~?|0>CmruUkS$64K>I>#$%Wr-(KC?$kSANg_Y`f1>pYM5R
z^S|;`ciop6`g^&Y>wle}8242<rS`S@_o^G&0pB*)%bd-X|9z)A@B5zf51!Td|K9)G
z`o~Rf*^ip;pAD`4|GW_X@6&SszptYI|GII0-?#1O|GumK|N8;|{vXHv|9zVM|IZ8m
z{lBiC|MzY8|Gyvl_y2kB|NqzR|NnlR-~aFX`TzfZ|NqZ$qh7x`;HQe|woCS}LK+xX
z$Z|v&IbUd)7i7n(Vf>%{X#;nK^xx#h#0ia)jT+4-`-@A+{9Vje<F4`avhg#QdZW#a
zj1Q9dZ#13T)M${*W@yZ*aG@!^j8l0Bo2rJ4^$AY(7si?z^@3u}5gT;#OjtZ_FeC{i
zrkWU~n{rMNW!Ukd*=9v!*#t(B00xN!Hmv{#)(;H13tAH*+R{9jwlpv$>|l1t@N+P3
zsb0V&+Q5)zz#tmHC>_8l*}y2F(01r>rqqrWuODu{9qthtEUR2vYYbYqC$#2VXfB_?
zn0kXL#epI9MSHeFXWEX=3=XdN6Rpk*T5}>e1C>o)En=S~(U#)SwyJ{tUJGj$N7up4
zEqNi%O&ToQIoQh5TJ)OT|99<R@5$h1d%<?NgMH<V&ZG^k2_2nT3p%YGjP)G2xi_?y
zXs~cAbelzVIWjk`h-izoV4HuVtMmZF4Gor!7G1lYW7rwkcFyRINJ!^xXx;O*yGo#E
z%Y%+whR)InU91g#8#3C?%wRj`!JGA?*DS(hc}5R|Cfk#W&hms#HcOUr4V!=yy7?)M
zZ#_B^8T!9;bk|*($js4cT%m6}qml1K2XjS-VrHW<XQR`EN$o3I3_Y9fMlhV3(VnoO
zRb@j@@{YDlgUO`^lUX_0%?j9Vd6;m{Y)zAx7%tHF$b;Q^r>)>MX5G>jshiC2Dp)^A
z^hX@XtSn*eFAGy;jx_(_#(u&6|D0ov!5Qi4ovev7-IFr|Tr2eRB^k74PI14{q}Mh*
z{J`|$1)UrlTK{GAC0H=ncrvOSnBwBVq|z{X;fu+uS1_GA(OTCrqsx<_r*pD~!AzA0
z{mznoNjD~xSTIbAWavEE-nVmRst40m3l`=BGuQ5%Xvyp+++b{ZqbHlAZKEa&?@nf$
zl~c6@=IlPnP<(?~PGC+^2Wxx>qw-9~a*5spl5;95SdVzNAJ?3l(7<$J=j_u#Qw5(j
zNX~4Lt_<sS>G!tq?$Th0tDNZcVOpA{=c`Ba+I~!W{nAaAIWqGm^AXWjBMUZj35I8v
zo9Zg{9bU3ENOqs`XtTaBAxWZp_s-TX%L)IJ4SEwim`>f8VcW1Ef?=VPK%aHw!daQK
z{ARW<y2<SKa)MgaLWu=EFCrMVR`uNZImzAA_<bqE)}M{6w<fa+%vd&a^0Jc)oDVQe
zj$AlnMVrclMcy|T&OR|&_0()<t~OBv7Pqb?_av71doeL`>UekPi_V<z@MOzl&guC}
z^j@tDd~tJLev02+SI>-BZtNd?E50lf+}39+FzwzFFOe@9Sy59<U%5~EVw4%>uO&HI
zSi#-NfI&}#?dXpFU7l@%KRcxvmh^ee-Nnf!bZWw~$lhr;`fUqV+6FAzm@%PEvwP!-
z)}JCv=SQvdIyGfu$12-~B~v?l%U;a4_#DTWu-MXgK>@>z|JNfJrdY7dmI~Rgxnx-+
zqr!q&Cn8q4M=|Q$VqUUx@(IsHtGw3y&1gUMWA&-3_OrK`Pi3q*^J~h%ruohR^J*)n
zM!uXCsIl%`)x`9ui83J*bG??=X3cM3HL*X;sCP@>yI&38ez|S6?0A&Pw(C}tY;p6R
z6MdBoGbF9n+Ho$?jAH2f*?OXa_0NvZuA5UfX>63Z-D&l+f0e|lgbPbFPfd}jVr{y)
zGU3N+rr(Y10t`G2t1T9<&R?)$f)$JG>kUG$XQXtjouJ7gyL(l{g(dS(^w?MTsoh>|
zt!?o8)x<BSwj^{-4gc8}cw_1BTkDd$0^VfyZ&q0^+NuAIW9zq@OC!A3zdE)4f8MHo
zcMrDKS<4x`*o?9ltopUta`vjVH)cCc*fMR`l2EQb+gr?gS8Y;%&8XSU+VpxgH}|@d
z+p|trvbNr4GTOZ3&a9PglAD=6Y%>4V$Qiw|ta?Yuiw)5$HaS%9=-avB1jkNCsqJ&B
zSZ8~6ZnW6tc59`&x4xgnwwza67=CXF`aSh?6~q0V>*77TCqLQx=jHC0*;@~DZ~Mrx
zr%7ecu4>k}%<2C;*?N~w@08lhwR5r4hF$fiXYZf6Xzq<&i4RsLPhc#Im~|pz(}UZq
z?^JGjAiZUk)ut({wkQ1P4T)mVTCh5=!+4tY?3vwr`L)|rxtH)(&Z^n5XbD%_y6yuD
zt9RYd-eh)q<^Q+dGX$h}9_5;QGiZKY$!;l`WiK^7L`s%<d+fb(de8nHThmTYjo-ag
zQRfhg^?KP#{ogOA@A@@g`OUV!w`W=X++5P#xmtQ>^UoP8t=ZP^TynB%#-<%BBTwz)
zdb95z_kNx|%;geC%PYE=8yG!rwODQ5zpe6cIrl=TU58yZ%<8c`Hdpf?r_DjXGY3jK
zj@X@Q6V%x?-)c#1hpy;MAK~Ub(rda8pPu&O*X}o(Y*DY5srwvynl(S#iY>mH^(nKD
zeouF@0s~Xk3f+vu*Kg0_{kf0t_2y+Kk3GD-IZ<GhXoJ4g?W2EhEa6*oGH=h3kE?e)
ztvHqRV9s?dHsdJcsGglub(W@e^!;bLvv>ZQQw4L5-Ra)@>h`hyImetgFf2WJdVA4&
zV`i_eA4^+r>?!p*8a#Vh$DZR&e<mHfz2}$a32$k(&Nat*71n32UNPBb-39H_F*Ypo
zB___S*`a#-q@xVm#??!NwKp#2+5P#=_U7Nm4xTxsvip2$z<Ku>M-8%1PyDe@q~}<|
zn$88Y=kB|+Z`tqj$1HdB+&(Y(_O#HS3#)@B_SUSg$k{EkX6ntD^}ALt*T3mj*>(1@
z&56%d$Ng?BtDkbo`0b&D2XV5+%l@8h+Rt(FB@bJ-7dw}9SM-UV_j@iFR&Afx!^&5?
zMY#H8+v#(A*7O`ZbA(~-oIP(C*S%ttmb&^T<HGc8<NVc&|8Ly6^52V{wc2d?Iv1bL
z*fGmyWBcs|l4mct|318GQ%lXx^%ra|)pEA)yM6HFm1U|imtuckI=K35WA0@Y-+9;e
zTux+Y{u{i4ef0^;Q*6$@Z0@q%1!u2#-@O{~igDG<YqQ>*z7oZFE$iaHH`lzP7|J^q
zuGztS|4Zi-k3RQTOiTt_x~xtc2cI@=-d0p_)5&1s$Jgz%yBIBIGRD7X&)$2a*xS)J
zYs*dR{h_&MPD-AUS*x|mgl)l=zG~fby>oWk#?JqE^3qZ7ZF#%)bm`n{%ALB!<)lsQ
z;a7Xk%~*SexALw-&h;HNZF*eS6{NTLpStzac9)3knaMAfcxT-y+_Pkz)@-xj#sAqq
zJYYA7Fe#qRwDQ6Xtv)%cnOAq*$%t7s>-RoMza^J-cg^-<(n>hGXzv+|zbEv+8NK_u
zPJi7B!#K9yugUHaE2?i!H};!u_HUAYTepSn-dt(6vrNr#yB=Hd-AsLOdq+jUrRbZv
z1?`bpE6X(=tn6hipK;}Q&7-Tjcfu8(`gY8@EV(4kZ)1Yok`pthEYY0H=s8P5p<PVp
zwEPOYq~5M88Eo%uj@*k_QY^c%dflyqwo9xh%&L92rb+L?_xApNj;FI6F4Qi(?Zm;$
z6fnh@`{`sp_E?q%$F*#;<GAO{k&xpsxg*guec_AD15XwRobQ^rzs1zJ$J994_f=)$
zEA7+VC)P6k4?ZXEsA0VRpV3}9;}v?Zcgel3J^8|R)9d~3UKt3#Ido2Z`69!%B7>88
z#%>93&dw8)@pyb@o$ds_H%IE;9$we4cT$tX;<PBoJBf&Qq8V><o6<R7*uRi_|H<zC
zm$>)e>fZmD_x{(u_kZra|M%}bgZu|3`wuMfAK2<YaLoU}wf_Up{SSQqKM2Tw6te#)
z68}-G{-ebFk5c<T%H01b_y41U{3j**Pb%@B6#x6`%=x6X|C7%BPkR498OVP&vj1!n
z|JiK)r}Y`1q&Ge)c@t-~UqI1W|LmvF9EM+*gul4N3)I!>J)Qi8_2b=}Oke%#d4uHN
zW(0f<_UDaQug)aEn7sF^=YIeHkI(cl2rz0lyqLrAt(f6q4*$c+wcM%o-;yr`-=D|L
zE5NwJnk_5;6ORIu;D_%G|CuZ#zh~^{tlqy`mElL%|L^(<+_rWsE$i>r*E7B`U~K6B
z+OB^z&}KolUVHGppQ009|9JOZ@B<Uy1qOo;-}w|+Ci-)?+i&jVXP&&}*Omhef(}2!
zFZ@aj_$KJ^`}%}m4g6Eu|KIoaUF-dF#<BOkt?}>o@bAhs`H{B&&&&_M*k=9Mx1O7&
z;CIA=-~DeHF5TxYU;m?$pY1Sz+lkIcPgnHh&pY#C#lM3)*Z%fn7BpZ=Iq-L$!{6kL
zzk36|?ciszRaDq?i({ha(@8f=>=p*9XasF_WBY%;!NgN@!X&wTMnxA<uC*zxC2!_l
zer+~AZu|X@m4D~m|NftmnU%dYL&<GkM~@Akl$6>GHYw?C6V#X-rl|4BO<`iPnybY*
z)yPXpW{%$JDK<=ecdFQAq&H0xV>%@vB^zTGc{t9Tg(sfH!Khlqyi8Vcq7k1(YeA{{
z{Csuh7>~sX>((S}d9&xhB#8@UEg}2n-8j4Z@zduoU%!3-@$*a`Ww+@azZxGGyp!IM
zuBo(#BlxM45L2j}O-}=F=l+Ui0hWd-E}aVn-Ni(B#JwU9F@`%RJehGs*}h;dgPg#N
zHb>DgmpGOgokvu6O#M>Qw7JMZWM`Szo`i_<EhnvO{TI4TJ!3UB>#7F#nt}}$D%lO3
z9LC>16lAqFGcvk_1Tq_l9T3&w|2jc(;lkxr62YbuSFqh$8N%b&d%)zOG`qQr+nlP4
z4<6rBsZclh!PYExW?lU1Cu=1iK1<zD*=$uYVG~#Tp09efL2G9%x@+~+YiV@Uf+pdz
zEo+}$+dI2F|Nj32u?%5GYXn+4s&ahPRCJa2vnDn??RnySY_jn59Mx7sCZ6~A8$-i8
zSQ6Cx@3i#v9=QJYgWU1S8eFW6>x3GX-#`9#<Idube@+M<(%1b{!>z!9Sn<lu;K^{4
z=@x8&-=jrnUgE_AIiQ7e2U!w$*57zDfzhCJ#@v7x*&N*`FPTUfoM8}AbSToea0|L}
z2|ix}I(Hg8^;l8b;aZsMoi#I1mWzSAF@`h4FOidBIRhtW!Qxr69$s#t;gct#oT+KM
zwT-19$0?6%)>(hq5bok?N$&i$zV0mHS68k%$F{*~>gJNepmV2Rzj^!a{o$jn$EP{T
z<v;j&VOdy}oNL^YjM-*Kn3)@HEKzxJJ-Km>|FZ|4b38VJwgeden&{pUw@L2%jHkt4
zmtI-P%EQr=vZ29Ym0{|J))z+vy4kb2gq$KRjwH(b?{KonlJNo!@Ow;76Vy79>{z2b
zztkZ4(2?y%YCeJy4U<-%4ox`}VOqE>CCp!IKHHfi!5#koTc$vdXY8H9R+Pn`btQ*u
zOVL&}E}pBaLXRHMDNgwi9v0kx;Oe2HEz7p?${#y=dgtcn=NELoVm%_h<o-m(b9t!~
z9%d${|8Dq}P^snU;5RQS{o~1L52J4`cIKA%+q2`N^TEGU;>4~l$(en;#P0O3KV0Vo
zd{*4nRI<HeQe-+=UfzG-o}cF*{hW|pyem?If#s4@{am(NPpsK{UHk&>etD$vNI=oM
z;yHNblG4<Ba#LA4ICJLeEQpr-E)f`SQvE0Sc1Xw-k^kL(vJ4BN*`5e&Nodkow&GFO
zggG<Zn=f0i^wr7*N!(S7yxP(3JWcX~XVkTX?I+z&w+P%%(@|UbWRj22qep#iAFd16
z&iupD(YE%+^?12GrqftEZS8{lGr4AL;GN{VY~{0AzIK)F6M}9zr%K)OdEwsblvH|O
zeyUGkU#X>IV!Y$FnIGoN&QV+SVo`;nSEM+nj3x`iUDJ<`75*PsxV*3C&*P)o>2VJm
zThF_Atq5&5TJ>txnyP0RV)NpxUe*WgIg}|cwd~t+1)dk?%c7c&S<cQq#CG-7#uIAV
zvy`}}bl&V0uXE{WtLEBtCS-=@<#~)@yPmFTU$3S8ZpRZVAw99ZS?2%wR&EvZ_F((;
zF)Ct-mhFt*B^ysQ9^LsAv?ZYCL-i^q2iBEtG9S5^4@iWpcydAG0>e?)xxbk}ht*iG
z^zcY~_3UNq!ga!T1?Bpzx~Av3M$SDTx&4jNYMu4c?fH#)P8+Q43P0VkU2L+3MTXJs
z%cl!2@iN6}w*+QA7gl+^=Yxo%zm?Y#;WEcoF?aE`U$3z>888}l?=Tdecsp%*zO}q`
zW;*{Av&7Yxmgyb+dZ$F2%ZXW`VXucchyTn8Yu@T4-1L_d$qTsM<LT{JA9?-lkH=+q
z=Wf5(WukHW&<zcR%m-%*lDM=I8U@W~+MVY8`Etd4b;}!(;cOP=)`A<hS@Aqk`7f5#
znfh71-#mHlulEP|xBt4!WO8rKuFa(zFHd{%C2Hk4R>6SK3mI(rf4>&-_M1PI7MCj8
zymrU#zRxpDEL4x~OJ4u)m#goD?F_ez=X*^2epgsc_|fX*O;QWuKDu2l&ye}e=5fHo
z$Eo44)a=p~Q}&m<SsxZM<AQC;()LG@ADSf2EMPM~ageX-L$d<ULJoI~!)gqA7V@Nf
z92RkVRDbgola$nrJ(d%lBJu(v8QVRMi2P(JU^{&O*^NMJflNKOd)^U(%RP=>n81;-
zsZv5%=}3cK)yM7xp2ZT!J&qYw1y*Hh$a*Z9zF2G5$KJ!9(|`U_63Wo{|Ddnp%woCk
zCyv|w`q*C?<Gmr}vck=SA18Di@m5?PFmsa6(}@#$mZ+$Ep7e?en)H?{GWE)g6Mj{n
zG-|ZP^8Y!V3cB{H)1NWwirvXmVPPsBb7Yokrbl`mP~@Gu?#xoX`wJCU&soc^k|eI%
z{!)&|_vG~Lx0V`Bzu7%O<t<mO(lV39s?xs~_RPF-Ce7G6@@$6R=h@S4O*VF4ezs_q
zv5<|^J*ltE=Q1BHo0b1zsmOWH^Hp4j)Q|PFD%{TWx^qQkM)K_Cw(MRPY#2=DA2{N<
z^v6uj0Kq2<c5AJ0QO{CVb~)kKvQX5y+fzS~k!7I>?@ABbES3r1iWW-udbZ?z5-RQc
zvh=^wS<zopCSIKKNnhJrW%9Zi?3d^9ZJBQIHK1-?Qn0}sSE+~to%)rpE-$;ZS!&xv
zpI$8&u_@n-d9=53_A|Y@vaaolRLa70w~PuV{5LF-&p7F%aU_AOvFhvEn<{6%tYQ_)
zu1KE0RHR$$f$`P#XO=83;MH*~{(7!LaG6i4qo&Hy1yVmtlvgQ;u1Pt6lh>lh*C|Rv
zCOoV8#>y*Nrj3F=UTNu4Cz#4Mtyr6`@jyUg-@S)wECrsqA&$|v7BSgrbYAz(GQK`%
z*|+Ua_wYqud=!=-wXR^vR_2`WgEuZSec$=)PHxEmS=ZdAl<sO&bTC?YIyN<KyHD89
zJ6T+b6Q(U$6cB0npEYRr>A0#>r93NdzRu#A-uUF&^#YyBo}_=TZh!k_KAY|0`lLg<
zuLmFbc7UDjuGR^ogo7gA_Y0g$jXcjCcjV5-Z4$?n-#NX0z)@YXp)8a&>AUwMM&TP<
z<^49gJPf@z?Zmfj+wXFD1${~oy}e^jtFUrW{+Y*ezkeKe;M+8z-RFst^v@F>ew!vu
zKl4P*`sc}jzD-k>`#jZ({&_0m+@@*U&pg$u{&_lqZ}W`fKF^G1|2&i7w|Um}GtbO+
z|2$jJw|UNUpXXM$f1ay2w|U<8GtcdQ|2*%mC&$6&`{I#dFhjH40S2~S2Z!Z+7Zo0G
zERp85WYn>`B%!lqv3=)@Cnd9{_I!J=;J^7?50~GHm*#Hy!olv48N~jyDT3R9VV{^t
z<mD<&u{8<n6d9Q!`4eQ9{bOErS~Mqq#jKV!Wu+=?7aG#;|Kcjo{wA>KE`znf?wkAh
z5;jW<G<f(dxOvylePiq07d!zA7$hz<b8!VUu(KSx^QLe69!~=vkqy=C$I`ZPPUhtl
z4Pjucl5k+v+RzxC!oVz1uze!`hPP}5Ew?V;+qPAD-E@W=>pT5F%(fr3wRGg!EhyPx
ze&D@BLxuJqe#PnAPrcObDP6pqSLDEVU4z;~ea&~CR5X<DmfV=3bL00@*JWngHZv3|
zir8{rFWV;jpu8}@Ir`3eqb<roaSYRLKfLqCZl`?EzW>a;yAmY0Exw<SX8PjMvg?@{
zfApTqwd~X1#|ZLh>=vlgD^`l$^N?L(*OA_R<x9-(JdE1$`?BJ~!XEDAJ96R*SGfbq
z=bw&#UHf2{>zlJ>o7Wq>?TWB@vi-vk*C~5GIj?Yd+<K;DPj0lFyS<gzB)f`?|93we
znek=cl7E?23BR~n`~MzKKmX#U{D$xA_u0yo*>jvxR(cwtUm<qRw`tA(-}h=Ww*Haf
zuX4DNz;6=1@FV}mAFucizRmY%c{+E_7deAHjOX7uzWTlI*M8=IT+j1=37FJ<jLO(^
z{k9#$qR00ea=tJ4ux5FEghTy<wEDAbOrGCOnH(DK924niXWg5YeLKD6fAH}<j)J_!
z*O~3j8P2&gsywI#U26BC^bSL<<#MKo_B^iVjS3n~r`nk`J(zmU>++uG6^1h~m@{ZZ
zlybB)s;p=<v?y~jU~ueU|8>ogxqw0Vf#bjBWvma1oHSU>cQBtTXSG_vq$SYG^C4fM
zvGrdY>+3eg-P0JEzc)L-Xk|I>5%YpEV+O0ngVw+o!Oy>&dWQ47R?m$p$lY|U>ecq#
zDhZK4?uAYV8h$>n`{>-!<iXQeQPq4S=g;@-rt1Y8+}W!H8@tr9g*8h3IvDJimwwpB
zZ2lt8UcB}Bv)W1D)gs)PRz?)e?O<K1!IF2q=8aiXad_#2@1^D(1rOSbZ66f<m+vSo
z{a(C3qtSbMt&|BP`+}B5*DN&48$-9(go<}XPiWd)QS{A?$$op;h80EUrgvXH(JN}e
za(zbco3KhAhu+ZbmCCNUr2$oD<?UCewX^QXovh4I{G<K<^Y-7%OMbrS;OHp-|DvP!
zMf(r)lD{|Ve|OX|M|K=t-2dZwLzN*Tqk$!}K{n%&9x;ym1<#A56?&ykdK~FsU7o>S
z=+2}ZUev?xqo&b%<VW$;<Bbl}dnF7q9$H8%-s~<~-l%=E%l1Q;^NhyJ&m2!kFr3oJ
zGH-9@K9Hx&;47xlyZK;^C<BwhkDjd--J%XH7nV1ldEUzUyw|@npQ*jnd*$S?&Z(L=
zC;xvVHdVAB@0CW7)bw(vg7P-@e&Owf`Iarqzqc=aUcc0QLP6z($pLi@mMrDd%d0)v
ztKI9pB?>E6unXT{-ektPcUql5#S{kfE}fZ^{9YE>@5l=aZ@LrFS0T`L`^U_Ank;9Y
zS6DxvlvO%;NhPbDC5yz0NvsCb`ffTZ6fiIzU~ui6J*{&x>w=mL&-~eurH454lRe8f
zcuuv5tc`nF6g7QT%FT+EopTyXXVhHJ+3GO;(~iP-6*H<l`&*9n{p~2c{%!iwaQ2<Y
zXYf7mdwjB^+>`sKdyPvwyU@(s@0K<DE$1w~IW^Rx^;ALLHqKcKU)F{f%t{HLy=mqo
zxdl_q9xkxqob=z~M{Uvd1zS5E*PpB@T)}#5hU3Izv%NE>^jzpMtDH9D<rF5aHp7#7
zhgMDw`#x)q`N9m#Dvg~}?5{7n&f&9}Gu*R0vw2(Y_G5GFwio`bU?{!8T(42mwqoAe
z@_8LA=RSQ|b!+94cgL5waMiC5@0_GCaZ}pFUzUp$BNuzFT%cN2#8I_4%3zYEdVzID
zsol@wc=Kh27PB+D^ww#Xn@h~nmde-qFvI<ZqrxvoUkiIh&bb*U%Pv(k%in00_^?c;
zinWw$@l4KwxSex;ge?z^ELa)An5NO*_M`lb<f^-pc}t(SSL`gja&74<DTc7Dc}$Wb
zA5ONvnXziM)XczL`V%V}%0A5aFSugW;*T?$9Tu&KEWH%D%<I7d>tCwcnYk}c%vt+l
zvc}HJl3y#zv=*P$Txe}jaLcMd)|^2?A)n2vML}eR&yM+0CnsO(m=vns^hT?BCfCX<
zS}Rq#3NCW>PWM{-zN+uRt!W~mtL97DJKd@amuhgHu%su0{dMP(^<F$1tCrSUEM;HK
z%DG$LQ=|Ut&XO4xEt|eAoh`B0{N<FxUQAzSEj#_H?P&yKX~P1mQx$QME4i!IAG|s1
zn$}9aYW5V3X}hh~?LFyuAWPTWv#)geiqH)98D7&)sjt7MvHV-smJd>!^ENg+{|@@H
z-0``19%FXv+VE9(f0f+O+~~V&!^_Img_;v$XS4nnzCE`-a;8Lf#kO6mfA8$AklJc5
zKKoSFwD9!p7MZiQotQI!Mu<SydPA$SPqWrkJM6fyY_sC4*$G)|GdkDHy<AWpuw~+`
z$@elAGII&lzuxkG)vW2#K}*d$n=7}no^JQE+U4R^e^ZS?tbKm`ZH5;&H+;Ojn0w}~
z)z%XxTQGL7+`#9}&9`IY)?=%@+b8yL=SQ(`I$SlmlzYl4hMkJq3(s)Rxp*>fw)VoN
z*^}F%1WY-F)_E**Y2P7#W%K#tJ2Y-qXq=i8rLgm(*G|RAHKCea4bfZlZwFsVt7+HV
zwVbP(BZBA0i}ee%wk<uqA)u>+{q%m`^xaISbDPXpOsQbs)|MgUIrBgFo*mLrYbU7p
zScY%9?ajphfH638U+?Oj@sSMSJEu+H-v8NaVb5|Vm4E`P?aUl6io7Ey&Cz1GzFS0g
zmgAFCn-591E^<HkIH2#;bjH`q3SPY4GB2{==Ci4%ejcvwTHODub>_{TBB~YT1$C9_
z`*(5gV(KpZmeDbJ@`nG?+wvoqZrRY$exjZKce#K~E@Q~*s9)QD2yRu?I-1*X&{sNN
zC4f=x%&Zre*4)fKG<DYU39Hv@wKK-PJnnYG@x+Xto<9uIOAZ`w-=ku=W#fz{<?ti=
zD~hI6E#Ew&%jM5LovukL3z+V|I+)kFyJ};@iZ!QdI(JX-;aL~sxREC}=9S$R8^*Og
zr~j8U?B4RsRPof(^>0jtDo#((IkQ<z<_l+Tiy9}#ll(uo*qE;`^0A&3vqO0a&(VMy
zR_5!|!e8X;?rObxn)mh@kGL6ScVieQEN_;0kU#g<UYpe!AO0+#X;zxFoc&n#w5J)p
z3)bw+n_i$UQ*~tr^P$d@9#R)Bt;yN(p`l^Indb>Re2NaAP!nV-s6Dt#LHMo8+nx)%
z7IZcqxcJIoQ&v%#nn{+FtpnFxb{<=vlGSRTe4HLcUs_RoY5Pk)r!`FH=cpVHbJFC!
zd{Fsv`G(8RQ!Xp9T(RM`vAer><+V#58nv!}^|z{Xy4boZ?R8YSd&O0y`ZrU}T9!=N
zRheP2u1#k14lVcjKVex$)ZeQabFXFXy_R$LTHfDl1+v$RY_FHZUN5V?UNQH2)!yqh
zcdys|z1|>uqsjJ0OYDud+8Z5nZ*=Xw(R24k-`^V(WN%Kgy*VZJ=Cs<IGv?l$wfE+n
zyEo_ky}3a4)}q`rj)>LEYHzKWdu!F+TWjv#TKD(X2HD%2Y;P~WTfDedXGM+Qs+!wt
zl1_hnV!G$7#sS}eeX@6Q4&^haW*(cX5mn=NcJCdXPj^-xW52|ES2O5ty9$FK!@e82
zcXtJB<bA*p#m*qOfr<Ss_uX2Ko;~+^_8fceaPL{K{4OgIUIE6BGuU6gy*u#$gOUK_
zzrXkO7u0;Hy|;J5{r5pk|K~pV_m}C#g46&11>a-2$87T8zPN#i@Q3?Xb00KpSbNK=
z@%frQ`MjHdWf}D!Fz_-k|9i_Ynd#y41rM(^Jupb<(6Zy<5nvSk_uykL`x9A4<9UJ_
z|Lz}r_^9r}8ddKT547gE?JE;pcf;ClftdOO9XlQ;J`Tx-2e#+<SP~vb7(A#DVBp*E
z<bA+>&bs?$22X1mO5-9<6}6YX=Gj_${8<D?&t%(&$_?x>dQW!*Jhl19_oVi*bHVds
zMkcOz_t(ozpLk%OTtn&fKYKJb9168u(98F%!}oa^-$OZr_R5H@JIp6CS1?Ra&pw~?
zEIR#Z`Gomq51$^=+<i@uVgIq&58pEFW7A%t#~}QVX~MQg|DU~m#dVYI<cb3B1FtqW
zzVr;;Dp|{IzwUv-g{STB4l>NzzBu#LRNIGw7w%ZgF>sw@>?wKk-#1&+;n5<ehZmmQ
z=b!LY&|&5xxymJZ>;eK$ogJRDZfCe9$7oPc^yDwolXv$OF1)q8_fF7&>C(Cf@3uW=
zFL-+@{IQ@x(bv4UoaY!1?R?jK?%lQpANc2Qizs+kd0^k+Q)ODKS*7c5a(}ol!?4R*
zj#1H`@$SCo3XKo6A25hoKJwoA_|VSB+6Amr^xoF_&8VFBF3RB@^Qz}s=NLHbn1n4E
zHO_s|wqxS>$HZ&EBz@rXorI_N+a4L-%VFgIw7Kk)aoz`x{I6>B9~I7g#6RKv|9@v0
z!}GXfvTnW0{aDfParuj)Q`~d%^=~TsKlI)4IQ-t*QoV;ybBq7RK9_rNe_Q1zc6%22
z4bPwCy|a9O-(bU!9{aM^^AGCv-c{K%*}q`qu$yKi-&)cCn9Ka3`FXQAdzRVu(*O2;
z)zD{IeE)6uz5A*6`LgQSCHPxsMwVtqtlgsjviIz44!#Ey_rG6Y|Jkme^$B0W-MYv1
z`<aC2eVw%aO|^kj*@EZ%_GQ*}MR(6VsH)pJZ~r5~3p=gt%KpB6ezX6v?konKbzgVb
z{nLs2!945FL20M$AAXg4Gl@M}yGXOIRi^bxN1m|GO$7#)EhjEqe9fq|y7yv7h*2Ad
z+GY_=tJ(i2iYpo!$?Xa@G&V3RZqNLBEBjoCzQWI%%$n%l3mqZnGynWg*s^KL89TP>
z3rl)h^p4DV#WDShnBsDs;16&3qR(BkyL#)4o2Pg6DW70pO|Gce=<;I{A#vOWN7AzM
zLo2Im>l>R}+dI2^`zKDGI(?$}s#`iU6)wsh<LkCrRApqndR4NCcc8C0!`btUvUgW?
zd9}JtyVrX`DdElg#4C%BGPSL0weZROqT#tjnYB7#QVHk77R5rg6sd=Yd@M`ErB}Q*
zRdjIgms6i0b^Hv+Y9<wrElP<6JRDIQ&g>`=?N0HXZC?27%FfB@{;8k%#3qFmG@2P+
z?`bHWz_?I={iafg@qg1#&*qjb>2jNqVA{Vw==ZXSy_Y*rI<z^7Yw=_m%n~p)5c~Ru
zUF#6zM2pCY22D)MG}$UW|JuHsT#$IUT~IyjkMWsXo23^_N<C!46se*-Vb6@~Pd90;
zGTS-p)R#k@S5CwW&Jx_j#ADMaXrd<*<)Itl&EwTGqu{{7hQm#E2L;;83r>a=dS1LV
zd(V%g=jRu?Pq({!H&m_N#CqOd7VCp6Vqb?Y6T0^+cJ9K!^%AzK!45$Q%U>uexp{nh
z+b=A&wO8N__q0|=hNI@6bC}NXO<t0ew=;0c;&TVt6?+1lk}o_^SRyAT;JE*an3K{R
z##I~Ew>w*uWb><C*iq1RK5N%wCdU5>J%YzJtTH&o(Y|HHVP>hY6)lGijXaec-FDqj
zXy*RDIM;cL%;ybq68{PkJmyJ7EN)!c5p5tibw)trGR=saM^76bnsecd@kO8FT|7;H
zo~%-NZSaxxL4t%3kBeD$kH?K;2@{uCzYyBUzTHJryVvrv!zXvc3mv-MDs3E`=l=Lz
z(OWBJ@7SmQpiO|`^lY9tLTXGQQ7kNzmneKy2@VXsd^J3=ck43FTUVT1y>;h0999e~
zXi(kyCLz5`<o6xUfB=@O&YLt#LKia%ypv|VaZ<rz%Pi0A--1GHES#Kf0(=dN4P=x*
z6d%<&X`{zHIZLx)S?TS!-q$K$uDu=?lxA}5^6dX-dJXQ!uM#cc;%8ZKV%fiAE6#7w
zTJN*;ezH@l(}t;44vlw1k8b!ODrB<v`s02_zMmV~ZIAixIeehu-~$^L&3<)8rG{${
zU;L9@nl`cUT;%h)y^25YmH&Hv@`<RF#RG=z793T}Ytx_Ie7SsKpH$fV*RJn3ux8bI
zynL}@+O5~?5Ay9^#yI2J&IiwJBodl9Q>FzpFdprTez)@_A6rZG>vOZ;?)mxdcK*)q
z|DxaRX4Sv*;jnYu?wli)VhOp&6#HX}j2$H&EIw^`KIZdT%lCIapLgVs{c_P$fA1H@
zTk~SRUX9GZ`}KNaf9$uLnd|R<yIpub_WRw+_jkYFZ{&~r@vu|>-jB!sC;G?zd^$7#
z-p}U?`{RDST)F<<uh$#T$Nhf0^ZmWw?+^0F|M}P+Kj+Wqi~jMV8Lh$h|9-#UzD@4O
z%k}m(Kc8=p|NnRGar^pzj1mW){?xBGGJ3!$IKzQeZ$cw)$pdCZ2}e%92~DC~9<UnD
zaOBOK&@B7q0lTAwlVIP37FCmn%$|-1{&P-f)%`P<EBu9%<hcoD20aYCg)<Icf9Nmp
z_VPpiMh?rL2OSvhdc_J%oZ+%-<9hb;?u9}NC0tjYT%&CJVw%Xt8LsmjvzeF`W;@rc
za5e1P7{@e$xu-^%!)V>a-VI4o9A~b(S)RL?n{`-P_Tvoq7e_q$Yri~}XO#4C<eN01
z)r9kjqToyq*ED^|>{tru7)WjgTZWrV&%m=|pra7Ec#ka+TA5=twPpDg$)aD&ZXj)u
z0&UEzI-9q6{kt78yz>zo^Xf_)TM#?A`zN%APMiWc83Az~OyT5?<x4>)BdlA$VdJLF
z;O#GYD|hbMyKn!2<lQZY4}!K>o`ReQ1KIvE^XSH#*YDiDchT-)v;CtS(5<Xbi(k7u
zfAZ?%C)_vAY4Fc;D1Uh8!{N(*C#>5fj3L`!`W2kJWIQ*?ICea~_Tcg-Js;Qha4*pI
zmt|*XTNJ<2;S^Tz`d{{S+Y;u_pB|lC>@is@_SBY@muqbQ|6Oupledk&tFIksV;<=8
zvP<2s@?R}o?WDY@M-zH^nXSjR`8PMey3}WE1=*OFzt+0&gtt-q*JVDF%)PI5G=VQK
zGjcxk`<;+$_SDUS=l$h2Z}kCf%v);s`f^Wc-19asDSyGWQd{5N-cc;iYM5AZK&dm5
zP1Mfp+l8B&KVQY2+q1K{UqPzj!`sPQA5V=~VC2?rv-8^X2Zy`m*X#c(c@?y_{J31z
z*YtNmE{oOu_wW1r^jR&(jQsH0KWD;3*ko!L-z~jU%b~VnLCQ~8b%)$HlFP&j8S>O0
zL<yTI%C|snNb)h&kgXSwn)0wpbymc+hS1CkrE-O18jpKCeGTR^C{Kz=DmWIZo>-+b
zFC%fn!#D1aCwi!PPMYX8@5%hutCpTA)$bQ7AD9}Ew({w;n6j5orzf;&KAVv;E%VvT
z4AAUY&bF7&W)~dOd_Je-TITXuCAN{NzSVl)lIMG|X}wtBzqkCZZ>^Yz%EBJAS1WvV
z(%OR;=}G-~v2;e-t-vK3msm2EN@QuhTCwEUibYF0f})--TDtAktJRz4{<^=UYa`d|
zwL7|`o~&6Z#GbM40Nd#otKMFGmA&GS+G?FibHcK8R_)i*e!GSH-K(7S7jAjI-FBzT
zJ*WTtr&YPzpG;dlduu?F_5as9o^5-bmzCYPdflQo`?BBfZK#!A>(l<O`~7}~!&{eY
zw6o@XI9T-Zwr97N(wh&5V;7$0JS^js^YLiSvE3UcNR+?%=*OJz^zpdL^fT)ZP3y_|
zbV{dsNtUYCcAd{>xLbLO51Kq*Q|xHw>{NKvnqBuxp~SB_H!gUn=kibK|Fh=H<p5z_
zLnS}=+|nyA)tnSIg_p~k>}b#VyZCwvzplPwl6lOxTh^yvs|VOKpZ#`6ZvNW#D>0YX
znxD?Q-&lUHnmz8*R+~P-?7dCu_X-;ey9+HIbh*cwKWtq*%k0sl^t{52M-%^TyEUub
z&f>X^vEHwjYSHtQp03#b?_>7#&#!*HSsCp5|My$n(~ZC1S<XNB`+dAM-=7bjr~UqX
zJfXh+&!;oy@Be(h;I9Ao%a!o_zh7^pumAh)PWk)4-ygK=|NHS|dOq6rm;D#Qn-c#2
z4WFgc@Ryk<p?>n`>RbOD7!D}?U7yVKL7s7I%YFu>+<Mj!b{5@l_69f4H#**qx8r!R
zfn{1IgW!<_-z_Q!8CVvWyBaBSU7onKYD<Blg26+EoJ9vewFJ1CvUIYaWpNUGmcqcx
z@rdiZ;9P~S#T~pI>;lae&Xo@|Iv5j9uq?1R^!ZJ5GuKH5R<4G|suc?uSSuLpw{RRY
znl+I{)sa!6e1WsTqLuC3fsU*K0sV|2{}(VxpYUKaXkaw7d(Ys=lf*Ky;)sKm;RN0t
z3;CG@PH5<*bnzA}@hLjNucM^GoVsMO4M%{R{VV3lX*{Y@o}XOxx}3Xn&YWPnoO0B=
ztVk|}=dt6Tc0SWtmnuC{lB_r+`Qnx(cRKYP7hd_pBgrpl;<pp=P7aX`fya`&6TYO_
zIqYQC+qpo6`^F-*+6@iSMoXI3<SccZanrSOO3*ac#0K-jiKj!%`X_eS9MI#v>0R|t
zXkupwyG`#*0S~Vt&qr%ijQ$@y!?a`bw6rN|b}M#@m`?jVJC{qtk!w{z;fl{wSsy-e
zJ{s8Atd~E-LuY}0Z6{yCr_J*^{w%L!i*V496lnM_z_P$TJj+vi<CSGTRtXc6y!vPT
za$dy5sA}?gMxX8^g;~il%64p40x4Es<jpo5*Sg7ar9q@*@pB7xE6z_LuNg11H{=`;
zs5J<xo+dK?r;U4rbS0mM*(T2kJ&6kZ8}@HCThM9uVY%naF23zfg6kYv7!9hG8TPw<
zYMUa{#p&NMa}^WI6pkB<+-nm~Gb&7FQaP}SpTmJkDCV;aPwP^y1t(qYlfpL7QDqDa
zbchm?`Lgo4$Ya-+77Z88CihGH&`FKneYSw7Vf*I-<>_?=OXXz}nD{>l#U1B77WB<b
zM*J>g(D}e<(G?GN^2}JwZ<7#fx#)4XM8QgaqXPH4zqakJu=(#^_VPsR>o5gbjTi5V
z_ljM+#~|F0YP!g3T82}d(!~9)o3xdBQ*P{BWa`c;SJ1#eC(PqkY1?m~l?I}chZ(+{
zZwU=mE9P!si1wP?W4&XAMDEW!x>;shKAupM@MQ448dSFHkwKxwxymb|^<lj#7hajB
zzh+*Wv}MZ7)@9bYk|_q~zAueZ$}3baXn3q;xsxX)E66hE$|AGiBVwv=yKFm?qo-}0
zW9O#Tzi@S`!M^Ep&weqIkU!O6G<m_IK<<@wOgB&cQ7hbEzw~p{QLYDj*o0aXR^(gU
zsbV;I?D7T2Da+^o*9ni+`?ao=_t|3MxhE2tW=-q}eZs<2FpqK0h0dUR>?!|G?zk9~
z$8dT{*!qc=8<R>`OlFz&WQpVP)gj&MZcXFg`bKwe599B-m1k_@o_DABrj?w!v3;^_
z()6|iPZ%sJIbw^}*el#V%e3Wz%qBO6X|)%grG+uDtjS$wvB#&0>rdFqt)^M!pDmu{
zNnh!^u;<%`y|sBs&Yy3K-cXve@L59PfzR{H>{3+3*S`48bmP(^iDwIhb@{eSy<FX&
zCuH-q^MlgG%WF^QE~$I{FhW>Lvn|=Reammgn~B**yY9@((=7e%n%-nKCGAR1SpLmV
zGy6B4dj8?V22<{w4~rh(Fq~(q@$~FR9l_}wjeHEu^L$w}uAiSO!&k=G@v2!XfA`Z6
z^~HN`SN`Xl!!Er#S#POH;kmC176-nrT5S=@d~->|<H`pLu0IaGtg*K|e`Pz*_8ki1
zyan5ux4g?y-!b*stIM(Hk}vzZ{IPMfOZ9yu^IFqg{nYW@u8a1|Jj<Tves(9P+am9>
z-E-aB*`3xGmwc(2yLkJyX*F?Q)8s0rM_5$}I(%qe>aW1*m%e93xNW77`@JpK{=Hjw
z(BrGP_2jSH`l?>rYQ4_Bz3GR=GMkOh+0Mu_#9eA$!I3WW^1<(42@Gu~pEiCk{{H@X
z?YZiBZ;zw>VV~xUtogyi(E2>^#?iW}j~qW88S4aIp9_z^$MZpX_V=2~jrAvwWtF8w
zpDW4PR^ofrEPlRw!!mW2|F>IeCbm}|4tLXf5Rs=+?U_*R#gKa1G%$gMKk0ha)0R~6
zsgXNc8F@TvEZLjm)2sGu&$2hq7K+HJypklE5cj3k!==IF)^x?&%gZ~ixI9P~^hl}y
z_Pma{y_|PJ#*69xua1{_pJ<UgUaljO*eJ^17n<nXQD1qeKJ9ra;|is-+iT_&HarT*
zPdCY%Uh2ImEKpFR`IT$qqlCtbrS3Hq?qMbj5(34a6k_}sniMNkl`RCE7kDlSt4jCa
z+jPxmu4(7GrOk#GrN(MG=^pOI8L2r_nhzh#i@N5XV(h~kz|v77S030BP*LaU!B-^4
z|8%=ckcH3hz}6;_?pFbIVMYx9vzG?BKXH+G7Okez#<sEJWP0-*Gc&iVog0n#cZ4zi
z-dK4_JjskB$MJh-Sw^<jA|~GE-cJs3AD^{uyw1|rQSEQuc6&+MyDuI4*?VtmG~T-*
zJo`lDsq3W{68&X67`Cw{hdnNc77FXz(zQv^bJ>sfwuNOc4Z5GFci()T&$E0&?bo_=
z(bhPPp8r!?#aH$jZ})r0(ay?H5@gIje|r0)v`Lm_ldg8~{TJ_gd7(Hfc+z);$x7id
zttU!etf+qH*yfnt{?4N0Lr15AXUJ!d=D_Jy)7YyHvUe?r$nn&4$k{rf(S3r;Xa6l8
zu|ki+e7`XFOsP0lGF8xUs?!AJ15c**9h>^Ud~1RKjj-+Ptp|1l9}4NwRH+x9R$o!!
z^{cGiaHi)5Myur_RcXt!Qd26`Z%m$+F-3HRS*s+UTtV9H(q{jg-u$0fo=Y@Yt(3Kq
z<l9shApf%T)qyES5mTC8R%k`$C@<@Gs%*}&F!4|c<Zz$LvM8vD)nWaL@)axMofSM2
zR?6E?s7tQwa^6t>qI`DwwArF3r!pE$>y!}eTH^Hk@KnX=1q-)L-uiK(!pkCMO@6np
z3~~Z_OK(=)ev$WVT7H8j%Sy`@+hz6E3z+o8ysZ@?mX_qMzt+sOVMdr!^%P6i*6#x4
zCj;faPTbVS=rWZt{)zhn%_&X~l6+0lQnyFWd_KwfX7c~O%D{;;O@6EJC#w2yxT$n_
zp%PO8gXe-Srv<b3Ms_Dxb~`aFa%BkCvZ@wVnti~N<)UQIA(KTXJ!3u<%$yM^E#b6q
zouS!>t@Xd2=icwk*7sz5X35f*Iq#@@%Y{%DhK?nvDlAN=ay_h;{C+;;_fr<1X^VWn
zF?em5^XKLC=;TS9T1!tIUow41l&gcg#z)umSqtixEOXY(wrpc`IF&Cvq43a_<tIWT
zgd4&ew3ao$a;mm!+OyE9v}^_E@fEI*mhauNJbY88y~482DyMF#6|V|b*34RbBBfUR
ziA&LB{-Q1U3rgL6Z%uir;J#j+?@tHgJ=KLT3*3K)#TJFs++4bJxy$PRudc>EN?9$s
zAYd!&YTFyZehLwPC$I5cuvoirsVtXpUPRPehT325rO#cuvK{B8Zeb2FXSveVxxaPk
zomb926C;?W3Y&P!{m5jAe#DaGCCnrcdf9C5$6x$R51OB>5|KK_|2s<fT!j2L;U@oW
zYtGDC|2}D*w8>mK#Yta3cD=BeshG7vrFlcp(hahX3$zkeJq%pw8_?(GP%UJ=@yxFI
z-wti$mtM43YSVY8jZa<}sO?^4=E?G4`KDjao1Pmu3J7oT72mwTYqM@~@b}EkY|N{E
zNLGKJyvZ)xfIq05F?-{Grd59z2YXs?4T;_wR=qW1_SUG~TVrl-jr+YdL3&$~^|qAg
zZU57%w`I)UmbH6Z&h2e^zqb`gZ!famUJ|{%ta^LJ?Cn*%x7Xa>UiW)@gY=Fj>m4o8
zJKCyubj;q-wR=a;?Hzr;cTAApsh|`Q5wUYx_0Acych1_qbI$FZ^M3DKAiZl*_RcLT
zJ7+4bG+|z`tXk7d$YjsPUA>=nIbGhh!CIqWisSpJ-A13LSsvcKYxizd;jDeXcPkj}
z;ZSA}JWz4Wdyo6WZpSAKmsmjK|GrW}r@aMyr|rE}9b=`q_lh<@&xO|LiwuGV>0b)=
zo~afFt<Ju%@7-@Em#2HLatpo44pn`y@5k+Z`Ub+Ys`x%>^P61QC%!>c_`$x@(fj{i
zXs?L~J;0UDyJq+QH`0ud@&C8486JMvuiAKkrF6eRL4rh#5RU*O^PBybt@lgT9E?sp
z_|7^&W)FYrwzbQ|4~KfC8H696q`g-#p|VG0zq*dFzE9D2=|dKd3@SZ*QZoFE4;VCR
zM4oi-f42Gv52Np0(GGqoz6&g?|Gw~x%!zf{wu{k*>GOmm%7RCdO^)2HKBD$#Z$2Z_
z&)fTUW*__UV5S^{@2nK>Y3)pUW;vC6j!%+4mRxg4P9bBz%7ombnYE=1T&Ye{+Q;X&
z9NUzU`0@dxw@+#6$w`y;l<+=a&{J@p9CMOM;DEk?gQm~kSvp}0zAk;Zfnlc4iRT*_
zm^#->9X#}toB8vD6W<=p{6BHJ*Oe7~d;jcalwsVr`Y_{!{W1&Uw!GP=F@;H}hEGo6
zz>RDB_!Eu@3KZ?w6EI;7pTLL1&jpTEZechn!)Wlp^U`moD|hxO95|Ds!<Q&?=BKus
zRSm;2pAcmk##tffj`r-AaVWk0=h&S&f<ND!51PSu-G_fyPt(kfxrdft*t(nH-D$@B
zm4^ixE(#wwBPei4u3*3R1BQ8G2d^(X9J2hd_Jy;83dat{9Acm3dUFonm7Ge+hGRSh
z`;`x53MU-=J?D^e!G8S<49XiAb$O$lZCu6v9CTzk&tK~#CVS{>&3X6Oi&}d;#Q!k7
zyt7Zn;fUnM%xTt(t&{|I$wVzZ(iT5=pPj<R|4e&gta7fN(K%)(a6tQl*Bk9)=l2|b
zlyLEz4xfC%#o1T)DYkD}RJQ*S4|4<WjoT&He{1tu>9{4XiI&v8o_u$o_J^3vy~pZA
z4rt6hRAGBvl{fb7=_}J^`6j+)K9h6xP4-pGgV&9J&OOH(n;MdLwL0+LwIdUEm(;D@
z-}d)>uk9uMyEkX;yt!cQvGaSF7}s36WFz)HK<(p%+yD0Xw)furJ^Qw&=gnz<r&#Ur
zebasE!ro&?r!&~^xw3T5UHh8r)5Pxxo2f}A-r9M`CxWRX+$KN!TTIq5*R@(Z6&{>Z
z+#~ks^xYQ?$L`HO^lZ+}gs1n{CGtOibN=V*Yir8(iyzpcFrjq9nY;hLo?-lva<J9+
zSlQh(m9f_!7TkSNdAsrp^PaO0Z`{4@GKcZOT0UmK2k){Um>M6Iu!!V&ketB&IB73~
z(c2|=eb0)PUYC%$UUKBj^|Jj*BFwvLMZaxe;3-R(8Y{YFF5kU9*Z$R>Ym|Me>htj7
zg!3J?7ggpy`L_3Nx#zL}(Fas?A~JPPyVX7UG3CkEhO6J&=S1b+`+6bC^x5&*TI-7S
z4!`tfwqI~9+HWsk@5AQ{9zRrg!Z(4@Ugl2W+Km$e?>TLFqO<b)PTf0#3pR$>#W}yZ
zb9aqd^|`#*yxUT5&b{Sk{y0~F(U;||^#y|<V|xQH4F#6fnTL7azDnXf!GH5^;oK=L
z=WhJJWX<$+&+T1&4;a_INU7pG^M~o)Yxk{kCtmmP<>;Qbt$k@b@#URw599XTRW)Gp
zId)Mo@t~{1x&7+|IHi*RX8NsMSNS+^m;Ht(ExC^s=Dkysc{xk>T+dr(Ih!Xgd~dcs
z+<RE>O@to*WVyHRyl+*+-H`sb|A+0{``YI}cnhtW{Nmm^rIats9sf>q=k9X*!z|O_
z#4T`e7R%f8yKPo~pZEEezT4w_WzTgfLl*H1st#}W?PYz&xj)wA!;QPT{9=2VxKvqe
z=Q3)ryk$NA(q89c!{0p}^8^g7rXA^hWpL2*X&vk2(j5B>Uk*LnAvuA`>BBJ>9hQ^#
zUJ5F(=rb@o8Jx><z5V}@!&$Aq=k^WH^6L1V9Ud^vfB1IwqrCH9<JMo#n)v30!`Tcz
zh6sI@y^UXwe%~+f@VlbiWiNqOoDaWVDEq>DU%23uo7eft3JJ&gs-{m|-!m!tqTIUu
z&MH6J{xZL|VHC94>yuL@FUQy4ms?{mq8|VC-<@y&<Yq45KN@!A=en?8%deal^5NTJ
ze{J6VheDfvSLL6I^N%QPeIU>HELvV<I-^xk7eiFayoFP|&i5}ZTeth~Eq=e<QqhHf
zzil|X?){nXy97ASKM{K;_(b|B@5VoY7jyNFMMZFBZ*5t&PW_t4#Bbh$mp}d!{KUij
zjFp8a;>bf|Inef(lOiq-zEAw4w#H5W&*T`|{k863;>Q^=X7ev*ew}r<Z2#(zA9H-V
zd(6IQE&dX1%E$Mn&f?RTIUAnviAze$$}1|Xs%vU5*O4^-)ukaGRHx*mT&KrlI9tR&
zG(0joHa;==Fx$42t1K~owrpx@i*jmN*cu?SW4VrMQ|8XCoxgPX%GGPvE?&RYf9CeR
z`wt#Idb=w7`1#u`RTppGzI%VIBOB8T@b;Il-+%u8`=60b#9~6i!FuMpgTXr{Bs#bA
zE4odwn3&|+EpC{0Wyi#1_kMZDHWAB7DV~$n1DA#DoRsQ4T|e>I6wAqJh}p6E_Kj?!
zR#P$p7rReX3*9v(Gk7^@`^!SBsac_`!#Ac~-8D5ke0}`EHqp~T-jSQrFD?t+JuNqS
zd;Y^?Q>~}x#qKWu`0VQL>G|>d>lxX_Y-WIF$FBE<?wL`Te7s-LeVWb8qSVvV4b!jf
znOU5Ee!gS7nC+~R%*)FImxt}0RhoT$ed6(HwzJD}Z*MPr4%z;)zmZ+sZcatv<Kq+6
f!}rapEQZXE&8;eZeSKs4^?h@#Q;Y4I7#OSpeJ;;d

literal 0
HcmV?d00001

diff --git a/wp-content/plugins/buddypress/bp-core/admin/images/menu-2x.png b/wp-content/plugins/buddypress/bp-core/admin/images/menu-2x.png
index 97f773620c292d0d7b6e7be2d0618a139e63fcc1..7520481991b10b2700bf964d8a4cb05427766227 100644
GIT binary patch
literal 16946
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
K&t;ucLK6Usem>^_

literal 20362
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

diff --git a/wp-content/plugins/buddypress/bp-core/admin/images/menu-wp.png b/wp-content/plugins/buddypress/bp-core/admin/images/menu-wp.png
index bbb1c50ed0a66a3291088beb722f652fa39f6285..1bf31f6bdf9940f5ed8d99d9595ecba2685377c5 100644
GIT binary patch
literal 10144
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

literal 13585
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
SecThYNy*dI&t;ucLK6UJ4x-Ee

diff --git a/wp-content/plugins/buddypress/bp-core/admin/images/menu.png b/wp-content/plugins/buddypress/bp-core/admin/images/menu.png
index f0fa69328694322fc44c7b6ceabb2339c6a90414..1e86c243ee4846ef5844cc8e7643cdf1ecc5651d 100644
GIT binary patch
literal 6063
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

literal 7151
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
E0E<Phe*gdg

diff --git a/wp-content/plugins/buddypress/bp-core/bp-core-actions.php b/wp-content/plugins/buddypress/bp-core/bp-core-actions.php
index df61f5a5d..2bb2334cd 100644
--- a/wp-content/plugins/buddypress/bp-core/bp-core-actions.php
+++ b/wp-content/plugins/buddypress/bp-core/bp-core-actions.php
@@ -66,6 +66,7 @@ add_action( 'bp_loaded', 'bp_register_theme_directory', 14 );
  */
 add_action( 'bp_init', 'bp_core_set_uri_globals',    2  );
 add_action( 'bp_init', 'bp_setup_globals',           4  );
+add_action( 'bp_init', 'bp_setup_canonical_stack',   5  );
 add_action( 'bp_init', 'bp_setup_nav',               6  );
 add_action( 'bp_init', 'bp_setup_title',             8  );
 add_action( 'bp_init', 'bp_core_load_admin_bar_css', 12 );
diff --git a/wp-content/plugins/buddypress/bp-core/bp-core-admin.php b/wp-content/plugins/buddypress/bp-core/bp-core-admin.php
index fdae95429..217eb083c 100644
--- a/wp-content/plugins/buddypress/bp-core/bp-core-admin.php
+++ b/wp-content/plugins/buddypress/bp-core/bp-core-admin.php
@@ -334,7 +334,7 @@ class BP_Admin {
 		if ( bp_is_active( 'xprofile' ) ) {
 
 			// Add the main section
-			add_settings_section( 'bp_xprofile',      __( 'Profile Settings', 'buddypress' ), 'bp_admin_setting_callback_xprofile_section', 'buddypress'                );
+			add_settings_section( 'bp_xprofile', _x( 'Profile Settings', 'BuddyPress setting tab', 'buddypress' ), 'bp_admin_setting_callback_xprofile_section', 'buddypress' );
 
 			$avatar_setting = 'bp_xprofile';
 
@@ -396,7 +396,7 @@ class BP_Admin {
 
 		if ( ! empty( $avatar_setting ) ) {
 		    // Allow avatar uploads
-		    add_settings_field( 'bp-disable-avatar-uploads', __( 'Avatar Uploads',   'buddypress' ), 'bp_admin_setting_callback_avatar_uploads',   'buddypress', $avatar_setting );
+		    add_settings_field( 'bp-disable-avatar-uploads', __( 'Profile Photo Uploads',   'buddypress' ), 'bp_admin_setting_callback_avatar_uploads',   'buddypress', $avatar_setting );
 		    register_setting  ( 'buddypress',         'bp-disable-avatar-uploads',   'intval'                                                                                    );
 		}
 	}
@@ -431,7 +431,7 @@ class BP_Admin {
 	public function modify_plugin_action_links( $links, $file ) {
 
 		// Return normal links if not BuddyPress
-		if ( plugin_basename( buddypress()->file ) != $file )
+		if ( plugin_basename( buddypress()->basename ) != $file )
 			return $links;
 
 		// Add a few links to the existing links array
@@ -466,12 +466,16 @@ class BP_Admin {
 	 * @since BuddyPress (1.6.0)
 	 */
 	public function enqueue_scripts() {
-
 		$min = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
 
 		$file = $this->css_url . "common{$min}.css";
 		$file = apply_filters( 'bp_core_admin_common_css', $file );
 		wp_enqueue_style( 'bp-admin-common-css', $file, array(), bp_get_version() );
+
+		wp_style_add_data( 'bp-admin-common-css', 'rtl', true );
+		if ( $min ) {
+			wp_style_add_data( 'bp-admin-common-css', 'suffix', $min );
+		}
 	}
 
 	/** About *****************************************************************/
@@ -484,21 +488,17 @@ class BP_Admin {
 	public function about_screen() {
 		global $wp_rewrite;
 
-		$is_new_install = ! empty( $_GET['is_new_install'] );
-
+		$is_new_install            = ! empty( $_GET['is_new_install'] );
 		$pretty_permalinks_enabled = ! empty( $wp_rewrite->permalink_structure );
-
-		$image_base = buddypress()->plugin_url . 'bp-core/images/bp20/';
-
-		list( $display_version ) = explode( '-', bp_get_version() ); ?>
+		list( $display_version )   = explode( '-', bp_get_version() ); ?>
 
 		<div class="wrap about-wrap">
 			<h1><?php printf( __( 'Welcome to BuddyPress %s', 'buddypress' ), $display_version ); ?></h1>
 			<div class="about-text">
 				<?php if ( $is_new_install ) : ?>
-					<?php printf( __( 'It&#8217;s a great time to use BuddyPress! With a focus on speed, admin tools, and developer enhancements, %s is our leanest and most powerful version yet.', 'buddypress' ), $display_version ); ?>
+					<?php printf( __( 'Thank you for installing BuddyPress! BuddyPress %s is our most streamlined and easy-to-use release to date, and we think you&#8217;re going to love it.', 'buddypress' ), $display_version ); ?>
 				<?php else : ?>
-					<?php printf( __( 'Thanks for updating! With a focus on speed, admin tools, and developer enhancements, BuddyPress %s is our leanest and most powerful version yet.', 'buddypress' ), $display_version ); ?>
+					<?php printf( __( 'Howdy. BuddyPress %s is our most streamlined and easy-to-use release to date, and we think you&#8217;re going to love it.', 'buddypress' ), $display_version ); ?>
 				<?php endif; ?>
 			</div>
 
@@ -512,120 +512,150 @@ class BP_Admin {
 				</a>
 			</h2>
 
-			<?php if ( $is_new_install ) : ?>
-			<h3><?php _e( 'Getting Started', 'buddypress' ); ?></h3>
-
-				<div class="feature-section">
-					<h4><?php _e( 'Your Default Setup', 'buddypress' ); ?></h4>
-
-					<?php if ( bp_is_active( 'members' ) && bp_is_active( 'activity' ) && current_user_can( $this->capability ) ) : ?>
-						<p><?php printf(
-						__( 'BuddyPress&#8217;s powerful features help your users connect and collaborate. To help get your community started, we&#8217;ve activated two of the most commonly used tools in BP: <strong>Extended Profiles</strong> and <strong>Activity Streams</strong>. See these components in action at the %1$s and %2$s directories, and be sure to spend a few minutes <a href="%3$s">configuring user profiles</a>. Want to explore more of BP&#8217;s features? Visit the <a href="%4$s">Components panel</a>.', 'buddypress' ),
-						$pretty_permalinks_enabled ? '<a href="' . trailingslashit( bp_get_root_domain() . '/' . bp_get_members_root_slug() ) . '">' . __( 'Members', 'buddypress' ) . '</a>' : __( 'Members', 'buddypress' ),
-						$pretty_permalinks_enabled ? '<a href="' . trailingslashit( bp_get_root_domain() . '/' . bp_get_activity_root_slug() ) . '">' . __( 'Activity', 'buddypress' ) . '</a>' : __( 'Activity', 'buddypress' ),
-						bp_get_admin_url( add_query_arg( array( 'page' => 'bp-profile-setup' ), 'users.php' ) ),
-						bp_get_admin_url( add_query_arg( array( 'page' => 'bp-components' ), $this->settings_page ) )
-					); ?></p>
-
-					<?php else : ?>
-						<p><?php printf(
-						__( 'BuddyPress&#8217;s powerful features help your users connect and collaborate. Want to explore BP&#8217;s features? Visit the <a href="%s">Components panel</a>.', 'buddypress' ),
-						bp_get_admin_url( add_query_arg( array( 'page' => 'bp-components' ), $this->settings_page ) )
-					); ?></p>
-
-					<?php endif; ?>
-
-					<h4><?php _e( 'Community and Support', 'buddypress' ); ?></h4>
-					<p><?php _e( 'Looking for help? The <a href="http://codex.buddypress.org/">BuddyPress Codex</a> has you covered, with dozens of user-contributed guides on how to configure and use your BP site. Can&#8217;t find what you need? Stop by <a href="http://buddypress.org/support/">our support forums</a>, where a vibrant community of BuddyPress users and developers is waiting to share tips, show off their sites, talk about the future of BuddyPress, and much more.', 'buddypress' ) ?></p>
+			<?php if ( $is_new_install ) : ?> 
+
+				<div id="welcome-panel" class="welcome-panel">
+					<div class="welcome-panel-content">
+						<h3 style="margin:0"><?php _e( 'Getting Started with BuddyPress', 'buddypress' ); ?></h3>
+						<div class="welcome-panel-column-container">
+							<div class="welcome-panel-column">
+								<h4><?php _e( 'Configure Buddypress', 'buddypress' ); ?></h4>
+								<ul>
+									<li><?php printf( 
+									'<a href="%s" class="welcome-icon welcome-edit-page">' . __( 'Set Up Components', 'buddypress' ) . '</a>', bp_get_admin_url( add_query_arg( array( 'page' => 'bp-components' ), $this->settings_page ) )
+									); ?></li>
+									<li><?php printf( 
+									'<a href="%s" class="welcome-icon welcome-edit-page">' . __( 'Assign Components to Pages', 'buddypress' ) . '</a>', bp_get_admin_url( add_query_arg( array( 'page' => 'bp-page-settings' ), $this->settings_page ) )
+									); ?></li>
+									<li><?php printf(
+									'<a href="%s" class="welcome-icon welcome-edit-page">' . __( 'Customize Settings', 'buddypress' ) . '</a>', bp_get_admin_url( add_query_arg( array( 'page' => 'bp-settings' ), $this->settings_page ) )
+									); ?></li>
+								</ul>
+								<a class="button button-primary button-hero" style="margin-bottom:20px;margin-top:0;" href="<?php echo esc_url( bp_get_admin_url( add_query_arg( array( 'page' => 'bp-components' ), $this->settings_page ) ) ); ?>"><?php _e( 'Get Started', 'buddypress' ); ?></a>
+							</div>
+							<div class="welcome-panel-column">
+								<h4><?php _e( 'Administration Tools', 'buddypress' ); ?></h4>
+								<ul>
+									<?php if ( bp_is_active( 'members' ) ) : ?>
+										<li><?php printf( '<a href="%s" class="welcome-icon welcome-add-page">' . __( 'Add User Profile Fields', 'buddypress' ) . '</a>', bp_get_admin_url( add_query_arg( array( 'page' => 'bp-profile-setup' ), 'users.php' ) ) ); ?></li>
+									<?php endif; ?>
+									<li><?php printf( '<a href="%s" class="welcome-icon welcome-add-page">' . __( 'Manage User Signups', 'buddypress' ) . '</a>', bp_get_admin_url( add_query_arg( array( 'page' => 'bp-signups' ), 'users.php' ) ) ); ?></li>
+									<?php if ( bp_is_active( 'activity' ) ) : ?>
+										<li><?php printf( '<a href="%s" class="welcome-icon welcome-add-page">' . __( 'Moderate Activity Streams', 'buddypress' ) . '</a>', bp_get_admin_url( add_query_arg( array( 'page' => 'bp-activity' ), 'admin.php' ) ) ); ?></li>
+									<?php endif; ?>
+									<?php if ( bp_is_active( 'groups' ) ) : ?>
+										<li><?php printf( '<a href="%s" class="welcome-icon welcome-add-page">' . __( 'Manage Groups', 'buddypress' ) . '</a>', bp_get_admin_url( add_query_arg( array( 'page' => 'bp-groups' ), 'admin.php' ) ) ); ?></li>
+									<?php endif; ?>
+									<li><?php printf( '<a href="%s" class="welcome-icon welcome-add-page">' . __( 'Repair Data', 'buddypress' ) . '</a>', bp_get_admin_url( add_query_arg( array( 'page' => 'bp-tools' ), 'tools.php' ) ) ); ?>
+									</li>
+								</ul>
+							</div>
+							<div class="welcome-panel-column welcome-panel-last">
+								<h4><?php _e( 'Community and Support', 'buddypress'  ); ?></h4>
+								<p class="welcome-icon welcome-learn-more" style="margin-right:10px"><?php _e( 'Looking for help? The <a href="http://codex.buddypress.org/">BuddyPress Codex</a> has you covered.', 'buddypress' ) ?></p> 
+								<p class="welcome-icon welcome-learn-more" style="margin-right:10px"><?php _e( 'Can&#8217;t find what you need? Stop by <a href="http://buddypress.org/support/">our support forums</a>, where active BuddyPress users and developers are waiting to share tips and more.', 'buddypress' ) ?></p>
+							</div>
+						</div>
+					</div>
 				</div>
-				<hr />
 
 			<?php endif; ?>
 
+			<hr />
+
 			<div class="changelog">
-				<h2 class="about-headline-callout"><?php _e( 'Performance Improvements', 'buddypress' ); ?></h2>
-				<img class="about-overview-img" src="<?php echo $image_base ?>performance.png" alt="Performance improvements in BP 2.0" />
-				<p><?php esc_html_e( 'Whether your community has tens of members or tens of thousands, we think the performance improvements in BuddyPress 2.0 will knock your socks off. We&#8217;ve slashed our memory footprint and query overhead across the board, with a special focus on the Activity and Members components.', 'buddypress' ) ?></p>
-			</div>
+				<h2 class="about-headline-callout"><?php _e( 'Revamped @mentions Interface', 'buddypress' ); ?></h2>
+				<p><?php _e( 'Forget the old days of trying to remember someone&#8217;s username when you want to @mention them in a conversation! With BuddyPress 2.1, type a <code>@</code> when leaving a status update or commenting on an activity item or blog post, and the new suggestions panel will open.', 'buddypress' ) ?></p>
+				<p style="text-align: center"><img src="<?php echo esc_url( buddypress()->plugin_url . 'bp-core/admin/images/mentions.gif' ); ?>" alt="<?php esc_attr_e( 'Demo of at-mentions feature', 'buddypress' ); ?>" style="margin-bottom: 20px"></p>
+ 			</div>
 
 			<hr />
 
 			<div class="changelog">
-				<h2 class="about-headline-callout"><?php _e( 'New Administrative Tools', 'buddypress' ); ?></h2>
-
-				<div class="feature-section col two-col">
-					<div>
-						<h4><?php esc_html_e( 'Extended Profiles in Admin', 'buddypress' ); ?></h4>
-						<p><?php esc_html_e( 'Site administrators can edit members&#8217; xProfile data at Dashboard > Users > Extended Profiles.', 'buddypress' ); ?></p>
-						<img src="<?php echo $image_base ?>admin-xprofile.jpg" style="width:90%" />
-					</div>
+				<h2 class="about-headline-callout"><?php _e( 'Continuous Improvement', 'buddypress' ); ?></h2>
 
-					<div class="last-feature">
-						<h4><?php esc_html_e( 'Registration Management', 'buddypress' ); ?></h4>
-						<p><?php esc_html_e( 'Perform common tasks with pending signups - including resending activation emails and manually activating accounts - on the new Pending tab of Dashboard > Users.', 'buddypress' ); ?></p>
-						<img src="<?php echo $image_base ?>users-pending.jpg" style="width:90%" />
+				<div class="feature-section col three-col">
+					<div class="col-1">
+						<h4><?php esc_html_e( 'New Profile Field Type: URL', 'buddypress' ); ?></h4>
+						<p><?php esc_html_e( 'Built to hold the address of another website, this new field type automatically creates a link to that site.', 'buddypress' ); ?></p>
 					</div>
-				</div>
 
-				<div class="feature-section col two-col">
-					<div>
-						<h4><?php esc_html_e( 'BuddyPress Repair Tools', 'buddypress' ); ?></h4>
-						<p><?php esc_html_e( 'Dashboard > Tools > BuddyPress contains a number of tools for correcting data that occasionally gets out of sync on BP installs.', 'buddypress' ); ?></p>
-						<img src="<?php echo $image_base ?>tools-buddypress.jpg" style="width:90%" />
+					<div class="col-2">
+						<h4><?php esc_html_e( 'Awesome Translations', 'buddypress' ); ?></h4>
+						<p><?php esc_html_e( 'BuddyPress supports high-quality translations that are automatically fetched by WordPress. Many thanks to our translation volunteers for making this possible.', 'buddypress' ); ?></p>
 					</div>
 
-					<div class="feature-section col two-col">
-						<h4><?php esc_html_e( 'Mark Spammers in Admin', 'buddypress' ); ?></h4>
-						<p><?php esc_html_e( 'Admins on non-Multisite installations can now perform spam actions from Dashboard > Users > All Users.', 'buddypress' ); ?></p>
-						<img src="<?php echo $image_base ?>user-mark-spam.jpg" style="width:90%" />
+					<div class="col-3 last-feature">
+						<h4><?php esc_html_e( 'Performance Improvements', 'buddypress' ); ?></h4>
+						<p><?php _e( 'Like we do with every release, we&#8217ve made further optimizations to increase BuddyPress&#8217 performance and reduce its query overhead.', 'buddypress' ); ?></p>
 					</div>
 				</div>
-
 			</div>
 
 			<hr />
 
 			<div class="changelog">
-				<h2 class="about-headline-callout"><?php esc_html_e( 'A More Dynamic Activity Stream', 'buddypress' ); ?></h2>
+				<h2 class="about-headline-callout"><?php esc_html_e( 'Enhancements for Plugin &amp; Theme Developers', 'buddypress' ); ?></h2>
 				<div class="feature-section col two-col">
-					<div>
-						<p><?php esc_html_e( 'Spend a lot of time viewing the activity stream? BuddyPress 2.0 automatically lets you know when new items are waiting to be loaded.', 'buddypress' ); ?></p>
-
-						<p><?php esc_html_e( 'The activity stream is better integrated with blog posts, too. Comment on a blog post, and an activity item is posted. Comment on a blog-related activity item, and a blog comment is posted. No more worrying about fractured conversations.', 'buddypress' ) ?></p>
-
-						<p><?php esc_html_e( 'We&#8217;ve also reworked the way that phrases like "Boone posted an update" are handled, so that they&#8217;re always up-to-date and always translatable.', 'buddypress' ) ?></p>
+					<div class="col-1">
+						<p><?php _e( 'If you&#8217re a plugin developer, or make custom themes, or want to contribute back to the BuddyPress project, here&#8217s what you should know about this release:', 'buddypress' ); ?></p>
+						<p><?php _e( 'If you&#8217ve used BuddyPress for a very long time, you might remember the <em>BuddyBar</em>; it was our toolbar before WordPress had its own toolbar. We started to deprecate it in BuddyPress 1.6. It is now formally deprecated, which means you should not use it for new sites.', 'buddypress' ); ?></p>
+						<p>
+							<?php printf(
+								__( 'The classic <a href="%s">BP Default theme has moved to Github</a>. We moved it because BuddyPress development is now focused on our <a href="%s">theme compatibility</a> templates, which were introduced in BuddyPress 1.7. Don&#8217t worry, BP-Default is still bundled with BuddyPress releases.', 'buddypress' ),
+								esc_url( 'https://github.com/buddypress/BP-Default' ),
+								esc_url( 'http://codex.buddypress.org/themes/theme-compatibility-1-7/a-quick-look-at-1-7-theme-compatibility/' )
+							); ?>
+						</p>
+						<p>
+							<?php
+							/* translators: don't translate the insides of the <code> block */
+							_e( 'In BuddyPress 2.0, we added a new <code>BP_XProfile_Field_Type</code> API for managing profile field types. In this release, we&#8217ve added a new <code>bp_core_get_suggestions</code> API which powers our new @mentions interface. Both are cool, and are worth checking out.', 'buddypress' );
+							?>
+						</p>
 					</div>
 
-					<div class="feature-section col two-col">
-						<img src="<?php echo $image_base ?>load-newest.jpg" style="width:90%" />
+					<div class="col-2 last-feature">
+						<p><?php esc_html_e( 'Other interesting changes:', 'buddypress' ); ?>
+
+						<ul>
+							<li>
+								<?php
+								/* translators: don't translate the insides of the <code> block */
+								_e( 'In <code>BP_Group_Extension</code>, the <code>visibility</code> and <code>enable_nav_item</code> properties have been phased out in favor of new <code>access</code> and <code>show_tab</code> parameters.', 'buddypress' );
+								?>
+							</li>
+							<li>
+								<?php
+								/* translators: don't translate the insides of the <code> block */
+								_e( 'A new <code>group_activity</code> sort order has been added for Groups queries, to let you query for recently active members.', 'buddypress' );
+								?>
+							</li>
+							<li>
+								<?php
+								/* translators: don't translate the insides of the <code> block */
+								_e( 'Extra CSS classes have been added to Profile Field visibility field elements, allowing greater CSS customization.', 'buddypress' );
+								?>
+							</li>
+							<li>
+								<?php
+								/* translators: don't translate the insides of the <code> block */
+								_e( 'A <code>no_access_url</code> parameter has been added to <code>bp_core_new_subnav_item()</code>. This allows you to set the URL that users are redirected to when they do not have permission to access a sub-navigation item.', 'buddypress' );
+								?>
+							</li>
+							<li>
+								<?php
+								/* translators: don't translate the insides of the <code> block */
+								_e( 'When making searches with <code>BP_User_Query</code>, a new <code>search_wildcard</code> parameter gives you finer control over how the search SQL is constructed.', 'buddypress' );
+								?>
+							</li>
+	
+
+							<li><?php printf( __( '<a href="%s">&hellip;and lots more!</a>', 'buddypress' ), 'https://codex.buddypress.org/releases/version-2-1' ); ?></li>
+						</ul>
 					</div>
 				</div>
 			</div>
-
-			<hr />
-
-			<div class="changelog">
-				<h2 class="about-headline-callout"><?php esc_html_e( 'Developer Tools', 'buddypress' ); ?></h2>
-
-				<p><?php esc_html_e( 'BuddyPress 2.0 is full of new and improved tools for the theme and plugin developer. A few highlights:', 'buddypress' ) ?></p>
-					<ul>
-						<li><?php _e( 'The <code>BP_XProfile_Field_Type</code> class makes it a breeze to create new xProfile field types with custom display callbacks, validation, and more.', 'buddypress' ); ?></li>
-						 <li><?php _e( 'Major improvements have taken place with respect to object caching throughout BuddyPress. If you use Memcached, APC, or some other persistent object caching backend on your BuddyPress site, you should notice huge performance boosts.', 'buddypress' ); ?></li>
-						 <li><?php _e( 'Our internal metadata libraries have been rewritten to use WP&#8217;s <code>add_metadata()</code>, <code>update_metadata()</code>, and so on. This means greater consistency and parity between the components when storing and retrieving BuddyPress metadata.', 'buddypress' ); ?></li>
-						 <li><?php printf( __( '<a href="%s">&hellip;and lots more!</a>', 'buddypress' ), 'http://codex.buddypress.org/releases/version-2-0' ); ?></li>
-					</ul>
-				</div>
-
-				<hr />
-
-				<?php if ( current_user_can( $this->capability ) ) :?>
-					<div class="return-to-dashboard">
-						<a href="<?php echo esc_url( bp_get_admin_url( add_query_arg( array( 'page' => 'bp-components' ), $this->settings_page ) ) ); ?>"><?php _e( 'Go to the BuddyPress Settings page', 'buddypress' ); ?></a>
-					</div>
-				<?php endif ;?>
-
-			</div>
-
 		<?php
 	}
 
@@ -647,18 +677,18 @@ class BP_Admin {
 			<h1><?php printf( __( 'Welcome to BuddyPress %s', 'buddypress' ), $display_version ); ?></h1>
 			<div class="about-text">
 				<?php if ( $is_new_install ) : ?>
-					<?php printf( __( 'It&#8217;s a great time to use BuddyPress! With a focus on speed, admin tools, and developer enhancements, %s is our leanest and most powerful version yet.', 'buddypress' ), $display_version ); ?>
+					<?php printf( __( 'Thank you for installing BuddyPress! BuddyPress %s is our most streamlined and easy-to-use release to date, and we think you&#8217;re going to love it.', 'buddypress' ), $display_version ); ?>
 				<?php else : ?>
-					<?php printf( __( 'Thanks for updating! With a focus on speed, admin tools, and developer enhancements, BuddyPress %s is our leanest and most powerful version yet.', 'buddypress' ), $display_version ); ?>
+					<?php printf( __( 'Howdy. BuddyPress %s is our most streamlined and easy-to-use release to date, and we think you&#8217;re going to love it.', 'buddypress' ), $display_version ); ?>
 				<?php endif; ?>
 			</div>
 
 			<div class="bp-badge"></div>
 
 			<h2 class="nav-tab-wrapper">
-				<a href="<?php echo esc_url( bp_get_admin_url( add_query_arg( array( 'page' => 'bp-about' ), 'index.php' ) ) ); ?>" class="nav-tab">
+				<a class="nav-tab" href="<?php echo esc_url( bp_get_admin_url( add_query_arg( array( 'page' => 'bp-about' ), 'index.php' ) ) ); ?>">
 					<?php _e( 'What&#8217;s New', 'buddypress' ); ?>
-				</a><a href="<?php echo esc_url( bp_get_admin_url( add_query_arg( array( 'page' => 'bp-credits' ), 'index.php' ) ) ); ?>" class="nav-tab nav-tab-active">
+				</a><a class="nav-tab nav-tab-active" href="<?php echo esc_url( bp_get_admin_url( add_query_arg( array( 'page' => 'bp-credits' ), 'index.php' ) ) ); ?>">
 					<?php _e( 'Credits', 'buddypress' ); ?>
 				</a>
 			</h2>
@@ -713,59 +743,73 @@ class BP_Admin {
 					<a href="http://profiles.wordpress.org/henry.wright"><img src="http://0.gravatar.com/avatar/0da2f1a9340d6af196b870f6c107a248?s=60" class="gravatar" alt="Henry Wright" /></a>
 					<a class="web" href="http://profiles.wordpress.org/henry.wright">Henry Wright</a>
 				</li>
+				<li class="wp-person" id="wp-person-danbp">
+					<a href="http://profiles.wordpress.org/danbp"><img src="http://0.gravatar.com/avatar/0deae2e7003027fbf153500cd3fa5501?s=60" class="gravatar" alt="danbp" /></a>
+					<a class="web" href="http://profiles.wordpress.org/danbp">danbp</a>
+				</li>
+				<li class="wp-person" id="wp-person-shanebp">
+					<a href="http://profiles.wordpress.org/shanebp"><img src="http://0.gravatar.com/avatar/ffd294ab5833ba14aaf175f9acc71cc4?s=60" class="gravatar" alt="shanebp" /></a>
+					<a class="web" href="http://profiles.wordpress.org/shanebp">shanebp</a>
+				</li>
+				<li class="wp-person" id="wp-person-netweb">
+					<a href="http://profiles.wordpress.org/netweb"><img src="http://0.gravatar.com/avatar/97e1620b501da675315ba7cfb740e80f?s=60" class="gravatar" alt="Stephen Edgar" /></a>
+					<a class="web" href="http://profiles.wordpress.org/netweb">Stephen Edgar</a>
+				</li>
 			</ul>
 
-			<h4 class="wp-people-group"><?php _e( 'Contributors to BuddyPress 2.0', 'buddypress' ); ?></h4>
+			<h4 class="wp-people-group"><?php printf( __( 'Contributors to BuddyPress %s', 'buddypress' ), $display_version ); ?></h4>
 			<p class="wp-credits-list">
-				<a href="https://profiles.wordpress.org/boonebgorges/">boonebgorges</a>,
-				<a href="https://profiles.wordpress.org/Bowromir/">Bowromir</a>,
-				<a href="https://profiles.wordpress.org/burakali/">burakali</a>,
-				<a href="https://profiles.wordpress.org/chouf1/">chouf1</a>,
-				<a href="https://profiles.wordpress.org/cmmarslender/">cmmarslender</a>,
+				<a href="https://profiles.wordpress.org/adamt19/">adamt19</a>,
+				<a href="https://profiles.wordpress.org/Viper007Bond/">Alex Mills (Viper007Bond)</a>,
+				<a href="https://profiles.wordpress.org/allendav/">allendav</a>,
+				<a href="https://profiles.wordpress.org/alternatekev/">alternatekev</a>,
+				<a href="https://profiles.wordpress.org/automattic/">Automattic</a>,
+				<a href="https://profiles.wordpress.org/beaulebens/">Beau Lebens (beaulebens)</a>,
+				<a href="https://profiles.wordpress.org/boonebgorges/">Boone B Gorges (boonebgorges)</a>,
+				<a href="https://profiles.wordpress.org/williamsba1/">Brad Williams (williamsba1)</a>,
+				<a href="https://profiles.wordpress.org/sbrajesh/">Brajesh Singh (sbrajesh)</a>,
 				<a href="https://profiles.wordpress.org/danbp/">danbp</a>,
-				<a href="https://profiles.wordpress.org/dcavins/">dcavins</a>,
-				<a href="https://profiles.wordpress.org/Denis-de-Bernardy/">Denis-de-Bernardy</a>,
-				<a href="https://profiles.wordpress.org/DJPaul/">DJPaul</a>,
-				<a href="https://profiles.wordpress.org/ericlewis/">ericlewis</a>,
-				<a href="https://profiles.wordpress.org/glyndavidson/">glyndavidson</a>,
-				<a href="https://profiles.wordpress.org/graham-washbrook/">graham-washbrook</a>,
-				<a href="https://profiles.wordpress.org/henrywright/">henrywright</a>,
-				<a href="https://profiles.wordpress.org/henry.wright/">henry.wright</a>,
-				<a href="https://profiles.wordpress.org/hnla/">hnla</a>,
-				<a href="https://profiles.wordpress.org/imath/">imath</a>,
-				<a href="https://profiles.wordpress.org/johnjamesjacoby/">johnjamesjacoby</a>,
-				<a href="https://profiles.wordpress.org/karmatosed/">karmatosed</a>,
+				<a href="https://profiles.wordpress.org/dcavins/">David Cavins (dcavins)</a>,
+				<a href="https://profiles.wordpress.org/ebellempire/">Erin B. (ebellempire)</a>,
+				<a href="https://profiles.wordpress.org/esroyo/">esroyo</a>,
+				<a href="https://profiles.wordpress.org/godavid33">godavid33</a>,
+				<a href="http://profiles.wordpress.org/henry.wright">Henry Wright (henry.wright)</a>,
+				<a href="https://profiles.wordpress.org/hnla/">Hugo (hnla)</a>,
+				<a href="https://profiles.wordpress.org/imath/">Mathieu Viet (imath)</a>,
+				<a href="https://profiles.wordpress.org/johnjamesjacoby/">John James Jacoby (johnjamesjacoby)</a>,
+				<a href="https://profiles.wordpress.org/jconti/">Jose Conti (jconti)</a>,
+				<a href="https://profiles.wordpress.org/jreeve/">jreeve</a>,
+				<a href="https://profiles.wordpress.org/Offereins">Laurens Offereins (Offereins)</a>
 				<a href="https://profiles.wordpress.org/lenasterg/">lenasterg</a>,
-				<a href="https://profiles.wordpress.org/MacPresss/">MacPresss</a>,
-				<a href="https://profiles.wordpress.org/markoheijnen/">markoheijnen</a>,
-				<a href="https://profiles.wordpress.org/megainfo/">megainfo</a>,
-				<a href="https://profiles.wordpress.org/modemlooper/">modemlooper</a>,
-				<a href="https://profiles.wordpress.org/mpa4hu/">mpa4hu</a>,
+				<a href="https://profiles.wordpress.org/mercime/">mercime</a>,
+				<a href="https://profiles.wordpress.org/tw2113/">Michael Beckwith (tw2113)</a>,
+				<a href="https://profiles.wordpress.org/milesstewart88/">Miles Stewart (milesstewart88)</a>,
 				<a href="https://profiles.wordpress.org/needle/">needle</a>,
-				<a href="https://profiles.wordpress.org/netweb/">netweb</a>,
-				<a href="https://profiles.wordpress.org/ninnypants/">ninnypants</a>,
-				Pietro Oliva,
-				<a href="https://profiles.wordpress.org/pross/">pross</a>,
+				<a href="https://profiles.wordpress.org/sooskriszta/">OC2PS (sooskriszta)</a>,
+				<a href="https://profiles.wordpress.org/DJPaul/">Paul Gibbs (DJPaul)</a>,
 				<a href="https://profiles.wordpress.org/r-a-y/">r-a-y</a>,
-				<a href="https://profiles.wordpress.org/reactuate/">reactuate</a>,
-				<a href="https://profiles.wordpress.org/rodrigorznd/">rodrigorznd</a>,
-				<a href="https://profiles.wordpress.org/rogercoathup/">rogercoathup</a>,
-				<a href="https://profiles.wordpress.org/rzen/">rzen</a>,
-				<a href="https://profiles.wordpress.org/SergeyBiryukov/">SergeyBiryukov</a>,
+				<a href="https://profiles.wordpress.org/rogercoathup/">Roger Coathup (rogercoathup)</a>,
+				<a href="https://profiles.wordpress.org/pollyplummer/">Sarah Gooding (pollyplummer)</a>,
+				<a href="https://profiles.wordpress.org/SGr33n/">Sergio De Falco (SGr33n)</a>,
 				<a href="https://profiles.wordpress.org/shanebp/">shanebp</a>,
-				<a href="https://profiles.wordpress.org/SlothLoveChunk/">SlothLoveChunk</a>,
-				<a href="https://profiles.wordpress.org/StijnDeWitt/">StijnDeWitt</a>,
-				<a href="https://profiles.wordpress.org/terraling/">terraling</a>,
-				<a href="https://profiles.wordpress.org/trishasalas/">trishasalas</a>,
-				<a href="https://profiles.wordpress.org/tw2113/">tw2113</a>,
-				<a href="https://profiles.wordpress.org/vanillalounge/">vanillalounge</a>.
+				<a href="https://profiles.wordpress.org/slaFFik/">Slava UA (slaFFik)</a>,
+				<a href="https://profiles.wordpress.org/netweb/">Stephen Edgar (netweb)</a>,
+				<a href="https://profiles.wordpress.org/karmatosed/">Tammie (karmatosed)</a>,
+				<a href="https://profiles.wordpress.org/tomdxw/">tomdxw</a>,
+				<a href="https://profiles.wordpress.org/treyhunner/">treyhunner</a>,
+				<a href="https://profiles.wordpress.org/ubernaut/">ubernaut</a>,
+				<a href="https://profiles.wordpress.org/wbajzek/">wbajzek</a>,
+				<a href="https://profiles.wordpress.org/WCUADD/">WCUADD</a>,
+				<a href="https://profiles.wordpress.org/wpdennis/">wpdennis</a>,
+				<a href="https://profiles.wordpress.org/wolfhoundjesse/">wolfhoundjesse</a>.
 			</p>
 
-			<?php if ( current_user_can( $this->capability ) ) :?>
-				<div class="return-to-dashboard">
-					<a href="<?php echo esc_url( bp_get_admin_url( add_query_arg( array( 'page' => 'bp-components' ), $this->settings_page ) ) ); ?>"><?php _e( 'Go to the BuddyPress Settings page', 'buddypress' ); ?></a>
-				</div>
-			<?php endif;?>
+			<h4 class="wp-people-group"><?php _e( 'External Libraries', 'buddypress' ); ?></h4>
+			<p class="wp-credits-list">
+				<a href="https://github.com/ichord/At.js">At.js</a>,
+				<a href="https://github.com/ichord/Caret.js">Caret.js</a>,
+				<a href="https://github.com/carhartl/jquery-cookie">jquery.cookie</a>.
+			</p>
 
 		</div>
 
@@ -782,5 +826,35 @@ endif; // class_exists check
  * @uses BP_Admin
  */
 function bp_admin() {
-       buddypress()->admin = new BP_Admin();
+	buddypress()->admin = new BP_Admin();
+	return;
+
+
+	// These are strings we may use to describe maintenance/security releases, where we aim for no new strings.
+
+	_n_noop( 'Maintenance Release', 'Maintenance Releases', 'buddypress' );
+	_n_noop( 'Security Release', 'Security Releases', 'buddypress' );
+	_n_noop( 'Maintenance and Security Release', 'Maintenance and Security Releases', 'buddypress' );
+
+	/* translators: 1: WordPress version number. */
+	_n_noop( '<strong>Version %1$s</strong> addressed a security issue.',
+	         '<strong>Version %1$s</strong> addressed some security issues.',
+	         'buddypress' );
+
+	/* translators: 1: WordPress version number, 2: plural number of bugs. */
+	_n_noop( '<strong>Version %1$s</strong> addressed %2$s bug.',
+	         '<strong>Version %1$s</strong> addressed %2$s bugs.',
+	         'buddypress' );
+
+	/* translators: 1: WordPress version number, 2: plural number of bugs. Singular security issue. */
+	_n_noop( '<strong>Version %1$s</strong> addressed a security issue and fixed %2$s bug.',
+	         '<strong>Version %1$s</strong> addressed a security issue and fixed %2$s bugs.',
+	         'buddypress' );
+
+	/* translators: 1: WordPress version number, 2: plural number of bugs. More than one security issue. */
+	_n_noop( '<strong>Version %1$s</strong> addressed some security issues and fixed %2$s bug.',
+	         '<strong>Version %1$s</strong> addressed some security issues and fixed %2$s bugs.',
+	         'buddypress' );
+
+	__( 'For more information, see <a href="%s">the release notes</a>.', 'buddypress' );
 }
diff --git a/wp-content/plugins/buddypress/bp-core/bp-core-adminbar.php b/wp-content/plugins/buddypress/bp-core/bp-core-adminbar.php
index f92c39699..a875c49bc 100644
--- a/wp-content/plugins/buddypress/bp-core/bp-core-adminbar.php
+++ b/wp-content/plugins/buddypress/bp-core/bp-core-adminbar.php
@@ -39,6 +39,12 @@ function bp_admin_bar_my_account_root() {
 				'class' => 'ab-sub-secondary'
 			)
 		) );
+
+		// Remove 'Edit' post link as it's not applicable to BP
+		// Remove when https://core.trac.wordpress.org/ticket/29538 is addressed
+		if ( is_buddypress() ) {
+			$wp_admin_bar->remove_node( 'edit' );
+		}
 	}
 }
 add_action( 'admin_bar_menu', 'bp_admin_bar_my_account_root', 100 );
@@ -70,6 +76,7 @@ function bp_core_load_admin_bar() {
 
 	// Hide the WordPress Toolbar and show the BuddyBar
 	if ( ! bp_use_wp_admin_bar() ) {
+		_doing_it_wrong( __FUNCTION__, __( 'The BuddyBar is no longer supported. Please migrate to the WordPress toolbar as soon as possible.', 'buddypress' ), '2.1.0' );
 
 		// Keep the WP Toolbar from loading
 		show_admin_bar( false );
@@ -89,23 +96,35 @@ function bp_core_load_admin_bar() {
 add_action( 'init', 'bp_core_load_admin_bar', 9 );
 
 /**
- * Handle the Toolbar CSS.
+ * Handle the enqueuing of toolbar CSS.
+ *
+ * This function exists mostly for backwards compatibility reasons, so anyone
+ * previously unhooking this function can continue to do so. It's hooked to
+ * the `bp_init` action in `bp-core-actions.php`.
  *
  * @since BuddyPress (1.5.0)
  */
 function bp_core_load_admin_bar_css() {
-	global $wp_styles;
-
-	if ( ! bp_use_wp_admin_bar() || ! is_admin_bar_showing() )
-		return;
+	add_action( 'bp_enqueue_scripts',       'bp_core_enqueue_admin_bar_css', 1 );
+	add_action( 'bp_admin_enqueue_scripts', 'bp_core_enqueue_admin_bar_css', 1 );
+}
 
-	$min = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
+/**
+ * Enqueue supplemental WordPress Toolbar styling
+ *
+ * @since BuddyPress (2.1.0)
+ *
+ * @see bp_core_register_common_styles()
+ * @see bp_core_load_admin_bar_css()
+ */
+function bp_core_enqueue_admin_bar_css() {
 
-	// Toolbar styles
-	$stylesheet = buddypress()->plugin_url . "bp-core/css/admin-bar{$min}.css";
+	// Bail if not using WordPress's admin bar or it's not showing on this
+	// page request.
+	if ( ! bp_use_wp_admin_bar() || ! is_admin_bar_showing() ) {
+		return;
+	}
 
-	wp_enqueue_style( 'bp-admin-bar', apply_filters( 'bp_core_admin_bar_css', $stylesheet ), array( 'admin-bar' ), bp_get_version() );
-	$wp_styles->add_data( 'bp-admin-bar', 'rtl', true );
-	if ( $min )
-		$wp_styles->add_data( 'bp-admin-bar', 'suffix', $min );
-}
+	// Enqueue the additional adminbar css
+	wp_enqueue_style( 'bp-admin-bar' );
+}
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-core/bp-core-avatars.php b/wp-content/plugins/buddypress/bp-core/bp-core-avatars.php
index 93e778107..799213200 100644
--- a/wp-content/plugins/buddypress/bp-core/bp-core-avatars.php
+++ b/wp-content/plugins/buddypress/bp-core/bp-core-avatars.php
@@ -300,7 +300,7 @@ function bp_core_fetch_avatar( $args = '' ) {
 
 	// Get a fallback for the 'alt' parameter
 	if ( empty( $alt ) )
-		$alt = __( 'Avatar Image', 'buddypress' );
+		$alt = __( 'Profile Photo', 'buddypress' );
 
 	$html_alt = ' alt="' . esc_attr( $alt ) . '"';
 
@@ -670,6 +670,15 @@ function bp_core_avatar_handle_upload( $file, $upload_dir_filter ) {
 		return false;
 	}
 
+	// If the uploaded image is smaller than the "full" dimensions, throw
+	// a warning
+	$uploaded_image = @getimagesize( bp_core_avatar_upload_path() . buddypress()->avatar_admin->image->dir );
+	$full_width     = bp_core_avatar_full_width();
+	$full_height    = bp_core_avatar_full_height();
+	if ( isset( $uploaded_image[0] ) && $uploaded_image[0] < $full_width || $uploaded_image[1] < $full_height ) {
+		bp_core_add_message( sprintf( __( 'You have selected an image that is smaller than recommended. For best results, upload a picture larger than %d x %d pixels.', 'buddypress' ), $full_width, $full_height ), 'error' );
+	}
+
 	// Set the url value for the image
 	$bp->avatar_admin->image->url = bp_core_avatar_url() . $bp->avatar_admin->image->dir;
 
@@ -822,7 +831,11 @@ function bp_core_fetch_avatar_filter( $avatar, $user, $size, $default, $alt = ''
 
 	// If passed an object, assume $user->user_id
 	if ( is_object( $user ) ) {
-		$id = $user->user_id;
+		if ( isset( $user->user_id ) ) {
+			$id = $user->user_id;
+		} else {
+			$id = $user->ID;
+		}
 
 	// If passed a number, assume it was a $user_id
 	} else if ( is_numeric( $user ) ) {
@@ -840,7 +853,7 @@ function bp_core_fetch_avatar_filter( $avatar, $user, $size, $default, $alt = ''
 
 	// Image alt tag
 	if ( empty( $alt ) ) {
-		$alt = sprintf( __( 'Avatar of %s', 'buddypress' ), bp_core_get_user_displayname( $id ) );
+		$alt = sprintf( __( 'Profile photo of %s', 'buddypress' ), bp_core_get_user_displayname( $id ) );
 	}
 
 	// Use the 'thumb' type, unless the requested width is bigger than
diff --git a/wp-content/plugins/buddypress/bp-core/bp-core-buddybar.php b/wp-content/plugins/buddypress/bp-core/bp-core-buddybar.php
index ed5edf36c..8a675053c 100644
--- a/wp-content/plugins/buddypress/bp-core/bp-core-buddybar.php
+++ b/wp-content/plugins/buddypress/bp-core/bp-core-buddybar.php
@@ -259,20 +259,20 @@ add_action( 'admin_head', 'bp_core_sort_nav_items' );
 function bp_core_new_subnav_item( $args = '' ) {
 	global $bp;
 
-	$defaults = array(
+	$r = wp_parse_args( $args, array(
 		'name'            => false, // Display name for the nav item
 		'slug'            => false, // URL slug for the nav item
 		'parent_slug'     => false, // URL slug of the parent nav item
 		'parent_url'      => false, // URL of the parent item
 		'item_css_id'     => false, // The CSS ID to apply to the HTML of the nav item
 		'user_has_access' => true,  // Can the logged in user see this nav item?
+		'no_access_url'   => '',
 		'site_admin_only' => false, // Can only site admins see this nav item?
 		'position'        => 90,    // Index of where this nav item should be positioned
 		'screen_function' => false, // The name of the function to run when clicked
 		'link'            => ''     // The link for the subnav item; optional, not usually required.
-	);
+	) );
 
-	$r = wp_parse_args( $args, $defaults );
 	extract( $r, EXTR_SKIP );
 
 	// If we don't have the required info we need, don't create this subnav item
@@ -296,15 +296,17 @@ function bp_core_new_subnav_item( $args = '' ) {
 	if ( empty( $item_css_id ) )
 		$item_css_id = $slug;
 
-	$bp->bp_options_nav[$parent_slug][$slug] = array(
+	$subnav_item = array(
 		'name'            => $name,
 		'link'            => trailingslashit( $link ),
 		'slug'            => $slug,
 		'css_id'          => $item_css_id,
 		'position'        => $position,
 		'user_has_access' => $user_has_access,
+		'no_access_url'   => $no_access_url,
 		'screen_function' => &$screen_function
 	);
+	$bp->bp_options_nav[$parent_slug][$slug] = $subnav_item;
 
 	/**
 	 * The last step is to hook the screen function for the added subnav item. But this only
@@ -330,46 +332,104 @@ function bp_core_new_subnav_item( $args = '' ) {
 	// If we *do* meet condition (2), then the added subnav item is currently being requested
 	if ( ( bp_current_action() && bp_is_current_action( $slug ) ) || ( bp_is_user() && ! bp_current_action() && ( $screen_function == $bp->bp_nav[$parent_slug]['screen_function'] ) ) ) {
 
-		// Before hooking the screen function, check user access
-		if ( !empty( $user_has_access ) ) {
-			// Add our screen hook if screen function is callable
-			if ( is_callable( $screen_function ) ) {
-				add_action( 'bp_screens', $screen_function, 3 );
-			}
+		$hooked = bp_core_maybe_hook_new_subnav_screen_function( $subnav_item );
+
+		// If redirect args have been returned, perform the redirect now
+		if ( ! empty( $hooked['status'] ) && 'failure' === $hooked['status'] && isset( $hooked['redirect_args'] ) ) {
+			bp_core_no_access( $hooked['redirect_args'] );
+		}
+	}
+}
+
+/**
+ * For a given subnav item, either hook the screen function or generate redirect arguments, as necessary.
+ *
+ * @since BuddyPress (2.1.0)
+ *
+ * @param array $subnav_item The subnav array added to bp_options_nav in
+ *        bp_core_new_subnav_item().
+ * @return array
+ */
+function bp_core_maybe_hook_new_subnav_screen_function( $subnav_item ) {
+	$retval = array(
+		'status' => '',
+	);
+
+	// User has access, so let's try to hook the display callback
+	if ( ! empty( $subnav_item['user_has_access'] ) ) {
+
+		// Screen function is invalid
+		if ( ! is_callable( $subnav_item['screen_function'] ) ) {
+			$retval['status'] = 'failure';
+
+		// Success - hook to bp_screens
 		} else {
+			add_action( 'bp_screens', $subnav_item['screen_function'], 3 );
+			$retval['status'] = 'success';
+		}
+
+	// User doesn't have access. Determine redirect arguments based on
+	// user status
+	} else {
+		$retval['status'] = 'failure';
+
+		if ( is_user_logged_in() ) {
 
-			// When the content is off-limits, we handle the situation
-			// differently depending on whether the current user is logged in
-			if ( is_user_logged_in() ) {
-				if ( !bp_is_my_profile() && empty( $bp->bp_nav[$bp->default_component]['show_for_displayed_user'] ) ) {
+			$bp = buddypress();
 
-					// This covers the edge case where the default component is
-					// a non-public tab, like 'messages'
+			// If a redirect URL has been passed to the subnav
+			// item, respect it
+			if ( ! empty( $subnav_item['no_access_url'] ) ) {
+				$message     = __( 'You do not have access to this page.', 'buddypress' );
+				$redirect_to = trailingslashit( $subnav_item['no_access_url'] );
+
+			// In the case of a user page, we try to assume a
+			// redirect URL
+			} else if ( bp_is_user() ) {
+
+				// Redirect to the displayed user's default
+				// component, as long as that component is
+				// publicly accessible.
+				if ( bp_is_my_profile() || ! empty( $bp->bp_nav[ $bp->default_component ]['show_for_displayed_user'] ) ) {
+					$message     = __( 'You do not have access to this page.', 'buddypress' );
+					$redirect_to = bp_displayed_user_domain();
+
+				// In some cases, the default tab is not accessible to
+				// the logged-in user. So we fall back on a tab that we
+				// know will be accessible.
+				} else {
+					// Try 'activity' first
 					if ( bp_is_active( 'activity' ) && isset( $bp->pages->activity ) ) {
 						$redirect_to = trailingslashit( bp_displayed_user_domain() . bp_get_activity_slug() );
+					// Then try 'profile'
 					} else {
 						$redirect_to = trailingslashit( bp_displayed_user_domain() . ( 'xprofile' == $bp->profile->id ? 'profile' : $bp->profile->id ) );
 					}
 
 					$message     = '';
-				} else {
-					$message     = __( 'You do not have access to this page.', 'buddypress' );
-					$redirect_to = bp_displayed_user_domain();
 				}
 
-				// Off-limits to this user. Throw an error and redirect to the displayed user's domain
-				bp_core_no_access( array(
-					'message'  => $message,
-					'root'     => $redirect_to,
-					'redirect' => false
-				) );
-
-			// Not logged in. Allow the user to log in, and attempt to redirect
+			// Fall back to the home page
 			} else {
-				bp_core_no_access();
+				$message     = __( 'You do not have access to this page.', 'buddypress' );
+				$redirect_to = bp_get_root_domain();
 			}
+
+			$retval['redirect_args'] = array(
+				'message'  => $message,
+				'root'     => $redirect_to,
+				'redirect' => false,
+			);
+
+		} else {
+			// When the user is logged out, pass an empty array
+			// This indicates that the default arguments should be
+			// used in bp_core_no_access()
+			$retval['redirect_args'] = array();
 		}
 	}
+
+	return $retval;
 }
 
 /**
@@ -496,175 +556,6 @@ function bp_core_reset_subnav_items( $parent_slug ) {
 	unset( $bp->bp_options_nav[$parent_slug] );
 }
 
-/** BuddyBar Template functions ***********************************************/
-
-/**
- * Wrapper function for rendering the BuddyBar.
- *
- * @return bool|null Returns false if the BuddyBar is disabled.
- */
-function bp_core_admin_bar() {
-	global $bp;
-
-	if ( defined( 'BP_DISABLE_ADMIN_BAR' ) && BP_DISABLE_ADMIN_BAR )
-		return false;
-
-	if ( (int) bp_get_option( 'hide-loggedout-adminbar' ) && !is_user_logged_in() )
-		return false;
-
-	$bp->doing_admin_bar = true;
-
-	echo '<div id="wp-admin-bar"><div class="padder">';
-
-	// **** Do bp-adminbar-logo Actions ********
-	do_action( 'bp_adminbar_logo' );
-
-	echo '<ul class="main-nav">';
-
-	// **** Do bp-adminbar-menus Actions ********
-	do_action( 'bp_adminbar_menus' );
-
-	echo '</ul>';
-	echo "</div></div><!-- #wp-admin-bar -->\n\n";
-
-	$bp->doing_admin_bar = false;
-}
-
-/**
- * Output the BuddyBar logo.
- */
-function bp_adminbar_logo() {
-	echo '<a href="' . bp_get_root_domain() . '" id="admin-bar-logo">' . get_blog_option( bp_get_root_blog_id(), 'blogname' ) . '</a>';
-}
-
-/**
- * Output the "Log In" and "Sign Up" names to the BuddyBar.
- *
- * Visible only to visitors who are not logged in.
- *
- * @return bool|null Returns false if the current user is logged in.
- */
-function bp_adminbar_login_menu() {
-
-	if ( is_user_logged_in() )
-		return false;
-
-	echo '<li class="bp-login no-arrow"><a href="' . wp_login_url() . '">' . __( 'Log In', 'buddypress' ) . '</a></li>';
-
-	// Show "Sign Up" link if user registrations are allowed
-	if ( bp_get_signup_allowed() )
-		echo '<li class="bp-signup no-arrow"><a href="' . bp_get_signup_page() . '">' . __( 'Sign Up', 'buddypress' ) . '</a></li>';
-}
-
-/**
- * Output the My Account BuddyBar menu.
- *
- * @return bool|null Returns false on failure.
- */
-function bp_adminbar_account_menu() {
-	global $bp;
-
-	if ( !$bp->bp_nav || !is_user_logged_in() )
-		return false;
-
-	echo '<li id="bp-adminbar-account-menu"><a href="' . bp_loggedin_user_domain() . '">';
-	echo __( 'My Account', 'buddypress' ) . '</a>';
-	echo '<ul>';
-
-	// Loop through each navigation item
-	$counter = 0;
-	foreach( (array) $bp->bp_nav as $nav_item ) {
-		$alt = ( 0 == $counter % 2 ) ? ' class="alt"' : '';
-
-		if ( -1 == $nav_item['position'] )
-			continue;
-
-		echo '<li' . $alt . '>';
-		echo '<a id="bp-admin-' . $nav_item['css_id'] . '" href="' . $nav_item['link'] . '">' . $nav_item['name'] . '</a>';
-
-		if ( isset( $bp->bp_options_nav[$nav_item['slug']] ) && is_array( $bp->bp_options_nav[$nav_item['slug']] ) ) {
-			echo '<ul>';
-			$sub_counter = 0;
-
-			foreach( (array) $bp->bp_options_nav[$nav_item['slug']] as $subnav_item ) {
-				$link = $subnav_item['link'];
-				$name = $subnav_item['name'];
-
-				if ( bp_displayed_user_domain() )
-					$link = str_replace( bp_displayed_user_domain(), bp_loggedin_user_domain(), $subnav_item['link'] );
-
-				if ( isset( $bp->displayed_user->userdata->user_login ) )
-					$name = str_replace( $bp->displayed_user->userdata->user_login, $bp->loggedin_user->userdata->user_login, $subnav_item['name'] );
-
-				$alt = ( 0 == $sub_counter % 2 ) ? ' class="alt"' : '';
-				echo '<li' . $alt . '><a id="bp-admin-' . $subnav_item['css_id'] . '" href="' . $link . '">' . $name . '</a></li>';
-				$sub_counter++;
-			}
-			echo '</ul>';
-		}
-
-		echo '</li>';
-
-		$counter++;
-	}
-
-	$alt = ( 0 == $counter % 2 ) ? ' class="alt"' : '';
-
-	echo '<li' . $alt . '><a id="bp-admin-logout" class="logout" href="' . wp_logout_url( home_url() ) . '">' . __( 'Log Out', 'buddypress' ) . '</a></li>';
-	echo '</ul>';
-	echo '</li>';
-}
-
-function bp_adminbar_thisblog_menu() {
-	if ( current_user_can( 'edit_posts' ) ) {
-		echo '<li id="bp-adminbar-thisblog-menu"><a href="' . admin_url() . '">';
-		_e( 'Dashboard', 'buddypress' );
-		echo '</a>';
-		echo '<ul>';
-
-		echo '<li class="alt"><a href="' . admin_url() . 'post-new.php">' . __( 'New Post', 'buddypress' ) . '</a></li>';
-		echo '<li><a href="' . admin_url() . 'edit.php">' . __( 'Manage Posts', 'buddypress' ) . '</a></li>';
-		echo '<li class="alt"><a href="' . admin_url() . 'edit-comments.php">' . __( 'Manage Comments', 'buddypress' ) . '</a></li>';
-
-		do_action( 'bp_adminbar_thisblog_items' );
-
-		echo '</ul>';
-		echo '</li>';
-	}
-}
-
-/**
- * Output the Random BuddyBar menu.
- *
- * Not visible for logged-in users.
- */
-function bp_adminbar_random_menu() {
-?>
-
-	<li class="align-right" id="bp-adminbar-visitrandom-menu">
-		<a href="#"><?php _e( 'Visit', 'buddypress' ) ?></a>
-		<ul class="random-list">
-			<li><a href="<?php echo trailingslashit( bp_get_root_domain() . '/' . bp_get_members_root_slug() ) . '?random-member' ?>" rel="nofollow"><?php _e( 'Random Member', 'buddypress' ) ?></a></li>
-
-			<?php if ( bp_is_active( 'groups' ) ) : ?>
-
-				<li class="alt"><a href="<?php echo trailingslashit( bp_get_root_domain() . '/' . bp_get_groups_root_slug() ) . '?random-group' ?>"  rel="nofollow"><?php _e( 'Random Group', 'buddypress' ) ?></a></li>
-
-			<?php endif; ?>
-
-			<?php if ( is_multisite() && bp_is_active( 'blogs' ) ) : ?>
-
-				<li><a href="<?php echo trailingslashit( bp_get_root_domain() . '/' . bp_get_blogs_root_slug() ) . '?random-blog' ?>"  rel="nofollow"><?php _e( 'Random Site', 'buddypress' ) ?></a></li>
-
-			<?php endif; ?>
-
-			<?php do_action( 'bp_adminbar_random_menu' ) ?>
-
-		</ul>
-	</li>
-
-	<?php
-}
 
 /**
  * Retrieve the Toolbar display preference of a user based on context.
@@ -687,27 +578,3 @@ function bp_get_admin_bar_pref( $context, $user = 0 ) {
 
 	return 'true' === $pref;
 }
-
-/**
- * Enqueue the BuddyBar CSS.
- */
-function bp_core_load_buddybar_css() {
-	global $wp_styles;
-
-	if ( bp_use_wp_admin_bar() || ( (int) bp_get_option( 'hide-loggedout-adminbar' ) && !is_user_logged_in() ) || ( defined( 'BP_DISABLE_ADMIN_BAR' ) && BP_DISABLE_ADMIN_BAR ) )
-		return;
-
-	$min = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
-
-	if ( file_exists( get_stylesheet_directory() . '/_inc/css/adminbar.css' ) ) { // Backwards compatibility
-		$stylesheet = get_stylesheet_directory_uri() . '/_inc/css/adminbar.css';
-	} else {
-		$stylesheet = buddypress()->plugin_url . "bp-core/css/buddybar{$min}.css";
-	}
-
-	wp_enqueue_style( 'bp-admin-bar', apply_filters( 'bp_core_buddybar_rtl_css', $stylesheet ), array(), bp_get_version() );
-	$wp_styles->add_data( 'bp-admin-bar', 'rtl', true );
-	if ( $min )
-		$wp_styles->add_data( 'bp-admin-bar', 'suffix', $min );
-}
-add_action( 'bp_init', 'bp_core_load_buddybar_css' );
diff --git a/wp-content/plugins/buddypress/bp-core/bp-core-caps.php b/wp-content/plugins/buddypress/bp-core/bp-core-caps.php
index 2ed693dd3..4c3679606 100644
--- a/wp-content/plugins/buddypress/bp-core/bp-core-caps.php
+++ b/wp-content/plugins/buddypress/bp-core/bp-core-caps.php
@@ -10,6 +10,33 @@
 // Exit if accessed directly
 if ( !defined( 'ABSPATH' ) ) exit;
 
+/**
+ * Return an array of roles from the currently loaded blog
+ *
+ * WordPress roles are dynamically flipped when calls to switch_to_blog() and
+ * restore_current_blog() are made, so we use and trust WordPress core to have
+ * loaded the correct results for us here. As enhancements are made to
+ * WordPresss's RBAC, so should our capability functions here.
+ *
+ * @since BuddyPress (2.1.0)
+ *
+ * @return array
+ */
+function bp_get_current_blog_roles() {
+	global $wp_roles;
+
+	// Sanity check on roles global variable
+	$roles = isset( $wp_roles->roles )
+		? $wp_roles->roles
+		: array();
+
+	// Apply WordPress core filter to editable roles
+	$roles = apply_filters( 'editable_roles', $roles );
+
+	// Return the editable roles
+	return apply_filters( 'bp_get_current_blog_roles', $roles, $wp_roles );
+}
+
 /**
  * Add capabilities to WordPress user roles.
  *
diff --git a/wp-content/plugins/buddypress/bp-core/bp-core-catchuri.php b/wp-content/plugins/buddypress/bp-core/bp-core-catchuri.php
index eaaa287c7..c9b6be565 100644
--- a/wp-content/plugins/buddypress/bp-core/bp-core-catchuri.php
+++ b/wp-content/plugins/buddypress/bp-core/bp-core-catchuri.php
@@ -340,39 +340,58 @@ function bp_core_enable_root_profiles() {
  * @return bool|null Returns false on failure.
  */
 function bp_core_load_template( $templates ) {
-	global $post, $bp, $wp_query, $wpdb;
+	global $wp_query;
 
-	// Determine if the root object WP page exists for this request
-	// note: get_page_by_path() breaks non-root pages
-	if ( !empty( $bp->unfiltered_uri_offset ) ) {
-		if ( !$page_exists = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM {$wpdb->posts} WHERE post_name = %s", $bp->unfiltered_uri[$bp->unfiltered_uri_offset] ) ) ) {
-			return false;
+	// check if BP page belongs to, or is a child of, a BP directory page
+	$page_id = false;
+	foreach ( (array) buddypress()->pages as $page ) {
+		if ( $page->name == buddypress()->unfiltered_uri[buddypress()->unfiltered_uri_offset] ) {
+			$page_id = $page->id;
+			break;
 		}
 	}
 
-	// Set the root object as the current wp_query-ied item
-	$object_id = 0;
-	foreach ( (array) $bp->pages as $page ) {
-		if ( $page->name == $bp->unfiltered_uri[$bp->unfiltered_uri_offset] ) {
-			$object_id = $page->id;
-		}
-	}
+	// Set up reset post args
+	$reset_post_args = array(
+		'is_404'      => true,
+		'post_status' => 'publish',
+	);
 
-	// Make the queried/post object an actual valid page
-	if ( !empty( $object_id ) ) {
-		$wp_query->queried_object    = get_post( $object_id );
-		$wp_query->queried_object_id = $object_id;
-		$post                        = $wp_query->queried_object;
+	// BP page exists - fill in the $wp_query->post object
+	//
+	// bp_theme_compat_reset_post() looks at the $wp_query->post object to fill in
+	// the post globals
+	if ( ! empty( $page_id ) ) {
+		$wp_query->post = get_post( $page_id );
+		$reset_post_args['ID'] = $page_id;
+	} else {
+		$reset_post_args['ID'] = 0;
 	}
 
+	// Reset the post
+	bp_theme_compat_reset_post( $reset_post_args );
+
+	// Set theme compat to false since the reset post function automatically sets
+	// theme compat to true
+	bp_set_theme_compat_active( false );
+
 	// Fetch each template and add the php suffix
 	$filtered_templates = array();
 	foreach ( (array) $templates as $template ) {
 		$filtered_templates[] = $template . '.php';
 	}
 
+	// Only perform template lookup for bp-default themes
+	if ( ! bp_use_theme_compat_with_current_theme() ) {
+		$template = locate_template( (array) $filtered_templates, false );
+
+	// Theme compat doesn't require a template lookup
+	} else {
+		$template = '';
+	}
+
 	// Filter the template locations so that plugins can alter where they are located
-	$located_template = apply_filters( 'bp_located_template', locate_template( (array) $filtered_templates, false ), $filtered_templates );
+	$located_template = apply_filters( 'bp_located_template', $template, $filtered_templates );
 	if ( !empty( $located_template ) ) {
 
 		// Template was located, lets set this as a valid page and not a 404.
diff --git a/wp-content/plugins/buddypress/bp-core/bp-core-classes.php b/wp-content/plugins/buddypress/bp-core/bp-core-classes.php
index 16b99b06e..897749478 100644
--- a/wp-content/plugins/buddypress/bp-core/bp-core-classes.php
+++ b/wp-content/plugins/buddypress/bp-core/bp-core-classes.php
@@ -30,6 +30,9 @@ if ( !defined( 'ABSPATH' ) ) exit;
  *     @type string|bool $search_terms Terms to search by. Search happens
  *           across xprofile fields. Requires XProfile component.
  *           Default: false.
+ *     @type string $search_wildcard When searching with $search_terms,
+ *           set where wildcards around the term should be positioned.
+ *           Default: 'both'. Other values: 'left', 'right'.
  *     @type array|string|bool $include An array or comma-separated list of
  *           user IDs to which query should be limited.
  *           Default: false.
@@ -153,6 +156,7 @@ class BP_User_Query {
 				'page'            => 1,
 				'user_id'         => 0,
 				'search_terms'    => false,
+				'search_wildcard' => 'both',
 				'include'         => false,
 				'exclude'         => false,
 				'user_ids'        => false,
@@ -364,8 +368,26 @@ class BP_User_Query {
 		// 'search_terms' searches user_login and user_nicename
 		// xprofile field matches happen in bp_xprofile_bp_user_query_search()
 		if ( false !== $search_terms ) {
-			$search_terms_clean = esc_sql( esc_sql( $search_terms ) );
-			$sql['where']['search'] = "u.{$this->uid_name} IN ( SELECT ID FROM {$wpdb->users} WHERE ( user_login LIKE '%{$search_terms_clean}%' OR user_nicename LIKE '%{$search_terms_clean}%' ) )";
+			$search_terms = bp_esc_like( wp_kses_normalize_entities( $search_terms ) );
+
+			if ( $search_wildcard === 'left' ) {
+				$search_terms_nospace = '%' . $search_terms;
+				$search_terms_space   = '%' . $search_terms . ' %';
+			} elseif ( $search_wildcard === 'right' ) {
+				$search_terms_nospace =        $search_terms . '%';
+				$search_terms_space   = '% ' . $search_terms . '%';
+			} else {
+				$search_terms_nospace = '%' . $search_terms . '%';
+				$search_terms_space   = '%' . $search_terms . '%';
+			}
+
+			$sql['where']['search'] = $wpdb->prepare(
+				"u.{$this->uid_name} IN ( SELECT ID FROM {$wpdb->users} WHERE ( user_login LIKE %s OR user_login LIKE %s OR user_nicename LIKE %s OR user_nicename LIKE %s ) )",
+				$search_terms_nospace,
+				$search_terms_space,
+				$search_terms_nospace,
+				$search_terms_space
+			);
 		}
 
 		// 'meta_key', 'meta_value' allow usermeta search
@@ -810,9 +832,9 @@ class BP_Core_User {
 		wp_cache_set( 'bp_user_email_' . $this->id, $this->email, 'bp' );
 		wp_cache_set( 'bp_user_url_' . $this->id, $this->user_url, 'bp' );
 
-		$this->avatar       = bp_core_fetch_avatar( array( 'item_id' => $this->id, 'type' => 'full', 'alt' => sprintf( __( 'Avatar of %s', 'buddypress' ), $this->fullname ) ) );
-		$this->avatar_thumb = bp_core_fetch_avatar( array( 'item_id' => $this->id, 'type' => 'thumb', 'alt' => sprintf( __( 'Avatar of %s', 'buddypress' ), $this->fullname ) ) );
-		$this->avatar_mini  = bp_core_fetch_avatar( array( 'item_id' => $this->id, 'type' => 'thumb', 'alt' => sprintf( __( 'Avatar of %s', 'buddypress' ), $this->fullname ), 'width' => 30, 'height' => 30 ) );
+		$this->avatar       = bp_core_fetch_avatar( array( 'item_id' => $this->id, 'type' => 'full', 'alt' => sprintf( __( 'Profile photo of %s', 'buddypress' ), $this->fullname ) ) );
+		$this->avatar_thumb = bp_core_fetch_avatar( array( 'item_id' => $this->id, 'type' => 'thumb', 'alt' => sprintf( __( 'Profile photo of %s', 'buddypress' ), $this->fullname ) ) );
+		$this->avatar_mini  = bp_core_fetch_avatar( array( 'item_id' => $this->id, 'type' => 'thumb', 'alt' => sprintf( __( 'Profile photo of %s', 'buddypress' ), $this->fullname ), 'width' => 30, 'height' => 30 ) );
 		$this->last_active  = bp_core_get_last_activity( bp_get_user_last_activity( $this->id ), __( 'active %s', 'buddypress' ) );
 	}
 
@@ -967,8 +989,8 @@ class BP_Core_User {
 		}
 
 		if ( !empty( $search_terms ) && bp_is_active( 'xprofile' ) ) {
-			$search_terms             = esc_sql( like_escape( $search_terms ) );
-			$sql['where_searchterms'] = "AND spd.value LIKE '%%$search_terms%%'";
+			$search_terms_like        = '%' . bp_esc_like( $search_terms ) . '%';
+			$sql['where_searchterms'] = $wpdb->prepare( "AND spd.value LIKE %s", $search_terms_like );
 		}
 
 		if ( !empty( $meta_key ) ) {
@@ -1085,18 +1107,18 @@ class BP_Core_User {
 			}
 		}
 
-		$letter     = esc_sql( like_escape( $letter ) );
-		$status_sql = bp_core_get_status_sql( 'u.' );
+		$letter_like = bp_esc_like( $letter ) . '%';
+		$status_sql  = bp_core_get_status_sql( 'u.' );
 
 		if ( !empty( $exclude ) ) {
-			$exclude     = implode( ',', wp_parse_id_list( $r['exclude'] ) );
+			$exclude     = implode( ',', wp_parse_id_list( $exclude ) );
 			$exclude_sql = " AND u.id NOT IN ({$exclude})";
 		} else {
 			$exclude_sql = '';
 		}
 
-		$total_users_sql = apply_filters( 'bp_core_users_by_letter_count_sql', $wpdb->prepare( "SELECT COUNT(DISTINCT u.ID) FROM {$wpdb->users} u LEFT JOIN {$bp->profile->table_name_data} pd ON u.ID = pd.user_id LEFT JOIN {$bp->profile->table_name_fields} pf ON pd.field_id = pf.id WHERE {$status_sql} AND pf.name = %s {$exclude_sql} AND pd.value LIKE '{$letter}%%'  ORDER BY pd.value ASC", bp_xprofile_fullname_field_name() ) );
-		$paged_users_sql = apply_filters( 'bp_core_users_by_letter_sql',       $wpdb->prepare( "SELECT DISTINCT u.ID as id, u.user_registered, u.user_nicename, u.user_login, u.user_email FROM {$wpdb->users} u LEFT JOIN {$bp->profile->table_name_data} pd ON u.ID = pd.user_id LEFT JOIN {$bp->profile->table_name_fields} pf ON pd.field_id = pf.id WHERE {$status_sql} AND pf.name = %s {$exclude_sql} AND pd.value LIKE '{$letter}%%' ORDER BY pd.value ASC{$pag_sql}", bp_xprofile_fullname_field_name() ) );
+		$total_users_sql = apply_filters( 'bp_core_users_by_letter_count_sql', $wpdb->prepare( "SELECT COUNT(DISTINCT u.ID) FROM {$wpdb->users} u LEFT JOIN {$bp->profile->table_name_data} pd ON u.ID = pd.user_id LEFT JOIN {$bp->profile->table_name_fields} pf ON pd.field_id = pf.id WHERE {$status_sql} AND pf.name = %s {$exclude_sql} AND pd.value LIKE %s ORDER BY pd.value ASC", bp_xprofile_fullname_field_name(), $letter_like ) );
+		$paged_users_sql = apply_filters( 'bp_core_users_by_letter_sql',       $wpdb->prepare( "SELECT DISTINCT u.ID as id, u.user_registered, u.user_nicename, u.user_login, u.user_email FROM {$wpdb->users} u LEFT JOIN {$bp->profile->table_name_data} pd ON u.ID = pd.user_id LEFT JOIN {$bp->profile->table_name_fields} pf ON pd.field_id = pf.id WHERE {$status_sql} AND pf.name = %s {$exclude_sql} AND pd.value LIKE %s ORDER BY pd.value ASC{$pag_sql}", bp_xprofile_fullname_field_name(), $letter_like ) );
 
 		$total_users = $wpdb->get_var( $total_users_sql );
 		$paged_users = $wpdb->get_results( $paged_users_sql );
@@ -1184,11 +1206,11 @@ class BP_Core_User {
 		$user_ids = array();
 		$pag_sql  = $limit && $page ? $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * intval( $limit ) ), intval( $limit ) ) : '';
 
-		$search_terms = esc_sql( like_escape( $search_terms ) );
-		$status_sql   = bp_core_get_status_sql( 'u.' );
+		$search_terms_like = '%' . bp_esc_like( $search_terms ) . '%';
+		$status_sql        = bp_core_get_status_sql( 'u.' );
 
-		$total_users_sql = apply_filters( 'bp_core_search_users_count_sql', "SELECT COUNT(DISTINCT u.ID) as id FROM {$wpdb->users} u LEFT JOIN {$bp->profile->table_name_data} pd ON u.ID = pd.user_id WHERE {$status_sql} AND pd.value LIKE '%%{$search_terms}%%' ORDER BY pd.value ASC", $search_terms );
-		$paged_users_sql = apply_filters( 'bp_core_search_users_sql',       "SELECT DISTINCT u.ID as id, u.user_registered, u.user_nicename, u.user_login, u.user_email FROM {$wpdb->users} u LEFT JOIN {$bp->profile->table_name_data} pd ON u.ID = pd.user_id WHERE {$status_sql} AND pd.value LIKE '%%{$search_terms}%%' ORDER BY pd.value ASC{$pag_sql}", $search_terms, $pag_sql );
+		$total_users_sql = apply_filters( 'bp_core_search_users_count_sql', $wpdb->prepare( "SELECT COUNT(DISTINCT u.ID) as id FROM {$wpdb->users} u LEFT JOIN {$bp->profile->table_name_data} pd ON u.ID = pd.user_id WHERE {$status_sql} AND pd.value LIKE %s ORDER BY pd.value ASC", $search_terms_like ), $search_terms );
+		$paged_users_sql = apply_filters( 'bp_core_search_users_sql',       $wpdb->prepare( "SELECT DISTINCT u.ID as id, u.user_registered, u.user_nicename, u.user_login, u.user_email FROM {$wpdb->users} u LEFT JOIN {$bp->profile->table_name_data} pd ON u.ID = pd.user_id WHERE {$status_sql} AND pd.value LIKE %s ORDER BY pd.value ASC{$pag_sql}", $search_terms_like ), $search_terms, $pag_sql );
 
 		$total_users = $wpdb->get_var( $total_users_sql );
 		$paged_users = $wpdb->get_results( $paged_users_sql );
@@ -1321,40 +1343,35 @@ class BP_Core_User {
 	public static function get_last_activity( $user_id ) {
 		global $wpdb;
 
-		if ( is_array( $user_id ) ) {
-			$user_ids = wp_parse_id_list( $user_id );
-		} else {
-			$user_ids = array( absint( $user_id ) );
-		}
+		// Sanitize and remove empty values
+		$user_ids = array_filter( wp_parse_id_list( $user_id ) );
 
 		if ( empty( $user_ids ) ) {
 			return false;
 		}
 
-		// get cache for single user only
-		if ( ! is_array( $user_id ) ) {
-			$cache = wp_cache_get( $user_id, 'bp_last_activity' );
-
-			if ( false !== $cache ) {
-				return $cache;
-			}
-		}
+		$uncached_user_ids = bp_get_non_cached_ids( $user_ids, 'bp_last_activity' );
+		if ( ! empty( $uncached_user_ids ) ) {
+			$bp = buddypress();
 
-		$bp = buddypress();
+			$user_ids_sql = implode( ',', $uncached_user_ids );
+			$user_count   = count( $uncached_user_ids );
 
-		$user_ids_sql = implode( ',', $user_ids );
-		$user_count   = count( $user_ids );
+			$last_activities = $wpdb->get_results( $wpdb->prepare( "SELECT id, user_id, date_recorded FROM {$bp->members->table_name_last_activity} WHERE component = %s AND type = 'last_activity' AND user_id IN ({$user_ids_sql}) LIMIT {$user_count}", $bp->members->id ) );
 
-		$last_activities = $wpdb->get_results( $wpdb->prepare( "SELECT id, user_id, date_recorded FROM {$bp->members->table_name_last_activity} WHERE component = %s AND type = 'last_activity' AND user_id IN ({$user_ids_sql}) LIMIT {$user_count}", $bp->members->id ) );
+			foreach ( $last_activities as $last_activity ) {
+				wp_cache_set( $last_activity->user_id, array(
+					'user_id'       => $last_activity->user_id,
+					'date_recorded' => $last_activity->date_recorded,
+					'activity_id'   => $last_activity->id,
+				), 'bp_last_activity' );
+			}
+		}
 
-		// Re-key
+		// Fetch all user data from the cache
 		$retval = array();
-		foreach ( $last_activities as $last_activity ) {
-			$retval[ $last_activity->user_id ] = array(
-				'user_id'       => $last_activity->user_id,
-				'date_recorded' => $last_activity->date_recorded,
-				'activity_id'   => $last_activity->id,
-			);
+		foreach ( $user_ids as $user_id ) {
+			$retval[ $user_id ] = wp_cache_get( $user_id, 'bp_last_activity' );
 		}
 
 		return $retval;
@@ -1379,7 +1396,7 @@ class BP_Core_User {
 
 		$activity = self::get_last_activity( $user_id );
 
-		if ( ! empty( $activity ) ) {
+		if ( ! empty( $activity[ $user_id ] ) ) {
 			$updated = $wpdb->update(
 				$table_name,
 
@@ -1436,7 +1453,7 @@ class BP_Core_User {
 				)
 			);
 
-			// setup activity array for caching
+			// set up activity array for caching
 			// view the foreach loop in the get_last_activity() method for format
 			$activity = array();
 			$activity[ $user_id ] = array(
@@ -1447,7 +1464,7 @@ class BP_Core_User {
 		}
 
 		// set cache
-		wp_cache_set( $user_id, $activity, 'bp_last_activity' );
+		wp_cache_set( $user_id, $activity[ $user_id ], 'bp_last_activity' );
 
 		return $updated;
 	}
@@ -1490,6 +1507,60 @@ class BP_Core_User {
 	}
 }
 
+if ( class_exists( 'WP_Date_Query' ) ) :
+/**
+ * BuddyPress date query class.
+ *
+ * Extends the {@link WP_Date_Query} class for use with BuddyPress.
+ *
+ * @since BuddyPress (2.1.0)
+ *
+ * @param array $date_query {
+ *     Date query arguments.  See first parameter of {@link WP_Date_Query::__construct()}.
+ * }
+ * @param string $column The DB column to query against.
+ */
+class BP_Date_Query extends WP_Date_Query {
+	/**
+	 * The column to query against. Can be changed via the query arguments.
+	 *
+	 * @var string
+	 */
+	public $column;
+
+	/**
+	 * Constructor.
+	 *
+	 * @see WP_Date_Query::__construct()
+	 */
+	public function __construct( $date_query, $column = '' ) {
+		if ( ! empty( $column ) ) {
+			$this->column = $column;
+			add_filter( 'date_query_valid_columns', array( $this, 'register_date_column' ) );
+		}
+
+		parent::__construct( $date_query, $column );
+	}
+
+	/**
+	 * Destructor.
+	 */
+	public function __destruct() {
+		remove_filter( 'date_query_valid_columns', array( $this, 'register_date_column' ) );	
+	}
+
+	/**
+	 * Registers our date column with WP Date Query to pass validation.
+	 *
+	 * @param array $retval Current DB columns
+	 * @return array
+	 */
+	public function register_date_column( $retval = array() ) {
+		$retval[] = $this->column;
+		return $retval;
+	}
+}
+endif;
 
 /**
  * BP_Core_Notification is deprecated.
@@ -1896,13 +1967,22 @@ class BP_Button {
 		if ( true == $this->must_be_logged_in && ! is_user_logged_in() )
 			return false;
 
-		// No button if viewing your own profile
-		if ( true == $this->block_self && bp_is_my_profile() )
-			return false;
+		// block_self
+		if ( true == $this->block_self ) {
+			// No button if you are the current user in a members loop
+			// This condition takes precedence, because members loops
+			// can be found on user profiles
+			if ( bp_get_member_user_id() ) {
+				if ( is_user_logged_in() && bp_loggedin_user_id() == bp_get_member_user_id() ) {
+					return false;
+				}
 
-		// No button if you are the current user in a loop
-		if ( true === $this->block_self && is_user_logged_in() && bp_loggedin_user_id() === bp_get_member_user_id() )
-			return false;
+			// No button if viewing your own profile (and not in
+			// a members loop)
+			} else if ( bp_is_my_profile() ) {
+				return false;
+			}
+		}
 
 		// Wrapper properties
 		if ( false !== $this->wrapper ) {
@@ -2412,3 +2492,209 @@ class BP_Walker_Nav_Menu_Checklist extends Walker_Nav_Menu {
 		$output .= '<input type="hidden" class="menu-item-xfn" name="menu-item[' . $possible_object_id . '][menu-item-xfn]" value="'. esc_attr( $item->xfn ) .'" />';
 	}
 }
+
+/**
+ * Base class for the BuddyPress Suggestions API.
+ *
+ * Originally built to power BuddyPress' at-mentions suggestions, it's flexible enough to be used
+ * for similar kinds of future core requirements, or those desired by third-party developers.
+ *
+ * To implement a new suggestions service, create a new class that extends this one, and update
+ * the list of default services in {@link bp_core_get_suggestions()}. If you're building a plugin,
+ * it's recommend that you use the `bp_suggestions_services` filter to do this. :)
+ *
+ * While the implementation of the query logic is left to you, it should be as quick and efficient
+ * as possible. When implementing the abstract methods in this class, pay close attention to the
+ * recommendations provided in the phpDoc blocks, particularly the expected return types.
+ *
+ * @since BuddyPress (2.1.0)
+ */
+abstract class BP_Suggestions {
+
+	/**
+	 * Default arguments common to all suggestions services.
+	 *
+	 * If your custom service requires further defaults, add them here.
+	 *
+	 * @since BuddyPress (2.1.0)
+	 * @var array
+	 */
+	protected $default_args = array(
+		'limit' => 16,
+		'term'  => '',
+		'type'  => '',
+	);
+
+	/**
+	 * Holds the arguments for the query (about to made to the suggestions service).
+	 *
+	 * This includes `$default_args`, as well as the user-supplied values.
+	 *
+	 * @since BuddyPress (2.1.0)
+	 * @var array
+	 */
+	protected $args = array(
+	);
+
+
+	/**
+	 * Constructor.
+	 *
+	 * @param array $args Optional. If set, used as the parameters for the suggestions service query.
+	 * @since BuddyPress (2.1.0)
+	 */
+	public function __construct( array $args = array() ) {
+		if ( ! empty( $args ) ) {
+			$this->set_query( $args );
+		}
+	}
+
+	/**
+	 * Set the parameters for the suggestions service query.
+	 *
+	 * @param array $args {
+	 *     @type int $limit Maximum number of results to display. Optional, default: 16.
+	 *     @type string $type The name of the suggestion service to use for the request. Mandatory.
+	 *     @type string $term The suggestion service will try to find results that contain this string.
+	 *           Mandatory.
+	 * }
+	 * @since BuddyPress (2.1.0)
+	 */
+	public function set_query( array $args = array() ) {
+		$this->args = wp_parse_args( $args, $this->default_args );
+	}
+
+	/**
+	 * Validate and sanitise the parameters for the suggestion service query.
+	 *
+	 * Be sure to call this class' version of this method when implementing it in your own service.
+	 * If validation fails, you must return a WP_Error object.
+	 *
+	 * @return true|WP_Error If validation fails, return a WP_Error object. On success, return true (bool).
+	 * @since BuddyPress (2.1.0)
+	 */
+	public function validate() {
+		$this->args['limit'] = absint( $this->args['limit'] );
+		$this->args['term']  = trim( sanitize_text_field( $this->args['term'] ) );
+		$this->args          = apply_filters( 'bp_suggestions_args', $this->args, $this );
+
+
+		// Check for invalid or missing mandatory parameters.
+		if ( ! $this->args['limit'] || ! $this->args['term'] ) {
+			return new WP_Error( 'missing_parameter' );
+		}
+
+		// Check for blocked users (e.g. deleted accounts, or spammers).
+		if ( is_user_logged_in() && ! bp_is_user_active( get_current_user_id() ) ) {
+			return new WP_Error( 'invalid_user' );
+		}
+
+		return apply_filters( 'bp_suggestions_validate_args', true, $this );
+	}
+
+	/**
+	 * Find and return a list of suggestions that match the query.
+	 *
+	 * The return type is important. If no matches are found, an empty array must be returned.
+	 * Matches must be returned as objects in an array.
+	 *
+	 * The object format for each match must be: { 'ID': string, 'image': string, 'name': string }
+	 * For example: { 'ID': 'admin', 'image': 'http://example.com/logo.png', 'name': 'Name Surname' }
+	 *
+	 * @return array|WP_Error Array of results. If there were problems, returns a WP_Error object.
+	 * @since BuddyPress (2.1.0)
+	 */
+	abstract public function get_suggestions();
+}
+
+/**
+ * Adds support for user at-mentions to the Suggestions API.
+ *
+ * This class is in the Core component because it's required by a class in the Groups component,
+ * and Groups is loaded before Members (alphabetical order).
+ *
+ * @since BuddyPress (2.1.0)
+ */
+class BP_Members_Suggestions extends BP_Suggestions {
+
+	/**
+	 * Default arguments for this suggestions service.
+	 *
+	 * @since BuddyPress (2.1.0)
+	 * @var array $args {
+	 *     @type int $limit Maximum number of results to display. Default: 16.
+	 *     @type bool $only_friends If true, only match the current user's friends. Default: false.
+	 *     @type string $term The suggestion service will try to find results that contain this string.
+	 *           Mandatory.
+	 * }
+	 */
+	protected $default_args = array(
+		'limit'        => 10,
+		'only_friends' => false,
+		'term'         => '',
+		'type'         => '',
+	);
+
+
+	/**
+	 * Validate and sanitise the parameters for the suggestion service query.
+	 *
+	 * @return true|WP_Error If validation fails, return a WP_Error object. On success, return true (bool).
+	 * @since BuddyPress (2.1.0)
+	 */
+	public function validate() {
+		$this->args['only_friends'] = (bool) $this->args['only_friends'];
+		$this->args                 = apply_filters( 'bp_members_suggestions_args', $this->args, $this );
+
+		// Check for invalid or missing mandatory parameters.
+		if ( $this->args['only_friends'] && ( ! bp_is_active( 'friends' ) || ! is_user_logged_in() ) ) {
+			return new WP_Error( 'missing_requirement' );
+		}
+
+		return apply_filters( 'bp_members_suggestions_validate_args', parent::validate(), $this );
+	}
+
+	/**
+	 * Find and return a list of username suggestions that match the query.
+	 *
+	 * @return array|WP_Error Array of results. If there were problems, returns a WP_Error object.
+	 * @since BuddyPress (2.1.0)
+	 */
+	public function get_suggestions() {
+		$user_query = array(
+			'count_total'     => '',  // Prevents total count
+			'populate_extras' => false,
+			'type'            => 'alphabetical',
+
+			'page'            => 1,
+			'per_page'        => $this->args['limit'],
+			'search_terms'    => $this->args['term'],
+			'search_wildcard' => 'right',
+		);
+
+		// Only return matches of friends of this user.
+		if ( $this->args['only_friends'] && is_user_logged_in() ) {
+			$user_query['user_id'] = get_current_user_id();
+		}
+
+		$user_query = apply_filters( 'bp_members_suggestions_query_args', $user_query, $this );
+		if ( is_wp_error( $user_query ) ) {
+			return $user_query;
+		}
+
+
+		$user_query = new BP_User_Query( $user_query );
+		$results    = array();
+
+		foreach ( $user_query->results as $user ) {
+			$result        = new stdClass();
+			$result->ID    = $user->user_nicename;
+			$result->image = bp_core_fetch_avatar( array( 'html' => false, 'item_id' => $user->ID ) );
+			$result->name  = bp_core_get_user_displayname( $user->ID );
+
+			$results[] = $result;
+		}
+
+		return apply_filters( 'bp_members_suggestions_get_suggestions', $results, $this );
+	}
+}
diff --git a/wp-content/plugins/buddypress/bp-core/bp-core-component.php b/wp-content/plugins/buddypress/bp-core/bp-core-component.php
index c16c17cf2..539359fbd 100644
--- a/wp-content/plugins/buddypress/bp-core/bp-core-component.php
+++ b/wp-content/plugins/buddypress/bp-core/bp-core-component.php
@@ -292,31 +292,30 @@ class BP_Component {
 	public function includes( $includes = array() ) {
 
 		// Bail if no files to include
-		if ( empty( $includes ) )
-			return;
-
-		$slashed_path = trailingslashit( $this->path );
-
-		// Loop through files to be included
-		foreach ( (array) $includes as $file ) {
-
-			$paths = array(
-
-				// Passed with no extension
-				'bp-' . $this->id . '/bp-' . $this->id . '-' . $file  . '.php',
-				'bp-' . $this->id . '-' . $file . '.php',
-				'bp-' . $this->id . '/' . $file . '.php',
-
-				// Passed with extension
-				$file,
-				'bp-' . $this->id . '-' . $file,
-				'bp-' . $this->id . '/' . $file,
-			);
-
-			foreach ( $paths as $path ) {
-				if ( @is_file( $slashed_path . $path ) ) {
-					require( $slashed_path . $path );
-					break;
+		if ( ! empty( $includes ) ) {
+			$slashed_path = trailingslashit( $this->path );
+
+			// Loop through files to be included
+			foreach ( (array) $includes as $file ) {
+
+				$paths = array(
+
+					// Passed with no extension
+					'bp-' . $this->id . '/bp-' . $this->id . '-' . $file  . '.php',
+					'bp-' . $this->id . '-' . $file . '.php',
+					'bp-' . $this->id . '/' . $file . '.php',
+
+					// Passed with extension
+					$file,
+					'bp-' . $this->id . '-' . $file,
+					'bp-' . $this->id . '/' . $file,
+				);
+
+				foreach ( $paths as $path ) {
+					if ( @is_file( $slashed_path . $path ) ) {
+						require( $slashed_path . $path );
+						break;
+					}
 				}
 			}
 		}
@@ -338,6 +337,9 @@ class BP_Component {
 		// Setup globals
 		add_action( 'bp_setup_globals',          array( $this, 'setup_globals'          ), 10 );
 
+		// Set up canonical stack
+		add_action( 'bp_setup_canonical_stack',  array( $this, 'setup_canonical_stack'  ), 10 );
+
 		// Include required files. Called early to ensure that BP core
 		// components are loaded before plugins that hook their loader functions
 		// to bp_include with the default priority of 10. This is for backwards
@@ -379,6 +381,13 @@ class BP_Component {
 		do_action( 'bp_' . $this->id . '_setup_actions' );
 	}
 
+	/**
+	 * Set up the canonical URL stack for this component.
+	 *
+	 * @since BuddyPress (2.1.0)
+	 */
+	public function setup_canonical_stack() {}
+
 	/**
 	 * Set up component navigation.
 	 *
@@ -426,12 +435,14 @@ class BP_Component {
 	public function setup_admin_bar( $wp_admin_nav = array() ) {
 
 		// Bail if this is an ajax request
-		if ( defined( 'DOING_AJAX' ) )
+		if ( defined( 'DOING_AJAX' ) ) {
 			return;
+		}
 
 		// Do not proceed if BP_USE_WP_ADMIN_BAR constant is not set or is false
-		if ( !bp_use_wp_admin_bar() )
+		if ( ! bp_use_wp_admin_bar() ) {
 			return;
+		}
 
 		// Filter the passed admin nav
 		$wp_admin_nav = apply_filters( 'bp_' . $this->id . '_admin_nav', $wp_admin_nav );
diff --git a/wp-content/plugins/buddypress/bp-core/bp-core-cssjs.php b/wp-content/plugins/buddypress/bp-core/bp-core-cssjs.php
index 7a816a720..ce59ad2b8 100644
--- a/wp-content/plugins/buddypress/bp-core/bp-core-cssjs.php
+++ b/wp-content/plugins/buddypress/bp-core/bp-core-cssjs.php
@@ -9,6 +9,64 @@
 // Exit if accessed directly
 if ( !defined( 'ABSPATH' ) ) exit;
 
+/**
+ * Register scripts commonly used by BuddyPress.
+ *
+ * @since BuddyPress (2.1.0)
+ */
+function bp_core_register_common_scripts() {
+	$min = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
+	$url = buddypress()->plugin_url . 'bp-core/js/';
+	
+	$scripts = apply_filters( 'bp_core_register_common_scripts', array(
+
+		// Legacy
+		'bp-confirm'        => array( 'file' => "{$url}confirm{$min}.js",        'dependencies' => array( 'jquery' ) ),
+		'bp-widget-members' => array( 'file' => "{$url}widget-members{$min}.js", 'dependencies' => array( 'jquery' ) ),
+		'bp-jquery-query'   => array( 'file' => "{$url}jquery-query{$min}.js",   'dependencies' => array( 'jquery' ) ),
+		'bp-jquery-cookie'  => array( 'file' => "{$url}jquery-cookie{$min}.js",  'dependencies' => array( 'jquery' ) ),
+
+		// 2.1
+		'jquery-caret' => array( 'file' => "{$url}jquery.caret{$min}.js", 'dependencies' => array( 'jquery' ) ),
+		'jquery-atwho' => array( 'file' => "{$url}jquery.atwho{$min}.js", 'dependencies' => array( 'jquery', 'jquery-caret' ) ),
+	) );
+
+	$version = bp_get_version();
+	foreach ( $scripts as $id => $script ) {
+		wp_register_script( $id, $script['file'], $script['dependencies'], $version );
+	}
+}
+add_action( 'bp_enqueue_scripts',       'bp_core_register_common_scripts', 1 );
+add_action( 'bp_admin_enqueue_scripts', 'bp_core_register_common_scripts', 1 );
+
+/**
+ * Register styles commonly used by BuddyPress.
+ *
+ * @since BuddyPress (2.1.0)
+ */
+function bp_core_register_common_styles() {
+	$min = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
+	$url = buddypress()->plugin_url . 'bp-core/css/';
+
+	$styles = apply_filters( 'bp_core_register_common_styles', array(
+		'bp-admin-bar' => array(
+			'file'         => apply_filters( 'bp_core_admin_bar_css', "{$url}admin-bar{$min}.css" ),
+			'dependencies' => array( 'admin-bar' )
+		)
+	) );
+
+	foreach ( $styles as $id => $style ) {
+		wp_register_style( $id, $style['file'], $style['dependencies'], bp_get_version() );
+
+		wp_style_add_data( $id, 'rtl', true );
+		if ( $min ) {
+			wp_style_add_data( $id, 'suffix', $min );
+		}
+	}
+}
+add_action( 'bp_enqueue_scripts',       'bp_core_register_common_styles', 1 );
+add_action( 'bp_admin_enqueue_scripts', 'bp_core_register_common_styles', 1 );
+
 /**
  * Load the JS for "Are you sure?" .confirm links.
  */
@@ -17,15 +75,14 @@ function bp_core_confirmation_js() {
 		return false;
 	}
 
-	$min = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
-	wp_enqueue_script( 'bp-confirm', buddypress()->plugin_url . "bp-core/js/confirm{$min}.js", array( 'jquery' ), bp_get_version() );
+	wp_enqueue_script( 'bp-confirm' );
 
 	wp_localize_script( 'bp-confirm', 'BP_Confirm', array(
 		'are_you_sure' => __( 'Are you sure?', 'buddypress' ),
 	) );
 
 }
-add_action( 'wp_enqueue_scripts',    'bp_core_confirmation_js' );
+add_action( 'bp_enqueue_scripts',    'bp_core_confirmation_js' );
 add_action( 'admin_enqueue_scripts', 'bp_core_confirmation_js' );
 
 /**
@@ -45,10 +102,11 @@ function bp_core_add_cropper_inline_js() {
 
 	// Bail if no image was uploaded
 	$image = apply_filters( 'bp_inline_cropper_image', getimagesize( bp_core_avatar_upload_path() . buddypress()->avatar_admin->image->dir ) );
-	if ( empty( $image ) )
+	if ( empty( $image ) ) {
 		return;
+	}
 
-	//
+	// Get avatar full width and height
 	$full_height = bp_core_avatar_full_height();
 	$full_width  = bp_core_avatar_full_width();
 
@@ -60,21 +118,52 @@ function bp_core_add_cropper_inline_js() {
 	}
 
 	// Default cropper coordinates
-	$crop_left   = round( $image[0] / 4 );
-	$crop_top    = round( $image[1] / 4 );
-	$crop_right  = $image[0] - $crop_left;
-	$crop_bottom = $image[1] - $crop_top; ?>
+
+	// Smaller than full-width: cropper defaults to entire image
+	if ( $image[0] < $full_width ) {
+		$crop_left  = 0;
+		$crop_right = $image[0];
+
+	// Less than 2x full-width: cropper defaults to full-width
+	} else if ( $image[0] < ( $full_width * 2 ) ) {
+		$padding_w  = round( ( $image[0] - $full_width ) / 2 );
+		$crop_left  = $padding_w;
+		$crop_right = $image[0] - $padding_w;
+
+	// Larger than 2x full-width: cropper defaults to 1/2 image width
+	} else {
+		$crop_left  = round( $image[0] / 4 );
+		$crop_right = $image[0] - $crop_left;
+	}
+
+	// Smaller than full-height: cropper defaults to entire image
+	if ( $image[1] < $full_height ) {
+		$crop_top    = 0;
+		$crop_bottom = $image[1];
+
+	// Less than double full-height: cropper defaults to full-height
+	} else if ( $image[1] < ( $full_height * 2 ) ) {
+		$padding_h   = round( ( $image[1] - $full_height ) / 2 );
+		$crop_top    = $padding_h;
+		$crop_bottom = $image[1] - $padding_h;
+
+	// Larger than 2x full-height: cropper defaults to 1/2 image height
+	} else {
+		$crop_top    = round( $image[1] / 4 );
+		$crop_bottom = $image[1] - $crop_top;
+	}
+
+	?>
 
 	<script type="text/javascript">
 		jQuery(window).load( function(){
 			jQuery('#avatar-to-crop').Jcrop({
 				onChange: showPreview,
-				onSelect: showPreview,
 				onSelect: updateCoords,
-				aspectRatio: <?php echo $aspect_ratio; ?>,
-				setSelect: [ <?php echo $crop_left; ?>, <?php echo $crop_top; ?>, <?php echo $crop_right; ?>, <?php echo $crop_bottom; ?> ]
+				aspectRatio: <?php echo (int) $aspect_ratio; ?>,
+				setSelect: [ <?php echo (int) $crop_left; ?>, <?php echo (int) $crop_top; ?>, <?php echo (int) $crop_right; ?>, <?php echo (int) $crop_bottom; ?> ]
 			});
-			updateCoords({x: <?php echo $crop_left; ?>, y: <?php echo $crop_top; ?>, w: <?php echo $crop_right; ?>, h: <?php echo $crop_bottom; ?>});
+			updateCoords({x: <?php echo (int) $crop_left; ?>, y: <?php echo (int) $crop_top; ?>, w: <?php echo (int) $crop_right; ?>, h: <?php echo (int) $crop_bottom; ?>});
 		});
 
 		function updateCoords(c) {
@@ -86,14 +175,14 @@ function bp_core_add_cropper_inline_js() {
 
 		function showPreview(coords) {
 			if ( parseInt(coords.w) > 0 ) {
-				var fw = <?php echo $full_width; ?>;
-				var fh = <?php echo $full_height; ?>;
+				var fw = <?php echo (int) $full_width; ?>;
+				var fh = <?php echo (int) $full_height; ?>;
 				var rx = fw / coords.w;
 				var ry = fh / coords.h;
 
 				jQuery( '#avatar-crop-preview' ).css({
-					width: Math.round(rx * <?php echo $image[0]; ?>) + 'px',
-					height: Math.round(ry * <?php echo $image[1]; ?>) + 'px',
+					width: Math.round(rx * <?php echo (int) $image[0]; ?>) + 'px',
+					height: Math.round(ry * <?php echo (int) $image[1]; ?>) + 'px',
 					marginLeft: '-' + Math.round(rx * coords.x) + 'px',
 					marginTop: '-' + Math.round(ry * coords.y) + 'px'
 				});
@@ -153,3 +242,23 @@ add_action( 'wp_head', 'bp_core_add_ajax_url_js' );
 function bp_core_ajax_url() {
 	return apply_filters( 'bp_core_ajax_url', admin_url( 'admin-ajax.php', is_ssl() ? 'admin' : 'http' ) );
 }
+
+/**
+ * Get the javascript dependencies for buddypress.js.
+ *
+ * @since BuddyPress (2.0.0)
+ *
+ * @uses apply_filters() to allow other component to load extra dependencies
+ *
+ * @return array The javascript dependencies.
+ */
+function bp_core_get_js_dependencies() {
+	return apply_filters( 'bp_core_get_js_dependencies', array(
+		'jquery',
+		'bp-confirm',
+		'bp-widget-members',
+		'bp-jquery-query',
+		'bp-jquery-cookie',
+		'bp-jquery-scroll-to'
+	) );
+}
diff --git a/wp-content/plugins/buddypress/bp-core/bp-core-dependency.php b/wp-content/plugins/buddypress/bp-core/bp-core-dependency.php
index eaf839c70..8ce93a7d9 100644
--- a/wp-content/plugins/buddypress/bp-core/bp-core-dependency.php
+++ b/wp-content/plugins/buddypress/bp-core/bp-core-dependency.php
@@ -31,6 +31,13 @@ function bp_setup_components() {
 	do_action( 'bp_setup_components' );
 }
 
+/**
+ * Fire the 'bp_setup_canonical_stack' action, where plugins should set up their canonical URL.
+ */
+function bp_setup_canonical_stack() {
+	do_action( 'bp_setup_canonical_stack' );
+}
+
 /**
  * Fire the 'bp_setup_globals' action, where plugins should initialize global settings.
  */
diff --git a/wp-content/plugins/buddypress/bp-core/bp-core-filters.php b/wp-content/plugins/buddypress/bp-core/bp-core-filters.php
index d5633dcea..69f06856e 100644
--- a/wp-content/plugins/buddypress/bp-core/bp-core-filters.php
+++ b/wp-content/plugins/buddypress/bp-core/bp-core-filters.php
@@ -250,12 +250,18 @@ add_filter( 'bp_login_redirect', 'bp_core_login_redirect', 10, 3 );
 function bp_core_filter_user_welcome_email( $welcome_email ) {
 
 	// Don't touch the email when a user is registered by the site admin
-	if ( is_admin() )
+	if ( ( is_admin() || is_network_admin() ) && buddypress()->members->admin->signups_page != get_current_screen()->id ) {
 		return $welcome_email;
+	}
+
+	if ( strpos( bp_get_requested_url(), 'wp-activate.php' ) !== false ) {
+		return $welcome_email;
+	}
 
 	// Don't touch the email if we don't have a custom registration template
-	if ( ! bp_has_custom_signup_page() )
+	if ( ! bp_has_custom_signup_page() ) {
 		return $welcome_email;
+	}
 
 	// [User Set] Replaces 'PASSWORD' in welcome email; Represents value set by user
 	return str_replace( 'PASSWORD', __( '[User Set]', 'buddypress' ), $welcome_email );
@@ -279,9 +285,10 @@ add_filter( 'update_welcome_user_email', 'bp_core_filter_user_welcome_email' );
  */
 function bp_core_filter_blog_welcome_email( $welcome_email, $blog_id, $user_id, $password ) {
 
-	// Don't touch the email when a user is registered by the site admin.
-	if ( is_admin() )
+	// Don't touch the email when a user is registered by the site admin
+	if ( ( is_admin() || is_network_admin() ) && buddypress()->members->admin->signups_page != get_current_screen()->id ) {
 		return $welcome_email;
+	}
 
 	// Don't touch the email if we don't have a custom registration template
 	if ( ! bp_has_custom_signup_page() )
@@ -317,7 +324,7 @@ function bp_core_activation_signup_blog_notification( $domain, $path, $title, $u
 	$activate_url = esc_url( $activate_url );
 
 	// Email contents
-	$message = sprintf( __( "Thanks for registering! To complete the activation of your account and blog, please click the following link:\n\n%1\$s\n\n\n\nAfter you activate, you can visit your blog here:\n\n%2\$s", 'buddypress' ), $activate_url, esc_url( "http://{$domain}{$path}" ) );
+	$message = sprintf( __( "%1\$s,\n\n\n\nThanks for registering! To complete the activation of your account and blog, please click the following link:\n\n%2\$s\n\n\n\nAfter you activate, you can visit your blog here:\n\n%3\$s", 'buddypress' ), $user, $activate_url, esc_url( "http://{$domain}{$path}" ) );
 	$subject = bp_get_email_subject( array( 'text' => sprintf( __( 'Activate %s', 'buddypress' ), 'http://' . $domain . $path ) ) );
 
 	// Email filters
@@ -351,6 +358,32 @@ add_filter( 'wpmu_signup_blog_notification', 'bp_core_activation_signup_blog_not
  */
 function bp_core_activation_signup_user_notification( $user, $user_email, $key, $meta ) {
 
+	if ( is_admin() ) {
+		// If the user is created from the WordPress Add User screen, don't send BuddyPress signup notifications
+		if( in_array( get_current_screen()->id, array( 'user', 'user-network' ) ) ) {
+			// If the Super Admin want to skip confirmation email
+			if ( isset( $_POST[ 'noconfirmation' ] ) && is_super_admin() ) {
+				return false;
+
+			// WordPress will manage the signup process
+			} else {
+				return $user;
+			}
+
+		/**
+		 * There can be a case where the user was created without the skip confirmation
+		 * And the super admin goes in pending accounts to resend it. In this case, as the
+		 * meta['password'] is not set, the activation url must be WordPress one
+		 */
+		} else if ( buddypress()->members->admin->signups_page == get_current_screen()->id ) {
+			$is_hashpass_in_meta = maybe_unserialize( $meta );
+
+			if ( empty( $is_hashpass_in_meta['password'] ) ) {
+				return $user;
+			}
+		}
+	}
+
 	// Set up activation link
 	$activate_url = bp_get_activation_page() . "?key=$key";
 	$activate_url = esc_url( $activate_url );
@@ -503,7 +536,7 @@ function bp_setup_nav_menu_item( $menu_item ) {
 			if ( is_user_logged_in() ) {
 				$menu_item->_invalid = true;
 			} else {
-				$menu_item->url = wp_login_url( wp_guess_url() );
+				$menu_item->url = wp_login_url( bp_get_requested_url() );
 			}
 
 			break;
@@ -512,7 +545,7 @@ function bp_setup_nav_menu_item( $menu_item ) {
 			if ( ! is_user_logged_in() ) {
 				$menu_item->_invalid = true;
 			} else {
-				$menu_item->url = wp_logout_url( wp_guess_url() );
+				$menu_item->url = wp_logout_url( bp_get_requested_url() );
 			}
 
 			break;
@@ -572,3 +605,21 @@ add_filter( 'wp_setup_nav_menu_item', 'bp_setup_nav_menu_item', 10, 1 );
 function bp_filter_metaid_column_name( $q ) {
 	return str_replace( 'meta_id', 'id', $q );
 }
+
+/**
+ * Filter the edit post link to avoid its display in BuddyPress pages
+ *
+ * @since BuddyPress (2.1.0)
+ *
+ * @param  string $link    The edit link.
+ * @param  int    $post_id Post ID.
+ * @return mixed  Will be a boolean (false) if $post_id is 0. Will be a string (the unchanged edit link)
+ *                otherwise
+ */
+function bp_core_filter_edit_post_link( $edit_link = '', $post_id = 0 ) {
+	if ( 0 === $post_id ) {
+		$edit_link = false;
+	}
+
+	return $edit_link;
+}
diff --git a/wp-content/plugins/buddypress/bp-core/bp-core-functions.php b/wp-content/plugins/buddypress/bp-core/bp-core-functions.php
index 438e396b5..5b93f9c8d 100644
--- a/wp-content/plugins/buddypress/bp-core/bp-core-functions.php
+++ b/wp-content/plugins/buddypress/bp-core/bp-core-functions.php
@@ -146,11 +146,12 @@ function bp_alpha_sort_by_key( $items, $key ) {
  * @param bool $decimals Whether to use decimals. See {@link number_format_i18n()}.
  * @return string The formatted number.
  */
-function bp_core_number_format( $number, $decimals = false ) {
+function bp_core_number_format( $number = 0, $decimals = false ) {
 
 	// Force number to 0 if needed
-	if ( empty( $number ) )
+	if ( ! is_numeric( $number ) ) {
 		$number = 0;
+	}
 
 	return apply_filters( 'bp_core_number_format', number_format_i18n( $number, $decimals ), $number, $decimals );
 }
@@ -264,6 +265,32 @@ function bp_esc_sql_order( $order = '' ) {
 	return 'DESC' === $order ? 'DESC' : 'ASC';
 }
 
+/**
+ * Escape special characters in a SQL LIKE clause.
+ *
+ * In WordPress 4.0, like_escape() was deprecated, due to incorrect
+ * documentation and improper sanitization leading to a history of misuse. To
+ * maintain compatibility with versions of WP before 4.0, we duplicate the
+ * logic of the replacement, wpdb::esc_like().
+ *
+ * @since BuddyPress (2.1.0)
+ *
+ * @see wpdb::esc_like() for more details on proper use.
+ *
+ * @param string $text The raw text to be escaped.
+ * @return string Text in the form of a LIKE phrase. Not SQL safe. Run through
+ *         wpdb::prepare() before use.
+ */
+function bp_esc_like( $text ) {
+	global $wpdb;
+
+	if ( method_exists( $wpdb, 'esc_like' ) ) {
+		return $wpdb->esc_like( $text );
+	} else {
+		return addcslashes( $text, '_%\\' );
+	}
+}
+
 /**
  * Are we running username compatibility mode?
  *
@@ -289,25 +316,56 @@ function bp_is_username_compatibility_mode() {
  *
  * @uses apply_filters() Filter 'bp_use_wp_admin_bar' to alter.
  *
- * @return bool False when WP Toolbar support is disabled, true when enabled.
- *        Default: true.
+ * @return bool Default: true. False when WP Toolbar support is disabled.
  */
 function bp_use_wp_admin_bar() {
+
+	// Default to true (to avoid loading deprecated BuddyBar code)
 	$use_admin_bar = true;
 
-	// Has the WP Toolbar constant been explicity set?
-	if ( defined( 'BP_USE_WP_ADMIN_BAR' ) && ! BP_USE_WP_ADMIN_BAR )
-		$use_admin_bar = false;
+	// Has the WP Toolbar constant been explicity opted into?
+	if ( defined( 'BP_USE_WP_ADMIN_BAR' ) ) {
+		$use_admin_bar = (bool) BP_USE_WP_ADMIN_BAR;
 
-	// Has the admin chosen to use the BuddyBar during an upgrade?
-	elseif ( (bool) bp_get_option( '_bp_force_buddybar', false ) )
+	// ...or is the old BuddyBar being forced back into use?
+	} elseif ( bp_force_buddybar( false ) ) {
 		$use_admin_bar = false;
+	}
 
-	return apply_filters( 'bp_use_wp_admin_bar', $use_admin_bar );
+	return (bool) apply_filters( 'bp_use_wp_admin_bar', $use_admin_bar );
 }
 
 /** Directory *****************************************************************/
 
+/**
+ * Returns an array of core component IDs.
+ *
+ * @since BuddyPress (2.1.0)
+ *
+ * @return array
+ */
+function bp_core_get_packaged_component_ids() {
+	$components = array(
+		'activity',
+		'members',
+		'groups',
+		'blogs',
+		'xprofile',
+		'friends',
+		'messages',
+		'settings',
+		'notifications',
+	);
+
+	// only add legacy forums if it is enabled
+	// prevents conflicts with bbPress, which also uses the same 'forums' id
+	if ( class_exists( 'BP_Forums_Component' ) ) {
+		$components[] = 'forums';
+	}
+
+	return $components;
+}
+
 /**
  * Fetch a list of BP directory pages from the appropriate meta table.
  *
@@ -428,14 +486,16 @@ function bp_core_add_page_mappings( $components, $existing = 'keep' ) {
 		return;
 	}
 
-	// Make sure that the pages are created on the root blog no matter which Dashboard the setup is being run on
-	if ( ! bp_is_root_blog() )
+	// Make sure that the pages are created on the root blog no matter which
+	// dashboard the setup is being run on.
+	if ( ! bp_is_root_blog() ) {
 		switch_to_blog( bp_get_root_blog_id() );
+	}
 
 	$pages = bp_core_get_directory_page_ids();
 
 	// Delete any existing pages
-	if ( 'delete' == $existing ) {
+	if ( 'delete' === $existing ) {
 		foreach ( (array) $pages as $page_id ) {
 			wp_delete_post( $page_id, true );
 		}
@@ -444,11 +504,11 @@ function bp_core_add_page_mappings( $components, $existing = 'keep' ) {
 	}
 
 	$page_titles = array(
-		'activity' => _x( 'Activity', 'Page title for the Activity directory.', 'buddypress' ),
-		'groups'   => _x( 'Groups', 'Page title for the Groups directory.', 'buddypress' ),
-		'sites'    => _x( 'Sites', 'Page title for the Sites directory.', 'buddypress' ),
-		'activate' => _x( 'Activate', 'Page title for the user account activation screen.', 'buddypress' ),
-		'members'  => _x( 'Members', 'Page title for the Members directory.', 'buddypress' ),
+		'activity' => _x( 'Activity', 'Page title for the Activity directory.',       'buddypress' ),
+		'groups'   => _x( 'Groups',   'Page title for the Groups directory.',         'buddypress' ),
+		'sites'    => _x( 'Sites',    'Page title for the Sites directory.',          'buddypress' ),
+		'members'  => _x( 'Members',  'Page title for the Members directory.',        'buddypress' ),
+		'activate' => _x( 'Activate', 'Page title for the user activation screen.',   'buddypress' ),
 		'register' => _x( 'Register', 'Page title for the user registration screen.', 'buddypress' ),
 	);
 
@@ -481,21 +541,29 @@ function bp_core_add_page_mappings( $components, $existing = 'keep' ) {
 
 	// Create the pages
 	foreach ( $pages_to_create as $component_name => $page_name ) {
-		$pages[ $component_name ] = wp_insert_post( array(
-			'comment_status' => 'closed',
-			'ping_status'    => 'closed',
-			'post_status'    => 'publish',
-			'post_title'     => $page_name,
-			'post_type'      => 'page',
-		) );
+		$exists = get_page_by_path( $component_name );
+
+		// If page already exists, use it
+		if ( ! empty( $exists ) ) {
+			$pages[ $component_name ] = $exists->ID;
+		} else {
+			$pages[ $component_name ] = wp_insert_post( array(
+				'comment_status' => 'closed',
+				'ping_status'    => 'closed',
+				'post_status'    => 'publish',
+				'post_title'     => $page_name,
+				'post_type'      => 'page',
+			) );
+		}
 	}
 
 	// Save the page mapping
 	bp_update_option( 'bp-pages', $pages );
 
 	// If we had to switch_to_blog, go back to the original site.
-	if ( ! bp_is_root_blog() )
+	if ( ! bp_is_root_blog() ) {
 		restore_current_blog();
+	}
 }
 
 /**
@@ -561,7 +629,9 @@ function bp_core_add_root_component( $slug ) {
 
 	// If there was no match, add a page for this root component
 	if ( empty( $match ) ) {
-		$bp->add_root[] = $slug;
+		$add_root_items   = $bp->add_root();
+		$add_root_items[] = $slug;
+		$bp->add_root     = $add_root_items;
 	}
 
 	// Make sure that this component is registered as requiring a top-level directory
@@ -663,13 +733,14 @@ function bp_core_get_root_domain() {
  * @param int $status Optional. The numeric code to give in the redirect
  *        headers. Default: 302.
  */
-function bp_core_redirect( $location, $status = 302 ) {
+function bp_core_redirect( $location = '', $status = 302 ) {
 
 	// On some setups, passing the value of wp_get_referer() may result in an
 	// empty value for $location, which results in an error. Ensure that we
 	// have a valid URL.
-	if ( empty( $location ) )
+	if ( empty( $location ) ) {
 		$location = bp_get_root_domain();
+	}
 
 	// Make sure we don't call status_header() in bp_core_do_catch_uri() as this
 	// conflicts with wp_redirect() and wp_safe_redirect().
@@ -700,23 +771,24 @@ function bp_core_referrer() {
 function bp_core_get_site_path() {
 	global $current_site;
 
-	if ( is_multisite() )
+	if ( is_multisite() ) {
 		$site_path = $current_site->path;
-	else {
+	} else {
 		$site_path = (array) explode( '/', home_url() );
 
-		if ( count( $site_path ) < 2 )
+		if ( count( $site_path ) < 2 ) {
 			$site_path = '/';
-		else {
+		} else {
 			// Unset the first three segments (http(s)://domain.com part)
 			unset( $site_path[0] );
 			unset( $site_path[1] );
 			unset( $site_path[2] );
 
-			if ( !count( $site_path ) )
+			if ( !count( $site_path ) ) {
 				$site_path = '/';
-			else
+			} else {
 				$site_path = '/' . implode( '/', $site_path ) . '/';
+			}
 		}
 	}
 
@@ -731,13 +803,12 @@ function bp_core_get_site_path() {
  * @since BuddyPress (1.2.6)
  *
  * @param bool $gmt True to use GMT (rather than local) time. Default: true.
+ * @param string $type See the 'type' parameter in {@link current_time()}.
+          Default: 'mysql'.
  * @return string Current time in 'Y-m-d h:i:s' format.
  */
-function bp_core_current_time( $gmt = true ) {
-	// Get current time in MYSQL format
-	$current_time = current_time( 'mysql', $gmt );
-
-	return apply_filters( 'bp_core_current_time', $current_time );
+function bp_core_current_time( $gmt = true, $type = 'mysql' ) {
+	return apply_filters( 'bp_core_current_time', current_time( $type, $gmt ) );
 }
 
 /**
@@ -769,7 +840,8 @@ function bp_core_current_time( $gmt = true ) {
 function bp_core_time_since( $older_date, $newer_date = false ) {
 
 	// Use this filter to bypass BuddyPress's time_since calculations
-	if ( $pre_value = apply_filters( 'bp_core_time_since_pre', false, $older_date, $newer_date ) ) {
+	$pre_value = apply_filters( 'bp_core_time_since_pre', false, $older_date, $newer_date );
+	if ( false !== $pre_value ) {
 		return $pre_value;
 	}
 
@@ -800,7 +872,7 @@ function bp_core_time_since( $older_date, $newer_date = false ) {
 	 * a date and the current time. $newer_date will have a value if we want to
 	 * work out time elapsed between two known dates.
 	 */
-	$newer_date = ( !$newer_date ) ? strtotime( bp_core_current_time() ) : $newer_date;
+	$newer_date = ( !$newer_date ) ? bp_core_current_time( true, 'timestamp' ) : $newer_date;
 
 	// Difference in seconds
 	$since = $newer_date - $older_date;
@@ -1022,18 +1094,26 @@ function bp_core_render_message() {
  */
 function bp_core_record_activity() {
 
-	if ( !is_user_logged_in() )
+	// Bail if user is not logged in
+	if ( ! is_user_logged_in() ) {
 		return false;
+	}
 
+	// Get the user ID
 	$user_id = bp_loggedin_user_id();
 
-	if ( bp_is_user_inactive( $user_id ) )
+	// Bail if user is not active
+	if ( bp_is_user_inactive( $user_id ) ) {
 		return false;
+	}
 
+	// Get the user's last activity
 	$activity = bp_get_user_last_activity( $user_id );
 
-	if ( !is_numeric( $activity ) )
+	// Make sure it's numeric
+	if ( ! is_numeric( $activity ) ) {
 		$activity = strtotime( $activity );
+	}
 
 	// Get current time
 	$current_time = bp_core_current_time();
@@ -1043,7 +1123,8 @@ function bp_core_record_activity() {
 		do_action( 'bp_first_activity_for_member', $user_id );
 	}
 
-	if ( empty( $activity ) || strtotime( $current_time ) >= strtotime( '+5 minutes', $activity ) ) {
+	// If it's been more than 5 minutes, record a newer last-activity time
+	if ( empty( $activity ) || ( strtotime( $current_time ) >= strtotime( '+5 minutes', $activity ) ) ) {
 		bp_update_user_last_activity( $user_id, $current_time );
 	}
 }
@@ -1056,16 +1137,22 @@ add_action( 'wp_head', 'bp_core_record_activity' );
  *       representation of the time elapsed.
  *
  * @param int|string $last_activity_date The date of last activity.
- * @param string $string A sprintf()-able statement of the form '% ago'.
+ * @param string $string A sprintf()-able statement of the form 'active %s'
  * @return string $last_active A string of the form '3 years ago'.
  */
-function bp_core_get_last_activity( $last_activity_date, $string ) {
+function bp_core_get_last_activity( $last_activity_date = '', $string = '' ) {
 
-	if ( empty( $last_activity_date ) )
-		$last_active = __( 'Not recently active', 'buddypress' );
-	else
-		$last_active = sprintf( $string, bp_core_time_since( $last_activity_date ) );
+	// Setup a default string if none was passed
+	$string = empty( $string )
+		? '%s'     // Gettext placeholder
+		: $string;
 
+	// Use the string if a last activity date was passed
+	$last_active = empty( $last_activity_date )
+		? __( 'Not recently active', 'buddypress' )
+		: sprintf( $string, bp_core_time_since( $last_activity_date ) );
+
+	// Filter and return
 	return apply_filters( 'bp_core_get_last_activity', $last_active, $last_activity_date, $string );
 }
 
@@ -1294,8 +1381,9 @@ function bp_core_do_network_admin() {
 	// Default
 	$retval = bp_is_network_activated();
 
-	if ( bp_is_multiblog_mode() )
+	if ( bp_is_multiblog_mode() ) {
 		$retval = false;
+	}
 
 	return (bool) apply_filters( 'bp_core_do_network_admin', $retval );
 }
@@ -1334,12 +1422,14 @@ function bp_is_root_blog( $blog_id = 0 ) {
 	$is_root_blog = false;
 
 	// Use current blog if no ID is passed
-	if ( empty( $blog_id ) )
+	if ( empty( $blog_id ) ) {
 		$blog_id = get_current_blog_id();
+	}
 
 	// Compare to root blog ID
-	if ( $blog_id == bp_get_root_blog_id() )
+	if ( $blog_id == bp_get_root_blog_id() ) {
 		$is_root_blog = true;
+	}
 
 	return (bool) apply_filters( 'bp_is_root_blog', (bool) $is_root_blog );
 }
@@ -1431,8 +1521,9 @@ function bp_is_network_activated() {
 	$plugins = get_site_option( 'active_sitewide_plugins' );
 
 	// Override is_multisite() if not network activated
-	if ( ! is_array( $plugins ) || ! isset( $plugins[$base] ) )
+	if ( ! is_array( $plugins ) || ! isset( $plugins[ $base ] ) ) {
 		$retval = false;
+	}
 
 	return (bool) apply_filters( 'bp_is_network_activated', $retval );
 }
@@ -1630,8 +1721,9 @@ add_action ( 'bp_core_loaded', 'bp_core_load_buddypress_textdomain' );
  */
 function bp_core_action_search_site( $slug = '' ) {
 
-	if ( !bp_is_current_component( bp_get_search_slug() ) )
+	if ( ! bp_is_current_component( bp_get_search_slug() ) ) {
 		return;
+	}
 
 	if ( empty( $_POST['search-terms'] ) ) {
 		bp_core_redirect( bp_get_root_domain() );
@@ -1700,6 +1792,25 @@ function bp_core_print_generation_time() {
 }
 add_action( 'wp_footer', 'bp_core_print_generation_time' );
 
+/**
+ * Remove "prev" and "next" relational links from <head> on BuddyPress pages.
+ *
+ * WordPress automatically generates these relational links to the current
+ * page.  However, BuddyPress doesn't adhere to these links.  In this
+ * function, we remove these links when on a BuddyPress page.  This also
+ * prevents additional, unnecessary queries from running.
+ *
+ * @since BuddyPress (2.1.0)
+ */
+function bp_remove_adjacent_posts_rel_link() {
+	if ( ! is_buddypress() ) {
+		return;
+	}
+
+	remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0 );
+}
+add_action( 'bp_init', 'bp_remove_adjacent_posts_rel_link' );
+
 /** Nav Menu ******************************************************************/
 
 /**
@@ -1875,15 +1986,52 @@ function bp_nav_menu_get_item_url( $slug ) {
 	return $nav_item_url;
 }
 
+/** Suggestions***************************************************************/
+
 /**
- * Get the javascript dependencies for buddypress.js.
- *
- * @since BuddyPress (2.0.0)
+ * BuddyPress Suggestions API for types of at-mentions.
  *
- * @uses apply_filters() to allow other component to load extra dependencies
+ * This is used to power BuddyPress' at-mentions suggestions, but it is flexible enough to be used
+ * for similar kinds of future requirements, or those implemented by third-party developers.
  *
- * @return array The javascript dependencies.
+ * @param array $args
+ * @return array|WP_Error Array of results. If there were any problems, returns a WP_Error object.
+ * @since BuddyPress (2.1.0)
  */
-function bp_core_get_js_dependencies() {
-	return apply_filters( 'bp_core_get_js_dependencies', array( 'jquery' ) );
-}
+function bp_core_get_suggestions( $args ) {
+	$args = wp_parse_args( $args );
+
+	if ( ! $args['type'] ) {
+		return new WP_Error( 'missing_parameter' );
+	}
+
+	// Members @name suggestions.
+	if ( $args['type'] === 'members' ) {
+		$class = 'BP_Members_Suggestions';
+
+		// Members @name suggestions for users in a specific Group.
+		if ( isset( $args['group_id'] ) ) {
+			$class = 'BP_Groups_Member_Suggestions';
+		}
+
+	} else {
+		// If you've built a custom suggestions service, use this to tell BP the name of your class.
+		$class = apply_filters( 'bp_suggestions_services', '', $args );
+	}
+
+	if ( ! $class || ! class_exists( $class ) ) {
+		return new WP_Error( 'missing_parameter' );
+	}
+
+
+	$suggestions = new $class( $args );
+	$validation  = $suggestions->validate();
+
+	if ( is_wp_error( $validation ) ) {
+		$retval = $validation;
+	} else {
+		$retval = $suggestions->get_suggestions();
+	}
+
+	return apply_filters( 'bp_core_get_suggestions', $retval, $args );
+}
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-core/bp-core-loader.php b/wp-content/plugins/buddypress/bp-core/bp-core-loader.php
index b5ce7fecb..6b0d55669 100644
--- a/wp-content/plugins/buddypress/bp-core/bp-core-loader.php
+++ b/wp-content/plugins/buddypress/bp-core/bp-core-loader.php
@@ -230,7 +230,7 @@ class BP_Core extends BP_Component {
 
 			// Add 'Profile' to the main navigation
 			$main_nav = array(
-				'name'                => __( 'Profile', 'buddypress' ),
+				'name'                => _x( 'Profile', 'Main navigation', 'buddypress' ),
 				'slug'                => $bp->core->profile->slug,
 				'position'            => 20,
 				'screen_function'     => 'bp_core_catch_profile_uri',
@@ -241,7 +241,7 @@ class BP_Core extends BP_Component {
 
 			// Add the subnav items to the profile
 			$sub_nav[] = array(
-				'name'            => __( 'View', 'buddypress' ),
+				'name'            => _x( 'View', 'Profile sub nav', 'buddypress' ),
 				'slug'            => 'public',
 				'parent_url'      => $profile_link,
 				'parent_slug'     => $bp->core->profile->slug,
@@ -263,4 +263,4 @@ class BP_Core extends BP_Component {
 function bp_setup_core() {
 	buddypress()->core = new BP_Core();
 }
-add_action( 'bp_setup_components', 'bp_setup_core', 2 );
+add_action( 'bp_loaded', 'bp_setup_core', 0 );
diff --git a/wp-content/plugins/buddypress/bp-core/bp-core-options.php b/wp-content/plugins/buddypress/bp-core/bp-core-options.php
index 580ceb10b..f92706900 100644
--- a/wp-content/plugins/buddypress/bp-core/bp-core-options.php
+++ b/wp-content/plugins/buddypress/bp-core/bp-core-options.php
@@ -149,8 +149,9 @@ function bp_delete_options() {
 	$options = bp_get_default_options();
 
 	// Add default options
-	foreach ( $options as $key => $value )
+	foreach ( array_keys( $options ) as $key ) {
 		delete_option( $key );
+	}
 
 	// Allow previously activated plugins to append their own options.
 	do_action( 'bp_delete_options' );
@@ -173,8 +174,9 @@ function bp_setup_option_filters() {
 	$options = bp_get_default_options();
 
 	// Add filters to each BuddyPress option
-	foreach ( $options as $key => $value )
+	foreach ( array_keys( $options ) as $key ) {
 		add_filter( 'pre_option_' . $key, 'bp_pre_get_option' );
+	}
 
 	// Allow previously activated plugins to append their own options.
 	do_action( 'bp_setup_option_filters' );
@@ -187,12 +189,11 @@ function bp_setup_option_filters() {
  *
  * @since BuddyPress (1.6)
  *
- * @global BuddyPress $bp
  * @param bool $value Optional. Default value false
  * @return mixed false if not overloaded, mixed if set
  */
 function bp_pre_get_option( $value = false ) {
-	global $bp;
+	$bp = buddypress();
 
 	// Get the name of the current filter so we can manipulate it
 	$filter = current_filter();
@@ -201,8 +202,9 @@ function bp_pre_get_option( $value = false ) {
 	$option = str_replace( 'pre_option_', '', $filter );
 
 	// Check the options global for preset value
-	if ( !empty( $bp->options[$option] ) )
-		$value = $bp->options[$option];
+	if ( ! empty( $bp->options[ $option ] ) ) {
+		$value = $bp->options[ $option ];
+	}
 
 	// Always return a value, even if false
 	return $value;
@@ -240,6 +242,7 @@ function bp_get_option( $option_name, $default = '' ) {
  *
  * @param string $option_name The option key to be set.
  * @param mixed $value The value to be set.
+ * @return bool True on success, false on failure.
  */
 function bp_add_option( $option_name, $value ) {
 	return add_blog_option( bp_get_root_blog_id(), $option_name, $value );
@@ -258,9 +261,10 @@ function bp_add_option( $option_name, $value ) {
  *
  * @param string $option_name The option key to be set.
  * @param string $value The value to be set.
+ * @return bool True on success, false on failure.
  */
 function bp_update_option( $option_name, $value ) {
-	update_blog_option( bp_get_root_blog_id(), $option_name, $value );
+	return update_blog_option( bp_get_root_blog_id(), $option_name, $value );
 }
 
 /**
@@ -275,9 +279,10 @@ function bp_update_option( $option_name, $value ) {
  * @uses bp_get_root_blog_id()
  *
  * @param string $option_name The option key to be deleted.
+ * @return bool True on success, false on failure.
  */
 function bp_delete_option( $option_name ) {
-	delete_blog_option( bp_get_root_blog_id(), $option_name );
+	return delete_blog_option( bp_get_root_blog_id(), $option_name );
 }
 
 /**
@@ -379,26 +384,29 @@ function bp_core_get_root_options() {
 
 			// Loop through options
 			foreach ( $root_blog_options as $old_meta_key => $old_meta_default ) {
-				// Clear out the value from the last time around
-				unset( $old_meta_value );
 
 				if ( isset( $existing_options[$old_meta_key] ) ) {
 					continue;
 				}
 
 				// Get old site option
-				if ( is_multisite() )
+				if ( is_multisite() ) {
 					$old_meta_value = get_site_option( $old_meta_key );
+				}
 
 				// No site option so look in root blog
-				if ( empty( $old_meta_value ) )
+				if ( empty( $old_meta_value ) ) {
 					$old_meta_value = bp_get_option( $old_meta_key, $old_meta_default );
+				}
 
 				// Update the root blog option
 				bp_update_option( $old_meta_key, $old_meta_value );
 
 				// Update the global array
 				$root_blog_options_meta[$old_meta_key] = $old_meta_value;
+
+				// Clear out the value for the next time around
+				unset( $old_meta_value );
 			}
 
 			$root_blog_options_meta = array_merge( $root_blog_options_meta, $existing_options );
@@ -407,8 +415,9 @@ function bp_core_get_root_options() {
 		// We're all matched up
 		} else {
 			// Loop through our results and make them usable
-			foreach ( $root_blog_options_meta as $root_blog_option )
+			foreach ( $root_blog_options_meta as $root_blog_option ) {
 				$root_blog_options[$root_blog_option->name] = $root_blog_option->value;
+			}
 
 			// Copy the options no the return val
 			$root_blog_options_meta = $root_blog_options;
@@ -436,7 +445,7 @@ function bp_core_get_root_options() {
  *        Default: true.
  * @return bool True if profile sync is enabled, otherwise false.
  */
-function bp_disable_profile_sync( $default = true ) {
+function bp_disable_profile_sync( $default = false ) {
 	return (bool) apply_filters( 'bp_disable_profile_sync', (bool) bp_get_option( 'bp-disable-profile-sync', $default ) );
 }
 
diff --git a/wp-content/plugins/buddypress/bp-core/bp-core-template-loader.php b/wp-content/plugins/buddypress/bp-core/bp-core-template-loader.php
index 85b1a9087..89ee7b7aa 100644
--- a/wp-content/plugins/buddypress/bp-core/bp-core-template-loader.php
+++ b/wp-content/plugins/buddypress/bp-core/bp-core-template-loader.php
@@ -122,18 +122,17 @@ function bp_locate_template( $template_names, $load = false, $require_once = tru
  *
  * @since BuddyPress (1.7.0)
  *
- * @todo Make 'callable' instead of 'function'.
- *
- * @param string $location Callback function that returns the stack location.
+ * @param string $location_callback Callback function that returns the stack location.
  * @param int $priority Optional. The priority parameter as passed to
  *        add_filter(). Default: 10.
  * @return bool See {@link add_filter()}.
  */
 function bp_register_template_stack( $location_callback = '', $priority = 10 ) {
 
-	// Bail if no location, or function does not exist
-	if ( empty( $location_callback ) || ! function_exists( $location_callback ) )
+	// Bail if no location, or function/method is not callable
+	if ( empty( $location_callback ) || ! is_callable( $location_callback ) ) {
 		return false;
+	}
 
 	// Add location callback to template stack
 	return add_filter( 'bp_template_stack', $location_callback, (int) $priority );
@@ -146,16 +145,17 @@ function bp_register_template_stack( $location_callback = '', $priority = 10 ) {
  *
  * @see bp_register_template_stack()
  *
- * @param string $location Callback function that returns the stack location.
+ * @param string $location_callback Callback function that returns the stack location.
  * @param int $priority Optional. The priority parameter passed to
  *        {@link bp_register_template_stack()}. Default: 10.
  * @return bool See {@link remove_filter()}.
  */
 function bp_deregister_template_stack( $location_callback = '', $priority = 10 ) {
 
-	// Bail if no location, or function does not exist
-	if ( empty( $location_callback ) || ! function_exists( $location_callback ) )
+	// Bail if no location, or function/method is not callable
+	if ( empty( $location_callback ) || ! is_callable( $location_callback ) ) {
 		return false;
+	}
 
 	// Add location callback to template stack
 	return remove_filter( 'bp_template_stack', $location_callback, (int) $priority );
diff --git a/wp-content/plugins/buddypress/bp-core/bp-core-template.php b/wp-content/plugins/buddypress/bp-core/bp-core-template.php
index de0570151..c86efdb7e 100644
--- a/wp-content/plugins/buddypress/bp-core/bp-core-template.php
+++ b/wp-content/plugins/buddypress/bp-core/bp-core-template.php
@@ -23,18 +23,17 @@ if ( !defined( 'ABSPATH' ) ) exit;
  * The function will also analyze the current action for the current component
  * to determine whether or not to highlight a particular sub nav item.
  *
- * @global BuddyPress $bp The one true BuddyPress instance.
  * @uses bp_get_user_nav() Renders the navigation for a profile of a currently
  *       viewed user.
  */
 function bp_get_options_nav() {
-	global $bp;
+	$bp = buddypress();
 
-	// If we are looking at a member profile, then the we can use the current component as an
-	// index. Otherwise we need to use the component's root_slug
+	// If we are looking at a member profile, then the we can use the current
+	// component as an index. Otherwise we need to use the component's root_slug
 	$component_index = !empty( $bp->displayed_user ) ? bp_current_component() : bp_get_root_slug( bp_current_component() );
 
-	if ( !bp_is_single_item() ) {
+	if ( ! bp_is_single_item() ) {
 		if ( !isset( $bp->bp_options_nav[$component_index] ) || count( $bp->bp_options_nav[$component_index] ) < 1 ) {
 			return false;
 		} else {
@@ -50,8 +49,9 @@ function bp_get_options_nav() {
 
 	// Loop through each navigation item
 	foreach ( (array) $bp->bp_options_nav[$the_index] as $subnav_item ) {
-		if ( !$subnav_item['user_has_access'] )
+		if ( empty( $subnav_item['user_has_access'] ) ) {
 			continue;
+		}
 
 		// If the current action or an action variable matches the nav item id, then add a highlight CSS class.
 		if ( $subnav_item['slug'] == bp_current_action() ) {
@@ -75,10 +75,11 @@ function bp_get_options_nav() {
  * @todo Deprecate.
  */
 function bp_get_options_title() {
-	global $bp;
+	$bp = buddypress();
 
-	if ( empty( $bp->bp_options_title ) )
+	if ( empty( $bp->bp_options_title ) ) {
 		$bp->bp_options_title = __( 'Options', 'buddypress' );
+	}
 
 	echo apply_filters( 'bp_get_options_title', esc_attr( $bp->bp_options_title ) );
 }
@@ -101,7 +102,7 @@ function bp_get_directory_title( $component = '' ) {
 		$title = buddypress()->{$component}->directory_title;
 
 	// If none is found, concatenate
-	} else if ( isset( buddypress()->{$component}->name ) ) {
+	} elseif ( isset( buddypress()->{$component}->name ) ) {
 		$title = sprintf( __( '%s Directory', 'buddypress' ), buddypress()->{$component}->name );
 	}
 
@@ -118,19 +119,10 @@ function bp_get_directory_title( $component = '' ) {
  *
  * Not currently used in BuddyPress.
  *
- * @global BuddyPress $bp The one true BuddyPress instance.
- * @todo Deprecate.
- *
- * @return bool Returns true if an options avatar has been set, otherwise
- *         false.
+ * @return bool Returns true if an options avatar has been set, otherwise false.
  */
 function bp_has_options_avatar() {
-	global $bp;
-
-	if ( empty( $bp->bp_options_avatar ) )
-		return false;
-
-	return true;
+	return (bool) buddypress()->bp_options_avatar;
 }
 
 /**
@@ -141,41 +133,45 @@ function bp_has_options_avatar() {
  * @todo Deprecate.
  */
 function bp_get_options_avatar() {
-	global $bp;
-
-	echo apply_filters( 'bp_get_options_avatar', $bp->bp_options_avatar );
+	echo apply_filters( 'bp_get_options_avatar', buddypress()->bp_options_avatar );
 }
 
 /**
  * Output a comment author's avatar.
  *
  * Not currently used in BuddyPress.
- *
- * @todo Deprecate.
  */
 function bp_comment_author_avatar() {
 	global $comment;
 
-	if ( function_exists( 'bp_core_fetch_avatar' ) )
-		echo apply_filters( 'bp_comment_author_avatar', bp_core_fetch_avatar( array( 'item_id' => $comment->user_id, 'type' => 'thumb', 'alt' => sprintf( __( 'Avatar of %s', 'buddypress' ), bp_core_get_user_displayname( $comment->user_id ) ) ) ) );
-	else if ( function_exists('get_avatar') )
+	if ( function_exists( 'bp_core_fetch_avatar' ) ) {
+		echo apply_filters( 'bp_comment_author_avatar', bp_core_fetch_avatar( array(
+			'item_id' => $comment->user_id,
+			'type'    => 'thumb',
+			'alt'     => sprintf( __( 'Profile photo of %s', 'buddypress' ), bp_core_get_user_displayname( $comment->user_id ) )
+		) ) );
+	} elseif ( function_exists( 'get_avatar' ) ) {
 		get_avatar();
+	}
 }
 
 /**
  * Output a post author's avatar.
  *
  * Not currently used in BuddyPress.
- *
- * @todo Deprecate.
  */
 function bp_post_author_avatar() {
 	global $post;
 
-	if ( function_exists( 'bp_core_fetch_avatar' ) )
-		echo apply_filters( 'bp_post_author_avatar', bp_core_fetch_avatar( array( 'item_id' => $post->post_author, 'type' => 'thumb', 'alt' => sprintf( __( 'Avatar of %s', 'buddypress' ), bp_core_get_user_displayname( $post->post_author ) ) ) ) );
-	else if ( function_exists('get_avatar') )
+	if ( function_exists( 'bp_core_fetch_avatar' ) ) {
+		echo apply_filters( 'bp_post_author_avatar', bp_core_fetch_avatar( array(
+			'item_id' => $post->post_author,
+			'type'    => 'thumb',
+			'alt'     => sprintf( __( 'Profile photo of %s', 'buddypress' ), bp_core_get_user_displayname( $post->post_author ) )
+		) ) );
+	} elseif ( function_exists( 'get_avatar' ) ) {
 		get_avatar();
+	}
 }
 
 /**
@@ -191,12 +187,10 @@ function bp_avatar_admin_step() {
 	 *         if none is found.
 	 */
 	function bp_get_avatar_admin_step() {
-		global $bp;
-
-		if ( isset( $bp->avatar_admin->step ) )
-			$step = $bp->avatar_admin->step;
-		else
-			$step = 'upload-image';
+		$bp   = buddypress();
+		$step = isset( $bp->avatar_admin->step )
+			? $step = $bp->avatar_admin->step
+			: 'upload-image';
 
 		return apply_filters( 'bp_get_avatar_admin_step', $step );
 	}
@@ -213,12 +207,10 @@ function bp_avatar_to_crop() {
 	 * @return string URL of the avatar awaiting cropping.
 	 */
 	function bp_get_avatar_to_crop() {
-		global $bp;
-
-		if ( isset( $bp->avatar_admin->image->url ) )
-			$url = $bp->avatar_admin->image->url;
-		else
-			$url = '';
+		$bp  = buddypress();
+		$url = isset( $bp->avatar_admin->image->url )
+			? $bp->avatar_admin->image->url
+			: '';
 
 		return apply_filters( 'bp_get_avatar_to_crop', $url );
 	}
@@ -235,9 +227,12 @@ function bp_avatar_to_crop_src() {
 	 * @return string Relative file path to the avatar.
 	 */
 	function bp_get_avatar_to_crop_src() {
-		global $bp;
+		$bp  = buddypress();
+		$src = isset( $bp->avatar_admin->image->dir )
+			? str_replace( WP_CONTENT_DIR, '', $bp->avatar_admin->image->dir )
+			: '';
 
-		return apply_filters( 'bp_get_avatar_to_crop_src', str_replace( WP_CONTENT_DIR, '', $bp->avatar_admin->image->dir ) );
+		return apply_filters( 'bp_get_avatar_to_crop_src', $src );
 	}
 
 /**
@@ -248,9 +243,9 @@ function bp_avatar_to_crop_src() {
  * @todo Deprecate.
  */
 function bp_avatar_cropper() {
-	global $bp;
-
-	echo '<img id="avatar-to-crop" class="avatar" src="' . $bp->avatar_admin->image . '" />';
+?>
+	<img id="avatar-to-crop" class="avatar" src="<?php echo esc_url( buddypress()->avatar_admin->image ); ?>" />
+<?php
 }
 
 /**
@@ -281,13 +276,16 @@ function bp_site_name() {
  *         'date_format' and 'time_format' settings are). False on failure.
  */
 function bp_format_time( $time, $just_date = false, $localize_time = true ) {
-	if ( !isset( $time ) || !is_numeric( $time ) )
+
+	if ( ! isset( $time ) || ! is_numeric( $time ) ) {
 		return false;
+	}
 
 	// Get GMT offset from root blog
 	$root_blog_offset = false;
-	if ( $localize_time )
+	if ( ! empty( $localize_time ) ) {
 		$root_blog_offset = get_blog_option( bp_get_root_blog_id(), 'gmt_offset' );
+	}
 
 	// Calculate offset time
 	$time_offset = $time + ( $root_blog_offset * 3600 );
@@ -296,7 +294,7 @@ function bp_format_time( $time, $just_date = false, $localize_time = true ) {
 	$date = date_i18n( get_option( 'date_format' ), $time_offset );
 
 	// Should we show the time also?
-	if ( !$just_date ) {
+	if ( empty( $just_date ) ) {
 		// Current time (9:50pm)
 		$time = date_i18n( get_option( 'time_format' ), $time_offset );
 
@@ -327,8 +325,9 @@ function bp_format_time( $time, $just_date = false, $localize_time = true ) {
  */
 function bp_word_or_name( $youtext, $nametext, $capitalize = true, $echo = true ) {
 
-	if ( !empty( $capitalize ) )
+	if ( ! empty( $capitalize ) ) {
 		$youtext = bp_core_ucfirst( $youtext );
+	}
 
 	if ( bp_displayed_user_id() == bp_loggedin_user_id() ) {
 		if ( true == $echo ) {
@@ -382,27 +381,32 @@ function bp_search_form_type_select() {
 
 	$options = array();
 
-	if ( bp_is_active( 'xprofile' ) )
-		$options['members'] = __( 'Members', 'buddypress' );
+	if ( bp_is_active( 'xprofile' ) ) {
+		$options['members'] = _x( 'Members', 'search form', 'buddypress' );
+	}
 
-	if ( bp_is_active( 'groups' ) )
-		$options['groups']  = __( 'Groups',  'buddypress' );
+	if ( bp_is_active( 'groups' ) ) {
+		$options['groups']  = _x( 'Groups', 'search form', 'buddypress' );
+	}
 
-	if ( bp_is_active( 'blogs' ) && is_multisite() )
-		$options['blogs']   = __( 'Blogs',   'buddypress' );
+	if ( bp_is_active( 'blogs' ) && is_multisite() ) {
+		$options['blogs']   = _x( 'Blogs', 'search form', 'buddypress' );
+	}
 
-	if ( bp_is_active( 'forums' ) && bp_forums_is_installed_correctly() && bp_forums_has_directory() )
-		$options['forums']  = __( 'Forums',  'buddypress' );
+	if ( bp_is_active( 'forums' ) && bp_forums_is_installed_correctly() && bp_forums_has_directory() ) {
+		$options['forums']  = _x( 'Forums', 'search form', 'buddypress' );
+	}
 
-	$options['posts'] = __( 'Posts', 'buddypress' );
+	$options['posts'] = _x( 'Posts', 'search form', 'buddypress' );
 
 	// Eventually this won't be needed and a page will be built to integrate all search results.
-	$selection_box  = '<label for="search-which" class="accessibly-hidden">' . __( 'Search these:', 'buddypress' ) . '</label>';
+	$selection_box  = '<label for="search-which" class="accessibly-hidden">' . _x( 'Search these:', 'search form', 'buddypress' ) . '</label>';
 	$selection_box .= '<select name="search-which" id="search-which" style="width: auto">';
 
 	$options = apply_filters( 'bp_search_form_type_select_options', $options );
-	foreach( (array) $options as $option_value => $option_title )
+	foreach( (array) $options as $option_value => $option_title ) {
 		$selection_box .= sprintf( '<option value="%s">%s</option>', $option_value, $option_title );
+	}
 
 	$selection_box .= '</select>';
 
@@ -432,8 +436,9 @@ function bp_search_default_text( $component = '' ) {
 	function bp_get_search_default_text( $component = '' ) {
 		global $bp;
 
-		if ( empty( $component ) )
+		if ( empty( $component ) ) {
 			$component = bp_current_component();
+		}
 
 		$default_text = __( 'Search anything...', 'buddypress' );
 
@@ -446,8 +451,9 @@ function bp_search_default_text( $component = '' ) {
 				// name out of $bp->pages
 				if ( !empty( $bp->pages->{$component}->slug ) ) {
 					$key = $bp->pages->{$component}->slug;
-					if ( !empty( $bp->{$key}->search_string ) )
+					if ( !empty( $bp->{$key}->search_string ) ) {
 						$default_text = $bp->{$key}->search_string;
+					}
 				}
 			}
 		}
@@ -533,32 +539,33 @@ function bp_button( $args = '' ) {
  * @return string Trimmed string.
  */
 function bp_create_excerpt( $text, $length = 225, $options = array() ) {
+
 	// Backward compatibility. The third argument used to be a boolean $filter_shortcodes
 	$filter_shortcodes_default = is_bool( $options ) ? $options : true;
 
-	$defaults = array(
+	$r = bp_parse_args( $options, array(
 		'ending'            => __( ' [&hellip;]', 'buddypress' ),
 		'exact'             => false,
 		'html'              => true,
 		'filter_shortcodes' => $filter_shortcodes_default
-	);
-	$r = wp_parse_args( $options, $defaults );
-	extract( $r );
+	), 'create_excerpt' );
 
 	// Save the original text, to be passed along to the filter
 	$original_text = $text;
 
 	// Allow plugins to modify these values globally
-	$length = apply_filters( 'bp_excerpt_length', $length );
-	$ending = apply_filters( 'bp_excerpt_append_text', $ending );
+	$length = apply_filters( 'bp_excerpt_length',      $length      );
+	$ending = apply_filters( 'bp_excerpt_append_text', $r['ending'] );
 
 	// Remove shortcodes if necessary
-	if ( !empty( $filter_shortcodes ) )
+	if ( ! empty( $r['filter_shortcodes'] ) ) {
 		$text = strip_shortcodes( $text );
+	}
 
 	// When $html is true, the excerpt should be created without including HTML tags in the
 	// excerpt length
-	if ( !empty( $html ) ) {
+	if ( ! empty( $r['html'] ) ) {
+
 		// The text is short enough. No need to truncate
 		if ( mb_strlen( preg_replace( '/<.*?>/', '', $text ) ) <= $length ) {
 			return $text;
@@ -571,20 +578,22 @@ function bp_create_excerpt( $text, $length = 225, $options = array() ) {
 		// Find all the tags and put them in a stack for later use
 		preg_match_all( '/(<\/?([\w+]+)[^>]*>)?([^<>]*)/', $text, $tags, PREG_SET_ORDER );
 		foreach ( $tags as $tag ) {
+
 			// Process tags that need to be closed
 			if ( !preg_match( '/img|br|input|hr|area|base|basefont|col|frame|isindex|link|meta|param/s',  $tag[2] ) ) {
 				if ( preg_match( '/<[\w]+[^>]*>/s', $tag[0] ) ) {
 					array_unshift( $openTags, $tag[2] );
-				} else if ( preg_match('/<\/([\w]+)[^>]*>/s', $tag[0], $closeTag ) ) {
+				} elseif ( preg_match('/<\/([\w]+)[^>]*>/s', $tag[0], $closeTag ) ) {
 					$pos = array_search( $closeTag[1], $openTags );
 					if ( $pos !== false ) {
 						array_splice( $openTags, $pos, 1 );
 					}
 				}
 			}
-			$truncate .= $tag[1];
 
+			$truncate     .= $tag[1];
 			$contentLength = mb_strlen( preg_replace( '/&[0-9a-z]{2,8};|&#[0-9]{1,7};|&#x[0-9a-f]{1,6};/i', ' ', $tag[3] ) );
+
 			if ( $contentLength + $totalLength > $length ) {
 				$left = $length - $totalLength;
 				$entitiesLength = 0;
@@ -618,10 +627,10 @@ function bp_create_excerpt( $text, $length = 225, $options = array() ) {
 	}
 
 	// If $exact is false, we can't break on words
-	if ( empty( $exact ) ) {
+	if ( empty( $r['exact'] ) ) {
 		$spacepos = mb_strrpos( $truncate, ' ' );
 		if ( isset( $spacepos ) ) {
-			if ( $html ) {
+			if ( $r['html'] ) {
 				$bits = mb_substr( $truncate, $spacepos );
 				preg_match_all( '/<\/([a-z]+)>/', $bits, $droppedTags, PREG_SET_ORDER );
 				if ( !empty( $droppedTags ) ) {
@@ -637,16 +646,15 @@ function bp_create_excerpt( $text, $length = 225, $options = array() ) {
 	}
 	$truncate .= $ending;
 
-	if ( $html ) {
+	if ( !empty( $r['html'] ) ) {
 		foreach ( $openTags as $tag ) {
 			$truncate .= '</' . $tag . '>';
 		}
 	}
 
 	return apply_filters( 'bp_create_excerpt', $truncate, $original_text, $length, $options );
-
 }
-add_filter( 'bp_create_excerpt', 'stripslashes_deep' );
+add_filter( 'bp_create_excerpt', 'stripslashes_deep'  );
 add_filter( 'bp_create_excerpt', 'force_balance_tags' );
 
 /**
@@ -691,14 +699,15 @@ function bp_blog_signup_allowed() {
 	 * @return bool True if blog signup is allowed, otherwise false.
 	 */
 	function bp_get_blog_signup_allowed() {
-		global $bp;
 
-		if ( !is_multisite() )
+		if ( ! is_multisite() ) {
 			return false;
+		}
 
-		$status = $bp->site_options['registration'];
-		if ( 'none' != $status && 'user' != $status )
+		$status = buddypress()->site_options['registration'];
+		if ( ( 'none' !== $status ) && ( 'user' !== $status ) ) {
 			return true;
+		}
 
 		return false;
 	}
@@ -710,9 +719,10 @@ function bp_blog_signup_allowed() {
  *         otherwise false.
  */
 function bp_account_was_activated() {
-	global $bp;
-
-	$activation_complete = !empty( $bp->activation_complete ) ? $bp->activation_complete : false;
+	$bp                  = buddypress();
+	$activation_complete = !empty( $bp->activation_complete )
+		? $bp->activation_complete
+		: false;
 
 	return $activation_complete;
 }
@@ -755,12 +765,12 @@ function bp_registration_needs_activation() {
  */
 function bp_get_email_subject( $args = array() ) {
 
-	$r = wp_parse_args( $args, array(
+	$r = bp_parse_args( $args, array(
 		'before'  => '[',
 		'after'   => ']',
 		'default' => __( 'Community', 'buddypress' ),
 		'text'    => ''
-	) );
+	), 'get_email_subject' );
 
 	$subject = $r['before'] . wp_specialchars_decode( bp_get_option( 'blogname', $r['default'] ), ENT_QUOTES ) . $r['after'] . ' ' . $r['text'];
 
@@ -781,10 +791,11 @@ function bp_get_email_subject( $args = array() ) {
  * @return string The AJAX querystring.
  */
 function bp_ajax_querystring( $object = false ) {
-	global $bp;
+	$bp = buddypress();
 
-	if ( !isset( $bp->ajax_querystring ) )
+	if ( ! isset( $bp->ajax_querystring ) ) {
 		$bp->ajax_querystring = '';
+	}
 
 	return apply_filters( 'bp_ajax_querystring', $bp->ajax_querystring, $object );
 }
@@ -797,8 +808,11 @@ function bp_ajax_querystring( $object = false ) {
  * @return string Component name.
  */
 function bp_current_component() {
-	global $bp;
-	$current_component = !empty( $bp->current_component ) ? $bp->current_component : false;
+	$bp                = buddypress();
+	$current_component = !empty( $bp->current_component )
+		? $bp->current_component
+		: false;
+
 	return apply_filters( 'bp_current_component', $current_component );
 }
 
@@ -808,8 +822,11 @@ function bp_current_component() {
  * @return string Action name.
  */
 function bp_current_action() {
-	global $bp;
-	$current_action = !empty( $bp->current_action ) ? $bp->current_action : '';
+	$bp             = buddypress();
+	$current_action = !empty( $bp->current_action )
+		? $bp->current_action
+		: '';
+
 	return apply_filters( 'bp_current_action', $current_action );
 }
 
@@ -819,8 +836,11 @@ function bp_current_action() {
  * @return unknown
  */
 function bp_current_item() {
-	global $bp;
-	$current_item = !empty( $bp->current_item ) ? $bp->current_item : false;
+	$bp           = buddypress();
+	$current_item = !empty( $bp->current_item )
+		? $bp->current_item
+		: false;
+
 	return apply_filters( 'bp_current_item', $current_item );
 }
 
@@ -831,8 +851,11 @@ function bp_current_item() {
  *         if the array is empty.
  */
 function bp_action_variables() {
-	global $bp;
-	$action_variables = !empty( $bp->action_variables ) ? $bp->action_variables : false;
+	$bp               = buddypress();
+	$action_variables = !empty( $bp->action_variables )
+		? $bp->action_variables
+		: false;
+
 	return apply_filters( 'bp_action_variables', $action_variables );
 }
 
@@ -847,7 +870,9 @@ function bp_action_variables() {
  */
 function bp_action_variable( $position = 0 ) {
 	$action_variables = bp_action_variables();
-	$action_variable  = isset( $action_variables[$position] ) ? $action_variables[$position] : false;
+	$action_variable  = isset( $action_variables[ $position ] )
+		? $action_variables[ $position ]
+		: false;
 
 	return apply_filters( 'bp_action_variable', $action_variable, $position );
 }
@@ -864,9 +889,9 @@ function bp_root_domain() {
 	 * @return string URL of the BP root blog.
 	 */
 	function bp_get_root_domain() {
-		global $bp;
+		$bp = buddypress();
 
-		if ( isset( $bp->root_domain ) && !empty( $bp->root_domain ) ) {
+		if ( ! empty( $bp->root_domain ) ) {
 			$domain = $bp->root_domain;
 		} else {
 			$domain          = bp_core_get_root_domain();
@@ -913,35 +938,37 @@ function bp_root_slug( $component = '' ) {
 	 *
 	 * @since BuddyPress (1.5.0)
 	 *
-	 * @global BuddyPress $bp The one true BuddyPress instance.
-	 *
 	 * @param string $component Optional. Defaults to the current component.
 	 * @return string $root_slug The root slug.
 	 */
 	function bp_get_root_slug( $component = '' ) {
-		global $bp;
-
+		$bp        = buddypress();
 		$root_slug = '';
 
 		// Use current global component if none passed
-		if ( empty( $component ) )
+		if ( empty( $component ) ) {
 			$component = bp_current_component();
+		}
 
 		// Component is active
-		if ( !empty( $bp->active_components[$component] ) ) {
+		if ( ! empty( $bp->active_components[ $component ] ) ) {
+
 			// Backward compatibility: in legacy plugins, the canonical component id
 			// was stored as an array value in $bp->active_components
-			$component_name = '1' == $bp->active_components[$component] ? $component : $bp->active_components[$component];
+			$component_name = ( '1' == $bp->active_components[ $component ] )
+				? $component
+				: $bp->active_components[$component];
 
 			// Component has specific root slug
-			if ( !empty( $bp->{$component_name}->root_slug ) ) {
+			if ( ! empty( $bp->{$component_name}->root_slug ) ) {
 				$root_slug = $bp->{$component_name}->root_slug;
 			}
 		}
 
 		// No specific root slug, so fall back to component slug
-		if ( empty( $root_slug ) )
+		if ( empty( $root_slug ) ) {
 			$root_slug = $component;
+		}
 
 		return apply_filters( 'bp_get_root_slug', $root_slug, $component );
 	}
@@ -951,25 +978,25 @@ function bp_root_slug( $component = '' ) {
  *
  * @since BuddyPress (1.5.0)
  *
- * @global BuddyPress $bp The one true BuddyPress instance.
- *
  * @param string $root_slug Needle to our active component haystack.
  * @return mixed False if none found, component name if found.
  */
 function bp_get_name_from_root_slug( $root_slug = '' ) {
-	global $bp;
+	$bp = buddypress();
 
 	// If no slug is passed, look at current_component
-	if ( empty( $root_slug ) )
+	if ( empty( $root_slug ) ) {
 		$root_slug = bp_current_component();
+	}
 
 	// No current component or root slug, so flee
-	if ( empty( $root_slug ) )
+	if ( empty( $root_slug ) ) {
 		return false;
+	}
 
 	// Loop through active components and look for a match
 	foreach ( array_keys( $bp->active_components ) as $component ) {
-		if ( ( !empty( $bp->{$component}->slug ) && ( $bp->{$component}->slug == $root_slug ) ) || ( !empty( $bp->{$component}->root_slug ) && ( $bp->{$component}->root_slug == $root_slug ) ) ) {
+		if ( ( ! empty( $bp->{$component}->slug ) && ( $bp->{$component}->slug == $root_slug ) ) || ( ! empty( $bp->{$component}->root_slug ) && ( $bp->{$component}->root_slug === $root_slug ) ) ) {
 			return $bp->{$component}->name;
 		}
 	}
@@ -978,9 +1005,11 @@ function bp_get_name_from_root_slug( $root_slug = '' ) {
 }
 
 function bp_user_has_access() {
-	$has_access = ( bp_current_user_can( 'bp_moderate' ) || bp_is_my_profile() ) ? true : false;
+	$has_access = ( bp_current_user_can( 'bp_moderate' ) || bp_is_my_profile() )
+		? true
+		: false;
 
-	return apply_filters( 'bp_user_has_access', $has_access );
+	return (bool) apply_filters( 'bp_user_has_access', $has_access );
 }
 
 /**
@@ -1013,7 +1042,9 @@ function bp_search_slug() {
  */
 function bp_displayed_user_id() {
 	$bp = buddypress();
-	$id = !empty( $bp->displayed_user->id ) ? $bp->displayed_user->id : 0;
+	$id = !empty( $bp->displayed_user->id )
+		? $bp->displayed_user->id
+		: 0;
 
 	return (int) apply_filters( 'bp_displayed_user_id', $id );
 }
@@ -1027,7 +1058,9 @@ function bp_displayed_user_id() {
  */
 function bp_loggedin_user_id() {
 	$bp = buddypress();
-	$id = !empty( $bp->loggedin_user->id ) ? $bp->loggedin_user->id : 0;
+	$id = !empty( $bp->loggedin_user->id )
+		? $bp->loggedin_user->id
+		: 0;
 
 	return (int) apply_filters( 'bp_loggedin_user_id', $id );
 }
@@ -1049,7 +1082,7 @@ function bp_loggedin_user_id() {
  * @return bool Returns true if the component matches, or else false.
  */
 function bp_is_current_component( $component ) {
-	global $bp, $wp_query;
+	global $wp_query;
 
 	$is_current_component = false;
 
@@ -1059,8 +1092,11 @@ function bp_is_current_component( $component ) {
 	}
 
 	// Backward compatibility: 'xprofile' should be read as 'profile'
-	if ( 'xprofile' == $component )
+	if ( 'xprofile' === $component ) {
 		$component = 'profile';
+	}
+
+	$bp = buddypress();
 
 	if ( ! empty( $bp->current_component ) ) {
 
@@ -1081,7 +1117,7 @@ function bp_is_current_component( $component ) {
 		// Next, check to see whether $component is a canonical,
 		// non-translatable component name. If so, we can return its
 		// corresponding slug from $bp->active_components.
-		} else if ( $key = array_search( $component, $bp->active_components ) ) {
+		} elseif ( $key = array_search( $component, $bp->active_components ) ) {
 			if ( strstr( $bp->current_component, $key ) ) {
 				$is_current_component = true;
 			}
@@ -1106,13 +1142,16 @@ function bp_is_current_component( $component ) {
 	// Page template fallback check if $bp->current_component is empty
 	} elseif ( !is_admin() && is_a( $wp_query, 'WP_Query' ) && is_page() ) {
 		global $wp_query;
-		$page          = $wp_query->get_queried_object();
-		$custom_fields = get_post_custom_values( '_wp_page_template', $page->ID );
-		$page_template = $custom_fields[0];
 
-		// Component name is in the page template name
-		if ( !empty( $page_template ) && strstr( strtolower( $page_template ), strtolower( $component ) ) ) {
-			$is_current_component = true;
+		$page = $wp_query->get_queried_object();
+		if ( isset( $page->ID ) ) {
+			$custom_fields = get_post_custom_values( '_wp_page_template', $page->ID );
+			$page_template = $custom_fields[0];
+
+			// Component name is in the page template name
+			if ( !empty( $page_template ) && strstr( strtolower( $page_template ), strtolower( $component ) ) ) {
+				$is_current_component = true;
+			}
 		}
 	}
 
@@ -1137,10 +1176,7 @@ function bp_is_current_component( $component ) {
  * @return bool True if the current action matches $action.
  */
 function bp_is_current_action( $action = '' ) {
-	if ( $action == bp_current_action() )
-		return true;
-
-	return false;
+	return (bool) ( $action === bp_current_action() );
 }
 
 /**
@@ -1190,10 +1226,9 @@ function bp_is_action_variable( $action_variable = '', $position = false ) {
  * @return bool True if $item is the current item.
  */
 function bp_is_current_item( $item = '' ) {
-	if ( !empty( $item ) && $item == bp_current_item() )
-		return true;
+	$retval = ( $item === bp_current_item() );
 
-	return false;
+	return (bool) apply_filters( 'bp_is_current_item', $retval, $item );
 }
 
 /**
@@ -1202,12 +1237,14 @@ function bp_is_current_item( $item = '' ) {
  * @return bool True if looking at a single item, otherwise false.
  */
 function bp_is_single_item() {
-	global $bp;
+	$bp     = buddypress();
+	$retval = false;
 
-	if ( !empty( $bp->is_single_item ) )
-		return true;
+	if ( isset( $bp->is_single_item ) ) {
+		$retval = $bp->is_single_item;
+	}
 
-	return false;
+	return (bool) apply_filters( 'bp_is_single_item', $retval );
 }
 
 /**
@@ -1217,12 +1254,14 @@ function bp_is_single_item() {
  *         otherwise false.
  */
 function bp_is_item_admin() {
-	global $bp;
+	$bp     = buddypress();
+	$retval = false;
 
-	if ( !empty( $bp->is_item_admin ) )
-		return true;
+	if ( isset( $bp->is_item_admin ) ) {
+		$retval = $bp->is_item_admin;
+	}
 
-	return false;
+	return (bool) apply_filters( 'bp_is_item_admin', $retval );
 }
 
 /**
@@ -1232,12 +1271,14 @@ function bp_is_item_admin() {
  *         otherwise false.
  */
 function bp_is_item_mod() {
-	global $bp;
+	$bp     = buddypress();
+	$retval = false;
 
-	if ( !empty( $bp->is_item_mod ) )
-		return true;
+	if ( isset( $bp->is_item_mod ) ) {
+		$retval = $bp->is_item_mod;
+	}
 
-	return false;
+	return (bool) apply_filters( 'bp_is_item_mod', $retval );
 }
 
 /**
@@ -1247,34 +1288,47 @@ function bp_is_item_mod() {
  *         false.
  */
 function bp_is_directory() {
-	global $bp;
+	$bp     = buddypress();
+	$retval = false;
 
-	if ( !empty( $bp->is_directory ) )
-		return true;
+	if ( isset( $bp->is_directory ) ) {
+		$retval = $bp->is_directory;
+	}
 
-	return false;
+	return (bool) apply_filters( 'bp_is_directory', $retval );
 }
 
 /**
  * Check to see if a component's URL should be in the root, not under a member page.
  *
- *   Yes ('groups' is root): http://domain.com/groups/the-group
- *   No ('groups' is not-root):  http://domain.com/members/andy/groups/the-group
+ * - Yes ('groups' is root)    : http://domain.com/groups/the-group
+ * - No  ('groups' is not-root): http://domain.com/members/andy/groups/the-group
+ *
+ * This function is on the chopping block. It's currently only used by a few
+ * already deprecated functions.
  *
  * @return bool True if root component, else false.
  */
-function bp_is_root_component( $component_name ) {
-	global $bp;
+function bp_is_root_component( $component_name = '' ) {
+	$bp     = buddypress();
+	$retval = false;
 
-	if ( !isset( $bp->active_components ) )
-		return false;
+	// Default to the current component if none is passed
+	if ( empty( $component_name ) ) {
+		$component_name = bp_current_component();
+	}
 
-	foreach ( (array) $bp->active_components as $key => $slug ) {
-		if ( $key == $component_name || $slug == $component_name )
-			return true;
+	// Loop through active components and check for key/slug matches
+	if ( ! empty( $bp->active_components ) ) {
+		foreach ( (array) $bp->active_components as $key => $slug ) {
+			if ( ( $key === $component_name ) || ( $slug === $component_name ) ) {
+				$retval = true;
+				break;
+			}
+		}
 	}
 
-	return false;
+	return (bool) apply_filters( 'bp_is_root_component', $retval );
 }
 
 /**
@@ -1284,26 +1338,37 @@ function bp_is_root_component( $component_name ) {
  *
  * @since BuddyPress (1.5.0)
  *
- * @global BuddyPress $bp The one true BuddyPress instance.
  * @global $current_blog WordPress global for the current blog.
  *
  * @param string $component Optional. Name of the component to check for.
- *        Default: current component.
+ *                          Default: current component.
  * @return bool True if the specified component is set to be the site's front
- *         page, otherwise false.
+ *              page, otherwise false.
  */
 function bp_is_component_front_page( $component = '' ) {
-	global $bp, $current_blog;
+	global $current_blog;
+
+	$bp = buddypress();
+
+	// Default to the current component if none is passed
+	if ( empty( $component ) ) {
+		$component = bp_current_component();
+	}
 
-	if ( !$component && !empty( $bp->current_component ) )
-		$component = $bp->current_component;
+	// Get the path for the current blog/site
+	$path = is_main_site()
+		? bp_core_get_site_path()
+		: $current_blog->path;
 
-	$path = is_main_site() ? bp_core_get_site_path() : $current_blog->path;
+	// Get the front page variables
+	$show_on_front = get_option( 'show_on_front' );
+	$page_on_front = get_option( 'page_on_front' );
 
-	if ( 'page' != get_option( 'show_on_front' ) || !$component || empty( $bp->pages->{$component} ) || $_SERVER['REQUEST_URI'] != $path )
+	if ( ( 'page' !== $show_on_front ) || empty( $component ) || empty( $bp->pages->{$component} ) || ( $_SERVER['REQUEST_URI'] !== $path ) ) {
 		return false;
+	}
 
-	return apply_filters( 'bp_is_component_front_page', ( $bp->pages->{$component}->id == get_option( 'page_on_front' ) ), $component );
+	return (bool) apply_filters( 'bp_is_component_front_page', ( $bp->pages->{$component}->id == $page_on_front ), $component );
 }
 
 /**
@@ -1318,13 +1383,14 @@ function bp_is_blog_page() {
 
 	$is_blog_page = false;
 
-	// Generally, we can just check to see that there's no current component. The one exception
-	// is single user home tabs, where $bp->current_component is unset. Thus the addition
-	// of the bp_is_user() check.
-	if ( !bp_current_component() && !bp_is_user() )
+	// Generally, we can just check to see that there's no current component.
+	// The one exception is single user home tabs, where $bp->current_component
+	// is unset. Thus the addition of the bp_is_user() check.
+	if ( ! bp_current_component() && ! bp_is_user() ) {
 		$is_blog_page = true;
+	}
 
-	return apply_filters( 'bp_is_blog_page', $is_blog_page );
+	return (bool) apply_filters( 'bp_is_blog_page', $is_blog_page );
 }
 
 /**
@@ -1355,13 +1421,20 @@ function is_buddypress() {
  * @param string $component The component name.
  * @return bool True if the component is active, otherwise false.
  */
-function bp_is_active( $component ) {
-	global $bp;
+function bp_is_active( $component = '' ) {
+	$retval = false;
 
-	if ( isset( $bp->active_components[$component] ) || 'core' == $component )
-		return true;
+	// Default to the current component if none is passed
+	if ( empty( $component ) ) {
+		$component = bp_current_component();
+	}
 
-	return false;
+	// Is component in either the active or required components arrays
+	if ( isset( buddypress()->active_components[ $component ] ) || isset( buddypress()->required_components[ $component ] ) ) {
+		$retval = true;
+	}
+
+	return apply_filters( 'bp_is_active', $retval, $component );
 }
 
 /**
@@ -1370,10 +1443,7 @@ function bp_is_active( $component ) {
  * @return bool True if the current page is part of the Members component.
  */
 function bp_is_members_component() {
-	if ( bp_is_current_component( 'members' ) )
-		return true;
-
-	return false;
+	return (bool) bp_is_current_component( 'members' );
 }
 
 /**
@@ -1382,10 +1452,7 @@ function bp_is_members_component() {
  * @return bool True if the current page is part of the Profile component.
  */
 function bp_is_profile_component() {
-	if ( bp_is_current_component( 'xprofile' ) )
-		return true;
-
-	return false;
+	return (bool) bp_is_current_component( 'xprofile' );
 }
 
 /**
@@ -1394,10 +1461,7 @@ function bp_is_profile_component() {
  * @return bool True if the current page is part of the Activity component.
  */
 function bp_is_activity_component() {
-	if ( bp_is_current_component( 'activity' ) )
-		return true;
-
-	return false;
+	return (bool) bp_is_current_component( 'activity' );
 }
 
 /**
@@ -1406,10 +1470,7 @@ function bp_is_activity_component() {
  * @return bool True if the current page is part of the Blogs component.
  */
 function bp_is_blogs_component() {
-	if ( is_multisite() && bp_is_current_component( 'blogs' ) )
-		return true;
-
-	return false;
+	return (bool) ( is_multisite() && bp_is_current_component( 'blogs' ) );
 }
 
 /**
@@ -1418,10 +1479,7 @@ function bp_is_blogs_component() {
  * @return bool True if the current page is part of the Messages component.
  */
 function bp_is_messages_component() {
-	if ( bp_is_current_component( 'messages' ) )
-		return true;
-
-	return false;
+	return (bool) bp_is_current_component( 'messages' );
 }
 
 /**
@@ -1430,10 +1488,7 @@ function bp_is_messages_component() {
  * @return bool True if the current page is part of the Friends component.
  */
 function bp_is_friends_component() {
-	if ( bp_is_current_component( 'friends' ) )
-		return true;
-
-	return false;
+	return (bool) bp_is_current_component( 'friends' );
 }
 
 /**
@@ -1442,10 +1497,7 @@ function bp_is_friends_component() {
  * @return bool True if the current page is part of the Groups component.
  */
 function bp_is_groups_component() {
-	if ( bp_is_current_component( 'groups' ) )
-		return true;
-
-	return false;
+	return (bool) bp_is_current_component( 'groups' );
 }
 
 /**
@@ -1454,10 +1506,7 @@ function bp_is_groups_component() {
  * @return bool True if the current page is part of the Forums component.
  */
 function bp_is_forums_component() {
-	if ( bp_is_current_component( 'forums' ) )
-		return true;
-
-	return false;
+	return (bool) bp_is_current_component( 'forums' );
 }
 
 /**
@@ -1468,11 +1517,7 @@ function bp_is_forums_component() {
  * @return bool True if the current page is part of the Notifications component.
  */
 function bp_is_notifications_component() {
-	if ( bp_is_current_component( 'notifications' ) ) {
-		return true;
-	}
-
-	return false;
+	return (bool) bp_is_current_component( 'notifications' );
 }
 
 /**
@@ -1481,10 +1526,7 @@ function bp_is_notifications_component() {
  * @return bool True if the current page is part of the Settings component.
  */
 function bp_is_settings_component() {
-	if ( bp_is_current_component( 'settings' ) )
-		return true;
-
-	return false;
+	return (bool) bp_is_current_component( 'settings' );
 }
 
 /**
@@ -1500,10 +1542,9 @@ function bp_is_settings_component() {
  *         packaged components.
  */
 function bp_is_current_component_core() {
-	$retval            = false;
-	$active_components = apply_filters( 'bp_active_components', bp_get_option( 'bp-active-components' ) );
+	$retval = false;
 
-	foreach ( array_keys( $active_components ) as $active_component ) {
+	foreach ( bp_core_get_packaged_component_ids() as $active_component ) {
 		if ( bp_is_current_component( $active_component ) ) {
 			$retval = true;
 			break;
@@ -1519,12 +1560,13 @@ function bp_is_current_component_core() {
  * Is the current page the activity directory ?
  *
  * @since BuddyPress (2.0.0)
- * 
+ *
  * @return True if the current page is the activity directory.
  */
 function bp_is_activity_directory() {
-	if ( ! bp_displayed_user_id() && bp_is_activity_component() && ! bp_current_action() )
+	if ( ! bp_displayed_user_id() && bp_is_activity_component() && ! bp_current_action() ) {
 		return true;
+	}
 
 	return false;
 }
@@ -1535,10 +1577,7 @@ function bp_is_activity_directory() {
  * @return True if the current page is a single activity item permalink.
  */
 function bp_is_single_activity() {
-	if ( bp_is_activity_component() && is_numeric( bp_current_action() ) )
-		return true;
-
-	return false;
+	return (bool) ( bp_is_activity_component() && is_numeric( bp_current_action() ) );
 }
 
 /** User **********************************************************************/
@@ -1547,12 +1586,13 @@ function bp_is_single_activity() {
  * Is the current page the members directory ?
  *
  * @since BuddyPress (2.0.0)
- * 
+ *
  * @return True if the current page is the members directory.
  */
 function bp_is_members_directory() {
-	if ( ! bp_is_user() && bp_is_members_component() )
+	if ( ! bp_is_user() && bp_is_members_component() ) {
 		return true;
+	}
 
 	return false;
 }
@@ -1566,10 +1606,11 @@ function bp_is_members_directory() {
  * @return True if the current page is part of the profile of the logged-in user.
  */
 function bp_is_my_profile() {
-	if ( is_user_logged_in() && bp_loggedin_user_id() == bp_displayed_user_id() )
+	if ( is_user_logged_in() && bp_loggedin_user_id() == bp_displayed_user_id() ) {
 		$my_profile = true;
-	else
+	} else {
 		$my_profile = false;
+	}
 
 	return apply_filters( 'bp_is_my_profile', $my_profile );
 }
@@ -1582,10 +1623,7 @@ function bp_is_my_profile() {
  * @return True if the current page is a user page.
  */
 function bp_is_user() {
-	if ( bp_displayed_user_id() )
-		return true;
-
-	return false;
+	return (bool) bp_displayed_user_id();
 }
 
 /**
@@ -1596,10 +1634,7 @@ function bp_is_user() {
  * @return True if the current page is a user's activity stream page.
  */
 function bp_is_user_activity() {
-	if ( bp_is_user() && bp_is_activity_component() )
-		return true;
-
-	return false;
+	return (bool) ( bp_is_user() && bp_is_activity_component() );
 }
 
 /**
@@ -1611,16 +1646,19 @@ function bp_is_user_activity() {
  */
 function bp_is_user_friends_activity() {
 
-	if ( !bp_is_active( 'friends' ) )
+	if ( ! bp_is_active( 'friends' ) ) {
 		return false;
+	}
 
 	$slug = bp_get_friends_slug();
 
-	if ( empty( $slug ) )
+	if ( empty( $slug ) ) {
 		$slug = 'friends';
+	}
 
-	if ( bp_is_user_activity() && bp_is_current_action( $slug ) )
+	if ( bp_is_user_activity() && bp_is_current_action( $slug ) ) {
 		return true;
+	}
 
 	return false;
 }
@@ -1634,16 +1672,17 @@ function bp_is_user_friends_activity() {
  */
 function bp_is_user_groups_activity() {
 
-	if ( !bp_is_active( 'groups' ) )
+	if ( ! bp_is_active( 'groups' ) ) {
 		return false;
+	}
 
-	$slug = bp_get_groups_slug();
-
-	if ( empty( $slug ) )
-		$slug = 'groups';
+	$slug = ( bp_get_groups_slug() )
+		? bp_get_groups_slug()
+		: 'groups';
 
-	if ( bp_is_user_activity() && bp_is_current_action( $slug ) )
+	if ( bp_is_user_activity() && bp_is_current_action( $slug ) ) {
 		return true;
+	}
 
 	return false;
 }
@@ -1656,10 +1695,7 @@ function bp_is_user_groups_activity() {
  * @return True if the current page is part of a user's extended profile.
  */
 function bp_is_user_profile() {
-	if ( bp_is_profile_component() || bp_is_current_component( 'profile' ) )
-		return true;
-
-	return false;
+	return (bool) ( bp_is_profile_component() || bp_is_current_component( 'profile' ) );
 }
 
 /**
@@ -1670,17 +1706,11 @@ function bp_is_user_profile() {
  * @return True if the current page is a user's profile edit page.
  */
 function bp_is_user_profile_edit() {
-	if ( bp_is_profile_component() && bp_is_current_action( 'edit' ) )
-		return true;
-
-	return false;
+	return (bool) ( bp_is_profile_component() && bp_is_current_action( 'edit' ) );
 }
 
 function bp_is_user_change_avatar() {
-	if ( bp_is_profile_component() && bp_is_current_action( 'change-avatar' ) )
-		return true;
-
-	return false;
+	return (bool) ( bp_is_profile_component() && bp_is_current_action( 'change-avatar' ) );
 }
 
 /**
@@ -1692,11 +1722,13 @@ function bp_is_user_change_avatar() {
  */
 function bp_is_user_forums() {
 
-	if ( ! bp_is_active( 'forums' ) )
+	if ( ! bp_is_active( 'forums' ) ) {
 		return false;
+	}
 
-	if ( bp_is_user() && bp_is_forums_component() )
+	if ( bp_is_user() && bp_is_forums_component() ) {
 		return true;
+	}
 
 	return false;
 }
@@ -1711,10 +1743,7 @@ function bp_is_user_forums() {
  * @return bool True if the current page is a user's Topics Started page.
  */
 function bp_is_user_forums_started() {
-	if ( bp_is_user_forums() && bp_is_current_action( 'topics' ) )
-		return true;
-
-	return false;
+	return (bool) ( bp_is_user_forums() && bp_is_current_action( 'topics' ) );
 }
 
 /**
@@ -1727,10 +1756,7 @@ function bp_is_user_forums_started() {
  * @return bool True if the current page is a user's Replied To forums page.
  */
 function bp_is_user_forums_replied_to() {
-	if ( bp_is_user_forums() && bp_is_current_action( 'replies' ) )
-		return true;
-
-	return false;
+	return (bool) ( bp_is_user_forums() && bp_is_current_action( 'replies' ) );
 }
 
 /**
@@ -1741,10 +1767,7 @@ function bp_is_user_forums_replied_to() {
  * @return bool True if the current page is a user's Groups page.
  */
 function bp_is_user_groups() {
-	if ( bp_is_user() && bp_is_groups_component() )
-		return true;
-
-	return false;
+	return (bool) ( bp_is_user() && bp_is_groups_component() );
 }
 
 /**
@@ -1755,10 +1778,7 @@ function bp_is_user_groups() {
  * @return bool True if the current page is a user's Blogs page.
  */
 function bp_is_user_blogs() {
-	if ( bp_is_user() && bp_is_blogs_component() )
-		return true;
-
-	return false;
+	return (bool) ( bp_is_user() && bp_is_blogs_component() );
 }
 
 /**
@@ -1769,10 +1789,7 @@ function bp_is_user_blogs() {
  * @return bool True if the current page is a user's Recent Blog Posts page.
  */
 function bp_is_user_recent_posts() {
-	if ( bp_is_user_blogs() && bp_is_current_action( 'recent-posts' ) )
-		return true;
-
-	return false;
+	return (bool) ( bp_is_user_blogs() && bp_is_current_action( 'recent-posts' ) );
 }
 
 /**
@@ -1783,10 +1800,7 @@ function bp_is_user_recent_posts() {
  * @return bool True if the current page is a user's Recent Blog Comments page.
  */
 function bp_is_user_recent_commments() {
-	if ( bp_is_user_blogs() && bp_is_current_action( 'recent-comments' ) )
-		return true;
-
-	return false;
+	return (bool) ( bp_is_user_blogs() && bp_is_current_action( 'recent-comments' ) );
 }
 
 /**
@@ -1797,10 +1811,7 @@ function bp_is_user_recent_commments() {
  * @return bool True if the current page is a user's Friends page.
  */
 function bp_is_user_friends() {
-	if ( bp_is_user() && bp_is_friends_component() )
-		return true;
-
-	return false;
+	return (bool) ( bp_is_user() && bp_is_friends_component() );
 }
 
 /**
@@ -1811,10 +1822,7 @@ function bp_is_user_friends() {
  * @return bool True if the current page is a user's Friends Requests page.
  */
 function bp_is_user_friend_requests() {
-	if ( bp_is_user_friends() && bp_is_current_action( 'requests' ) )
-		return true;
-
-	return false;
+	return (bool) ( bp_is_user_friends() && bp_is_current_action( 'requests' ) );
 }
 
 /**
@@ -1827,11 +1835,7 @@ function bp_is_user_friend_requests() {
  * @return bool True if the current page is a user's Notifications page.
  */
 function bp_is_user_notifications() {
-	if ( bp_is_user() && bp_is_notifications_component() ) {
-		return true;
-	}
-
-	return false;
+	return (bool) ( bp_is_user() && bp_is_notifications_component() );
 }
 
 /**
@@ -1842,10 +1846,7 @@ function bp_is_user_notifications() {
  * @return bool True if the current page is a user's Settings page.
  */
 function bp_is_user_settings() {
-	if ( bp_is_user() && bp_is_settings_component() )
-		return true;
-
-	return false;
+	return (bool) ( bp_is_user() && bp_is_settings_component() );
 }
 
 /**
@@ -1858,10 +1859,7 @@ function bp_is_user_settings() {
  * @return bool True if the current page is a user's General Settings page.
  */
 function bp_is_user_settings_general() {
-	if ( bp_is_user_settings() && bp_is_current_action( 'general' ) )
-		return true;
-
-	return false;
+	return (bool) ( bp_is_user_settings() && bp_is_current_action( 'general' ) );
 }
 
 /**
@@ -1874,10 +1872,7 @@ function bp_is_user_settings_general() {
  * @return bool True if the current page is a user's Notification Settings page.
  */
 function bp_is_user_settings_notifications() {
-	if ( bp_is_user_settings() && bp_is_current_action( 'notifications' ) )
-		return true;
-
-	return false;
+	return (bool) ( bp_is_user_settings() && bp_is_current_action( 'notifications' ) );
 }
 
 /**
@@ -1890,10 +1885,7 @@ function bp_is_user_settings_notifications() {
  * @return bool True if the current page is a user's Delete Account page.
  */
 function bp_is_user_settings_account_delete() {
-	if ( bp_is_user_settings() && bp_is_current_action( 'delete-account' ) )
-		return true;
-
-	return false;
+	return (bool) ( bp_is_user_settings() && bp_is_current_action( 'delete-account' ) );
 }
 
 /**
@@ -1906,10 +1898,7 @@ function bp_is_user_settings_account_delete() {
  * @return bool True if the current page is a user's Profile Settings page.
  */
 function bp_is_user_settings_profile() {
-	if ( bp_is_user_settings() && bp_is_current_action( 'profile' ) )
-		return true;
-
-	return false;
+	return (bool) ( bp_is_user_settings() && bp_is_current_action( 'profile' ) );
 }
 
 /** Groups ********************************************************************/
@@ -1918,12 +1907,13 @@ function bp_is_user_settings_profile() {
  * Is the current page the groups directory ?
  *
  * @since BuddyPress (2.0.0)
- * 
+ *
  * @return True if the current page is the groups directory.
  */
 function bp_is_groups_directory() {
-	if ( bp_is_groups_component() && ! bp_current_action() && ! bp_current_item() )
+	if ( bp_is_groups_component() && ! bp_current_action() && ! bp_current_item() ) {
 		return true;
+	}
 
 	return false;
 }
@@ -1936,12 +1926,13 @@ function bp_is_groups_directory() {
  * @return bool True if the current page is part of a single group.
  */
 function bp_is_group() {
-	global $bp;
+	$retval = bp_is_active( 'groups' );
 
-	if ( bp_is_groups_component() && isset( $bp->groups->current_group ) && $bp->groups->current_group )
-		return true;
-
-	return false;
+	if ( ! empty( $retval ) ) {
+		$retval = bp_is_groups_component() && groups_get_current_group();
+	}
+	
+	return (bool) $retval;
 }
 
 /**
@@ -1953,8 +1944,9 @@ function bp_is_group() {
  * @return bool True if the current page is a single group's home page.
  */
 function bp_is_group_home() {
-	if ( bp_is_single_item() && bp_is_groups_component() && ( !bp_current_action() || bp_is_current_action( 'home' ) ) )
+	if ( bp_is_single_item() && bp_is_groups_component() && ( ! bp_current_action() || bp_is_current_action( 'home' ) ) ) {
 		return true;
+	}
 
 	return false;
 }
@@ -1965,10 +1957,7 @@ function bp_is_group_home() {
  * @return bool True if the current page is part of the group creation process.
  */
 function bp_is_group_create() {
-	if ( bp_is_groups_component() && bp_is_current_action( 'create' ) )
-		return true;
-
-	return false;
+	return (bool) ( bp_is_groups_component() && bp_is_current_action( 'create' ) );
 }
 
 /**
@@ -1979,10 +1968,7 @@ function bp_is_group_create() {
  * @return bool True if the current page is part of a single group's admin.
  */
 function bp_is_group_admin_page() {
-	if ( bp_is_single_item() && bp_is_groups_component() && bp_is_current_action( 'admin' ) )
-		return true;
-
-	return false;
+	return (bool) ( bp_is_single_item() && bp_is_groups_component() && bp_is_current_action( 'admin' ) );
 }
 
 /**
@@ -2015,10 +2001,7 @@ function bp_is_group_forum() {
  * @return True if the current page is a group's activity page.
  */
 function bp_is_group_activity() {
-	if ( bp_is_single_item() && bp_is_groups_component() && bp_is_current_action( 'activity' ) )
-		return true;
-
-	return false;
+	return (bool) ( bp_is_single_item() && bp_is_groups_component() && bp_is_current_action( 'activity' ) );
 }
 
 /**
@@ -2029,10 +2012,7 @@ function bp_is_group_activity() {
  * @return bool True if the current page is part of a group forum topic.
  */
 function bp_is_group_forum_topic() {
-	if ( bp_is_single_item() && bp_is_groups_component() && bp_is_current_action( 'forum' ) && bp_is_action_variable( 'topic', 0 ) )
-		return true;
-
-	return false;
+	return (bool) ( bp_is_single_item() && bp_is_groups_component() && bp_is_current_action( 'forum' ) && bp_is_action_variable( 'topic', 0 ) );
 }
 
 /**
@@ -2043,10 +2023,7 @@ function bp_is_group_forum_topic() {
  * @return bool True if the current page is part of a group forum topic edit page.
  */
 function bp_is_group_forum_topic_edit() {
-	if ( bp_is_single_item() && bp_is_groups_component() && bp_is_current_action( 'forum' ) && bp_is_action_variable( 'topic', 0 ) && bp_is_action_variable( 'edit', 2 ) )
-		return true;
-
-	return false;
+	return (bool) ( bp_is_single_item() && bp_is_groups_component() && bp_is_current_action( 'forum' ) && bp_is_action_variable( 'topic', 0 ) && bp_is_action_variable( 'edit', 2 ) );
 }
 
 /**
@@ -2057,10 +2034,7 @@ function bp_is_group_forum_topic_edit() {
  * @return bool True if the current page is part of a group's Members page.
  */
 function bp_is_group_members() {
-	if ( bp_is_single_item() && bp_is_groups_component() && bp_is_current_action( 'members' ) )
-		return true;
-
-	return false;
+	return (bool) ( bp_is_single_item() && bp_is_groups_component() && bp_is_current_action( 'members' ) );
 }
 
 /**
@@ -2071,10 +2045,7 @@ function bp_is_group_members() {
  * @return bool True if the current page is a group's Send Invites page.
  */
 function bp_is_group_invites() {
-	if ( bp_is_groups_component() && bp_is_current_action( 'send-invites' ) )
-		return true;
-
-	return false;
+	return (bool) ( bp_is_groups_component() && bp_is_current_action( 'send-invites' ) );
 }
 
 /**
@@ -2085,10 +2056,7 @@ function bp_is_group_invites() {
  * @return bool True if the current page is a group's Request Membership page.
  */
 function bp_is_group_membership_request() {
-	if ( bp_is_groups_component() && bp_is_current_action( 'request-membership' ) )
-		return true;
-
-	return false;
+	return (bool) ( bp_is_groups_component() && bp_is_current_action( 'request-membership' ) );
 }
 
 /**
@@ -2097,11 +2065,7 @@ function bp_is_group_membership_request() {
  * @return bool True if the current page is a Leave Group attempt.
  */
 function bp_is_group_leave() {
-
-	if ( bp_is_groups_component() && bp_is_single_item() && bp_is_current_action( 'leave-group' ) )
-		return true;
-
-	return false;
+	return (bool) ( bp_is_groups_component() && bp_is_single_item() && bp_is_current_action( 'leave-group' ) );
 }
 
 /**
@@ -2114,10 +2078,7 @@ function bp_is_group_leave() {
  * @return bool True if the current page is part of a single group.
  */
 function bp_is_group_single() {
-	if ( bp_is_groups_component() && bp_is_single_item() )
-		return true;
-
-	return false;
+	return (bool) ( bp_is_groups_component() && bp_is_single_item() );
 }
 
 /**
@@ -2128,22 +2089,20 @@ function bp_is_group_single() {
  * @return bool True if the current page is the Create a Blog page.
  */
 function bp_is_create_blog() {
-	if ( bp_is_blogs_component() && bp_is_current_action( 'create' ) )
-		return true;
-
-	return false;
+	return (bool) ( bp_is_blogs_component() && bp_is_current_action( 'create' ) );
 }
 
 /**
  * Is the current page the blogs directory ?
  *
  * @since BuddyPress (2.0.0)
- * 
+ *
  * @return True if the current page is the blogs directory.
  */
 function bp_is_blogs_directory() {
-	if ( is_multisite() && bp_is_blogs_component() && ! bp_current_action() )
+	if ( is_multisite() && bp_is_blogs_component() && ! bp_current_action() ) {
 		return true;
+	}
 
 	return false;
 }
@@ -2158,10 +2117,7 @@ function bp_is_blogs_directory() {
  * @return bool True if the current page is part of a user's Messages pages.
  */
 function bp_is_user_messages() {
-	if ( bp_is_user() && bp_is_messages_component() )
-		return true;
-
-	return false;
+	return (bool) ( bp_is_user() && bp_is_messages_component() );
 }
 
 /**
@@ -2172,8 +2128,9 @@ function bp_is_user_messages() {
  * @return bool True if the current page is a user's Messages Inbox.
  */
 function bp_is_messages_inbox() {
-	if ( bp_is_user_messages() && ( !bp_current_action() || bp_is_current_action( 'inbox' ) ) )
+	if ( bp_is_user_messages() && ( ! bp_current_action() || bp_is_current_action( 'inbox' ) ) ) {
 		return true;
+	}
 
 	return false;
 }
@@ -2186,10 +2143,7 @@ function bp_is_messages_inbox() {
  * @return bool True if the current page is a user's Messages Sentbox.
  */
 function bp_is_messages_sentbox() {
-	if ( bp_is_user_messages() && bp_is_current_action( 'sentbox' ) )
-		return true;
-
-	return false;
+	return (bool) ( bp_is_user_messages() && bp_is_current_action( 'sentbox' ) );
 }
 
 /**
@@ -2200,10 +2154,7 @@ function bp_is_messages_sentbox() {
  * @return bool True if the current page is a user's Messages Compose screen.
  */
 function bp_is_messages_compose_screen() {
-	if ( bp_is_user_messages() && bp_is_current_action( 'compose' ) )
-		return true;
-
-	return false;
+	return (bool) ( bp_is_user_messages() && bp_is_current_action( 'compose' ) );
 }
 
 /**
@@ -2214,10 +2165,7 @@ function bp_is_messages_compose_screen() {
  * @return bool True if the current page is the Notices screen.
  */
 function bp_is_notices() {
-	if ( bp_is_user_messages() && bp_is_current_action( 'notices' ) )
-		return true;
-
-	return false;
+	return (bool) ( bp_is_user_messages() && bp_is_current_action( 'notices' ) );
 }
 
 /**
@@ -2226,10 +2174,7 @@ function bp_is_notices() {
  * @return bool True if the current page a single Messages conversation thread?
  */
 function bp_is_messages_conversation() {
-	if ( bp_is_user_messages() && ( bp_is_current_action( 'view' ) ) )
-		return true;
-
-	return false;
+	return (bool) ( bp_is_user_messages() && ( bp_is_current_action( 'view' ) ) );
 }
 
 /**
@@ -2238,10 +2183,7 @@ function bp_is_messages_conversation() {
  * @return bool
  */
 function bp_is_single( $component, $callback ) {
-	if ( bp_is_current_component( $component ) && ( true === call_user_func( $callback ) ) )
-		return true;
-
-	return false;
+	return (bool) ( bp_is_current_component( $component ) && ( true === call_user_func( $callback ) ) );
 }
 
 /** Registration **************************************************************/
@@ -2254,10 +2196,7 @@ function bp_is_single( $component, $callback ) {
  * @return bool True if the current page is the Activate page.
  */
 function bp_is_activation_page() {
-	if ( bp_is_current_component( 'activate' ) )
-		return true;
-
-	return false;
+	return (bool) bp_is_current_component( 'activate' );
 }
 
 /**
@@ -2268,10 +2207,7 @@ function bp_is_activation_page() {
  * @return bool True if the current page is the Register page.
  */
 function bp_is_register_page() {
-	if ( bp_is_current_component( 'register' ) )
-		return true;
-
-	return false;
+	return (bool) bp_is_current_component( 'register' );
 }
 
 /**
@@ -2292,125 +2228,161 @@ function bp_the_body_class() {
 
 		/** Pages *************************************************************/
 
-		if ( is_front_page() )
+		if ( is_front_page() ) {
 			$bp_classes[] = 'home-page';
+		}
 
-		if ( bp_is_directory() )
+		if ( bp_is_directory() ) {
 			$bp_classes[] = 'directory';
+		}
 
-		if ( bp_is_single_item() )
+		if ( bp_is_single_item() ) {
 			$bp_classes[] = 'single-item';
+		}
 
 		/** Components ********************************************************/
 
-		if ( !bp_is_blog_page() ) :
-			if ( bp_is_user_profile() )
+		if ( ! bp_is_blog_page() ) {
+			if ( bp_is_user_profile() )  {
 				$bp_classes[] = 'xprofile';
+			}
 
-			if ( bp_is_activity_component() )
+			if ( bp_is_activity_component() ) {
 				$bp_classes[] = 'activity';
+			}
 
-			if ( bp_is_blogs_component() )
+			if ( bp_is_blogs_component() ) {
 				$bp_classes[] = 'blogs';
+			}
 
-			if ( bp_is_messages_component() )
+			if ( bp_is_messages_component() ) {
 				$bp_classes[] = 'messages';
+			}
 
-			if ( bp_is_friends_component() )
+			if ( bp_is_friends_component() ) {
 				$bp_classes[] = 'friends';
+			}
 
-			if ( bp_is_groups_component() )
+			if ( bp_is_groups_component() ) {
 				$bp_classes[] = 'groups';
+			}
 
-			if ( bp_is_settings_component()  )
+			if ( bp_is_settings_component()  ) {
 				$bp_classes[] = 'settings';
-		endif;
+			}
+		}
 
 		/** User **************************************************************/
 
-		if ( bp_is_user() )
+		if ( bp_is_user() ) {
 			$bp_classes[] = 'bp-user';
+		}
 
-		if ( !bp_is_directory() ) :
-			if ( bp_is_user_blogs() )
+		if ( ! bp_is_directory() ) {
+			if ( bp_is_user_blogs() ) {
 				$bp_classes[] = 'my-blogs';
+			}
 
-			if ( bp_is_user_groups() )
+			if ( bp_is_user_groups() ) {
 				$bp_classes[] = 'my-groups';
+			}
 
-			if ( bp_is_user_activity() )
+			if ( bp_is_user_activity() ) {
 				$bp_classes[] = 'my-activity';
-		endif;
+			}
+		}
 
-		if ( bp_is_my_profile() )
+		if ( bp_is_my_profile() ) {
 			$bp_classes[] = 'my-account';
+		}
 
-		if ( bp_is_user_profile() )
+		if ( bp_is_user_profile() ) {
 			$bp_classes[] = 'my-profile';
+		}
 
-		if ( bp_is_user_friends() )
+		if ( bp_is_user_friends() ) {
 			$bp_classes[] = 'my-friends';
+		}
 
-		if ( bp_is_user_messages() )
+		if ( bp_is_user_messages() ) {
 			$bp_classes[] = 'my-messages';
+		}
 
-		if ( bp_is_user_recent_commments() )
+		if ( bp_is_user_recent_commments() ) {
 			$bp_classes[] = 'recent-comments';
+		}
 
-		if ( bp_is_user_recent_posts() )
+		if ( bp_is_user_recent_posts() ) {
 			$bp_classes[] = 'recent-posts';
+		}
 
-		if ( bp_is_user_change_avatar() )
+		if ( bp_is_user_change_avatar() ) {
 			$bp_classes[] = 'change-avatar';
+		}
 
-		if ( bp_is_user_profile_edit() )
+		if ( bp_is_user_profile_edit() ) {
 			$bp_classes[] = 'profile-edit';
+		}
 
-		if ( bp_is_user_friends_activity() )
+		if ( bp_is_user_friends_activity() ) {
 			$bp_classes[] = 'friends-activity';
+		}
 
-		if ( bp_is_user_groups_activity() )
+		if ( bp_is_user_groups_activity() ) {
 			$bp_classes[] = 'groups-activity';
+		}
 
 		/** Messages **********************************************************/
 
-		if ( bp_is_messages_inbox() )
+		if ( bp_is_messages_inbox() ) {
 			$bp_classes[] = 'inbox';
+		}
 
-		if ( bp_is_messages_sentbox() )
+		if ( bp_is_messages_sentbox() ) {
 			$bp_classes[] = 'sentbox';
+		}
 
-		if ( bp_is_messages_compose_screen() )
+		if ( bp_is_messages_compose_screen() ) {
 			$bp_classes[] = 'compose';
+		}
 
-		if ( bp_is_notices() )
+		if ( bp_is_notices() ) {
 			$bp_classes[] = 'notices';
+		}
 
-		if ( bp_is_user_friend_requests() )
+		if ( bp_is_user_friend_requests() ) {
 			$bp_classes[] = 'friend-requests';
+		}
 
-		if ( bp_is_create_blog() )
+		if ( bp_is_create_blog() ) {
 			$bp_classes[] = 'create-blog';
+		}
 
 		/** Groups ************************************************************/
 
-		if ( bp_is_group_leave() )
+		if ( bp_is_group_leave() ) {
 			$bp_classes[] = 'leave-group';
+		}
 
-		if ( bp_is_group_invites() )
+		if ( bp_is_group_invites() ) {
 			$bp_classes[] = 'group-invites';
+		}
 
-		if ( bp_is_group_members() )
+		if ( bp_is_group_members() ) {
 			$bp_classes[] = 'group-members';
+		}
 
-		if ( bp_is_group_forum_topic() )
+		if ( bp_is_group_forum_topic() ) {
 			$bp_classes[] = 'group-forum-topic';
+		}
 
-		if ( bp_is_group_forum_topic_edit() )
+		if ( bp_is_group_forum_topic_edit() ) {
 			$bp_classes[] = 'group-forum-topic-edit';
+		}
 
-		if ( bp_is_group_forum() )
+		if ( bp_is_group_forum() ) {
 			$bp_classes[] = 'group-forum';
+		}
 
 		if ( bp_is_group_admin_page() ) {
 			$bp_classes[] = 'group-admin';
@@ -2422,23 +2394,27 @@ function bp_the_body_class() {
 			$bp_classes[] = bp_get_groups_current_create_step();
 		}
 
-		if ( bp_is_group_home() )
+		if ( bp_is_group_home() ) {
 			$bp_classes[] = 'group-home';
+		}
 
-		if ( bp_is_single_activity() )
+		if ( bp_is_single_activity() ) {
 			$bp_classes[] = 'activity-permalink';
+		}
 
 		/** Registration ******************************************************/
 
-		if ( bp_is_register_page() )
+		if ( bp_is_register_page() ) {
 			$bp_classes[] = 'registration';
+		}
 
-		if ( bp_is_activation_page() )
+		if ( bp_is_activation_page() ) {
 			$bp_classes[] = 'activation';
+		}
 
 		/** Current Component & Action ****************************************/
 
-		if ( !bp_is_blog_page() ) {
+		if ( ! bp_is_blog_page() ) {
 			$bp_classes[] = bp_current_component();
 			$bp_classes[] = bp_current_action();
 		}
@@ -2457,6 +2433,67 @@ function bp_the_body_class() {
 	}
 	add_filter( 'body_class', 'bp_get_the_body_class', 10, 2 );
 
+/**
+ * Customizes the post CSS class according to BuddyPress content.
+ *
+ * Hooked to the 'post_class' filter.
+ *
+ * @since BuddyPress (2.1.0)
+ *
+ * @param array $wp_classes The post classes coming from WordPress.
+ * @return array
+ */
+function bp_get_the_post_class( $wp_classes = array() ) {
+	// don't do anything if we're not on a BP page
+	if ( ! is_buddypress() ) {
+		return $wp_classes;
+	}
+
+	$bp_classes = array();
+
+	if ( bp_is_user() || bp_is_single_activity() ) {
+		$bp_classes[] = 'bp_members';
+
+	} elseif ( bp_is_group() ) {
+		$bp_classes[] = 'bp_group';
+
+	} elseif ( bp_is_activity_component() ) {
+		$bp_classes[] = 'bp_activity';
+
+	} elseif ( bp_is_blogs_component() ) {
+		$bp_classes[] = 'bp_blogs';
+
+	} elseif ( bp_is_register_page() ) {
+		$bp_classes[] = 'bp_register';
+
+	} elseif ( bp_is_activation_page() ) {
+		$bp_classes[] = 'bp_activate';
+
+	} elseif ( bp_is_forums_component() && bp_is_directory() ) {
+		$bp_classes[] = 'bp_forum';
+	}
+
+	if ( empty( $bp_classes ) ) {
+		return $wp_classes;
+	}
+
+	// emulate post type css class
+	foreach ( $bp_classes as $bp_class ) {
+		$bp_classes[] = "type-{$bp_class}";
+	}
+
+	// removes the 'page' and 'type-page' post classes
+	// we need to remove these classes since they did not exist before we switched
+	// theme compat to use the 'page' post type
+	$page_key      = array_search( 'page',      $wp_classes );
+	$page_type_key = array_search( 'type-page', $wp_classes );
+	unset( $wp_classes[$page_key], $wp_classes[$page_type_key] );
+
+	// okay let's merge!
+	return array_unique( array_merge( $bp_classes, $wp_classes ) );
+}
+add_filter( 'post_class', 'bp_get_the_post_class' );
+
 /**
  * Sort BuddyPress nav menu items by their position property.
  *
@@ -2472,14 +2509,13 @@ function bp_the_body_class() {
  *         the first argument is considered to be respectively less than, equal to, or greater than the second.
  */
 function _bp_nav_menu_sort( $a, $b ) {
-	if ( $a["position"] == $b["position"] )
+	if ( $a['position'] == $b['position'] ) {
 		return 0;
-
-	else if ( $a["position"] < $b["position"] )
+	} elseif ( $a['position'] < $b['position'] ) {
 		return -1;
-
-	else
+	} else {
 		return 1;
+	}
 }
 
 /**
@@ -2496,8 +2532,9 @@ function bp_get_nav_menu_items() {
 	foreach ( (array) buddypress()->bp_options_nav as $parent_menu => $sub_menus ) {
 
 		// The root menu's ID is "xprofile", but the Profile submenus are using "profile". See BP_Core::setup_nav().
-		if ( 'profile' == $parent_menu )
+		if ( 'profile' === $parent_menu ) {
 			$parent_menu = 'xprofile';
+		}
 
 		// Sort the items in this menu's navigation by their position property
 		$second_level_menus = (array) $sub_menus;
@@ -2507,12 +2544,13 @@ function bp_get_nav_menu_items() {
 		foreach( $second_level_menus as $sub_nav ) {
 
 			// Skip items we don't have access to
-			if ( ! $sub_nav['user_has_access'] )
+			if ( empty( $sub_nav['user_has_access'] ) ) {
 				continue;
+			}
 
 			// Add this menu
 			$menu         = new stdClass;
-			$menu->class  = array();
+			$menu->class  = array( 'menu-child' );
 			$menu->css_id = $sub_nav['css_id'];
 			$menu->link   = $sub_nav['link'];
 			$menu->name   = $sub_nav['name'];
@@ -2520,7 +2558,7 @@ function bp_get_nav_menu_items() {
 
 			// If we're viewing this item's screen, record that we need to mark its parent menu to be selected
 			if ( $sub_nav['slug'] == bp_current_action() ) {
-				$menu->class      = array( 'current-menu-item' );
+				$menu->class[]    = 'current-menu-item';
 				$selected_menus[] = $parent_menu;
 			}
 
@@ -2536,23 +2574,25 @@ function bp_get_nav_menu_items() {
 	foreach ( $top_level_menus as $nav ) {
 
 		// Skip items marked as user-specific if you're not on your own profile
-		if ( ! $nav['show_for_displayed_user'] && ! bp_core_can_edit_settings()  )
+		if ( empty( $nav['show_for_displayed_user'] ) && ! bp_core_can_edit_settings()  ) {
 			continue;
+		}
 
 		// Get the correct menu link. See http://buddypress.trac.wordpress.org/ticket/4624
 		$link = bp_loggedin_user_domain() ? str_replace( bp_loggedin_user_domain(), bp_displayed_user_domain(), $nav['link'] ) : trailingslashit( bp_displayed_user_domain() . $nav['link'] );
 
 		// Add this menu
 		$menu         = new stdClass;
-		$menu->class  = array();
+		$menu->class  = array( 'menu-parent' );
 		$menu->css_id = $nav['css_id'];
 		$menu->link   = $link;
 		$menu->name   = $nav['name'];
 		$menu->parent = 0;
 
 		// Check if we need to mark this menu as selected
-		if ( in_array( $nav['css_id'], $selected_menus ) )
-			$menu->class = array( 'current-menu-parent' );
+		if ( in_array( $nav['css_id'], $selected_menus ) ) {
+			$menu->class[] = 'current-menu-parent';
+		}
 
 		$menus[] = $menu;
 	}
@@ -2623,8 +2663,9 @@ function bp_nav_menu( $args = array() ) {
 	$show_container = false;
 
 	// Create custom walker if one wasn't set
-	if ( empty( $args->walker ) )
+	if ( empty( $args->walker ) ) {
 		$args->walker = new BP_Walker_Nav_Menu;
+	}
 
 	// Sanitise values for class and ID
 	$args->container_class = sanitize_html_class( $args->container_class );
@@ -2657,10 +2698,11 @@ function bp_nav_menu( $args = array() ) {
 
 		// If a specific ID wasn't requested, and there are multiple menus on the same screen, make sure the autogenerated ID is unique
 		while ( in_array( $wrap_id, $menu_id_slugs ) ) {
-			if ( preg_match( '#-(\d+)$#', $wrap_id, $matches ) )
+			if ( preg_match( '#-(\d+)$#', $wrap_id, $matches ) ) {
 				$wrap_id = preg_replace('#-(\d+)$#', '-' . ++$matches[1], $wrap_id );
-			else
+			} else {
 				$wrap_id = $wrap_id . '-1';
+			}
 		}
 	}
 	$menu_id_slugs[] = $wrap_id;
@@ -2674,14 +2716,16 @@ function bp_nav_menu( $args = array() ) {
 	unset( $items );
 
 	// If we've wrapped the ul, close it
-	if ( $show_container )
+	if ( ! empty( $show_container ) ) {
 		$nav_menu .= '</' . $args->container . '>';
+	}
 
 	// Final chance to modify output
 	$nav_menu = apply_filters( 'bp_nav_menu', $nav_menu, $args );
 
-	if ( $args->echo )
+	if ( ! empty( $args->echo ) ) {
 		echo $nav_menu;
-	else
+	} else {
 		return $nav_menu;
+	}
 }
diff --git a/wp-content/plugins/buddypress/bp-core/bp-core-theme-compatibility.php b/wp-content/plugins/buddypress/bp-core/bp-core-theme-compatibility.php
index df8f37ec6..c3a0013d5 100644
--- a/wp-content/plugins/buddypress/bp-core/bp-core-theme-compatibility.php
+++ b/wp-content/plugins/buddypress/bp-core/bp-core-theme-compatibility.php
@@ -556,6 +556,9 @@ function bp_theme_compat_reset_post( $args = array() ) {
 
 	// If we are resetting a post, we are in theme compat
 	bp_set_theme_compat_active( true );
+
+	// If we are in theme compat, we don't need the 'Edit' post link
+	add_filter( 'get_edit_post_link', 'bp_core_filter_edit_post_link', 10, 2 );
 }
 
 /**
diff --git a/wp-content/plugins/buddypress/bp-core/bp-core-update.php b/wp-content/plugins/buddypress/bp-core/bp-core-update.php
index 69fd07d1b..6b271544c 100644
--- a/wp-content/plugins/buddypress/bp-core/bp-core-update.php
+++ b/wp-content/plugins/buddypress/bp-core/bp-core-update.php
@@ -163,8 +163,9 @@ function bp_version_bump() {
 function bp_setup_updater() {
 
 	// Are we running an outdated version of BuddyPress?
-	if ( ! bp_is_update() )
+	if ( ! bp_is_update() ) {
 		return;
+	}
 
 	bp_version_updater();
 }
@@ -400,8 +401,9 @@ function bp_update_to_2_0_1() {
 function bp_add_activation_redirect() {
 
 	// Bail if activating from network, or bulk
-	if ( isset( $_GET['activate-multi'] ) )
+	if ( isset( $_GET['activate-multi'] ) ) {
 		return;
+	}
 
 	// Record that this is a new installation, so we show the right
 	// welcome message
@@ -416,7 +418,7 @@ function bp_add_activation_redirect() {
 /** Signups *******************************************************************/
 
 /**
- * Check if the signups table needs to be created.
+ * Check if the signups table needs to be created or upgraded.
  *
  * @since BuddyPress (2.0.0)
  *
@@ -425,12 +427,6 @@ function bp_add_activation_redirect() {
  * @return bool If signups table exists
  */
 function bp_core_maybe_install_signups() {
-
-	// Bail if we are explicitly not upgrading global tables
-	if ( defined( 'DO_NOT_UPGRADE_GLOBAL_TABLES' ) ) {
-		return false;
-	}
-
 	global $wpdb;
 
 	// The table to run queries against
diff --git a/wp-content/plugins/buddypress/bp-core/bp-core-widgets.php b/wp-content/plugins/buddypress/bp-core/bp-core-widgets.php
index 79bbb6ca2..2cd01c0c6 100644
--- a/wp-content/plugins/buddypress/bp-core/bp-core-widgets.php
+++ b/wp-content/plugins/buddypress/bp-core/bp-core-widgets.php
@@ -69,7 +69,7 @@ class BP_Core_Login_Widget extends WP_Widget {
 
 			<div class="bp-login-widget-user-links">
 				<div class="bp-login-widget-user-link"><?php echo bp_core_get_userlink( bp_loggedin_user_id() ); ?></div>
-				<div class="bp-login-widget-user-logout"><a class="logout" href="<?php echo wp_logout_url( wp_guess_url() ); ?>"><?php _e( 'Log Out', 'buddypress' ); ?></a></div>
+				<div class="bp-login-widget-user-logout"><a class="logout" href="<?php echo wp_logout_url( bp_get_requested_url() ); ?>"><?php _e( 'Log Out', 'buddypress' ); ?></a></div>
 			</div>
 
 			<?php do_action( 'bp_after_login_widget_loggedin' ); ?>
@@ -154,8 +154,7 @@ class BP_Core_Members_Widget extends WP_Widget {
 		parent::__construct( false, $name = _x( '(BuddyPress) Members', 'widget name', 'buddypress' ), $widget_ops );
 
 		if ( is_active_widget( false, false, $this->id_base ) && !is_admin() && !is_network_admin() ) {
-			$min = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
-			wp_enqueue_script( 'bp_core_widget_members-js', buddypress()->plugin_url . "bp-core/js/widget-members{$min}.js", array( 'jquery' ), bp_get_version() );
+			wp_enqueue_script( 'bp-widget-members' );
 		}
 	}
 
@@ -315,7 +314,7 @@ class BP_Core_Whos_Online_Widget extends WP_Widget {
 	 */
 	function __construct() {
 		$widget_ops = array(
-			'description' => __( 'Avatars of users who are currently online', 'buddypress' ),
+			'description' => __( 'Profile photos of online users', 'buddypress' ),
 			'classname' => 'widget_bp_core_whos_online_widget buddypress widget',
 		);
 		parent::__construct( false, $name = _x( "(BuddyPress) Who's Online", 'widget name', 'buddypress' ), $widget_ops );
@@ -418,7 +417,7 @@ class BP_Core_Recently_Active_Widget extends WP_Widget {
 	 */
 	function __construct() {
 		$widget_ops = array(
-			'description' => __( 'Avatars of recently active members', 'buddypress' ),
+			'description' => __( 'Profile photos of recently active members', 'buddypress' ),
 			'classname' => 'widget_bp_core_recently_active_widget buddypress widget',
 		);
 		parent::__construct( false, $name = _x( '(BuddyPress) Recently Active Members', 'widget name', 'buddypress' ), $widget_ops );
diff --git a/wp-content/plugins/buddypress/bp-core/css/admin-bar-rtl.css b/wp-content/plugins/buddypress/bp-core/css/admin-bar-rtl.css
index 389638405..b6a7dafa1 100644
--- a/wp-content/plugins/buddypress/bp-core/css/admin-bar-rtl.css
+++ b/wp-content/plugins/buddypress/bp-core/css/admin-bar-rtl.css
@@ -1,27 +1,58 @@
-#wpadminbar .quicklinks li#wp-admin-bar-my-account ul,
-#wpadminbar .quicklinks li#wp-admin-bar-my-account-with-avatar ul {
-	left: auto;
-	right: 0;
-}
+/* Displayed User */
 #wpadminbar .quicklinks li#wp-admin-bar-user-admin-with-avatar > a img,
 #wpadminbar .quicklinks li#wp-admin-bar-group-admin-with-avatar > a img {
-	margin: -2px -5px 0 23px;
+	width: 16px;
+	height: 16px;
+	display: inline;
+	border: 1px solid #999;
+	vertical-align: middle;
+	margin: -2px -5px 0 10px;
+	padding: 0;
+	background: #eee;
+	float: none;
 }
-#wpadminbar .quicklinks li#wp-admin-bar-user-admin-with-avatar ul,
+
+/* Displayed Group */
 #wpadminbar .quicklinks li#wp-admin-bar-group-admin-with-avatar ul {
-	left: auto;
-	right: 30px;
+	right: 0;
 }
-#wpadminbar .quicklinks li#wp-admin-bar-user-admin-with-avatar ul ul,
 #wpadminbar .quicklinks li#wp-admin-bar-group-admin-with-avatar ul ul {
-	left: auto;
  	right: 0;
 }
-#wpadminbar .quicklinks li#wp-admin-bar-group-admin-with-avatar ul {
-	left: auto;
- 	right: 0;
+
+/* Notifications */
+#wpadminbar .quicklinks li#wp-admin-bar-my-account a span.count,
+#wpadminbar .quicklinks li#wp-admin-bar-my-account-with-avatar a span.count,
+#wpadminbar .quicklinks li#wp-admin-bar-bp-notifications #ab-pending-notifications {
+	background: #21759B;
+	color: #fff;
+	text-shadow: none;
+	display: inline;
+	padding: 2px 5px;
+	font-size: 10px;
+	font-weight: bold;
+	-moz-border-radius: 10px;
+	-khtml-border-radius: 10px;
+	-webkit-border-radius: 10px;
+	border-radius: 10px;
+}
+
+#wpadminbar .quicklinks li#wp-admin-bar-bp-notifications #ab-pending-notifications {
+	background: #ddd;
+	color: #333;
+	margin: 0
+}
+
+#wpadminbar .quicklinks li#wp-admin-bar-bp-notifications #ab-pending-notifications.alert {
+	background-color: #1fb3dd;
+	color: #fff;
+}
+
+#wpadminbar .quicklinks li#wp-admin-bar-bp-notifications > a {
+	padding: 0 .5em;
+}
+
+#wp-admin-bar-user-info img.avatar {
+	height: 64px;
+	width: 64px;
 }
-#wpadminbar .quicklinks li#wp-admin-bar-group-admin-with-avatar ul ul {
-	left: auto;
- 	right: 0;
-}
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-core/css/admin-bar-rtl.min.css b/wp-content/plugins/buddypress/bp-core/css/admin-bar-rtl.min.css
index d46916c32..2b1f9d96a 100644
--- a/wp-content/plugins/buddypress/bp-core/css/admin-bar-rtl.min.css
+++ b/wp-content/plugins/buddypress/bp-core/css/admin-bar-rtl.min.css
@@ -1 +1,2 @@
-#wpadminbar .quicklinks li#wp-admin-bar-my-account ul,#wpadminbar .quicklinks li#wp-admin-bar-my-account-with-avatar ul{left:auto;right:0}#wpadminbar .quicklinks li#wp-admin-bar-user-admin-with-avatar>a img,#wpadminbar .quicklinks li#wp-admin-bar-group-admin-with-avatar>a img{margin:-2px -5px 0 23px}#wpadminbar .quicklinks li#wp-admin-bar-user-admin-with-avatar ul,#wpadminbar .quicklinks li#wp-admin-bar-group-admin-with-avatar ul{left:auto;right:30px}#wpadminbar .quicklinks li#wp-admin-bar-user-admin-with-avatar ul ul,#wpadminbar .quicklinks li#wp-admin-bar-group-admin-with-avatar ul ul{left:auto;right:0}#wpadminbar .quicklinks li#wp-admin-bar-group-admin-with-avatar ul{left:auto;right:0}#wpadminbar .quicklinks li#wp-admin-bar-group-admin-with-avatar ul ul{left:auto;right:0}
\ No newline at end of file
+/*! buddypress - v2.1.0 - 2014-10-06 9:39:09 PM UTC - https://wordpress.org/plugins/buddypress/ */
+#wpadminbar .quicklinks li#wp-admin-bar-group-admin-with-avatar>a img,#wpadminbar .quicklinks li#wp-admin-bar-user-admin-with-avatar>a img{width:16px;height:16px;display:inline;border:1px solid #999;vertical-align:middle;margin:-2px -5px 0 10px;padding:0;background:#eee;float:none}#wpadminbar .quicklinks li#wp-admin-bar-group-admin-with-avatar ul,#wpadminbar .quicklinks li#wp-admin-bar-group-admin-with-avatar ul ul{right:0}#wpadminbar .quicklinks li#wp-admin-bar-bp-notifications #ab-pending-notifications,#wpadminbar .quicklinks li#wp-admin-bar-my-account a span.count,#wpadminbar .quicklinks li#wp-admin-bar-my-account-with-avatar a span.count{background:#21759B;color:#fff;text-shadow:none;display:inline;padding:2px 5px;font-size:10px;font-weight:700;-moz-border-radius:10px;-khtml-border-radius:10px;-webkit-border-radius:10px;border-radius:10px}#wpadminbar .quicklinks li#wp-admin-bar-bp-notifications #ab-pending-notifications{background:#ddd;color:#333;margin:0}#wpadminbar .quicklinks li#wp-admin-bar-bp-notifications #ab-pending-notifications.alert{background-color:#1fb3dd;color:#fff}#wpadminbar .quicklinks li#wp-admin-bar-bp-notifications>a{padding:0 .5em}#wp-admin-bar-user-info img.avatar{height:64px;width:64px}
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-core/css/admin-bar.css b/wp-content/plugins/buddypress/bp-core/css/admin-bar.css
index d3801dc77..468896b0d 100644
--- a/wp-content/plugins/buddypress/bp-core/css/admin-bar.css
+++ b/wp-content/plugins/buddypress/bp-core/css/admin-bar.css
@@ -55,4 +55,4 @@
 #wp-admin-bar-user-info img.avatar {
 	height: 64px;
 	width: 64px;
-}
\ No newline at end of file
+}
diff --git a/wp-content/plugins/buddypress/bp-core/css/admin-bar.min.css b/wp-content/plugins/buddypress/bp-core/css/admin-bar.min.css
index b20ce7e6c..52901166e 100644
--- a/wp-content/plugins/buddypress/bp-core/css/admin-bar.min.css
+++ b/wp-content/plugins/buddypress/bp-core/css/admin-bar.min.css
@@ -1 +1,2 @@
-#wpadminbar .quicklinks li#wp-admin-bar-user-admin-with-avatar>a img,#wpadminbar .quicklinks li#wp-admin-bar-group-admin-with-avatar>a img{width:16px;height:16px;display:inline;border:1px solid #999;vertical-align:middle;margin:-2px 10px 0 -5px;padding:0;background:#eee;float:none}#wpadminbar .quicklinks li#wp-admin-bar-group-admin-with-avatar ul{left:0}#wpadminbar .quicklinks li#wp-admin-bar-group-admin-with-avatar ul ul{left:0}#wpadminbar .quicklinks li#wp-admin-bar-my-account a span.count,#wpadminbar .quicklinks li#wp-admin-bar-my-account-with-avatar a span.count,#wpadminbar .quicklinks li#wp-admin-bar-bp-notifications #ab-pending-notifications{background:#21759b;color:#fff;text-shadow:none;display:inline;padding:2px 5px;font-size:10px;font-weight:bold;-moz-border-radius:10px;-khtml-border-radius:10px;-webkit-border-radius:10px;border-radius:10px}#wpadminbar .quicklinks li#wp-admin-bar-bp-notifications #ab-pending-notifications{background:#ddd;color:#333;margin:0}#wpadminbar .quicklinks li#wp-admin-bar-bp-notifications #ab-pending-notifications.alert{background-color:#1fb3dd;color:#fff}#wpadminbar .quicklinks li#wp-admin-bar-bp-notifications>a{padding:0 .5em}#wp-admin-bar-user-info img.avatar{height:64px;width:64px}
\ No newline at end of file
+/*! buddypress - v2.1.0 - 2014-10-06 9:39:09 PM UTC - https://wordpress.org/plugins/buddypress/ */
+#wpadminbar .quicklinks li#wp-admin-bar-group-admin-with-avatar>a img,#wpadminbar .quicklinks li#wp-admin-bar-user-admin-with-avatar>a img{width:16px;height:16px;display:inline;border:1px solid #999;vertical-align:middle;margin:-2px 10px 0 -5px;padding:0;background:#eee;float:none}#wpadminbar .quicklinks li#wp-admin-bar-group-admin-with-avatar ul,#wpadminbar .quicklinks li#wp-admin-bar-group-admin-with-avatar ul ul{left:0}#wpadminbar .quicklinks li#wp-admin-bar-bp-notifications #ab-pending-notifications,#wpadminbar .quicklinks li#wp-admin-bar-my-account a span.count,#wpadminbar .quicklinks li#wp-admin-bar-my-account-with-avatar a span.count{background:#21759B;color:#fff;text-shadow:none;display:inline;padding:2px 5px;font-size:10px;font-weight:700;-moz-border-radius:10px;-khtml-border-radius:10px;-webkit-border-radius:10px;border-radius:10px}#wpadminbar .quicklinks li#wp-admin-bar-bp-notifications #ab-pending-notifications{background:#ddd;color:#333;margin:0}#wpadminbar .quicklinks li#wp-admin-bar-bp-notifications #ab-pending-notifications.alert{background-color:#1fb3dd;color:#fff}#wpadminbar .quicklinks li#wp-admin-bar-bp-notifications>a{padding:0 .5em}#wp-admin-bar-user-info img.avatar{height:64px;width:64px}
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-core/css/buddybar-rtl.css b/wp-content/plugins/buddypress/bp-core/css/buddybar-rtl.css
index 21552d362..838688628 100644
--- a/wp-content/plugins/buddypress/bp-core/css/buddybar-rtl.css
+++ b/wp-content/plugins/buddypress/bp-core/css/buddybar-rtl.css
@@ -1,77 +1,203 @@
+body:not(.wp-admin) {
+	padding-top: 25px !important;
+}
 #wp-admin-bar {
+	position: fixed;
+	top: 0;
 	right: 0;
-	left: auto;
+	height: 25px;
+	font-size: 11px;
+	width: 100%;
+	z-index: 9999;
+}
+#wp-admin-bar .padder {
+	position: relative;
+	padding: 0;
+	width: 100%;
+	margin: 0 auto;
+	background: url('../images/60pc_black.png');
+	height: 25px;
+}
+body#bp-default #wp-admin-bar .padder {
+	max-width: 1250px;
+}
+#wp-admin-bar * {
+	z-index: 999;
 }
 #wp-admin-bar div#admin-bar-logo {
+	position: absolute;
+	top: 5px;
 	right: 10px;
-	left: auto;
+}
+#wp-admin-bar a img {
+	border: none;
 }
 #wp-admin-bar li {
+	list-style: none;
+	margin: 0;
+	padding: 0;
+	line-height: 100%;
 	text-align: right;
 }
+#wp-admin-bar li a {
+	padding: 7px 15px 7px 15px;
+	color: #eee;
+	text-decoration: none;
+	font-size: 11px;
+}
+#wp-admin-bar li.alt {
+	border: none;
+}
 #wp-admin-bar li.no-arrow a {
 	padding-left: 15px;
-	padding-right: 0;
+}
+#wp-admin-bar ul li ul li a span {
+	display: none;
+}
+#wp-admin-bar li:hover,
+#wp-admin-bar li.hover {
+	position: static;
 }
 #admin-bar-logo {
 	float: right;
+	font-weight: bold;
+	font-size: 11px;
+	padding: 5px 8px;
+	margin: 0;
+	text-decoration: none;
+	color: #fff;
+}
+body#bp-default #admin-bar-logo {
+	padding: 2px 8px;
 }
 
-#wp-admin-bar ul li {/* all list items */
+/* all lists */
+#wp-admin-bar ul {
+	margin: 0;
+	list-style: none;
+	line-height: 1;
+	cursor: pointer;
+	height: auto;
+	padding: 0;
+}
+
+/* all list items */
+#wp-admin-bar ul li {
+	padding: 0;
 	float: right;
+	position: relative;
 	background: url('../images/admin-menu-arrow.gif') 12% 53% no-repeat;
 	padding-left: 11px;
-	padding-right: 0;
 }
 #wp-admin-bar ul li.no-arrow {
+	background: none;
 	padding-left: 0;
 }
+#wp-admin-bar ul li ul li {
+	background-image: none;
+}
 #wp-admin-bar ul li.align-right {
+	position: absolute;
 	left: 0;
-	right: auto;
+}
+#wp-admin-bar ul li a {
+	display: block;
+}
+#wp-admin-bar ul.main-nav li:hover,
+#wp-admin-bar ul.main-nav li.sfhover,
+#wp-admin-bar ul.main-nav li ul li.sfhover {
+	background-color: #333;
 }
 
 /* second-level lists */
 #wp-admin-bar ul li ul {
+	position: absolute;
+	width: 185px;
 	right: -999em;
-	left: auto;
 	margin-right: 0;
+	background: #333;
+	border: 1px solid #222;
+	-moz-box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
+	-webkit-box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
+	-moz-border-radius: 3px;
+	-webkit-border-radius: 3px;
+	-moz-border-radius-topleft: 0;
+	-webkit-border-top-right-radius: 0;
+	-moz-border-radius-topright: 0;
+	-webkit-border-top-left-radius: 0;
+}
+#wp-admin-bar ul li > ul {
+	border-top: none;
+}
+#wp-admin-bar ul li ul a {
+	color: #eee;
 }
 #wp-admin-bar ul li ul li {
 	float: right;
+	width: 174px;
+	margin: 0;
+}
+#wp-admin-bar ul li ul li:hover a {
+	color: #fff;
+}
+#wp-admin-bar ul li div.admin-bar-clear {
+	clear: both;
+}
+#wp-admin-bar ul.main-nav li ul li:hover,
+#wp-admin-bar ul.main-nav li ul li.sfhover,
+#wp-admin-bar ul.main-nav li ul li.sfhover {
+	background-color: #222;
 }
 
 /* third-and-above-level lists */
 #wp-admin-bar ul li ul ul {
 	margin: -25px 184px 0 0;
+	-moz-border-radius: 3px;
+	-webkit-border-radius: 3px;
+}
+#wp-admin-bar ul li ul li:hover ul li a {
+	color: #eee;
+}
+#wp-admin-bar ul li ul li ul li:hover a {
+	color: #fff;
 }
 #wp-admin-bar ul li:hover ul,
-#wp-admin-bar ul li li:hover ul,
+#wp-admin-bar ul li ul li:hover ul,
 #wp-admin-bar ul li.sfhover ul,
-#wp-admin-bar ul li ul li.sfhover ul {/* lists nested under hovered list items */
+#wp-admin-bar ul li ul li.sfhover ul {
 	right: auto;
 }
 #wp-admin-bar ul li.align-right:hover ul {
 	left: 0;
-	right: auto;
 }
 #wp-admin-bar ul li:hover ul ul,
 #wp-admin-bar li.sfhover ul li ul {
 	right: -999em;
-	left: auto;
 }
 
 /* Menu item css */
 #wp-admin-bar img.avatar {
 	float: right;
 	margin-left: 8px;
-	margin-right: 0;
 }
 #wp-admin-bar span.activity {
+	display: block;
 	margin-right: 34px;
-	margin-left: 0;
+	padding: 0;
+}
+#wp-admin-bar ul.author-list li a {
+	height: 17px;
 }
 #wp-admin-bar ul li#bp-adminbar-notifications-menu a span {
+	padding: 0 6px;
 	margin-right: 2px;
-	margin-left: 0;
-}
\ No newline at end of file
+	background: #fff;
+	color: #000;
+	-moz-border-radius: 3px;
+	-webkit-border-radius: 3px;
+	border-radius: 3px;
+}
+#wp-admin-bar-user-info img.avatar {
+	height: 64px;
+	width: 64px;
+}
diff --git a/wp-content/plugins/buddypress/bp-core/css/buddybar-rtl.min.css b/wp-content/plugins/buddypress/bp-core/css/buddybar-rtl.min.css
index c135f4d07..00b4c74f1 100644
--- a/wp-content/plugins/buddypress/bp-core/css/buddybar-rtl.min.css
+++ b/wp-content/plugins/buddypress/bp-core/css/buddybar-rtl.min.css
@@ -1 +1,2 @@
-#wp-admin-bar{right:0;left:auto}#wp-admin-bar div#admin-bar-logo{right:10px;left:auto}#wp-admin-bar li{text-align:right}#wp-admin-bar li.no-arrow a{padding-left:15px;padding-right:0}#admin-bar-logo{float:right}#wp-admin-bar ul li{float:right;background:url('../images/admin-menu-arrow.gif') 12% 53% no-repeat;padding-left:11px;padding-right:0}#wp-admin-bar ul li.no-arrow{padding-left:0}#wp-admin-bar ul li.align-right{left:0;right:auto}#wp-admin-bar ul li ul{right:-999em;left:auto;margin-right:0}#wp-admin-bar ul li ul li{float:right}#wp-admin-bar ul li ul ul{margin:-25px 184px 0 0}#wp-admin-bar ul li:hover ul,#wp-admin-bar ul li li:hover ul,#wp-admin-bar ul li.sfhover ul,#wp-admin-bar ul li ul li.sfhover ul{right:auto}#wp-admin-bar ul li.align-right:hover ul{left:0;right:auto}#wp-admin-bar ul li:hover ul ul,#wp-admin-bar li.sfhover ul li ul{right:-999em;left:auto}#wp-admin-bar img.avatar{float:right;margin-left:8px;margin-right:0}#wp-admin-bar span.activity{margin-right:34px;margin-left:0}#wp-admin-bar ul li#bp-adminbar-notifications-menu a span{margin-right:2px;margin-left:0}
\ No newline at end of file
+/*! buddypress - v2.1.0 - 2014-10-06 9:39:09 PM UTC - https://wordpress.org/plugins/buddypress/ */
+body:not(.wp-admin){padding-top:25px!important}#wp-admin-bar{position:fixed;top:0;right:0;height:25px;font-size:11px;width:100%;z-index:9999}#wp-admin-bar .padder{position:relative;padding:0;width:100%;margin:0 auto;background:url(../images/60pc_black.png);height:25px}body#bp-default #wp-admin-bar .padder{max-width:1250px}#wp-admin-bar *{z-index:999}#wp-admin-bar div#admin-bar-logo{position:absolute;top:5px;right:10px}#wp-admin-bar a img{border:none}#wp-admin-bar li{list-style:none;margin:0;padding:0;line-height:100%;text-align:right}#wp-admin-bar li a{padding:7px 15px;color:#eee;text-decoration:none;font-size:11px}#wp-admin-bar li.alt{border:none}#wp-admin-bar li.no-arrow a{padding-left:15px}#wp-admin-bar ul li ul li a span{display:none}#wp-admin-bar li.hover,#wp-admin-bar li:hover{position:static}#admin-bar-logo{float:right;font-weight:700;font-size:11px;padding:5px 8px;margin:0;text-decoration:none;color:#fff}body#bp-default #admin-bar-logo{padding:2px 8px}#wp-admin-bar ul{margin:0;list-style:none;line-height:1;cursor:pointer;height:auto;padding:0}#wp-admin-bar ul li{padding:0 0 0 11px;float:right;position:relative;background:url(../images/admin-menu-arrow.gif) 12% 53% no-repeat}#wp-admin-bar ul li.no-arrow{background:0 0;padding-left:0}#wp-admin-bar ul li ul li{background-image:none}#wp-admin-bar ul li.align-right{position:absolute;left:0}#wp-admin-bar ul li a{display:block}#wp-admin-bar ul.main-nav li ul li.sfhover,#wp-admin-bar ul.main-nav li.sfhover,#wp-admin-bar ul.main-nav li:hover{background-color:#333}#wp-admin-bar ul li ul{position:absolute;width:185px;right:-999em;margin-right:0;background:#333;border:1px solid #222;-moz-box-shadow:0 4px 8px rgba(0,0,0,.1);-webkit-box-shadow:0 4px 8px rgba(0,0,0,.1);-moz-border-radius:3px;-webkit-border-radius:0 0 3px 3px;-moz-border-radius-topleft:0;-moz-border-radius-topright:0}#wp-admin-bar ul li>ul{border-top:none}#wp-admin-bar ul li ul a{color:#eee}#wp-admin-bar ul li ul li{float:right;width:174px;margin:0}#wp-admin-bar ul li ul li:hover a{color:#fff}#wp-admin-bar ul li div.admin-bar-clear{clear:both}#wp-admin-bar ul.main-nav li ul li.sfhover,#wp-admin-bar ul.main-nav li ul li:hover{background-color:#222}#wp-admin-bar ul li ul ul{margin:-25px 184px 0 0;-moz-border-radius:3px;-webkit-border-radius:3px}#wp-admin-bar ul li ul li:hover ul li a{color:#eee}#wp-admin-bar ul li ul li ul li:hover a{color:#fff}#wp-admin-bar ul li ul li.sfhover ul,#wp-admin-bar ul li ul li:hover ul,#wp-admin-bar ul li.sfhover ul,#wp-admin-bar ul li:hover ul{right:auto}#wp-admin-bar ul li.align-right:hover ul{left:0}#wp-admin-bar li.sfhover ul li ul,#wp-admin-bar ul li:hover ul ul{right:-999em}#wp-admin-bar img.avatar{float:right;margin-left:8px}#wp-admin-bar span.activity{display:block;margin-right:34px;padding:0}#wp-admin-bar ul.author-list li a{height:17px}#wp-admin-bar ul li#bp-adminbar-notifications-menu a span{padding:0 6px;margin-right:2px;background:#fff;color:#000;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}#wp-admin-bar-user-info img.avatar{height:64px;width:64px}
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-core/css/buddybar.css b/wp-content/plugins/buddypress/bp-core/css/buddybar.css
index a53920f12..1317071ad 100644
--- a/wp-content/plugins/buddypress/bp-core/css/buddybar.css
+++ b/wp-content/plugins/buddypress/bp-core/css/buddybar.css
@@ -197,7 +197,7 @@ body#bp-default #admin-bar-logo {
 	-webkit-border-radius: 3px;
 	border-radius: 3px;
 }
-#wp-admin-bar-user-info img.avatar { 
-	height: 64px; 
-	width: 64px; 
-}
\ No newline at end of file
+#wp-admin-bar-user-info img.avatar {
+	height: 64px;
+	width: 64px;
+}
diff --git a/wp-content/plugins/buddypress/bp-core/css/buddybar.min.css b/wp-content/plugins/buddypress/bp-core/css/buddybar.min.css
index 7208e9be1..dae88e048 100644
--- a/wp-content/plugins/buddypress/bp-core/css/buddybar.min.css
+++ b/wp-content/plugins/buddypress/bp-core/css/buddybar.min.css
@@ -1 +1,2 @@
-body:not(.wp-admin){padding-top:25px !important}#wp-admin-bar{position:fixed;top:0;left:0;height:25px;font-size:11px;width:100%;z-index:9999}#wp-admin-bar .padder{position:relative;padding:0;width:100%;margin:0 auto;background:url('../images/60pc_black.png');height:25px}body#bp-default #wp-admin-bar .padder{max-width:1250px}#wp-admin-bar *{z-index:999}#wp-admin-bar div#admin-bar-logo{position:absolute;top:5px;left:10px}#wp-admin-bar a img{border:0}#wp-admin-bar li{list-style:none;margin:0;padding:0;line-height:100%;text-align:left}#wp-admin-bar li a{padding:7px 15px 7px 15px;color:#eee;text-decoration:none;font-size:11px}#wp-admin-bar li.alt{border:0}#wp-admin-bar li.no-arrow a{padding-right:15px}#wp-admin-bar ul li ul li a span{display:none}#wp-admin-bar li:hover,#wp-admin-bar li.hover{position:static}#admin-bar-logo{float:left;font-weight:bold;font-size:11px;padding:5px 8px;margin:0;text-decoration:none;color:#fff}body#bp-default #admin-bar-logo{padding:2px 8px}#wp-admin-bar ul{margin:0;list-style:none;line-height:1;cursor:pointer;height:auto;padding:0}#wp-admin-bar ul li{padding:0;float:left;position:relative;background:url('../images/admin-menu-arrow.gif') 88% 53% no-repeat;padding-right:11px}#wp-admin-bar ul li.no-arrow{background:0;padding-right:0}#wp-admin-bar ul li ul li{background-image:none}#wp-admin-bar ul li.align-right{position:absolute;right:0}#wp-admin-bar ul li a{display:block}#wp-admin-bar ul.main-nav li:hover,#wp-admin-bar ul.main-nav li.sfhover,#wp-admin-bar ul.main-nav li ul li.sfhover{background-color:#333}#wp-admin-bar ul li ul{position:absolute;width:185px;left:-999em;margin-left:0;background:#333;border:1px solid #222;-moz-box-shadow:0 4px 8px rgba(0,0,0,0.1);-webkit-box-shadow:0 4px 8px rgba(0,0,0,0.1);-moz-border-radius:3px;-webkit-border-radius:3px;-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0}#wp-admin-bar ul li>ul{border-top:0}#wp-admin-bar ul li ul a{color:#eee}#wp-admin-bar ul li ul li{float:left;width:174px;margin:0}#wp-admin-bar ul li ul li:hover a{color:#fff}#wp-admin-bar ul li div.admin-bar-clear{clear:both}#wp-admin-bar ul.main-nav li ul li:hover,#wp-admin-bar ul.main-nav li ul li.sfhover,#wp-admin-bar ul.main-nav li ul li.sfhover{background-color:#222}#wp-admin-bar ul li ul ul{margin:-25px 0 0 184px;-moz-border-radius:3px;-webkit-border-radius:3px}#wp-admin-bar ul li ul li:hover ul li a{color:#eee}#wp-admin-bar ul li ul li ul li:hover a{color:#fff}#wp-admin-bar ul li:hover ul,#wp-admin-bar ul li ul li:hover ul,#wp-admin-bar ul li.sfhover ul,#wp-admin-bar ul li ul li.sfhover ul{left:auto}#wp-admin-bar ul li.align-right:hover ul{right:0}#wp-admin-bar ul li:hover ul ul,#wp-admin-bar li.sfhover ul li ul{left:-999em}#wp-admin-bar img.avatar{float:left;margin-right:8px}#wp-admin-bar span.activity{display:block;margin-left:34px;padding:0}#wp-admin-bar ul.author-list li a{height:17px}#wp-admin-bar ul li#bp-adminbar-notifications-menu a span{padding:0 6px;margin-left:2px;background:#fff;color:#000;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}#wp-admin-bar-user-info img.avatar{height:64px;width:64px}
\ No newline at end of file
+/*! buddypress - v2.1.0 - 2014-10-06 9:39:09 PM UTC - https://wordpress.org/plugins/buddypress/ */
+body:not(.wp-admin){padding-top:25px!important}#wp-admin-bar{position:fixed;top:0;left:0;height:25px;font-size:11px;width:100%;z-index:9999}#wp-admin-bar .padder{position:relative;padding:0;width:100%;margin:0 auto;background:url(../images/60pc_black.png);height:25px}body#bp-default #wp-admin-bar .padder{max-width:1250px}#wp-admin-bar *{z-index:999}#wp-admin-bar div#admin-bar-logo{position:absolute;top:5px;left:10px}#wp-admin-bar a img{border:none}#wp-admin-bar li{list-style:none;margin:0;padding:0;line-height:100%;text-align:left}#wp-admin-bar li a{padding:7px 15px;color:#eee;text-decoration:none;font-size:11px}#wp-admin-bar li.alt{border:none}#wp-admin-bar li.no-arrow a{padding-right:15px}#wp-admin-bar ul li ul li a span{display:none}#wp-admin-bar li.hover,#wp-admin-bar li:hover{position:static}#admin-bar-logo{float:left;font-weight:700;font-size:11px;padding:5px 8px;margin:0;text-decoration:none;color:#fff}body#bp-default #admin-bar-logo{padding:2px 8px}#wp-admin-bar ul{margin:0;list-style:none;line-height:1;cursor:pointer;height:auto;padding:0}#wp-admin-bar ul li{padding:0 11px 0 0;float:left;position:relative;background:url(../images/admin-menu-arrow.gif) 88% 53% no-repeat}#wp-admin-bar ul li.no-arrow{background:0 0;padding-right:0}#wp-admin-bar ul li ul li{background-image:none}#wp-admin-bar ul li.align-right{position:absolute;right:0}#wp-admin-bar ul li a{display:block}#wp-admin-bar ul.main-nav li ul li.sfhover,#wp-admin-bar ul.main-nav li.sfhover,#wp-admin-bar ul.main-nav li:hover{background-color:#333}#wp-admin-bar ul li ul{position:absolute;width:185px;left:-999em;margin-left:0;background:#333;border:1px solid #222;-moz-box-shadow:0 4px 8px rgba(0,0,0,.1);-webkit-box-shadow:0 4px 8px rgba(0,0,0,.1);-moz-border-radius:3px;-webkit-border-radius:0 0 3px 3px;-moz-border-radius-topleft:0;-moz-border-radius-topright:0}#wp-admin-bar ul li>ul{border-top:none}#wp-admin-bar ul li ul a{color:#eee}#wp-admin-bar ul li ul li{float:left;width:174px;margin:0}#wp-admin-bar ul li ul li:hover a{color:#fff}#wp-admin-bar ul li div.admin-bar-clear{clear:both}#wp-admin-bar ul.main-nav li ul li.sfhover,#wp-admin-bar ul.main-nav li ul li:hover{background-color:#222}#wp-admin-bar ul li ul ul{margin:-25px 0 0 184px;-moz-border-radius:3px;-webkit-border-radius:3px}#wp-admin-bar ul li ul li:hover ul li a{color:#eee}#wp-admin-bar ul li ul li ul li:hover a{color:#fff}#wp-admin-bar ul li ul li.sfhover ul,#wp-admin-bar ul li ul li:hover ul,#wp-admin-bar ul li.sfhover ul,#wp-admin-bar ul li:hover ul{left:auto}#wp-admin-bar ul li.align-right:hover ul{right:0}#wp-admin-bar li.sfhover ul li ul,#wp-admin-bar ul li:hover ul ul{left:-999em}#wp-admin-bar img.avatar{float:left;margin-right:8px}#wp-admin-bar span.activity{display:block;margin-left:34px;padding:0}#wp-admin-bar ul.author-list li a{height:17px}#wp-admin-bar ul li#bp-adminbar-notifications-menu a span{padding:0 6px;margin-left:2px;background:#fff;color:#000;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}#wp-admin-bar-user-info img.avatar{height:64px;width:64px}
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-core/deprecated/1.9.php b/wp-content/plugins/buddypress/bp-core/deprecated/1.9.php
new file mode 100644
index 000000000..04a92af05
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-core/deprecated/1.9.php
@@ -0,0 +1,265 @@
+<?php
+
+/**
+ * BuddyPress Member Notifications
+ *
+ * Backwards compatibility functions and filters used for member notifications.
+ * Use bp-notifications instead.
+ *
+ * @package BuddyPress
+ * @subpackage MembersNotifications
+ */
+
+// Exit if accessed directly
+if ( !defined( 'ABSPATH' ) ) exit;
+
+/**
+ * Add a notification for a specific user, from a specific component.
+ *
+ * @deprecated Deprecated since BuddyPress 1.9.0. Use
+ *             bp_notifications_add_notification() instead.
+ *
+ * @since BuddyPress (1.0.0)
+ * @param string $item_id
+ * @param int $user_id
+ * @param string $component_name
+ * @param string $component_action
+ * @param string $secondary_item_id
+ * @param string $date_notified
+ * @param int $is_new
+ * @return boolean True on success, false on failure.
+ */
+function bp_core_add_notification( $item_id, $user_id, $component_name, $component_action, $secondary_item_id = 0, $date_notified = false, $is_new = 1 ) {
+
+	// Bail if notifications is not active
+	if ( ! bp_is_active( 'notifications' ) ) {
+		return false;
+	}
+
+	// Trigger the deprecated function notice
+	_deprecated_function( __FUNCTION__, '1.9', 'bp_notifications_add_notification()' );
+
+	// Notifications must always have a time
+	if ( false === $date_notified ) {
+		$date_notified = bp_core_current_time();
+	}
+
+	// Add the notification
+	return bp_notifications_add_notification( array(
+		'item_id'           => $item_id,
+		'user_id'           => $user_id,
+		'component_name'    => $component_name,
+		'component_action'  => $component_action,
+		'secondary_item_id' => $secondary_item_id,
+		'date_notified'     => $date_notified,
+		'is_new'            => $is_new
+	) );
+}
+
+/**
+ * Delete a specific notification by its ID.
+ *
+ * @deprecated Deprecated since BuddyPress 1.9.0. Use
+ *             bp_notifications_delete_notification() instead.
+ *
+ * @since BuddyPress (1.0.0)
+ * @param int $id ID of notification.
+ * @return boolean True on success, false on failure.
+ */
+function bp_core_delete_notification( $id ) {
+
+	// Bail if notifications is not active
+	if ( ! bp_is_active( 'notifications' ) ) {
+		return false;
+	}
+
+	// Trigger the deprecated function notice
+	_deprecated_function( __FUNCTION__, '1.9', 'bp_notifications_delete_notification()' );
+
+	return BP_Notifications_Notification::delete_by_id( $id );
+}
+
+/**
+ * Get a specific notification by its ID.
+ *
+ * @deprecated Deprecated since BuddyPress 1.9.0. Use
+ *             bp_notifications_get_notification() instead.
+ *
+ * @since BuddyPress (1.0.0)
+ * @param int $id ID of notification.
+ * @return BP_Core_Notification
+ */
+function bp_core_get_notification( $id ) {
+
+	// Bail if notifications is not active
+	if ( ! bp_is_active( 'notifications' ) ) {
+		return false;
+	}
+
+	// Trigger the deprecated function notice
+	_deprecated_function( __FUNCTION__, '1.9', 'bp_notifications_get_notification()' );
+
+	return bp_notifications_get_notification( $id );
+}
+
+/**
+ * Get notifications for a specific user.
+ *
+ * @deprecated Deprecated since BuddyPress 1.9.0. Use
+ *             bp_notifications_get_notifications_for_user() instead.
+ *
+ * @since BuddyPress (1.0.0)
+ * @param int $user_id ID of user.
+ * @param string $format
+ * @return boolean Object or array on success, false on failure.
+ */
+function bp_core_get_notifications_for_user( $user_id, $format = 'string' ) {
+
+	// Bail if notifications is not active
+	if ( ! bp_is_active( 'notifications' ) ) {
+		return false;
+	}
+
+	// Trigger the deprecated function notice
+	_deprecated_function( __FUNCTION__, '1.9', 'bp_notifications_get_notifications_for_user()' );
+
+	return bp_notifications_get_notifications_for_user( $user_id, $format );
+}
+
+/** Delete ********************************************************************/
+
+/**
+ * Delete notifications for a user by type.
+ *
+ * Used when clearing out notifications for a specific component when the user
+ * has visited that component.
+ *
+ * @deprecated Deprecated since BuddyPress 1.9.0. Use
+ *             bp_notifications_delete_notifications_by_type() instead.
+ *
+ * @since BuddyPress (1.0.0)
+ * @param int $user_id
+ * @param string $component_name
+ * @param string $component_action
+ * @return boolean True on success, false on failure.
+ */
+function bp_core_delete_notifications_by_type( $user_id, $component_name, $component_action ) {
+
+	// Bail if notifications is not active
+	if ( ! bp_is_active( 'notifications' ) ) {
+		return false;
+	}
+
+	// Trigger the deprecated function notice
+	_deprecated_function( __FUNCTION__, '1.9', 'bp_notifications_delete_notifications_by_type()' );
+
+	return bp_notifications_delete_notifications_by_type( $user_id, $component_name, $component_action );
+}
+
+/**
+ * Delete notifications for an item ID.
+ *
+ * Used when clearing out notifications for a specific component when the user
+ * has visited that component.
+ *
+ * @deprecated Deprecated since BuddyPress 1.9.0. Use
+ *             bp_notifications_delete_notifications_by_item_id() instead.
+ *
+ * @since BuddyPress (1.0.0)
+ * @param int $user_id
+ * @param string $component_name
+ * @param string $component_action
+ * @return boolean True on success, false on failure.
+ */
+function bp_core_delete_notifications_by_item_id( $user_id, $item_id, $component_name, $component_action, $secondary_item_id = false ) {
+
+	// Bail if notifications is not active
+	if ( ! bp_is_active( 'notifications' ) ) {
+		return false;
+	}
+
+	// Trigger the deprecated function notice
+	_deprecated_function( __FUNCTION__, '1.9', 'bp_notifications_delete_notifications_by_item_id()' );
+
+	return bp_notifications_delete_notifications_by_item_id( $user_id, $item_id, $component_name, $component_action, $secondary_item_id );
+}
+
+/**
+ * Delete all notifications for by type.
+ *
+ * @deprecated Deprecated since BuddyPress 1.9.0. Use
+ *             bp_notifications_delete_all_notifications_by_type() instead.
+ *
+ * @since BuddyPress (1.0.0)
+ * @param int $user_id
+ * @param string $component_name
+ * @param string $component_action
+ * @return boolean True on success, false on failure.
+ */
+function bp_core_delete_all_notifications_by_type( $item_id, $component_name, $component_action = false, $secondary_item_id = false ) {
+
+	// Bail if notifications is not active
+	if ( ! bp_is_active( 'notifications' ) ) {
+		return false;
+	}
+
+	// Trigger the deprecated function notice
+	_deprecated_function( __FUNCTION__, '1.9', 'bp_notifications_delete_all_notifications_by_type()' );
+
+	bp_notifications_delete_all_notifications_by_type( $item_id, $component_name, $component_action, $secondary_item_id );
+}
+
+/**
+ * Delete all notifications for a user.
+ *
+ * Used when clearing out all notifications for a user, whene deleted or spammed
+ *
+ * @deprecated Deprecated since BuddyPress 1.9.0. Use
+ *             bp_notifications_delete_notifications_from_user() instead.
+ *
+ * @since BuddyPress (1.0.0)
+ * @param int $user_id
+ * @param string $component_name
+ * @param string $component_action
+ * @return boolean True on success, false on failure.
+ */
+function bp_core_delete_notifications_from_user( $user_id, $component_name, $component_action ) {
+
+	// Bail if notifications is not active
+	if ( ! bp_is_active( 'notifications' ) ) {
+		return false;
+	}
+
+	// Trigger the deprecated function notice
+	_deprecated_function( __FUNCTION__, '1.9', 'bp_notifications_delete_notifications_from_user()' );
+
+	return bp_notifications_delete_notifications_from_user( $user_id, $component_name, $component_action );
+}
+
+/** Helpers *******************************************************************/
+
+/**
+ * Check if a user has access to a specific notification.
+ *
+ * Used before deleting a notification for a user.
+ *
+ * @deprecated Deprecated since BuddyPress 1.9.0. Use
+ *             bp_notifications_check_notification_access() instead.
+ *
+ * @since BuddyPress (1.0.0)
+ * @param int $user_id
+ * @param int $notification_id
+ * @return boolean True on success, false on failure.
+ */
+function bp_core_check_notification_access( $user_id, $notification_id ) {
+
+	// Bail if notifications is not active
+	if ( ! bp_is_active( 'notifications' ) ) {
+		return false;
+	}
+
+	// Trigger the deprecated function notice
+	_deprecated_function( __FUNCTION__, '1.9', 'bp_notifications_check_notification_access()' );
+
+	return bp_notifications_check_notification_access( $user_id, $notification_id );
+}
diff --git a/wp-content/plugins/buddypress/bp-core/deprecated/2.1.php b/wp-content/plugins/buddypress/bp-core/deprecated/2.1.php
new file mode 100644
index 000000000..9ad16e999
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-core/deprecated/2.1.php
@@ -0,0 +1,636 @@
+<?php
+/**
+ * Deprecated functions
+ *
+ * @package BuddyPress
+ * @subpackage Core
+ * @deprecated 2.1.0
+ */
+
+// Exit if accessed directly
+if ( ! defined( 'ABSPATH' ) ) exit;
+
+/**
+ * Register (not enqueue) scripts that used to be used by BuddyPress.
+ *
+ * @since BuddyPress (2.1.0)
+ */
+function bp_core_register_deprecated_scripts() {
+	$min = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
+	$url = buddypress()->plugin_url . 'bp-core/deprecated/js/';
+
+	$scripts = apply_filters( 'bp_core_register_deprecated_scripts', array(
+
+		// Core
+		'bp-jquery-scroll-to' => array(
+			'file'         => "{$url}jquery-scroll-to{$min}.js",
+			'dependencies' => array( 'jquery' ),
+		),
+
+		// Messages
+		'bp-jquery-autocomplete'    => array(
+			'file'          => "{$url}autocomplete/jquery.autocomplete{$min}.js",
+			'dependencies' => array( 'jquery' ),
+		),
+
+		'bp-jquery-autocomplete-fb' => array(
+			'file'         => "{$url}autocomplete/jquery.autocompletefb{$min}.js",
+			'dependencies' => array( 'jquery' ),
+		),
+
+		'bp-jquery-bgiframe' => array(
+			'file'         => "{$url}autocomplete/jquery.bgiframe{$min}.js",
+			'dependencies' => array( 'jquery' ),
+		),
+
+		'bp-jquery-dimensions' => array(
+			'file'         => "{$url}autocomplete/jquery.dimensions{$min}.js",
+			'dependencies' => array( 'jquery' ),
+		),
+	) );
+
+	foreach ( $scripts as $id => $script ) {
+		wp_register_script( $id, $script['file'], $script['dependencies'], bp_get_version(), true );
+	}
+}
+add_action( 'bp_enqueue_scripts', 'bp_core_register_deprecated_scripts', 1 );
+
+/**
+ * Register (not enqueue) styles that used to be used by BuddyPress.
+ *
+ * @since BuddyPress (2.1.0)
+ */
+function bp_core_register_deprecated_styles() {
+	$min = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
+	$url = buddypress()->plugin_url . 'bp-core/deprecated/css/';
+
+	$styles = apply_filters( 'bp_core_register_deprecated_styles', array(
+		// Messages
+		'bp-messages-autocomplete' => array(
+			'file'         => "{$url}autocomplete/jquery.autocompletefb{$min}.css",
+			'dependencies' => array(),
+		)
+	) );
+
+	foreach ( $styles as $id => $style ) {
+		wp_register_style( $id, $style['file'], $style['dependencies'], bp_get_version() );
+
+		wp_style_add_data( $id, 'rtl', true );
+		if ( $min ) {
+			wp_style_add_data( $id, 'suffix', $min );
+		}
+	}
+}
+add_action( 'bp_enqueue_scripts', 'bp_core_register_deprecated_styles', 1 );
+
+/** BuddyBar *****************************************************************/
+
+/**
+ * Add a Sites menu to the BuddyBar.
+ *
+ * @since BuddyPress (1.0.0)
+ * @deprecated BuddyPress (2.1.0)
+ *
+ * @global object $bp The BuddyPress global settings object.
+ *
+ * @return bool|null Returns false on failure. Otherwise echoes the menu item.
+ */
+function bp_adminbar_blogs_menu() {
+	global $bp;
+
+	if ( !is_user_logged_in() || !bp_is_active( 'blogs' ) )
+		return false;
+
+	if ( !is_multisite() )
+		return false;
+
+	$blogs = wp_cache_get( 'bp_blogs_of_user_' . bp_loggedin_user_id() . '_inc_hidden', 'bp' );
+	if ( empty( $blogs ) ) {
+		$blogs = bp_blogs_get_blogs_for_user( bp_loggedin_user_id(), true );
+		wp_cache_set( 'bp_blogs_of_user_' . bp_loggedin_user_id() . '_inc_hidden', $blogs, 'bp' );
+	}
+
+	$counter = 0;
+	if ( is_array( $blogs['blogs'] ) && (int) $blogs['count'] ) {
+
+		echo '<li id="bp-adminbar-blogs-menu"><a href="' . trailingslashit( bp_loggedin_user_domain() . bp_get_blogs_slug() ) . '">';
+
+		_e( 'My Sites', 'buddypress' );
+
+		echo '</a>';
+		echo '<ul>';
+
+		foreach ( (array) $blogs['blogs'] as $blog ) {
+			$alt      = ( 0 == $counter % 2 ) ? ' class="alt"' : '';
+			$site_url = esc_attr( $blog->siteurl );
+
+			echo '<li' . $alt . '>';
+			echo '<a href="' . $site_url . '">' . esc_html( $blog->name ) . '</a>';
+			echo '<ul>';
+			echo '<li class="alt"><a href="' . $site_url . 'wp-admin/">' . __( 'Dashboard', 'buddypress' ) . '</a></li>';
+			echo '<li><a href="' . $site_url . 'wp-admin/post-new.php">' . __( 'New Post', 'buddypress' ) . '</a></li>';
+			echo '<li class="alt"><a href="' . $site_url . 'wp-admin/edit.php">' . __( 'Manage Posts', 'buddypress' ) . '</a></li>';
+			echo '<li><a href="' . $site_url . 'wp-admin/edit-comments.php">' . __( 'Manage Comments', 'buddypress' ) . '</a></li>';
+			echo '</ul>';
+
+			do_action( 'bp_adminbar_blog_items', $blog );
+
+			echo '</li>';
+			$counter++;
+		}
+
+		$alt = ( 0 == $counter % 2 ) ? ' class="alt"' : '';
+
+		if ( bp_blog_signup_enabled() ) {
+			echo '<li' . $alt . '>';
+			echo '<a href="' . bp_get_root_domain() . '/' . bp_get_blogs_root_slug() . '/create/">' . __( 'Create a Site!', 'buddypress' ) . '</a>';
+			echo '</li>';
+		}
+
+		echo '</ul>';
+		echo '</li>';
+	}
+}
+
+/**
+ * If user has upgraded to 1.6 and chose to retain their BuddyBar, offer then a switch to change over
+ * to the WP Toolbar.
+ *
+ * @since BuddyPress (1.6)
+ * @deprecated BuddyPress (2.1.0)
+ */
+function bp_admin_setting_callback_force_buddybar() {
+?>
+
+	<input id="_bp_force_buddybar" name="_bp_force_buddybar" type="checkbox" value="1" <?php checked( ! bp_force_buddybar( true ) ); ?> />
+	<label for="_bp_force_buddybar"><?php _e( 'Switch to WordPress Toolbar', 'buddypress' ); ?></label>
+
+<?php
+}
+
+
+/**
+ * Sanitization for _bp_force_buddyvar
+ *
+ * If upgraded to 1.6 and you chose to keep the BuddyBar, a checkbox asks if you want to switch to
+ * the WP Toolbar. The option we store is 1 if the BuddyBar is forced on, so we use this function
+ * to flip the boolean before saving the intval.
+ *
+ * @since BuddyPress (1.6)
+ * @deprecated BuddyPress (2.1.0)
+ * @access Private
+ */
+function bp_admin_sanitize_callback_force_buddybar( $value = false ) {
+	return $value ? 0 : 1;
+}
+
+/**
+ * Wrapper function for rendering the BuddyBar.
+ *
+ * @return bool|null Returns false if the BuddyBar is disabled.
+ * @deprecated BuddyPress (2.1.0)
+ */
+function bp_core_admin_bar() {
+	global $bp;
+
+	if ( defined( 'BP_DISABLE_ADMIN_BAR' ) && BP_DISABLE_ADMIN_BAR )
+		return false;
+
+	if ( (int) bp_get_option( 'hide-loggedout-adminbar' ) && !is_user_logged_in() )
+		return false;
+
+	$bp->doing_admin_bar = true;
+
+	echo '<div id="wp-admin-bar"><div class="padder">';
+
+	// **** Do bp-adminbar-logo Actions ********
+	do_action( 'bp_adminbar_logo' );
+
+	echo '<ul class="main-nav">';
+
+	// **** Do bp-adminbar-menus Actions ********
+	do_action( 'bp_adminbar_menus' );
+
+	echo '</ul>';
+	echo "</div></div><!-- #wp-admin-bar -->\n\n";
+
+	$bp->doing_admin_bar = false;
+}
+
+/**
+ * Output the BuddyBar logo.
+ *
+ * @deprecated BuddyPress (2.1.0)
+ */
+function bp_adminbar_logo() {
+	echo '<a href="' . bp_get_root_domain() . '" id="admin-bar-logo">' . get_blog_option( bp_get_root_blog_id(), 'blogname' ) . '</a>';
+}
+
+/**
+ * Output the "Log In" and "Sign Up" names to the BuddyBar.
+ *
+ * Visible only to visitors who are not logged in.
+ *
+ * @deprecated BuddyPress (2.1.0)
+ *
+ * @return bool|null Returns false if the current user is logged in.
+ */
+function bp_adminbar_login_menu() {
+
+	if ( is_user_logged_in() )
+		return false;
+
+	echo '<li class="bp-login no-arrow"><a href="' . wp_login_url() . '">' . __( 'Log In', 'buddypress' ) . '</a></li>';
+
+	// Show "Sign Up" link if user registrations are allowed
+	if ( bp_get_signup_allowed() )
+		echo '<li class="bp-signup no-arrow"><a href="' . bp_get_signup_page() . '">' . __( 'Sign Up', 'buddypress' ) . '</a></li>';
+}
+
+/**
+ * Output the My Account BuddyBar menu.
+ *
+ * @deprecated BuddyPress (2.1.0)
+ *
+ * @return bool|null Returns false on failure.
+ */
+function bp_adminbar_account_menu() {
+	global $bp;
+
+	if ( !$bp->bp_nav || !is_user_logged_in() )
+		return false;
+
+	echo '<li id="bp-adminbar-account-menu"><a href="' . bp_loggedin_user_domain() . '">';
+	echo __( 'My Account', 'buddypress' ) . '</a>';
+	echo '<ul>';
+
+	// Loop through each navigation item
+	$counter = 0;
+	foreach( (array) $bp->bp_nav as $nav_item ) {
+		$alt = ( 0 == $counter % 2 ) ? ' class="alt"' : '';
+
+		if ( -1 == $nav_item['position'] )
+			continue;
+
+		echo '<li' . $alt . '>';
+		echo '<a id="bp-admin-' . $nav_item['css_id'] . '" href="' . $nav_item['link'] . '">' . $nav_item['name'] . '</a>';
+
+		if ( isset( $bp->bp_options_nav[$nav_item['slug']] ) && is_array( $bp->bp_options_nav[$nav_item['slug']] ) ) {
+			echo '<ul>';
+			$sub_counter = 0;
+
+			foreach( (array) $bp->bp_options_nav[$nav_item['slug']] as $subnav_item ) {
+				$link = $subnav_item['link'];
+				$name = $subnav_item['name'];
+
+				if ( bp_displayed_user_domain() )
+					$link = str_replace( bp_displayed_user_domain(), bp_loggedin_user_domain(), $subnav_item['link'] );
+
+				if ( isset( $bp->displayed_user->userdata->user_login ) )
+					$name = str_replace( $bp->displayed_user->userdata->user_login, $bp->loggedin_user->userdata->user_login, $subnav_item['name'] );
+
+				$alt = ( 0 == $sub_counter % 2 ) ? ' class="alt"' : '';
+				echo '<li' . $alt . '><a id="bp-admin-' . $subnav_item['css_id'] . '" href="' . $link . '">' . $name . '</a></li>';
+				$sub_counter++;
+			}
+			echo '</ul>';
+		}
+
+		echo '</li>';
+
+		$counter++;
+	}
+
+	$alt = ( 0 == $counter % 2 ) ? ' class="alt"' : '';
+
+	echo '<li' . $alt . '><a id="bp-admin-logout" class="logout" href="' . wp_logout_url( home_url() ) . '">' . __( 'Log Out', 'buddypress' ) . '</a></li>';
+	echo '</ul>';
+	echo '</li>';
+}
+
+function bp_adminbar_thisblog_menu() {
+	if ( current_user_can( 'edit_posts' ) ) {
+		echo '<li id="bp-adminbar-thisblog-menu"><a href="' . admin_url() . '">';
+		_e( 'Dashboard', 'buddypress' );
+		echo '</a>';
+		echo '<ul>';
+
+		echo '<li class="alt"><a href="' . admin_url() . 'post-new.php">' . __( 'New Post', 'buddypress' ) . '</a></li>';
+		echo '<li><a href="' . admin_url() . 'edit.php">' . __( 'Manage Posts', 'buddypress' ) . '</a></li>';
+		echo '<li class="alt"><a href="' . admin_url() . 'edit-comments.php">' . __( 'Manage Comments', 'buddypress' ) . '</a></li>';
+
+		do_action( 'bp_adminbar_thisblog_items' );
+
+		echo '</ul>';
+		echo '</li>';
+	}
+}
+
+/**
+ * Output the Random BuddyBar menu.
+ *
+ * Not visible for logged-in users.
+ *
+ * @deprecated BuddyPress (2.1.0)
+ */
+function bp_adminbar_random_menu() {
+?>
+
+	<li class="align-right" id="bp-adminbar-visitrandom-menu">
+		<a href="#"><?php _e( 'Visit', 'buddypress' ) ?></a>
+		<ul class="random-list">
+			<li><a href="<?php echo trailingslashit( bp_get_root_domain() . '/' . bp_get_members_root_slug() ) . '?random-member' ?>" rel="nofollow"><?php _e( 'Random Member', 'buddypress' ) ?></a></li>
+
+			<?php if ( bp_is_active( 'groups' ) ) : ?>
+
+				<li class="alt"><a href="<?php echo trailingslashit( bp_get_root_domain() . '/' . bp_get_groups_root_slug() ) . '?random-group' ?>"  rel="nofollow"><?php _e( 'Random Group', 'buddypress' ) ?></a></li>
+
+			<?php endif; ?>
+
+			<?php if ( is_multisite() && bp_is_active( 'blogs' ) ) : ?>
+
+				<li><a href="<?php echo trailingslashit( bp_get_root_domain() . '/' . bp_get_blogs_root_slug() ) . '?random-blog' ?>"  rel="nofollow"><?php _e( 'Random Site', 'buddypress' ) ?></a></li>
+
+			<?php endif; ?>
+
+			<?php do_action( 'bp_adminbar_random_menu' ) ?>
+
+		</ul>
+	</li>
+
+	<?php
+}
+
+/**
+ * Enqueue the BuddyBar CSS.
+ *
+ * @deprecated BuddyPress (2.1.0)
+ */
+function bp_core_load_buddybar_css() {
+	if ( bp_use_wp_admin_bar() || ( (int) bp_get_option( 'hide-loggedout-adminbar' ) && !is_user_logged_in() ) || ( defined( 'BP_DISABLE_ADMIN_BAR' ) && BP_DISABLE_ADMIN_BAR ) )
+		return;
+
+	$min = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
+
+	if ( file_exists( get_stylesheet_directory() . '/_inc/css/adminbar.css' ) ) { // Backwards compatibility
+		$stylesheet = get_stylesheet_directory_uri() . '/_inc/css/adminbar.css';
+	} else {
+		$stylesheet = buddypress()->plugin_url . "bp-core/css/buddybar{$min}.css";
+	}
+
+	wp_enqueue_style( 'bp-admin-bar', apply_filters( 'bp_core_buddybar_rtl_css', $stylesheet ), array(), bp_get_version() );
+
+	wp_style_add_data( 'bp-admin-bar', 'rtl', true );
+	if ( $min ) {
+		wp_style_add_data( 'bp-admin-bar', 'suffix', $min );
+	}
+}
+add_action( 'bp_init', 'bp_core_load_buddybar_css' );
+
+/**
+ * Add menu items to the BuddyBar.
+ *
+ * @since BuddyPress (1.0.0)
+ *
+ * @deprecated BuddyPress (2.1.0)
+ *
+ * @global BuddyPress $bp
+ */
+function bp_groups_adminbar_admin_menu() {
+	global $bp;
+
+	if ( empty( $bp->groups->current_group ) )
+		return false;
+
+	// Only group admins and site admins can see this menu
+	if ( !current_user_can( 'edit_users' ) && !bp_current_user_can( 'bp_moderate' ) && !bp_is_item_admin() )
+		return false; ?>
+
+	<li id="bp-adminbar-adminoptions-menu">
+		<a href="<?php bp_groups_action_link( 'admin' ); ?>"><?php _e( 'Admin Options', 'buddypress' ); ?></a>
+
+		<ul>
+			<li><a href="<?php bp_groups_action_link( 'admin/edit-details' ); ?>"><?php _e( 'Edit Details', 'buddypress' ); ?></a></li>
+
+			<li><a href="<?php bp_groups_action_link( 'admin/group-settings' );  ?>"><?php _e( 'Group Settings', 'buddypress' ); ?></a></li>
+
+			<?php if ( !(int)bp_get_option( 'bp-disable-avatar-uploads' ) && $bp->avatar->show_avatars ) : ?>
+
+				<li><a href="<?php bp_groups_action_link( 'admin/group-avatar' ); ?>"><?php _e( 'Group Profile Photo', 'buddypress' ); ?></a></li>
+
+			<?php endif; ?>
+
+			<?php if ( bp_is_active( 'friends' ) ) : ?>
+
+				<li><a href="<?php bp_groups_action_link( 'send-invites' ); ?>"><?php _e( 'Manage Invitations', 'buddypress' ); ?></a></li>
+
+			<?php endif; ?>
+
+			<li><a href="<?php bp_groups_action_link( 'admin/manage-members' ); ?>"><?php _e( 'Manage Members', 'buddypress' ); ?></a></li>
+
+			<?php if ( $bp->groups->current_group->status == 'private' ) : ?>
+
+				<li><a href="<?php bp_groups_action_link( 'admin/membership-requests' ); ?>"><?php _e( 'Membership Requests', 'buddypress' ); ?></a></li>
+
+			<?php endif; ?>
+
+			<li><a class="confirm" href="<?php echo wp_nonce_url( bp_get_group_permalink( $bp->groups->current_group ) . 'admin/delete-group/', 'groups_delete_group' ); ?>&amp;delete-group-button=1&amp;delete-group-understand=1"><?php _e( "Delete Group", 'buddypress' ) ?></a></li>
+
+			<?php do_action( 'bp_groups_adminbar_admin_menu' ) ?>
+
+		</ul>
+	</li>
+
+	<?php
+}
+add_action( 'bp_adminbar_menus', 'bp_groups_adminbar_admin_menu', 20 );
+
+/**
+ * Add the Notifications menu to the BuddyBar.
+ *
+ * @deprecated BuddyPress (2.1.0)
+ */
+function bp_adminbar_notifications_menu() {
+
+	// Bail if notifications is not active
+	if ( ! bp_is_active( 'notifications' ) ) {
+		return false;
+	}
+
+	bp_notifications_buddybar_menu();
+}
+add_action( 'bp_adminbar_menus', 'bp_adminbar_notifications_menu', 8 );
+
+/**
+ * Add the Blog Authors menu to the BuddyBar (visible when not logged in).
+ *
+ * @deprecated BuddyPress (2.1.0)
+ */
+function bp_adminbar_authors_menu() {
+	global $wpdb;
+
+	// Only for multisite
+	if ( !is_multisite() )
+		return false;
+
+	// Hide on root blog
+	if ( $wpdb->blogid == bp_get_root_blog_id() || !bp_is_active( 'blogs' ) )
+		return false;
+
+	$blog_prefix = $wpdb->get_blog_prefix( $wpdb->blogid );
+	$authors     = $wpdb->get_results( "SELECT user_id, user_login, user_nicename, display_name, user_email, meta_value as caps FROM $wpdb->users u, $wpdb->usermeta um WHERE u.ID = um.user_id AND meta_key = '{$blog_prefix}capabilities' ORDER BY um.user_id" );
+
+	if ( !empty( $authors ) ) {
+		// This is a blog, render a menu with links to all authors
+		echo '<li id="bp-adminbar-authors-menu"><a href="/">';
+		_e('Blog Authors', 'buddypress');
+		echo '</a>';
+
+		echo '<ul class="author-list">';
+		foreach( (array) $authors as $author ) {
+			$caps = maybe_unserialize( $author->caps );
+			if ( isset( $caps['subscriber'] ) || isset( $caps['contributor'] ) ) continue;
+
+			echo '<li>';
+			echo '<a href="' . bp_core_get_user_domain( $author->user_id, $author->user_nicename, $author->user_login ) . '">';
+			echo bp_core_fetch_avatar( array(
+				'item_id' => $author->user_id,
+				'email'   => $author->user_email,
+				'width'   => 15,
+				'height'  => 15,
+				'alt'     => sprintf( __( 'Profile picture of %s', 'buddypress' ), $author->display_name )
+			) );
+ 			echo ' ' . $author->display_name . '</a>';
+			echo '<div class="admin-bar-clear"></div>';
+			echo '</li>';
+		}
+		echo '</ul>';
+		echo '</li>';
+	}
+}
+add_action( 'bp_adminbar_menus', 'bp_adminbar_authors_menu', 12 );
+
+/**
+ * Add a member admin menu to the BuddyBar.
+ *
+ * Adds an Toolbar menu to any profile page providing site moderator actions
+ * that allow capable users to clean up a users account.
+ *
+ * @deprecated BuddyPress (2.1.0)
+ */
+function bp_members_adminbar_admin_menu() {
+
+	// Only show if viewing a user
+	if ( !bp_displayed_user_id() )
+		return false;
+
+	// Don't show this menu to non site admins or if you're viewing your own profile
+	if ( !current_user_can( 'edit_users' ) || bp_is_my_profile() )
+		return false; ?>
+
+	<li id="bp-adminbar-adminoptions-menu">
+
+		<a href=""><?php _e( 'Admin Options', 'buddypress' ) ?></a>
+
+		<ul>
+			<?php if ( bp_is_active( 'xprofile' ) ) : ?>
+
+				<li><a href="<?php bp_members_component_link( 'profile', 'edit' ); ?>"><?php printf( __( "Edit %s's Profile", 'buddypress' ), esc_attr( bp_get_displayed_user_fullname() ) ) ?></a></li>
+
+			<?php endif ?>
+
+			<li><a href="<?php bp_members_component_link( 'profile', 'change-avatar' ); ?>"><?php printf( __( "Edit %s's Profile Photo", 'buddypress' ), esc_attr( bp_get_displayed_user_fullname() ) ) ?></a></li>
+
+			<li><a href="<?php bp_members_component_link( 'settings', 'capabilities' ); ?>"><?php _e( 'User Capabilities', 'buddypress' ); ?></a></li>
+
+			<li><a href="<?php bp_members_component_link( 'settings', 'delete-account' ); ?>"><?php printf( __( "Delete %s's Account", 'buddypress' ), esc_attr( bp_get_displayed_user_fullname() ) ); ?></a></li>
+
+			<?php do_action( 'bp_members_adminbar_admin_menu' ) ?>
+
+		</ul>
+	</li>
+
+	<?php
+}
+add_action( 'bp_adminbar_menus', 'bp_members_adminbar_admin_menu', 20 );
+
+/**
+ * Create the Notifications menu for the BuddyBar.
+ *
+ * @since BuddyPress (1.9.0)
+ * @deprecated BuddyPress (2.1.0)
+ */
+function bp_notifications_buddybar_menu() {
+
+	if ( ! is_user_logged_in() ) {
+		return false;
+	}
+
+	echo '<li id="bp-adminbar-notifications-menu"><a href="' . esc_url( bp_loggedin_user_domain() ) . '">';
+	_e( 'Notifications', 'buddypress' );
+
+	if ( $notification_count = bp_notifications_get_unread_notification_count( bp_loggedin_user_id() ) ) : ?>
+		<span><?php echo bp_core_number_format( $notification_count ); ?></span>
+	<?php
+	endif;
+
+	echo '</a>';
+	echo '<ul>';
+
+	if ( $notifications = bp_notifications_get_notifications_for_user( bp_loggedin_user_id() ) ) {
+		$counter = 0;
+		for ( $i = 0, $count = count( $notifications ); $i < $count; ++$i ) {
+			$alt = ( 0 == $counter % 2 ) ? ' class="alt"' : ''; ?>
+
+			<li<?php echo $alt ?>><?php echo $notifications[$i] ?></li>
+
+			<?php $counter++;
+		}
+	} else { ?>
+
+		<li><a href="<?php echo esc_url( bp_loggedin_user_domain() ); ?>"><?php _e( 'No new notifications.', 'buddypress' ); ?></a></li>
+
+	<?php
+	}
+
+	echo '</ul>';
+	echo '</li>';
+}
+add_action( 'bp_adminbar_menus', 'bp_adminbar_notifications_menu', 8 );
+
+/**
+ * Output the base URL for subdomain installations of WordPress Multisite.
+ *
+ * @since BuddyPress (1.6.0)
+ *
+ * @deprecated BuddyPress (2.1.0)
+ */
+function bp_blogs_subdomain_base() {
+	_deprecated_function( __FUNCTION__, '2.1', 'bp_signup_subdomain_base()' );
+	echo bp_signup_get_subdomain_base();
+}
+
+/**
+ * Return the base URL for subdomain installations of WordPress Multisite.
+ *
+ * @since BuddyPress (1.6.0)
+ *
+ * @return string The base URL - eg, 'example.com' for site_url() example.com or www.example.com.
+ *
+ * @deprecated BuddyPress (2.1.0)
+ */
+function bp_blogs_get_subdomain_base() {
+	_deprecated_function( __FUNCTION__, '2.1', 'bp_signup_get_subdomain_base()' );
+	return bp_signup_get_subdomain_base();
+}
+
+/**
+ * Alledgedly output an avatar upload form, but it hasn't done that since 2009.
+ *
+ * @since BuddyPress (1.0.0)
+ * @deprecated BuddyPress (2.1.0)
+ */
+function bp_avatar_upload_form() {
+	_deprecated_function(__FUNCTION__, '2.1', 'No longer used' );
+}
+
diff --git a/wp-content/plugins/buddypress/bp-core/deprecated/css/autocomplete/jquery.autocompletefb-rtl.css b/wp-content/plugins/buddypress/bp-core/deprecated/css/autocomplete/jquery.autocompletefb-rtl.css
new file mode 100644
index 000000000..88659df3d
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-core/deprecated/css/autocomplete/jquery.autocompletefb-rtl.css
@@ -0,0 +1,80 @@
+.ac_results {
+	padding: 0px;
+	overflow: hidden;
+	z-index: 99999;
+	background: #fff;
+	border: 1px solid #ccc;
+	-moz-border-radius-bottomleft: 3px;
+	-khtml-border-bottom-right-radius: 3px;
+	-webkit-border-bottom-right-radius: 3px;
+	border-bottom-right-radius: 3px;
+	-moz-border-radius-bottomright: 3px;
+	-khtml-border-bottom-left-radius: 3px;
+	-webkit-border-bottom-left-radius: 3px;
+	border-bottom-left-radius: 3px;
+}
+	.ac_results ul {
+		width: 100%;
+		list-style-position: outside;
+		list-style: none;
+		padding: 0;
+		margin: 0;
+	}
+
+	.ac_results li {
+		margin: 0px;
+		padding: 5px 10px;
+		cursor: pointer;
+		display: block;
+		font-size: 1em;
+		line-height: 16px;
+		overflow: hidden;
+	}
+		.ac_results li img {
+			margin-left: 5px;
+		}
+
+.ac_odd {
+	background-color: #f0f0f0;
+}
+
+.ac_over {
+	background-color: #888;
+	color: #fff;
+}
+
+ul.acfb-holder {
+	margin  : 0;
+	height  : auto !important;
+	height  : 1%;
+	overflow: hidden;
+	padding: 0;
+	list-style: none;
+}
+	ul.acfb-holder li {
+		float   : right;
+		margin  : 0 0 4px 5px;
+		list-style-type: none;
+	}
+
+	ul.acfb-holder li.friend-tab {
+		border-radius         : 3px;
+		-moz-border-radius    : 3px;
+		-webkit-border-radius : 3px;
+		border     : 1px solid #ffe7c7;
+		padding    : 2px 7px 2px;
+		background : #FFF9DF;
+		font-size: 1em;
+	}
+		li.friend-tab img.avatar {
+			border-width: 2px !important;
+			vertical-align: middle;
+		}
+
+		li.friend-tab span.p {
+			padding-right: 5px;
+			font-size: 0.8em;
+			cursor: pointer;
+		}
+
+input#send-to-input { width: 275px; }
diff --git a/wp-content/plugins/buddypress/bp-core/deprecated/css/autocomplete/jquery.autocompletefb-rtl.min.css b/wp-content/plugins/buddypress/bp-core/deprecated/css/autocomplete/jquery.autocompletefb-rtl.min.css
new file mode 100644
index 000000000..7c0fe0a88
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-core/deprecated/css/autocomplete/jquery.autocompletefb-rtl.min.css
@@ -0,0 +1,2 @@
+/*! buddypress - v2.1.0 - 2014-10-06 9:39:09 PM UTC - https://wordpress.org/plugins/buddypress/ */
+.ac_results{padding:0;overflow:hidden;z-index:99999;background:#fff;border:1px solid #ccc;-moz-border-radius-bottomleft:3px;-khtml-border-bottom-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-moz-border-radius-bottomright:3px;-khtml-border-bottom-left-radius:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px}.ac_results ul{width:100%;list-style:none;padding:0;margin:0}.ac_results li{margin:0;padding:5px 10px;cursor:pointer;display:block;font-size:1em;line-height:16px;overflow:hidden}.ac_results li img{margin-left:5px}.ac_odd{background-color:#f0f0f0}.ac_over{background-color:#888;color:#fff}ul.acfb-holder{margin:0;height:auto!important;height:1%;overflow:hidden;padding:0;list-style:none}ul.acfb-holder li{float:right;margin:0 0 4px 5px;list-style-type:none}ul.acfb-holder li.friend-tab{border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;border:1px solid #ffe7c7;padding:2px 7px;background:#FFF9DF;font-size:1em}li.friend-tab img.avatar{border-width:2px!important;vertical-align:middle}li.friend-tab span.p{padding-right:5px;font-size:.8em;cursor:pointer}input#send-to-input{width:275px}
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-core/deprecated/css/autocomplete/jquery.autocompletefb.css b/wp-content/plugins/buddypress/bp-core/deprecated/css/autocomplete/jquery.autocompletefb.css
new file mode 100644
index 000000000..688195f92
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-core/deprecated/css/autocomplete/jquery.autocompletefb.css
@@ -0,0 +1,80 @@
+.ac_results {
+	padding: 0px;
+	overflow: hidden;
+	z-index: 99999;
+	background: #fff;
+	border: 1px solid #ccc;
+	-moz-border-radius-bottomleft: 3px;
+	-khtml-border-bottom-left-radius: 3px;
+	-webkit-border-bottom-left-radius: 3px;
+	border-bottom-left-radius: 3px;
+	-moz-border-radius-bottomright: 3px;
+	-khtml-border-bottom-right-radius: 3px;
+	-webkit-border-bottom-right-radius: 3px;
+	border-bottom-right-radius: 3px;
+}
+	.ac_results ul {
+		width: 100%;
+		list-style-position: outside;
+		list-style: none;
+		padding: 0;
+		margin: 0;
+	}
+
+	.ac_results li {
+		margin: 0px;
+		padding: 5px 10px;
+		cursor: pointer;
+		display: block;
+		font-size: 1em;
+		line-height: 16px;
+		overflow: hidden;
+	}
+		.ac_results li img {
+			margin-right: 5px;
+		}
+
+.ac_odd {
+	background-color: #f0f0f0;
+}
+
+.ac_over {
+	background-color: #888;
+	color: #fff;
+}
+
+ul.acfb-holder {
+	margin  : 0;
+	height  : auto !important;
+	height  : 1%;
+	overflow: hidden;
+	padding: 0;
+	list-style: none;
+}
+	ul.acfb-holder li {
+		float   : left;
+		margin  : 0 5px 4px 0;
+		list-style-type: none;
+	}
+
+	ul.acfb-holder li.friend-tab {
+		border-radius         : 3px;
+		-moz-border-radius    : 3px;
+		-webkit-border-radius : 3px;
+		border     : 1px solid #ffe7c7;
+		padding    : 2px 7px 2px;
+		background : #FFF9DF;
+		font-size: 1em;
+	}
+		li.friend-tab img.avatar {
+			border-width: 2px !important;
+			vertical-align: middle;
+		}
+
+		li.friend-tab span.p {
+			padding-left: 5px;
+			font-size: 0.8em;
+			cursor: pointer;
+		}
+
+input#send-to-input { width: 275px; }
diff --git a/wp-content/plugins/buddypress/bp-core/deprecated/css/autocomplete/jquery.autocompletefb.min.css b/wp-content/plugins/buddypress/bp-core/deprecated/css/autocomplete/jquery.autocompletefb.min.css
new file mode 100644
index 000000000..76c1cfb3a
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-core/deprecated/css/autocomplete/jquery.autocompletefb.min.css
@@ -0,0 +1,2 @@
+/*! buddypress - v2.1.0 - 2014-10-06 9:39:09 PM UTC - https://wordpress.org/plugins/buddypress/ */
+.ac_results{padding:0;overflow:hidden;z-index:99999;background:#fff;border:1px solid #ccc;-moz-border-radius-bottomleft:3px;-khtml-border-bottom-left-radius:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-moz-border-radius-bottomright:3px;-khtml-border-bottom-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px}.ac_results ul{width:100%;list-style:none;padding:0;margin:0}.ac_results li{margin:0;padding:5px 10px;cursor:pointer;display:block;font-size:1em;line-height:16px;overflow:hidden}.ac_results li img{margin-right:5px}.ac_odd{background-color:#f0f0f0}.ac_over{background-color:#888;color:#fff}ul.acfb-holder{margin:0;height:auto!important;height:1%;overflow:hidden;padding:0;list-style:none}ul.acfb-holder li{float:left;margin:0 5px 4px 0;list-style-type:none}ul.acfb-holder li.friend-tab{border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;border:1px solid #ffe7c7;padding:2px 7px;background:#FFF9DF;font-size:1em}li.friend-tab img.avatar{border-width:2px!important;vertical-align:middle}li.friend-tab span.p{padding-left:5px;font-size:.8em;cursor:pointer}input#send-to-input{width:275px}
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-core/deprecated/js/autocomplete/jquery.autocomplete.js b/wp-content/plugins/buddypress/bp-core/deprecated/js/autocomplete/jquery.autocomplete.js
new file mode 100644
index 000000000..b31162937
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-core/deprecated/js/autocomplete/jquery.autocomplete.js
@@ -0,0 +1,730 @@
+/*!
+ * Autocomplete - jQuery plugin 1.0 Beta
+ *
+ * Copyright (c) 2007 Dylan Verheul, Dan G. Switzer, Anjesh Tuladhar, Jörn Zaefferer
+ *
+ * Dual licensed under the MIT and GPL licenses:
+ *   http://www.opensource.org/licenses/mit-license.php
+ *   http://www.gnu.org/licenses/gpl.html
+ *
+ * Revision: $Id: jquery.autocomplete.js 4485 2008-01-20 13:52:47Z joern.zaefferer $
+ *
+ */
+
+;(function($) {
+
+$.fn.extend({
+	autocomplete: function(urlOrData, options) {
+		var isUrl = typeof urlOrData == "string";
+		options = $.extend({}, $.Autocompleter.defaults, {
+			url: isUrl ? urlOrData : null,
+			data: isUrl ? null : urlOrData,
+			delay: isUrl ? $.Autocompleter.defaults.delay : 10,
+			max: options && !options.scroll ? 10 : 150
+		}, options);
+
+		// if highlight is set to false, replace it with a do-nothing function
+		options.highlight = options.highlight || function(value) { return value; };
+
+		return this.each(function() {
+			new $.Autocompleter(this, options);
+		});
+	},
+	result: function(handler) {
+		return this.bind("result", handler);
+	},
+	search: function(handler) {
+		return this.trigger("search", [handler]);
+	},
+	flushCache: function() {
+		return this.trigger("flushCache");
+	},
+	setOptions: function(options){
+		return this.trigger("setOptions", [options]);
+	},
+	unautocomplete: function() {
+		return this.trigger("unautocomplete");
+	}
+});
+
+$.Autocompleter = function(input, options) {
+
+	var KEY = {
+		UP: 38,
+		DOWN: 40,
+		DEL: 46,
+		TAB: 9,
+		RETURN: 13,
+		ESC: 27,
+		COMMA: 188,
+		PAGEUP: 33,
+		PAGEDOWN: 34
+	};
+
+	// Create $ object for input element
+	var $input = $(input).attr("autocomplete", "off").addClass(options.inputClass);
+
+	var timeout;
+	var previousValue = "";
+	var cache = $.Autocompleter.Cache(options);
+	var hasFocus = 0;
+	var lastKeyPressCode;
+	var config = {
+		mouseDownOnSelect: false
+	};
+	var select = $.Autocompleter.Select(options, input, selectCurrent, config);
+
+	$input.keydown(function(event) {
+		// track last key pressed
+		lastKeyPressCode = event.keyCode;
+		switch(event.keyCode) {
+
+			case KEY.UP:
+				event.preventDefault();
+				if ( select.visible() ) {
+					select.prev();
+				} else {
+					onChange(0, true);
+				}
+				break;
+
+			case KEY.DOWN:
+				event.preventDefault();
+				if ( select.visible() ) {
+					select.next();
+				} else {
+					onChange(0, true);
+				}
+				break;
+
+			case KEY.PAGEUP:
+				event.preventDefault();
+				if ( select.visible() ) {
+					select.pageUp();
+				} else {
+					onChange(0, true);
+				}
+				break;
+
+			case KEY.PAGEDOWN:
+				event.preventDefault();
+				if ( select.visible() ) {
+					select.pageDown();
+				} else {
+					onChange(0, true);
+				}
+				break;
+
+			// matches also semicolon
+			case options.multiple && $.trim(options.multipleSeparator) == "," && KEY.COMMA:
+			case KEY.TAB:
+			case KEY.RETURN:
+				if( selectCurrent() ){
+					// make sure to blur off the current field
+					if( !options.multiple )
+						$input.blur();
+					event.preventDefault();
+						$input.focus();
+				}
+				break;
+
+			case KEY.ESC:
+				select.hide();
+				break;
+
+			default:
+				clearTimeout(timeout);
+				timeout = setTimeout(onChange, options.delay);
+				break;
+		}
+	}).keypress(function() {
+		// having fun with opera - remove this binding and Opera submits the form when we select an entry via return
+	}).focus(function(){
+		// track whether the field has focus, we shouldn't process any
+		// results if the field no longer has focus
+		hasFocus++;
+	}).blur(function() {
+		hasFocus = 0;
+		if (!config.mouseDownOnSelect) {
+			hideResults();
+		}
+	}).click(function() {
+		// show select when clicking in a focused field
+		if ( hasFocus++ > 1 && !select.visible() ) {
+			onChange(0, true);
+		}
+	}).bind("search", function() {
+		// TODO why not just specifying both arguments?
+		var fn = (arguments.length > 1) ? arguments[1] : null;
+		function findValueCallback(q, data) {
+			var result;
+			if( data && data.length ) {
+				for (var i=0; i < data.length; i++) {
+					if( data[i].result.toLowerCase() == q.toLowerCase() ) {
+						result = data[i];
+						break;
+					}
+				}
+			}
+			if( typeof fn == "function" ) fn(result);
+			else $input.trigger("result", result && [result.data, result.value]);
+		}
+		$.each(trimWords($input.val()), function(i, value) {
+			request(value, findValueCallback, findValueCallback);
+		});
+	}).bind("flushCache", function() {
+		cache.flush();
+	}).bind("setOptions", function() {
+		$.extend(options, arguments[1]);
+		// if we've updated the data, repopulate
+		if ( "data" in arguments[1] )
+			cache.populate();
+	}).bind("unautocomplete", function() {
+		select.unbind();
+		$input.unbind();
+	});
+
+
+	function selectCurrent() {
+		var selected = select.selected();
+		if( !selected )
+			return false;
+
+		var v = selected.result;
+		previousValue = v;
+
+		if ( options.multiple ) {
+			var words = trimWords($input.val());
+			if ( words.length > 1 ) {
+				v = words.slice(0, words.length - 1).join( options.multipleSeparator ) + options.multipleSeparator + v;
+			}
+			v += options.multipleSeparator;
+		}
+
+		$input.val(v);
+		hideResultsNow();
+		$input.trigger("result", [selected.data, selected.value]);
+		return true;
+	}
+
+	function onChange(crap, skipPrevCheck) {
+		if( lastKeyPressCode == KEY.DEL ) {
+			select.hide();
+			return;
+		}
+
+		var currentValue = $input.val();
+
+		if ( !skipPrevCheck && currentValue == previousValue )
+			return;
+
+		previousValue = currentValue;
+
+		currentValue = lastWord(currentValue);
+		if ( currentValue.length >= options.minChars) {
+			$input.addClass(options.loadingClass);
+			jQuery('#send-to-input').addClass('loading');
+			if (!options.matchCase)
+				currentValue = currentValue.toLowerCase();
+			request(currentValue, receiveData, hideResultsNow);
+		} else {
+			stopLoading();
+			select.hide();
+		}
+	};
+
+	function trimWords(value) {
+		if ( !value ) {
+			return [""];
+		}
+		var words = value.split( $.trim( options.multipleSeparator ) );
+		var result = [];
+		$.each(words, function(i, value) {
+			if ( $.trim(value) )
+				result[i] = $.trim(value);
+		});
+		return result;
+	}
+
+	function lastWord(value) {
+		if ( !options.multiple )
+			return value;
+		var words = trimWords(value);
+		return words[words.length - 1];
+	}
+
+	// fills in the input box w/the first match (assumed to be the best match)
+	function autoFill(q, sValue){
+		// autofill in the complete box w/the first match as long as the user hasn't entered in more data
+		// if the last user key pressed was backspace, don't autofill
+		if( options.autoFill && (lastWord($input.val()).toLowerCase() == q.toLowerCase()) && lastKeyPressCode != 8 ) {
+			// fill in the value (keep the case the user has typed)
+			$input.val($input.val() + sValue.substring(lastWord(previousValue).length));
+			// select the portion of the value not typed by the user (so the next character will erase)
+			$.Autocompleter.Selection(input, previousValue.length, previousValue.length + sValue.length);
+		}
+	};
+
+	function hideResults() {
+		clearTimeout(timeout);
+		timeout = setTimeout(hideResultsNow, 200);
+	};
+
+	function hideResultsNow() {
+		select.hide();
+		clearTimeout(timeout);
+		stopLoading();
+		if (options.mustMatch) {
+			// call search and run callback
+			$input.search(
+				function (result){
+					// if no value found, clear the input box
+					if( !result ) $input.val("");
+				}
+			);
+		}
+	};
+
+	function receiveData(q, data) {
+		if ( data && data.length && hasFocus ) {
+			stopLoading();
+			select.display(data, q);
+
+			var newData = data[0].value.split(';');
+			data.value = newData[0];
+
+			autoFill(q, data.value);
+			select.show();
+		} else {
+			hideResultsNow();
+		}
+	};
+
+	function request(term, success, failure) {
+		if (!options.matchCase)
+			term = term.toLowerCase();
+		var data = cache.load(term);
+		// recieve the cached data
+		if (data && data.length) {
+			success(term, data);
+		// if an AJAX url has been supplied, try loading the data now
+		} else if( (typeof options.url == "string") && (options.url.length > 0) ){
+
+			var extraParams = {};
+			$.each(options.extraParams, function(key, param) {
+				extraParams[key] = typeof param == "function" ? param() : param;
+			});
+
+			$.ajax({
+				// try to leverage ajaxQueue plugin to abort previous requests
+				mode: "abort",
+				// limit abortion to this input
+				port: "autocomplete" + input.name,
+				dataType: options.dataType,
+				url: options.url,
+				data: $.extend({
+					q: lastWord(term),
+					limit: options.max,
+					action: 'messages_autocomplete_results',
+					'cookie': encodeURIComponent(document.cookie)
+				}, extraParams),
+				success: function(data) {
+					var parsed = options.parse && options.parse(data) || parse(data);
+					cache.add(term, parsed);
+					success(term, parsed);
+				}
+			});
+		} else {
+			failure(term);
+		}
+	};
+
+	function parse(data) {
+		var parsed = [];
+		var rows = data.split("\n");
+		for (var i=0; i < rows.length; i++) {
+			var row = $.trim(rows[i]);
+			if (row) {
+				row = row.split("|");
+				parsed[parsed.length] = {
+					data: row,
+					value: row[0],
+					result: options.formatResult && options.formatResult(row, row[0]) || row[0]
+				};
+			}
+		}
+		return parsed;
+	};
+
+	function stopLoading() {
+		$input.removeClass(options.loadingClass);
+		jQuery('#send-to-input').removeClass('loading');
+	};
+
+};
+
+$.Autocompleter.defaults = {
+	inputClass: "ac_input",
+	resultsClass: "ac_results",
+	loadingClass: "ac_loading",
+	minChars: 1,
+	delay: 400,
+	matchCase: false,
+	matchSubset: true,
+	matchContains: false,
+	cacheLength: 10,
+	max: 100,
+	mustMatch: false,
+	extraParams: {},
+	selectFirst: true,
+	formatItem: function(row) { return row[0]; },
+	autoFill: false,
+	width: 0,
+	multiple: false,
+	multipleSeparator: ", ",
+	highlight: function(value, term) {
+		return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1") + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<strong>$1</strong>");
+	},
+    scroll: true,
+    scrollHeight: 250,
+	attachTo: 'body'
+};
+
+$.Autocompleter.Cache = function(options) {
+
+	var data = {};
+	var length = 0;
+
+	function matchSubset(s, sub) {
+		if (!options.matchCase)
+			s = s.toLowerCase();
+		var i = s.indexOf(sub);
+		if (i == -1) return false;
+		return i == 0 || options.matchContains;
+	};
+
+	function add(q, value) {
+		if (length > options.cacheLength){
+			flush();
+		}
+		if (!data[q]){
+			length++;
+		}
+		data[q] = value;
+	}
+
+	function populate(){
+		if( !options.data ) return false;
+		// track the matches
+		var stMatchSets = {},
+			nullData = 0;
+
+		// no url was specified, we need to adjust the cache length to make sure it fits the local data store
+		if( !options.url ) options.cacheLength = 1;
+
+		// track all options for minChars = 0
+		stMatchSets[""] = [];
+
+		// loop through the array and create a lookup structure
+		for ( var i = 0, ol = options.data.length; i < ol; i++ ) {
+			var rawValue = options.data[i];
+			// if rawValue is a string, make an array otherwise just reference the array
+			rawValue = (typeof rawValue == "string") ? [rawValue] : rawValue;
+
+			var value = options.formatItem(rawValue, i+1, options.data.length);
+			if ( value === false )
+				continue;
+
+			var firstChar = value.charAt(0).toLowerCase();
+			// if no lookup array for this character exists, look it up now
+			if( !stMatchSets[firstChar] )
+				stMatchSets[firstChar] = [];
+
+			// if the match is a string
+			var row = {
+				value: value,
+				data: rawValue,
+				result: options.formatResult && options.formatResult(rawValue) || value
+			};
+
+			// push the current match into the set list
+			stMatchSets[firstChar].push(row);
+
+			// keep track of minChars zero items
+			if ( nullData++ < options.max ) {
+				stMatchSets[""].push(row);
+			}
+		};
+
+		// add the data items to the cache
+		$.each(stMatchSets, function(i, value) {
+			// increase the cache size
+			options.cacheLength++;
+			// add to the cache
+			add(i, value);
+		});
+	}
+
+	// populate any existing data
+	setTimeout(populate, 25);
+
+	function flush(){
+		data = {};
+		length = 0;
+	}
+
+	return {
+		flush: flush,
+		add: add,
+		populate: populate,
+		load: function(q) {
+			if (!options.cacheLength || !length)
+				return null;
+			/*
+			 * if dealing w/local data and matchContains than we must make sure
+			 * to loop through all the data collections looking for matches
+			 */
+			if( !options.url && options.matchContains ){
+				// track all matches
+				var csub = [];
+				// loop through all the data grids for matches
+				for( var k in data ){
+					// don't search through the stMatchSets[""] (minChars: 0) cache
+					// this prevents duplicates
+					if( k.length > 0 ){
+						var c = data[k];
+						$.each(c, function(i, x) {
+							// if we've got a match, add it to the array
+							if (matchSubset(x.value, q)) {
+								csub.push(x);
+							}
+						});
+					}
+				}
+				return csub;
+			} else
+			// if the exact item exists, use it
+			if (data[q]){
+				return data[q];
+			} else
+			if (options.matchSubset) {
+				for (var i = q.length - 1; i >= options.minChars; i--) {
+					var c = data[q.substr(0, i)];
+					if (c) {
+						var csub = [];
+						$.each(c, function(i, x) {
+							if (matchSubset(x.value, q)) {
+								csub[csub.length] = x;
+							}
+						});
+						return csub;
+					}
+				}
+			}
+			return null;
+		}
+	};
+};
+
+$.Autocompleter.Select = function (options, input, select, config) {
+	var CLASSES = {
+		ACTIVE: "ac_over"
+	};
+
+	var listItems,
+		active = -1,
+		data,
+		term = "",
+		needsInit = true,
+		element,
+		list;
+
+	// Create results
+	function init() {
+		if (!needsInit)
+			return;
+		element = $("<div/>")
+		.hide()
+		.addClass(options.resultsClass)
+		.css("position", "absolute")
+		.appendTo(options.attachTo);
+
+		list = $("<ul>").appendTo(element).mouseover( function(event) {
+			if(target(event).nodeName && target(event).nodeName.toUpperCase() == 'LI') {
+	            active = $("li", list).removeClass(CLASSES.ACTIVE).index(target(event));
+			    $(target(event)).addClass(CLASSES.ACTIVE);
+	        }
+		}).click(function(event) {
+			$(target(event)).addClass(CLASSES.ACTIVE);
+			select();
+			input.focus();
+			return false;
+		}).mousedown(function() {
+			config.mouseDownOnSelect = true;
+		}).mouseup(function() {
+			config.mouseDownOnSelect = false;
+		});
+
+		if( options.width > 0 )
+			element.css("width", options.width);
+
+		needsInit = false;
+	}
+
+	function target(event) {
+		var element = event.target;
+		while(element && element.tagName != "LI")
+			element = element.parentNode;
+		// more fun with IE, sometimes event.target is empty, just ignore it then
+		if(!element)
+			return [];
+		return element;
+	}
+
+	function moveSelect(step) {
+		listItems.slice(active, active + 1).removeClass();
+		movePosition(step);
+        var activeItem = listItems.slice(active, active + 1).addClass(CLASSES.ACTIVE);
+        if(options.scroll) {
+            var offset = 0;
+            listItems.slice(0, active).each(function() {
+				offset += this.offsetHeight;
+			});
+            if((offset + activeItem[0].offsetHeight - list.scrollTop()) > list[0].clientHeight) {
+                list.scrollTop(offset + activeItem[0].offsetHeight - list.innerHeight());
+            } else if(offset < list.scrollTop()) {
+                list.scrollTop(offset);
+            }
+        }
+	};
+
+	function movePosition(step) {
+		active += step;
+		if (active < 0) {
+			active = listItems.size() - 1;
+		} else if (active >= listItems.size()) {
+			active = 0;
+		}
+	}
+
+	function limitNumberOfItems(available) {
+		return options.max && options.max < available
+			? options.max
+			: available;
+	}
+
+	function fillList() {
+		list.empty();
+		var max = limitNumberOfItems(data.length);
+		for (var i=0; i < max; i++) {
+			if (!data[i])
+				continue;
+			var formatted = options.formatItem(data[i].data, i+1, max, data[i].value, term);
+			if ( formatted === false )
+				continue;
+			var li = $("<li>").html( options.highlight(formatted, term) ).addClass(i%2 == 0 ? "ac_event" : "ac_odd").appendTo(list)[0];
+			$.data(li, "ac_data", data[i]);
+		}
+		listItems = list.find("li");
+		if ( options.selectFirst ) {
+			listItems.slice(0, 1).addClass(CLASSES.ACTIVE);
+			active = 0;
+		}
+		list.bgiframe();
+	}
+
+	return {
+		display: function(d, q) {
+			init();
+			data = d;
+			term = q;
+			fillList();
+		},
+		next: function() {
+			moveSelect(1);
+		},
+		prev: function() {
+			moveSelect(-1);
+		},
+		pageUp: function() {
+			if (active != 0 && active - 8 < 0) {
+				moveSelect( -active );
+			} else {
+				moveSelect(-8);
+			}
+		},
+		pageDown: function() {
+			if (active != listItems.size() - 1 && active + 8 > listItems.size()) {
+				moveSelect( listItems.size() - 1 - active );
+			} else {
+				moveSelect(8);
+			}
+		},
+		hide: function() {
+			element && element.hide();
+			active = -1;
+		},
+		visible : function() {
+			return element && element.is(":visible");
+		},
+		current: function() {
+			return this.visible() && (listItems.filter("." + CLASSES.ACTIVE)[0] || options.selectFirst && listItems[0]);
+		},
+		show: function() {
+			var offset = $(input).offset();
+			element.css({
+				width: typeof options.width == "string" || options.width > 0 ? options.width : $(input).width(),
+				top: offset.top + input.offsetHeight,
+				left: offset.left
+			}).show();
+            if(options.scroll) {
+                list.scrollTop(0);
+                list.css({
+					maxHeight: options.scrollHeight,
+					overflow: 'auto'
+				});
+
+                if($.browser.msie && typeof document.body.style.maxHeight === "undefined") {
+					var listHeight = 0;
+					listItems.each(function() {
+						listHeight += this.offsetHeight;
+					});
+					var scrollbarsVisible = listHeight > options.scrollHeight;
+                    list.css('height', scrollbarsVisible ? options.scrollHeight : listHeight );
+					if (!scrollbarsVisible) {
+						// IE doesn't recalculate width when scrollbar disappears
+						listItems.width( list.width() - parseInt(listItems.css("padding-left")) - parseInt(listItems.css("padding-right")) );
+					}
+                }
+
+            }
+		},
+		selected: function() {
+			var selected = listItems && listItems.filter("." + CLASSES.ACTIVE).removeClass(CLASSES.ACTIVE);
+			return selected && selected.length && $.data(selected[0], "ac_data");
+		},
+		unbind: function() {
+			element && element.remove();
+		}
+	};
+};
+
+$.Autocompleter.Selection = function(field, start, end) {
+	if( field.createTextRange ){
+		var selRange = field.createTextRange();
+		selRange.collapse(true);
+		selRange.moveStart("character", start);
+		selRange.moveEnd("character", end);
+		selRange.select();
+	} else if( field.setSelectionRange ){
+		field.setSelectionRange(start, end);
+	} else {
+		if( field.selectionStart ){
+			field.selectionStart = start;
+			field.selectionEnd = end;
+		}
+	}
+	field.focus();
+};
+
+})(jQuery);
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-core/deprecated/js/autocomplete/jquery.autocomplete.min.js b/wp-content/plugins/buddypress/bp-core/deprecated/js/autocomplete/jquery.autocomplete.min.js
new file mode 100644
index 000000000..78bee3388
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-core/deprecated/js/autocomplete/jquery.autocomplete.min.js
@@ -0,0 +1,2 @@
+/*! buddypress - v2.1.0 - 2014-10-06 9:39:07 PM UTC - https://wordpress.org/plugins/buddypress/ */
+!function(a){a.fn.extend({autocomplete:function(b,c){var d="string"==typeof b;return c=a.extend({},a.Autocompleter.defaults,{url:d?b:null,data:d?null:b,delay:d?a.Autocompleter.defaults.delay:10,max:c&&!c.scroll?10:150},c),c.highlight=c.highlight||function(a){return a},this.each(function(){new a.Autocompleter(this,c)})},result:function(a){return this.bind("result",a)},search:function(a){return this.trigger("search",[a])},flushCache:function(){return this.trigger("flushCache")},setOptions:function(a){return this.trigger("setOptions",[a])},unautocomplete:function(){return this.trigger("unautocomplete")}}),a.Autocompleter=function(b,c){function d(){var a=w.selected();if(!a)return!1;var b=a.result;if(s=b,c.multiple){var d=f(r.val());d.length>1&&(b=d.slice(0,d.length-1).join(c.multipleSeparator)+c.multipleSeparator+b),b+=c.multipleSeparator}return r.val(b),j(),r.trigger("result",[a.data,a.value]),!0}function e(a,b){if(p==q.DEL)return void w.hide();var d=r.val();(b||d!=s)&&(s=d,d=g(d),d.length>=c.minChars?(r.addClass(c.loadingClass),jQuery("#send-to-input").addClass("loading"),c.matchCase||(d=d.toLowerCase()),l(d,k,j)):(n(),w.hide()))}function f(b){if(!b)return[""];var d=b.split(a.trim(c.multipleSeparator)),e=[];return a.each(d,function(b,c){a.trim(c)&&(e[b]=a.trim(c))}),e}function g(a){if(!c.multiple)return a;var b=f(a);return b[b.length-1]}function h(d,e){c.autoFill&&g(r.val()).toLowerCase()==d.toLowerCase()&&8!=p&&(r.val(r.val()+e.substring(g(s).length)),a.Autocompleter.Selection(b,s.length,s.length+e.length))}function i(){clearTimeout(o),o=setTimeout(j,200)}function j(){w.hide(),clearTimeout(o),n(),c.mustMatch&&r.search(function(a){a||r.val("")})}function k(a,b){if(b&&b.length&&u){n(),w.display(b,a);var c=b[0].value.split(";");b.value=c[0],h(a,b.value),w.show()}else j()}function l(d,e,f){c.matchCase||(d=d.toLowerCase());var h=t.load(d);if(h&&h.length)e(d,h);else if("string"==typeof c.url&&c.url.length>0){var i={};a.each(c.extraParams,function(a,b){i[a]="function"==typeof b?b():b}),a.ajax({mode:"abort",port:"autocomplete"+b.name,dataType:c.dataType,url:c.url,data:a.extend({q:g(d),limit:c.max,action:"messages_autocomplete_results",cookie:encodeURIComponent(document.cookie)},i),success:function(a){var b=c.parse&&c.parse(a)||m(a);t.add(d,b),e(d,b)}})}else f(d)}function m(b){for(var d=[],e=b.split("\n"),f=0;f<e.length;f++){var g=a.trim(e[f]);g&&(g=g.split("|"),d[d.length]={data:g,value:g[0],result:c.formatResult&&c.formatResult(g,g[0])||g[0]})}return d}function n(){r.removeClass(c.loadingClass),jQuery("#send-to-input").removeClass("loading")}var o,p,q={UP:38,DOWN:40,DEL:46,TAB:9,RETURN:13,ESC:27,COMMA:188,PAGEUP:33,PAGEDOWN:34},r=a(b).attr("autocomplete","off").addClass(c.inputClass),s="",t=a.Autocompleter.Cache(c),u=0,v={mouseDownOnSelect:!1},w=a.Autocompleter.Select(c,b,d,v);r.keydown(function(b){switch(p=b.keyCode,b.keyCode){case q.UP:b.preventDefault(),w.visible()?w.prev():e(0,!0);break;case q.DOWN:b.preventDefault(),w.visible()?w.next():e(0,!0);break;case q.PAGEUP:b.preventDefault(),w.visible()?w.pageUp():e(0,!0);break;case q.PAGEDOWN:b.preventDefault(),w.visible()?w.pageDown():e(0,!0);break;case c.multiple&&","==a.trim(c.multipleSeparator)&&q.COMMA:case q.TAB:case q.RETURN:d()&&(c.multiple||r.blur(),b.preventDefault(),r.focus());break;case q.ESC:w.hide();break;default:clearTimeout(o),o=setTimeout(e,c.delay)}}).keypress(function(){}).focus(function(){u++}).blur(function(){u=0,v.mouseDownOnSelect||i()}).click(function(){u++>1&&!w.visible()&&e(0,!0)}).bind("search",function(){function b(a,b){var d;if(b&&b.length)for(var e=0;e<b.length;e++)if(b[e].result.toLowerCase()==a.toLowerCase()){d=b[e];break}"function"==typeof c?c(d):r.trigger("result",d&&[d.data,d.value])}var c=arguments.length>1?arguments[1]:null;a.each(f(r.val()),function(a,c){l(c,b,b)})}).bind("flushCache",function(){t.flush()}).bind("setOptions",function(){a.extend(c,arguments[1]),"data"in arguments[1]&&t.populate()}).bind("unautocomplete",function(){w.unbind(),r.unbind()})},a.Autocompleter.defaults={inputClass:"ac_input",resultsClass:"ac_results",loadingClass:"ac_loading",minChars:1,delay:400,matchCase:!1,matchSubset:!0,matchContains:!1,cacheLength:10,max:100,mustMatch:!1,extraParams:{},selectFirst:!0,formatItem:function(a){return a[0]},autoFill:!1,width:0,multiple:!1,multipleSeparator:", ",highlight:function(a,b){return a.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)("+b.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi,"\\$1")+")(?![^<>]*>)(?![^&;]+;)","gi"),"<strong>$1</strong>")},scroll:!0,scrollHeight:250,attachTo:"body"},a.Autocompleter.Cache=function(b){function c(a,c){b.matchCase||(a=a.toLowerCase());var d=a.indexOf(c);return-1==d?!1:0==d||b.matchContains}function d(a,c){h>b.cacheLength&&f(),g[a]||h++,g[a]=c}function e(){if(!b.data)return!1;var c={},e=0;b.url||(b.cacheLength=1),c[""]=[];for(var f=0,g=b.data.length;g>f;f++){var h=b.data[f];h="string"==typeof h?[h]:h;var i=b.formatItem(h,f+1,b.data.length);if(i!==!1){var j=i.charAt(0).toLowerCase();c[j]||(c[j]=[]);var k={value:i,data:h,result:b.formatResult&&b.formatResult(h)||i};c[j].push(k),e++<b.max&&c[""].push(k)}}a.each(c,function(a,c){b.cacheLength++,d(a,c)})}function f(){g={},h=0}var g={},h=0;return setTimeout(e,25),{flush:f,add:d,populate:e,load:function(d){if(!b.cacheLength||!h)return null;if(!b.url&&b.matchContains){var e=[];for(var f in g)if(f.length>0){var i=g[f];a.each(i,function(a,b){c(b.value,d)&&e.push(b)})}return e}if(g[d])return g[d];if(b.matchSubset)for(var j=d.length-1;j>=b.minChars;j--){var i=g[d.substr(0,j)];if(i){var e=[];return a.each(i,function(a,b){c(b.value,d)&&(e[e.length]=b)}),e}}return null}}},a.Autocompleter.Select=function(b,c,d,e){function f(){s&&(n=a("<div/>").hide().addClass(b.resultsClass).css("position","absolute").appendTo(b.attachTo),o=a("<ul>").appendTo(n).mouseover(function(b){g(b).nodeName&&"LI"==g(b).nodeName.toUpperCase()&&(q=a("li",o).removeClass(p.ACTIVE).index(g(b)),a(g(b)).addClass(p.ACTIVE))}).click(function(b){return a(g(b)).addClass(p.ACTIVE),d(),c.focus(),!1}).mousedown(function(){e.mouseDownOnSelect=!0}).mouseup(function(){e.mouseDownOnSelect=!1}),b.width>0&&n.css("width",b.width),s=!1)}function g(a){for(var b=a.target;b&&"LI"!=b.tagName;)b=b.parentNode;return b?b:[]}function h(a){l.slice(q,q+1).removeClass(),i(a);var c=l.slice(q,q+1).addClass(p.ACTIVE);if(b.scroll){var d=0;l.slice(0,q).each(function(){d+=this.offsetHeight}),d+c[0].offsetHeight-o.scrollTop()>o[0].clientHeight?o.scrollTop(d+c[0].offsetHeight-o.innerHeight()):d<o.scrollTop()&&o.scrollTop(d)}}function i(a){q+=a,0>q?q=l.size()-1:q>=l.size()&&(q=0)}function j(a){return b.max&&b.max<a?b.max:a}function k(){o.empty();for(var c=j(m.length),d=0;c>d;d++)if(m[d]){var e=b.formatItem(m[d].data,d+1,c,m[d].value,r);if(e!==!1){var f=a("<li>").html(b.highlight(e,r)).addClass(d%2==0?"ac_event":"ac_odd").appendTo(o)[0];a.data(f,"ac_data",m[d])}}l=o.find("li"),b.selectFirst&&(l.slice(0,1).addClass(p.ACTIVE),q=0),o.bgiframe()}var l,m,n,o,p={ACTIVE:"ac_over"},q=-1,r="",s=!0;return{display:function(a,b){f(),m=a,r=b,k()},next:function(){h(1)},prev:function(){h(-1)},pageUp:function(){h(0!=q&&0>q-8?-q:-8)},pageDown:function(){h(q!=l.size()-1&&q+8>l.size()?l.size()-1-q:8)},hide:function(){n&&n.hide(),q=-1},visible:function(){return n&&n.is(":visible")},current:function(){return this.visible()&&(l.filter("."+p.ACTIVE)[0]||b.selectFirst&&l[0])},show:function(){var d=a(c).offset();if(n.css({width:"string"==typeof b.width||b.width>0?b.width:a(c).width(),top:d.top+c.offsetHeight,left:d.left}).show(),b.scroll&&(o.scrollTop(0),o.css({maxHeight:b.scrollHeight,overflow:"auto"}),a.browser.msie&&"undefined"==typeof document.body.style.maxHeight)){var e=0;l.each(function(){e+=this.offsetHeight});var f=e>b.scrollHeight;o.css("height",f?b.scrollHeight:e),f||l.width(o.width()-parseInt(l.css("padding-left"))-parseInt(l.css("padding-right")))}},selected:function(){var b=l&&l.filter("."+p.ACTIVE).removeClass(p.ACTIVE);return b&&b.length&&a.data(b[0],"ac_data")},unbind:function(){n&&n.remove()}}},a.Autocompleter.Selection=function(a,b,c){if(a.createTextRange){var d=a.createTextRange();d.collapse(!0),d.moveStart("character",b),d.moveEnd("character",c),d.select()}else a.setSelectionRange?a.setSelectionRange(b,c):a.selectionStart&&(a.selectionStart=b,a.selectionEnd=c);a.focus()}}(jQuery);
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-core/deprecated/js/autocomplete/jquery.autocompletefb.js b/wp-content/plugins/buddypress/bp-core/deprecated/js/autocomplete/jquery.autocompletefb.js
new file mode 100644
index 000000000..5e637a5ab
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-core/deprecated/js/autocomplete/jquery.autocompletefb.js
@@ -0,0 +1,76 @@
+/*!
+ * jQuery plugin: autoCompletefb(AutoComplete Facebook)
+ * @requires jQuery v1.2.2 or later
+ * using plugin:jquery.autocomplete.js
+ *
+ * Credits:
+ * - Idea: Facebook
+ * - Guillermo Rauch: Original MooTools script
+ * - InteRiders <http://interiders.com/>
+ *
+ * Copyright (c) 2008 Widi Harsojo <wharsojo@gmail.com>, http://wharsojo.wordpress.com/
+ * Dual licensed under the MIT and GPL licenses:
+ *   http://www.opensource.org/licenses/mit-license.php
+ *   http://www.gnu.org/licenses/gpl.html
+ */
+
+jQuery.fn.autoCompletefb = function(options)
+{
+	var tmp = this;
+	var settings =
+	{
+		ul         : tmp,
+		urlLookup  : [""],
+		acOptions  : {},
+		foundClass : ".friend-tab",
+		inputClass : ".send-to-input"
+	}
+
+	if(options) jQuery.extend(settings, options);
+
+	var acfb =
+	{
+		params  : settings,
+		removeFind : function(o){
+			acfb.removeUsername(o);
+			jQuery(o).unbind('click').parent().remove();
+			jQuery(settings.inputClass,tmp).focus();
+			return tmp.acfb;
+		},
+		removeUsername: function(o){
+			var newID = o.parentNode.id.substr( o.parentNode.id.indexOf('-')+1 );
+			jQuery('#send-to-usernames').removeClass(newID);
+		}
+	}
+
+	jQuery(settings.foundClass+" img.p").click(function(){
+		acfb.removeFind(this);
+	});
+
+	jQuery(settings.inputClass,tmp).autocomplete(settings.urlLookup,settings.acOptions);
+	jQuery(settings.inputClass,tmp).result(function(e,d,f){
+		var f = settings.foundClass.replace(/\./,'');
+		var d = String(d).split(' (');
+		var un = d[1].substr(0, d[1].length-1);
+		
+		/* Don't add the same user multiple times */
+		if( 0 === jQuery(settings.inputClass).siblings('#un-' + un).length ) {		
+			var ln = '#link-' + un;
+			var l = jQuery(ln).attr('href');
+			var v = '<li class="'+f+'" id="un-'+un+'"><span><a href="'+l+'">'+d[0]+'</a></span> <span class="p">X</span></li>';
+			
+			var x = jQuery(settings.inputClass,tmp).before(v);
+			jQuery('#send-to-usernames').addClass(un);
+				
+			jQuery('.p',x[0].previousSibling).click(function(){
+				acfb.removeFind(this);
+			});
+		} 
+			
+		jQuery(settings.inputClass,tmp).val('');
+
+	});
+
+	jQuery(settings.inputClass,tmp).focus();
+	return acfb;
+}
diff --git a/wp-content/plugins/buddypress/bp-core/deprecated/js/autocomplete/jquery.autocompletefb.min.js b/wp-content/plugins/buddypress/bp-core/deprecated/js/autocomplete/jquery.autocompletefb.min.js
new file mode 100644
index 000000000..bcf4f6f04
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-core/deprecated/js/autocomplete/jquery.autocompletefb.min.js
@@ -0,0 +1,2 @@
+/*! buddypress - v2.1.0 - 2014-10-06 9:39:07 PM UTC - https://wordpress.org/plugins/buddypress/ */
+jQuery.fn.autoCompletefb=function(a){var b=this,c={ul:b,urlLookup:[""],acOptions:{},foundClass:".friend-tab",inputClass:".send-to-input"};a&&jQuery.extend(c,a);var d={params:c,removeFind:function(a){return d.removeUsername(a),jQuery(a).unbind("click").parent().remove(),jQuery(c.inputClass,b).focus(),b.acfb},removeUsername:function(a){var b=a.parentNode.id.substr(a.parentNode.id.indexOf("-")+1);jQuery("#send-to-usernames").removeClass(b)}};return jQuery(c.foundClass+" img.p").click(function(){d.removeFind(this)}),jQuery(c.inputClass,b).autocomplete(c.urlLookup,c.acOptions),jQuery(c.inputClass,b).result(function(a,e,f){var f=c.foundClass.replace(/\./,""),e=String(e).split(" ("),g=e[1].substr(0,e[1].length-1);if(0===jQuery(c.inputClass).siblings("#un-"+g).length){var h="#link-"+g,i=jQuery(h).attr("href"),j='<li class="'+f+'" id="un-'+g+'"><span><a href="'+i+'">'+e[0]+'</a></span> <span class="p">X</span></li>',k=jQuery(c.inputClass,b).before(j);jQuery("#send-to-usernames").addClass(g),jQuery(".p",k[0].previousSibling).click(function(){d.removeFind(this)})}jQuery(c.inputClass,b).val("")}),jQuery(c.inputClass,b).focus(),d};
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-core/deprecated/js/autocomplete/jquery.bgiframe.js b/wp-content/plugins/buddypress/bp-core/deprecated/js/autocomplete/jquery.bgiframe.js
new file mode 100644
index 000000000..ef2a9e218
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-core/deprecated/js/autocomplete/jquery.bgiframe.js
@@ -0,0 +1,39 @@
+/*! Copyright (c) 2010 Brandon Aaron (http://brandonaaron.net)
+ * Licensed under the MIT License (license.bgiframe.txt).
+ *
+ * Version 2.1.2
+ */
+
+(function($){
+
+$.fn.bgiframe = ($.browser.msie && /msie 6\.0/i.test(navigator.userAgent) ? function(s) {
+    s = $.extend({
+        top     : 'auto', // auto == .currentStyle.borderTopWidth
+        left    : 'auto', // auto == .currentStyle.borderLeftWidth
+        width   : 'auto', // auto == offsetWidth
+        height  : 'auto', // auto == offsetHeight
+        opacity : true,
+        src     : 'javascript:false;'
+    }, s);
+    var html = '<iframe class="bgiframe"frameborder="0"tabindex="-1"src="'+s.src+'"'+
+                   'style="display:block;position:absolute;z-index:-1;'+
+                       (s.opacity !== false?'filter:Alpha(Opacity=\'0\');':'')+
+                       'top:'+(s.top=='auto'?'expression(((parseInt(this.parentNode.currentStyle.borderTopWidth)||0)*-1)+\'px\')':prop(s.top))+';'+
+                       'left:'+(s.left=='auto'?'expression(((parseInt(this.parentNode.currentStyle.borderLeftWidth)||0)*-1)+\'px\')':prop(s.left))+';'+
+                       'width:'+(s.width=='auto'?'expression(this.parentNode.offsetWidth+\'px\')':prop(s.width))+';'+
+                       'height:'+(s.height=='auto'?'expression(this.parentNode.offsetHeight+\'px\')':prop(s.height))+';'+
+                '"/>';
+    return this.each(function() {
+        if ( $(this).children('iframe.bgiframe').length === 0 )
+            this.insertBefore( document.createElement(html), this.firstChild );
+    });
+} : function() { return this; });
+
+// old alias
+$.fn.bgIframe = $.fn.bgiframe;
+
+function prop(n) {
+    return n && n.constructor === Number ? n + 'px' : n;
+}
+
+})(jQuery);
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-core/deprecated/js/autocomplete/jquery.bgiframe.min.js b/wp-content/plugins/buddypress/bp-core/deprecated/js/autocomplete/jquery.bgiframe.min.js
new file mode 100644
index 000000000..cb5bf51b7
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-core/deprecated/js/autocomplete/jquery.bgiframe.min.js
@@ -0,0 +1,2 @@
+/*! buddypress - v2.1.0 - 2014-10-06 9:39:07 PM UTC - https://wordpress.org/plugins/buddypress/ */
+!function(a){function b(a){return a&&a.constructor===Number?a+"px":a}a.fn.bgiframe=a.browser.msie&&/msie 6\.0/i.test(navigator.userAgent)?function(c){c=a.extend({top:"auto",left:"auto",width:"auto",height:"auto",opacity:!0,src:"javascript:false;"},c);var d='<iframe class="bgiframe"frameborder="0"tabindex="-1"src="'+c.src+'"style="display:block;position:absolute;z-index:-1;'+(c.opacity!==!1?"filter:Alpha(Opacity='0');":"")+"top:"+("auto"==c.top?"expression(((parseInt(this.parentNode.currentStyle.borderTopWidth)||0)*-1)+'px')":b(c.top))+";left:"+("auto"==c.left?"expression(((parseInt(this.parentNode.currentStyle.borderLeftWidth)||0)*-1)+'px')":b(c.left))+";width:"+("auto"==c.width?"expression(this.parentNode.offsetWidth+'px')":b(c.width))+";height:"+("auto"==c.height?"expression(this.parentNode.offsetHeight+'px')":b(c.height))+';"/>';return this.each(function(){0===a(this).children("iframe.bgiframe").length&&this.insertBefore(document.createElement(d),this.firstChild)})}:function(){return this},a.fn.bgIframe=a.fn.bgiframe}(jQuery);
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-core/deprecated/js/autocomplete/jquery.dimensions.js b/wp-content/plugins/buddypress/bp-core/deprecated/js/autocomplete/jquery.dimensions.js
new file mode 100644
index 000000000..544c918b5
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-core/deprecated/js/autocomplete/jquery.dimensions.js
@@ -0,0 +1,117 @@
+/*!
+ * Copyright (c) 2007 Paul Bakaus (paul.bakaus@googlemail.com) and Brandon Aaron (brandon.aaron@gmail.com || http://brandonaaron.net)
+ * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
+ * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
+ *
+ * $LastChangedDate: 2007-09-11 05:38:31 +0300 (Вт, 11 сен 2007) $
+ * $Rev: 3238 $
+ *
+ * Version: @VERSION
+ *
+ * Requires: jQuery 1.2+
+ */
+
+(function($){
+
+$.dimensions = {
+	version: '@VERSION'
+};
+
+// Create innerHeight, innerWidth, outerHeight and outerWidth methods
+$.each( [ 'Height', 'Width' ], function(i, name){
+
+	// innerHeight and innerWidth
+	$.fn[ 'inner' + name ] = function() {
+		if (!this[0]) return;
+
+		var torl = name == 'Height' ? 'Top'    : 'Left',  // top or left
+		    borr = name == 'Height' ? 'Bottom' : 'Right'; // bottom or right
+
+		return this[ name.toLowerCase() ]() + num(this, 'padding' + torl) + num(this, 'padding' + borr);
+	};
+
+	// outerHeight and outerWidth
+	$.fn[ 'outer' + name ] = function(options) {
+		if (!this[0]) return;
+
+		var torl = name == 'Height' ? 'Top'    : 'Left',  // top or left
+		    borr = name == 'Height' ? 'Bottom' : 'Right'; // bottom or right
+
+		options = $.extend({ margin: false }, options || {});
+
+		return this[ name.toLowerCase() ]()
+				+ num(this, 'border' + torl + 'Width') + num(this, 'border' + borr + 'Width')
+				+ num(this, 'padding' + torl) + num(this, 'padding' + borr)
+				+ (options.margin ? (num(this, 'margin' + torl) + num(this, 'margin' + borr)) : 0);
+	};
+});
+
+// Create scrollLeft and scrollTop methods
+$.each( ['Left', 'Top'], function(i, name) {
+	$.fn[ 'scroll' + name ] = function(val) {
+		if (!this[0]) return;
+
+		return val != undefined ?
+
+			// Set the scroll offset
+			this.each(function() {
+				this == window || this == document ?
+					window.scrollTo(
+						name == 'Left' ? val : $(window)[ 'scrollLeft' ](),
+						name == 'Top'  ? val : $(window)[ 'scrollTop'  ]()
+					) :
+					this[ 'scroll' + name ] = val;
+			}) :
+
+			// Return the scroll offset
+			this[0] == window || this[0] == document ?
+				self[ (name == 'Left' ? 'pageXOffset' : 'pageYOffset') ] ||
+					$.boxModel && document.documentElement[ 'scroll' + name ] ||
+					document.body[ 'scroll' + name ] :
+				this[0][ 'scroll' + name ];
+	};
+});
+
+$.fn.extend({
+	position: function() {
+		var left = 0, top = 0, elem = this[0], offset, parentOffset, offsetParent, results;
+
+		if (elem) {
+			// Get *real* offsetParent
+			offsetParent = this.offsetParent();
+
+			// Get correct offsets
+			offset       = this.offset();
+			parentOffset = offsetParent.offset();
+
+			// Subtract element margins
+			offset.top  -= num(elem, 'marginTop');
+			offset.left -= num(elem, 'marginLeft');
+
+			// Add offsetParent borders
+			parentOffset.top  += num(offsetParent, 'borderTopWidth');
+			parentOffset.left += num(offsetParent, 'borderLeftWidth');
+
+			// Subtract the two offsets
+			results = {
+				top:  offset.top  - parentOffset.top,
+				left: offset.left - parentOffset.left
+			};
+		}
+
+		return results;
+	},
+
+	offsetParent: function() {
+		var offsetParent = this[0].offsetParent;
+		while ( offsetParent && (!/^body|html$/i.test(offsetParent.tagName) && $.css(offsetParent, 'position') == 'static') )
+			offsetParent = offsetParent.offsetParent;
+		return $(offsetParent);
+	}
+});
+
+var num = function(el, prop) {
+	return parseInt($.css(el.jquery?el[0]:el,prop))||0;
+};
+
+})(jQuery);
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-core/deprecated/js/autocomplete/jquery.dimensions.min.js b/wp-content/plugins/buddypress/bp-core/deprecated/js/autocomplete/jquery.dimensions.min.js
new file mode 100644
index 000000000..9f60cabca
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-core/deprecated/js/autocomplete/jquery.dimensions.min.js
@@ -0,0 +1,2 @@
+/*! buddypress - v2.1.0 - 2014-10-06 9:39:07 PM UTC - https://wordpress.org/plugins/buddypress/ */
+!function(a){a.dimensions={version:"@VERSION"},a.each(["Height","Width"],function(c,d){a.fn["inner"+d]=function(){if(this[0]){var a="Height"==d?"Top":"Left",c="Height"==d?"Bottom":"Right";return this[d.toLowerCase()]()+b(this,"padding"+a)+b(this,"padding"+c)}},a.fn["outer"+d]=function(c){if(this[0]){var e="Height"==d?"Top":"Left",f="Height"==d?"Bottom":"Right";return c=a.extend({margin:!1},c||{}),this[d.toLowerCase()]()+b(this,"border"+e+"Width")+b(this,"border"+f+"Width")+b(this,"padding"+e)+b(this,"padding"+f)+(c.margin?b(this,"margin"+e)+b(this,"margin"+f):0)}}}),a.each(["Left","Top"],function(b,c){a.fn["scroll"+c]=function(b){return this[0]?void 0!=b?this.each(function(){this==window||this==document?window.scrollTo("Left"==c?b:a(window).scrollLeft(),"Top"==c?b:a(window).scrollTop()):this["scroll"+c]=b}):this[0]==window||this[0]==document?self["Left"==c?"pageXOffset":"pageYOffset"]||a.boxModel&&document.documentElement["scroll"+c]||document.body["scroll"+c]:this[0]["scroll"+c]:void 0}}),a.fn.extend({position:function(){var a,c,d,e,f=this[0];return f&&(d=this.offsetParent(),a=this.offset(),c=d.offset(),a.top-=b(f,"marginTop"),a.left-=b(f,"marginLeft"),c.top+=b(d,"borderTopWidth"),c.left+=b(d,"borderLeftWidth"),e={top:a.top-c.top,left:a.left-c.left}),e},offsetParent:function(){for(var b=this[0].offsetParent;b&&!/^body|html$/i.test(b.tagName)&&"static"==a.css(b,"position");)b=b.offsetParent;return a(b)}});var b=function(b,c){return parseInt(a.css(b.jquery?b[0]:b,c))||0}}(jQuery);
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-core/deprecated/js/autocomplete/license.bgiframe.txt b/wp-content/plugins/buddypress/bp-core/deprecated/js/autocomplete/license.bgiframe.txt
new file mode 100644
index 000000000..74c597096
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-core/deprecated/js/autocomplete/license.bgiframe.txt
@@ -0,0 +1,20 @@
+Copyright 2010, Brandon Aaron (http://brandonaaron.net/)
+ 
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+ 
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+ 
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-core/deprecated/js/jquery-scroll-to.js b/wp-content/plugins/buddypress/bp-core/deprecated/js/jquery-scroll-to.js
new file mode 100644
index 000000000..ebcff5755
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-core/deprecated/js/jquery-scroll-to.js
@@ -0,0 +1,208 @@
+/* jshint undef: false */
+/* jshint -W065 */
+
+/*!
+ * jQuery.ScrollTo
+ * Copyright (c) 2007-2014 Ariel Flesler - aflesler<a>gmail<d>com | http://flesler.blogspot.com
+ * Licensed under MIT
+ * http://flesler.blogspot.com/2007/10/jqueryscrollto.html
+ * @projectDescription Easy element scrolling using jQuery.
+ * @author Ariel Flesler
+ * @version 1.4.12
+ */
+
+(function(factory) {
+	// AMD
+	if (typeof define === 'function' && define.amd) {
+		define(['jquery'], factory);
+	// CommonJS
+	} else if (typeof exports === 'object') {
+		factory(require('jquery'));
+	// Browser globals
+	} else {
+		factory(jQuery);
+	}
+}(function($) {
+
+	var $scrollTo = $.scrollTo = function(target, duration, settings) {
+		return $(window).scrollTo(target, duration, settings);
+	};
+
+	$scrollTo.defaults = {
+		axis: 'xy',
+		duration: parseFloat($.fn.jquery) >= 1.3 ? 0 : 1,
+		limit: true
+	};
+
+	// Returns the element that needs to be animated to scroll the window.
+	// Kept for backwards compatibility (specially for localScroll & serialScroll)
+	$scrollTo.window = function() {
+		return $(window)._scrollable();
+	};
+
+	// Hack, hack, hack :)
+	// Returns the real elements to scroll (supports window/iframes, documents and regular nodes)
+	$.fn._scrollable = function() {
+		return this.map(function() {
+			var elem = this,
+					isWin = !elem.nodeName || $.inArray(elem.nodeName.toLowerCase(), ['iframe', '#document', 'html', 'body']) !== -1;
+
+			if (!isWin) {
+				return elem;
+			}
+
+			var doc = (elem.contentWindow || elem).document || elem.ownerDocument || elem;
+
+			return /webkit/i.test(navigator.userAgent) || doc.compatMode === 'BackCompat' ?
+					doc.body :
+					doc.documentElement;
+		});
+	};
+
+	$.fn.scrollTo = function(target, duration, settings) {
+		if (typeof duration === 'object') {
+			settings = duration;
+			duration = 0;
+		}
+		if (typeof settings === 'function') {
+			settings = {onAfter: settings};
+		}
+
+		if (target === 'max') {
+			target = 9e9;
+		}
+
+		settings = $.extend({}, $scrollTo.defaults, settings);
+		// Speed is still recognized for backwards compatibility
+		duration = duration || settings.duration;
+		// Make sure the settings are given right
+		settings.queue = settings.queue && settings.axis.length > 1;
+
+		// Let's keep the overall duration
+		if (settings.queue) {
+			duration /= 2;
+		}
+
+		settings.offset = both(settings.offset);
+		settings.over = both(settings.over);
+
+		return this._scrollable().each(function() {
+
+			// Null target yields nothing, just like jQuery does
+			if (target === null) {
+				return;
+			}
+
+			var elem = this,
+					$elem = $(elem),
+					targ = target, toff, attr = {},
+					win = $elem.is('html,body');
+
+			switch (typeof targ) {
+				// A number will pass the regex
+				case 'number':
+				case 'string':
+					if (/^([+-]=?)?\d+(\.\d+)?(px|%)?$/.test(targ)) {
+						targ = both(targ);
+						// We are done
+						break;
+					}
+					// Relative/Absolute selector, no break!
+					targ = win ? $(targ) : $(targ, this);
+					if (!targ.length) {
+						return;
+					}
+					/* falls through */
+				case 'object':
+					// DOMElement / jQuery
+					if (targ.is || targ.style) {
+						// Get the real position of the target
+						toff = (targ = $(targ)).offset();
+					}
+			}
+
+			var offset = $.isFunction(settings.offset) && settings.offset(elem, targ) || settings.offset;
+
+			$.each(settings.axis.split(''), function(i, axis) {
+				var Pos = axis === 'x' ? 'Left' : 'Top',
+						pos = Pos.toLowerCase(),
+						key = 'scroll' + Pos,
+						old = elem[key],
+						max = $scrollTo.max(elem, axis);
+
+				if (toff) {// jQuery / DOMElement
+					attr[key] = toff[pos] + (win ? 0 : old - $elem.offset()[pos]);
+
+					// If it's a dom element, reduce the margin
+					if (settings.margin) {
+						attr[key] -= parseInt(targ.css('margin' + Pos)) || 0;
+						attr[key] -= parseInt(targ.css('border' + Pos + 'Width')) || 0;
+					}
+
+					attr[key] += offset[pos] || 0;
+
+					// Scroll to a fraction of its width/height
+					if (settings.over[pos]) {
+						attr[key] += targ[axis === 'x' ? 'width' : 'height']() * settings.over[pos];
+					}
+				} else {
+					var val = targ[pos];
+					// Handle percentage values
+					attr[key] = val.slice && val.slice(-1) === '%' ?
+							parseFloat(val) / 100 * max
+							: val;
+				}
+
+				// Number or 'number'
+				if (settings.limit && /^\d+$/.test(attr[key])) {
+					// Check the limits
+					attr[key] = attr[key] <= 0 ? 0 : Math.min(attr[key], max);
+				}
+
+				// Queueing axes
+				if (!i && settings.queue) {
+					// Don't waste time animating, if there's no need.
+					if (old !== attr[key]) {
+						// Intermediate animation
+						animate(settings.onAfterFirst);
+					}
+					// Don't animate this axis again in the next iteration.
+					delete attr[key];
+				}
+			});
+
+			animate(settings.onAfter);
+
+			function animate(callback) {
+				$elem.animate(attr, duration, settings.easing, callback && function() {
+					callback.call(this, targ, settings);
+				});
+			}
+
+		}).end();
+	};
+
+	// Max scrolling position, works on quirks mode
+	// It only fails (not too badly) on IE, quirks mode.
+	$scrollTo.max = function(elem, axis) {
+		var Dim = axis === 'x' ? 'Width' : 'Height',
+				scroll = 'scroll' + Dim;
+
+		if (!$(elem).is('html,body')) {
+			return elem[scroll] - $(elem)[Dim.toLowerCase()]();
+		}
+
+		var size = 'client' + Dim,
+				html = elem.ownerDocument.documentElement,
+				body = elem.ownerDocument.body;
+
+		return Math.max(html[scroll], body[scroll]) - Math.min(html[size], body[size]);
+	};
+
+	function both(val) {
+		return $.isFunction(val) || typeof val === 'object' ? val : {top: val, left: val};
+	}
+
+	// AMD requirement
+	return $scrollTo;
+}));
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-core/deprecated/js/jquery-scroll-to.min.js b/wp-content/plugins/buddypress/bp-core/deprecated/js/jquery-scroll-to.min.js
new file mode 100644
index 000000000..a4b8c20a8
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-core/deprecated/js/jquery-scroll-to.min.js
@@ -0,0 +1,2 @@
+/*! buddypress - v2.1.0 - 2014-10-06 9:39:07 PM UTC - https://wordpress.org/plugins/buddypress/ */
+!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a("object"==typeof exports?require("jquery"):jQuery)}(function(a){function b(b){return a.isFunction(b)||"object"==typeof b?b:{top:b,left:b}}var c=a.scrollTo=function(b,c,d){return a(window).scrollTo(b,c,d)};return c.defaults={axis:"xy",duration:parseFloat(a.fn.jquery)>=1.3?0:1,limit:!0},c.window=function(){return a(window)._scrollable()},a.fn._scrollable=function(){return this.map(function(){var b=this,c=!b.nodeName||-1!==a.inArray(b.nodeName.toLowerCase(),["iframe","#document","html","body"]);if(!c)return b;var d=(b.contentWindow||b).document||b.ownerDocument||b;return/webkit/i.test(navigator.userAgent)||"BackCompat"===d.compatMode?d.body:d.documentElement})},a.fn.scrollTo=function(d,e,f){return"object"==typeof e&&(f=e,e=0),"function"==typeof f&&(f={onAfter:f}),"max"===d&&(d=9e9),f=a.extend({},c.defaults,f),e=e||f.duration,f.queue=f.queue&&f.axis.length>1,f.queue&&(e/=2),f.offset=b(f.offset),f.over=b(f.over),this._scrollable().each(function(){function g(a){j.animate(l,e,f.easing,a&&function(){a.call(this,k,f)})}if(null!==d){var h,i=this,j=a(i),k=d,l={},m=j.is("html,body");switch(typeof k){case"number":case"string":if(/^([+-]=?)?\d+(\.\d+)?(px|%)?$/.test(k)){k=b(k);break}if(k=m?a(k):a(k,this),!k.length)return;case"object":(k.is||k.style)&&(h=(k=a(k)).offset())}var n=a.isFunction(f.offset)&&f.offset(i,k)||f.offset;a.each(f.axis.split(""),function(a,b){var d="x"===b?"Left":"Top",e=d.toLowerCase(),o="scroll"+d,p=i[o],q=c.max(i,b);if(h)l[o]=h[e]+(m?0:p-j.offset()[e]),f.margin&&(l[o]-=parseInt(k.css("margin"+d))||0,l[o]-=parseInt(k.css("border"+d+"Width"))||0),l[o]+=n[e]||0,f.over[e]&&(l[o]+=k["x"===b?"width":"height"]()*f.over[e]);else{var r=k[e];l[o]=r.slice&&"%"===r.slice(-1)?parseFloat(r)/100*q:r}f.limit&&/^\d+$/.test(l[o])&&(l[o]=l[o]<=0?0:Math.min(l[o],q)),!a&&f.queue&&(p!==l[o]&&g(f.onAfterFirst),delete l[o])}),g(f.onAfter)}}).end()},c.max=function(b,c){var d="x"===c?"Width":"Height",e="scroll"+d;if(!a(b).is("html,body"))return b[e]-a(b)[d.toLowerCase()]();var f="client"+d,g=b.ownerDocument.documentElement,h=b.ownerDocument.body;return Math.max(g[e],h[e])-Math.min(g[f],h[f])},c});
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-core/images/60pc_black.png b/wp-content/plugins/buddypress/bp-core/images/60pc_black.png
index ce7c1c7330326b32e8767f4110d6527886a1deea..d5d91f0ed30d467abea6f9940610b883fe25e127 100644
GIT binary patch
delta 48
zcmd0GnINgn!oa|=RfdO&fq{YB)5S4_LpJ%r9A*ZFjSS1S2X1s`U|?YIboFyt=akR{
E0RATn;s5{u

delta 89
zcmZ?Cogf*)#=yWJFM6btfq_A?#5JNMI6tkVJh3R1!7(L2DOJHUH!(dmC^a#qvhZZ8
t4FdxMzo(01NX4zBM^B#2VHQYWVEDtZYsbIk0SpWb44$rjF6*2UngG_?9l!tp

diff --git a/wp-content/plugins/buddypress/bp-core/images/Jcrop.gif b/wp-content/plugins/buddypress/bp-core/images/Jcrop.gif
index 72ea7ccb5321d5384d70437cfaac73011237901e..9e0ee2da3cafe22775ea1eea979351da936d630e 100644
GIT binary patch
delta 116
zcmX@fbeKuN-P6s&GLeIUgW&@M!>U!QCW>h>_b_u#yeQA)A~!KbnW-spVy6;QbK=Cc
zN=$;16EDg$^YAU4n5t;%(~vNI_Nxm?7q&!X)-GgVQ2fcl%EiFIpu@nxzyLCkfr-DT
VF=1lW&Ra<thaxssuV7%X1^^}XBqIO-

delta 121
zcmX@ibdpKT-P6s&GLeIUgJB{A!>U!Q{{R2az`!t3K#OS#>qHv`rWU=4amq|BNfVou
zm|Bx2E>~hw)SPH5&n&{XXkxsg>6C_q>9b#5NV>2kBC~c81B2pE7FI3>1_m7l1_lO@
asSHf~QyLQ{Rqec$lyN9xWAzFK25SHvpe9lP

diff --git a/wp-content/plugins/buddypress/bp-core/images/admin-menu-arrow.gif b/wp-content/plugins/buddypress/bp-core/images/admin-menu-arrow.gif
index ba8eab77cfc9761426220d1caf4510cfea3affca..bad6616775819a2fc3efd5e3a92293dcedf0be2b 100644
GIT binary patch
delta 32
ocmXpu<Z<_Ov#?BLXJBRcz%Y?Vg4cnGqlJIr?&~KeX)#y>0C;H#rT_o{

delta 34
pcmXps=5hCQv#?BLXJBP$V4TP!!Oy_N)xzH>nZ+wPXCVWFH2`l62CD!7

diff --git a/wp-content/plugins/buddypress/bp-core/images/mystery-man-50.jpg b/wp-content/plugins/buddypress/bp-core/images/mystery-man-50.jpg
index e0e8679fe4542ae3dba2795d0d1cda3515875ff3..ba292685e2cd3ad64b27cabbd2c455aebe6db89b 100644
GIT binary patch
delta 417
zcmeC-KE@*P|Hl6Z3<6$mo^A|`j0_Bn42%p6|8FxmPtId@WC1hQGl!>2F)%VPGlCQ_
zzyJ#?8#5#O|04_r0t`%yOe`$SZ0t}uMkWSk7FIz;Lm^?uK&8Y&HY4MpqJySRjSDwk
zeE9zeg9wU2U`-&=$?+`8_4y0#FJbW&?PGTp2-zc3%C~3FAMK~ho_XvzxF%bXW6tsy
zC;#R$YYVSEyVpDFtke2Ed)<zdC>1qyba1Nkab3UmaNA?~=kJyML%R%0EsZ8PzH#9_
z<8jU0?OoH=l$8845(1p>_8xinMv!}g2eZwTw0Z}HfNB@<`40URE6-oHRW+%fTwn6N
zTsQP!%pR@w0`^KNCM5;cZ~UzbU3c$@Q@VA@d4s&+Z?EjEnBQF?b!A+&oY!(0xR_R)
z;AQyK_{PPdvE$*E_nFfI#CG*FfB%%PIW;vUX^l~;r9hRSxv^p2MUnLtS5mZAB)>8-
p&{k4n*`xoFyMFbXw0%lUN(yTAxAePtoL}ZYadBAM(INl;CIGo4mAC)^

literal 1420
zcmex=<Nrej3D=6uGzJDwPb~%x1_b#3hC$G!G&#GHfsuiQfq}t@f#Lr{X3dO}k^(Dz
z{k&qm#FYG`RK4W<T>Xl~0)0b01APV?`-+0Z<m}WEg{0K<%sgAA_q+EiDP*SDDutW+
z8u%7Cr)Fe&R28KLSNVk`S7j$#rYPClDcDq4Rpb`rrj{fsROII56<bx<DuE5R$}6@4
z3F|8<fR&VF+bTJNY*mQx4N!2-FG^J~)icmdHZU_#Ff-IMG&V6eH`h@xGB7mIH!#vS
zG}1LRw=y=eGB8kp0wp^Io1&C7s~{IQs9i-VX|_sGPnDOK>y;bp<rk&v8(Lagg3K^7
z(k)6!(=D#dD@m--%_~-hnc$LIoLrPyP?DLSrvNfBF)6>a#8ycOYHUSr0o+)uVTGj7
z*B8Ii++0uqfJ3IZBq$Z(UaSTehg24%>IbD3=a&{Grv{~_DTAykuyQU+O)SYT3dzsU
zfrVl~Mt(_taYlZDf^)E`LU?9gN`84UShcUOm1kaYNn&1ds;7&sQblfoUS?*Bm6M~R
zxs#iVsfD4XrJ<pVn}w^PqnnYXlc|xBnWd|l8%(cDesXDUYF-IUZwf-M8BV>Rgpga{
z>ucqbT9jFqn&MWJpQ`}&uvI2*w;1Cz52`l>w_8kb>eaVXu+axaD^fJWgo0e$KumCo
z1f@<p1w^t>%}cRWDpIny`~QxC51dpPQVuXMFfjhV&CtTY!3F{xY-}7n9PAuCd|VtH
zTzmq&ynMX80)jkzyu5rog8V|lBEmxa5)x8U5)#TvN=nM=aKOmP!NJMJ$<4{h&Bx8l
z%_qpm$Hylq3^qVmLXe-IpI=ZyOk6}nL|hD{T}nz(Q9)4=u3!EC0R}-11|tR|W=16j
zCP7AKLB{__7;+dG8JHOv84-D(frXWgnUNhu2rMhWz{JSJ!pzFf3g$8}FfuVPvj{30
zvN{GP79JE*5^h|$(I}{h?czfxV^cw7Bf%Q}-(uilW@KOzWENzwXZWS#l0D&i3yZI4
z-*H!gkUer%?e_liT3=2FtHk77Go8@l@A<>1ZkEHTBd?3|gRX53Sp8XFaG?yxoCQis
zOrE!!wtn4_Ym@x#`-#g}lX_(Rc$NrM3NjZ9nf6}Xy<lskr1VcV7N*MehSs}ToSq0V
z9A}l7pCF)Nuf+ZOg7P!1!Z*h?eO2z?wY_^fv>=>cYvC2fb8ZbC9h|kB-)02ny%RqY
zZRJtI{L1#ytXtF97kc$yJLsQid3FJ#L#PDf1X+b@K>>w4>s;$wsZ&_jEk5z*m$~QE
z)Rd$(2B{VT6@uo*hWjpxtgp#35DhVWD=8s5QIIL_`oGrwckiU_Q({t5P^<r>|90WG
P?MGZ3mUeW=|Gx<Uf}x*>

diff --git a/wp-content/plugins/buddypress/bp-core/images/mystery-man.jpg b/wp-content/plugins/buddypress/bp-core/images/mystery-man.jpg
index 61917a7a6a94312c9709e6c9392d4ba3e42b5895..c5989089a35d93e209703b8b60691f8efa02eb9a 100644
GIT binary patch
delta 1128
zcmaFD+r>3ObYjr_dT9nm1}0`kMg|06V`pLIU}FA%guzOHfr*KciHV(sgM}TUfRTxr
zg;kJEkzL5pF)*=ExN+h_5hdlIjRzlo5H&L1B<2*H+%)Op|04_{C}x5+gG2?9ZDL@k
zXJBCXe~W>KnUR4>kXewyp5b)^SS=dCzfMp0=1$Rzu0^|E%ZC{>-QC81LTo$F7vFvt
z#k!69`Pt9EWIf%Y{OY>dU(2e=YjoAweY^VfR3%>4FOTYwxyLu@%;iE;jvY^vE>9G{
zo0}Ei$@$2y^TTJwdhIPUYx(}&Pd2+-^ym7+C#-HfJ%4z5jrGpttXk^(b?;Kna)}2p
zw{WjsypOM~dHHc;CC*opf_LBTyefWE^!eit@3j3`E+wxibQ3j>&046RZTe{O`TXje
z)u%szv~uj1{m@$Dz3kMf1=AM#M6b%;=KaoI{qBRmPo*{LcX%H2Jm&f4@>_Rbk#f%}
zpOSrAdk@)0eM(yIS+V!ZzRdj<f&m~y7#J9Y=e1v|@t?RWdW~o9e})QiLDw(&D~|g;
zdgHhImiX6|`DfR~n{;0QDP|1*a%%cVU(2`WZ=9b0r#oS3Rp^zld{M6zdmnd)WK~yu
zp8W6a-UH4Jknm?<s9JY2G$ozW;+(F<$+G2-;_oOPnflSJH_U0$FBhTK5Ajdu|FgUL
zOXgqhkK~vuCc1uNFJFb-v|p_yR1~(JZGtQZkFK)SU3a$K?~ZI|J6UgPo_j5R`QZy^
z85p})ruj4ToqpJx7xQRmu$NyDvv{ZJD~n>!-A2!5cir0cz5co7cm4Zi&+VS3+?+i*
z&-K#l+c|fh>x<ocbNgetz$>YLOEuG-B2MkSVi=VfwpYHs+av+xK?Vi})w}W^q94T^
zpEzmO<rR}&|7X~#ziYq!75@3`ANb;hPsS%#?5e7Hn?2{xqWyN~gYI3lDE52!OSB^5
z;@Y=c*3>-L5C83UXw|}c*TQu>R)n)GmN=R-DfYxSkl}3GqaMDs@6h-bdE>(N)UW9`
zEq-}#6&08GQa|;uU!=(PsmtI0jor7kE+~HfgV^WYS*>4B?N(YIbGc`+>aNW129|S#
z`6g6o|1qDkX=Bp8xh31Yx8L-Bw_l(C-Uo1UF#59A>}_)3@k0yqb1&BiMt{>6`!nh8
z@4l8xCc8{x&3bey-i8LgT7K_-bzSaf?Y{Ocsi{9_EqT0a{Tr>i{5kugYa%mYS%k5B
zRpyqgU$s9f1z!i3#Kd=f$UbYAZksI?yGw8R<ktGHnzQ?U*Bia7`?}f6W{p+S#gNqY
zRpGL`?k8r)OYDF5lQA+5WYpeYHU}bPlpD6)3OjmN{qeQx_0x__IC3c?;#QcbX3pwm
z0=F+|O2WdOf#bV;=Ig+Rx^B|>TCcxdtmCtf{4+W3lT-35ku^O$v*w#xEtT)e;LBlP
H{C^Vw+12X?

literal 1764
zcmex=<NpH&0WUXCHwH#V1_nk3Mh1re{}`;DgIpa${DZ6%(o=M^3R2S*$_(`k6f{bU
zGxO3FJiXi%yaHU^70S$vG<6gTOA~W4ODYv?6)X+7{@-SBW?*Jw0wHE*W)@~<7FG^c
zRu&dkE_QY{4jwKZ9&RpfZeBhi0bV{qK5lLSF#$ng5m8Z59)58NF%bzN5m6D4A&kr{
zEUYZ7oUE*zBD~zZA|!+V2N(o77#bKFm>HEAm;@P_1sVSzVUTBFU}R+k0|qEyWMXDv
zWn<^y<l_E+gkh@y0}~@NGZPCl$khxCjJ1qR%nU4otU`*0j%>n#iR?;+B1Vl97jh^&
zZ9FI%bn%0VaZ*teCzqJGgrt<Jn!1LjmWipExrL>bvx}>nyN9P&a7buactm7Wa!P7i
zdPZheaY<=ec|~Pab4zPmdq-#2q{&mJPMbbs=B!1Fmn>bje8tLDn>KIRx^4T8ox2Vl
zK63Qf@e?OcUAlbb>b2`PZr*zM=<$=M&z`?{`Re1R&tJZN`~KtSFOa_&8JNMo0ud08
zq4`UYfr*icg@u`got1@!fsv`4fsu(>kcCyzkWI)jkUg<bSjni7L&Ry~!i@(xm5qZw
zh$a<X<PuXcd8qmk<TbF*i1SzzSw4e%4B@X^3_Q$?3`~N|f(-TyzaDjIEMOuEYeh##
zuFq3$;<%N$#5z<UWwL`{VBFe=^INWcQ1V}6K40_sn~U27>y{MxU+!O99v0=>H)~;T
zuEKWaf0f6?8tn2H?VGgca;_<>c4;>6p?Q~%N&mbq{K&uMTY1OjOx<smzkcd@_U>Qt
zFYXHClakQx-`u@M@4T~D%#wU;k&<^cu7OKq5i0(+zP*mmm)$@5bPIdHj+i-pNx>K0
z_pg6?YtQ8av%Fr*X>4je_G03m>v9V#k3TA~m->E+L1R%D7(e|}{*dF3_p&V$6{K3U
zeEh67{CoJ#b}#?qIH^;CT^qCxJZQcWemV5veW5Q?FZ~I%biFNms`G%{a>e}t{*N7G
z)`|o=up(jE^9MihcfK=Xb6uSL@3+@Ctq=R#es#UPr?=%^!Q^)>^NTG0I;<~Q01xIp
z^B-%--<nl;+|IlBKLgYHi1ngBR<G#3FKXgdv~8n~yWF0Q{~0c9{1Lz|>nak!h=iFJ
zPh2!HR$}!^)`(K}YkPkml2hqFa?2!~vHg|+%Ut#k`+vwS{?D*B-u~MDHq*1tPFF6)
z+L&yzKXrj2!poLJgz<~2sJF+y>46*jD%YxRoVf3cadN?bhSzoRUb`JwMM7h}KEBa;
zGFNx$?ot_N4%S%>T0bVoH6NbkbA7UaSC6|~W%(QX^EubgZx1($yK}nGIDcBW-rHB6
zC)d`CSF{IQ|EiY#Bs)>gDQbd4Pc46aa6}11psNTHF1^qHN36!XB2Ujzs)Wb<Kf`6W
ze=q*+|69e-fAAmU?vK`-Pt>mav(NN+`gclw-2AAoZ-o!fDsO)vcr#ijT_TfT?|$$<
z*9=!7N2%jdExin(p%M&yhvviMLUPyj_AUPz1RS5nN2~0R*Zxxa%RDg7^|5^W_c$rt
zLQeCjy83I6pY`8t|N1ZV?U$2Do{ux01bp0~b?UG}^NkDaXTF3deq=uw|DpFT_v%n}
zznL4@<2Cp1s@-dUuHqLs;eZm*_NAGdv!#0XPGL4W^U$q|Kd83h<R9%9zRKRsu9p)w
zZI5vkddt4k_T+c<S)coxZy8LgJ{x#l$^MQ@?Rni_$)8PMp@)hHV|d8rgsWeEzIi8J
zVyqeb%9i6h`>da@BQ8C?SZY06^FPBir>DjJd#vS;BwWAv^_jfHmVmYCtK4?n{oU#D
z=gNPE7x7COD(6BIq}=-tpAJM+xE)C5)tWiu*E>u3W!g(t&GKQo?X{_ehvT8k@rw?t
zF`U2<Zu|JHO_rU|m0-z?$DgPC68+i#g5yv2!d1UolpY;=rhKAeX1#$cL(NTBkpTAp
FHvwnr$L;_C

diff --git a/wp-content/plugins/buddypress/bp-core/js/confirm.js b/wp-content/plugins/buddypress/bp-core/js/confirm.js
index 930b146bf..902de34ff 100644
--- a/wp-content/plugins/buddypress/bp-core/js/confirm.js
+++ b/wp-content/plugins/buddypress/bp-core/js/confirm.js
@@ -1,7 +1,12 @@
+/* jshint devel: true */
+/* global BP_Confirm */
+
 jQuery( document ).ready( function() {
 	jQuery( 'a.confirm').click( function() {
-		if ( confirm( BP_Confirm.are_you_sure ) )
-			return true; else return false;
+		if ( confirm( BP_Confirm.are_you_sure ) ) {
+			return true;
+		} else {
+			return false;
+		}
 	});
 });
-
diff --git a/wp-content/plugins/buddypress/bp-core/js/confirm.min.js b/wp-content/plugins/buddypress/bp-core/js/confirm.min.js
index d8327db1e..c2211370a 100644
--- a/wp-content/plugins/buddypress/bp-core/js/confirm.min.js
+++ b/wp-content/plugins/buddypress/bp-core/js/confirm.min.js
@@ -1 +1,2 @@
-jQuery(document).ready(function(){jQuery("a.confirm").click(function(){if(confirm(BP_Confirm.are_you_sure)){return true}else{return false}})});
\ No newline at end of file
+/*! buddypress - v2.1.0 - 2014-10-06 9:39:07 PM UTC - https://wordpress.org/plugins/buddypress/ */
+jQuery(document).ready(function(){jQuery("a.confirm").click(function(){return confirm(BP_Confirm.are_you_sure)?!0:!1})});
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-core/js/jquery-cookie.js b/wp-content/plugins/buddypress/bp-core/js/jquery-cookie.js
new file mode 100644
index 000000000..3bb4150a2
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-core/js/jquery-cookie.js
@@ -0,0 +1,120 @@
+/* jshint undef: false */
+
+/*!
+ * jQuery Cookie Plugin v1.4.1
+ * https://github.com/carhartl/jquery-cookie
+ *
+ * Copyright 2013 Klaus Hartl
+ * Released under the MIT license
+ */
+(function(factory) {
+	// AMD
+	if (typeof define === 'function' && define.amd) {
+		define(['jquery'], factory);
+	// CommonJS
+	} else if (typeof exports === 'object') {
+		factory(require('jquery'));
+	// Browser globals
+	} else {
+		factory(jQuery);
+	}
+}(function($) {
+
+	var pluses = /\+/g;
+
+	function encode(s) {
+		return config.raw ? s : encodeURIComponent(s);
+	}
+
+	function decode(s) {
+		return config.raw ? s : decodeURIComponent(s);
+	}
+
+	function stringifyCookieValue(value) {
+		return encode(config.json ? JSON.stringify(value) : String(value));
+	}
+
+	function parseCookieValue(s) {
+		if (s.indexOf('"') === 0) {
+			// This is a quoted cookie as according to RFC2068, unescape...
+			s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
+		}
+
+		try {
+			// Replace server-side written pluses with spaces.
+			// If we can't decode the cookie, ignore it, it's unusable.
+			// If we can't parse the cookie, ignore it, it's unusable.
+			s = decodeURIComponent(s.replace(pluses, ' '));
+			return config.json ? JSON.parse(s) : s;
+		} catch (e) {
+		}
+	}
+
+	function read(s, converter) {
+		var value = config.raw ? s : parseCookieValue(s);
+		return $.isFunction(converter) ? converter(value) : value;
+	}
+
+	var config = $.cookie = function(key, value, options) {
+
+		// Write
+
+		if (value !== undefined && !$.isFunction(value)) {
+			options = $.extend({}, config.defaults, options);
+
+			if (typeof options.expires === 'number') {
+				var days = options.expires, t = options.expires = new Date();
+				t.setTime(+t + days * 864e+5);
+			}
+
+			return (document.cookie = [
+				encode(key), '=', stringifyCookieValue(value),
+				options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
+				options.path ? '; path=' + options.path : '',
+				options.domain ? '; domain=' + options.domain : '',
+				options.secure ? '; secure' : ''
+			].join(''));
+		}
+
+		// Read
+
+		var result = key ? undefined : {};
+
+		// To prevent the for loop in the first place assign an empty array
+		// in case there are no cookies at all. Also prevents odd result when
+		// calling $.cookie().
+		var cookies = document.cookie ? document.cookie.split('; ') : [];
+
+		for (var i = 0, l = cookies.length; i < l; i++) {
+			var parts = cookies[i].split('=');
+			var name = decode(parts.shift());
+			var cookie = parts.join('=');
+
+			if (key && key === name) {
+				// If second argument (value) is a function it's a converter...
+				result = read(cookie, value);
+				break;
+			}
+
+			// Prevent storing a cookie that we couldn't decode.
+			if (!key && (cookie = read(cookie)) !== undefined) {
+				result[name] = cookie;
+			}
+		}
+
+		return result;
+	};
+
+	config.defaults = {};
+
+	$.removeCookie = function(key, options) {
+		if ($.cookie(key) === undefined) {
+			return false;
+		}
+
+		// Must not alter options, thus extending a fresh object...
+		$.cookie(key, '', $.extend({}, options, {expires: -1}));
+		return !$.cookie(key);
+	};
+
+}));
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-core/js/jquery-cookie.min.js b/wp-content/plugins/buddypress/bp-core/js/jquery-cookie.min.js
new file mode 100644
index 000000000..e40b8bf22
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-core/js/jquery-cookie.min.js
@@ -0,0 +1,2 @@
+/*! buddypress - v2.1.0 - 2014-10-06 9:39:07 PM UTC - https://wordpress.org/plugins/buddypress/ */
+!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a("object"==typeof exports?require("jquery"):jQuery)}(function(a){function b(a){return h.raw?a:encodeURIComponent(a)}function c(a){return h.raw?a:decodeURIComponent(a)}function d(a){return b(h.json?JSON.stringify(a):String(a))}function e(a){0===a.indexOf('"')&&(a=a.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\"));try{return a=decodeURIComponent(a.replace(g," ")),h.json?JSON.parse(a):a}catch(b){}}function f(b,c){var d=h.raw?b:e(b);return a.isFunction(c)?c(d):d}var g=/\+/g,h=a.cookie=function(e,g,i){if(void 0!==g&&!a.isFunction(g)){if(i=a.extend({},h.defaults,i),"number"==typeof i.expires){var j=i.expires,k=i.expires=new Date;k.setTime(+k+864e5*j)}return document.cookie=[b(e),"=",d(g),i.expires?"; expires="+i.expires.toUTCString():"",i.path?"; path="+i.path:"",i.domain?"; domain="+i.domain:"",i.secure?"; secure":""].join("")}for(var l=e?void 0:{},m=document.cookie?document.cookie.split("; "):[],n=0,o=m.length;o>n;n++){var p=m[n].split("="),q=c(p.shift()),r=p.join("=");if(e&&e===q){l=f(r,g);break}e||void 0===(r=f(r))||(l[q]=r)}return l};h.defaults={},a.removeCookie=function(b,c){return void 0===a.cookie(b)?!1:(a.cookie(b,"",a.extend({},c,{expires:-1})),!a.cookie(b))}});
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-core/js/jquery-query.js b/wp-content/plugins/buddypress/bp-core/js/jquery-query.js
new file mode 100644
index 000000000..60f3c307a
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-core/js/jquery-query.js
@@ -0,0 +1,6 @@
+/* jshint unused: false */
+
+function bp_get_querystring( n ) {
+	var half = location.search.split( n + '=' )[1];
+	return half ? decodeURIComponent( half.split('&')[0] ) : null;
+}
diff --git a/wp-content/plugins/buddypress/bp-core/js/jquery-query.min.js b/wp-content/plugins/buddypress/bp-core/js/jquery-query.min.js
new file mode 100644
index 000000000..81ca3ada1
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-core/js/jquery-query.min.js
@@ -0,0 +1,2 @@
+/*! buddypress - v2.1.0 - 2014-10-06 9:39:07 PM UTC - https://wordpress.org/plugins/buddypress/ */
+function bp_get_querystring(a){var b=location.search.split(a+"=")[1];return b?decodeURIComponent(b.split("&")[0]):null}
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-core/js/jquery.atwho.js b/wp-content/plugins/buddypress/bp-core/js/jquery.atwho.js
new file mode 100644
index 000000000..d5eefe3f4
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-core/js/jquery.atwho.js
@@ -0,0 +1,824 @@
+/*! jquery.atwho - v0.5.0 - 2014-07-14
+* Copyright (c) 2014 chord.luo <chord.luo@gmail.com>; 
+* homepage: http://ichord.github.com/At.js 
+* Licensed MIT
+*/
+
+(function() {
+  (function(factory) {
+    if (typeof define === 'function' && define.amd) {
+      return define(['jquery'], factory);
+    } else {
+      return factory(window.jQuery);
+    }
+  })(function($) {
+
+var $CONTAINER, Api, App, Controller, DEFAULT_CALLBACKS, KEY_CODE, Model, View,
+  __slice = [].slice;
+
+App = (function() {
+  function App(inputor) {
+    this.current_flag = null;
+    this.controllers = {};
+    this.alias_maps = {};
+    this.$inputor = $(inputor);
+    this.iframe = null;
+    this.setIframe();
+    this.listen();
+  }
+
+  App.prototype.setIframe = function(iframe) {
+    if (iframe) {
+      this.window = iframe.contentWindow;
+      this.document = iframe.contentDocument || this.window.document;
+      return this.iframe = iframe;
+    } else {
+      this.document = document;
+      this.window = window;
+      return this.iframe = null;
+    }
+  };
+
+  App.prototype.controller = function(at) {
+    var c, current, current_flag, _ref;
+    if (this.alias_maps[at]) {
+      current = this.controllers[this.alias_maps[at]];
+    } else {
+      _ref = this.controllers;
+      for (current_flag in _ref) {
+        c = _ref[current_flag];
+        if (current_flag === at) {
+          current = c;
+          break;
+        }
+      }
+    }
+    if (current) {
+      return current;
+    } else {
+      return this.controllers[this.current_flag];
+    }
+  };
+
+  App.prototype.set_context_for = function(at) {
+    this.current_flag = at;
+    return this;
+  };
+
+  App.prototype.reg = function(flag, setting) {
+    var controller, _base;
+    controller = (_base = this.controllers)[flag] || (_base[flag] = new Controller(this, flag));
+    if (setting.alias) {
+      this.alias_maps[setting.alias] = flag;
+    }
+    controller.init(setting);
+    return this;
+  };
+
+  App.prototype.listen = function() {
+    return this.$inputor.on('keyup.atwhoInner', (function(_this) {
+      return function(e) {
+        return _this.on_keyup(e);
+      };
+    })(this)).on('keydown.atwhoInner', (function(_this) {
+      return function(e) {
+        return _this.on_keydown(e);
+      };
+    })(this)).on('scroll.atwhoInner', (function(_this) {
+      return function(e) {
+        var _ref;
+        return (_ref = _this.controller()) != null ? _ref.view.hide(e) : void 0;
+      };
+    })(this)).on('blur.atwhoInner', (function(_this) {
+      return function(e) {
+        var c;
+        if (c = _this.controller()) {
+          return c.view.hide(e, c.get_opt("display_timeout"));
+        }
+      };
+    })(this)).on('click.atwhoInner', (function(_this) {
+      return function(e) {
+        var _ref;
+        return (_ref = _this.controller()) != null ? _ref.view.hide(e) : void 0;
+      };
+    })(this));
+  };
+
+  App.prototype.shutdown = function() {
+    var c, _, _ref;
+    _ref = this.controllers;
+    for (_ in _ref) {
+      c = _ref[_];
+      c.destroy();
+      delete this.controllers[_];
+    }
+    return this.$inputor.off('.atwhoInner');
+  };
+
+  App.prototype.dispatch = function() {
+    return $.map(this.controllers, (function(_this) {
+      return function(c) {
+        var delay;
+        if (delay = c.get_opt('delay')) {
+          clearTimeout(_this.delayedCallback);
+          return _this.delayedCallback = setTimeout(function() {
+            if (c.look_up()) {
+              return _this.set_context_for(c.at);
+            }
+          }, delay);
+        } else {
+          if (c.look_up()) {
+            return _this.set_context_for(c.at);
+          }
+        }
+      };
+    })(this));
+  };
+
+  App.prototype.on_keyup = function(e) {
+    var _ref;
+    switch (e.keyCode) {
+      case KEY_CODE.ESC:
+        e.preventDefault();
+        if ((_ref = this.controller()) != null) {
+          _ref.view.hide();
+        }
+        break;
+      case KEY_CODE.DOWN:
+      case KEY_CODE.UP:
+      case KEY_CODE.CTRL:
+        $.noop();
+        break;
+      case KEY_CODE.P:
+      case KEY_CODE.N:
+        if (!e.ctrlKey) {
+          this.dispatch();
+        }
+        break;
+      default:
+        this.dispatch();
+    }
+  };
+
+  App.prototype.on_keydown = function(e) {
+    var view, _ref;
+    view = (_ref = this.controller()) != null ? _ref.view : void 0;
+    if (!(view && view.visible())) {
+      return;
+    }
+    switch (e.keyCode) {
+      case KEY_CODE.ESC:
+        e.preventDefault();
+        view.hide(e);
+        break;
+      case KEY_CODE.UP:
+        e.preventDefault();
+        view.prev();
+        break;
+      case KEY_CODE.DOWN:
+        e.preventDefault();
+        view.next();
+        break;
+      case KEY_CODE.P:
+        if (!e.ctrlKey) {
+          return;
+        }
+        e.preventDefault();
+        view.prev();
+        break;
+      case KEY_CODE.N:
+        if (!e.ctrlKey) {
+          return;
+        }
+        e.preventDefault();
+        view.next();
+        break;
+      case KEY_CODE.TAB:
+      case KEY_CODE.ENTER:
+        if (!view.visible()) {
+          return;
+        }
+        e.preventDefault();
+        view.choose(e);
+        break;
+      default:
+        $.noop();
+    }
+  };
+
+  return App;
+
+})();
+
+Controller = (function() {
+  Controller.prototype.uid = function() {
+    return (Math.random().toString(16) + "000000000").substr(2, 8) + (new Date().getTime());
+  };
+
+  function Controller(app, at) {
+    this.app = app;
+    this.at = at;
+    this.$inputor = this.app.$inputor;
+    this.id = this.$inputor[0].id || this.uid();
+    this.setting = null;
+    this.query = null;
+    this.pos = 0;
+    this.cur_rect = null;
+    this.range = null;
+    $CONTAINER.append(this.$el = $("<div id='atwho-ground-" + this.id + "'></div>"));
+    this.model = new Model(this);
+    this.view = new View(this);
+  }
+
+  Controller.prototype.init = function(setting) {
+    this.setting = $.extend({}, this.setting || $.fn.atwho["default"], setting);
+    this.view.init();
+    return this.model.reload(this.setting.data);
+  };
+
+  Controller.prototype.destroy = function() {
+    this.trigger('beforeDestroy');
+    this.model.destroy();
+    this.view.destroy();
+    return this.$el.remove();
+  };
+
+  Controller.prototype.call_default = function() {
+    var args, error, func_name;
+    func_name = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
+    try {
+      return DEFAULT_CALLBACKS[func_name].apply(this, args);
+    } catch (_error) {
+      error = _error;
+      return $.error("" + error + " Or maybe At.js doesn't have function " + func_name);
+    }
+  };
+
+  Controller.prototype.trigger = function(name, data) {
+    var alias, event_name;
+    if (data == null) {
+      data = [];
+    }
+    data.push(this);
+    alias = this.get_opt('alias');
+    event_name = alias ? "" + name + "-" + alias + ".atwho" : "" + name + ".atwho";
+    return this.$inputor.trigger(event_name, data);
+  };
+
+  Controller.prototype.callbacks = function(func_name) {
+    return this.get_opt("callbacks")[func_name] || DEFAULT_CALLBACKS[func_name];
+  };
+
+  Controller.prototype.get_opt = function(at, default_value) {
+    var e;
+    try {
+      return this.setting[at];
+    } catch (_error) {
+      e = _error;
+      return null;
+    }
+  };
+
+  Controller.prototype.content = function() {
+    if (this.$inputor.is('textarea, input')) {
+      return this.$inputor.val();
+    } else {
+      return this.$inputor.text();
+    }
+  };
+
+  Controller.prototype.catch_query = function() {
+    var caret_pos, content, end, query, start, subtext;
+    content = this.content();
+    caret_pos = this.$inputor.caret('pos', {
+      iframe: this.app.iframe
+    });
+    subtext = content.slice(0, caret_pos);
+    query = this.callbacks("matcher").call(this, this.at, subtext, this.get_opt('start_with_space'));
+    if (typeof query === "string" && query.length <= this.get_opt('max_len', 20)) {
+      start = caret_pos - query.length;
+      end = start + query.length;
+      this.pos = start;
+      query = {
+        'text': query,
+        'head_pos': start,
+        'end_pos': end
+      };
+      this.trigger("matched", [this.at, query.text]);
+    } else {
+      query = null;
+      this.view.hide();
+    }
+    return this.query = query;
+  };
+
+  Controller.prototype.rect = function() {
+    var c, scale_bottom;
+    if (!(c = this.$inputor.caret('offset', this.pos - 1, {
+      iframe: this.app.iframe
+    }))) {
+      return;
+    }
+    if (this.$inputor.attr('contentEditable') === 'true') {
+      c = (this.cur_rect || (this.cur_rect = c)) || c;
+    }
+    scale_bottom = this.app.document.selection ? 0 : 2;
+    return {
+      left: c.left,
+      top: c.top,
+      bottom: c.top + c.height + scale_bottom
+    };
+  };
+
+  Controller.prototype.reset_rect = function() {
+    if (this.$inputor.attr('contentEditable') === 'true') {
+      return this.cur_rect = null;
+    }
+  };
+
+  Controller.prototype.mark_range = function() {
+    if (this.$inputor.attr('contentEditable') === 'true') {
+      if (this.app.window.getSelection) {
+        this.range = this.app.window.getSelection().getRangeAt(0);
+      }
+      if (this.app.document.selection) {
+        return this.ie8_range = this.app.document.selection.createRange();
+      }
+    }
+  };
+
+  Controller.prototype.insert_content_for = function($li) {
+    var data, data_value, tpl;
+    data_value = $li.data('value');
+    tpl = this.get_opt('insert_tpl');
+    if (this.$inputor.is('textarea, input') || !tpl) {
+      return data_value;
+    }
+    data = $.extend({}, $li.data('item-data'), {
+      'atwho-data-value': data_value,
+      'atwho-at': this.at
+    });
+    return this.callbacks("tpl_eval").call(this, tpl, data);
+  };
+
+  Controller.prototype.insert = function(content, $li) {
+    var $inputor, content_node, pos, range, sel, source, start_str, text, wrapped_content;
+    $inputor = this.$inputor;
+    wrapped_content = this.callbacks('inserting_wrapper').call(this, $inputor, content, this.get_opt("suffix"));
+    if ($inputor.is('textarea, input')) {
+      source = $inputor.val();
+      start_str = source.slice(0, Math.max(this.query.head_pos - this.at.length, 0));
+      text = "" + start_str + wrapped_content + (source.slice(this.query['end_pos'] || 0));
+      $inputor.val(text);
+      $inputor.caret('pos', start_str.length + wrapped_content.length, {
+        iframe: this.app.iframe
+      });
+    } else if (range = this.range) {
+      pos = range.startOffset - (this.query.end_pos - this.query.head_pos) - this.at.length;
+      range.setStart(range.endContainer, Math.max(pos, 0));
+      range.setEnd(range.endContainer, range.endOffset);
+      range.deleteContents();
+      content_node = $(wrapped_content, this.app.document)[0];
+      range.insertNode(content_node);
+      range.setEndAfter(content_node);
+      range.collapse(false);
+      sel = this.app.window.getSelection();
+      sel.removeAllRanges();
+      sel.addRange(range);
+    } else if (range = this.ie8_range) {
+      range.moveStart('character', this.query.end_pos - this.query.head_pos - this.at.length);
+      range.pasteHTML(wrapped_content);
+      range.collapse(false);
+      range.select();
+    }
+    if (!$inputor.is(':focus')) {
+      $inputor.focus();
+    }
+    return $inputor.change();
+  };
+
+  Controller.prototype.render_view = function(data) {
+    var search_key;
+    search_key = this.get_opt("search_key");
+    data = this.callbacks("sorter").call(this, this.query.text, data.slice(0, 1001), search_key);
+    return this.view.render(data.slice(0, this.get_opt('limit')));
+  };
+
+  Controller.prototype.look_up = function() {
+    var query, _callback;
+    if (!(query = this.catch_query())) {
+      return;
+    }
+    _callback = function(data) {
+      if (data && data.length > 0) {
+        return this.render_view(data);
+      } else {
+        return this.view.hide();
+      }
+    };
+    this.model.query(query.text, $.proxy(_callback, this));
+    return query;
+  };
+
+  return Controller;
+
+})();
+
+Model = (function() {
+  function Model(context) {
+    this.context = context;
+    this.at = this.context.at;
+    this.storage = this.context.$inputor;
+  }
+
+  Model.prototype.destroy = function() {
+    return this.storage.data(this.at, null);
+  };
+
+  Model.prototype.saved = function() {
+    return this.fetch() > 0;
+  };
+
+  Model.prototype.query = function(query, callback) {
+    var data, search_key, _remote_filter;
+    data = this.fetch();
+    search_key = this.context.get_opt("search_key");
+    data = this.context.callbacks('filter').call(this.context, query, data, search_key) || [];
+    _remote_filter = this.context.callbacks('remote_filter');
+    if (data.length > 0 || (!_remote_filter && data.length === 0)) {
+      return callback(data);
+    } else {
+      return _remote_filter.call(this.context, query, callback);
+    }
+  };
+
+  Model.prototype.fetch = function() {
+    return this.storage.data(this.at) || [];
+  };
+
+  Model.prototype.save = function(data) {
+    return this.storage.data(this.at, this.context.callbacks("before_save").call(this.context, data || []));
+  };
+
+  Model.prototype.load = function(data) {
+    if (!(this.saved() || !data)) {
+      return this._load(data);
+    }
+  };
+
+  Model.prototype.reload = function(data) {
+    return this._load(data);
+  };
+
+  Model.prototype._load = function(data) {
+    if (typeof data === "string") {
+      return $.ajax(data, {
+        dataType: "json"
+      }).done((function(_this) {
+        return function(data) {
+          return _this.save(data);
+        };
+      })(this));
+    } else {
+      return this.save(data);
+    }
+  };
+
+  return Model;
+
+})();
+
+View = (function() {
+  function View(context) {
+    this.context = context;
+    this.$el = $("<div class='atwho-view'><ul class='atwho-view-ul'></ul></div>");
+    this.timeout_id = null;
+    this.context.$el.append(this.$el);
+    this.bind_event();
+  }
+
+  View.prototype.init = function() {
+    var id;
+    id = this.context.get_opt("alias") || this.context.at.charCodeAt(0);
+    return this.$el.attr({
+      'id': "at-view-" + id
+    });
+  };
+
+  View.prototype.destroy = function() {
+    return this.$el.remove();
+  };
+
+  View.prototype.bind_event = function() {
+    var $menu;
+    $menu = this.$el.find('ul');
+    return $menu.on('mouseenter.atwho-view', 'li', function(e) {
+      $menu.find('.cur').removeClass('cur');
+      return $(e.currentTarget).addClass('cur');
+    }).on('click', (function(_this) {
+      return function(e) {
+        _this.choose(e);
+        return e.preventDefault();
+      };
+    })(this));
+  };
+
+  View.prototype.visible = function() {
+    return this.$el.is(":visible");
+  };
+
+  View.prototype.choose = function(e) {
+    var $li, content;
+    if (($li = this.$el.find(".cur")).length) {
+      content = this.context.insert_content_for($li);
+      this.context.insert(this.context.callbacks("before_insert").call(this.context, content, $li), $li);
+      this.context.trigger("inserted", [$li, e]);
+      this.hide(e);
+    }
+    if (this.context.get_opt("hide_without_suffix")) {
+      return this.stop_showing = true;
+    }
+  };
+
+  View.prototype.reposition = function(rect) {
+    var offset, _ref;
+    if (rect.bottom + this.$el.height() - $(window).scrollTop() > $(window).height()) {
+      rect.bottom = rect.top - this.$el.height();
+    }
+    offset = {
+      left: rect.left,
+      top: rect.bottom
+    };
+    if ((_ref = this.context.callbacks("before_reposition")) != null) {
+      _ref.call(this.context, offset);
+    }
+    this.$el.offset(offset);
+    return this.context.trigger("reposition", [offset]);
+  };
+
+  View.prototype.next = function() {
+    var cur, next;
+    cur = this.$el.find('.cur').removeClass('cur');
+    next = cur.next();
+    if (!next.length) {
+      next = this.$el.find('li:first');
+    }
+    return next.addClass('cur');
+  };
+
+  View.prototype.prev = function() {
+    var cur, prev;
+    cur = this.$el.find('.cur').removeClass('cur');
+    prev = cur.prev();
+    if (!prev.length) {
+      prev = this.$el.find('li:last');
+    }
+    return prev.addClass('cur');
+  };
+
+  View.prototype.show = function() {
+    var rect;
+    if (this.stop_showing) {
+      this.stop_showing = false;
+      return;
+    }
+    this.context.mark_range();
+    if (!this.visible()) {
+      this.$el.show();
+      this.context.trigger('shown');
+    }
+    if (rect = this.context.rect()) {
+      return this.reposition(rect);
+    }
+  };
+
+  View.prototype.hide = function(e, time) {
+    var callback;
+    if (!this.visible()) {
+      return;
+    }
+    if (isNaN(time)) {
+      this.context.reset_rect();
+      this.$el.hide();
+      return this.context.trigger('hidden', [e]);
+    } else {
+      callback = (function(_this) {
+        return function() {
+          return _this.hide();
+        };
+      })(this);
+      clearTimeout(this.timeout_id);
+      return this.timeout_id = setTimeout(callback, time);
+    }
+  };
+
+  View.prototype.render = function(list) {
+    var $li, $ul, item, li, tpl, _i, _len;
+    if (!($.isArray(list) && list.length > 0)) {
+      this.hide();
+      return;
+    }
+    this.$el.find('ul').empty();
+    $ul = this.$el.find('ul');
+    tpl = this.context.get_opt('tpl');
+    for (_i = 0, _len = list.length; _i < _len; _i++) {
+      item = list[_i];
+      item = $.extend({}, item, {
+        'atwho-at': this.context.at
+      });
+      li = this.context.callbacks("tpl_eval").call(this.context, tpl, item);
+      $li = $(this.context.callbacks("highlighter").call(this.context, li, this.context.query.text));
+      $li.data("item-data", item);
+      $ul.append($li);
+    }
+    this.show();
+    if (this.context.get_opt('highlight_first')) {
+      return $ul.find("li:first").addClass("cur");
+    }
+  };
+
+  return View;
+
+})();
+
+KEY_CODE = {
+  DOWN: 40,
+  UP: 38,
+  ESC: 27,
+  TAB: 9,
+  ENTER: 13,
+  CTRL: 17,
+  P: 80,
+  N: 78
+};
+
+DEFAULT_CALLBACKS = {
+  before_save: function(data) {
+    var item, _i, _len, _results;
+    if (!$.isArray(data)) {
+      return data;
+    }
+    _results = [];
+    for (_i = 0, _len = data.length; _i < _len; _i++) {
+      item = data[_i];
+      if ($.isPlainObject(item)) {
+        _results.push(item);
+      } else {
+        _results.push({
+          name: item
+        });
+      }
+    }
+    return _results;
+  },
+  matcher: function(flag, subtext, should_start_with_space) {
+    var match, regexp;
+    flag = flag.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
+    if (should_start_with_space) {
+      flag = '(?:^|\\s)' + flag;
+    }
+    regexp = new RegExp(flag + '([A-Za-z0-9_\+\-]*)$|' + flag + '([^\\x00-\\xff]*)$', 'gi');
+    match = regexp.exec(subtext);
+    if (match) {
+      return match[2] || match[1];
+    } else {
+      return null;
+    }
+  },
+  filter: function(query, data, search_key) {
+    var item, _i, _len, _results;
+    _results = [];
+    for (_i = 0, _len = data.length; _i < _len; _i++) {
+      item = data[_i];
+      if (~item[search_key].toLowerCase().indexOf(query.toLowerCase())) {
+        _results.push(item);
+      }
+    }
+    return _results;
+  },
+  remote_filter: null,
+  sorter: function(query, items, search_key) {
+    var item, _i, _len, _results;
+    if (!query) {
+      return items;
+    }
+    _results = [];
+    for (_i = 0, _len = items.length; _i < _len; _i++) {
+      item = items[_i];
+      item.atwho_order = item[search_key].toLowerCase().indexOf(query.toLowerCase());
+      if (item.atwho_order > -1) {
+        _results.push(item);
+      }
+    }
+    return _results.sort(function(a, b) {
+      return a.atwho_order - b.atwho_order;
+    });
+  },
+  tpl_eval: function(tpl, map) {
+    var error;
+    try {
+      return tpl.replace(/\$\{([^\}]*)\}/g, function(tag, key, pos) {
+        return map[key];
+      });
+    } catch (_error) {
+      error = _error;
+      return "";
+    }
+  },
+  highlighter: function(li, query) {
+    var regexp;
+    if (!query) {
+      return li;
+    }
+    regexp = new RegExp(">\\s*(\\w*?)(" + query.replace("+", "\\+") + ")(\\w*)\\s*<", 'ig');
+    return li.replace(regexp, function(str, $1, $2, $3) {
+      return '> ' + $1 + '<strong>' + $2 + '</strong>' + $3 + ' <';
+    });
+  },
+  before_insert: function(value, $li) {
+    return value;
+  },
+  inserting_wrapper: function($inputor, content, suffix) {
+    var new_suffix, wrapped_content;
+    new_suffix = suffix === "" ? suffix : suffix || " ";
+    if ($inputor.is('textarea, input')) {
+      return '' + content + new_suffix;
+    } else if ($inputor.attr('contentEditable') === 'true') {
+      new_suffix = suffix === "" ? suffix : suffix || "&nbsp;";
+      if (/firefox/i.test(navigator.userAgent)) {
+        wrapped_content = "<span>" + content + new_suffix + "</span>";
+      } else {
+        suffix = "<span contenteditable='false'>" + new_suffix + "<span>";
+        wrapped_content = "<span contenteditable='false'>" + content + suffix + "</span>";
+      }
+      if (this.app.document.selection) {
+        wrapped_content = "<span contenteditable='true'>" + content + "</span>";
+      }
+      return wrapped_content;
+    }
+  }
+};
+
+Api = {
+  load: function(at, data) {
+    var c;
+    if (c = this.controller(at)) {
+      return c.model.load(data);
+    }
+  },
+  setIframe: function(iframe) {
+    this.setIframe(iframe);
+    return null;
+  },
+  run: function() {
+    return this.dispatch();
+  },
+  destroy: function() {
+    this.shutdown();
+    return this.$inputor.data('atwho', null);
+  }
+};
+
+$CONTAINER = $("<div id='atwho-container'></div>");
+
+$.fn.atwho = function(method) {
+  var result, _args;
+  _args = arguments;
+  $('body').append($CONTAINER);
+  result = null;
+  this.filter('textarea, input, [contenteditable=true]').each(function() {
+    var $this, app;
+    if (!(app = ($this = $(this)).data("atwho"))) {
+      $this.data('atwho', (app = new App(this)));
+    }
+    if (typeof method === 'object' || !method) {
+      return app.reg(method.at, method);
+    } else if (Api[method] && app) {
+      return result = Api[method].apply(app, Array.prototype.slice.call(_args, 1));
+    } else {
+      return $.error("Method " + method + " does not exist on jQuery.caret");
+    }
+  });
+  return result || this;
+};
+
+$.fn.atwho["default"] = {
+  at: void 0,
+  alias: void 0,
+  data: null,
+  tpl: "<li data-value='${atwho-at}${name}'>${name}</li>",
+  insert_tpl: "<span id='${id}'>${atwho-data-value}</span>",
+  callbacks: DEFAULT_CALLBACKS,
+  search_key: "name",
+  suffix: void 0,
+  hide_without_suffix: false,
+  start_with_space: true,
+  highlight_first: true,
+  limit: 5,
+  max_len: 20,
+  display_timeout: 300,
+  delay: null
+};
+
+  });
+}).call(this);
diff --git a/wp-content/plugins/buddypress/bp-core/js/jquery.atwho.min.js b/wp-content/plugins/buddypress/bp-core/js/jquery.atwho.min.js
new file mode 100644
index 000000000..1b02d584d
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-core/js/jquery.atwho.min.js
@@ -0,0 +1,2 @@
+/*! buddypress - v2.1.0 - 2014-10-06 9:39:07 PM UTC - https://wordpress.org/plugins/buddypress/ */
+(function(){!function(a){return"function"==typeof define&&define.amd?define(["jquery"],a):a(window.jQuery)}(function(a){var b,c,d,e,f,g,h,i,j=[].slice;d=function(){function b(b){this.current_flag=null,this.controllers={},this.alias_maps={},this.$inputor=a(b),this.iframe=null,this.setIframe(),this.listen()}return b.prototype.setIframe=function(a){return a?(this.window=a.contentWindow,this.document=a.contentDocument||this.window.document,this.iframe=a):(this.document=document,this.window=window,this.iframe=null)},b.prototype.controller=function(a){var b,c,d,e;if(this.alias_maps[a])c=this.controllers[this.alias_maps[a]];else{e=this.controllers;for(d in e)if(b=e[d],d===a){c=b;break}}return c?c:this.controllers[this.current_flag]},b.prototype.set_context_for=function(a){return this.current_flag=a,this},b.prototype.reg=function(a,b){var c,d;return c=(d=this.controllers)[a]||(d[a]=new e(this,a)),b.alias&&(this.alias_maps[b.alias]=a),c.init(b),this},b.prototype.listen=function(){return this.$inputor.on("keyup.atwhoInner",function(a){return function(b){return a.on_keyup(b)}}(this)).on("keydown.atwhoInner",function(a){return function(b){return a.on_keydown(b)}}(this)).on("scroll.atwhoInner",function(a){return function(b){var c;return null!=(c=a.controller())?c.view.hide(b):void 0}}(this)).on("blur.atwhoInner",function(a){return function(b){var c;return(c=a.controller())?c.view.hide(b,c.get_opt("display_timeout")):void 0}}(this)).on("click.atwhoInner",function(a){return function(b){var c;return null!=(c=a.controller())?c.view.hide(b):void 0}}(this))},b.prototype.shutdown=function(){var a,b,c;c=this.controllers;for(b in c)a=c[b],a.destroy(),delete this.controllers[b];return this.$inputor.off(".atwhoInner")},b.prototype.dispatch=function(){return a.map(this.controllers,function(a){return function(b){var c;return(c=b.get_opt("delay"))?(clearTimeout(a.delayedCallback),a.delayedCallback=setTimeout(function(){return b.look_up()?a.set_context_for(b.at):void 0},c)):b.look_up()?a.set_context_for(b.at):void 0}}(this))},b.prototype.on_keyup=function(b){var c;switch(b.keyCode){case g.ESC:b.preventDefault(),null!=(c=this.controller())&&c.view.hide();break;case g.DOWN:case g.UP:case g.CTRL:a.noop();break;case g.P:case g.N:b.ctrlKey||this.dispatch();break;default:this.dispatch()}},b.prototype.on_keydown=function(b){var c,d;if(c=null!=(d=this.controller())?d.view:void 0,c&&c.visible())switch(b.keyCode){case g.ESC:b.preventDefault(),c.hide(b);break;case g.UP:b.preventDefault(),c.prev();break;case g.DOWN:b.preventDefault(),c.next();break;case g.P:if(!b.ctrlKey)return;b.preventDefault(),c.prev();break;case g.N:if(!b.ctrlKey)return;b.preventDefault(),c.next();break;case g.TAB:case g.ENTER:if(!c.visible())return;b.preventDefault(),c.choose(b);break;default:a.noop()}},b}(),e=function(){function c(c,d){this.app=c,this.at=d,this.$inputor=this.app.$inputor,this.id=this.$inputor[0].id||this.uid(),this.setting=null,this.query=null,this.pos=0,this.cur_rect=null,this.range=null,b.append(this.$el=a("<div id='atwho-ground-"+this.id+"'></div>")),this.model=new h(this),this.view=new i(this)}return c.prototype.uid=function(){return(Math.random().toString(16)+"000000000").substr(2,8)+(new Date).getTime()},c.prototype.init=function(b){return this.setting=a.extend({},this.setting||a.fn.atwho["default"],b),this.view.init(),this.model.reload(this.setting.data)},c.prototype.destroy=function(){return this.trigger("beforeDestroy"),this.model.destroy(),this.view.destroy(),this.$el.remove()},c.prototype.call_default=function(){var b,c,d;d=arguments[0],b=2<=arguments.length?j.call(arguments,1):[];try{return f[d].apply(this,b)}catch(e){return c=e,a.error(""+c+" Or maybe At.js doesn't have function "+d)}},c.prototype.trigger=function(a,b){var c,d;return null==b&&(b=[]),b.push(this),c=this.get_opt("alias"),d=c?""+a+"-"+c+".atwho":""+a+".atwho",this.$inputor.trigger(d,b)},c.prototype.callbacks=function(a){return this.get_opt("callbacks")[a]||f[a]},c.prototype.get_opt=function(a){var b;try{return this.setting[a]}catch(c){return b=c,null}},c.prototype.content=function(){return this.$inputor.is("textarea, input")?this.$inputor.val():this.$inputor.text()},c.prototype.catch_query=function(){var a,b,c,d,e,f;return b=this.content(),a=this.$inputor.caret("pos",{iframe:this.app.iframe}),f=b.slice(0,a),d=this.callbacks("matcher").call(this,this.at,f,this.get_opt("start_with_space")),"string"==typeof d&&d.length<=this.get_opt("max_len",20)?(e=a-d.length,c=e+d.length,this.pos=e,d={text:d,head_pos:e,end_pos:c},this.trigger("matched",[this.at,d.text])):(d=null,this.view.hide()),this.query=d},c.prototype.rect=function(){var a,b;if(a=this.$inputor.caret("offset",this.pos-1,{iframe:this.app.iframe}))return"true"===this.$inputor.attr("contentEditable")&&(a=this.cur_rect||(this.cur_rect=a)||a),b=this.app.document.selection?0:2,{left:a.left,top:a.top,bottom:a.top+a.height+b}},c.prototype.reset_rect=function(){return"true"===this.$inputor.attr("contentEditable")?this.cur_rect=null:void 0},c.prototype.mark_range=function(){return"true"===this.$inputor.attr("contentEditable")&&(this.app.window.getSelection&&(this.range=this.app.window.getSelection().getRangeAt(0)),this.app.document.selection)?this.ie8_range=this.app.document.selection.createRange():void 0},c.prototype.insert_content_for=function(b){var c,d,e;return d=b.data("value"),e=this.get_opt("insert_tpl"),this.$inputor.is("textarea, input")||!e?d:(c=a.extend({},b.data("item-data"),{"atwho-data-value":d,"atwho-at":this.at}),this.callbacks("tpl_eval").call(this,e,c))},c.prototype.insert=function(b){var c,d,e,f,g,h,i,j,k;return c=this.$inputor,k=this.callbacks("inserting_wrapper").call(this,c,b,this.get_opt("suffix")),c.is("textarea, input")?(h=c.val(),i=h.slice(0,Math.max(this.query.head_pos-this.at.length,0)),j=""+i+k+h.slice(this.query.end_pos||0),c.val(j),c.caret("pos",i.length+k.length,{iframe:this.app.iframe})):(f=this.range)?(e=f.startOffset-(this.query.end_pos-this.query.head_pos)-this.at.length,f.setStart(f.endContainer,Math.max(e,0)),f.setEnd(f.endContainer,f.endOffset),f.deleteContents(),d=a(k,this.app.document)[0],f.insertNode(d),f.setEndAfter(d),f.collapse(!1),g=this.app.window.getSelection(),g.removeAllRanges(),g.addRange(f)):(f=this.ie8_range)&&(f.moveStart("character",this.query.end_pos-this.query.head_pos-this.at.length),f.pasteHTML(k),f.collapse(!1),f.select()),c.is(":focus")||c.focus(),c.change()},c.prototype.render_view=function(a){var b;return b=this.get_opt("search_key"),a=this.callbacks("sorter").call(this,this.query.text,a.slice(0,1001),b),this.view.render(a.slice(0,this.get_opt("limit")))},c.prototype.look_up=function(){var b,c;if(b=this.catch_query())return c=function(a){return a&&a.length>0?this.render_view(a):this.view.hide()},this.model.query(b.text,a.proxy(c,this)),b},c}(),h=function(){function b(a){this.context=a,this.at=this.context.at,this.storage=this.context.$inputor}return b.prototype.destroy=function(){return this.storage.data(this.at,null)},b.prototype.saved=function(){return this.fetch()>0},b.prototype.query=function(a,b){var c,d,e;return c=this.fetch(),d=this.context.get_opt("search_key"),c=this.context.callbacks("filter").call(this.context,a,c,d)||[],e=this.context.callbacks("remote_filter"),c.length>0||!e&&0===c.length?b(c):e.call(this.context,a,b)},b.prototype.fetch=function(){return this.storage.data(this.at)||[]},b.prototype.save=function(a){return this.storage.data(this.at,this.context.callbacks("before_save").call(this.context,a||[]))},b.prototype.load=function(a){return!this.saved()&&a?this._load(a):void 0},b.prototype.reload=function(a){return this._load(a)},b.prototype._load=function(b){return"string"==typeof b?a.ajax(b,{dataType:"json"}).done(function(a){return function(b){return a.save(b)}}(this)):this.save(b)},b}(),i=function(){function b(b){this.context=b,this.$el=a("<div class='atwho-view'><ul class='atwho-view-ul'></ul></div>"),this.timeout_id=null,this.context.$el.append(this.$el),this.bind_event()}return b.prototype.init=function(){var a;return a=this.context.get_opt("alias")||this.context.at.charCodeAt(0),this.$el.attr({id:"at-view-"+a})},b.prototype.destroy=function(){return this.$el.remove()},b.prototype.bind_event=function(){var b;return b=this.$el.find("ul"),b.on("mouseenter.atwho-view","li",function(c){return b.find(".cur").removeClass("cur"),a(c.currentTarget).addClass("cur")}).on("click",function(a){return function(b){return a.choose(b),b.preventDefault()}}(this))},b.prototype.visible=function(){return this.$el.is(":visible")},b.prototype.choose=function(a){var b,c;return(b=this.$el.find(".cur")).length&&(c=this.context.insert_content_for(b),this.context.insert(this.context.callbacks("before_insert").call(this.context,c,b),b),this.context.trigger("inserted",[b,a]),this.hide(a)),this.context.get_opt("hide_without_suffix")?this.stop_showing=!0:void 0},b.prototype.reposition=function(b){var c,d;return b.bottom+this.$el.height()-a(window).scrollTop()>a(window).height()&&(b.bottom=b.top-this.$el.height()),c={left:b.left,top:b.bottom},null!=(d=this.context.callbacks("before_reposition"))&&d.call(this.context,c),this.$el.offset(c),this.context.trigger("reposition",[c])},b.prototype.next=function(){var a,b;return a=this.$el.find(".cur").removeClass("cur"),b=a.next(),b.length||(b=this.$el.find("li:first")),b.addClass("cur")},b.prototype.prev=function(){var a,b;return a=this.$el.find(".cur").removeClass("cur"),b=a.prev(),b.length||(b=this.$el.find("li:last")),b.addClass("cur")},b.prototype.show=function(){var a;return this.stop_showing?void(this.stop_showing=!1):(this.context.mark_range(),this.visible()||(this.$el.show(),this.context.trigger("shown")),(a=this.context.rect())?this.reposition(a):void 0)},b.prototype.hide=function(a,b){var c;if(this.visible())return isNaN(b)?(this.context.reset_rect(),this.$el.hide(),this.context.trigger("hidden",[a])):(c=function(a){return function(){return a.hide()}}(this),clearTimeout(this.timeout_id),this.timeout_id=setTimeout(c,b))},b.prototype.render=function(b){var c,d,e,f,g,h,i;if(!(a.isArray(b)&&b.length>0))return void this.hide();for(this.$el.find("ul").empty(),d=this.$el.find("ul"),g=this.context.get_opt("tpl"),h=0,i=b.length;i>h;h++)e=b[h],e=a.extend({},e,{"atwho-at":this.context.at}),f=this.context.callbacks("tpl_eval").call(this.context,g,e),c=a(this.context.callbacks("highlighter").call(this.context,f,this.context.query.text)),c.data("item-data",e),d.append(c);return this.show(),this.context.get_opt("highlight_first")?d.find("li:first").addClass("cur"):void 0},b}(),g={DOWN:40,UP:38,ESC:27,TAB:9,ENTER:13,CTRL:17,P:80,N:78},f={before_save:function(b){var c,d,e,f;if(!a.isArray(b))return b;for(f=[],d=0,e=b.length;e>d;d++)c=b[d],f.push(a.isPlainObject(c)?c:{name:c});return f},matcher:function(a,b,c){var d,e;return a=a.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&"),c&&(a="(?:^|\\s)"+a),e=new RegExp(a+"([A-Za-z0-9_+-]*)$|"+a+"([^\\x00-\\xff]*)$","gi"),d=e.exec(b),d?d[2]||d[1]:null},filter:function(a,b,c){var d,e,f,g;for(g=[],e=0,f=b.length;f>e;e++)d=b[e],~d[c].toLowerCase().indexOf(a.toLowerCase())&&g.push(d);return g},remote_filter:null,sorter:function(a,b,c){var d,e,f,g;if(!a)return b;for(g=[],e=0,f=b.length;f>e;e++)d=b[e],d.atwho_order=d[c].toLowerCase().indexOf(a.toLowerCase()),d.atwho_order>-1&&g.push(d);return g.sort(function(a,b){return a.atwho_order-b.atwho_order})},tpl_eval:function(a,b){var c;try{return a.replace(/\$\{([^\}]*)\}/g,function(a,c){return b[c]})}catch(d){return c=d,""}},highlighter:function(a,b){var c;return b?(c=new RegExp(">\\s*(\\w*?)("+b.replace("+","\\+")+")(\\w*)\\s*<","ig"),a.replace(c,function(a,b,c,d){return"> "+b+"<strong>"+c+"</strong>"+d+" <"})):a},before_insert:function(a){return a},inserting_wrapper:function(a,b,c){var d,e;return d=""===c?c:c||" ",a.is("textarea, input")?""+b+d:"true"===a.attr("contentEditable")?(d=""===c?c:c||"&nbsp;",/firefox/i.test(navigator.userAgent)?e="<span>"+b+d+"</span>":(c="<span contenteditable='false'>"+d+"<span>",e="<span contenteditable='false'>"+b+c+"</span>"),this.app.document.selection&&(e="<span contenteditable='true'>"+b+"</span>"),e):void 0}},c={load:function(a,b){var c;return(c=this.controller(a))?c.model.load(b):void 0},setIframe:function(a){return this.setIframe(a),null},run:function(){return this.dispatch()},destroy:function(){return this.shutdown(),this.$inputor.data("atwho",null)}},b=a("<div id='atwho-container'></div>"),a.fn.atwho=function(e){var f,g;return g=arguments,a("body").append(b),f=null,this.filter("textarea, input, [contenteditable=true]").each(function(){var b,h;return(h=(b=a(this)).data("atwho"))||b.data("atwho",h=new d(this)),"object"!=typeof e&&e?c[e]&&h?f=c[e].apply(h,Array.prototype.slice.call(g,1)):a.error("Method "+e+" does not exist on jQuery.caret"):h.reg(e.at,e)}),f||this},a.fn.atwho["default"]={at:void 0,alias:void 0,data:null,tpl:"<li data-value='${atwho-at}${name}'>${name}</li>",insert_tpl:"<span id='${id}'>${atwho-data-value}</span>",callbacks:f,search_key:"name",suffix:void 0,hide_without_suffix:!1,start_with_space:!0,highlight_first:!0,limit:5,max_len:20,display_timeout:300,delay:null}})}).call(this);
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-core/js/jquery.atwho.txt b/wp-content/plugins/buddypress/bp-core/js/jquery.atwho.txt
new file mode 100644
index 000000000..36cd1c122
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-core/js/jquery.atwho.txt
@@ -0,0 +1,22 @@
+Copyright (c) 2013 chord.luo@gmail.com
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
diff --git a/wp-content/plugins/buddypress/bp-core/js/jquery.caret.js b/wp-content/plugins/buddypress/bp-core/js/jquery.caret.js
new file mode 100644
index 000000000..caa7876c5
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-core/js/jquery.caret.js
@@ -0,0 +1,366 @@
+/*
+  Implement Github like autocomplete mentions
+  http://ichord.github.com/At.js
+
+  Copyright (c) 2013 chord.luo@gmail.com
+  Licensed under the MIT license.
+*/
+
+
+/*
+本插件操作 textarea 或者 input 内的插入符
+只实现了获得插入符在文本框中的位置,我设置
+插入符的位置.
+*/
+
+
+(function() {
+  (function(factory) {
+    if (typeof define === 'function' && define.amd) {
+      return define(['jquery'], factory);
+    } else {
+      return factory(window.jQuery);
+    }
+  })(function($) {
+    "use strict";
+    var EditableCaret, InputCaret, Mirror, Utils, discoveryIframeOf, methods, oDocument, oFrame, oWindow, pluginName, setContextBy;
+    pluginName = 'caret';
+    EditableCaret = (function() {
+      function EditableCaret($inputor) {
+        this.$inputor = $inputor;
+        this.domInputor = this.$inputor[0];
+      }
+
+      EditableCaret.prototype.setPos = function(pos) {
+        return this.domInputor;
+      };
+
+      EditableCaret.prototype.getIEPosition = function() {
+        return $.noop();
+      };
+
+      EditableCaret.prototype.getPosition = function() {
+        return $.noop();
+      };
+
+      EditableCaret.prototype.getOldIEPos = function() {
+        var preCaretTextRange, textRange;
+        textRange = oDocument.selection.createRange();
+        preCaretTextRange = oDocument.body.createTextRange();
+        preCaretTextRange.moveToElementText(this.domInputor);
+        preCaretTextRange.setEndPoint("EndToEnd", textRange);
+        return preCaretTextRange.text.length;
+      };
+
+      EditableCaret.prototype.getPos = function() {
+        var clonedRange, pos, range;
+        if (range = this.range()) {
+          clonedRange = range.cloneRange();
+          clonedRange.selectNodeContents(this.domInputor);
+          clonedRange.setEnd(range.endContainer, range.endOffset);
+          pos = clonedRange.toString().length;
+          clonedRange.detach();
+          return pos;
+        } else if (oDocument.selection) {
+          return this.getOldIEPos();
+        }
+      };
+
+      EditableCaret.prototype.getOldIEOffset = function() {
+        var range, rect;
+        range = oDocument.selection.createRange().duplicate();
+        range.moveStart("character", -1);
+        rect = range.getBoundingClientRect();
+        return {
+          height: rect.bottom - rect.top,
+          left: rect.left,
+          top: rect.top
+        };
+      };
+
+      EditableCaret.prototype.getOffset = function(pos) {
+        var clonedRange, offset, range, rect;
+        if (oWindow.getSelection && (range = this.range())) {
+          if (range.endOffset - 1 < 0) {
+            return null;
+          }
+          clonedRange = range.cloneRange();
+          clonedRange.setStart(range.endContainer, range.endOffset - 1);
+          clonedRange.setEnd(range.endContainer, range.endOffset);
+          rect = clonedRange.getBoundingClientRect();
+          offset = {
+            height: rect.height,
+            left: rect.left + rect.width,
+            top: rect.top
+          };
+          clonedRange.detach();
+        } else if (oDocument.selection) {
+          offset = this.getOldIEOffset();
+        }
+        if (offset && !oFrame) {
+          offset.top += $(oWindow).scrollTop();
+          offset.left += $(oWindow).scrollLeft();
+        }
+        return offset;
+      };
+
+      EditableCaret.prototype.range = function() {
+        var sel;
+        if (!oWindow.getSelection) {
+          return;
+        }
+        sel = oWindow.getSelection();
+        if (sel.rangeCount > 0) {
+          return sel.getRangeAt(0);
+        } else {
+          return null;
+        }
+      };
+
+      return EditableCaret;
+
+    })();
+    InputCaret = (function() {
+      function InputCaret($inputor) {
+        this.$inputor = $inputor;
+        this.domInputor = this.$inputor[0];
+      }
+
+      InputCaret.prototype.getIEPos = function() {
+        var endRange, inputor, len, normalizedValue, pos, range, textInputRange;
+        inputor = this.domInputor;
+        range = oDocument.selection.createRange();
+        pos = 0;
+        if (range && range.parentElement() === inputor) {
+          normalizedValue = inputor.value.replace(/\r\n/g, "\n");
+          len = normalizedValue.length;
+          textInputRange = inputor.createTextRange();
+          textInputRange.moveToBookmark(range.getBookmark());
+          endRange = inputor.createTextRange();
+          endRange.collapse(false);
+          if (textInputRange.compareEndPoints("StartToEnd", endRange) > -1) {
+            pos = len;
+          } else {
+            pos = -textInputRange.moveStart("character", -len);
+          }
+        }
+        return pos;
+      };
+
+      InputCaret.prototype.getPos = function() {
+        if (oDocument.selection) {
+          return this.getIEPos();
+        } else {
+          return this.domInputor.selectionStart;
+        }
+      };
+
+      InputCaret.prototype.setPos = function(pos) {
+        var inputor, range;
+        inputor = this.domInputor;
+        if (oDocument.selection) {
+          range = inputor.createTextRange();
+          range.move("character", pos);
+          range.select();
+        } else if (inputor.setSelectionRange) {
+          inputor.setSelectionRange(pos, pos);
+        }
+        return inputor;
+      };
+
+      InputCaret.prototype.getIEOffset = function(pos) {
+        var h, textRange, x, y;
+        textRange = this.domInputor.createTextRange();
+        pos || (pos = this.getPos());
+        textRange.move('character', pos);
+        x = textRange.boundingLeft;
+        y = textRange.boundingTop;
+        h = textRange.boundingHeight;
+        return {
+          left: x,
+          top: y,
+          height: h
+        };
+      };
+
+      InputCaret.prototype.getOffset = function(pos) {
+        var $inputor, offset, position;
+        $inputor = this.$inputor;
+        if (oDocument.selection) {
+          offset = this.getIEOffset(pos);
+          offset.top += $(oWindow).scrollTop() + $inputor.scrollTop();
+          offset.left += $(oWindow).scrollLeft() + $inputor.scrollLeft();
+          return offset;
+        } else {
+          offset = $inputor.offset();
+          position = this.getPosition(pos);
+          return offset = {
+            left: offset.left + position.left - $inputor.scrollLeft(),
+            top: offset.top + position.top - $inputor.scrollTop(),
+            height: position.height
+          };
+        }
+      };
+
+      InputCaret.prototype.getPosition = function(pos) {
+        var $inputor, at_rect, end_range, format, html, mirror, start_range;
+        $inputor = this.$inputor;
+        format = function(value) {
+          return value.replace(/</g, '&lt').replace(/>/g, '&gt').replace(/`/g, '&#96').replace(/"/g, '&quot').replace(/\r\n|\r|\n/g, "<br />");
+        };
+        if (pos === void 0) {
+          pos = this.getPos();
+        }
+        start_range = $inputor.val().slice(0, pos);
+        end_range = $inputor.val().slice(pos);
+        html = "<span style='position: relative; display: inline;'>" + format(start_range) + "</span>";
+        html += "<span id='caret' style='position: relative; display: inline;'>|</span>";
+        html += "<span style='position: relative; display: inline;'>" + format(end_range) + "</span>";
+        mirror = new Mirror($inputor);
+        return at_rect = mirror.create(html).rect();
+      };
+
+      InputCaret.prototype.getIEPosition = function(pos) {
+        var h, inputorOffset, offset, x, y;
+        offset = this.getIEOffset(pos);
+        inputorOffset = this.$inputor.offset();
+        x = offset.left - inputorOffset.left;
+        y = offset.top - inputorOffset.top;
+        h = offset.height;
+        return {
+          left: x,
+          top: y,
+          height: h
+        };
+      };
+
+      return InputCaret;
+
+    })();
+    Mirror = (function() {
+      Mirror.prototype.css_attr = ["borderBottomWidth", "borderLeftWidth", "borderRightWidth", "borderTopStyle", "borderRightStyle", "borderBottomStyle", "borderLeftStyle", "borderTopWidth", "boxSizing", "fontFamily", "fontSize", "fontWeight", "height", "letterSpacing", "lineHeight", "marginBottom", "marginLeft", "marginRight", "marginTop", "outlineWidth", "overflow", "overflowX", "overflowY", "paddingBottom", "paddingLeft", "paddingRight", "paddingTop", "textAlign", "textOverflow", "textTransform", "whiteSpace", "wordBreak", "wordWrap"];
+
+      function Mirror($inputor) {
+        this.$inputor = $inputor;
+      }
+
+      Mirror.prototype.mirrorCss = function() {
+        var css,
+          _this = this;
+        css = {
+          position: 'absolute',
+          left: -9999,
+          top: 0,
+          zIndex: -20000
+        };
+        if (this.$inputor.prop('tagName') === 'TEXTAREA') {
+          this.css_attr.push('width');
+        }
+        $.each(this.css_attr, function(i, p) {
+          return css[p] = _this.$inputor.css(p);
+        });
+        return css;
+      };
+
+      Mirror.prototype.create = function(html) {
+        this.$mirror = $('<div></div>');
+        this.$mirror.css(this.mirrorCss());
+        this.$mirror.html(html);
+        this.$inputor.after(this.$mirror);
+        return this;
+      };
+
+      Mirror.prototype.rect = function() {
+        var $flag, pos, rect;
+        $flag = this.$mirror.find("#caret");
+        pos = $flag.position();
+        rect = {
+          left: pos.left,
+          top: pos.top,
+          height: $flag.height()
+        };
+        this.$mirror.remove();
+        return rect;
+      };
+
+      return Mirror;
+
+    })();
+    Utils = {
+      contentEditable: function($inputor) {
+        return !!($inputor[0].contentEditable && $inputor[0].contentEditable === 'true');
+      }
+    };
+    methods = {
+      pos: function(pos) {
+        if (pos || pos === 0) {
+          return this.setPos(pos);
+        } else {
+          return this.getPos();
+        }
+      },
+      position: function(pos) {
+        if (oDocument.selection) {
+          return this.getIEPosition(pos);
+        } else {
+          return this.getPosition(pos);
+        }
+      },
+      offset: function(pos) {
+        var iOffset, offset;
+        offset = this.getOffset(pos);
+        if (oFrame) {
+          iOffset = $(oFrame).offset();
+          offset.top += iOffset.top;
+          offset.left += iOffset.left;
+        }
+        return offset;
+      }
+    };
+    oDocument = null;
+    oWindow = null;
+    oFrame = null;
+    setContextBy = function(settings) {
+      var iframe;
+      if (iframe = settings != null ? settings.iframe : void 0) {
+        oFrame = iframe;
+        oWindow = iframe.contentWindow;
+        return oDocument = iframe.contentDocument || oWindow.document;
+      } else {
+        oFrame = void 0;
+        oWindow = window;
+        return oDocument = document;
+      }
+    };
+    discoveryIframeOf = function($dom) {
+      var error;
+      oDocument = $dom[0].ownerDocument;
+      oWindow = oDocument.defaultView || oDocument.parentWindow;
+      try {
+        return oFrame = oWindow.frameElement;
+      } catch (_error) {
+        error = _error;
+      }
+    };
+    $.fn.caret = function(method, value, settings) {
+      var caret;
+      if (methods[method]) {
+        if ($.isPlainObject(value)) {
+          setContextBy(value);
+          value = void 0;
+        } else {
+          setContextBy(settings);
+        }
+        caret = Utils.contentEditable(this) ? new EditableCaret(this) : new InputCaret(this);
+        return methods[method].apply(caret, [value]);
+      } else {
+        return $.error("Method " + method + " does not exist on jQuery.caret");
+      }
+    };
+    $.fn.caret.EditableCaret = EditableCaret;
+    $.fn.caret.InputCaret = InputCaret;
+    $.fn.caret.Utils = Utils;
+    return $.fn.caret.apis = methods;
+  });
+
+}).call(this);
diff --git a/wp-content/plugins/buddypress/bp-core/js/jquery.caret.min.js b/wp-content/plugins/buddypress/bp-core/js/jquery.caret.min.js
new file mode 100644
index 000000000..3aa9226d3
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-core/js/jquery.caret.min.js
@@ -0,0 +1,2 @@
+/*! buddypress - v2.1.0 - 2014-10-06 9:39:07 PM UTC - https://wordpress.org/plugins/buddypress/ */
+(function(){!function(a){return"function"==typeof define&&define.amd?define(["jquery"],a):a(window.jQuery)}(function(a){"use strict";var b,c,d,e,f,g,h,i,j,k,l;return k="caret",b=function(){function b(a){this.$inputor=a,this.domInputor=this.$inputor[0]}return b.prototype.setPos=function(){return this.domInputor},b.prototype.getIEPosition=function(){return a.noop()},b.prototype.getPosition=function(){return a.noop()},b.prototype.getOldIEPos=function(){var a,b;return b=h.selection.createRange(),a=h.body.createTextRange(),a.moveToElementText(this.domInputor),a.setEndPoint("EndToEnd",b),a.text.length},b.prototype.getPos=function(){var a,b,c;return(c=this.range())?(a=c.cloneRange(),a.selectNodeContents(this.domInputor),a.setEnd(c.endContainer,c.endOffset),b=a.toString().length,a.detach(),b):h.selection?this.getOldIEPos():void 0},b.prototype.getOldIEOffset=function(){var a,b;return a=h.selection.createRange().duplicate(),a.moveStart("character",-1),b=a.getBoundingClientRect(),{height:b.bottom-b.top,left:b.left,top:b.top}},b.prototype.getOffset=function(){var b,c,d,e;if(j.getSelection&&(d=this.range())){if(d.endOffset-1<0)return null;b=d.cloneRange(),b.setStart(d.endContainer,d.endOffset-1),b.setEnd(d.endContainer,d.endOffset),e=b.getBoundingClientRect(),c={height:e.height,left:e.left+e.width,top:e.top},b.detach()}else h.selection&&(c=this.getOldIEOffset());return c&&!i&&(c.top+=a(j).scrollTop(),c.left+=a(j).scrollLeft()),c},b.prototype.range=function(){var a;if(j.getSelection)return a=j.getSelection(),a.rangeCount>0?a.getRangeAt(0):null},b}(),c=function(){function b(a){this.$inputor=a,this.domInputor=this.$inputor[0]}return b.prototype.getIEPos=function(){var a,b,c,d,e,f,g;return b=this.domInputor,f=h.selection.createRange(),e=0,f&&f.parentElement()===b&&(d=b.value.replace(/\r\n/g,"\n"),c=d.length,g=b.createTextRange(),g.moveToBookmark(f.getBookmark()),a=b.createTextRange(),a.collapse(!1),e=g.compareEndPoints("StartToEnd",a)>-1?c:-g.moveStart("character",-c)),e},b.prototype.getPos=function(){return h.selection?this.getIEPos():this.domInputor.selectionStart},b.prototype.setPos=function(a){var b,c;return b=this.domInputor,h.selection?(c=b.createTextRange(),c.move("character",a),c.select()):b.setSelectionRange&&b.setSelectionRange(a,a),b},b.prototype.getIEOffset=function(a){var b,c,d,e;return c=this.domInputor.createTextRange(),a||(a=this.getPos()),c.move("character",a),d=c.boundingLeft,e=c.boundingTop,b=c.boundingHeight,{left:d,top:e,height:b}},b.prototype.getOffset=function(b){var c,d,e;return c=this.$inputor,h.selection?(d=this.getIEOffset(b),d.top+=a(j).scrollTop()+c.scrollTop(),d.left+=a(j).scrollLeft()+c.scrollLeft(),d):(d=c.offset(),e=this.getPosition(b),d={left:d.left+e.left-c.scrollLeft(),top:d.top+e.top-c.scrollTop(),height:e.height})},b.prototype.getPosition=function(a){var b,c,e,f,g,h,i;return b=this.$inputor,f=function(a){return a.replace(/</g,"&lt").replace(/>/g,"&gt").replace(/`/g,"&#96").replace(/"/g,"&quot").replace(/\r\n|\r|\n/g,"<br />")},void 0===a&&(a=this.getPos()),i=b.val().slice(0,a),e=b.val().slice(a),g="<span style='position: relative; display: inline;'>"+f(i)+"</span>",g+="<span id='caret' style='position: relative; display: inline;'>|</span>",g+="<span style='position: relative; display: inline;'>"+f(e)+"</span>",h=new d(b),c=h.create(g).rect()},b.prototype.getIEPosition=function(a){var b,c,d,e,f;return d=this.getIEOffset(a),c=this.$inputor.offset(),e=d.left-c.left,f=d.top-c.top,b=d.height,{left:e,top:f,height:b}},b}(),d=function(){function b(a){this.$inputor=a}return b.prototype.css_attr=["borderBottomWidth","borderLeftWidth","borderRightWidth","borderTopStyle","borderRightStyle","borderBottomStyle","borderLeftStyle","borderTopWidth","boxSizing","fontFamily","fontSize","fontWeight","height","letterSpacing","lineHeight","marginBottom","marginLeft","marginRight","marginTop","outlineWidth","overflow","overflowX","overflowY","paddingBottom","paddingLeft","paddingRight","paddingTop","textAlign","textOverflow","textTransform","whiteSpace","wordBreak","wordWrap"],b.prototype.mirrorCss=function(){var b,c=this;return b={position:"absolute",left:-9999,top:0,zIndex:-2e4},"TEXTAREA"===this.$inputor.prop("tagName")&&this.css_attr.push("width"),a.each(this.css_attr,function(a,d){return b[d]=c.$inputor.css(d)}),b},b.prototype.create=function(b){return this.$mirror=a("<div></div>"),this.$mirror.css(this.mirrorCss()),this.$mirror.html(b),this.$inputor.after(this.$mirror),this},b.prototype.rect=function(){var a,b,c;return a=this.$mirror.find("#caret"),b=a.position(),c={left:b.left,top:b.top,height:a.height()},this.$mirror.remove(),c},b}(),e={contentEditable:function(a){return!(!a[0].contentEditable||"true"!==a[0].contentEditable)}},g={pos:function(a){return a||0===a?this.setPos(a):this.getPos()},position:function(a){return h.selection?this.getIEPosition(a):this.getPosition(a)},offset:function(b){var c,d;return d=this.getOffset(b),i&&(c=a(i).offset(),d.top+=c.top,d.left+=c.left),d}},h=null,j=null,i=null,l=function(a){var b;return(b=null!=a?a.iframe:void 0)?(i=b,j=b.contentWindow,h=b.contentDocument||j.document):(i=void 0,j=window,h=document)},f=function(a){var b;h=a[0].ownerDocument,j=h.defaultView||h.parentWindow;try{return i=j.frameElement}catch(c){b=c}},a.fn.caret=function(d,f,h){var i;return g[d]?(a.isPlainObject(f)?(l(f),f=void 0):l(h),i=e.contentEditable(this)?new b(this):new c(this),g[d].apply(i,[f])):a.error("Method "+d+" does not exist on jQuery.caret")},a.fn.caret.EditableCaret=b,a.fn.caret.InputCaret=c,a.fn.caret.Utils=e,a.fn.caret.apis=g})}).call(this);
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-core/js/jquery.caret.txt b/wp-content/plugins/buddypress/bp-core/js/jquery.caret.txt
new file mode 100644
index 000000000..36cd1c122
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-core/js/jquery.caret.txt
@@ -0,0 +1,22 @@
+Copyright (c) 2013 chord.luo@gmail.com
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
diff --git a/wp-content/plugins/buddypress/bp-core/js/widget-members.js b/wp-content/plugins/buddypress/bp-core/js/widget-members.js
index 6a8346eda..1db1ef241 100644
--- a/wp-content/plugins/buddypress/bp-core/js/widget-members.js
+++ b/wp-content/plugins/buddypress/bp-core/js/widget-members.js
@@ -1,17 +1,17 @@
 jQuery(document).ready( function() {
-	jQuery(".widget div#members-list-options a").on('click',
+	jQuery('.widget div#members-list-options a').on('click',
 		function() {
 			var link = this;
 			jQuery(link).addClass('loading');
 
-			jQuery(".widget div#members-list-options a").removeClass("selected");
+			jQuery('.widget div#members-list-options a').removeClass('selected');
 			jQuery(this).addClass('selected');
 
 			jQuery.post( ajaxurl, {
 				action: 'widget_members',
 				'cookie': encodeURIComponent(document.cookie),
-				'_wpnonce': jQuery("input#_wpnonce-members").val(),
-				'max-members': jQuery("input#members_widget_max").val(),
+				'_wpnonce': jQuery('input#_wpnonce-members').val(),
+				'max-members': jQuery('input#members_widget_max').val(),
 				'filter': jQuery(this).attr('id')
 			},
 			function(response)
@@ -29,20 +29,20 @@ function member_wiget_response(response) {
 	response = response.substr(0, response.length-1);
 	response = response.split('[[SPLIT]]');
 
-	if ( response[0] != "-1" ) {
-		jQuery(".widget ul#members-list").fadeOut(200,
+	if ( response[0] !== '-1' ) {
+		jQuery('.widget ul#members-list').fadeOut(200,
 			function() {
-				jQuery(".widget ul#members-list").html(response[1]);
-				jQuery(".widget ul#members-list").fadeIn(200);
+				jQuery('.widget ul#members-list').html(response[1]);
+				jQuery('.widget ul#members-list').fadeIn(200);
 			}
 		);
 
 	} else {
-		jQuery(".widget ul#members-list").fadeOut(200,
+		jQuery('.widget ul#members-list').fadeOut(200,
 			function() {
 				var message = '<p>' + response[1] + '</p>';
-				jQuery(".widget ul#members-list").html(message);
-				jQuery(".widget ul#members-list").fadeIn(200);
+				jQuery('.widget ul#members-list').html(message);
+				jQuery('.widget ul#members-list').fadeIn(200);
 			}
 		);
 	}
diff --git a/wp-content/plugins/buddypress/bp-core/js/widget-members.min.js b/wp-content/plugins/buddypress/bp-core/js/widget-members.min.js
index f53122706..f6a25feea 100644
--- a/wp-content/plugins/buddypress/bp-core/js/widget-members.min.js
+++ b/wp-content/plugins/buddypress/bp-core/js/widget-members.min.js
@@ -1 +1,2 @@
-jQuery(document).ready(function(){jQuery(".widget div#members-list-options a").on("click",function(){var a=this;jQuery(a).addClass("loading");jQuery(".widget div#members-list-options a").removeClass("selected");jQuery(this).addClass("selected");jQuery.post(ajaxurl,{action:"widget_members",cookie:encodeURIComponent(document.cookie),_wpnonce:jQuery("input#_wpnonce-members").val(),"max-members":jQuery("input#members_widget_max").val(),filter:jQuery(this).attr("id")},function(b){jQuery(a).removeClass("loading");member_wiget_response(b)});return false})});function member_wiget_response(a){a=a.substr(0,a.length-1);a=a.split("[[SPLIT]]");if(a[0]!="-1"){jQuery(".widget ul#members-list").fadeOut(200,function(){jQuery(".widget ul#members-list").html(a[1]);jQuery(".widget ul#members-list").fadeIn(200)})}else{jQuery(".widget ul#members-list").fadeOut(200,function(){var b="<p>"+a[1]+"</p>";jQuery(".widget ul#members-list").html(b);jQuery(".widget ul#members-list").fadeIn(200)})}};
\ No newline at end of file
+/*! buddypress - v2.1.0 - 2014-10-06 9:39:07 PM UTC - https://wordpress.org/plugins/buddypress/ */
+function member_wiget_response(a){a=a.substr(0,a.length-1),a=a.split("[[SPLIT]]"),"-1"!==a[0]?jQuery(".widget ul#members-list").fadeOut(200,function(){jQuery(".widget ul#members-list").html(a[1]),jQuery(".widget ul#members-list").fadeIn(200)}):jQuery(".widget ul#members-list").fadeOut(200,function(){var b="<p>"+a[1]+"</p>";jQuery(".widget ul#members-list").html(b),jQuery(".widget ul#members-list").fadeIn(200)})}jQuery(document).ready(function(){jQuery(".widget div#members-list-options a").on("click",function(){var a=this;return jQuery(a).addClass("loading"),jQuery(".widget div#members-list-options a").removeClass("selected"),jQuery(this).addClass("selected"),jQuery.post(ajaxurl,{action:"widget_members",cookie:encodeURIComponent(document.cookie),_wpnonce:jQuery("input#_wpnonce-members").val(),"max-members":jQuery("input#members_widget_max").val(),filter:jQuery(this).attr("id")},function(b){jQuery(a).removeClass("loading"),member_wiget_response(b)}),!1})});
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-forums/bp-forums-screens.php b/wp-content/plugins/buddypress/bp-forums/bp-forums-screens.php
index 2f2e53727..d9e308001 100644
--- a/wp-content/plugins/buddypress/bp-forums/bp-forums-screens.php
+++ b/wp-content/plugins/buddypress/bp-forums/bp-forums-screens.php
@@ -216,7 +216,7 @@ class BP_Forum_Legacy_Theme_Compat {
 			'post_author'    => 0,
 			'post_date'      => 0,
 			'post_content'   => '',
-			'post_type'      => 'bp_forum',
+			'post_type'      => 'page',
 			'post_status'    => 'publish',
 			'is_page'        => true,
 			'comment_status' => 'closed'
diff --git a/wp-content/plugins/buddypress/bp-forums/bp-forums-template.php b/wp-content/plugins/buddypress/bp-forums/bp-forums-template.php
index e1be39e73..27cc97598 100644
--- a/wp-content/plugins/buddypress/bp-forums/bp-forums-template.php
+++ b/wp-content/plugins/buddypress/bp-forums/bp-forums-template.php
@@ -1524,7 +1524,7 @@ function bp_forum_pagination_count() {
 		if ( 'tags' == $forum_template->type && !empty( $forum_template->search_terms ) )
 			$pag_filter = sprintf( __( ' matching tag "%s"', 'buddypress' ), $forum_template->search_terms );
 
-		return apply_filters( 'bp_get_forum_pagination_count', sprintf( _n( 'Viewing topic %s to %s (of %d topic%s)', 'Viewing topic %s to %s (of %d total topics%s)', $total, 'buddypress' ), $from_num, $to_num, $total, $pag_filter ), $from_num, $to_num, $total );
+		return apply_filters( 'bp_get_forum_pagination_count', sprintf( _n( 'Viewing 1 topic', 'Viewing %1$s - %2$s of %3$s topics', (int) $forum_template->total_topic_count, 'buddypress' ), $from_num, $to_num, $total, $pag_filter ), $from_num, $to_num, $total );
 	}
 
 /**
@@ -2163,7 +2163,7 @@ function bp_the_topic_pagination_count() {
 	$to_num = bp_core_number_format( ( $start_num + ( $topic_template->pag_num - 1  ) > $topic_template->total_post_count ) ? $topic_template->total_post_count : $start_num + ( $topic_template->pag_num - 1 ) );
 	$total = bp_core_number_format( $topic_template->total_post_count );
 
-	echo apply_filters( 'bp_the_topic_pagination_count', sprintf( _n( 'Viewing post %1$s to %2$s (%3$s post)', 'Viewing post %1$s to %2$s (%3$s total posts)', $total, 'buddypress' ), $from_num, $to_num, $total ), $from_num, $to_num, $total );
+	echo apply_filters( 'bp_the_topic_pagination_count', sprintf( _n( 'Viewing 1 post', 'Viewing %1$s - %2$s of %3$s posts', (int) $topic_template->total_post_count, 'buddypress' ), $from_num, $to_num, $total ), $from_num, $to_num, $total );
 }
 
 /**
diff --git a/wp-content/plugins/buddypress/bp-friends/bp-friends-activity.php b/wp-content/plugins/buddypress/bp-friends/bp-friends-activity.php
index 92ab0bfec..f5e32ed23 100644
--- a/wp-content/plugins/buddypress/bp-friends/bp-friends-activity.php
+++ b/wp-content/plugins/buddypress/bp-friends/bp-friends-activity.php
@@ -96,14 +96,18 @@ function friends_register_activity_actions() {
 		$bp->friends->id,
 		'friendship_accepted',
 		__( 'Friendships accepted', 'buddypress' ),
-		'bp_friends_format_activity_action_friendship_accepted'
+		'bp_friends_format_activity_action_friendship_accepted',
+		__( 'Friendships', 'buddypress' ),
+		array( 'activity', 'member' )
 	);
 
 	bp_activity_set_action(
 		$bp->friends->id,
 		'friendship_created',
 		__( 'New friendships', 'buddypress' ),
-		'bp_friends_format_activity_action_friendship_created'
+		'bp_friends_format_activity_action_friendship_created',
+		__( 'Friendships', 'buddypress' ),
+		array( 'activity', 'member' )
 	);
 
 	// < BP 1.6 backpat
diff --git a/wp-content/plugins/buddypress/bp-friends/bp-friends-classes.php b/wp-content/plugins/buddypress/bp-friends/bp-friends-classes.php
index 63c40ca13..2ceba5388 100644
--- a/wp-content/plugins/buddypress/bp-friends/bp-friends-classes.php
+++ b/wp-content/plugins/buddypress/bp-friends/bp-friends-classes.php
@@ -290,7 +290,9 @@ class BP_Friends_Friendship {
 		if ( empty( $user_id ) )
 			$user_id = bp_loggedin_user_id();
 
-		$filter = esc_sql( like_escape( $filter ) );
+		// Only search for matching strings at the beginning of the
+		// name (@todo - figure out why this restriction)
+		$search_terms_like = bp_esc_like( $filter ) . '%';
 
 		$pag_sql = '';
 		if ( !empty( $limit ) && !empty( $page ) )
@@ -307,11 +309,11 @@ class BP_Friends_Friendship {
 
 		// filter the user_ids based on the search criteria.
 		if ( bp_is_active( 'xprofile' ) ) {
-			$sql       = "SELECT DISTINCT user_id FROM {$bp->profile->table_name_data} WHERE user_id IN ({$fids}) AND value LIKE '{$filter}%%' {$pag_sql}";
-			$total_sql = "SELECT COUNT(DISTINCT user_id) FROM {$bp->profile->table_name_data} WHERE user_id IN ({$fids}) AND value LIKE '{$filter}%%'";
+			$sql       = $wpdb->prepare( "SELECT DISTINCT user_id FROM {$bp->profile->table_name_data} WHERE user_id IN ({$fids}) AND value LIKE %s {$pag_sql}", $search_terms_like );
+			$total_sql = $wpdb->prepare( "SELECT COUNT(DISTINCT user_id) FROM {$bp->profile->table_name_data} WHERE user_id IN ({$fids}) AND value LIKE %s", $search_terms_like );
 		} else {
-			$sql       = "SELECT DISTINCT user_id FROM {$wpdb->usermeta} WHERE user_id IN ({$fids}) AND meta_key = 'nickname' AND meta_value LIKE '{$filter}%%' {$pag_sql}";
-			$total_sql = "SELECT COUNT(DISTINCT user_id) FROM {$wpdb->usermeta} WHERE user_id IN ({$fids}) AND meta_key = 'nickname' AND meta_value LIKE '{$filter}%%'";
+			$sql       = $wpdb->prepare( "SELECT DISTINCT user_id FROM {$wpdb->usermeta} WHERE user_id IN ({$fids}) AND meta_key = 'nickname' AND meta_value LIKE %s' {$pag_sql}", $search_terms_like );
+			$total_sql = $wpdb->prepare( "SELECT COUNT(DISTINCT user_id) FROM {$wpdb->usermeta} WHERE user_id IN ({$fids}) AND meta_key = 'nickname' AND meta_value LIKE %s", $search_terms_like );
 		}
 
 		$filtered_friend_ids = $wpdb->get_col( $sql );
@@ -443,7 +445,9 @@ class BP_Friends_Friendship {
 	public static function search_users( $filter, $user_id, $limit = null, $page = null ) {
 		global $wpdb, $bp;
 
-		$filter = esc_sql( like_escape( $filter ) );
+		// Only search for matching strings at the beginning of the
+		// name (@todo - figure out why this restriction)
+		$search_terms_like = bp_esc_like( $filter ) . '%';
 
 		$usermeta_table = $wpdb->base_prefix . 'usermeta';
 		$users_table    = $wpdb->base_prefix . 'users';
@@ -454,9 +458,9 @@ class BP_Friends_Friendship {
 
 		// filter the user_ids based on the search criteria.
 		if ( bp_is_active( 'xprofile' ) ) {
-			$sql = "SELECT DISTINCT d.user_id as id FROM {$bp->profile->table_name_data} d, {$users_table} u WHERE d.user_id = u.id AND d.value LIKE '{$filter}%%' ORDER BY d.value DESC {$pag_sql}";
+			$sql = $wpdb->prepare( "SELECT DISTINCT d.user_id as id FROM {$bp->profile->table_name_data} d, {$users_table} u WHERE d.user_id = u.id AND d.value LIKE %s ORDER BY d.value DESC {$pag_sql}", $search_terms_like );
 		} else {
-			$sql = "SELECT DISTINCT user_id as id FROM {$usermeta_table} WHERE meta_value LIKE '{$filter}%%' ORDER BY d.value DESC {$pag_sql}";
+			$sql = $wpdb->prepare( "SELECT DISTINCT user_id as id FROM {$usermeta_table} WHERE meta_value LIKE %s ORDER BY d.value DESC {$pag_sql}", $search_terms_like );
 		}
 
 		$filtered_fids = $wpdb->get_col($sql);
@@ -478,16 +482,18 @@ class BP_Friends_Friendship {
 	public static function search_users_count( $filter ) {
 		global $wpdb, $bp;
 
-		$filter = esc_sql( like_escape( $filter ) );
+		// Only search for matching strings at the beginning of the
+		// name (@todo - figure out why this restriction)
+		$search_terms_like = bp_esc_like( $filter ) . '%';
 
 		$usermeta_table = $wpdb->prefix . 'usermeta';
 		$users_table    = $wpdb->base_prefix . 'users';
 
 		// filter the user_ids based on the search criteria.
 		if ( bp_is_active( 'xprofile' ) ) {
-			$sql = "SELECT COUNT(DISTINCT d.user_id) FROM {$bp->profile->table_name_data} d, {$users_table} u WHERE d.user_id = u.id AND d.value LIKE '{$filter}%%'";
+			$sql = $wpdb->prepare( "SELECT COUNT(DISTINCT d.user_id) FROM {$bp->profile->table_name_data} d, {$users_table} u WHERE d.user_id = u.id AND d.value LIKE %s", $search_terms_like );
 		} else {
-			$sql = "SELECT COUNT(DISTINCT user_id) FROM {$usermeta_table} WHERE meta_value LIKE '{$filter}%%'";
+			$sql = $wpdb->prepare( "SELECT COUNT(DISTINCT user_id) FROM {$usermeta_table} WHERE meta_value LIKE %s", $search_terms_like );
 		}
 
 		$user_count = $wpdb->get_col($sql);
diff --git a/wp-content/plugins/buddypress/bp-friends/bp-friends-filters.php b/wp-content/plugins/buddypress/bp-friends/bp-friends-filters.php
index 9c66de1aa..6ada0e7ca 100644
--- a/wp-content/plugins/buddypress/bp-friends/bp-friends-filters.php
+++ b/wp-content/plugins/buddypress/bp-friends/bp-friends-filters.php
@@ -38,7 +38,14 @@ function bp_friends_filter_user_query_populate_extras( BP_User_Query $user_query
 		$friend_id = bp_loggedin_user_id() == $fs->initiator_user_id ? $fs->friend_user_id : $fs->initiator_user_id;
 
 		if ( isset( $user_query->results[ $friend_id ] ) ) {
-			$user_query->results[ $friend_id ]->is_friend = $fs->is_confirmed;
+			if ( 0 == $fs->is_confirmed ) {
+				$status = $fs->initiator_user_id == bp_loggedin_user_id() ? 'pending' : 'awaiting_response';
+			} else {
+				$status = 'is_friend';
+			}
+
+			$user_query->results[ $friend_id ]->is_friend         = $fs->is_confirmed;
+			$user_query->results[ $friend_id ]->friendship_status = $status;
 		}
 	}
 }
diff --git a/wp-content/plugins/buddypress/bp-friends/bp-friends-functions.php b/wp-content/plugins/buddypress/bp-friends/bp-friends-functions.php
index 67780dd31..0e4a4021e 100644
--- a/wp-content/plugins/buddypress/bp-friends/bp-friends-functions.php
+++ b/wp-content/plugins/buddypress/bp-friends/bp-friends-functions.php
@@ -195,13 +195,28 @@ function friends_check_friendship( $user_id, $possible_friend_id ) {
 /**
  * Get the friendship status of two friends.
  *
- * Will return 'is_friends', 'not_friends', or 'pending'.
+ * Will return 'is_friends', 'not_friends', 'pending' or 'awaiting_response'.
  *
  * @param int $user_id ID of the first user.
  * @param int $possible_friend_id ID of the other user.
  * @return string Friend status of the two users.
  */
 function friends_check_friendship_status( $user_id, $possible_friend_id ) {
+	global $members_template;
+
+	// check the BP_User_Query first
+	// @see bp_friends_filter_user_query_populate_extras()
+	if ( ! empty( $members_template->in_the_loop ) ) {
+		if ( isset( $members_template->member->friendship_status ) ) {
+			return $members_template->member->friendship_status;
+
+		// make sure that the friends BP_User_Query was registered before assuming
+		// status as 'not_friends'
+		} elseif ( has_filter( 'bp_user_query_populate_extras', 'bp_friends_filter_user_query_populate_extras' ) ) {
+			return 'not_friends';
+		}
+	}
+
 	return BP_Friends_Friendship::check_is_friend( $user_id, $possible_friend_id );
 }
 
@@ -551,3 +566,41 @@ function friends_remove_data( $user_id ) {
 add_action( 'wpmu_delete_user',  'friends_remove_data' );
 add_action( 'delete_user',       'friends_remove_data' );
 add_action( 'bp_make_spam_user', 'friends_remove_data' );
+
+/**
+ * Used by the Activity component's @mentions to print a JSON list of the current user's friends.
+ *
+ * This is intended to speed up @mentions lookups for a majority of use cases.
+ *
+ * @see bp_activity_mentions_script()
+ */
+function bp_friends_prime_mentions_results() {
+	if ( ! bp_activity_maybe_load_mentions_scripts() ) {
+		return;
+	}
+
+	$friends_query = array(
+		'count_total'     => '',                    // Prevents total count
+		'populate_extras' => false,
+
+		'type'            => 'alphabetical',
+		'user_id'         => get_current_user_id(),
+	);
+
+	$friends_query = new BP_User_Query( $friends_query );
+	$results       = array();
+
+	foreach ( $friends_query->results as $user ) {
+		$result        = new stdClass();
+		$result->ID    = $user->user_nicename;
+		$result->image = bp_core_fetch_avatar( array( 'html' => false, 'item_id' => $user->ID ) );
+		$result->name  = bp_core_get_user_displayname( $user->ID );
+
+		$results[] = $result;
+	}
+
+	wp_localize_script( 'bp-mentions', 'BP_Suggestions', array(
+		'friends' => $results,
+	) );
+}
+add_action( 'bp_activity_mentions_prime_results', 'bp_friends_prime_mentions_results' );
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-friends/bp-friends-loader.php b/wp-content/plugins/buddypress/bp-friends/bp-friends-loader.php
index 3545bfcc6..1fd1167cb 100644
--- a/wp-content/plugins/buddypress/bp-friends/bp-friends-loader.php
+++ b/wp-content/plugins/buddypress/bp-friends/bp-friends-loader.php
@@ -21,7 +21,7 @@ class BP_Friends_Component extends BP_Component {
 	public function __construct() {
 		parent::start(
 			'friends',
-			__( 'Friend Connections', 'buddypress' ),
+			_x( 'Friend Connections', 'Friends screen page <title>', 'buddypress' ),
 			buddypress()->plugin_dir,
 			array(
 				'adminbar_myaccount_order' => 60
@@ -137,7 +137,7 @@ class BP_Friends_Component extends BP_Component {
 
 		// Add the subnav items to the friends nav item
 		$sub_nav[] = array(
-			'name'            => __( 'Friendships', 'buddypress' ),
+			'name'            => _x( 'Friendships', 'Friends screen sub nav', 'buddypress' ),
 			'slug'            => 'my-friends',
 			'parent_url'      => $friends_link,
 			'parent_slug'     => bp_get_friends_slug(),
@@ -147,7 +147,7 @@ class BP_Friends_Component extends BP_Component {
 		);
 
 		$sub_nav[] = array(
-			'name'            => __( 'Requests',   'buddypress' ),
+			'name'            => _x( 'Requests', 'Friends screen sub nav', 'buddypress' ),
 			'slug'            => 'requests',
 			'parent_url'      => $friends_link,
 			'parent_slug'     => bp_get_friends_slug(),
@@ -182,11 +182,11 @@ class BP_Friends_Component extends BP_Component {
 			// Pending friend requests
 			$count = count( friends_get_friendship_request_user_ids( bp_loggedin_user_id() ) );
 			if ( !empty( $count ) ) {
-				$title   = sprintf( __( 'Friends <span class="count">%s</span>',          'buddypress' ), number_format_i18n( $count ) );
-				$pending = sprintf( __( 'Pending Requests <span class="count">%s</span>', 'buddypress' ), number_format_i18n( $count ) );
+				$title   = sprintf( _x( 'Friends <span class="count">%s</span>', 'My Account Friends menu', 'buddypress' ), number_format_i18n( $count ) );
+				$pending = sprintf( _x( 'Pending Requests <span class="count">%s</span>', 'My Account Friends menu sub nav', 'buddypress' ), number_format_i18n( $count ) );
 			} else {
-				$title   = __( 'Friends',             'buddypress' );
-				$pending = __( 'No Pending Requests', 'buddypress' );
+				$title   = _x( 'Friends', 'My Account Friends menu', 'buddypress' );
+				$pending = _x( 'No Pending Requests','My Account Friends menu sub nav', 'buddypress' );
 			}
 
 			// Add the "My Account" sub menus
@@ -197,11 +197,11 @@ class BP_Friends_Component extends BP_Component {
 				'href'   => trailingslashit( $friends_link )
 			);
 
-			// My Groups
+			// My Friends
 			$wp_admin_nav[] = array(
 				'parent' => 'my-account-' . $this->id,
 				'id'     => 'my-account-' . $this->id . '-friendships',
-				'title'  => __( 'Friendships', 'buddypress' ),
+				'title'  => _x( 'Friendships', 'My Account Friends menu sub nav', 'buddypress' ),
 				'href'   => trailingslashit( $friends_link )
 			);
 
diff --git a/wp-content/plugins/buddypress/bp-friends/bp-friends-screens.php b/wp-content/plugins/buddypress/bp-friends/bp-friends-screens.php
index 9beddd325..381c8d264 100644
--- a/wp-content/plugins/buddypress/bp-friends/bp-friends-screens.php
+++ b/wp-content/plugins/buddypress/bp-friends/bp-friends-screens.php
@@ -82,7 +82,7 @@ function friends_screen_notification_settings() {
 		<thead>
 			<tr>
 				<th class="icon"></th>
-				<th class="title"><?php _e( 'Friends', 'buddypress' ) ?></th>
+				<th class="title"><?php _ex( 'Friends', 'Friend settings on notification settings page', 'buddypress' ) ?></th>
 				<th class="yes"><?php _e( 'Yes', 'buddypress' ) ?></th>
 				<th class="no"><?php _e( 'No', 'buddypress' )?></th>
 			</tr>
@@ -91,13 +91,13 @@ function friends_screen_notification_settings() {
 		<tbody>
 			<tr id="friends-notification-settings-request">
 				<td></td>
-				<td><?php _e( 'A member sends you a friendship request', 'buddypress' ) ?></td>
+				<td><?php _ex( 'A member sends you a friendship request', 'Friend settings on notification settings page', 'buddypress' ) ?></td>
 				<td class="yes"><input type="radio" name="notifications[notification_friends_friendship_request]" value="yes" <?php checked( $send_requests, 'yes', true ) ?>/></td>
 				<td class="no"><input type="radio" name="notifications[notification_friends_friendship_request]" value="no" <?php checked( $send_requests, 'no', true ) ?>/></td>
 			</tr>
 			<tr id="friends-notification-settings-accepted">
 				<td></td>
-				<td><?php _e( 'A member accepts your friendship request', 'buddypress' ) ?></td>
+				<td><?php _ex( 'A member accepts your friendship request', 'Friend settings on notification settings page', 'buddypress' ) ?></td>
 				<td class="yes"><input type="radio" name="notifications[notification_friends_friendship_accepted]" value="yes" <?php checked( $accept_requests, 'yes', true ) ?>/></td>
 				<td class="no"><input type="radio" name="notifications[notification_friends_friendship_accepted]" value="no" <?php checked( $accept_requests, 'no', true ) ?>/></td>
 			</tr>
diff --git a/wp-content/plugins/buddypress/bp-friends/bp-friends-template.php b/wp-content/plugins/buddypress/bp-friends/bp-friends-template.php
index 5d41c7846..d9ffa8d3d 100644
--- a/wp-content/plugins/buddypress/bp-friends/bp-friends-template.php
+++ b/wp-content/plugins/buddypress/bp-friends/bp-friends-template.php
@@ -187,17 +187,12 @@ function bp_friend_search_form() {
 }
 
 /**
- * Output the Add Friend button in member directories.
+ * Output the "Add Friend" button in the member loop.
+ *
+ * @since BuddyPress (1.2.6)
  */
 function bp_member_add_friend_button() {
-	global $members_template;
-
-	if ( !isset( $members_template->member->is_friend ) || null === $members_template->member->is_friend )
-		$friend_status = 'not_friends';
-	else
-		$friend_status = ( 0 == $members_template->member->is_friend ) ? 'pending' : 'is_friend';
-
-	echo bp_get_add_friend_button( $members_template->member->id, $friend_status );
+	bp_add_friend_button( bp_get_member_user_id() );
 }
 add_action( 'bp_directory_members_actions', 'bp_member_add_friend_button' );
 
diff --git a/wp-content/plugins/buddypress/bp-friends/bp-friends-widgets.php b/wp-content/plugins/buddypress/bp-friends/bp-friends-widgets.php
index bfbdd3a76..5116ca384 100644
--- a/wp-content/plugins/buddypress/bp-friends/bp-friends-widgets.php
+++ b/wp-content/plugins/buddypress/bp-friends/bp-friends-widgets.php
@@ -20,6 +20,13 @@ function bp_friends_register_widgets() {
 		return;
 	}
 
+	// The Friends widget works only when looking an a displayed user,
+	// and the concept of "displayed user" doesn't exist on non-root blogs,
+	// so we don't register the widget there.
+	if ( ! bp_is_root_blog() ) {
+		return;
+	}
+
 	add_action( 'widgets_init', create_function( '', 'return register_widget("BP_Core_Friends_Widget");' ) );
 }
 add_action( 'bp_register_widgets', 'bp_friends_register_widgets' );
diff --git a/wp-content/plugins/buddypress/bp-friends/js/widget-friends.js b/wp-content/plugins/buddypress/bp-friends/js/widget-friends.js
index 9a1367de8..98e09126c 100644
--- a/wp-content/plugins/buddypress/bp-friends/js/widget-friends.js
+++ b/wp-content/plugins/buddypress/bp-friends/js/widget-friends.js
@@ -1,17 +1,17 @@
 jQuery(document).ready( function() {
-	jQuery(".widget div#friends-list-options a").on('click',
+	jQuery('.widget div#friends-list-options a').on('click',
 		function() {
 			var link = this;
 			jQuery(link).addClass('loading');
 
-			jQuery(".widget div#friends-list-options a").removeClass("selected");
+			jQuery('.widget div#friends-list-options a').removeClass('selected');
 			jQuery(this).addClass('selected');
 
 			jQuery.post( ajaxurl, {
 				action: 'widget_friends',
 				'cookie': encodeURIComponent(document.cookie),
-				'_wpnonce': jQuery("input#_wpnonce-friends").val(),
-				'max-friends': jQuery("input#friends_widget_max").val(),
+				'_wpnonce': jQuery('input#_wpnonce-friends').val(),
+				'max-friends': jQuery('input#friends_widget_max').val(),
 				'filter': jQuery(this).attr('id')
 			},
 			function(response)
@@ -29,21 +29,21 @@ function friend_wiget_response(response) {
 	response = response.substr(0, response.length-1);
 	response = response.split('[[SPLIT]]');
 
-	if ( response[0] != "-1" ) {
-		jQuery(".widget ul#friends-list").fadeOut(200,
+	if ( response[0] !== '-1' ) {
+		jQuery('.widget ul#friends-list').fadeOut(200,
 			function() {
-				jQuery(".widget ul#friends-list").html(response[1]);
-				jQuery(".widget ul#friends-list").fadeIn(200);
+				jQuery('.widget ul#friends-list').html(response[1]);
+				jQuery('.widget ul#friends-list').fadeIn(200);
 			}
 		);
 
 	} else {
-		jQuery(".widget ul#friends-list").fadeOut(200,
+		jQuery('.widget ul#friends-list').fadeOut(200,
 			function() {
 				var message = '<p>' + response[1] + '</p>';
-				jQuery(".widget ul#friends-list").html(message);
-				jQuery(".widget ul#friends-list").fadeIn(200);
+				jQuery('.widget ul#friends-list').html(message);
+				jQuery('.widget ul#friends-list').fadeIn(200);
 			}
 		);
 	}
-}
\ No newline at end of file
+}
diff --git a/wp-content/plugins/buddypress/bp-friends/js/widget-friends.min.js b/wp-content/plugins/buddypress/bp-friends/js/widget-friends.min.js
index d26bc88d9..6b5588ebb 100644
--- a/wp-content/plugins/buddypress/bp-friends/js/widget-friends.min.js
+++ b/wp-content/plugins/buddypress/bp-friends/js/widget-friends.min.js
@@ -1 +1,2 @@
-jQuery(document).ready(function(){jQuery(".widget div#friends-list-options a").on("click",function(){var a=this;jQuery(a).addClass("loading");jQuery(".widget div#friends-list-options a").removeClass("selected");jQuery(this).addClass("selected");jQuery.post(ajaxurl,{action:"widget_friends",cookie:encodeURIComponent(document.cookie),_wpnonce:jQuery("input#_wpnonce-friends").val(),"max-friends":jQuery("input#friends_widget_max").val(),filter:jQuery(this).attr("id")},function(b){jQuery(a).removeClass("loading");friend_wiget_response(b)});return false})});function friend_wiget_response(a){a=a.substr(0,a.length-1);a=a.split("[[SPLIT]]");if(a[0]!="-1"){jQuery(".widget ul#friends-list").fadeOut(200,function(){jQuery(".widget ul#friends-list").html(a[1]);jQuery(".widget ul#friends-list").fadeIn(200)})}else{jQuery(".widget ul#friends-list").fadeOut(200,function(){var b="<p>"+a[1]+"</p>";jQuery(".widget ul#friends-list").html(b);jQuery(".widget ul#friends-list").fadeIn(200)})}};
\ No newline at end of file
+/*! buddypress - v2.1.0 - 2014-10-06 9:39:07 PM UTC - https://wordpress.org/plugins/buddypress/ */
+function friend_wiget_response(a){a=a.substr(0,a.length-1),a=a.split("[[SPLIT]]"),"-1"!==a[0]?jQuery(".widget ul#friends-list").fadeOut(200,function(){jQuery(".widget ul#friends-list").html(a[1]),jQuery(".widget ul#friends-list").fadeIn(200)}):jQuery(".widget ul#friends-list").fadeOut(200,function(){var b="<p>"+a[1]+"</p>";jQuery(".widget ul#friends-list").html(b),jQuery(".widget ul#friends-list").fadeIn(200)})}jQuery(document).ready(function(){jQuery(".widget div#friends-list-options a").on("click",function(){var a=this;return jQuery(a).addClass("loading"),jQuery(".widget div#friends-list-options a").removeClass("selected"),jQuery(this).addClass("selected"),jQuery.post(ajaxurl,{action:"widget_friends",cookie:encodeURIComponent(document.cookie),_wpnonce:jQuery("input#_wpnonce-friends").val(),"max-friends":jQuery("input#friends_widget_max").val(),filter:jQuery(this).attr("id")},function(b){jQuery(a).removeClass("loading"),friend_wiget_response(b)}),!1})});
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-groups/admin/css/admin-rtl.css b/wp-content/plugins/buddypress/bp-groups/admin/css/admin-rtl.css
new file mode 100644
index 000000000..40bac3b5f
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-groups/admin/css/admin-rtl.css
@@ -0,0 +1,86 @@
+body.toplevel_page_bp-groups table.groups th#status,
+body.toplevel_page_bp-groups table.groups th#members {
+	width: 10%;
+}
+
+body.toplevel_page_bp-groups table.groups th#last_active {
+	width: 15%;
+}
+
+#bp-groups-form .avatar {
+	float: right;
+	margin-left: 10px;
+	margin-top: 1px;
+}
+#bp-groups-edit-form input {
+	outline: medium none;
+}
+#bp-groups-edit-form input#bp-groups-name {
+	font-size: 1.7em;
+	width: 100%;
+	margin-bottom: 6px;
+}
+#bp-groups-edit-form input#bp-groups-new-members {
+	width: 100%;
+	max-width: 90%;
+	border: 0;
+}
+#bp-groups-new-members-list {
+	margin: 0;
+}
+#bp_group_settings legend {
+	margin: 10px 0;
+	font-weight: bold;
+}
+#bp_group_settings ul {
+	margin: 0;
+}
+.bp-groups-settings-section {
+	margin-top: 10px;
+}
+#bp-groups-permalink-box {
+	line-height: 24px;
+	color: #666;
+}
+.bp-groups-member-type {
+	position: relative;
+}
+.bp-groups-member-type > h4 {
+	margin-bottom: .5em;
+}
+ul.bp-group-delete-list {
+	list-style-type: disc;
+	margin: 4px 26px;
+}
+.bp-group-admin-pagination {
+	position: absolute;
+	text-align: left;
+	width: 100%;
+}
+.bp-group-admin-pagination.table-top {
+	top: 0;
+}
+.bp-group-admin-pagination.table-bottom {
+	bottom: 0;
+}
+.bp-group-admin-pagination-viewing {
+	color: #777;
+	font-size: 12px;
+	font-style: italic;
+}
+.bp-group-admin-pagination-links {
+	white-space: nowrap;
+	padding-right: 15px;
+}
+
+table.bp-group-members .uid-column {
+	padding-right: 20px;
+	padding-left: 20px;
+}
+table.bp-group-members .uname-column {
+	width: 70%;
+}
+table.bp-group-members .urole-column {
+	padding-right: 20px;
+	padding-left: 20px;
+}
diff --git a/wp-content/plugins/buddypress/bp-groups/admin/css/admin-rtl.min.css b/wp-content/plugins/buddypress/bp-groups/admin/css/admin-rtl.min.css
new file mode 100644
index 000000000..b4fb43925
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-groups/admin/css/admin-rtl.min.css
@@ -0,0 +1,2 @@
+/*! buddypress - v2.1.0 - 2014-10-06 9:39:09 PM UTC - https://wordpress.org/plugins/buddypress/ */
+body.toplevel_page_bp-groups table.groups th#members,body.toplevel_page_bp-groups table.groups th#status{width:10%}body.toplevel_page_bp-groups table.groups th#last_active{width:15%}#bp-groups-form .avatar{float:right;margin-left:10px;margin-top:1px}#bp-groups-edit-form input{outline:0}#bp-groups-edit-form input#bp-groups-name{font-size:1.7em;width:100%;margin-bottom:6px}#bp-groups-edit-form input#bp-groups-new-members{width:100%;max-width:90%;border:0}#bp-groups-new-members-list{margin:0}#bp_group_settings legend{margin:10px 0;font-weight:700}#bp_group_settings ul{margin:0}.bp-groups-settings-section{margin-top:10px}#bp-groups-permalink-box{line-height:24px;color:#666}.bp-groups-member-type{position:relative}.bp-groups-member-type>h4{margin-bottom:.5em}ul.bp-group-delete-list{list-style-type:disc;margin:4px 26px}.bp-group-admin-pagination{position:absolute;text-align:left;width:100%}.bp-group-admin-pagination.table-top{top:0}.bp-group-admin-pagination.table-bottom{bottom:0}.bp-group-admin-pagination-viewing{color:#777;font-size:12px;font-style:italic}.bp-group-admin-pagination-links{white-space:nowrap;padding-right:15px}table.bp-group-members .uid-column{padding-right:20px;padding-left:20px}table.bp-group-members .uname-column{width:70%}table.bp-group-members .urole-column{padding-right:20px;padding-left:20px}
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-groups/admin/css/admin.css b/wp-content/plugins/buddypress/bp-groups/admin/css/admin.css
index 7c6d451de..651a6d537 100644
--- a/wp-content/plugins/buddypress/bp-groups/admin/css/admin.css
+++ b/wp-content/plugins/buddypress/bp-groups/admin/css/admin.css
@@ -7,25 +7,43 @@ body.toplevel_page_bp-groups table.groups th#last_active {
 	width: 15%;
 }
 
+#bp-groups-form .avatar {
+	float: left;
+	margin-right: 10px;
+	margin-top: 1px;
+}
 #bp-groups-edit-form input {
 	outline: medium none;
-	padding: 3px 8px;
 }
 #bp-groups-edit-form input#bp-groups-name {
 	font-size: 1.7em;
 	width: 100%;
+	margin-bottom: 6px;
 }
 #bp-groups-edit-form input#bp-groups-new-members {
 	width: 100%;
 	max-width: 90%;
 	border: 0;
 }
+#bp-groups-new-members-list {
+	margin: 0;
+}
+#bp_group_settings legend {
+	margin: 10px 0;
+	font-weight: bold;
+}
+#bp_group_settings ul {
+	margin: 0;
+}
 .bp-groups-settings-section {
-	margin-bottom: 15px;
+	margin-top: 10px;
+}
+#bp-groups-permalink-box {
+	line-height: 24px;
+	color: #666;
 }
 .bp-groups-member-type {
 	position: relative;
-	padding-bottom: 1.7em;
 }
 .bp-groups-member-type > h4 {
 	margin-bottom: .5em;
@@ -54,3 +72,15 @@ ul.bp-group-delete-list {
 	white-space: nowrap;
 	padding-left: 15px;
 }
+
+table.bp-group-members .uid-column {
+	padding-left: 20px;
+	padding-right: 20px;
+}
+table.bp-group-members .uname-column {
+	width: 70%;
+}
+table.bp-group-members .urole-column {
+	padding-left: 20px;
+	padding-right: 20px;
+}
diff --git a/wp-content/plugins/buddypress/bp-groups/admin/css/admin.min.css b/wp-content/plugins/buddypress/bp-groups/admin/css/admin.min.css
index f5841b4c2..66ec40d00 100644
--- a/wp-content/plugins/buddypress/bp-groups/admin/css/admin.min.css
+++ b/wp-content/plugins/buddypress/bp-groups/admin/css/admin.min.css
@@ -1 +1,2 @@
-body.toplevel_page_bp-groups table.groups th#status,body.toplevel_page_bp-groups table.groups th#members{width:10%}body.toplevel_page_bp-groups table.groups th#last_active{width:15%}#bp-groups-edit-form input{outline:medium none;padding:3px 8px}#bp-groups-edit-form input#bp-groups-name{font-size:1.7em;width:100%}#bp-groups-edit-form input#bp-groups-new-members{width:100%;max-width:90%;border:0}.bp-groups-settings-section{margin-bottom:15px}.bp-groups-member-type{position:relative;padding-bottom:1.7em}.bp-groups-member-type>h4{margin-bottom:.5em}ul.bp-group-delete-list{list-style-type:disc;margin:4px 26px}.bp-group-admin-pagination{position:absolute;text-align:right;width:100%}.bp-group-admin-pagination.table-top{top:0}.bp-group-admin-pagination.table-bottom{bottom:0}.bp-group-admin-pagination-viewing{color:#777;font-size:12px;font-style:italic}.bp-group-admin-pagination-links{white-space:nowrap;padding-left:15px}
\ No newline at end of file
+/*! buddypress - v2.1.0 - 2014-10-06 9:39:09 PM UTC - https://wordpress.org/plugins/buddypress/ */
+body.toplevel_page_bp-groups table.groups th#members,body.toplevel_page_bp-groups table.groups th#status{width:10%}body.toplevel_page_bp-groups table.groups th#last_active{width:15%}#bp-groups-form .avatar{float:left;margin-right:10px;margin-top:1px}#bp-groups-edit-form input{outline:0}#bp-groups-edit-form input#bp-groups-name{font-size:1.7em;width:100%;margin-bottom:6px}#bp-groups-edit-form input#bp-groups-new-members{width:100%;max-width:90%;border:0}#bp-groups-new-members-list{margin:0}#bp_group_settings legend{margin:10px 0;font-weight:700}#bp_group_settings ul{margin:0}.bp-groups-settings-section{margin-top:10px}#bp-groups-permalink-box{line-height:24px;color:#666}.bp-groups-member-type{position:relative}.bp-groups-member-type>h4{margin-bottom:.5em}ul.bp-group-delete-list{list-style-type:disc;margin:4px 26px}.bp-group-admin-pagination{position:absolute;text-align:right;width:100%}.bp-group-admin-pagination.table-top{top:0}.bp-group-admin-pagination.table-bottom{bottom:0}.bp-group-admin-pagination-viewing{color:#777;font-size:12px;font-style:italic}.bp-group-admin-pagination-links{white-space:nowrap;padding-left:15px}table.bp-group-members .uid-column{padding-left:20px;padding-right:20px}table.bp-group-members .uname-column{width:70%}table.bp-group-members .urole-column{padding-left:20px;padding-right:20px}
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-groups/admin/js/admin.js b/wp-content/plugins/buddypress/bp-groups/admin/js/admin.js
index bceacdef6..05c61e20b 100644
--- a/wp-content/plugins/buddypress/bp-groups/admin/js/admin.js
+++ b/wp-content/plugins/buddypress/bp-groups/admin/js/admin.js
@@ -1,14 +1,8 @@
+/* global BP_Group_Admin, group_id, isRtl */
+
 (function($) {
 	function add_member_to_list( e, ui ) {
-		var remove_id = 'bp-groups-remove-new-member-' + ui.item.value;
-		$('#bp-groups-new-members-list').append('<li><a href="#" class="bp-groups-remove-new-member" id="' + remove_id + '">x</a> ' + ui.item.label + '</li>');
-		$('#' + remove_id).bind('click', function(e) { remove_member_from_list(e); return false; });
-
-		$('#bp-groups-new-members-list').after('<input name="new_members[]" type="hidden" value="' + ui.item.value + '" />');
-	}
-
-	function remove_member_from_list( e ) {
-		$(e.target).closest('li').remove();
+		$('#bp-groups-new-members-list').append('<li data-login="' + ui.item.value + '"><a href="#" class="bp-groups-remove-new-member">x</a> ' + ui.item.label + '</li>');
 	}
 
 	var id = 'undefined' !== typeof group_id ? '&group_id=' + group_id : '';
@@ -25,9 +19,15 @@
 			close:     function() { $(this).removeClass('open'); $(this).val(''); },
 			select:    function( event, ui ) { add_member_to_list( event, ui ); }
 		});
-		
+
 		/* Replace noscript placeholder */
-		$( '#bp-groups-new-members' ).attr( 'placeholder', BP_Group_Admin.add_member_placeholder );
+		$( '#bp-groups-new-members' ).prop( 'placeholder', BP_Group_Admin.add_member_placeholder );
+
+		/* Remove a member on 'x' click */
+		$( '#bp_group_add_members' ).on( 'click', '.bp-groups-remove-new-member', function( e ) {
+			e.preventDefault();
+			$( e.target.parentNode ).remove();
+		} );
 
 		/* Warn before leaving unsaved changes */
 		$(document).on( 'change', 'input#bp-groups-name, input#bp-groups-description, select.bp-groups-role, #bp-groups-settings-section-status input[type="radio"]', function() {
@@ -35,10 +35,22 @@
 		});
 
 		$( 'input#save' ).on( 'click', function() {
+			/* Check for users to add */
+			var users_to_add = [];
+
+			$( '#bp-groups-new-members-list li' ).each( function() {
+				users_to_add.push( $(this).data('login' ) );
+			} );
+
+			/* There are users to add, include a comma separated list of users login in the main field */
+			if ( users_to_add.length ) {
+				$( '#bp-groups-new-members' ).val( '' ).val( users_to_add.join( ', ' ) );
+			}
+
 			window.warn_on_leave = false;
 		});
 
-		window.onbeforeunload = function(e) {
+		window.onbeforeunload = function() {
 			if ( window.warn_on_leave ) {
 				return BP_Group_Admin.warn_on_leave;
 			}
diff --git a/wp-content/plugins/buddypress/bp-groups/admin/js/admin.min.js b/wp-content/plugins/buddypress/bp-groups/admin/js/admin.min.js
index 85ff297d4..c8d28f6d4 100644
--- a/wp-content/plugins/buddypress/bp-groups/admin/js/admin.min.js
+++ b/wp-content/plugins/buddypress/bp-groups/admin/js/admin.min.js
@@ -1 +1,2 @@
-(function(c){function b(h,f){var g="bp-groups-remove-new-member-"+f.item.value;c("#bp-groups-new-members-list").append('<li><a href="#" class="bp-groups-remove-new-member" id="'+g+'">x</a> '+f.item.label+"</li>");c("#"+g).bind("click",function(i){a(i);return false});c("#bp-groups-new-members-list").after('<input name="new_members[]" type="hidden" value="'+f.item.value+'" />')}function a(f){c(f.target).closest("li").remove()}var d="undefined"!==typeof group_id?"&group_id="+group_id:"";c(document).ready(function(){window.warn_on_leave=false;c(".bp-suggest-user").autocomplete({source:ajaxurl+"?action=bp_group_admin_member_autocomplete"+d,delay:500,minLength:2,position:("undefined"!==typeof isRtl&&isRtl)?{my:"right top",at:"right bottom",offset:"0, -1"}:{offset:"0, -1"},open:function(){c(this).addClass("open")},close:function(){c(this).removeClass("open");c(this).val("")},select:function(e,f){b(e,f)}});c("#bp-groups-new-members").attr("placeholder",BP_Group_Admin.add_member_placeholder);c(document).on("change",'input#bp-groups-name, input#bp-groups-description, select.bp-groups-role, #bp-groups-settings-section-status input[type="radio"]',function(){window.warn_on_leave=true});c("input#save").on("click",function(){window.warn_on_leave=false});window.onbeforeunload=function(f){if(window.warn_on_leave){return BP_Group_Admin.warn_on_leave}}})})(jQuery);
\ No newline at end of file
+/*! buddypress - v2.1.0 - 2014-10-06 9:39:07 PM UTC - https://wordpress.org/plugins/buddypress/ */
+!function(a){function b(b,c){a("#bp-groups-new-members-list").append('<li data-login="'+c.item.value+'"><a href="#" class="bp-groups-remove-new-member">x</a> '+c.item.label+"</li>")}var c="undefined"!=typeof group_id?"&group_id="+group_id:"";a(document).ready(function(){window.warn_on_leave=!1,a(".bp-suggest-user").autocomplete({source:ajaxurl+"?action=bp_group_admin_member_autocomplete"+c,delay:500,minLength:2,position:"undefined"!=typeof isRtl&&isRtl?{my:"right top",at:"right bottom",offset:"0, -1"}:{offset:"0, -1"},open:function(){a(this).addClass("open")},close:function(){a(this).removeClass("open"),a(this).val("")},select:function(a,c){b(a,c)}}),a("#bp-groups-new-members").prop("placeholder",BP_Group_Admin.add_member_placeholder),a("#bp_group_add_members").on("click",".bp-groups-remove-new-member",function(b){b.preventDefault(),a(b.target.parentNode).remove()}),a(document).on("change",'input#bp-groups-name, input#bp-groups-description, select.bp-groups-role, #bp-groups-settings-section-status input[type="radio"]',function(){window.warn_on_leave=!0}),a("input#save").on("click",function(){var b=[];a("#bp-groups-new-members-list li").each(function(){b.push(a(this).data("login"))}),b.length&&a("#bp-groups-new-members").val("").val(b.join(", ")),window.warn_on_leave=!1}),window.onbeforeunload=function(){return window.warn_on_leave?BP_Group_Admin.warn_on_leave:void 0}})}(jQuery);
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-groups/bp-groups-actions.php b/wp-content/plugins/buddypress/bp-groups/bp-groups-actions.php
index 2a0ea8bad..163e40745 100644
--- a/wp-content/plugins/buddypress/bp-groups/bp-groups-actions.php
+++ b/wp-content/plugins/buddypress/bp-groups/bp-groups-actions.php
@@ -14,6 +14,83 @@
 // Exit if accessed directly
 if ( !defined( 'ABSPATH' ) ) exit;
 
+/**
+ * Protect access to single groups.
+ *
+ * @since BuddyPress (2.1.0)
+ */
+function bp_groups_group_access_protection() {
+	if ( ! bp_is_group() ) {
+		return;
+	}
+
+	$current_group   = groups_get_current_group();
+	$user_has_access = $current_group->user_has_access;
+	$no_access_args  = array();
+
+	if ( ! $user_has_access && 'hidden' !== $current_group->status ) {
+		// Always allow access to home and request-membership
+		if ( bp_is_current_action( 'home' ) || bp_is_current_action( 'request-membership' ) ) {
+			$user_has_access = true;
+
+		// User doesn't have access, so set up redirect args
+		} else if ( is_user_logged_in() ) {
+			$no_access_args = array(
+				'message'  => __( 'You do not have access to this group.', 'buddypress' ),
+				'root'     => bp_get_group_permalink( $current_group ) . 'home/',
+				'redirect' => false
+			);
+		}
+	}
+
+	// Protect the admin tab from non-admins
+	if ( bp_is_current_action( 'admin' ) && ! bp_is_item_admin() ) {
+		$user_has_access = false;
+		$no_access_args  = array(
+			'message'  => __( 'You are not an admin of this group.', 'buddypress' ),
+			'root'     => bp_get_group_permalink( $current_group ),
+			'redirect' => false
+		);
+	}
+
+	/**
+	 * Allow plugins to filter whether the current user has access to this group content.
+	 *
+	 * Note that if a plugin sets $user_has_access to false, it may also
+	 * want to change the $no_access_args, to avoid problems such as
+	 * logged-in users being redirected to wp-login.php.
+	 *
+	 * @since BuddyPress (2.1.0)
+	 *
+	 * @param bool $user_has_access True if the user has access to the
+	 *        content, otherwise false.
+	 * @param array $no_access_args Arguments to be passed to
+	 *        bp_core_no_access() in case of no access. Note that this
+	 *        value is passed by reference, so it can be modified by the
+	 *        filter callback.
+	 */
+	$user_has_access = apply_filters_ref_array( 'bp_group_user_has_access', array( $user_has_access, &$no_access_args ) );
+
+	// If user has access, we return rather than redirect
+	if ( $user_has_access ) {
+		return;
+	}
+
+	// Hidden groups should return a 404 for non-members.
+	// Unset the current group so that you're not redirected
+	// to the default group tab
+	if ( 'hidden' == $current_group->status ) {
+		buddypress()->groups->current_group = 0;
+		buddypress()->is_single_item        = false;
+		bp_do_404();
+		return;
+	} else {
+		bp_core_no_access( $no_access_args );
+	}
+
+}
+add_action( 'bp_actions', 'bp_groups_group_access_protection' );
+
 /**
  * Catch and process group creation form submissions.
  */
@@ -57,11 +134,11 @@ function groups_action_create_group() {
 
 	// Fetch the currently completed steps variable
 	if ( isset( $_COOKIE['bp_completed_create_steps'] ) && !isset( $reset_steps ) )
-		$bp->groups->completed_create_steps = unserialize( stripslashes( $_COOKIE['bp_completed_create_steps'] ) );
+		$bp->groups->completed_create_steps = json_decode( base64_decode( stripslashes( $_COOKIE['bp_completed_create_steps'] ) ) );
 
 	// Set the ID of the new group, if it has already been created in a previous step
 	if ( isset( $_COOKIE['bp_new_group_id'] ) ) {
-		$bp->groups->new_group_id = $_COOKIE['bp_new_group_id'];
+		$bp->groups->new_group_id = (int) $_COOKIE['bp_new_group_id'];
 		$bp->groups->current_group = groups_get_group( array( 'group_id' => $bp->groups->new_group_id ) );
 
 		// Only allow the group creator to continue to edit the new group
@@ -149,7 +226,7 @@ function groups_action_create_group() {
 
 		// Reset cookie info
 		setcookie( 'bp_new_group_id', $bp->groups->new_group_id, time()+60*60*24, COOKIEPATH );
-		setcookie( 'bp_completed_create_steps', serialize( $bp->groups->completed_create_steps ), time()+60*60*24, COOKIEPATH );
+		setcookie( 'bp_completed_create_steps', base64_encode( json_encode( $bp->groups->completed_create_steps ) ), time()+60*60*24, COOKIEPATH );
 
 		// If we have completed all steps and hit done on the final step we
 		// can redirect to the completed group
@@ -229,9 +306,9 @@ function groups_action_create_group() {
 			// Normally we would check a nonce here, but the group save nonce is used instead
 
 			if ( !bp_core_avatar_handle_crop( array( 'object' => 'group', 'avatar_dir' => 'group-avatars', 'item_id' => $bp->groups->current_group->id, 'original_file' => $_POST['image_src'], 'crop_x' => $_POST['x'], 'crop_y' => $_POST['y'], 'crop_w' => $_POST['w'], 'crop_h' => $_POST['h'] ) ) )
-				bp_core_add_message( __( 'There was an error saving the group avatar, please try uploading again.', 'buddypress' ), 'error' );
+				bp_core_add_message( __( 'There was an error saving the group profile photo, please try uploading again.', 'buddypress' ), 'error' );
 			else
-				bp_core_add_message( __( 'The group avatar was uploaded successfully!', 'buddypress' ) );
+				bp_core_add_message( __( 'The group profile photo was uploaded successfully!', 'buddypress' ) );
 		}
 	}
 
@@ -239,6 +316,9 @@ function groups_action_create_group() {
 }
 add_action( 'bp_actions', 'groups_action_create_group' );
 
+/**
+ * Catch and process "Join Group" button clicks.
+ */
 function groups_action_join_group() {
 	global $bp;
 
@@ -324,6 +404,8 @@ add_action( 'bp_actions', 'groups_action_leave_group' );
 
 /**
  * Sort the group creation steps.
+ *
+ * @return bool|null False on failure.
  */
 function groups_action_sort_creation_steps() {
 	global $bp;
@@ -366,6 +448,8 @@ add_action( 'bp_actions', 'groups_action_redirect_to_random_group' );
  * Load the activity feed for the current group.
  *
  * @since BuddyPress (1.2.0)
+ *
+ * @return bool|null False on failure.
  */
 function groups_action_group_feed() {
 
diff --git a/wp-content/plugins/buddypress/bp-groups/bp-groups-activity.php b/wp-content/plugins/buddypress/bp-groups/bp-groups-activity.php
index b7f1b1b5b..5d1a401a4 100644
--- a/wp-content/plugins/buddypress/bp-groups/bp-groups-activity.php
+++ b/wp-content/plugins/buddypress/bp-groups/bp-groups-activity.php
@@ -15,9 +15,11 @@ if ( !defined( 'ABSPATH' ) ) exit;
 
 /**
  * Register activity actions for the Groups component.
+ *
+ * @return bool|null False on failure.
  */
 function groups_register_activity_actions() {
-	global $bp;
+	$bp = buddypress();
 
 	if ( ! bp_is_active( 'activity' ) ) {
 		return false;
@@ -27,22 +29,41 @@ function groups_register_activity_actions() {
 		$bp->groups->id,
 		'created_group',
 		__( 'Created a group', 'buddypress' ),
-		'bp_groups_format_activity_action_created_group'
+		'bp_groups_format_activity_action_created_group',
+		__( 'New Groups', 'buddypress' ),
+		array( 'activity', 'member', 'member_groups' )
 	);
 
 	bp_activity_set_action(
 		$bp->groups->id,
 		'joined_group',
 		__( 'Joined a group', 'buddypress' ),
-		'bp_groups_format_activity_action_joined_group'
+		'bp_groups_format_activity_action_joined_group',
+		__( 'Group Memberships', 'buddypress' ),
+		array( 'activity', 'group', 'member', 'member_groups' )
 	);
 
 	// These actions are for the legacy forums
 	// Since the bbPress plugin also shares the same 'forums' identifier, we also
 	// check for the legacy forums loader class to be extra cautious
 	if ( bp_is_active( 'forums' ) && class_exists( 'BP_Forums_Component' ) ) {
-		bp_activity_set_action( $bp->groups->id, 'new_forum_topic', __( 'New group forum topic', 'buddypress' ) );
-		bp_activity_set_action( $bp->groups->id, 'new_forum_post',  __( 'New group forum post',  'buddypress' ) );
+		bp_activity_set_action(
+			$bp->groups->id,
+			'new_forum_topic',
+			__( 'New group forum topic', 'buddypress' ),
+			false,
+			__( 'Forum Topics', 'buddypress' ),
+			array( 'activity', 'group', 'member', 'member_groups' )
+		);
+
+		bp_activity_set_action(
+			$bp->groups->id,
+			'new_forum_post',
+			__( 'New group forum post',  'buddypress' ),
+			false,
+			__( 'Forum Replies', 'buddypress' ),
+			array( 'activity', 'group', 'member', 'member_groups' )
+		);
 	}
 
 	do_action( 'groups_register_activity_actions' );
@@ -144,7 +165,8 @@ function bp_groups_prefetch_activity_object_data( $activities ) {
 		}
 
 		if ( ! empty( $uncached_ids ) ) {
-			global $wpdb, $bp;
+			global $wpdb;
+			$bp = buddypress();
 			$uncached_ids_sql = implode( ',', wp_parse_id_list( $uncached_ids ) );
 			$groups = $wpdb->get_results( "SELECT * FROM {$bp->groups->table_name} WHERE id IN ({$uncached_ids_sql})" );
 			foreach ( $groups as $group ) {
@@ -219,6 +241,7 @@ function groups_record_activity( $args = '' ) {
  *
  * @param int $group_id Optional. The ID of the group whose last_activity is
  *        being updated. Default: the current group's ID.
+ * @return bool|null False on failure.
  */
 function groups_update_last_activity( $group_id = 0 ) {
 
@@ -241,8 +264,10 @@ add_action( 'groups_new_forum_topic_post', 'groups_update_last_activity' );
  * Add an activity stream item when a member joins a group
  *
  * @since BuddyPress (1.9.0)
- * @param int $user_id
- * @param int $group_id
+ *
+ * @param int $user_id ID of the user joining the group.
+ * @param int $group_id ID of the group.
+ * @return bool|null False on failure.
  */
 function bp_groups_membership_accepted_add_activity( $user_id, $group_id ) {
 
@@ -265,9 +290,11 @@ function bp_groups_membership_accepted_add_activity( $user_id, $group_id ) {
 add_action( 'groups_membership_accepted', 'bp_groups_membership_accepted_add_activity', 10, 2 );
 
 /**
- * Delete all group activity from activity streams
+ * Delete all activity items related to a specific group.
  *
  * @since BuddyPress (1.9.0)
+ *
+ * @param int $group_id ID of the group.
  */
 function bp_groups_delete_group_delete_all_activity( $group_id ) {
 	if ( bp_is_active( 'activity' ) ) {
@@ -280,14 +307,16 @@ function bp_groups_delete_group_delete_all_activity( $group_id ) {
 add_action( 'groups_delete_group', 'bp_groups_delete_group_delete_all_activity', 10 );
 
 /**
- * Delete group member activity if they leave or are removed within 5 minutes of
- * membership modification.
+ * Delete group member activity if they leave or are removed within 5 minutes of membership modification.
  *
  * If the user joined this group less than five minutes ago, remove the
  * joined_group activity so users cannot flood the activity stream by
  * joining/leaving the group in quick succession.
  *
  * @since BuddyPress (1.9.0)
+ *
+ * @param int $group_id ID of the group.
+ * @param int $user_id ID of the user leaving the group.
  */
 function bp_groups_leave_group_delete_recent_activity( $group_id, $user_id ) {
 
diff --git a/wp-content/plugins/buddypress/bp-groups/bp-groups-admin.php b/wp-content/plugins/buddypress/bp-groups/bp-groups-admin.php
index 82d74fedc..ffcbf94d2 100644
--- a/wp-content/plugins/buddypress/bp-groups/bp-groups-admin.php
+++ b/wp-content/plugins/buddypress/bp-groups/bp-groups-admin.php
@@ -29,8 +29,8 @@ function bp_groups_add_admin_menu() {
 
 	// Add our screen
 	$hook = add_menu_page(
-		__( 'Groups', 'buddypress' ),
-		__( 'Groups', 'buddypress' ),
+		_x( 'Groups', 'Admin Groups page title', 'buddypress' ),
+		_x( 'Groups', 'Admin Groups menu', 'buddypress' ),
 		'bp_moderate',
 		'bp-groups',
 		'bp_groups_admin',
@@ -68,7 +68,7 @@ add_filter( 'bp_admin_menu_order', 'bp_groups_admin_menu_order' );
  *
  * @since BuddyPress (1.7.0)
  *
- * @global BP_Groups_List_Table $bp_groups_list_table Groups screen list table
+ * @global BP_Groups_List_Table $bp_groups_list_table Groups screen list table.
  */
 function bp_groups_admin_load() {
 	global $bp_groups_list_table;
@@ -168,12 +168,17 @@ function bp_groups_admin_load() {
 
 	// Enqueue CSS and JavaScript
 	wp_enqueue_script( 'bp_groups_admin_js', $bp->plugin_url . "bp-groups/admin/js/admin.{$min}js", array( 'jquery', 'wp-ajax-response', 'jquery-ui-autocomplete' ), bp_get_version(), true );
-	wp_enqueue_style( 'bp_groups_admin_css', $bp->plugin_url . "bp-groups/admin/css/admin.{$min}css", array(), bp_get_version() );
-
 	wp_localize_script( 'bp_groups_admin_js', 'BP_Group_Admin', array(
 		'add_member_placeholder' => __( 'Start typing a username to add a new member.', 'buddypress' ),
 		'warn_on_leave'          => __( 'If you leave this page, you will lose any unsaved changes you have made to the group.', 'buddypress' ),
 	) );
+	wp_enqueue_style( 'bp_groups_admin_css', $bp->plugin_url . "bp-groups/admin/css/admin.{$min}css", array(), bp_get_version() );
+
+	wp_style_add_data( 'bp_groups_admin_css', 'rtl', true );
+	if ( $min ) {
+		wp_style_add_data( 'bp_groups_admin_css', 'suffix', $min );
+	}
+
 
 	if ( $doaction && 'save' == $doaction ) {
 		// Get group ID
@@ -230,10 +235,6 @@ function bp_groups_admin_load() {
 			$user_names = array_merge( $user_names, explode( ',', $_POST['bp-groups-new-members'] ) );
 		}
 
-		if ( ! empty( $_POST['new_members'] ) ) {
-			$user_names = array_merge( $user_names, $_POST['new_members'] );
-		}
-
 		if ( ! empty( $user_names ) ) {
 
 			foreach( array_values( $user_names ) as $user_name ) {
@@ -503,7 +504,7 @@ function bp_groups_admin_edit() {
 
 		<?php // If the user has just made a change to an group, display the status messages ?>
 		<?php if ( !empty( $messages ) ) : ?>
-			<div id="moderated" class="<?php echo ( $is_error ) ? 'error' : 'updated'; ?>"><p><?php echo implode( "<br/>\n", $messages ); ?></p></div>
+			<div id="moderated" class="<?php echo ( $is_error ) ? 'error' : 'updated'; ?>"><p><?php echo implode( "</p><p>", $messages ); ?></p></div>
 		<?php endif; ?>
 
 		<?php if ( ! empty( $group ) ) : ?>
@@ -518,6 +519,10 @@ function bp_groups_admin_edit() {
 									<h3><?php _e( 'Name and Description', 'buddypress' ); ?></h3>
 									<div class="inside">
 										<input type="text" name="bp-groups-name" id="bp-groups-name" value="<?php echo esc_attr( stripslashes( $group_name ) ) ?>" />
+										<div id="bp-groups-permalink-box">
+											<strong><?php esc_html_e( 'Permalink:', 'buddypress' ) ?></strong> <span id="sample-permalink"><?php bp_group_permalink( $group ) ?></span> <a href="<?php echo bp_group_permalink( $group ) ?>" class="button button-small" id="bp-groups-visit-group"><?php esc_html_e( 'Visit Group', 'buddypress' ) ?></a>
+										</div>
+
 
 										<?php wp_editor( stripslashes( $group->description ), 'bp-groups-description', array( 'media_buttons' => false, 'teeny' => true, 'textarea_rows' => 5, 'quicktags' => array( 'buttons' => 'strong,em,link,block,del,ins,img,code,spell,close' ) ) ); ?>
 									</div>
@@ -560,8 +565,9 @@ function bp_groups_admin_edit() {
  */
 function bp_groups_admin_delete() {
 
-	if ( ! is_super_admin() )
+	if ( ! bp_current_user_can( 'bp_moderate' ) ) {
 		die( '-1' );
+	}
 
 	$group_ids = isset( $_REQUEST['gid'] ) ? $_REQUEST['gid'] : 0;
 	if ( ! is_array( $group_ids ) ) {
@@ -731,7 +737,6 @@ function bp_groups_admin_edit_metabox_add_new_members( $item ) {
  *        group.
  */
 function bp_groups_admin_edit_metabox_members( $item ) {
-	global $members_template;
 
 	// Pull up a list of group members, so we can separate out the types
 	// We'll also keep track of group members here to place them into a
@@ -751,7 +756,7 @@ function bp_groups_admin_edit_metabox_members( $item ) {
 	);
 
 	foreach ( $members as $type => &$member_type_users ) {
-		$page_qs_key = $type . '_page';
+		$page_qs_key       = $type . '_page';
 		$current_type_page = isset( $_GET[ $page_qs_key ] ) ? absint( $_GET[ $page_qs_key ] ) : 1;
 		$member_type_query = new BP_Group_Member_Query( array(
 			'group_id'   => $item->id,
@@ -761,27 +766,24 @@ function bp_groups_admin_edit_metabox_members( $item ) {
 			'page'       => $current_type_page,
 		) );
 
-		$member_type_users = $member_type_query->results;
-
+		$member_type_users   = $member_type_query->results;
 		$pagination[ $type ] = bp_groups_admin_create_pagination_links( $member_type_query, $type );
 	}
 
 	// Echo out the javascript variable
-	echo '<script type="text/javascript">var group_id = "' . $item->id . '";</script>';
+	echo '<script type="text/javascript">var group_id = "' . esc_js( $item->id ) . '";</script>';
 
 	// Loop through each member type
 	foreach ( $members as $member_type => $type_users ) : ?>
 
 		<div class="bp-groups-member-type" id="bp-groups-member-type-<?php echo esc_attr( $member_type ) ?>">
 
-			<h4>
-				<?php switch ( $member_type ) :
-					case 'admin'  : _e( 'Administrators', 'buddypress' ); break;
-					case 'mod'    : _e( 'Moderators',     'buddypress' ); break;
-					case 'member' : _e( 'Members',        'buddypress' ); break;
-					case 'banned' : _e( 'Banned Users',   'buddypress' ); break;
-				endswitch; ?>
-			</h4>
+			<h4><?php switch ( $member_type ) :
+					case 'admin'  : esc_html_e( 'Administrators', 'buddypress' ); break;
+					case 'mod'    : esc_html_e( 'Moderators',     'buddypress' ); break;
+					case 'member' : esc_html_e( 'Members',        'buddypress' ); break;
+					case 'banned' : esc_html_e( 'Banned Members', 'buddypress' ); break;
+			endswitch; ?></h4>
 
 			<div class="bp-group-admin-pagination table-top">
 				<?php echo $pagination[ $member_type ] ?>
@@ -791,11 +793,11 @@ function bp_groups_admin_edit_metabox_members( $item ) {
 
 			<table class="widefat bp-group-members">
 				<thead>
-				<tr>
-					<th scope="col" class="uid-column"><?php _ex( 'ID', 'Group member user_id in group admin', 'buddypress' ) ?></th>
-					<th scope="col" class="uname-column"><?php _ex( 'Name', 'Group member name in group admin', 'buddypress' ) ?></th>
-					<th scope="col" class="urole-column"><?php _ex( 'Group Role', 'Group member role in group admin', 'buddypress' ) ?></th>
-				</tr>
+					<tr>
+						<th scope="col" class="uid-column"><?php _ex( 'ID', 'Group member user_id in group admin', 'buddypress' ); ?></th>
+						<th scope="col" class="uname-column"><?php _ex( 'Name', 'Group member name in group admin', 'buddypress' ); ?></th>
+						<th scope="col" class="urole-column"><?php _ex( 'Group Role', 'Group member role in group admin', 'buddypress' ); ?></th>
+					</tr>
 				</thead>
 
 				<tbody>
@@ -811,16 +813,25 @@ function bp_groups_admin_edit_metabox_members( $item ) {
 								'height'  => '32'
 							) ); ?></a>
 
-							<span style="margin: 8px; float: left;"><?php echo bp_core_get_userlink( $type_user->ID ) ?></span>
+							<span style="margin: 8px; float: left;"><?php echo bp_core_get_userlink( $type_user->ID ); ?></span>
 						</td>
 
 						<td class="urole-column">
 							<select class="bp-groups-role" id="bp-groups-role-<?php echo esc_attr( $type_user->ID ); ?>" name="bp-groups-role[<?php echo esc_attr( $type_user->ID ); ?>]">
-								<option value="admin" <?php selected( 'admin', $member_type ) ?>><?php _e( 'Administrator', 'buddypress' ) ?></option>
-								<option value="mod" <?php selected( 'mod', $member_type ) ?>><?php _e( 'Moderator', 'buddypress' ) ?></option>
-								<option value="member" <?php selected( 'member', $member_type ) ?>><?php _e( 'Member', 'buddypress' ) ?></option>
-								<option class="banned" value="banned" <?php selected( 'banned', $member_type ) ?>><?php _e( 'Banned', 'buddypress' ) ?></option>
-								<option class="remove" value="remove"><?php _e( 'Remove From Group', 'buddypress' ) ?></option>
+								<optgroup label="<?php esc_attr_e( 'Roles', 'buddypress' ); ?>">
+									<option class="admin"  value="admin"  <?php selected( 'admin',  $member_type ); ?>><?php esc_html_e( 'Administrator', 'buddypress' ); ?></option>
+									<option class="mod"    value="mod"    <?php selected( 'mod',    $member_type ); ?>><?php esc_html_e( 'Moderator',     'buddypress' ); ?></option>
+									<option class="member" value="member" <?php selected( 'member', $member_type ); ?>><?php esc_html_e( 'Member',        'buddypress' ); ?></option>
+									<?php if ( 'banned' === $member_type ) : ?>
+									<option class="banned" value="banned" <?php selected( 'banned', $member_type ); ?>><?php esc_html_e( 'Banned',        'buddypress' ); ?></option>
+									<?php endif; ?>
+								</optgroup>
+								<optgroup label="<?php esc_attr_e( 'Actions', 'buddypress' ); ?>">
+									<option class="remove" value="remove"><?php esc_html_e( 'Remove', 'buddypress' ); ?></option>
+									<?php if ( 'banned' !== $member_type ) : ?>
+										<option class="banned" value="banned"><?php esc_html_e( 'Ban', 'buddypress' ); ?></option>
+									<?php endif; ?>
+								</optgroup>
 							</select>
 
 							<?php
@@ -829,7 +840,8 @@ function bp_groups_admin_edit_metabox_members( $item ) {
 							 * so we can easily detect changes.
 							 *
 							 * @todo remove this, and do database detection on save
-							 */ ?>
+							 */
+							?>
 							<input type="hidden" name="bp-groups-existing-role[<?php echo esc_attr( $type_user->ID ); ?>]" value="<?php echo esc_attr( $member_type ); ?>" />
 						</td>
 					</tr>
@@ -848,19 +860,18 @@ function bp_groups_admin_edit_metabox_members( $item ) {
 			</table>
 
 			<div class="bp-group-admin-pagination table-bottom">
-				<?php echo $pagination[ $member_type ] ?>
+				<?php echo $pagination[ $member_type ]; ?>
 			</div>
 
 		<?php else : ?>
 
-			<p class="bp-groups-no-members description"><?php _e( 'No members of this type', 'buddypress' ) ?></p>
+			<p class="bp-groups-no-members description"><?php esc_html_e( 'No members of this type', 'buddypress' ); ?></p>
 
 		<?php endif; ?>
 
 		</div><!-- .bp-groups-member-type -->
 
 	<?php endforeach;
-
 }
 
 /**
@@ -939,10 +950,10 @@ function bp_groups_admin_create_pagination_links( BP_Group_Member_Query $query,
 	) );
 
 	$viewing_text = sprintf(
-		__( 'Viewing %1$s - %2$s of %3$s', 'buddypress' ),
+		_n( 'Viewing 1 member', 'Viewing %1$s - %2$s of %3$s members', $query->total_users, 'buddypress' ),
 		number_format_i18n( $current_page_start ),
 		number_format_i18n( $current_page_end ),
-		sprintf( _n( '%s member', '%s members', $query->total_users, 'buddypress' ), $query->total_users )
+		(int) $query->total_users
 	);
 
 	$pagination .= '<span class="bp-group-admin-pagination-viewing">' . $viewing_text . '</span>';
@@ -979,41 +990,38 @@ function bp_groups_admin_get_usernames_from_ids( $user_ids = array() ) {
 function bp_groups_admin_autocomplete_handler() {
 
 	// Bail if user user shouldn't be here, or is a large network
-	if ( ! current_user_can( 'bp_moderate' ) || ( is_multisite() && wp_is_large_network( 'users' ) ) )
+	if ( ! current_user_can( 'bp_moderate' ) || ( is_multisite() && wp_is_large_network( 'users' ) ) ) {
 		wp_die( -1 );
+	}
 
-	$return = array();
+	$term     = isset( $_GET['term'] )     ? sanitize_text_field( $_GET['term'] ) : '';
+	$group_id = isset( $_GET['group_id'] ) ? absint( $_GET['group_id'] )          : 0;
 
-	// Exclude current group members
-	$group_id = isset( $_GET['group_id'] ) ? wp_parse_id_list( $_GET['group_id'] ) : array();
-	$group_member_query = new BP_Group_Member_Query( array(
-		'group_id'        => $group_id,
-		'per_page'        => 0, // show all
-		'group_role'      => array( 'member', 'mod', 'admin', ),
-		'populate_extras' => false,
-		'count_total'     => false,
+	if ( ! $term || ! $group_id ) {
+		wp_die( -1 );
+	}
+
+	$suggestions = bp_core_get_suggestions( array(
+		'group_id' => -$group_id,  // A negative value will exclude this group's members from the suggestions.
+		'limit'    => 10,
+		'term'     => $term,
+		'type'     => 'members',
 	) );
 
-	$group_members = ! empty( $group_member_query->results ) ? wp_list_pluck( $group_member_query->results, 'ID' ) : array();
+	$matches = array();
 
-	$terms = isset( $_GET['term'] ) ? $_GET['term'] : '';
-	$users = bp_core_get_users( array(
-		'type'            => 'alphabetical',
-		'search_terms'    => $terms,
-		'exclude'         => $group_members,
-		'per_page'        => 10,
-		'populate_extras' => false
-	) );
+	if ( $suggestions && ! is_wp_error( $suggestions ) ) {
+		foreach ( $suggestions as $user ) {
 
-	foreach ( (array) $users['users'] as $user ) {
-		$return[] = array(
-			/* translators: 1: user_login, 2: user_email */
-			'label' => sprintf( __( '%1$s (%2$s)', 'buddypress' ), bp_is_username_compatibility_mode() ? $user->user_login : $user->user_nicename, $user->user_email ),
-			'value' => $user->user_nicename,
-		);
+			$matches[] = array(
+				// translators: 1: user_login, 2: user_email
+				'label' => sprintf( __( '%1$s (%2$s)', 'buddypress' ), $user->name, $user->ID ),
+				'value' => $user->ID,
+			);
+		}
 	}
 
-	wp_die( json_encode( $return ) );
+	wp_die( json_encode( $matches ) );
 }
 add_action( 'wp_ajax_bp_group_admin_member_autocomplete', 'bp_groups_admin_autocomplete_handler' );
 
@@ -1030,7 +1038,6 @@ class BP_Groups_List_Table extends WP_List_Table {
 	 * e.g. "All", "Pending", "Approved", "Spam"...
 	 *
 	 * @since BuddyPress (1.7.0)
-	 *
 	 * @access public
 	 * @var string
 	 */
@@ -1040,7 +1047,6 @@ class BP_Groups_List_Table extends WP_List_Table {
 	 * Group counts for each group type.
 	 *
 	 * @since BuddyPress (1.7.0)
-	 *
 	 * @access public
 	 * @var int
 	 */
@@ -1069,7 +1075,7 @@ class BP_Groups_List_Table extends WP_List_Table {
 	 *
 	 * @since BuddyPress (1.7.0)
 	 */
-	function prepare_items() {
+	public function prepare_items() {
 		global $groups_template;
 
 		$screen = get_current_screen();
@@ -1176,7 +1182,7 @@ class BP_Groups_List_Table extends WP_List_Table {
 	 *
 	 * @return array Array of column headers.
 	 */
-	function get_column_info() {
+	public function get_column_info() {
 		$this->_column_headers = array(
 			$this->get_columns(),
 			array(),
@@ -1191,7 +1197,7 @@ class BP_Groups_List_Table extends WP_List_Table {
 	 *
 	 * @since BuddyPress (1.7.0)
 	 */
-	function no_items() {
+	public function no_items() {
 		_e( 'No groups found.', 'buddypress' );
 	}
 
@@ -1200,9 +1206,7 @@ class BP_Groups_List_Table extends WP_List_Table {
 	 *
 	 * @since BuddyPress (1.7.0)
 	*/
-	function display() {
-		extract( $this->_args );
-
+	public function display() {
 		$this->display_tablenav( 'top' ); ?>
 
 		<table class="<?php echo implode( ' ', $this->get_table_classes() ); ?>" cellspacing="0">
@@ -1234,7 +1238,7 @@ class BP_Groups_List_Table extends WP_List_Table {
 	 *
 	 * @param object $item The current group item in the loop.
 	 */
-	function single_row( $item = array() ) {
+	public function single_row( $item = array() ) {
 		static $even = false;
 
 		$row_classes = array();
@@ -1260,7 +1264,7 @@ class BP_Groups_List_Table extends WP_List_Table {
 	 *
 	 * @since BuddyPress (1.7.0)
 	 */
-	function get_views() {
+	public function get_views() {
 		$url_base = bp_get_admin_url( 'admin.php?page=bp-groups' ); ?>
 
 		<ul class="subsubsub">
@@ -1281,7 +1285,7 @@ class BP_Groups_List_Table extends WP_List_Table {
 	 *
 	 * @return array Key/value pairs for the bulk actions dropdown.
 	 */
-	function get_bulk_actions() {
+	public function get_bulk_actions() {
 		return apply_filters( 'bp_groups_list_table_get_bulk_actions', array(
 			'delete' => __( 'Delete', 'buddypress' )
 		) );
@@ -1296,7 +1300,7 @@ class BP_Groups_List_Table extends WP_List_Table {
 	 *
 	 * @return array Array of column titles.
 	 */
-	function get_columns() {
+	public function get_columns() {
 		return apply_filters( 'bp_groups_list_table_get_columns', array(
 			'cb'          => '<input name type="checkbox" />',
 			'comment'     => _x( 'Name', 'Groups admin Group Name column header',               'buddypress' ),
@@ -1323,7 +1327,7 @@ class BP_Groups_List_Table extends WP_List_Table {
 	 *
 	 * @return array Array of sortable column names.
 	 */
-	function get_sortable_columns() {
+	public function get_sortable_columns() {
 		return array(
 			'gid'         => array( 'gid', false ),
 			'comment'     => array( 'name', false ),
@@ -1341,7 +1345,7 @@ class BP_Groups_List_Table extends WP_List_Table {
 	 *
 	 * @param array $item A singular item (one full row).
 	 */
-	function column_cb( $item = array() ) {
+	public function column_cb( $item = array() ) {
 		printf( '<label class="screen-reader-text" for="gid-%1$d">' . __( 'Select group %1$d', 'buddypress' ) . '</label><input type="checkbox" name="gid[]" value="%1$d" id="gid-%1$d" />', $item['id'] );
 	}
 
@@ -1354,8 +1358,8 @@ class BP_Groups_List_Table extends WP_List_Table {
 	 *
 	 * @param array $item A singular item (one full row).
 	 */
-	function column_gid( $item = array() ) {
-		echo '<strong>' . $item['id'] . '</strong>';
+	public function column_gid( $item = array() ) {
+		echo '<strong>' . absint( $item['id'] ) . '</strong>';
 	}
 
 	/**
@@ -1369,13 +1373,13 @@ class BP_Groups_List_Table extends WP_List_Table {
 	 *
 	 * @param array $item A singular item (one full row).
 	 */
-	function column_comment( $item = array() ) {
+	public function column_comment( $item = array() ) {
 
-		// Preorder items: Visit | Edit | Delete
+		// Preorder items: Edit | Delete | View
 		$actions = array(
-			'visit'  => '',
 			'edit'   => '',
 			'delete' => '',
+			'view'   => '',
 		);
 
 		// We need the group object for some BP functions
@@ -1385,35 +1389,40 @@ class BP_Groups_List_Table extends WP_List_Table {
 		$base_url   = bp_get_admin_url( 'admin.php?page=bp-groups&amp;gid=' . $item['id'] );
 		$delete_url = wp_nonce_url( $base_url . "&amp;action=delete", 'bp-groups-delete' );
 		$edit_url   = $base_url . '&amp;action=edit';
-		$visit_url  = bp_get_group_permalink( $item_obj );
+		$view_url   = bp_get_group_permalink( $item_obj );
+		$group_name = apply_filters_ref_array( 'bp_get_group_name', array( $item['name'] ), $item );
 
 		// Rollover actions
 
-		// Visit
-		$actions['visit'] = sprintf( '<a href="%s">%s</a>', esc_url( $visit_url ), __( 'Visit', 'buddypress' ) );
-
 		// Edit
-		$actions['edit'] = sprintf( '<a href="%s">%s</a>', esc_url( $edit_url ), __( 'Edit', 'buddypress' ) );
+		$actions['edit']   = sprintf( '<a href="%s">%s</a>', esc_url( $edit_url   ), __( 'Edit',   'buddypress' ) );
 
 		// Delete
 		$actions['delete'] = sprintf( '<a href="%s">%s</a>', esc_url( $delete_url ), __( 'Delete', 'buddypress' ) );
 
+		// Visit
+		$actions['view']   = sprintf( '<a href="%s">%s</a>', esc_url( $view_url   ), __( 'View',   'buddypress' ) );
+
 		// Other plugins can filter which actions are shown
 		$actions = apply_filters( 'bp_groups_admin_comment_row_actions', array_filter( $actions ), $item );
 
 		// Get group name and avatar
-		$avatar  = bp_core_fetch_avatar( array(
-			'item_id'    => $item['id'],
-			'object'     => 'group',
-			'type'       => 'thumb',
-			'avatar_dir' => 'group-avatars',
-			'alt'        => sprintf( __( 'Group logo of %s', 'buddypress' ), $item['name'] ),
-			'width'      => '32',
-			'height'     => '32',
-			'title'      => $item['name']
-		) );
+		$avatar = '';
+
+		if ( buddypress()->avatar->show_avatars ) {
+			$avatar  = bp_core_fetch_avatar( array(
+				'item_id'    => $item['id'],
+				'object'     => 'group',
+				'type'       => 'thumb',
+				'avatar_dir' => 'group-avatars',
+				'alt'        => sprintf( __( 'Group logo of %s', 'buddypress' ), $group_name ),
+				'width'      => '32',
+				'height'     => '32',
+				'title'      => $group_name
+			) );
+		}
 
-		$content = apply_filters_ref_array( 'bp_get_group_name', array( $item['name'], $item ) );
+		$content = sprintf( '<strong><a href="%s">%s</a></strong>', esc_url( $edit_url ), $group_name );
 
 		echo $avatar . ' ' . $content . ' ' . $this->row_actions( $actions );
 	}
@@ -1425,7 +1434,7 @@ class BP_Groups_List_Table extends WP_List_Table {
 	 *
 	 * @param array Information about the current row.
 	 */
-	function column_description( $item = array() ) {
+	public function column_description( $item = array() ) {
 		echo apply_filters_ref_array( 'bp_get_group_description', array( $item['description'], $item ) );
 	}
 
@@ -1436,7 +1445,7 @@ class BP_Groups_List_Table extends WP_List_Table {
 	 *
 	 * @param array Information about the current row.
 	 */
-	function column_status( $item = array() ) {
+	public function column_status( $item = array() ) {
 		$status      = $item['status'];
 		$status_desc = '';
 
@@ -1464,7 +1473,7 @@ class BP_Groups_List_Table extends WP_List_Table {
 	 *
 	 * @param array Information about the current row.
 	 */
-	function column_members( $item = array() ) {
+	public function column_members( $item = array() ) {
 		$count = groups_get_groupmeta( $item['id'], 'total_member_count' );
 		echo apply_filters_ref_array( 'bp_groups_admin_get_group_member_count', array( (int) $count, $item ) );
 	}
@@ -1476,7 +1485,7 @@ class BP_Groups_List_Table extends WP_List_Table {
 	 *
 	 * @param array Information about the current row.
 	 */
-	function column_last_active( $item = array() ) {
+	public function column_last_active( $item = array() ) {
 		$last_active = groups_get_groupmeta( $item['id'], 'last_activity' );
 		echo apply_filters_ref_array( 'bp_groups_admin_get_group_last_active', array( $last_active, $item ) );
 	}
@@ -1489,7 +1498,7 @@ class BP_Groups_List_Table extends WP_List_Table {
 	 * @param array Information about the current row.
 	 * @param string the column name.
 	 */
-	function column_default( $item = array(), $column_name = '' ) {
+	public function column_default( $item = array(), $column_name = '' ) {
 		return apply_filters( 'bp_groups_admin_get_group_custom_column', '', $column_name, $item );
 	}
 }
diff --git a/wp-content/plugins/buddypress/bp-groups/bp-groups-adminbar.php b/wp-content/plugins/buddypress/bp-groups/bp-groups-adminbar.php
index d9c67605e..33e7679a9 100644
--- a/wp-content/plugins/buddypress/bp-groups/bp-groups-adminbar.php
+++ b/wp-content/plugins/buddypress/bp-groups/bp-groups-adminbar.php
@@ -18,6 +18,9 @@ if ( !defined( 'ABSPATH' ) ) exit;
  * @since BuddyPress (1.5.0)
  *
  * @todo Add dynamic menu items for group extensions.
+ *
+ * @return bool|null False if not on a group page, or if user does not have
+ *        access to group admin options.
  */
 function bp_groups_group_admin_menu() {
 	global $wp_admin_bar, $bp;
@@ -57,11 +60,11 @@ function bp_groups_group_admin_menu() {
 	) );
 
 	// Group Admin > Group avatar
-	if ( !(int)bp_get_option( 'bp-disable-avatar-uploads' ) ) {
+	if ( !(int)bp_get_option( 'bp-disable-avatar-uploads' ) && $bp->avatar->show_avatars ) {
 		$wp_admin_bar->add_menu( array(
 			'parent' => $bp->group_admin_menu_id,
 			'id'     => 'group-avatar',
-			'title'  => __( 'Edit Avatar', 'buddypress' ),
+			'title'  => __( 'Edit Profile Photo', 'buddypress' ),
 			'href'   =>  bp_get_groups_action_link( 'admin/group-avatar' )
 		) );
 	}
diff --git a/wp-content/plugins/buddypress/bp-groups/bp-groups-cache.php b/wp-content/plugins/buddypress/bp-groups/bp-groups-cache.php
index cbd9ac9c7..498cbee5f 100644
--- a/wp-content/plugins/buddypress/bp-groups/bp-groups-cache.php
+++ b/wp-content/plugins/buddypress/bp-groups/bp-groups-cache.php
@@ -173,6 +173,35 @@ add_action( 'groups_unban_member',  'groups_clear_group_user_object_cache', 10,
 add_action( 'groups_uninvite_user', 'groups_clear_group_user_object_cache', 10, 2 );
 add_action( 'groups_remove_member', 'groups_clear_group_user_object_cache', 10, 2 );
 
+/**
+ * Clear group administrator cache.
+ *
+ * @since BuddyPress (2.1.0)
+ *
+ * @param int $group_id The group ID.
+ */
+function groups_clear_group_administrator_cache( $group_id ) {
+	wp_cache_delete( $group_id, 'bp_group_admins' );
+}
+add_action( 'groups_promote_member', 'groups_clear_group_administrator_cache' );
+add_action( 'groups_demote_member',  'groups_clear_group_administrator_cache' );
+add_action( 'groups_delete_group',   'groups_clear_group_administrator_cache' );
+
+/**
+ * Clear group administrator cache when a group member is saved.
+ *
+ * This accounts for situations where group administrators are added manually
+ * using {@link BP_Groups_Member::save()}.  Usually via a plugin.
+ *
+ * @since BuddyPress (2.1.0)
+ *
+ * @param BP_Groups_Member $member
+ */
+function groups_clear_group_administrator_cache_on_member_save( BP_Groups_Member $member ) {
+	groups_clear_group_administrator_cache( $member->group_id );
+}
+add_action( 'groups_member_after_save', 'groups_clear_group_administrator_cache_on_member_save' );
+
 /* List actions to clear super cached pages on, if super cache is installed */
 add_action( 'groups_join_group',                 'bp_core_clear_cache' );
 add_action( 'groups_leave_group',                'bp_core_clear_cache' );
diff --git a/wp-content/plugins/buddypress/bp-groups/bp-groups-classes.php b/wp-content/plugins/buddypress/bp-groups/bp-groups-classes.php
index c036b62ea..24fed9c49 100644
--- a/wp-content/plugins/buddypress/bp-groups/bp-groups-classes.php
+++ b/wp-content/plugins/buddypress/bp-groups/bp-groups-classes.php
@@ -158,6 +158,12 @@ class BP_Groups_Group {
 	 *
 	 * @param int $id Optional. If the ID of an existing group is provided,
 	 *        the object will be pre-populated with info about that group.
+	 * @param array $args {
+	 *     Array of optional arguments.
+	 *     @type bool $populate_extras Whether to fetch "extra" data about
+	 *           the group (group admins/mods, access for the current user).
+	 *           Default: false.
+	 * }
 	 */
 	public function __construct( $id = null, $args = array() ) {
 		$this->args = wp_parse_args( $args, array(
@@ -445,7 +451,7 @@ class BP_Groups_Group {
 		if ( empty( $user_id ) )
 			$user_id = bp_displayed_user_id();
 
-		$filter = esc_sql( like_escape( $filter ) );
+		$search_terms_like = bp_esc_like( $filter ) . '%';
 
 		$pag_sql = $order_sql = $hidden_sql = '';
 
@@ -460,8 +466,8 @@ class BP_Groups_Group {
 
 		$gids = esc_sql( implode( ',', wp_parse_id_list( $gids['groups'] ) ) );
 
-		$paged_groups = $wpdb->get_results( "SELECT id as group_id FROM {$bp->groups->table_name} WHERE ( name LIKE '{$filter}%%' OR description LIKE '{$filter}%%' ) AND id IN ({$gids}) {$pag_sql}" );
-		$total_groups = $wpdb->get_var( "SELECT COUNT(id) FROM {$bp->groups->table_name} WHERE ( name LIKE '{$filter}%%' OR description LIKE '{$filter}%%' ) AND id IN ({$gids})" );
+		$paged_groups = $wpdb->get_results( $wpdb->prepare( "SELECT id as group_id FROM {$bp->groups->table_name} WHERE ( name LIKE %s OR description LIKE %s ) AND id IN ({$gids}) {$pag_sql}", $search_terms_like, $search_terms_like ) );
+		$total_groups = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(id) FROM {$bp->groups->table_name} WHERE ( name LIKE %s OR description LIKE %s ) AND id IN ({$gids})", $search_terms_like, $search_terms_like ) );
 
 		return array( 'groups' => $paged_groups, 'total' => $total_groups );
 	}
@@ -486,7 +492,7 @@ class BP_Groups_Group {
 	public static function search_groups( $filter, $limit = null, $page = null, $sort_by = false, $order = false ) {
 		global $wpdb, $bp;
 
-		$filter = esc_sql( like_escape( $filter ) );
+		$search_terms_like = '%' . bp_esc_like( $filter ) . '%';
 
 		$pag_sql = $order_sql = $hidden_sql = '';
 
@@ -502,8 +508,8 @@ class BP_Groups_Group {
 		if ( !bp_current_user_can( 'bp_moderate' ) )
 			$hidden_sql = "AND status != 'hidden'";
 
-		$paged_groups = $wpdb->get_results( "SELECT id as group_id FROM {$bp->groups->table_name} WHERE ( name LIKE '%%{$filter}%%' OR description LIKE '%%{$filter}%%' ) {$hidden_sql} {$order_sql} {$pag_sql}" );
-		$total_groups = $wpdb->get_var( "SELECT COUNT(id) FROM {$bp->groups->table_name} WHERE ( name LIKE '%%{$filter}%%' OR description LIKE '%%{$filter}%%' ) {$hidden_sql}" );
+		$paged_groups = $wpdb->get_results( $wpdb->prepare( "SELECT id as group_id FROM {$bp->groups->table_name} WHERE ( name LIKE %s OR description LIKE %s ) {$hidden_sql} {$order_sql} {$pag_sql}", $search_terms_like, $search_terms_like ) );
+		$total_groups = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(id) FROM {$bp->groups->table_name} WHERE ( name LIKE %s OR description LIKE %s ) {$hidden_sql}", $search_terms_like, $search_terms_like ) );
 
 		return array( 'groups' => $paged_groups, 'total' => $total_groups );
 	}
@@ -625,9 +631,11 @@ class BP_Groups_Group {
 	 *     @type bool $populate_extras Whether to fetch additional
 	 *           information (such as member count) about groups. Default:
 	 *           true.
-	 *     @type array|string Optional. Array or comma-separated list of
-	 *           group IDs. Results will exclude the listed groups.
+	 *     @type array|string $exclude Optional. Array or comma-separated
+	 *           list of group IDs. Results will exclude the listed groups.
 	 *           Default: false.
+	 *     @type bool $update_meta_cache Whether to pre-fetch groupmeta for
+	 *           the returned groups. Default: true.
 	 *     @type bool $show_hidden Whether to include hidden groups in
 	 *           results. Default: false.
 	 * }
@@ -702,8 +710,8 @@ class BP_Groups_Group {
 		}
 
 		if ( ! empty( $r['search_terms'] ) ) {
-			$search_terms = esc_sql( like_escape( $r['search_terms'] ) );
-			$sql['search'] = " AND ( g.name LIKE '%%{$search_terms}%%' OR g.description LIKE '%%{$search_terms}%%' )";
+			$search_terms_like = '%' . bp_esc_like( $r['search_terms'] ) . '%';
+			$sql['search'] = $wpdb->prepare( " AND ( g.name LIKE %s OR g.description LIKE %s )", $search_terms_like, $search_terms_like );
 		}
 
 		$meta_query_sql = self::get_meta_query_sql( $r['meta_query'] );
@@ -738,7 +746,7 @@ class BP_Groups_Group {
 		// If a 'type' parameter was passed, parse it and overwrite
 		// 'order' and 'orderby' params passed to the function
 		if (  ! empty( $r['type'] ) ) {
-			$order_orderby = self::convert_type_to_order_orderby( $r['type'] );
+			$order_orderby = apply_filters( 'bp_groups_get_orderby', self::convert_type_to_order_orderby( $r['type'] ), $r['type'] );
 
 			// If an invalid type is passed, $order_orderby will be
 			// an array with empty values. In this case, we stick
@@ -756,7 +764,7 @@ class BP_Groups_Group {
 		$order = bp_esc_sql_order( $order );
 
 		// Convert 'orderby' into the proper ORDER BY term
-		$orderby = self::convert_orderby_to_order_by_term( $orderby );
+		$orderby = apply_filters( 'bp_groups_get_orderby_converted_by_term', self::convert_orderby_to_order_by_term( $orderby ), $orderby, $r['type'] );
 
 		// Random order is a special case
 		if ( 'rand()' === $orderby ) {
@@ -765,7 +773,7 @@ class BP_Groups_Group {
 			$sql[] = "ORDER BY {$orderby} {$order}";
 		}
 
-		if ( ! empty( $r['per_page'] ) && ! empty( $r['page'] ) ) {
+		if ( ! empty( $r['per_page'] ) && ! empty( $r['page'] ) && $r['per_page'] != -1 ) {
 			$sql['pagination'] = $wpdb->prepare( "LIMIT %d, %d", intval( ( $r['page'] - 1 ) * $r['per_page']), intval( $r['per_page'] ) );
 		}
 
@@ -784,7 +792,7 @@ class BP_Groups_Group {
 		}
 
 		if ( ! empty( $sql['search'] ) ) {
-			$total_sql['where'][] = "( g.name LIKE '%%{$search_terms}%%' OR g.description LIKE '%%{$search_terms}%%' )";
+			$total_sql['where'][] = $wpdb->prepare( "( g.name LIKE %s OR g.description LIKE %s )", $search_terms_like, $search_terms_like );
 		}
 
 		if ( ! empty( $r['user_id'] ) ) {
@@ -891,15 +899,8 @@ class BP_Groups_Group {
 			preg_match_all( '/ON \((.*)\)/', $meta_sql['join'], $matches_b );
 
 			if ( ! empty( $matches_a[1] ) && ! empty( $matches_b[1] ) ) {
-				$sql_array['join']  = implode( ',', $matches_a[1] ). ', ';
-
-				$sql_array['where'] = '';
-
-				$meta_query_where_clauses = explode( "\n", $meta_sql['where'] );
-				foreach( $matches_b[1] as $key => $group_id_clause ) {
-					$sql_array['where'] .= ' ' . preg_replace( '/^(AND\s+[\(\s]+)/', '$1' . $group_id_clause . ' AND ', ltrim( $meta_query_where_clauses[ $key ] ) );
-				}
-
+				$sql_array['join']  = implode( ',', $matches_a[1] ) . ', ';
+				$sql_array['where'] = $meta_sql['where'] . ' AND ' . implode ( ' AND ', $matches_b[1] );
 			}
 		}
 
@@ -1025,8 +1026,8 @@ class BP_Groups_Group {
 			$hidden_sql = " AND g.status != 'hidden'";
 
 		if ( !empty( $search_terms ) ) {
-			$search_terms = esc_sql( like_escape( $search_terms ) );
-			$search_sql = " AND ( g.name LIKE '%%{$search_terms}%%' OR g.description LIKE '%%{$search_terms}%%' )";
+			$search_terms_like = '%' . bp_esc_like( $search_terms ) . '%';
+			$search_sql        = $wpdb->prepare( ' AND ( g.name LIKE %s OR g.description LIKE %s ) ', $search_terms_like, $search_terms_like );
 		}
 
 		if ( !empty( $exclude ) ) {
@@ -1089,8 +1090,8 @@ class BP_Groups_Group {
 			$hidden_sql = " AND g.status != 'hidden'";
 
 		if ( !empty( $search_terms ) ) {
-			$search_terms = esc_sql( like_escape( $search_terms ) );
-			$search_sql = " AND ( g.name LIKE '%%{$search_terms}%%' OR g.description LIKE '%%{$search_terms}%%' )";
+			$search_terms_like = '%' . bp_esc_like( $search_terms ) . '%';
+			$search_sql        = $wpdb->prepare( ' AND ( g.name LIKE %s OR g.description LIKE %s ) ', $search_terms_like, $search_terms_like );
 		}
 
 		if ( !empty( $exclude ) ) {
@@ -1160,15 +1161,15 @@ class BP_Groups_Group {
 		if ( !bp_current_user_can( 'bp_moderate' ) )
 			$hidden_sql = " AND status != 'hidden'";
 
-		$letter = esc_sql( like_escape( $letter ) );
+		$letter_like = bp_esc_like( $letter ) . '%';
 
 		if ( !empty( $limit ) && !empty( $page ) ) {
 			$pag_sql      = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) );
 		}
 
-		$total_groups = $wpdb->get_var( "SELECT COUNT(DISTINCT g.id) FROM {$bp->groups->table_name_groupmeta} gm1, {$bp->groups->table_name_groupmeta} gm2, {$bp->groups->table_name} g WHERE g.id = gm1.group_id AND g.id = gm2.group_id AND gm2.meta_key = 'last_activity' AND gm1.meta_key = 'total_member_count' AND g.name LIKE '{$letter}%%' {$hidden_sql} {$exclude_sql}" );
+		$total_groups = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(DISTINCT g.id) FROM {$bp->groups->table_name_groupmeta} gm1, {$bp->groups->table_name_groupmeta} gm2, {$bp->groups->table_name} g WHERE g.id = gm1.group_id AND g.id = gm2.group_id AND gm2.meta_key = 'last_activity' AND gm1.meta_key = 'total_member_count' AND g.name LIKE %s {$hidden_sql} {$exclude_sql}", $letter_like ) );
 
-		$paged_groups = $wpdb->get_results( "SELECT g.*, gm1.meta_value as total_member_count, gm2.meta_value as last_activity FROM {$bp->groups->table_name_groupmeta} gm1, {$bp->groups->table_name_groupmeta} gm2, {$bp->groups->table_name} g WHERE g.id = gm1.group_id AND g.id = gm2.group_id AND gm2.meta_key = 'last_activity' AND gm1.meta_key = 'total_member_count' AND g.name LIKE '{$letter}%%' {$hidden_sql} {$exclude_sql} ORDER BY g.name ASC {$pag_sql}" );
+		$paged_groups = $wpdb->get_results( $wpdb->prepare( "SELECT g.*, gm1.meta_value as total_member_count, gm2.meta_value as last_activity FROM {$bp->groups->table_name_groupmeta} gm1, {$bp->groups->table_name_groupmeta} gm2, {$bp->groups->table_name} g WHERE g.id = gm1.group_id AND g.id = gm2.group_id AND gm2.meta_key = 'last_activity' AND gm1.meta_key = 'total_member_count' AND g.name LIKE %s {$hidden_sql} {$exclude_sql} ORDER BY g.name ASC {$pag_sql}", $letter_like ) );
 
 		if ( !empty( $populate_extras ) ) {
 			foreach ( (array) $paged_groups as $group ) {
@@ -1216,8 +1217,8 @@ class BP_Groups_Group {
 			$hidden_sql = "AND g.status != 'hidden'";
 
 		if ( !empty( $search_terms ) ) {
-			$search_terms = esc_sql( like_escape( $search_terms ) );
-			$search_sql = " AND ( g.name LIKE '%%{$search_terms}%%' OR g.description LIKE '%%{$search_terms}%%' )";
+			$search_terms_like = '%' . bp_esc_like( $search_terms ) . '%';
+			$search_sql = $wpdb->prepare( " AND ( g.name LIKE %s OR g.description LIKE %s )", $search_terms_like, $search_terms_like );
 		}
 
 		if ( !empty( $exclude ) ) {
@@ -1433,8 +1434,8 @@ class BP_Groups_Group {
 		$sql['where']  = "WHERE gm.meta_key = 'forum_id' {$status_sql} AND t.topic_status = '0' AND t.topic_sticky != '2'";
 
 		if ( !empty( $search_terms ) ) {
-			$st = esc_sql( like_escape( $search_terms ) );
-			$sql['where'] .= " AND (  t.topic_title LIKE '%{$st}%' )";
+			$search_terms_like = '%' . bp_esc_like( $search_terms ) . '%';
+			$sql['where'] .= $wpdb->prepare( " AND ( t.topic_title LIKE %s )", $search_terms_like );
 		}
 
 		return $wpdb->get_var( implode( ' ', $sql ) );
@@ -1498,6 +1499,7 @@ class BP_Group_Member_Query extends BP_User_Query {
 	 * Array of group member ids, cached to prevent redundant lookups.
 	 *
 	 * @since BuddyPress (1.8.1)
+	 * @access protected
 	 * @var null|array Null if not yet defined, otherwise an array of ints.
 	 */
 	protected $group_member_ids;
@@ -1707,11 +1709,20 @@ class BP_Group_Member_Query extends BP_User_Query {
 			$gm_ids = array( 0 );
 		}
 
-		// For 'last_joined' and 'first_joined' types, we force
-		// the order according to the query performed in
-		// BP_Group_Member_Query::get_group_members(). Otherwise, fall
-		// through and let BP_User_Query do its own ordering.
-		if ( in_array( $query->query_vars['type'], array( 'last_joined', 'first_joined' ) ) ) {
+		// For 'last_joined', 'first_joined', and 'group_activity'
+		// types, we override the default orderby clause of
+		// BP_User_Query. In the case of 'group_activity', we perform
+		// a separate query to get the necessary order. In the case of
+		// 'last_joined' and 'first_joined', we can trust the order of
+		// results from  BP_Group_Member_Query::get_group_members().
+		// In all other cases, we fall through and let BP_User_Query
+		// do its own (non-group-specific) ordering.
+		if ( in_array( $query->query_vars['type'], array( 'last_joined', 'first_joined', 'group_activity' ) ) ) {
+
+			// Group Activity DESC
+			if ( 'group_activity' == $query->query_vars['type'] ) {
+				$gm_ids = $this->get_gm_ids_ordered_by_activity( $query, $gm_ids );
+			}
 
 			// The first param in the FIELD() clause is the sort column id
 			$gm_ids = array_merge( array( 'u.id' ), wp_parse_id_list( $gm_ids ) );
@@ -1735,10 +1746,11 @@ class BP_Group_Member_Query extends BP_User_Query {
 	 *
 	 * @since BuddyPress (1.8.0)
 	 *
-	 * @param object $query BP_User_Query object. Because we're filtering
-	 *   the current object, we use $this inside of the method instead
+	 * @param BP_User_Query $query BP_User_Query object. Because we're
+	 *        filtering the current object, we use $this inside of the
+	 *        method instead.
 	 * @param string $user_ids_sql Sanitized, comma-separated string of
-	 *   the user ids returned by the main query
+	 *        the user ids returned by the main query.
 	 */
 	public function populate_group_member_extras( $query, $user_ids_sql ) {
 		global $wpdb;
@@ -1766,10 +1778,53 @@ class BP_Group_Member_Query extends BP_User_Query {
 		// Don't filter other BP_User_Query objects on the same page
 		remove_action( 'bp_user_query_populate_extras', array( $this, 'populate_group_member_extras' ), 10, 2 );
 	}
+
+	/**
+	 * Sort user IDs by how recently they have generated activity within a given group.
+	 *
+	 * @since BuddyPress (2.1.0)
+	 *
+	 * @param BP_User_Query $query BP_User_Query object.
+	 * @param array $gm_ids array of group member ids.
+	 * @return array
+	 */
+	public function get_gm_ids_ordered_by_activity( $query, $gm_ids = array() ) {
+		global $wpdb;
+
+		if ( empty( $gm_ids ) ) {
+			return $gm_ids;
+		}
+
+		if ( ! bp_is_active( 'activity' ) ) {
+			return $gm_ids;
+		}
+
+		$activity_table = buddypress()->activity->table_name;
+
+		$sql = array(
+			'select'  => "SELECT user_id, max( date_recorded ) as date_recorded FROM {$activity_table}",
+			'where'   => array(),
+			'groupby' => 'GROUP BY user_id',
+			'orderby' => 'ORDER BY date_recorded',
+			'order'   => 'DESC',
+		);
+
+		$sql['where'] = array(
+			'user_id IN (' . implode( ',', wp_parse_id_list( $gm_ids ) ) . ')',
+			'item_id = ' . absint( $query->query_vars['group_id'] ),
+			$wpdb->prepare( "component = %s", buddypress()->groups->id ),
+		);
+
+		$sql['where'] = 'WHERE ' . implode( ' AND ', $sql['where'] );
+
+		$group_user_ids = $wpdb->get_results( "{$sql['select']} {$sql['where']} {$sql['groupby']} {$sql['orderby']} {$sql['order']}" );
+
+		return wp_list_pluck( $group_user_ids, 'user_id' );
+	}
 }
 
 /**
- * BuddyPress Group Membership objects.
+ * BuddyPress Group Membership object.
  */
 class BP_Groups_Member {
 
@@ -2205,21 +2260,23 @@ class BP_Groups_Member {
 	public static function get_recently_joined( $user_id, $limit = false, $page = false, $filter = false ) {
 		global $wpdb, $bp;
 
-		$pag_sql = $hidden_sql = $filter_sql = '';
+		$user_id_sql = $pag_sql = $hidden_sql = $filter_sql = '';
+
+		$user_id_sql = $wpdb->prepare( 'm.user_id = %d', $user_id );
 
 		if ( !empty( $limit ) && !empty( $page ) )
 			$pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) );
 
 		if ( !empty( $filter ) ) {
-			$filter     = esc_sql( like_escape( $filter ) );
-			$filter_sql = " AND ( g.name LIKE '%%{$filter}%%' OR g.description LIKE '%%{$filter}%%' )";
+			$search_terms_like = '%' . bp_esc_like( $filter ) . '%';
+			$filter_sql = $wpdb->prepare( " AND ( g.name LIKE %s OR g.description LIKE %s )", $search_terms_like, $search_terms_like );
 		}
 
 		if ( $user_id != bp_loggedin_user_id() )
 			$hidden_sql = " AND g.status != 'hidden'";
 
-		$paged_groups = $wpdb->get_results( $wpdb->prepare( "SELECT g.*, gm1.meta_value as total_member_count, gm2.meta_value as last_activity FROM {$bp->groups->table_name_groupmeta} gm1, {$bp->groups->table_name_groupmeta} gm2, {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE g.id = m.group_id AND g.id = gm1.group_id AND g.id = gm2.group_id AND gm2.meta_key = 'last_activity' AND gm1.meta_key = 'total_member_count'{$hidden_sql}{$filter_sql} AND m.user_id = %d AND m.is_confirmed = 1 AND m.is_banned = 0 ORDER BY m.date_modified DESC {$pag_sql}", $user_id ) );
-		$total_groups = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(DISTINCT m.group_id) FROM {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE m.group_id = g.id{$hidden_sql}{$filter_sql} AND m.user_id = %d AND m.is_banned = 0 AND m.is_confirmed = 1 ORDER BY m.date_modified DESC", $user_id ) );
+		$paged_groups = $wpdb->get_results( "SELECT g.*, gm1.meta_value as total_member_count, gm2.meta_value as last_activity FROM {$bp->groups->table_name_groupmeta} gm1, {$bp->groups->table_name_groupmeta} gm2, {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE g.id = m.group_id AND g.id = gm1.group_id AND g.id = gm2.group_id AND gm2.meta_key = 'last_activity' AND gm1.meta_key = 'total_member_count'{$hidden_sql}{$filter_sql} AND {$user_id_sql} AND m.is_confirmed = 1 AND m.is_banned = 0 ORDER BY m.date_modified DESC {$pag_sql}" );
+		$total_groups = $wpdb->get_var( "SELECT COUNT(DISTINCT m.group_id) FROM {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE m.group_id = g.id{$hidden_sql}{$filter_sql} AND {$user_id_sql} AND m.is_banned = 0 AND m.is_confirmed = 1 ORDER BY m.date_modified DESC" );
 
 		return array( 'groups' => $paged_groups, 'total' => $total_groups );
 	}
@@ -2242,21 +2299,23 @@ class BP_Groups_Member {
 	public static function get_is_admin_of( $user_id, $limit = false, $page = false, $filter = false ) {
 		global $wpdb, $bp;
 
-		$pag_sql = $hidden_sql = $filter_sql = '';
+		$user_id_sql = $pag_sql = $hidden_sql = $filter_sql = '';
+
+		$user_id_sql = $wpdb->prepare( 'm.user_id = %d', $user_id );
 
 		if ( !empty( $limit ) && !empty( $page ) )
 			$pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) );
 
 		if ( !empty( $filter ) ) {
-			$filter     = esc_sql( like_escape( $filter ) );
-			$filter_sql = " AND ( g.name LIKE '%%{$filter}%%' OR g.description LIKE '%%{$filter}%%' )";
+			$search_terms_like = '%' . bp_esc_like( $filter ) . '%';
+			$filter_sql = $wpdb->prepare( " AND ( g.name LIKE %s OR g.description LIKE %s )", $search_terms_like, $search_terms_like );
 		}
 
 		if ( $user_id != bp_loggedin_user_id() )
 			$hidden_sql = " AND g.status != 'hidden'";
 
-		$paged_groups = $wpdb->get_results( $wpdb->prepare( "SELECT g.*, gm1.meta_value as total_member_count, gm2.meta_value as last_activity FROM {$bp->groups->table_name_groupmeta} gm1, {$bp->groups->table_name_groupmeta} gm2, {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE g.id = m.group_id AND g.id = gm1.group_id AND g.id = gm2.group_id AND gm2.meta_key = 'last_activity' AND gm1.meta_key = 'total_member_count'{$hidden_sql}{$filter_sql} AND m.user_id = %d AND m.is_confirmed = 1 AND m.is_banned = 0 AND m.is_admin = 1 ORDER BY m.date_modified ASC {$pag_sql}", $user_id ) );
-		$total_groups = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(DISTINCT m.group_id) FROM {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE m.group_id = g.id{$hidden_sql}{$filter_sql} AND m.user_id = %d AND m.is_confirmed = 1 AND m.is_banned = 0 AND m.is_admin = 1 ORDER BY date_modified ASC", $user_id ) );
+		$paged_groups = $wpdb->get_results( "SELECT g.*, gm1.meta_value as total_member_count, gm2.meta_value as last_activity FROM {$bp->groups->table_name_groupmeta} gm1, {$bp->groups->table_name_groupmeta} gm2, {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE g.id = m.group_id AND g.id = gm1.group_id AND g.id = gm2.group_id AND gm2.meta_key = 'last_activity' AND gm1.meta_key = 'total_member_count'{$hidden_sql}{$filter_sql} AND {$user_id_sql} AND m.is_confirmed = 1 AND m.is_banned = 0 AND m.is_admin = 1 ORDER BY m.date_modified ASC {$pag_sql}" );
+		$total_groups = $wpdb->get_var( "SELECT COUNT(DISTINCT m.group_id) FROM {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE m.group_id = g.id{$hidden_sql}{$filter_sql} AND {$user_id_sql} AND m.is_confirmed = 1 AND m.is_banned = 0 AND m.is_admin = 1 ORDER BY date_modified ASC" );
 
 		return array( 'groups' => $paged_groups, 'total' => $total_groups );
 	}
@@ -2279,21 +2338,23 @@ class BP_Groups_Member {
 	public static function get_is_mod_of( $user_id, $limit = false, $page = false, $filter = false ) {
 		global $wpdb, $bp;
 
-		$pag_sql = $hidden_sql = $filter_sql = '';
+		$user_id_sql = $pag_sql = $hidden_sql = $filter_sql = '';
+
+		$user_id_sql = $wpdb->prepare( 'm.user_id = %d', $user_id );
 
 		if ( !empty( $limit ) && !empty( $page ) )
 			$pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) );
 
 		if ( !empty( $filter ) ) {
-			$filter     = esc_sql( like_escape( $filter ) );
-			$filter_sql = " AND ( g.name LIKE '%%{$filter}%%' OR g.description LIKE '%%{$filter}%%' )";
+			$search_terms_like = '%' . bp_esc_like( $filter ) . '%';
+			$filter_sql = $wpdb->prepare( " AND ( g.name LIKE %s OR g.description LIKE %s )", $search_terms_like, $search_terms_like );
 		}
 
 		if ( $user_id != bp_loggedin_user_id() )
 			$hidden_sql = " AND g.status != 'hidden'";
 
-		$paged_groups = $wpdb->get_results( $wpdb->prepare( "SELECT g.*, gm1.meta_value as total_member_count, gm2.meta_value as last_activity FROM {$bp->groups->table_name_groupmeta} gm1, {$bp->groups->table_name_groupmeta} gm2, {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE g.id = m.group_id AND g.id = gm1.group_id AND g.id = gm2.group_id AND gm2.meta_key = 'last_activity' AND gm1.meta_key = 'total_member_count'{$hidden_sql}{$filter_sql} AND m.user_id = %d AND m.is_confirmed = 1 AND m.is_banned = 0 AND m.is_mod = 1 ORDER BY m.date_modified ASC {$pag_sql}", $user_id ) );
-		$total_groups = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(DISTINCT m.group_id) FROM {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE m.group_id = g.id{$hidden_sql}{$filter_sql} AND m.user_id = %d AND m.is_confirmed = 1 AND m.is_banned = 0 AND m.is_mod = 1 ORDER BY date_modified ASC", $user_id ) );
+		$paged_groups = $wpdb->get_results( "SELECT g.*, gm1.meta_value as total_member_count, gm2.meta_value as last_activity FROM {$bp->groups->table_name_groupmeta} gm1, {$bp->groups->table_name_groupmeta} gm2, {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE g.id = m.group_id AND g.id = gm1.group_id AND g.id = gm2.group_id AND gm2.meta_key = 'last_activity' AND gm1.meta_key = 'total_member_count'{$hidden_sql}{$filter_sql} AND {$user_id_sql} AND m.is_confirmed = 1 AND m.is_banned = 0 AND m.is_mod = 1 ORDER BY m.date_modified ASC {$pag_sql}" );
+		$total_groups = $wpdb->get_var( "SELECT COUNT(DISTINCT m.group_id) FROM {$bp->groups->table_name_members} m, {$bp->groups->table_name} g WHERE m.group_id = g.id{$hidden_sql}{$filter_sql} AND {$user_id_sql} AND m.is_confirmed = 1 AND m.is_banned = 0 AND m.is_mod = 1 ORDER BY date_modified ASC" );
 
 		return array( 'groups' => $paged_groups, 'total' => $total_groups );
 	}
@@ -2570,7 +2631,15 @@ class BP_Groups_Member {
 	public static function get_group_administrator_ids( $group_id ) {
 		global $bp, $wpdb;
 
-		return $wpdb->get_results( $wpdb->prepare( "SELECT user_id, date_modified FROM {$bp->groups->table_name_members} WHERE group_id = %d AND is_admin = 1 AND is_banned = 0", $group_id ) );
+		$group_admins = wp_cache_get( $group_id, 'bp_group_admins' );
+
+		if ( false === $group_admins ) {
+			$group_admins = $wpdb->get_results( $wpdb->prepare( "SELECT user_id, date_modified FROM {$bp->groups->table_name_members} WHERE group_id = %d AND is_admin = 1 AND is_banned = 0", $group_id ) );
+
+			wp_cache_set( $group_id, $group_admins, 'bp_group_admins' );
+		}
+
+		return $group_admins;
 	}
 
 	/**
@@ -2781,6 +2850,7 @@ class BP_Group_Extension {
 	 * Information about this extension's screens.
 	 *
 	 * @since BuddyPress (1.8.0)
+	 * @access public
 	 * @var array
 	 */
 	public $screens = array();
@@ -2789,6 +2859,7 @@ class BP_Group_Extension {
 	 * The name of the extending class.
 	 *
 	 * @since BuddyPress (1.8.0)
+	 * @access public
 	 * @var string
 	 */
 	public $class_name = '';
@@ -2797,6 +2868,7 @@ class BP_Group_Extension {
 	 * A ReflectionClass object of the current extension.
 	 *
 	 * @since BuddyPress (1.8.0)
+	 * @access public
 	 * @var ReflectionClass
 	 */
 	public $class_reflection = null;
@@ -2805,14 +2877,25 @@ class BP_Group_Extension {
 	 * Parsed configuration paramaters for the extension.
 	 *
 	 * @since BuddyPress (1.8.0)
+	 * @access public
 	 * @var array
 	 */
 	public $params = array();
 
+	/**
+	 * Raw config params, as passed by the extending class.
+	 *
+	 * @since BuddyPress (2.1.0)
+	 * @access public
+	 * @var array
+	 */
+	public $params_raw = array();
+
 	/**
 	 * The ID of the current group.
 	 *
 	 * @since BuddyPress (1.8.0)
+	 * @access public
 	 * @var int
 	 */
 	public $group_id = 0;
@@ -2820,6 +2903,7 @@ class BP_Group_Extension {
 	/**
 	 * The slug of the current extension.
 	 *
+	 * @access public
 	 * @var string
 	 */
 	public $slug = '';
@@ -2827,6 +2911,7 @@ class BP_Group_Extension {
 	/**
 	 * The translatable name of the current extension.
 	 *
+	 * @access public
 	 * @var string
 	 */
 	public $name = '';
@@ -2834,6 +2919,7 @@ class BP_Group_Extension {
 	/**
 	 * The visibility of the extension tab. 'public' or 'private'.
 	 *
+	 * @access public
 	 * @var string
 	 */
 	public $visibility = 'public';
@@ -2841,6 +2927,7 @@ class BP_Group_Extension {
 	/**
 	 * The numeric position of the main nav item.
 	 *
+	 * @access public
 	 * @var int
 	 */
 	public $nav_item_position = 81;
@@ -2848,13 +2935,33 @@ class BP_Group_Extension {
 	/**
 	 * Whether to show the nav item.
 	 *
+	 * @access public
 	 * @var bool
 	 */
 	public $enable_nav_item = true;
 
+	/**
+	 * Whether the current user should see the navigation item.
+	 *
+	 * @since BuddyPress (2.1.0)
+	 * @access public
+	 * @var bool
+	 */
+	public $user_can_see_nav_item;
+
+	/**
+	 * Whether the current user can visit the tab.
+	 *
+	 * @since BuddyPress (2.1.0)
+	 * @access public
+	 * @var bool
+	 */
+	public $user_can_visit;
+
 	/**
 	 * The text of the nav item. Defaults to self::name.
 	 *
+	 * @access public
 	 * @var string
 	 */
 	public $nav_item_name = '';
@@ -2864,6 +2971,7 @@ class BP_Group_Extension {
 	 *
 	 * Default: 'groups_custom_group_boxes'.
 	 *
+	 * @access public
 	 * @var string
 	 */
 	public $display_hook = 'groups_custom_group_boxes';
@@ -2873,6 +2981,7 @@ class BP_Group_Extension {
 	 *
 	 * Default: 'groups/single/plugins'.
 	 *
+	 * @access public
 	 * @var string
 	 */
 	public $template_file = 'groups/single/plugins';
@@ -2883,6 +2992,7 @@ class BP_Group_Extension {
 	 * Has the extension been initialized?
 	 *
 	 * @since BuddyPress (1.8.0)
+	 * @access protected
 	 * @var bool
 	 */
 	protected $initialized = false;
@@ -2891,6 +3001,7 @@ class BP_Group_Extension {
 	 * Extension properties as set by legacy extensions.
 	 *
 	 * @since BuddyPress (1.8.0)
+	 * @access protected
 	 * @var array
 	 */
 	protected $legacy_properties = array();
@@ -2902,14 +3013,25 @@ class BP_Group_Extension {
 	 * then converted to match the new format for params.
 	 *
 	 * @since BuddyPress (1.8.0)
+	 * @access protected
 	 * @var array
 	 */
 	protected $legacy_properties_converted = array();
 
+	/**
+	 * Redirect location as defined by post-edit save callback.
+	 *
+	 * @since BuddyPress (2.1.0)
+	 * @access protected
+	 * @var string
+	 */
+	protected $post_save_redirect;
+
 	/**
 	 * Miscellaneous data as set by the __set() magic method.
 	 *
 	 * @since BuddyPress (1.8.0)
+	 * @access protected
 	 * @var array
 	 */
 	protected $data = array();
@@ -2990,6 +3112,8 @@ class BP_Group_Extension {
 	 * }
 	 */
 	public function init( $args = array() ) {
+		// Store the raw arguments
+		$this->params_raw = $args;
 
 		// Before this init() method was introduced, plugins were
 		// encouraged to set their config directly. For backward
@@ -3010,6 +3134,8 @@ class BP_Group_Extension {
 			'display_hook'      => $this->display_hook,
 			'template_file'     => $this->template_file,
 			'screens'           => $this->get_default_screens(),
+			'access'            => null,
+			'show_tab'          => null,
 		) );
 
 		$this->initialized = true;
@@ -3053,6 +3179,9 @@ class BP_Group_Extension {
 		// Configure 'screens': create, admin, and edit contexts
 		$this->setup_screens();
 
+		// Configure access-related settings
+		$this->setup_access_settings();
+
 		// Mirror configuration data so it's accessible to plugins
 		// that look for it in its old locations
 		$this->setup_legacy_properties();
@@ -3092,6 +3221,8 @@ class BP_Group_Extension {
 	 *   - group admin
 	 *
 	 * @since BuddyPress (1.8.0)
+	 *
+	 * @return int
 	 */
 	public static function get_group_id() {
 
@@ -3123,6 +3254,8 @@ class BP_Group_Extension {
 	 * Gather configuration data about your screens.
 	 *
 	 * @since BuddyPress (1.8.0)
+	 *
+	 * @return array
 	 */
 	protected function get_default_screens() {
 		$this->setup_class_info();
@@ -3171,6 +3304,148 @@ class BP_Group_Extension {
 		}
 	}
 
+	/**
+	 * Set up access-related settings for this extension.
+	 *
+	 * @since BuddyPress (2.1.0)
+	 */
+	protected function setup_access_settings() {
+		// Bail if no gruop ID is available
+		if ( empty( $this->group_id ) ) {
+			return;
+		}
+
+		// Backward compatibility
+		if ( isset( $this->params['enable_nav_item'] ) ) {
+			$this->enable_nav_item = (bool) $this->params['enable_nav_item'];
+		}
+
+		// Tab Access
+		$this->user_can_visit = false;
+
+		// Backward compatibility for components that do not provide
+		// explicit 'access' parameter
+		if ( empty( $this->params['access'] ) ) {
+			if ( false === $this->enable_nav_item ) {
+				$this->params['access'] = 'noone';
+			} else {
+				$group = groups_get_group( array(
+					'group_id' => $this->group_id,
+				) );
+
+				if ( ! empty( $group->status ) && 'public' === $group->status ) {
+					// Tabs in public groups are accessible to anyone by default
+					$this->params['access'] = 'anyone';
+				} else {
+					// All other groups have members-only as the default
+					$this->params['access'] = 'member';
+				}
+			}
+		}
+
+		// Parse multiple access conditions into an array
+		$access_conditions = $this->params['access'];
+		if ( ! is_array( $access_conditions ) ) {
+			$access_conditions = explode( ',', $access_conditions );
+		}
+
+		// If the current user meets at least one condition, the
+		// get access
+		foreach ( $access_conditions as $access_condition ) {
+			if ( $this->user_meets_access_condition( $access_condition ) ) {
+				$this->user_can_visit = true;
+				break;
+			}
+		}
+
+		// Tab Visibility
+		$this->user_can_see_nav_item = false;
+
+		// Backward compatibility for components that do not provide
+		// explicit 'show_tab' parameter
+		if ( empty( $this->params['show_tab'] ) ) {
+			if ( false === $this->params['enable_nav_item'] ) {
+				// enable_nav_item is only false if it's been
+				// defined explicitly as such in the
+				// constructor. So we always trust this value
+				$this->params['show_tab'] = 'noone';
+
+			} else if ( isset( $this->params_raw['enable_nav_item'] ) || isset( $this->params_raw['visibility'] ) ) {
+				// If enable_nav_item or visibility is passed,
+				// we assume this  is a legacy extension.
+				// Legacy behavior is that enable_nav_item=true +
+				// visibility=private implies members-only
+				if ( 'public' !== $this->visibility ) {
+					$this->params['show_tab'] = 'member';
+				} else {
+					$this->params['show_tab'] = 'anyone';
+				}
+
+			} else {
+				// No show_tab or enable_nav_item value is
+				// available, so match the value of 'access'
+				$this->params['show_tab'] = $this->params['access'];
+			}
+		}
+
+		// Parse multiple access conditions into an array
+		$access_conditions = $this->params['show_tab'];
+		if ( ! is_array( $access_conditions ) ) {
+			$access_conditions = explode( ',', $access_conditions );
+		}
+
+		// If the current user meets at least one condition, the
+		// get access
+		foreach ( $access_conditions as $access_condition ) {
+			if ( $this->user_meets_access_condition( $access_condition ) ) {
+				$this->user_can_see_nav_item = true;
+				break;
+			}
+		}
+	}
+
+	/**
+	 * Check whether the current user meets an access condition.
+	 *
+	 * @param string $access_condition 'anyone', 'loggedin', 'member',
+	 *        'mod', 'admin' or 'noone'.
+	 * @return bool
+	 */
+	protected function user_meets_access_condition( $access_condition ) {
+		$group = groups_get_group( array(
+			'group_id' => $this->group_id,
+		) );
+
+		switch ( $access_condition ) {
+			case 'admin' :
+				$meets_condition = groups_is_user_admin( bp_loggedin_user_id(), $this->group_id );
+				break;
+
+			case 'mod' :
+				$meets_condition = groups_is_user_mod( bp_loggedin_user_id(), $this->group_id );
+				break;
+
+			case 'member' :
+				$meets_condition = groups_is_user_member( bp_loggedin_user_id(), $this->group_id );
+				break;
+
+			case 'loggedin' :
+				$meets_condition = is_user_logged_in();
+				break;
+
+			case 'noone' :
+				$meets_condition = false;
+				break;
+
+			case 'anyone' :
+			default :
+				$meets_condition = true;
+				break;
+		}
+
+		return $meets_condition;
+	}
+
 	/** Display ***********************************************************/
 
 	/**
@@ -3185,25 +3460,31 @@ class BP_Group_Extension {
 			return;
 		}
 
-		// Bail if the current user doesn't have access
+		// Backward compatibility only
 		if ( ( 'public' !== $this->visibility ) && ! buddypress()->groups->current_group->user_has_access ) {
 			return;
 		}
 
-		if ( true === $this->enable_nav_item ) {
+		$user_can_see_nav_item = $this->user_can_see_nav_item();
+
+		if ( $user_can_see_nav_item ) {
+			$group_permalink = bp_get_group_permalink( groups_get_current_group() );
+
 			bp_core_new_subnav_item( array(
 				'name'            => ! $this->nav_item_name ? $this->name : $this->nav_item_name,
 				'slug'            => $this->slug,
 				'parent_slug'     => bp_get_current_group_slug(),
-				'parent_url'      => bp_get_group_permalink( groups_get_current_group() ),
+				'parent_url'      => $group_permalink,
 				'position'        => $this->nav_item_position,
 				'item_css_id'     => 'nav-' . $this->slug,
 				'screen_function' => array( &$this, '_display_hook' ),
-				'user_has_access' => $this->enable_nav_item
+				'user_has_access' => $user_can_see_nav_item,
+				'no_access_url'   => $group_permalink,
 			) );
 
 			// When we are viewing the extension display page, set the title and options title
 			if ( bp_is_current_action( $this->slug ) ) {
+				add_filter( 'bp_group_user_has_access',   array( $this, 'group_access_protection' ), 10, 2 );
 				add_action( 'bp_template_content_header', create_function( '', 'echo "' . esc_attr( $this->name ) . '";' ) );
 				add_action( 'bp_template_title',          create_function( '', 'echo "' . esc_attr( $this->name ) . '";' ) );
 			}
@@ -3223,6 +3504,69 @@ class BP_Group_Extension {
 		bp_core_load_template( apply_filters( 'bp_core_template_plugin', $this->template_file ) );
 	}
 
+	/**
+	 * Determine whether the current user should see this nav tab.
+	 *
+	 * Note that this controls only the display of the navigation item.
+	 * Access to the tab is controlled by the user_can_visit() check.
+	 *
+	 * @since BuddyPress (2.1.0)
+	 *
+	 * @return bool
+	 */
+	public function user_can_see_nav_item( $user_can_see_nav_item = false ) {
+		if ( 'noone' !== $this->params['show_tab'] && current_user_can( 'bp_moderate' ) ) {
+			return true;
+		}
+
+		return $this->user_can_see_nav_item;
+	}
+
+	/**
+	 * Determine whether the current user has access to visit this tab.
+	 *
+	 * @since BuddyPress (2.1.0)
+	 *
+	 * @return bool
+	 */
+	public function user_can_visit( $user_can_visit = false ) {
+		if ( 'noone' !== $this->params['access'] && current_user_can( 'bp_moderate' ) ) {
+			return true;
+		}
+
+		return $this->user_can_visit;
+	}
+
+	/**
+	 * Filter the access check in bp_groups_group_access_protection() for this extension.
+	 *
+	 * Note that $no_access_args is passed by reference, as there are some
+	 * circumstances where the bp_core_no_access() arguments need to be
+	 * modified before the redirect takes place.
+	 *
+	 * @since BuddyPress (2.1.0)
+	 *
+	 * @param bool $user_can_visit
+	 * @param array $no_access_args
+	 * @return bool
+	 */
+	public function group_access_protection( $user_can_visit, &$no_access_args ) {
+		$user_can_visit = $this->user_can_visit();
+
+		if ( ! $user_can_visit && is_user_logged_in() ) {
+			$current_group = groups_get_group( array(
+				'group_id' => $this->group_id,
+			) );
+
+			$no_access_args['message'] = __( 'You do not have access to this content.', 'buddypress' );
+			$no_access_args['root'] = bp_get_group_permalink( $current_group ) . 'home/';
+			$no_access_args['redirect'] = false;
+		}
+
+		return $user_can_visit;
+	}
+
+
 	/** Create ************************************************************/
 
 	/**
@@ -3377,7 +3721,24 @@ class BP_Group_Extension {
 		}
 
 		$this->check_nonce( 'edit' );
+
+		// Detect whether the screen_save_callback is performing a
+		// redirect, so that we don't do one of our own
+		add_filter( 'wp_redirect', array( $this, 'detect_post_save_redirect' ) );
+
+		// Call the extension's save routine
 		call_user_func( $this->screens['edit']['screen_save_callback'], $this->group_id );
+
+		// Clean up detection filters
+		remove_filter( 'wp_redirect', array( $this, 'detect_post_save_redirect' ) );
+
+		// Perform a redirect only if one has not already taken place
+		if ( empty( $this->post_save_redirect ) ) {
+			$redirect_to = apply_filters( 'bp_group_extension_edit_screen_save_redirect', bp_get_requested_url( ) );
+
+			bp_core_redirect( $redirect_to );
+			die();
+		}
 	}
 
 	/**
@@ -3441,6 +3802,22 @@ class BP_Group_Extension {
 		return ! empty( $matches[0] );
 	}
 
+	/**
+	 * Detect redirects hardcoded into edit_screen_save() callbacks.
+	 *
+	 * @since BuddyPress (2.1.0)
+	 *
+	 * @param string $location
+	 * @return string
+	 */
+	public function detect_post_save_redirect( $redirect = '' ) {
+		if ( ! empty( $redirect ) ) {
+			$this->post_save_redirect = $redirect;
+		}
+
+		return $redirect;
+	}
+
 	/** Admin *************************************************************/
 
 	/**
@@ -3516,8 +3893,6 @@ class BP_Group_Extension {
 	 *
 	 * @since BuddyPress (1.8.0)
 	 *
-	 * @uses wp_nonce_field()
-	 *
 	 * @param string $context Screen context. 'create', 'edit', or 'admin'.
 	 */
 	public function nonce_field( $context = '' ) {
@@ -3529,8 +3904,6 @@ class BP_Group_Extension {
 	 *
 	 * @since BuddyPress (1.8.0)
 	 *
-	 * @uses check_admin_referer()
-	 *
 	 * @param string $context Screen context. 'create', 'edit', or 'admin'.
 	 */
 	public function check_nonce( $context = '' ) {
@@ -3547,7 +3920,6 @@ class BP_Group_Extension {
 	 * @since BuddyPress (1.8.0)
 	 *
 	 * @param string $context Screen context. 'create', 'edit', or 'admin'.
-	 *
 	 * @return bool True if the screen is enabled, otherwise false.
 	 */
 	public function is_screen_enabled( $context = '' ) {
@@ -4006,3 +4378,135 @@ function bp_register_group_extension( $group_extension_class = '' ) {
 		add_action( "admin_init", array( &$extension, "_register" ) );
 	' ), 11 );
 }
+
+/**
+ * Adds support for user at-mentions (for users in a specific Group) to the Suggestions API.
+ *
+ * @since BuddyPress (2.1.0)
+ */
+class BP_Groups_Member_Suggestions extends BP_Members_Suggestions {
+
+	/**
+	 * Default arguments for this suggestions service.
+	 *
+	 * @since BuddyPress (2.1.0)
+	 * @access protected
+	 * @var array $args {
+	 *     @type int $group_id Positive integers will restrict the search to members in that group.
+	 *           Negative integers will restrict the search to members in every other group.
+	 *     @type int $limit Maximum number of results to display. Default: 16.
+	 *     @type bool $only_friends If true, only match the current user's friends. Default: false.
+	 *     @type string $term The suggestion service will try to find results that contain this string.
+	 *           Mandatory.
+	 * }
+	 */
+	protected $default_args = array(
+		'group_id'     => 0,
+		'limit'        => 16,
+		'only_friends' => false,
+		'term'         => '',
+		'type'         => '',
+	);
+
+
+	/**
+	 * Validate and sanitise the parameters for the suggestion service query.
+	 *
+	 * @return true|WP_Error If validation fails, return a WP_Error object. On success, return true (bool).
+	 * @since BuddyPress (2.1.0)
+	 */
+	public function validate() {
+		$this->args['group_id'] = (int) $this->args['group_id'];
+		$this->args             = apply_filters( 'bp_groups_member_suggestions_args', $this->args, $this );
+
+		// Check for invalid or missing mandatory parameters.
+		if ( ! $this->args['group_id'] || ! bp_is_active( 'groups' ) ) {
+			return new WP_Error( 'missing_requirement' );
+		}
+
+		// Check that the specified group_id exists, and that the current user can access it.
+		$the_group = groups_get_group( array(
+			'group_id'        => absint( $this->args['group_id'] ),
+			'populate_extras' => true,
+		) );
+
+		if ( $the_group->id === 0 || ! $the_group->user_has_access ) {
+			return new WP_Error( 'access_denied' );
+		}
+
+		return apply_filters( 'bp_groups_member_suggestions_validate_args', parent::validate(), $this );
+	}
+
+	/**
+	 * Find and return a list of username suggestions that match the query.
+	 *
+	 * @return array|WP_Error Array of results. If there were problems, returns a WP_Error object.
+	 * @since BuddyPress (2.1.0)
+	 */
+	public function get_suggestions() {
+		$user_query = array(
+			'count_total'     => '',  // Prevents total count
+			'populate_extras' => false,
+			'type'            => 'alphabetical',
+
+			'group_role'      => array( 'admin', 'member', 'mod' ),
+			'page'            => 1,
+			'per_page'        => $this->args['limit'],
+			'search_terms'    => $this->args['term'],
+			'search_wildcard' => 'right',
+		);
+
+		// Only return matches of friends of this user.
+		if ( $this->args['only_friends'] && is_user_logged_in() ) {
+			$user_query['user_id'] = get_current_user_id();
+		}
+
+		// Positive Group IDs will restrict the search to members in that group.
+		if ( $this->args['group_id'] > 0 ) {
+			$user_query['group_id'] = $this->args['group_id'];
+
+		// Negative Group IDs will restrict the search to members in every other group.
+		} else {
+			$group_query = array(
+				'count_total'     => '',  // Prevents total count
+				'populate_extras' => false,
+				'type'            => 'alphabetical',
+
+				'group_id'        => absint( $this->args['group_id'] ),
+				'group_role'      => array( 'admin', 'member', 'mod' ),
+				'page'            => 1,
+			);
+			$group_users = new BP_Group_Member_Query( $group_query );
+
+			if ( $group_users->results ) {
+				$user_query['exclude'] = wp_list_pluck( $group_users->results, 'ID' );
+			} else {
+				$user_query['include'] = array( 0 );
+			}
+		}
+
+		$user_query = apply_filters( 'bp_groups_member_suggestions_query_args', $user_query, $this );
+		if ( is_wp_error( $user_query ) ) {
+			return $user_query;
+		}
+
+
+		if ( isset( $user_query['group_id'] ) ) {
+			$user_query = new BP_Group_Member_Query( $user_query );
+		} else {
+			$user_query = new BP_User_Query( $user_query );
+		}
+
+		$results = array();
+		foreach ( $user_query->results as $user ) {
+			$result        = new stdClass();
+			$result->ID    = $user->user_nicename;
+			$result->image = bp_core_fetch_avatar( array( 'html' => false, 'item_id' => $user->ID ) );
+			$result->name  = bp_core_get_user_displayname( $user->ID );
+
+			$results[] = $result;
+		}
+
+		return apply_filters( 'bp_groups_member_suggestions_get_suggestions', $results, $this );
+	}
+}
diff --git a/wp-content/plugins/buddypress/bp-groups/bp-groups-filters.php b/wp-content/plugins/buddypress/bp-groups/bp-groups-filters.php
index 593f3e95b..9e66f3d51 100644
--- a/wp-content/plugins/buddypress/bp-groups/bp-groups-filters.php
+++ b/wp-content/plugins/buddypress/bp-groups/bp-groups-filters.php
@@ -33,12 +33,12 @@ add_filter( 'bp_get_group_description_excerpt', 'wpautop' );
 add_filter( 'bp_get_group_description',         'make_clickable', 9 );
 add_filter( 'bp_get_group_description_excerpt', 'make_clickable', 9 );
 
-add_filter( 'bp_get_group_name',                    'wp_filter_kses', 1 );
-add_filter( 'bp_get_group_permalink',               'wp_filter_kses', 1 );
+add_filter( 'bp_get_group_name',                    'wp_filter_kses',        1 );
+add_filter( 'bp_get_group_permalink',               'wp_filter_kses',        1 );
 add_filter( 'bp_get_group_description',             'bp_groups_filter_kses', 1 );
-add_filter( 'bp_get_group_description_excerpt',     'wp_filter_kses', 1 );
-add_filter( 'groups_group_name_before_save',        'wp_filter_kses', 1 );
-add_filter( 'groups_group_description_before_save', 'wp_filter_kses', 1 );
+add_filter( 'bp_get_group_description_excerpt',     'wp_filter_kses',        1 );
+add_filter( 'groups_group_name_before_save',        'wp_filter_kses',        1 );
+add_filter( 'groups_group_description_before_save', 'wp_filter_kses',        1 );
 
 add_filter( 'bp_get_group_description',         'stripslashes' );
 add_filter( 'bp_get_group_description_excerpt', 'stripslashes' );
@@ -65,29 +65,55 @@ add_filter( 'bp_get_total_group_count',      'bp_core_number_format' );
 add_filter( 'bp_get_group_total_for_member', 'bp_core_number_format' );
 add_filter( 'bp_get_group_total_members',    'bp_core_number_format' );
 
-function bp_groups_filter_kses( $content ) {
-	global $allowedtags;
-
-	$groups_allowedtags                  = $allowedtags;
-	$groups_allowedtags['a']['class']    = array();
-	$groups_allowedtags['img']           = array();
-	$groups_allowedtags['img']['src']    = array();
-	$groups_allowedtags['img']['alt']    = array();
-	$groups_allowedtags['img']['class']  = array();
-	$groups_allowedtags['img']['width']  = array();
-	$groups_allowedtags['img']['height'] = array();
-	$groups_allowedtags['img']['class']  = array();
-	$groups_allowedtags['img']['id']     = array();
-	$groups_allowedtags['code']          = array();
-	$groups_allowedtags = apply_filters( 'bp_groups_filter_kses', $groups_allowedtags );
-
-	return wp_kses( $content, $groups_allowedtags );
+/**
+ * Filter output of Group Description through WordPress's KSES API.
+ *
+ * @since BuddyPress (1.1.0)
+ *
+ * @param string $content
+ * @return string
+ */
+function bp_groups_filter_kses( $content = '' ) {
+
+	/**
+	 * Note that we don't immediately bail if $content is empty. This is because
+	 * WordPress's KSES API calls several other filters that might be relevant
+	 * to someone's workflow (like `pre_kses`)
+	 */
+
+	// Get allowed tags using core WordPress API allowing third party plugins
+	// to target the specific `buddypress-groups` context.
+	$allowed_tags = wp_kses_allowed_html( 'buddypress-groups' );
+
+	// Add our own tags allowed in group descriptions
+	$allowed_tags['a']['class']    = array();
+	$allowed_tags['img']           = array();
+	$allowed_tags['img']['src']    = array();
+	$allowed_tags['img']['alt']    = array();
+	$allowed_tags['img']['class']  = array();
+	$allowed_tags['img']['width']  = array();
+	$allowed_tags['img']['height'] = array();
+	$allowed_tags['img']['class']  = array();
+	$allowed_tags['img']['id']     = array();
+	$allowed_tags['code']          = array();
+
+	/**
+	 * Filter HTML elements allowed for a given context.
+	 *
+	 * @since BuddyPress (1.1.0)
+	 *
+	 * @param string $allowed_tags Allowed tags, attributes, and/or entities.
+	 */
+	$tags = apply_filters( 'bp_groups_filter_kses', $allowed_tags );
+
+	// Return KSES'ed content, allowing the above tags
+	return wp_kses( $content, $tags );
 }
 
-/** Group forums **************************************************************/
+/** Legacy group forums (bbPress 1.x) *****************************************/
 
 /**
- * Only filter the forum SQL on group pages or on the forums directory
+ * Filter bbPress query SQL when on group pages or on forums directory.
  */
 function groups_add_forum_privacy_sql() {
 	add_filter( 'get_topics_fields', 'groups_add_forum_fields_sql' );
@@ -96,11 +122,23 @@ function groups_add_forum_privacy_sql() {
 }
 add_filter( 'bbpress_init', 'groups_add_forum_privacy_sql' );
 
+/**
+ * Add fields to bbPress query for group-specific data.
+ *
+ * @param string $sql
+ * @return string
+ */
 function groups_add_forum_fields_sql( $sql = '' ) {
 	$sql = 't.*, g.id as object_id, g.name as object_name, g.slug as object_slug';
 	return $sql;
 }
 
+/**
+ * Add JOINed tables to bbPress query for group-specific data.
+ *
+ * @param string $sql
+ * @return string
+ */
 function groups_add_forum_tables_sql( $sql = '' ) {
 	global $bp;
 
@@ -109,6 +147,12 @@ function groups_add_forum_tables_sql( $sql = '' ) {
 	return $sql;
 }
 
+/**
+ * Add WHERE clauses to bbPress query for group-specific data and access protection.
+ *
+ * @param string $sql
+ * @return string
+ */
 function groups_add_forum_where_sql( $sql = '' ) {
 	global $bp;
 
@@ -152,6 +196,14 @@ function groups_add_forum_where_sql( $sql = '' ) {
 	return $bp->groups->filter_sql;
 }
 
+/**
+ * Modify bbPress caps for bp-forums.
+ *
+ * @param bool $value
+ * @param string $cap
+ * @param array $args
+ * @return bool
+ */
 function groups_filter_bbpress_caps( $value, $cap, $args ) {
 	global $bp;
 
@@ -169,11 +221,13 @@ function groups_filter_bbpress_caps( $value, $cap, $args ) {
 add_filter( 'bb_current_user_can', 'groups_filter_bbpress_caps', 10, 3 );
 
 /**
- * Amends the forum directory's "last active" bbPress SQL query to stop it fetching
- * information we aren't going to use. This speeds up the query.
+ * Amends the forum directory's "last active" bbPress SQL query to stop it fetching information we aren't going to use.
+ *
+ * This speeds up the query.
+ *
+ * @since BuddyPress (1.5.0)
  *
  * @see BB_Query::_filter_sql()
- * @since BuddyPress (1.5)
  */
 function groups_filter_forums_root_page_sql( $sql ) {
 	return apply_filters( 'groups_filter_bbpress_root_page_sql', 't.topic_id' );
diff --git a/wp-content/plugins/buddypress/bp-groups/bp-groups-forums.php b/wp-content/plugins/buddypress/bp-groups/bp-groups-forums.php
index 600fff373..95a9f316b 100644
--- a/wp-content/plugins/buddypress/bp-groups/bp-groups-forums.php
+++ b/wp-content/plugins/buddypress/bp-groups/bp-groups-forums.php
@@ -22,25 +22,30 @@ if ( !defined( 'ABSPATH' ) ) exit;
  *
  * Uses the bundled version of bbPress packaged with BuddyPress.
  *
- * @param int $group_id The group ID that the new forum should be attached to
- * @param string $group_name The group name
- * @param string $group_description The group description
+ * @since BuddyPress (1.0.0)
  *
- * @since BuddyPress (1.0)
+ * @param int $group_id The group ID that the new forum should be attached to.
+ * @param string $group_name The group name.
+ * @param string $group_desc The group description.
  */
 function groups_new_group_forum( $group_id = 0, $group_name = '', $group_desc = '' ) {
-	global $bp;
 
-	if ( empty( $group_id ) )
+	if ( empty( $group_id ) ) {
 		$group_id = bp_get_current_group_id();
+	}
 
-	if ( empty( $group_name ) )
+	if ( empty( $group_name ) ) {
 		$group_name = bp_get_current_group_name();
+	}
 
-	if ( empty( $group_desc ) )
-		$group_desc = $bp->groups->current_group->description;
+	if ( empty( $group_desc ) ) {
+		$group_desc = bp_get_current_group_description();
+	}
 
-	$forum_id = bp_forums_new_forum( array( 'forum_name' => $group_name, 'forum_desc' => $group_desc ) );
+	$forum_id = bp_forums_new_forum( array(
+		'forum_name' => $group_name,
+		'forum_desc' => $group_desc
+	) );
 
 	groups_update_groupmeta( $group_id, 'forum_id', $forum_id );
 
@@ -48,14 +53,11 @@ function groups_new_group_forum( $group_id = 0, $group_name = '', $group_desc =
 }
 
 /**
- * Updates group forum metadata (title, description, slug) when the group's details are edited
- *
- * @package BuddyPress
- * @subpackage Groups
+ * Update group forum metadata (title, description, slug) when the group's details are edited.
  *
- * @param int $group_id Group id, passed from groups_details_updated
+ * @since BuddyPress (1.1.0)
  *
- * @since BuddyPress (1.1)
+ * @param int $group_id Group id, passed from groups_details_updated.
  */
 function groups_update_group_forum( $group_id ) {
 
@@ -68,256 +70,277 @@ function groups_update_group_forum( $group_id ) {
 	 *  3. The built-in bbPress forums are not correctly installed (usually means they've been
 	 *     uninstalled)
 	 */
-	if ( empty( $group->enable_forum ) || !bp_is_active( 'forums' ) || ( function_exists( 'bp_forums_is_installed_correctly' ) && !bp_forums_is_installed_correctly() ) )
+	if ( empty( $group->enable_forum ) || !bp_is_active( 'forums' ) || ( function_exists( 'bp_forums_is_installed_correctly' ) && !bp_forums_is_installed_correctly() ) ) {
 		return false;
+	}
 
-	$args = array(
-		'forum_id'      => groups_get_groupmeta( $group_id, 'forum_id' ),
-		'forum_name'    => $group->name,
-		'forum_desc'    => $group->description,
-		'forum_slug'    => $group->slug
-	);
-
-	bp_forums_update_forum( apply_filters( 'groups_update_group_forum', $args ) );
+	bp_forums_update_forum( apply_filters( 'groups_update_group_forum', array(
+		'forum_id'   => groups_get_groupmeta( $group_id, 'forum_id' ),
+		'forum_name' => $group->name,
+		'forum_desc' => $group->description,
+		'forum_slug' => $group->slug
+	) ) );
 }
 add_action( 'groups_details_updated', 'groups_update_group_forum' );
 
 /**
- * Creates a new group forum post.
+ * Create a new group forum post.
  *
  * Uses the bundled version of bbPress packaged with BuddyPress.
  *
- * @param string $post_text The text for the forum post
- * @param int $topic_id The topic ID used so we can identify where the new forum post should reside
- * @param mixed $page The page number where the new forum post should reside. Defaults to boolean false.
- * @return mixed The new forum post ID on success. Boolean false on failure.
+ * @since BuddyPress (1.0.0)
  *
- * @since BuddyPress (1.0)
+ * @param string $post_text The text for the forum post.
+ * @param int $topic_id The topic ID used so we can identify where the new
+ *        forum post should reside.
+ * @param mixed $page The page number where the new forum post should reside.
+ *        Default: false.
+ * @return mixed The new forum post ID on success. Boolean false on failure.
  */
 function groups_new_group_forum_post( $post_text, $topic_id, $page = false ) {
-	if ( empty( $post_text ) )
+	if ( empty( $post_text ) ) {
 		return false;
+	}
 
-	$post_text = apply_filters( 'group_forum_post_text_before_save', $post_text );
-	$topic_id  = apply_filters( 'group_forum_post_topic_id_before_save', $topic_id );
-
-	if ( $post_id = bp_forums_insert_post( array( 'post_text' => $post_text, 'topic_id' => $topic_id ) ) ) {
-		$topic = bp_forums_get_topic_details( $topic_id );
+	$post_text = apply_filters( 'group_forum_post_text_before_save',     $post_text );
+	$topic_id  = apply_filters( 'group_forum_post_topic_id_before_save', $topic_id  );
+	$post_id   = bp_forums_insert_post( array(
+		'post_text' => $post_text,
+		'topic_id'  => $topic_id
+	) );
 
-		$activity_action = sprintf( __( '%1$s replied to the forum topic %2$s in the group %3$s', 'buddypress'), bp_core_get_userlink( bp_loggedin_user_id() ), '<a href="' . bp_get_group_permalink( groups_get_current_group() ) . 'forum/topic/' . $topic->topic_slug .'/">' . esc_attr( $topic->topic_title ) . '</a>', '<a href="' . bp_get_group_permalink( groups_get_current_group() ) . '">' . esc_attr( bp_get_current_group_name() ) . '</a>' );
-		$activity_content = bp_create_excerpt( $post_text );
-		$primary_link = bp_get_group_permalink( groups_get_current_group() ) . 'forum/topic/' . $topic->topic_slug . '/';
+	if ( empty( $post_id ) ) {
+		return false;
+	}
 
-		if ( $page )
-			$primary_link .= "?topic_page=" . $page;
+	$topic            = bp_forums_get_topic_details( $topic_id );
+	$activity_action  = sprintf( __( '%1$s replied to the forum topic %2$s in the group %3$s', 'buddypress'), bp_core_get_userlink( bp_loggedin_user_id() ), '<a href="' . bp_get_group_permalink( groups_get_current_group() ) . 'forum/topic/' . $topic->topic_slug .'/">' . esc_attr( $topic->topic_title ) . '</a>', '<a href="' . bp_get_group_permalink( groups_get_current_group() ) . '">' . esc_attr( bp_get_current_group_name() ) . '</a>' );
+	$activity_content = bp_create_excerpt( $post_text );
+	$primary_link     = bp_get_group_permalink( groups_get_current_group() ) . 'forum/topic/' . $topic->topic_slug . '/';
 
-		// Record this in activity streams
-		groups_record_activity( array(
-			'action'            => apply_filters_ref_array( 'groups_activity_new_forum_post_action',  array( $activity_action,  $post_id, $post_text, &$topic ) ),
-			'content'           => apply_filters_ref_array( 'groups_activity_new_forum_post_content', array( $activity_content, $post_id, $post_text, &$topic ) ),
-			'primary_link'      => apply_filters( 'groups_activity_new_forum_post_primary_link', "{$primary_link}#post-{$post_id}" ),
-			'type'              => 'new_forum_post',
-			'item_id'           => bp_get_current_group_id(),
-			'secondary_item_id' => $post_id
-		) );
+	if ( !empty( $page ) ) {
+		$primary_link .= "?topic_page=" . $page;
+	}
 
-		do_action( 'groups_new_forum_topic_post', bp_get_current_group_id(), $post_id );
+	// Record this in activity streams
+	groups_record_activity( array(
+		'action'            => apply_filters_ref_array( 'groups_activity_new_forum_post_action',  array( $activity_action,  $post_id, $post_text, &$topic ) ),
+		'content'           => apply_filters_ref_array( 'groups_activity_new_forum_post_content', array( $activity_content, $post_id, $post_text, &$topic ) ),
+		'primary_link'      => apply_filters( 'groups_activity_new_forum_post_primary_link', "{$primary_link}#post-{$post_id}" ),
+		'type'              => 'new_forum_post',
+		'item_id'           => bp_get_current_group_id(),
+		'secondary_item_id' => $post_id
+	) );
 
-		return $post_id;
-	}
+	do_action( 'groups_new_forum_topic_post', bp_get_current_group_id(), $post_id );
 
-	return false;
+	return $post_id;
 }
 
 /**
- * Creates a new group forum topic.
+ * Create a new group forum topic.
  *
  * Uses the bundled version of bbPress packaged with BuddyPress.
  *
- * @param string $topic_title The title for the forum topic
- * @param string $topic_text The text for the forum topic
- * @param string $topic_tags A comma-delimited string of topic tags
- * @param int $forum_id The forum ID this forum topic resides in
- * @return mixed The new topic object on success. Boolean false on failure.
+ * @since BuddyPress (1.0.0)
  *
- * @since BuddyPress (1.0)
+ * @param string $topic_title The title for the forum topic.
+ * @param string $topic_text The text for the forum topic.
+ * @param string $topic_tags A comma-delimited string of topic tags.
+ * @param int $forum_id The forum ID this forum topic resides in.
+ * @return mixed The new topic object on success. Boolean false on failure.
  */
 function groups_new_group_forum_topic( $topic_title, $topic_text, $topic_tags, $forum_id ) {
 	if ( empty( $topic_title ) || empty( $topic_text ) )
 		return false;
 
-	$topic_title = apply_filters( 'group_forum_topic_title_before_save', $topic_title );
-	$topic_text  = apply_filters( 'group_forum_topic_text_before_save', $topic_text );
-	$topic_tags  = apply_filters( 'group_forum_topic_tags_before_save', $topic_tags );
-	$forum_id    = apply_filters( 'group_forum_topic_forum_id_before_save', $forum_id );
-
-	if ( $topic_id = bp_forums_new_topic( array( 'topic_title' => $topic_title, 'topic_text' => $topic_text, 'topic_tags' => $topic_tags, 'forum_id' => $forum_id ) ) ) {
-		$topic = bp_forums_get_topic_details( $topic_id );
-
-		$activity_action = sprintf( __( '%1$s started the forum topic %2$s in the group %3$s', 'buddypress'), bp_core_get_userlink( bp_loggedin_user_id() ), '<a href="' . bp_get_group_permalink( groups_get_current_group() ) . 'forum/topic/' . $topic->topic_slug .'/">' . esc_attr( $topic->topic_title ) . '</a>', '<a href="' . bp_get_group_permalink( groups_get_current_group() ) . '">' . esc_attr( bp_get_current_group_name() ) . '</a>' );
-		$activity_content = bp_create_excerpt( $topic_text );
-
-		// Record this in activity streams
-		groups_record_activity( array(
-			'action'            => apply_filters_ref_array( 'groups_activity_new_forum_topic_action',  array( $activity_action,  $topic_text, &$topic ) ),
-			'content'           => apply_filters_ref_array( 'groups_activity_new_forum_topic_content', array( $activity_content, $topic_text, &$topic ) ),
-			'primary_link'      => apply_filters( 'groups_activity_new_forum_topic_primary_link', bp_get_group_permalink( groups_get_current_group() ) . 'forum/topic/' . $topic->topic_slug . '/' ),
-			'type'              => 'new_forum_topic',
-			'item_id'           => bp_get_current_group_id(),
-			'secondary_item_id' => $topic->topic_id
-		) );
+	$topic_title = apply_filters( 'group_forum_topic_title_before_save',    $topic_title );
+	$topic_text  = apply_filters( 'group_forum_topic_text_before_save',     $topic_text  );
+	$topic_tags  = apply_filters( 'group_forum_topic_tags_before_save',     $topic_tags  );
+	$forum_id    = apply_filters( 'group_forum_topic_forum_id_before_save', $forum_id    );
+	$topic_id    = bp_forums_new_topic( array(
+		'topic_title' => $topic_title,
+		'topic_text'  => $topic_text,
+		'topic_tags'  => $topic_tags,
+		'forum_id'    => $forum_id
+	) );
+
+	if ( empty( $topic_id ) ) {
+		return false;
+	}
 
-		do_action_ref_array( 'groups_new_forum_topic', array( bp_get_current_group_id(), &$topic ) );
+	$topic            = bp_forums_get_topic_details( $topic_id );
+	$activity_action  = sprintf( __( '%1$s started the forum topic %2$s in the group %3$s', 'buddypress'), bp_core_get_userlink( bp_loggedin_user_id() ), '<a href="' . bp_get_group_permalink( groups_get_current_group() ) . 'forum/topic/' . $topic->topic_slug .'/">' . esc_attr( $topic->topic_title ) . '</a>', '<a href="' . bp_get_group_permalink( groups_get_current_group() ) . '">' . esc_attr( bp_get_current_group_name() ) . '</a>' );
+	$activity_content = bp_create_excerpt( $topic_text );
 
-		return $topic;
-	}
+	// Record this in activity streams
+	groups_record_activity( array(
+		'action'            => apply_filters_ref_array( 'groups_activity_new_forum_topic_action',  array( $activity_action,  $topic_text, &$topic ) ),
+		'content'           => apply_filters_ref_array( 'groups_activity_new_forum_topic_content', array( $activity_content, $topic_text, &$topic ) ),
+		'primary_link'      => apply_filters( 'groups_activity_new_forum_topic_primary_link', bp_get_group_permalink( groups_get_current_group() ) . 'forum/topic/' . $topic->topic_slug . '/' ),
+		'type'              => 'new_forum_topic',
+		'item_id'           => bp_get_current_group_id(),
+		'secondary_item_id' => $topic->topic_id
+	) );
+
+	do_action_ref_array( 'groups_new_forum_topic', array( bp_get_current_group_id(), &$topic ) );
 
-	return false;
+	return $topic;
 }
 
 /**
- * Updates an existing group forum topic.
+ * Update an existing group forum topic.
  *
  * Uses the bundled version of bbPress packaged with BuddyPress.
  *
- * @param int $topic_id The topic ID of the existing forum topic
- * @param string $topic_title The title for the forum topic
- * @param string $topic_text The text for the forum topic
- * @param mixed $topic_tags A comma-delimited string of topic tags. Defaults to boolean false.
- * @return mixed The topic object on success. Boolean false on failure.
+ * @since BuddyPress (1.1.0)
  *
- * @since BuddyPress (1.1)
+ * @param int $topic_id The topic ID of the existing forum topic.
+ * @param string $topic_title The title for the forum topic.
+ * @param string $topic_text The text for the forum topic.
+ * @param mixed $topic_tags A comma-delimited string of topic tags. Optional.
+ * @return mixed The topic object on success. Boolean false on failure.
  */
 function groups_update_group_forum_topic( $topic_id, $topic_title, $topic_text, $topic_tags = false ) {
-	global $bp;
+	$bp = buddypress();
 
 	$topic_title = apply_filters( 'group_forum_topic_title_before_save', $topic_title );
 	$topic_text  = apply_filters( 'group_forum_topic_text_before_save',  $topic_text  );
+	$topic       = bp_forums_update_topic( array(
+		'topic_title' => $topic_title,
+		'topic_text' => $topic_text,
+		'topic_id' => $topic_id,
+		'topic_tags' => $topic_tags
+	) );
+
+	if ( empty( $topic ) ) {
+		return false;
+	}
 
-	if ( $topic = bp_forums_update_topic( array( 'topic_title' => $topic_title, 'topic_text' => $topic_text, 'topic_id' => $topic_id, 'topic_tags' => $topic_tags ) ) ) {
-
-		// Get the corresponding activity item
-		if ( bp_is_active( 'activity' ) ) {
-			$id = bp_activity_get_activity_id( array(
-					'item_id'           => bp_get_current_group_id(),
-					'secondary_item_id' => $topic_id,
-					'component'         => $bp->groups->id,
-					'type'              => 'new_forum_topic'
-			) );
-		}
-
-		$activity_action = sprintf( __( '%1$s edited the forum topic %2$s in the group %3$s', 'buddypress'), bp_core_get_userlink( $topic->topic_poster ), '<a href="' . bp_get_group_permalink( groups_get_current_group() ) . 'forum/topic/' . $topic->topic_slug .'/">' . esc_attr( $topic->topic_title ) . '</a>', '<a href="' . bp_get_group_permalink( groups_get_current_group() ) . '">' . esc_attr( bp_get_current_group_name() ) . '</a>' );
-		$activity_content = bp_create_excerpt( $topic_text );
-
-		// Record this in activity streams
-		groups_record_activity( array(
-			'id'                => $id,
-			'action'            => apply_filters_ref_array( 'groups_activity_new_forum_topic_action',  array( $activity_action,  $topic_text, &$topic ) ),
-			'content'           => apply_filters_ref_array( 'groups_activity_new_forum_topic_content', array( $activity_content, $topic_text, &$topic ) ),
-			'primary_link'      => apply_filters( 'groups_activity_new_forum_topic_primary_link', bp_get_group_permalink( groups_get_current_group() ) . 'forum/topic/' . $topic->topic_slug . '/' ),
-			'type'              => 'new_forum_topic',
-			'item_id'           => (int) bp_get_current_group_id(),
-			'user_id'           => (int) $topic->topic_poster,
-			'secondary_item_id' => $topic->topic_id,
-			'recorded_time '    => $topic->topic_time
+	// Get the corresponding activity item
+	if ( bp_is_active( 'activity' ) ) {
+		$id = bp_activity_get_activity_id( array(
+			'item_id'           => bp_get_current_group_id(),
+			'secondary_item_id' => $topic_id,
+			'component'         => $bp->groups->id,
+			'type'              => 'new_forum_topic'
 		) );
-
-		do_action_ref_array( 'groups_update_group_forum_topic', array( &$topic ) );
-
-		return $topic;
 	}
 
-	return false;
+	$activity_action  = sprintf( __( '%1$s edited the forum topic %2$s in the group %3$s', 'buddypress'), bp_core_get_userlink( $topic->topic_poster ), '<a href="' . bp_get_group_permalink( groups_get_current_group() ) . 'forum/topic/' . $topic->topic_slug .'/">' . esc_attr( $topic->topic_title ) . '</a>', '<a href="' . bp_get_group_permalink( groups_get_current_group() ) . '">' . esc_attr( bp_get_current_group_name() ) . '</a>' );
+	$activity_content = bp_create_excerpt( $topic_text );
+
+	// Record this in activity streams
+	groups_record_activity( array(
+		'id'                => $id,
+		'action'            => apply_filters_ref_array( 'groups_activity_new_forum_topic_action',  array( $activity_action,  $topic_text, &$topic ) ),
+		'content'           => apply_filters_ref_array( 'groups_activity_new_forum_topic_content', array( $activity_content, $topic_text, &$topic ) ),
+		'primary_link'      => apply_filters( 'groups_activity_new_forum_topic_primary_link', bp_get_group_permalink( groups_get_current_group() ) . 'forum/topic/' . $topic->topic_slug . '/' ),
+		'type'              => 'new_forum_topic',
+		'item_id'           => (int) bp_get_current_group_id(),
+		'user_id'           => (int) $topic->topic_poster,
+		'secondary_item_id' => $topic->topic_id,
+		'recorded_time '    => $topic->topic_time
+	) );
+
+	do_action_ref_array( 'groups_update_group_forum_topic', array( &$topic ) );
+
+	return $topic;
 }
 
 /**
- * Updates an existing group forum post.
+ * Update an existing group forum post.
  *
  * Uses the bundled version of bbPress packaged with BuddyPress.
  *
- * @param int $post_id The post ID of the existing forum post
- * @param string $post_text The text for the forum post
- * @param int $topic_id The topic ID of the existing forum topic
- * @param mixed $page The page number where the new forum post should reside. Defaults to boolean false.
- * @return mixed The forum post ID on success. Boolean false on failure.
+ * @since BuddyPress (1.1.0)
  *
- * @since BuddyPress (1.1)
+ * @param int $post_id The post ID of the existing forum post.
+ * @param string $post_text The text for the forum post.
+ * @param int $topic_id The topic ID of the existing forum topic.
+ * @param mixed $page The page number where the new forum post should reside.
+ *	  Optional.
+ * @return mixed The forum post ID on success. Boolean false on failure.
  */
 function groups_update_group_forum_post( $post_id, $post_text, $topic_id, $page = false ) {
-	global $bp;
+	$bp = buddypress();
 
 	$post_text = apply_filters( 'group_forum_post_text_before_save', $post_text );
 	$topic_id  = apply_filters( 'group_forum_post_topic_id_before_save', $topic_id );
 	$post      = bp_forums_get_post( $post_id );
+	$post_id   = bp_forums_insert_post( array(
+		'post_id'   => $post_id,
+		'post_text' => $post_text,
+		'post_time' => $post->post_time,
+		'topic_id'  => $topic_id,
+		'poster_id' => $post->poster_id
+	) );
+
+	if ( empty( $post_id ) ) {
+		return false;
+	}
 
-	if ( $post_id = bp_forums_insert_post( array( 'post_id' => $post_id, 'post_text' => $post_text, 'post_time' => $post->post_time, 'topic_id' => $topic_id, 'poster_id' => $post->poster_id ) ) ) {
-		$topic = bp_forums_get_topic_details( $topic_id );
-
-		$activity_action = sprintf( __( '%1$s replied to the forum topic %2$s in the group %3$s', 'buddypress'), bp_core_get_userlink( $post->poster_id ), '<a href="' . bp_get_group_permalink( groups_get_current_group() ) . 'forum/topic/' . $topic->topic_slug .'">' . esc_attr( $topic->topic_title ) . '</a>', '<a href="' . bp_get_group_permalink( groups_get_current_group() ) . '">' . esc_attr( bp_get_current_group_name() ) . '</a>' );
-		$activity_content = bp_create_excerpt( $post_text );
-		$primary_link = bp_get_group_permalink( groups_get_current_group() ) . 'forum/topic/' . $topic->topic_slug . '/';
-
-		if ( $page )
-			$primary_link .= "?topic_page=" . $page;
+	$topic            = bp_forums_get_topic_details( $topic_id );
+	$activity_action  = sprintf( __( '%1$s replied to the forum topic %2$s in the group %3$s', 'buddypress'), bp_core_get_userlink( $post->poster_id ), '<a href="' . bp_get_group_permalink( groups_get_current_group() ) . 'forum/topic/' . $topic->topic_slug .'">' . esc_attr( $topic->topic_title ) . '</a>', '<a href="' . bp_get_group_permalink( groups_get_current_group() ) . '">' . esc_attr( bp_get_current_group_name() ) . '</a>' );
+	$activity_content = bp_create_excerpt( $post_text );
+	$primary_link     = bp_get_group_permalink( groups_get_current_group() ) . 'forum/topic/' . $topic->topic_slug . '/';
 
-		// Get the corresponding activity item
-		if ( bp_is_active( 'activity' ) ) {
-			$id = bp_activity_get_activity_id( array(
-				'user_id'           => $post->poster_id,
-				'component'         => $bp->groups->id,
-				'type'              => 'new_forum_post',
-				'item_id'           => bp_get_current_group_id(),
-				'secondary_item_id' => $post_id
-			 ) );
-		}
+	if ( !empty( $page ) ) {
+		$primary_link .= "?topic_page=" . $page;
+	}
 
-		// Update the entry in activity streams
-		groups_record_activity( array(
-			'id'                => $id,
-			'action'            => apply_filters_ref_array( 'groups_activity_new_forum_post_action',  array( $activity_action,  $post_text, &$topic, &$topic ) ),
-			'content'           => apply_filters_ref_array( 'groups_activity_new_forum_post_content', array( $activity_content, $post_text, &$topic, &$topic ) ),
-			'primary_link'      => apply_filters( 'groups_activity_new_forum_post_primary_link', $primary_link . "#post-" . $post_id ),
+	// Get the corresponding activity item
+	if ( bp_is_active( 'activity' ) ) {
+		$id = bp_activity_get_activity_id( array(
+			'user_id'           => $post->poster_id,
+			'component'         => $bp->groups->id,
 			'type'              => 'new_forum_post',
-			'item_id'           => (int) bp_get_current_group_id(),
-			'user_id'           => (int) $post->poster_id,
-			'secondary_item_id' => $post_id,
-			'recorded_time'     => $post->post_time
-		) );
-
-		do_action_ref_array( 'groups_update_group_forum_post', array( $post, &$topic ) );
-
-		return $post_id;
+			'item_id'           => bp_get_current_group_id(),
+			'secondary_item_id' => $post_id
+		 ) );
 	}
 
-	return false;
+	// Update the entry in activity streams
+	groups_record_activity( array(
+		'id'                => $id,
+		'action'            => apply_filters_ref_array( 'groups_activity_new_forum_post_action',  array( $activity_action,  $post_text, &$topic, &$topic ) ),
+		'content'           => apply_filters_ref_array( 'groups_activity_new_forum_post_content', array( $activity_content, $post_text, &$topic, &$topic ) ),
+		'primary_link'      => apply_filters( 'groups_activity_new_forum_post_primary_link', $primary_link . "#post-" . $post_id ),
+		'type'              => 'new_forum_post',
+		'item_id'           => (int) bp_get_current_group_id(),
+		'user_id'           => (int) $post->poster_id,
+		'secondary_item_id' => $post_id,
+		'recorded_time'     => $post->post_time
+	) );
+
+	do_action_ref_array( 'groups_update_group_forum_post', array( $post, &$topic ) );
+
+	return $post_id;
 }
 
 /**
- * Deletes a group forum topic and also any corresponding activity items.
+ * Delete a group forum topic and also any corresponding activity items.
  *
  * Uses the bundled version of bbPress packaged with BuddyPress.
  *
- * @package BuddyPress
- *
- * @uses bp_activity_delete() to delete corresponding activity items
- * @uses bp_forums_get_topic_posts() to get the child posts
- * @uses bp_forums_delete_topic() to do the deletion itself
- * @param int $topic_id The id of the topic to be deleted
- * @return bool True if the delete routine went through properly
+ * @since BuddyPress (1.1.0)
  *
- * @since BuddyPress (1.1)
+ * @param int $topic_id The ID of the topic to be deleted.
+ * @return bool True if the delete routine went through properly.
  */
 function groups_delete_group_forum_topic( $topic_id ) {
-	global $bp;
+	$bp = buddypress();
 
 	// Before deleting the thread, get the post ids so that their activity items can be deleted
-	$posts = bp_forums_get_topic_posts( array( 'topic_id' => $topic_id, 'per_page' => -1 ) );
+	$posts  = bp_forums_get_topic_posts( array( 'topic_id' => $topic_id, 'per_page' => -1 ) );
+	$action = bp_forums_delete_topic( array( 'topic_id' => $topic_id ) );
 
-	if ( bp_forums_delete_topic( array( 'topic_id' => $topic_id ) ) ) {
+	if ( !empty( $action ) ) {
 		do_action( 'groups_before_delete_group_forum_topic', $topic_id );
 
 		// Delete the corresponding activity stream items
 		if ( bp_is_active( 'activity' ) ) {
+
 			// The activity item for the initial topic
 			bp_activity_delete( array(
 				'item_id'           => bp_get_current_group_id(),
@@ -338,71 +361,69 @@ function groups_delete_group_forum_topic( $topic_id ) {
 		}
 
 		do_action( 'groups_delete_group_forum_topic', $topic_id );
-
-		return true;
 	}
 
-	return false;
+	return (bool) $action;
 }
 
 /**
- * Deletes a group forum post and its corresponding activity item.
+ * Delete a group forum post and its corresponding activity item.
  *
  * Uses the bundled version of bbPress packaged with BuddyPress.
  *
- * @package BuddyPress
+ * @since BuddyPress (1.1.0)
  *
- * @param int $post_id The id of the post you want to delete
- * @param int $topic_id Optional. The topic to which the post belongs. This value isn't used in the
- *   function but is passed along to do_action() hooks.
+ * @param int $post_id The ID of the post you want to delete.
+ * @param int $topic_id Optional. The topic to which the post belongs. This
+ *        value isn't used in the function but is passed along to do_action()
+ *        hooks.
  * @return bool True on success.
- *
- * @since BuddyPress (1.1)
  */
 function groups_delete_group_forum_post( $post_id, $topic_id = false ) {
-	global $bp;
 
-	if ( bp_forums_delete_post( array( 'post_id' => $post_id ) ) ) {
+	$action = bp_forums_delete_post( array( 'post_id' => $post_id ) );
+
+	if ( !empty( $action ) ) {
 		do_action( 'groups_before_delete_group_forum_post', $post_id, $topic_id );
 
 		// Delete the corresponding activity stream item
-		if ( bp_is_active( 'activity' ) )
+		if ( bp_is_active( 'activity' ) ) {
 			bp_activity_delete( array(
 				'item_id'           => bp_get_current_group_id(),
 				'secondary_item_id' => $post_id,
-				'component'         => $bp->groups->id,
+				'component'         => buddypress()->groups->id,
 				'type'              => 'new_forum_post'
 			) );
+		}
 
 		do_action( 'groups_delete_group_forum_post', $post_id, $topic_id );
-
-		return true;
 	}
 
-	return false;
+	return (bool) $action;
 }
 
 /**
- * Get a total count of all public topics of a given type, across groups/forums
+ * Get a total count of all public topics of a given type, across groups/forums.
  *
- * @package BuddyPress
- * @since BuddyPress (1.5)
+ * @since BuddyPress (1.5.0)
  *
- * @param string $type Either 'newest', 'popular', 'unreplied', 'tags'.  Defaults to 'newest'.
- * @return int The topic count
+ * @param string $type Either 'newest', 'popular', 'unreplied', 'tags'.
+ *        Default: 'newest'.
+ * @return int The topic count.
  */
 function groups_total_public_forum_topic_count( $type = 'newest' ) {
 	return apply_filters( 'groups_total_public_forum_topic_count', BP_Groups_Group::get_global_forum_topic_count( $type ) );
 }
 
 /**
- * Get a total count of all topics of a given status, across groups/forums
+ * Get a total count of all topics of a given status, across groups/forums.
  *
- * @package BuddyPress
- * @since BuddyPress (1.5)
+ * @since BuddyPress (1.5.0)
  *
- * @param string $status 'public', 'private', 'hidden', 'all' Which group types to count
- * @return int The topic count
+ * @param string $status Which groups to count. 'public', 'private', 'hidden',
+ *        'all'. Default: 'public'.
+ * @param string $search_terms Optional. Limit by a search term.
+ * @return int The topic count.
  */
 function groups_total_forum_topic_count( $status = 'public', $search_terms = false ) {
 	return apply_filters( 'groups_total_forum_topic_count', BP_Groups_Group::get_global_topic_count( $status, $search_terms ) );
diff --git a/wp-content/plugins/buddypress/bp-groups/bp-groups-functions.php b/wp-content/plugins/buddypress/bp-groups/bp-groups-functions.php
index 971f8b1bb..c83e74307 100644
--- a/wp-content/plugins/buddypress/bp-groups/bp-groups-functions.php
+++ b/wp-content/plugins/buddypress/bp-groups/bp-groups-functions.php
@@ -16,9 +16,9 @@
 if ( !defined( 'ABSPATH' ) ) exit;
 
 /**
- * Checks $bp pages global and looks for directory page
+ * Check whether there is a Groups directory page in the $bp global.
  *
- * @since BuddyPress (1.5)
+ * @since BuddyPress (1.5.0)
  *
  * @global BuddyPress $bp The one true BuddyPress instance
  * @return bool True if set, False if empty
@@ -30,14 +30,19 @@ function bp_groups_has_directory() {
 }
 
 /**
- * Pulls up the database object corresponding to a group
+ * Fetch a single group object.
  *
  * When calling up a group object, you should always use this function instead
  * of instantiating BP_Groups_Group directly, so that you will inherit cache
  * support and pass through the groups_get_group filter.
  *
- * @param string $args The load_users parameter is deprecated and does nothing.
- * @return BP_Groups_Group $group The group object
+ * @param array $args {
+ *	Array of al arguments.
+ *	@type int $group_id ID of the group.
+ *	@type bool $load_users No longer used.
+ *	@type bool $populate_extras Whether to fetch membership data and other
+ *	      extra information about the group. Default: false.
+ * @return BP_Groups_Group $group The group object.
  */
 function groups_get_group( $args = '' ) {
 	$r = wp_parse_args( $args, array(
@@ -55,7 +60,7 @@ function groups_get_group( $args = '' ) {
 	return apply_filters( 'groups_get_group', $group );
 }
 
-/*** Group Creation, Editing & Deletion *****************************************/
+/** Group Creation, Editing & Deletion ****************************************/
 
 /**
  * Create a group.
@@ -163,6 +168,19 @@ function groups_create_group( $args = '' ) {
 	return $group->id;
 }
 
+/**
+ * Edit the base details for a group.
+ *
+ * These are the settings that appear on the first page of the group's Admin
+ * section (Name, Description, and "Notify members...").
+ *
+ * @param int $group_id ID of the group.
+ * @param string $group_name Name of the group.
+ * @param string $group_desc Description of the group.
+ * @param bool $notify_members Whether to send an email notification to group
+ *        members about changes in these details.
+ * @return bool True on success, false on failure.
+ */
 function groups_edit_base_group_details( $group_id, $group_name, $group_desc, $notify_members ) {
 
 	if ( empty( $group_name ) || empty( $group_desc ) )
@@ -184,6 +202,19 @@ function groups_edit_base_group_details( $group_id, $group_name, $group_desc, $n
 	return true;
 }
 
+/**
+ * Edit the base details for a group.
+ *
+ * These are the settings that appear on the Settings page of the group's Admin
+ * section (privacy settings, "enable forum", invitation status).
+ *
+ * @param int $group_id ID of the group.
+ * @param bool $enable_forum Whether to enable a forum for the group.
+ * @param string $status Group status. 'public', 'private', 'hidden'.
+ * @param string $invite_status Optional. Who is allowed to send invitations
+ *        to the group. 'members', 'mods', or 'admins'.
+ * @return bool True on success, false on failure.
+ */
 function groups_edit_group_settings( $group_id, $enable_forum, $status, $invite_status = false ) {
 
 	$group = groups_get_group( array( 'group_id' => $group_id ) );
@@ -220,11 +251,12 @@ function groups_edit_group_settings( $group_id, $enable_forum, $status, $invite_
 }
 
 /**
- * Delete a group and all of its associated meta
+ * Delete a group and all of its associated metadata.
+ *
+ * @since BuddyPress (1.0.0)
  *
- * @global object $bp BuddyPress global settings
- * @param int $group_id
- * @since BuddyPress (1.0)
+ * @param int $group_id ID of the group to delete.
+ * @return bool True on success, false on failure.
  */
 function groups_delete_group( $group_id ) {
 
@@ -246,12 +278,24 @@ function groups_delete_group( $group_id ) {
 	return true;
 }
 
+/**
+ * Check a group status (eg 'private') against the whitelist of registered statuses.
+ *
+ * @param string $status Status to check.
+ * @return bool True if status is allowed, otherwise false.
+ */
 function groups_is_valid_status( $status ) {
 	global $bp;
 
 	return in_array( $status, (array) $bp->groups->valid_status );
 }
 
+/**
+ * Provide a unique, sanitized version of a group slug.
+ *
+ * @param string $slug Group slug to check.
+ * @return A unique and sanitized slug.
+ */
 function groups_check_slug( $slug ) {
 	global $bp;
 
@@ -272,10 +316,10 @@ function groups_check_slug( $slug ) {
 }
 
 /**
- * Get a group slug by its ID
+ * Get a group slug by its ID.
  *
- * @param int $group_id The numeric ID of the group
- * @return string The group's slug
+ * @param int $group_id The numeric ID of the group.
+ * @return string The group's slug.
  */
 function groups_get_slug( $group_id ) {
 	$group = groups_get_group( array( 'group_id' => $group_id ) );
@@ -283,19 +327,27 @@ function groups_get_slug( $group_id ) {
 }
 
 /**
- * Get a group ID by its slug
+ * Get a group ID by its slug.
  *
- * @since BuddyPress (1.6)
+ * @since BuddyPress (1.6.0)
  *
- * @param string $group_slug The group's slug
- * @return int The ID
+ * @param string $group_slug The group's slug.
+ * @return int The ID.
  */
 function groups_get_id( $group_slug ) {
 	return (int)BP_Groups_Group::group_exists( $group_slug );
 }
 
-/*** User Actions ***************************************************************/
+/** User Actions **************************************************************/
 
+/**
+ * Remove a user from a group.
+ *
+ * @param int $group_id ID of the group.
+ * @param int $user_id Optional. ID of the user. Defaults to the currently
+ *        logged-in user.
+ * @return bool True on success, false on failure.
+ */
 function groups_leave_group( $group_id, $user_id = 0 ) {
 	global $bp;
 
@@ -305,7 +357,7 @@ function groups_leave_group( $group_id, $user_id = 0 ) {
 	// Don't let single admins leave the group.
 	if ( count( groups_get_group_admins( $group_id ) ) < 2 ) {
 		if ( groups_is_user_admin( $user_id, $group_id ) ) {
-			bp_core_add_message( __( 'As the only Admin, you cannot leave the group.', 'buddypress' ), 'error' );
+			bp_core_add_message( __( 'As the only admin, you cannot leave the group.', 'buddypress' ), 'error' );
 			return false;
 		}
 	}
@@ -322,6 +374,14 @@ function groups_leave_group( $group_id, $user_id = 0 ) {
 	return true;
 }
 
+/**
+ * Add a user to a group.
+ *
+ * @param int $group_id ID of the group.
+ * @param int $user_id Optional. ID of the user. Defaults to the currently
+ *        logged-in user.
+ * @return bool True on success, false on failure.
+ */
 function groups_join_group( $group_id, $user_id = 0 ) {
 	global $bp;
 
@@ -372,12 +432,24 @@ function groups_join_group( $group_id, $user_id = 0 ) {
 	return true;
 }
 
-/*** General Group Functions ****************************************************/
+/** General Group Functions ***************************************************/
 
+/**
+ * Get a list of group administrators.
+ *
+ * @param int $group_id ID of the group.
+ * @return array Info about group admins (user_id + date_modified).
+ */
 function groups_get_group_admins( $group_id ) {
 	return BP_Groups_Member::get_group_administrator_ids( $group_id );
 }
 
+/**
+ * Get a list of group moderators.
+ *
+ * @param int $group_id ID of the group.
+ * @return array Info about group admins (user_id + date_modified).
+ */
 function groups_get_group_mods( $group_id ) {
 	return BP_Groups_Member::get_group_moderator_ids( $group_id );
 }
@@ -488,19 +560,29 @@ function groups_get_group_members( $args = array() ) {
 	return $retval;
 }
 
+/**
+ * Get the member count for a group.
+ *
+ * @param int $group_id Group ID.
+ * @return int Count of confirmed members for the group.
+ */
 function groups_get_total_member_count( $group_id ) {
 	return BP_Groups_Group::get_total_member_count( $group_id );
 }
 
-/*** Group Fetching, Filtering & Searching  *************************************/
+/** Group Fetching, Filtering & Searching  ************************************/
 
 /**
- * Get a collection of groups, based on the parameters passed
+ * Get a collection of groups, based on the parameters passed.
  *
- * @uses apply_filters_ref_array() Filter 'groups_get_groups' to modify return value
- * @uses BP_Groups_Group::get()
- * @param array $args See inline documentation for details
- * @return array
+ * @param array $args {
+ *     Array of arguments. Supports all arguments of
+ *     {@link BP_Groups_Group::get()}. Where the default values differ, they
+ *     have been described here.
+ *     @type int $per_page Default: 20.
+ *     @type int $page Default: 1.
+ * }
+ * @return array See {@link BP_Groups_Group::get()}.
  */
 function groups_get_groups( $args = '' ) {
 
@@ -541,6 +623,11 @@ function groups_get_groups( $args = '' ) {
 	return apply_filters_ref_array( 'groups_get_groups', array( &$groups, &$r ) );
 }
 
+/**
+ * Get the total group count for the site.
+ *
+ * @return int
+ */
 function groups_get_total_group_count() {
 	if ( !$count = wp_cache_get( 'bp_total_group_count', 'bp' ) ) {
 		$count = BP_Groups_Group::get_total_group_count();
@@ -550,6 +637,19 @@ function groups_get_total_group_count() {
 	return $count;
 }
 
+/**
+ * Get the IDs of the groups of which a specified user is a member.
+ *
+ * @param int $user_id ID of the user.
+ * @param int $limit Optional. Max number of results to return.
+ *        Default: false (no limit).
+ * @param int $page Optional. Page offset of results to return.
+ *        Default: false (no limit).
+ * @return array {
+ *     @type array $groups Array of groups returned by paginated query.
+ *     @type int $total Count of groups matching query.
+ * }
+ */
 function groups_get_user_groups( $user_id = 0, $pag_num = 0, $pag_page = 0 ) {
 
 	if ( empty( $user_id ) )
@@ -558,6 +658,12 @@ function groups_get_user_groups( $user_id = 0, $pag_num = 0, $pag_page = 0 ) {
 	return BP_Groups_Member::get_group_ids( $user_id, $pag_num, $pag_page );
 }
 
+/**
+ * Get the count of groups of which the specified user is a member.
+ *
+ * @param int $user_id Optional. Default: ID of the displayed user.
+ * @return int Group count.
+ */
 function groups_total_groups_for_user( $user_id = 0 ) {
 
 	if ( empty( $user_id ) )
@@ -572,12 +678,11 @@ function groups_total_groups_for_user( $user_id = 0 ) {
 }
 
 /**
- * Returns the group object for the group currently being viewed
+ * Get the BP_Groups_Group object corresponding to the current group.
  *
- * @package BuddyPress
- * @since BuddyPress (1.5)
+ * @since BuddyPress (1.5.0)
  *
- * @return BP_Groups_Group The current group object
+ * @return BP_Groups_Group The current group object.
  */
 function groups_get_current_group() {
 	global $bp;
@@ -587,8 +692,15 @@ function groups_get_current_group() {
 	return apply_filters( 'groups_get_current_group', $current_group );
 }
 
-/*** Group Avatars *************************************************************/
+/** Group Avatars *************************************************************/
 
+/**
+ * Generate the avatar upload directory path for a given group.
+ *
+ * @param int $group_id Optional. ID of the group. Default: ID of the
+ *        current group.
+ * @return string
+ */
 function groups_avatar_upload_dir( $group_id = 0 ) {
 	global $bp;
 
@@ -608,16 +720,37 @@ function groups_avatar_upload_dir( $group_id = 0 ) {
 	return apply_filters( 'groups_avatar_upload_dir', array( 'path' => $path, 'url' => $newurl, 'subdir' => $newsubdir, 'basedir' => $newbdir, 'baseurl' => $newburl, 'error' => false ) );
 }
 
-/*** Group Member Status Checks ************************************************/
+/** Group Member Status Checks ************************************************/
 
+/**
+ * Check whether a user is an admin of a given group.
+ *
+ * @param int $user_id ID of the user.
+ * @param int $group_id ID of the group.
+ * @param int|null ID of the membership if the user is an admin, otherwise null.
+ */
 function groups_is_user_admin( $user_id, $group_id ) {
 	return BP_Groups_Member::check_is_admin( $user_id, $group_id );
 }
 
+/**
+ * Check whether a user is a mod of a given group.
+ *
+ * @param int $user_id ID of the user.
+ * @param int $group_id ID of the group.
+ * @param int|null ID of the membership if the user is a mod, otherwise null.
+ */
 function groups_is_user_mod( $user_id, $group_id ) {
 	return BP_Groups_Member::check_is_mod( $user_id, $group_id );
 }
 
+/**
+ * Check whether a user is a member of a given group.
+ *
+ * @param int $user_id ID of the user.
+ * @param int $group_id ID of the group.
+ * @param int|null ID of the membership if the user is a member, otherwise null.
+ */
 function groups_is_user_member( $user_id, $group_id ) {
 	return BP_Groups_Member::check_is_member( $user_id, $group_id );
 }
@@ -629,17 +762,33 @@ function groups_is_user_banned( $user_id, $group_id ) {
 /**
  * Is the specified user the creator of the group?
  *
- * @param int $user_id
- * @param int $group_id
  * @since BuddyPress (1.2.6)
- * @uses BP_Groups_Member
+ *
+ * @param int $user_id ID of the user.
+ * @param int $group_id ID of the group.
+ * @return int|null ID of the group if the user is the creator, otherwise false.
  */
 function groups_is_user_creator( $user_id, $group_id ) {
 	return BP_Groups_Member::check_is_creator( $user_id, $group_id );
 }
 
-/*** Group Activity Posting **************************************************/
+/** Group Activity Posting ****************************************************/
 
+/**
+ * Post an Activity status update affiliated with a group.
+ *
+ * @todo Should bail out when the Activity component is not active.
+ *
+ * @param array {
+ *     Array of arguments.
+ *     @type string $content The content of the update.
+ *     @type int $user_id Optional. ID of the user posting the update. Default:
+ *           ID of the logged-in user.
+ *     @type int $group_id Optional. ID of the group to be affiliated with the
+ *           update. Default: ID of the current group.
+ * }
+ * @return int
+ */
 function groups_post_update( $args = '' ) {
 	global $bp;
 
@@ -682,8 +831,16 @@ function groups_post_update( $args = '' ) {
 	return $activity_id;
 }
 
-/*** Group Invitations *********************************************************/
+/** Group Invitations *********************************************************/
 
+/**
+ * Get IDs of users with outstanding invites to a given group from a specified user.
+ *
+ * @param int $user_id ID of the inviting user.
+ * @param int $group_id ID of the group.
+ * @return array IDs of users who have been invited to the group by the
+ *         user but have not yet accepted.
+ */
 function groups_get_invites_for_user( $user_id = 0, $limit = false, $page = false, $exclude = false ) {
 
 	if ( empty( $user_id ) )
@@ -693,11 +850,11 @@ function groups_get_invites_for_user( $user_id = 0, $limit = false, $page = fals
 }
 
 /**
- * Gets the total group invite count for a user.
+ * Get the total group invite count for a user.
  *
  * @since BuddyPress (2.0.0)
  *
- * @param int $user_id The user ID
+ * @param int $user_id The user ID.
  * @return int
  */
 function groups_get_invite_count_for_user( $user_id = 0 ) {
@@ -708,6 +865,22 @@ function groups_get_invite_count_for_user( $user_id = 0 ) {
 	return BP_Groups_Member::get_invite_count_for_user( $user_id );
 }
 
+/**
+ * Invite a user to a group.
+ *
+ * @param array $args {
+ *     Array of arguments.
+ *     @type int $user_id ID of the user being invited.
+ *     @type int $group_id ID of the group to which the user is being invited.
+ *     @type int $inviter_id Optional. ID of the inviting user. Default:
+ *           ID of the logged-in user.
+ *     @type string $date_modified Optional. Modified date for the invitation.
+ *           Default: current date/time.
+ *     @type bool $is_confirmed. Optional. Whether the invitation should be
+ *           marked confirmed. Default: false.
+ * }
+ * @return bool True on success, false on failure.
+ */
 function groups_invite_user( $args = '' ) {
 
 	$defaults = array(
@@ -746,6 +919,15 @@ function groups_invite_user( $args = '' ) {
 	return true;
 }
 
+/**
+ * Uninvite a user from a group.
+ *
+ * Functionally, this is equivalent to removing a user from a group.
+ *
+ * @param int $user_id ID of the user.
+ * @param int $group_id ID of the group.
+ * @return bool True on success, false on failure.
+ */
 function groups_uninvite_user( $user_id, $group_id ) {
 
 	if ( !BP_Groups_Member::delete( $user_id, $group_id ) )
@@ -761,9 +943,9 @@ function groups_uninvite_user( $user_id, $group_id ) {
  *
  * Returns true if a user is already a member of the group.
  *
- * @param int $user_id
- * @param int $group_id
- * @return bool True when the user is a member of the group, otherwise false
+ * @param int $user_id ID of the user.
+ * @param int $group_id ID of the group.
+ * @return bool True when the user is a member of the group, otherwise false.
  */
 function groups_accept_invite( $user_id, $group_id ) {
 
@@ -801,6 +983,13 @@ function groups_accept_invite( $user_id, $group_id ) {
 	return true;
 }
 
+/**
+ * Reject a group invitation.
+ *
+ * @param int $user_id ID of the user.
+ * @param int $group_id ID of the group.
+ * @return bool True on success, false on failure.
+ */
 function groups_reject_invite( $user_id, $group_id ) {
 	if ( ! BP_Groups_Member::delete( $user_id, $group_id ) )
 		return false;
@@ -810,6 +999,13 @@ function groups_reject_invite( $user_id, $group_id ) {
 	return true;
 }
 
+/**
+ * Delete a group invitation.
+ *
+ * @param int $user_id ID of the invited user.
+ * @param int $group_id ID of the group.
+ * @return bool True on success, false on failure.
+ */
 function groups_delete_invite( $user_id, $group_id ) {
 	if ( ! BP_Groups_Member::delete_invite( $user_id, $group_id ) )
 		return false;
@@ -819,6 +1015,12 @@ function groups_delete_invite( $user_id, $group_id ) {
 	return true;
 }
 
+/**
+ * Send all pending invites by a single user to a specific group.
+ *
+ * @param int $user_id ID of the inviting user.
+ * @param int $group_id ID of the group.
+ */
 function groups_send_invites( $user_id, $group_id ) {
 
 	if ( empty( $user_id ) )
@@ -846,29 +1048,42 @@ function groups_get_invites_for_group( $user_id, $group_id ) {
 }
 
 /**
- * Check to see whether a user has already been invited to a group
+ * Check to see whether a user has already been invited to a group.
  *
- * By default, the function checks for invitations that have been sent. Entering 'all' as the $type
- * parameter will return unsent invitations as well (useful to make sure AJAX requests are not
- * duplicated)
+ * By default, the function checks for invitations that have been sent.
+ * Entering 'all' as the $type parameter will return unsent invitations as
+ * well (useful to make sure AJAX requests are not duplicated).
  *
- * @package BuddyPress Groups
- *
- * @param int $user_id Potential group member
- * @param int $group_id Potential group
- * @param string $type Optional. Use 'sent' to check for sent invites, 'all' to check for all
- * @return bool Returns true if an invitation is found
+ * @param int $user_id ID of potential group member.
+ * @param int $group_id ID of potential group.
+ * @param string $type Optional. Use 'sent' to check for sent invites, 'all' to
+ *        check for all. Default: 'sent'.
+ * @return bool True if an invitation is found, otherwise false.
  */
 function groups_check_user_has_invite( $user_id, $group_id, $type = 'sent' ) {
 	return BP_Groups_Member::check_has_invite( $user_id, $group_id, $type );
 }
 
+/**
+ * Delete all invitations to a given group.
+ *
+ * @param int $group_id ID of the group whose invitations are being deleted.
+ * @return int|null Number of rows records deleted on success, null on failure.
+ */
 function groups_delete_all_group_invites( $group_id ) {
 	return BP_Groups_Group::delete_all_invites( $group_id );
 }
 
-/*** Group Promotion & Banning *************************************************/
+/** Group Promotion & Banning *************************************************/
 
+/**
+ * Promote a member to a new status within a group.
+ *
+ * @param int $user_id ID of the user.
+ * @param int $group_id ID of the group.
+ * @param string $status The new status. 'mod' or 'admin'.
+ * @return bool True on success, false on failure.
+ */
 function groups_promote_member( $user_id, $group_id, $status ) {
 
 	if ( ! bp_is_item_admin() )
@@ -885,6 +1100,13 @@ function groups_promote_member( $user_id, $group_id, $status ) {
 	return $member->promote( $status );
 }
 
+/**
+ * Demone a user to 'member' status within a group.
+ *
+ * @param int $user_id ID of the user.
+ * @param int $group_id ID of the group.
+ * @return bool True on success, false on failure.
+ */
 function groups_demote_member( $user_id, $group_id ) {
 
 	if ( ! bp_is_item_admin() )
@@ -897,6 +1119,13 @@ function groups_demote_member( $user_id, $group_id ) {
 	return $member->demote();
 }
 
+/**
+ * Ban a member from a group.
+ *
+ * @param int $user_id ID of the user.
+ * @param int $group_id ID of the group.
+ * @return bool True on success, false on failure.
+ */
 function groups_ban_member( $user_id, $group_id ) {
 
 	if ( ! bp_is_item_admin() )
@@ -909,6 +1138,13 @@ function groups_ban_member( $user_id, $group_id ) {
 	return $member->ban();
 }
 
+/**
+ * Unban a member from a group.
+ *
+ * @param int $user_id ID of the user.
+ * @param int $group_id ID of the group.
+ * @return bool True on success, false on failure.
+ */
 function groups_unban_member( $user_id, $group_id ) {
 
 	if ( ! bp_is_item_admin() )
@@ -921,8 +1157,15 @@ function groups_unban_member( $user_id, $group_id ) {
 	return $member->unban();
 }
 
-/*** Group Removal *******************************************************/
+/** Group Removal *************************************************************/
 
+/**
+ * Remove a member from a group.
+ *
+ * @param int $user_id ID of the user.
+ * @param int $group_id ID of the group.
+ * @return bool True on success, false on failure.
+ */
 function groups_remove_member( $user_id, $group_id ) {
 
 	if ( ! bp_is_item_admin() )
@@ -935,8 +1178,15 @@ function groups_remove_member( $user_id, $group_id ) {
 	return $member->remove();
 }
 
-/*** Group Membership ****************************************************/
+/** Group Membership **********************************************************/
 
+/**
+ * Create a group membership request.
+ *
+ * @param int $requesting_user_id ID of the user requesting membership.
+ * @param int $group_id ID of the group.
+ * @return bool True on success, false on failure.
+ */
 function groups_send_membership_request( $requesting_user_id, $group_id ) {
 
 	// Prevent duplicate requests
@@ -978,6 +1228,17 @@ function groups_send_membership_request( $requesting_user_id, $group_id ) {
 	return false;
 }
 
+/**
+ * Accept a pending group membership request.
+ *
+ * @param int $membership_id ID of the membership object.
+ * @param int $user_id Optional. ID of the user who requested membership.
+ *        Provide this value along with $group_id to override $membership_id.
+ * @param int $group_id Optional. ID of the group to which membership is being
+ *        requested. Provide this value along with $user_id to override
+ *        $membership_id.
+ * @return bool True on success, false on failure.
+ */
 function groups_accept_membership_request( $membership_id, $user_id = 0, $group_id = 0 ) {
 
 	if ( !empty( $user_id ) && !empty( $group_id ) ) {
@@ -1002,6 +1263,17 @@ function groups_accept_membership_request( $membership_id, $user_id = 0, $group_
 	return true;
 }
 
+/**
+ * Reject a pending group membership request.
+ *
+ * @param int $membership_id ID of the membership object.
+ * @param int $user_id Optional. ID of the user who requested membership.
+ *        Provide this value along with $group_id to override $membership_id.
+ * @param int $group_id Optional. ID of the group to which membership is being
+ *        requested. Provide this value along with $user_id to override
+ *        $membership_id.
+ * @return bool True on success, false on failure.
+ */
 function groups_reject_membership_request( $membership_id, $user_id = 0, $group_id = 0 ) {
 	if ( !$membership = groups_delete_membership_request( $membership_id, $user_id, $group_id ) ) {
 		return false;
@@ -1012,6 +1284,17 @@ function groups_reject_membership_request( $membership_id, $user_id = 0, $group_
 	return true;
 }
 
+/**
+ * Delete a pending group membership request.
+ *
+ * @param int $membership_id ID of the membership object.
+ * @param int $user_id Optional. ID of the user who requested membership.
+ *        Provide this value along with $group_id to override $membership_id.
+ * @param int $group_id Optional. ID of the group to which membership is being
+ *        requested. Provide this value along with $user_id to override
+ *        $membership_id.
+ * @return bool True on success, false on failure.
+ */
 function groups_delete_membership_request( $membership_id, $user_id = 0, $group_id = 0 ) {
 	if ( !empty( $user_id ) && !empty( $group_id ) )
 		$membership = new BP_Groups_Member( $user_id, $group_id );
@@ -1024,10 +1307,23 @@ function groups_delete_membership_request( $membership_id, $user_id = 0, $group_
 	return $membership;
 }
 
+/**
+ * Check whether a user has an outstanding membership request for a given group.
+ *
+ * @param int $user_id ID of the user.
+ * @param int $group_id ID of the group.
+ * @return int|null ID of the membership if found, otherwise false.
+ */
 function groups_check_for_membership_request( $user_id, $group_id ) {
 	return BP_Groups_Member::check_for_membership_request( $user_id, $group_id );
 }
 
+/**
+ * Accept all pending membership requests to a group.
+ *
+ * @param int $group_id ID of the group.
+ * @return bool True on success, false on failure.
+ */
 function groups_accept_all_pending_membership_requests( $group_id ) {
 	$user_ids = BP_Groups_Member::get_all_membership_request_user_ids( $group_id );
 
@@ -1042,7 +1338,7 @@ function groups_accept_all_pending_membership_requests( $group_id ) {
 	return true;
 }
 
-/*** Group Meta ****************************************************/
+/** Group Meta ****************************************************************/
 
 /**
  * Delete metadata for a group.
@@ -1143,8 +1439,15 @@ function groups_add_groupmeta( $group_id, $meta_key, $meta_value, $unique = fals
 	return $retval;
 }
 
-/*** Group Cleanup Functions ****************************************************/
+/** Group Cleanup Functions ***************************************************/
 
+/**
+ * Delete all group membership information for the specified user.
+ *
+ * @since BuddyPress (1.0.0)
+ *
+ * @param int $user_id ID of the user.
+ */
 function groups_remove_data_for_user( $user_id ) {
 	BP_Groups_Member::delete_all_for_user( $user_id );
 
diff --git a/wp-content/plugins/buddypress/bp-groups/bp-groups-loader.php b/wp-content/plugins/buddypress/bp-groups/bp-groups-loader.php
index 08edbffae..e07dd26f3 100644
--- a/wp-content/plugins/buddypress/bp-groups/bp-groups-loader.php
+++ b/wp-content/plugins/buddypress/bp-groups/bp-groups-loader.php
@@ -17,70 +17,77 @@ if ( !defined( 'ABSPATH' ) ) exit;
 class BP_Groups_Component extends BP_Component {
 
 	/**
-	 * Auto join group when non group member performs group activity
+	 * Auto-join group when non group member performs group activity
 	 *
-	 * @since BuddyPress (1.5)
+	 * @since BuddyPress (1.5.0)
+	 * @access public
 	 * @var bool
 	 */
 	public $auto_join;
 
 	/**
-	 * The group being currently accessed
+	 * The group being currently accessed.
 	 *
-	 * @since BuddyPress (1.5)
+	 * @since BuddyPress (1.5.0)
+	 * @access public
 	 * @var BP_Groups_Group
 	 */
 	public $current_group;
 
 	/**
-	 * Default group extension
+	 * Default group extension.
 	 *
-	 * @since BuddyPress (1.6)
+	 * @since BuddyPress (1.6.0)
+	 * @access public
 	 * @todo Is this used anywhere? Is this a duplicate of $default_extension?
 	 */
 	var $default_component;
 
 	/**
-	 * Default group extension
+	 * Default group extension.
 	 *
-	 * @since BuddyPress (1.6)
+	 * @since BuddyPress (1.6.0)
+	 * @access public
 	 * @var string
 	 */
 	public $default_extension;
 
 	/**
-	 * Illegal group names/slugs
+	 * Illegal group names/slugs.
 	 *
-	 * @since BuddyPress (1.5)
+	 * @since BuddyPress (1.5.0)
+	 * @access public
 	 * @var array
 	 */
 	public $forbidden_names;
 
 	/**
-	 * Group creation/edit steps (e.g. Details, Settings, Avatar, Invites)
+	 * Group creation/edit steps (e.g. Details, Settings, Avatar, Invites).
 	 *
-	 * @since BuddyPress (1.5)
+	 * @since BuddyPress (1.5.0)
+	 * @access public
 	 * @var array
 	 */
 	public $group_creation_steps;
 
 	/**
-	 * Types of group statuses (Public, Private, Hidden)
+	 * Types of group statuses (Public, Private, Hidden).
 	 *
-	 * @since BuddyPress (1.5)
+	 * @since BuddyPress (1.5.0)
+	 * @access public
 	 * @var array
 	 */
 	public $valid_status;
 
 	/**
-	 * Start the groups component creation process
+	 * Start the groups component creation process.
 	 *
-	 * @since BuddyPress (1.5)
+	 * @since BuddyPress (1.5.0)
 	 */
 	public function __construct() {
 		parent::start(
 			'groups',
-			__( 'User Groups', 'buddypress' ),
+			_x( 'User Groups', 'Group screen page <title>', 'buddypress' ),
 			buddypress()->plugin_dir,
 			array(
 				'adminbar_myaccount_order' => 70
@@ -89,7 +96,13 @@ class BP_Groups_Component extends BP_Component {
 	}
 
 	/**
-	 * Include files
+	 * Include Groups component files.
+	 *
+	 * @since BuddyPress (1.5.0)
+	 *
+	 * @see BP_Component::includes() for a description of arguments.
+	 *
+	 * @param array $includes See BP_Component::includes() for a description.
 	 */
 	public function includes( $includes = array() ) {
 		$includes = array(
@@ -102,7 +115,6 @@ class BP_Groups_Component extends BP_Component {
 			'widgets',
 			'activity',
 			'template',
-			'buddybar',
 			'adminbar',
 			'functions',
 			'notifications'
@@ -115,12 +127,16 @@ class BP_Groups_Component extends BP_Component {
 	}
 
 	/**
-	 * Setup globals
+	 * Set up component global data.
 	 *
 	 * The BP_GROUPS_SLUG constant is deprecated, and only used here for
 	 * backwards compatibility.
 	 *
-	 * @since BuddyPress (1.5)
+	 * @since BuddyPress (1.5.0)
+	 *
+	 * @see BP_Component::setup_globals() for a description of arguments.
+	 *
+	 * @param array $args See BP_Component::setup_globals() for a description.
 	 */
 	public function setup_globals( $args = array() ) {
 		$bp = buddypress();
@@ -129,7 +145,7 @@ class BP_Groups_Component extends BP_Component {
 		if ( !defined( 'BP_GROUPS_SLUG' ) )
 			define( 'BP_GROUPS_SLUG', $this->id );
 
-		// Global tables for messaging component
+		// Global tables for groups component
 		$global_tables = array(
 			'table_name'           => $bp->table_prefix . 'bp_groups',
 			'table_name_members'   => $bp->table_prefix . 'bp_groups_members',
@@ -149,7 +165,7 @@ class BP_Groups_Component extends BP_Component {
 			'has_directory'         => true,
 			'directory_title'       => _x( 'Groups', 'component directory title', 'buddypress' ),
 			'notification_callback' => 'groups_format_notifications',
-			'search_string'         => __( 'Search Groups...', 'buddypress' ),
+			'search_string'         => _x( 'Search Groups...', 'Component directory search', 'buddypress' ),
 			'global_tables'         => $global_tables,
 			'meta_tables'           => $meta_tables,
 		);
@@ -241,91 +257,22 @@ class BP_Groups_Component extends BP_Component {
 			return;
 		}
 
-		if ( bp_is_groups_component() && !empty( $this->current_group ) ) {
-
-			$this->default_extension = apply_filters( 'bp_groups_default_extension', defined( 'BP_GROUPS_DEFAULT_EXTENSION' ) ? BP_GROUPS_DEFAULT_EXTENSION : 'home' );
-
-			if ( !bp_current_action() ) {
-				$bp->current_action = $this->default_extension;
-			}
-
-			// Prepare for a redirect to the canonical URL
-			$bp->canonical_stack['base_url'] = bp_get_group_permalink( $this->current_group );
-
-			if ( bp_current_action() ) {
-				$bp->canonical_stack['action'] = bp_current_action();
-			}
-
-			if ( !empty( $bp->action_variables ) ) {
-				$bp->canonical_stack['action_variables'] = bp_action_variables();
-			}
-
-			// When viewing the default extension, the canonical URL should not have
-			// that extension's slug, unless more has been tacked onto the URL via
-			// action variables
-			if ( bp_is_current_action( $this->default_extension ) && empty( $bp->action_variables ) )  {
-				unset( $bp->canonical_stack['action'] );
-			}
-
-		}
-
-		// Group access control
-		if ( bp_is_groups_component() && !empty( $this->current_group ) ) {
-			if ( !$this->current_group->user_has_access ) {
-
-				// Hidden groups should return a 404 for non-members.
-				// Unset the current group so that you're not redirected
-				// to the default group tab
-				if ( 'hidden' == $this->current_group->status ) {
-					$this->current_group = 0;
-					$bp->is_single_item  = false;
-					bp_do_404();
-					return;
-
-				// Skip the no_access check on home and membership request pages
-				} elseif ( !bp_is_current_action( 'home' ) && !bp_is_current_action( 'request-membership' ) ) {
-
-					// Off-limits to this user. Throw an error and redirect to the group's home page
-					if ( is_user_logged_in() ) {
-						bp_core_no_access( array(
-							'message'  => __( 'You do not have access to this group.', 'buddypress' ),
-							'root'     => bp_get_group_permalink( $bp->groups->current_group ) . 'home/',
-							'redirect' => false
-						) );
-
-					// User does not have access, and does not get a message
-					} else {
-						bp_core_no_access();
-					}
-				}
-			}
-
-			// Protect the admin tab from non-admins
-			if ( bp_is_current_action( 'admin' ) && !bp_is_item_admin() ) {
-				bp_core_no_access( array(
-					'message'  => __( 'You are not an admin of this group.', 'buddypress' ),
-					'root'     => bp_get_group_permalink( $bp->groups->current_group ),
-					'redirect' => false
-				) );
-			}
-		}
-
 		// Preconfigured group creation steps
 		$this->group_creation_steps = apply_filters( 'groups_create_group_steps', array(
 			'group-details'  => array(
-				'name'       => __( 'Details',  'buddypress' ),
+				'name'       => _x( 'Details', 'Group screen nav', 'buddypress' ),
 				'position'   => 0
 			),
 			'group-settings' => array(
-				'name'       => __( 'Settings', 'buddypress' ),
+				'name'       => _x( 'Settings', 'Group screen nav', 'buddypress' ),
 				'position'   => 10
 			)
 		) );
 
 		// If avatar uploads are not disabled, add avatar option
-		if ( ! (int) buddypress()->site_options['bp-disable-avatar-uploads'] ) {
+		if ( ! (int) $bp->site_options['bp-disable-avatar-uploads'] && $bp->avatar->show_avatars ) {
 			$this->group_creation_steps['group-avatar'] = array(
-				'name'     => __( 'Avatar',   'buddypress' ),
+				'name'     => _x( 'Photo', 'Group screen nav', 'buddypress' ),
 				'position' => 20
 			);
 		}
@@ -333,7 +280,7 @@ class BP_Groups_Component extends BP_Component {
 		// If friends component is active, add invitations
 		if ( bp_is_active( 'friends' ) ) {
 			$this->group_creation_steps['group-invites'] = array(
-				'name'     => __( 'Invites', 'buddypress' ),
+				'name'     => _x( 'Invites',  'Group screen nav', 'buddypress' ),
 				'position' => 30
 			);
 		}
@@ -350,9 +297,56 @@ class BP_Groups_Component extends BP_Component {
 	}
 
 	/**
-	 * Setup BuddyBar navigation
+	 * Set up canonical stack for this component.
 	 *
-	 * @global BuddyPress $bp The one true BuddyPress instance
+	 * @since BuddyPress (2.1.0)
+	 */
+	public function setup_canonical_stack() {
+		if ( ! bp_is_groups_component() ) {
+			return;
+		}
+
+		if ( empty( $this->current_group ) ) {
+			return;
+		}
+
+
+		$this->default_extension = apply_filters( 'bp_groups_default_extension', defined( 'BP_GROUPS_DEFAULT_EXTENSION' ) ? BP_GROUPS_DEFAULT_EXTENSION : 'home' );
+
+		if ( !bp_current_action() ) {
+			buddypress()->current_action = $this->default_extension;
+		}
+
+		// Prepare for a redirect to the canonical URL
+		buddypress()->canonical_stack['base_url'] = bp_get_group_permalink( $this->current_group );
+
+		if ( bp_current_action() ) {
+			buddypress()->canonical_stack['action'] = bp_current_action();
+		}
+
+		if ( !empty( buddypress()->action_variables ) ) {
+			buddypress()->canonical_stack['action_variables'] = bp_action_variables();
+		}
+
+		// When viewing the default extension, the canonical URL should not have
+		// that extension's slug, unless more has been tacked onto the URL via
+		// action variables
+		if ( bp_is_current_action( $this->default_extension ) && empty( buddypress()->action_variables ) )  {
+			unset( buddypress()->canonical_stack['action'] );
+		}
+	}
+
+	/**
+	 * Set up component navigation.
+	 *
+	 * @since BuddyPress (1.5.0)
+	 *
+	 * @see BP_Component::setup_nav() for a description of arguments.
+	 *
+	 * @param array $main_nav Optional. See BP_Component::setup_nav() for
+	 *        description.
+	 * @param array $sub_nav Optional. See BP_Component::setup_nav() for
+	 *        description.
 	 */
 	public function setup_nav( $main_nav = array(), $sub_nav = array() ) {
 
@@ -360,9 +354,9 @@ class BP_Groups_Component extends BP_Component {
 		if ( bp_is_user() ) {
 			$count    = bp_get_total_group_count_for_user();
 			$class    = ( 0 === $count ) ? 'no-count' : 'count';
-			$nav_name = sprintf( __( 'Groups <span class="%s">%s</span>', 'buddypress' ), esc_attr( $class ), number_format_i18n( $count ) );
+			$nav_name = sprintf( _x( 'Groups <span class="%s">%s</span>', 'Group screen nav with counter', 'buddypress' ), esc_attr( $class ), number_format_i18n( $count ) );
 		} else {
-			$nav_name = __( 'Groups', 'buddypress' );
+			$nav_name = _x( 'Groups', 'Group screen nav without counter', 'buddypress' );
 		}
 
 		// Add 'Groups' to the main navigation
@@ -431,7 +425,7 @@ class BP_Groups_Component extends BP_Component {
 
 			// Add the "Home" subnav item, as this will always be present
 			$sub_nav[] = array(
-				'name'            =>  _x( 'Home', 'Group home navigation title', 'buddypress' ),
+				'name'            =>  _x( 'Home', 'Group screen navigation title', 'buddypress' ),
 				'slug'            => 'home',
 				'parent_url'      => $group_link,
 				'parent_slug'     => $this->current_group->slug,
@@ -451,7 +445,7 @@ class BP_Groups_Component extends BP_Component {
 				) {
 
 				$sub_nav[] = array(
-					'name'               => __( 'Request Membership', 'buddypress' ),
+					'name'               => _x( 'Request Membership','Group screen nav', 'buddypress' ),
 					'slug'               => 'request-membership',
 					'parent_url'         => $group_link,
 					'parent_slug'        => $this->current_group->slug,
@@ -463,7 +457,7 @@ class BP_Groups_Component extends BP_Component {
 			// Forums are enabled and turned on
 			if ( $this->current_group->enable_forum && bp_is_active( 'forums' ) ) {
 				$sub_nav[] = array(
-					'name'            => __( 'Forum', 'buddypress' ),
+					'name'            => _x( 'Forum', 'My Group screen nav', 'buddypress' ),
 					'slug'            => 'forum',
 					'parent_url'      => $group_link,
 					'parent_slug'     => $this->current_group->slug,
@@ -475,40 +469,43 @@ class BP_Groups_Component extends BP_Component {
 			}
 
 			$sub_nav[] = array(
-				'name'            => sprintf( __( 'Members <span>%s</span>', 'buddypress' ), number_format( $this->current_group->total_member_count ) ),
+				'name'            => sprintf( _x( 'Members <span>%s</span>', 'My Group screen nav', 'buddypress' ), number_format( $this->current_group->total_member_count ) ),
 				'slug'            => 'members',
 				'parent_url'      => $group_link,
 				'parent_slug'     => $this->current_group->slug,
 				'screen_function' => 'groups_screen_group_members',
 				'position'        => 60,
 				'user_has_access' => $this->current_group->user_has_access,
-				'item_css_id'     => 'members'
+				'item_css_id'     => 'members',
+				'no_access_url'   => $group_link,
 			);
 
 			if ( bp_is_active( 'friends' ) && bp_groups_user_can_send_invites() ) {
 				$sub_nav[] = array(
-					'name'            => __( 'Send Invites', 'buddypress' ),
+					'name'            => _x( 'Send Invites', 'My Group screen nav', 'buddypress' ),
 					'slug'            => 'send-invites',
 					'parent_url'      => $group_link,
 					'parent_slug'     => $this->current_group->slug,
 					'screen_function' => 'groups_screen_group_invite',
 					'item_css_id'     => 'invite',
 					'position'        => 70,
-					'user_has_access' => $this->current_group->user_has_access
+					'user_has_access' => $this->current_group->user_has_access,
+					'no_access_url'   => $group_link,
 				);
 			}
 
 			// If the user is a group admin, then show the group admin nav item
 			if ( bp_is_item_admin() ) {
 				$sub_nav[] = array(
-					'name'            => __( 'Admin', 'buddypress' ),
+					'name'            => _x( 'Manage', 'My Group screen nav', 'buddypress' ),
 					'slug'            => 'admin',
 					'parent_url'      => $group_link,
 					'parent_slug'     => $this->current_group->slug,
 					'screen_function' => 'groups_screen_group_admin',
 					'position'        => 1000,
 					'user_has_access' => true,
-					'item_css_id'     => 'admin'
+					'item_css_id'     => 'admin',
+					'no_access_url'   => $group_link,
 				);
 			}
 
@@ -523,7 +520,13 @@ class BP_Groups_Component extends BP_Component {
 	}
 
 	/**
-	 * Set up the Toolbar
+	 * Set up the component entries in the WordPress Admin Bar.
+	 *
+	 * @see BP_Component::setup_nav() for a description of the $wp_admin_nav
+	 *      parameter array.
+	 *
+	 * @param array $wp_admin_nav See BP_Component::setup_admin_bar() for a
+	 *        description.
 	 */
 	public function setup_admin_bar( $wp_admin_nav = array() ) {
 		$bp = buddypress();
@@ -537,12 +540,12 @@ class BP_Groups_Component extends BP_Component {
 
 			// Pending group invites
 			$count   = groups_get_invite_count_for_user();
-			$title   = __( 'Groups',             'buddypress' );
-			$pending = __( 'No Pending Invites', 'buddypress' );
+			$title   = _x( 'Groups', 'My Account Groups', 'buddypress' );
+			$pending = _x( 'No Pending Invites', 'My Account Groups sub nav', 'buddypress' );
 
 			if ( !empty( $count['total'] ) ) {
-				$title   = sprintf( __( 'Groups <span class="count">%s</span>',          'buddypress' ), $count );
-				$pending = sprintf( __( 'Pending Invites <span class="count">%s</span>', 'buddypress' ), $count );
+				$title   = sprintf( _x( 'Groups <span class="count">%s</span>', 'My Account Groups nav', 'buddypress' ), $count );
+				$pending = sprintf( _x( 'Pending Invites <span class="count">%s</span>', 'My Account Groups sub nav', 'buddypress' ), $count );
 			}
 
 			// Add the "My Account" sub menus
@@ -557,7 +560,7 @@ class BP_Groups_Component extends BP_Component {
 			$wp_admin_nav[] = array(
 				'parent' => 'my-account-' . $this->id,
 				'id'     => 'my-account-' . $this->id . '-memberships',
-				'title'  => __( 'Memberships', 'buddypress' ),
+				'title'  => _x( 'Memberships', 'My Account Groups sub nav', 'buddypress' ),
 				'href'   => trailingslashit( $groups_link )
 			);
 
@@ -574,7 +577,7 @@ class BP_Groups_Component extends BP_Component {
 				$wp_admin_nav[] = array(
 					'parent' => 'my-account-' . $this->id,
 					'id'     => 'my-account-' . $this->id . '-create',
-					'title'  => __( 'Create a Group', 'buddypress' ),
+					'title'  => _x( 'Create a Group', 'My Account Groups sub nav', 'buddypress' ),
 					'href'   => trailingslashit( bp_get_groups_directory_permalink() . 'create' )
 				);
 			}
@@ -584,7 +587,7 @@ class BP_Groups_Component extends BP_Component {
 	}
 
 	/**
-	 * Sets up the title for pages and <title>
+	 * Set up the title for pages and <title>.
 	 */
 	public function setup_title() {
 		$bp = buddypress();
@@ -592,7 +595,7 @@ class BP_Groups_Component extends BP_Component {
 		if ( bp_is_groups_component() ) {
 
 			if ( bp_is_my_profile() && !bp_is_single_item() ) {
-				$bp->bp_options_title = __( 'Memberships', 'buddypress' );
+				$bp->bp_options_title = _x( 'Memberships', 'My Groups page <title>', 'buddypress' );
 
 			} else if ( !bp_is_my_profile() && !bp_is_single_item() ) {
 				$bp->bp_options_avatar = bp_core_fetch_avatar( array(
@@ -611,11 +614,11 @@ class BP_Groups_Component extends BP_Component {
 					'object'     => 'group',
 					'type'       => 'thumb',
 					'avatar_dir' => 'group-avatars',
-					'alt'        => __( 'Group Avatar', 'buddypress' )
+					'alt'        => __( 'Group Profile Photo', 'buddypress' )
 				) );
 
 				if ( empty( $bp->bp_options_avatar ) ) {
-					$bp->bp_options_avatar = '<img src="' . esc_url( bp_core_avatar_default_thumb() ) . '" alt="' . esc_attr__( 'No Group Avatar', 'buddypress' ) . '" class="avatar" />';
+					$bp->bp_options_avatar = '<img src="' . esc_url( bp_core_avatar_default_thumb() ) . '" alt="' . esc_attr__( 'No Group Profile Photo', 'buddypress' ) . '" class="avatar" />';
 				}
 			}
 		}
@@ -624,7 +627,11 @@ class BP_Groups_Component extends BP_Component {
 	}
 }
 
-
+/**
+ * Bootstrap the Notifications component.
+ *
+ * @since BuddyPress (1.5.0)
+ */
 function bp_setup_groups() {
 	buddypress()->groups = new BP_Groups_Component();
 }
diff --git a/wp-content/plugins/buddypress/bp-groups/bp-groups-notifications.php b/wp-content/plugins/buddypress/bp-groups/bp-groups-notifications.php
index 8f50541c5..c4b1a485b 100644
--- a/wp-content/plugins/buddypress/bp-groups/bp-groups-notifications.php
+++ b/wp-content/plugins/buddypress/bp-groups/bp-groups-notifications.php
@@ -15,14 +15,25 @@ if ( !defined( 'ABSPATH' ) ) exit;
 
 /** Emails ********************************************************************/
 
-function groups_notification_group_updated( $group_id ) {
+/**
+ * Notify all group members when a group is updated.
+ *
+ * @since BuddyPress (1.0.0)
+ *
+ * @param int $group_id ID of the group.
+ */
+function groups_notification_group_updated( $group_id = 0 ) {
 
 	$group    = groups_get_group( array( 'group_id' => $group_id ) );
 	$subject  = bp_get_email_subject( array( 'text' => __( 'Group Details Updated', 'buddypress' ) ) );
 	$user_ids = BP_Groups_Member::get_group_member_ids( $group->id );
 
 	foreach ( (array) $user_ids as $user_id ) {
-		if ( 'no' == bp_get_user_meta( $user_id, 'notification_groups_group_updated', true ) ) continue;
+
+		// Continue if member opted out of receiving this email
+		if ( 'no' === bp_get_user_meta( $user_id, 'notification_groups_group_updated', true ) ) {
+			continue;
+		}
 
 		$ud = bp_core_get_core_userdata( $user_id );
 
@@ -56,8 +67,20 @@ To view the group: %2$s
 	do_action( 'bp_groups_sent_updated_email', $user_ids, $subject, '', $group_id );
 }
 
-function groups_notification_new_membership_request( $requesting_user_id, $admin_id, $group_id, $membership_id ) {
+/**
+ * Notify group admin about new membership request.
+ *
+ * @since BuddyPress (1.0.0)
+ *
+ * @param int $requesting_user_id ID of the user requesting group membership.
+ * @param int $admin_id ID of the group admin.
+ * @param int $group_id ID of the group.
+ * @param int $membership_id ID of the group membership object.
+ * @return bool|null False on failure.
+ */
+function groups_notification_new_membership_request( $requesting_user_id = 0, $admin_id = 0, $group_id = 0, $membership_id = 0 ) {
 
+	// Trigger a BuddyPress Notification
 	if ( bp_is_active( 'notifications' ) ) {
 		bp_notifications_add_notification( array(
 			'user_id'           => $admin_id,
@@ -68,8 +91,10 @@ function groups_notification_new_membership_request( $requesting_user_id, $admin
 		) );
 	}
 
-	if ( 'no' == bp_get_user_meta( $admin_id, 'notification_groups_membership_request', true ) )
+	// Bail if member opted out of receiving this email
+	if ( 'no' === bp_get_user_meta( $admin_id, 'notification_groups_membership_request', true ) ) {
 		return false;
+	}
 
 	// Username of the user requesting a membership: %1$s in mail
 	$requesting_user_name = bp_core_get_user_displayname( $requesting_user_id );
@@ -108,7 +133,7 @@ To view %4$s\'s profile: %5$s
 		$message .= sprintf( __( 'To disable these notifications please log in and go to: %s', 'buddypress' ), $settings_link );
 	}
 
-	/* Send the message */
+	// Send the message
 	$to      = apply_filters( 'groups_notification_new_membership_request_to', $to );
 	$subject = apply_filters_ref_array( 'groups_notification_new_membership_request_subject', array( $subject, &$group ) );
 	$message = apply_filters_ref_array( 'groups_notification_new_membership_request_message', array( $message, &$group, $requesting_user_name, $profile_link, $group_requests, $settings_link ) );
@@ -118,12 +143,26 @@ To view %4$s\'s profile: %5$s
 	do_action( 'bp_groups_sent_membership_request_email', $admin_id, $subject, $message, $requesting_user_id, $group_id, $membership_id );
 }
 
-function groups_notification_membership_request_completed( $requesting_user_id, $group_id, $accepted = true ) {
+/**
+ * Notify member about their group membership request.
+ *
+ * @since BuddyPress (1.0.0)
+ *
+ * @param int $requesting_user_id ID of the user requesting group membership.
+ * @param int $group_id ID of the group.
+ * @param bool $accepted Optional. Whether the membership request was accepted.
+ *        Default: true.
+ * @return boolean
+ */
+function groups_notification_membership_request_completed( $requesting_user_id = 0, $group_id = 0, $accepted = true ) {
 
-	// Post a screen notification first.
+	// Trigger a BuddyPress Notification
 	if ( bp_is_active( 'notifications' ) ) {
 
-		$type = ! empty( $accepted ) ? 'membership_request_accepted' : 'membership_request_rejected' ;
+		// What type of acknowledgement
+		$type = ! empty( $accepted )
+			? 'membership_request_accepted'
+			: 'membership_request_rejected';
 
 		bp_notifications_add_notification( array(
 			'user_id'           => $requesting_user_id,
@@ -133,21 +172,20 @@ function groups_notification_membership_request_completed( $requesting_user_id,
 		) );
 	}
 
-	if ( 'no' == bp_get_user_meta( $requesting_user_id, 'notification_membership_request_completed', true ) )
+	// Bail if member opted out of receiving this email
+	if ( 'no' === bp_get_user_meta( $requesting_user_id, 'notification_membership_request_completed', true ) ) {
 		return false;
+	}
 
-	$group = groups_get_group( array( 'group_id' => $group_id ) );
-
-	$ud = bp_core_get_core_userdata($requesting_user_id);
-
-	$group_link   = bp_get_group_permalink( $group );
+	$group         = groups_get_group( array( 'group_id' => $group_id ) );
+	$ud            = bp_core_get_core_userdata( $requesting_user_id );
+	$group_link    = bp_get_group_permalink( $group );
 	$settings_slug = function_exists( 'bp_get_settings_slug' ) ? bp_get_settings_slug() : 'settings';
 	$settings_link = bp_core_get_user_domain( $requesting_user_id ) . $settings_slug . '/notifications/';
+	$to            = $ud->user_email;
 
 	// Set up and send the message
-	$to       = $ud->user_email;
-
-	if ( $accepted ) {
+	if ( ! empty( $accepted ) ) {
 		$subject = bp_get_email_subject( array( 'text' => sprintf( __( 'Membership request for group "%s" accepted', 'buddypress' ), $group->name ) ) );
 		$message = sprintf( __(
 'Your membership request for the group "%1$s" has been accepted.
@@ -173,7 +211,7 @@ To submit another request please log in and visit: %2$s
 		$message .= sprintf( __( 'To disable these notifications please log in and go to: %s', 'buddypress' ), $settings_link );
 	}
 
-	/* Send the message */
+	// Send the message
 	$to      = apply_filters( 'groups_notification_membership_request_completed_to', $to );
 	$subject = apply_filters_ref_array( 'groups_notification_membership_request_completed_subject', array( $subject, &$group ) );
 	$message = apply_filters_ref_array( 'groups_notification_membership_request_completed_message', array( $message, &$group, $group_link, $settings_link ) );
@@ -185,30 +223,40 @@ To submit another request please log in and visit: %2$s
 add_action( 'groups_membership_accepted', 'groups_notification_membership_request_completed', 10, 3 );
 add_action( 'groups_membership_rejected', 'groups_notification_membership_request_completed', 10, 3 );
 
-function groups_notification_promoted_member( $user_id, $group_id ) {
+/**
+ * Notify group member they have been promoted.
+ *
+ * @since BuddyPress (1.0.0)
+ *
+ * @param int $user_id ID of the user.
+ * @param int $group_id ID of the group.
+ * @return bool|null False on failure.
+ */
+function groups_notification_promoted_member( $user_id = 0, $group_id = 0 ) {
 
+	// What type of promotion is this?
 	if ( groups_is_user_admin( $user_id, $group_id ) ) {
 		$promoted_to = __( 'an administrator', 'buddypress' );
-		$type = 'member_promoted_to_admin';
+		$type        = 'member_promoted_to_admin';
 	} else {
 		$promoted_to = __( 'a moderator', 'buddypress' );
-		$type = 'member_promoted_to_mod';
+		$type        = 'member_promoted_to_mod';
 	}
 
-	// Post a screen notification first.
+	// Trigger a BuddyPress Notification
 	if ( bp_is_active( 'notifications' ) ) {
 		bp_notifications_add_notification( array(
 			'user_id'           => $user_id,
 			'item_id'           => $group_id,
 			'component_name'    => buddypress()->groups->id,
-			'component_action'  => $type,
-			'date_notified'     => bp_core_current_time(),
-			'is_new'            => 1,
+			'component_action'  => $type
 		) );
 	}
 
-	if ( 'no' == bp_get_user_meta( $user_id, 'notification_groups_admin_promotion', true ) )
+	// Bail if admin opted out of receiving this email
+	if ( 'no' === bp_get_user_meta( $user_id, 'notification_groups_admin_promotion', true ) ) {
 		return false;
+	}
 
 	$group         = groups_get_group( array( 'group_id' => $group_id ) );
 	$ud            = bp_core_get_core_userdata($user_id);
@@ -232,7 +280,7 @@ To view the group please visit: %3$s
 		$message .= sprintf( __( 'To disable these notifications please log in and go to: %s', 'buddypress' ), $settings_link );
 	}
 
-	/* Send the message */
+	// Send the message
 	$to      = apply_filters( 'groups_notification_promoted_member_to', $to );
 	$subject = apply_filters_ref_array( 'groups_notification_promoted_member_subject', array( $subject, &$group ) );
 	$message = apply_filters_ref_array( 'groups_notification_promoted_member_message', array( $message, &$group, $promoted_to, $group_link, $settings_link ) );
@@ -243,42 +291,57 @@ To view the group please visit: %3$s
 }
 add_action( 'groups_promoted_member', 'groups_notification_promoted_member', 10, 2 );
 
+/**
+ * Notify a member they have been invited to a group.
+ *
+ * @since BuddyPress (1.0.0)
+ *
+ * @param BP_Groups_Group $group Group object.
+ * @param BP_Groups_Member $member Member object.
+ * @param int $inviter_user_id ID of the user who sent the invite.
+ * @return bool|null False on failure.
+ */
 function groups_notification_group_invites( &$group, &$member, $inviter_user_id ) {
 
-	// @todo $inviter_up may be used for caching, test without it
+	// Bail if member has already been invited
+	if ( ! empty( $member->invite_sent ) ) {
+		return;
+	}
+
+	// @todo $inviter_ud may be used for caching, test without it
 	$inviter_ud   = bp_core_get_core_userdata( $inviter_user_id );
 	$inviter_name = bp_core_get_userlink( $inviter_user_id, true, false, true );
 	$inviter_link = bp_core_get_user_domain( $inviter_user_id );
+	$group_link   = bp_get_group_permalink( $group );
 
-	$group_link = bp_get_group_permalink( $group );
-
-	if ( !$member->invite_sent ) {
-		$invited_user_id = $member->user_id;
-
-		// Post a screen notification first.
-		if ( bp_is_active( 'notifications' ) ) {
-			bp_notifications_add_notification( array(
-				'user_id'           => $invited_user_id,
-				'item_id'           => $group->id,
-				'component_name'    => buddypress()->groups->id,
-				'component_action'  => 'group_invite'
-			) );
-		}
+	// Setup the ID for the invited user
+	$invited_user_id = $member->user_id;
 
-		if ( 'no' == bp_get_user_meta( $invited_user_id, 'notification_groups_invite', true ) )
-			return false;
+	// Trigger a BuddyPress Notification
+	if ( bp_is_active( 'notifications' ) ) {
+		bp_notifications_add_notification( array(
+			'user_id'          => $invited_user_id,
+			'item_id'          => $group->id,
+			'component_name'   => buddypress()->groups->id,
+			'component_action' => 'group_invite'
+		) );
+	}
 
-		$invited_ud    = bp_core_get_core_userdata($invited_user_id);
-		$settings_slug = function_exists( 'bp_get_settings_slug' ) ? bp_get_settings_slug() : 'settings';
-		$settings_link = bp_core_get_user_domain( $invited_user_id ) . $settings_slug . '/notifications/';
-		$invited_link  = bp_core_get_user_domain( $invited_user_id );
-		$invites_link  = trailingslashit( $invited_link . bp_get_groups_slug() . '/invites' );
+	// Bail if member opted out of receiving this email
+	if ( 'no' === bp_get_user_meta( $invited_user_id, 'notification_groups_invite', true ) ) {
+		return false;
+	}
 
-		// Set up and send the message
-		$to       = $invited_ud->user_email;
-		$subject  = bp_get_email_subject( array( 'text' => sprintf( __( 'You have an invitation to the group: "%s"', 'buddypress' ), $group->name ) ) );
+	$invited_ud    = bp_core_get_core_userdata( $invited_user_id );
+	$settings_slug = function_exists( 'bp_get_settings_slug' ) ? bp_get_settings_slug() : 'settings';
+	$settings_link = bp_core_get_user_domain( $invited_user_id ) . $settings_slug . '/notifications/';
+	$invited_link  = bp_core_get_user_domain( $invited_user_id );
+	$invites_link  = trailingslashit( $invited_link . bp_get_groups_slug() . '/invites' );
 
-		$message = sprintf( __(
+	// Set up and send the message
+	$to       = $invited_ud->user_email;
+	$subject  = bp_get_email_subject( array( 'text' => sprintf( __( 'You have an invitation to the group: "%s"', 'buddypress' ), $group->name ) ) );
+	$message  = sprintf( __(
 'One of your friends %1$s has invited you to the group: "%2$s".
 
 To view your group invites visit: %3$s
@@ -290,33 +353,36 @@ To view %5$s\'s profile visit: %6$s
 ---------------------
 ', 'buddypress' ), $inviter_name, $group->name, $invites_link, $group_link, $inviter_name, $inviter_link );
 
-		// Only show the disable notifications line if the settings component is enabled
-		if ( bp_is_active( 'settings' ) ) {
-			$message .= sprintf( __( 'To disable these notifications please log in and go to: %s', 'buddypress' ), $settings_link );
-		}
+	// Only show the disable notifications line if the settings component is enabled
+	if ( bp_is_active( 'settings' ) ) {
+		$message .= sprintf( __( 'To disable these notifications please log in and go to: %s', 'buddypress' ), $settings_link );
+	}
 
-		/* Send the message */
-		$to      = apply_filters( 'groups_notification_group_invites_to', $to );
-		$subject = apply_filters_ref_array( 'groups_notification_group_invites_subject', array( $subject, &$group ) );
-		$message = apply_filters_ref_array( 'groups_notification_group_invites_message', array( $message, &$group, $inviter_name, $inviter_link, $invites_link, $group_link, $settings_link ) );
+	// Send the message
+	$to      = apply_filters( 'groups_notification_group_invites_to', $to );
+	$subject = apply_filters_ref_array( 'groups_notification_group_invites_subject', array( $subject, &$group ) );
+	$message = apply_filters_ref_array( 'groups_notification_group_invites_message', array( $message, &$group, $inviter_name, $inviter_link, $invites_link, $group_link, $settings_link ) );
 
-		wp_mail( $to, $subject, $message );
+	wp_mail( $to, $subject, $message );
 
-		do_action( 'bp_groups_sent_invited_email', $invited_user_id, $subject, $message, $group );
-	}
+	do_action( 'bp_groups_sent_invited_email', $invited_user_id, $subject, $message, $group );
 }
 
 /** Notifications *************************************************************/
 
 /**
- * Format the BuddyBar/Toolbar notifications for the Groups component
+ * Format notifications for the Groups component.
+ *
+ * @since BuddyPress (1.0.0)
  *
- * @since BuddyPress (1.0)
- * @param string $action The kind of notification being rendered
- * @param int $item_id The primary item id
- * @param int $secondary_item_id The secondary item id
- * @param int $total_items The total number of messaging-related notifications waiting for the user
- * @param string $format 'string' for BuddyBar-compatible notifications; 'array' for WP Toolbar
+ * @param string $action The kind of notification being rendered.
+ * @param int $item_id The primary item ID.
+ * @param int $secondary_item_id The secondary item ID.
+ * @param int $total_items The total number of messaging-related notifications
+ *        waiting for the user.
+ * @param string $format 'string' for BuddyBar-compatible notifications; 'array'
+ *        for WP Toolbar. Default: 'string'.
+ * @return string
  */
 function groups_format_notifications( $action, $item_id, $secondary_item_id, $total_items, $format = 'string' ) {
 
@@ -548,9 +614,11 @@ function groups_format_notifications( $action, $item_id, $secondary_item_id, $to
 }
 
 /**
- * Remove all notifications for any member belonging to a specific group
+ * Remove all notifications for any member belonging to a specific group.
  *
  * @since BuddyPress (1.9.0)
+ *
+ * @param int $group_id ID of the group.
  */
 function bp_groups_delete_group_delete_all_notifications( $group_id ) {
 	if ( bp_is_active( 'notifications' ) ) {
@@ -563,6 +631,9 @@ add_action( 'groups_delete_group', 'bp_groups_delete_group_delete_all_notificati
  * When a demotion takes place, delete any corresponding promotion notifications.
  *
  * @since BuddyPress (2.0.0)
+ *
+ * @param int $user_id ID of the user.
+ * @param int $group_id ID of the group.
  */
 function bp_groups_delete_promotion_notifications( $user_id = 0, $group_id = 0 ) {
 	if ( bp_is_active( 'notifications' ) && ! empty( $group_id ) && ! empty( $user_id ) ) {
@@ -573,11 +644,12 @@ function bp_groups_delete_promotion_notifications( $user_id = 0, $group_id = 0 )
 add_action( 'groups_demoted_member', 'bp_groups_delete_promotion_notifications', 10, 2 );
 
 /**
- * Mark notifications read when a member accepts a group invitation
+ * Mark notifications read when a member accepts a group invitation.
  *
  * @since BuddyPress (1.9.0)
- * @param int $user_id
- * @param int $group_id
+ *
+ * @param int $user_id ID of the user.
+ * @param int $group_id ID of the group.
  */
 function bp_groups_accept_invite_mark_notifications( $user_id, $group_id ) {
 	if ( bp_is_active( 'notifications' ) ) {
@@ -589,7 +661,7 @@ add_action( 'groups_reject_invite', 'bp_groups_accept_invite_mark_notifications'
 add_action( 'groups_delete_invite', 'bp_groups_accept_invite_mark_notifications', 10, 2 );
 
 /**
- * Mark notifications read when a member views their group memberships
+ * Mark notifications read when a member views their group memberships.
  *
  * @since BuddyPress (1.9.0)
  */
@@ -613,7 +685,7 @@ add_action( 'groups_screen_my_groups',  'bp_groups_screen_my_groups_mark_notific
 add_action( 'groups_screen_group_home', 'bp_groups_screen_my_groups_mark_notifications', 10 );
 
 /**
- * Mark group invitation notifications read when a member views their invitations
+ * Mark group invitation notifications read when a member views their invitations.
  *
  * @since BuddyPress (1.9.0)
  */
@@ -625,13 +697,11 @@ function bp_groups_screen_invites_mark_notifications() {
 add_action( 'groups_screen_group_invites', 'bp_groups_screen_invites_mark_notifications', 10 );
 
 /**
- * Mark group join requests read when an admin or moderator visits the group
- * administration area.
+ * Mark group join requests read when an admin or moderator visits the group administration area.
  *
  * @since BuddyPress (1.9.0)
- * @param int $group_id
  */
-function bp_groups_screen_group_admin_requests_mark_notifications( $group_id ) {
+function bp_groups_screen_group_admin_requests_mark_notifications() {
 	if ( bp_is_active( 'notifications' ) ) {
 		bp_notifications_mark_notifications_by_type( bp_loggedin_user_id(), buddypress()->groups->id, 'new_membership_request' );
 	}
@@ -642,7 +712,8 @@ add_action( 'groups_screen_group_admin_requests', 'bp_groups_screen_group_admin_
  * Delete new group membership notifications when a user is being deleted.
  *
  * @since BuddyPress (1.9.0)
- * @param int $user_id
+ *
+ * @param int $user_id ID of the user.
  */
 function bp_groups_remove_data_for_user_notifications( $user_id ) {
 	if ( bp_is_active( 'notifications' ) ) {
diff --git a/wp-content/plugins/buddypress/bp-groups/bp-groups-screens.php b/wp-content/plugins/buddypress/bp-groups/bp-groups-screens.php
index c2feff5b2..e89c72b06 100644
--- a/wp-content/plugins/buddypress/bp-groups/bp-groups-screens.php
+++ b/wp-content/plugins/buddypress/bp-groups/bp-groups-screens.php
@@ -3,9 +3,9 @@
 /**
  * BuddyPress Groups Screen Functions
  *
- * Screen functions are the controllers of BuddyPress. They will execute when their
- * specific URL is caught. They will first save or manipulate data using business
- * functions, then pass on the user to a template file.
+ * Screen functions are the controllers of BuddyPress. They will execute when
+ * their specific URL is caught. They will first save or manipulate data using
+ * business functions, then pass on the user to a template file.
  *
  * @package BuddyPress
  * @subpackage GroupsScreens
@@ -14,6 +14,9 @@
 // Exit if accessed directly
 if ( !defined( 'ABSPATH' ) ) exit;
 
+/**
+ * Handle the display of the Groups directory index.
+ */
 function groups_directory_groups_setup() {
 	if ( bp_is_groups_directory() ) {
 		bp_update_is_directory( true, 'groups' );
@@ -25,6 +28,9 @@ function groups_directory_groups_setup() {
 }
 add_action( 'bp_screens', 'groups_directory_groups_setup', 2 );
 
+/**
+ * Handle the loading of the My Groups page.
+ */
 function groups_screen_my_groups() {
 
 	do_action( 'groups_screen_my_groups' );
@@ -32,6 +38,9 @@ function groups_screen_my_groups() {
 	bp_core_load_template( apply_filters( 'groups_template_my_groups', 'members/single/home' ) );
 }
 
+/**
+ * Handle the loading of a user's Groups > Invites page.
+ */
 function groups_screen_group_invites() {
 	$group_id = (int)bp_action_variable( 1 );
 
@@ -87,6 +96,9 @@ function groups_screen_group_invites() {
 	bp_core_load_template( apply_filters( 'groups_template_group_invites', 'members/single/home' ) );
 }
 
+/**
+ * Handle the loading of a single group's page.
+ */
 function groups_screen_group_home() {
 
 	if ( ! bp_is_single_item() ) {
@@ -99,9 +111,7 @@ function groups_screen_group_home() {
 }
 
 /**
- * This screen function handles actions related to group forums
- *
- * @package BuddyPress
+ * This screen function handles actions related to group forums.
  */
 function groups_screen_group_forum() {
 
@@ -399,6 +409,9 @@ function groups_screen_group_forum() {
 	}
 }
 
+/**
+ * Handle the display of a group's Members page.
+ */
 function groups_screen_group_members() {
 
 	if ( !bp_is_single_item() )
@@ -413,6 +426,9 @@ function groups_screen_group_members() {
 	bp_core_load_template( apply_filters( 'groups_template_group_members', 'groups/single/home' ) );
 }
 
+/**
+ * Handle the display of a group's Send Invites page.
+ */
 function groups_screen_group_invite() {
 
 	if ( !bp_is_single_item() )
@@ -489,6 +505,9 @@ function groups_remove_group_invite() {
 }
 add_action( 'bp_screens', 'groups_remove_group_invite' );
 
+/**
+ * Handle the display of a group's Request Membership page.
+ */
 function groups_screen_group_request_membership() {
 	global $bp;
 
@@ -505,7 +524,7 @@ function groups_screen_group_request_membership() {
 		if ( groups_accept_invite( bp_loggedin_user_id(), $bp->groups->current_group->id ) )
 			bp_core_add_message( __( 'Group invite accepted', 'buddypress' ) );
 		else
-			bp_core_add_message( __( 'There was an error accepting the group invitation, please try again.', 'buddypress' ), 'error' );
+			bp_core_add_message( __( 'There was an error accepting the group invitation; please try again.', 'buddypress' ), 'error' );
 		bp_core_redirect( bp_get_group_permalink( $bp->groups->current_group ) );
 	}
 
@@ -517,7 +536,7 @@ function groups_screen_group_request_membership() {
 			return false;
 
 		if ( !groups_send_membership_request( bp_loggedin_user_id(), $bp->groups->current_group->id ) ) {
-			bp_core_add_message( __( 'There was an error sending your group membership request, please try again.', 'buddypress' ), 'error' );
+			bp_core_add_message( __( 'There was an error sending your group membership request; please try again.', 'buddypress' ), 'error' );
 		} else {
 			bp_core_add_message( __( 'Your membership request was sent to the group administrator successfully. You will be notified when the group administrator responds to your request.', 'buddypress' ) );
 		}
@@ -529,6 +548,9 @@ function groups_screen_group_request_membership() {
 	bp_core_load_template( apply_filters( 'groups_template_group_request_membership', 'groups/single/home' ) );
 }
 
+/**
+ * Handle the display of a single group activity item.
+ */
 function groups_screen_group_activity_permalink() {
 
 	if ( !bp_is_groups_component() || !bp_is_active( 'activity' ) || ( bp_is_active( 'activity' ) && !bp_is_current_action( bp_get_activity_slug() ) ) || !bp_action_variable( 0 ) )
@@ -540,6 +562,9 @@ function groups_screen_group_activity_permalink() {
 }
 add_action( 'bp_screens', 'groups_screen_group_activity_permalink' );
 
+/**
+ * Handle the display of a group's Admin pages.
+ */
 function groups_screen_group_admin() {
 	if ( !bp_is_groups_component() || !bp_is_current_action( 'admin' ) )
 		return false;
@@ -550,6 +575,9 @@ function groups_screen_group_admin() {
 	bp_core_redirect( bp_get_group_permalink( groups_get_current_group() ) . 'admin/edit-details/' );
 }
 
+/**
+ * Handle the display of a group's admin/edit-details page.
+ */
 function groups_screen_group_admin_edit_details() {
 
 	if ( 'edit-details' != bp_get_group_current_admin_tab() )
@@ -568,7 +596,7 @@ function groups_screen_group_admin_edit_details() {
 			$group_notify_members = isset( $_POST['group-notify-members'] ) ? (int) $_POST['group-notify-members'] : 0;
 
 			if ( !groups_edit_base_group_details( $_POST['group-id'], $_POST['group-name'], $_POST['group-desc'], $group_notify_members ) ) {
-				bp_core_add_message( __( 'There was an error updating group details, please try again.', 'buddypress' ), 'error' );
+				bp_core_add_message( __( 'There was an error updating group details; please try again.', 'buddypress' ), 'error' );
 			} else {
 				bp_core_add_message( __( 'Group details were successfully updated.', 'buddypress' ) );
 			}
@@ -585,6 +613,9 @@ function groups_screen_group_admin_edit_details() {
 }
 add_action( 'bp_screens', 'groups_screen_group_admin_edit_details' );
 
+/**
+ * Handle the display of a group's admin/group-settings page.
+ */
 function groups_screen_group_admin_settings() {
 
 	if ( 'group-settings' != bp_get_group_current_admin_tab() )
@@ -612,7 +643,7 @@ function groups_screen_group_admin_settings() {
 			return false;
 
 		if ( !groups_edit_group_settings( $_POST['group-id'], $enable_forum, $status, $invite_status ) ) {
-			bp_core_add_message( __( 'There was an error updating group settings, please try again.', 'buddypress' ), 'error' );
+			bp_core_add_message( __( 'There was an error updating group settings; please try again.', 'buddypress' ), 'error' );
 		} else {
 			bp_core_add_message( __( 'Group settings were successfully updated.', 'buddypress' ) );
 		}
@@ -628,13 +659,16 @@ function groups_screen_group_admin_settings() {
 }
 add_action( 'bp_screens', 'groups_screen_group_admin_settings' );
 
+/**
+ * Handle the display of a group's Change Avatar page.
+ */
 function groups_screen_group_admin_avatar() {
 
 	if ( 'group-avatar' != bp_get_group_current_admin_tab() )
 		return false;
 
 	// If the logged-in user doesn't have permission or if avatar uploads are disabled, then stop here
-	if ( ! bp_is_item_admin() || (int) bp_get_option( 'bp-disable-avatar-uploads' ) )
+	if ( ! bp_is_item_admin() || (int) bp_get_option( 'bp-disable-avatar-uploads' ) || ! buddypress()->avatar->show_avatars )
 		return false;
 
 	$bp = buddypress();
@@ -646,9 +680,9 @@ function groups_screen_group_admin_avatar() {
 		check_admin_referer( 'bp_group_avatar_delete' );
 
 		if ( bp_core_delete_existing_avatar( array( 'item_id' => $bp->groups->current_group->id, 'object' => 'group' ) ) ) {
-			bp_core_add_message( __( 'Your avatar was deleted successfully!', 'buddypress' ) );
+			bp_core_add_message( __( 'The group profile photo was deleted successfully!', 'buddypress' ) );
 		} else {
-			bp_core_add_message( __( 'There was a problem deleting that avatar, please try again.', 'buddypress' ), 'error' );
+			bp_core_add_message( __( 'There was a problem deleting the group profile photo; please try again.', 'buddypress' ), 'error' );
 		}
 	}
 
@@ -691,9 +725,9 @@ function groups_screen_group_admin_avatar() {
 		);
 
 		if ( !bp_core_avatar_handle_crop( $args ) ) {
-			bp_core_add_message( __( 'There was a problem cropping the avatar.', 'buddypress' ), 'error' );
+			bp_core_add_message( __( 'There was a problem cropping the group profile photo.', 'buddypress' ), 'error' );
 		} else {
-			bp_core_add_message( __( 'The new group avatar was uploaded successfully.', 'buddypress' ) );
+			bp_core_add_message( __( 'The new group profile photo was uploaded successfully.', 'buddypress' ) );
 		}
 	}
 
@@ -705,8 +739,6 @@ add_action( 'bp_screens', 'groups_screen_group_admin_avatar' );
 
 /**
  * This function handles actions related to member management on the group admin.
- *
- * @package BuddyPress
  */
 function groups_screen_group_admin_manage_members() {
 
@@ -754,7 +786,7 @@ function groups_screen_group_admin_manage_members() {
 
 			// Demote a user.
 			elseif ( !groups_demote_member( $user_id, $bp->groups->current_group->id ) )
-				bp_core_add_message( __( 'There was an error when demoting that user, please try again', 'buddypress' ), 'error' );
+				bp_core_add_message( __( 'There was an error when demoting that user; please try again', 'buddypress' ), 'error' );
 			else
 				bp_core_add_message( __( 'User demoted successfully', 'buddypress' ) );
 
@@ -772,7 +804,7 @@ function groups_screen_group_admin_manage_members() {
 
 			// Ban a user.
 			if ( !groups_ban_member( $user_id, $bp->groups->current_group->id ) )
-				bp_core_add_message( __( 'There was an error when banning that user, please try again', 'buddypress' ), 'error' );
+				bp_core_add_message( __( 'There was an error when banning that user; please try again', 'buddypress' ), 'error' );
 			else
 				bp_core_add_message( __( 'User banned successfully', 'buddypress' ) );
 
@@ -808,7 +840,7 @@ function groups_screen_group_admin_manage_members() {
 
 			// Remove a user.
 			if ( !groups_remove_member( $user_id, $bp->groups->current_group->id ) )
-				bp_core_add_message( __( 'There was an error removing that user from the group, please try again', 'buddypress' ), 'error' );
+				bp_core_add_message( __( 'There was an error removing that user from the group; please try again', 'buddypress' ), 'error' );
 			else
 				bp_core_add_message( __( 'User removed successfully', 'buddypress' ) );
 
@@ -824,6 +856,9 @@ function groups_screen_group_admin_manage_members() {
 }
 add_action( 'bp_screens', 'groups_screen_group_admin_manage_members' );
 
+/**
+ * Handle the display of Admin > Membership Requests.
+ */
 function groups_screen_group_admin_requests() {
 	$bp = buddypress();
 
@@ -847,7 +882,7 @@ function groups_screen_group_admin_requests() {
 
 			// Accept the membership request
 			if ( !groups_accept_membership_request( $membership_id ) )
-				bp_core_add_message( __( 'There was an error accepting the membership request, please try again.', 'buddypress' ), 'error' );
+				bp_core_add_message( __( 'There was an error accepting the membership request; please try again.', 'buddypress' ), 'error' );
 			else
 				bp_core_add_message( __( 'Group membership request accepted', 'buddypress' ) );
 
@@ -858,7 +893,7 @@ function groups_screen_group_admin_requests() {
 
 			// Reject the membership request
 			if ( !groups_reject_membership_request( $membership_id ) )
-				bp_core_add_message( __( 'There was an error rejecting the membership request, please try again.', 'buddypress' ), 'error' );
+				bp_core_add_message( __( 'There was an error rejecting the membership request; please try again.', 'buddypress' ), 'error' );
 			else
 				bp_core_add_message( __( 'Group membership request rejected', 'buddypress' ) );
 		}
@@ -872,6 +907,9 @@ function groups_screen_group_admin_requests() {
 }
 add_action( 'bp_screens', 'groups_screen_group_admin_requests' );
 
+/**
+ * Handle the display of the Delete Group page.
+ */
 function groups_screen_group_admin_delete_group() {
 	global $bp;
 
@@ -892,7 +930,7 @@ function groups_screen_group_admin_delete_group() {
 
 		// Group admin has deleted the group, now do it.
 		if ( !groups_delete_group( $bp->groups->current_group->id ) ) {
-			bp_core_add_message( __( 'There was an error deleting the group, please try again.', 'buddypress' ), 'error' );
+			bp_core_add_message( __( 'There was an error deleting the group; please try again.', 'buddypress' ), 'error' );
 		} else {
 			bp_core_add_message( __( 'The group was deleted successfully', 'buddypress' ) );
 
@@ -911,9 +949,7 @@ function groups_screen_group_admin_delete_group() {
 add_action( 'bp_screens', 'groups_screen_group_admin_delete_group' );
 
 /**
- * Renders the group settings fields on the Notification Settings page
- *
- * @package BuddyPress
+ * Render the group settings fields on the Notification Settings page.
  */
 function groups_screen_notification_settings() {
 
@@ -933,7 +969,7 @@ function groups_screen_notification_settings() {
 		<thead>
 			<tr>
 				<th class="icon"></th>
-				<th class="title"><?php _e( 'Groups', 'buddypress' ) ?></th>
+				<th class="title"><?php _ex( 'Groups', 'Group settings on notification settings page', 'buddypress' ) ?></th>
 				<th class="yes"><?php _e( 'Yes', 'buddypress' ) ?></th>
 				<th class="no"><?php _e( 'No', 'buddypress' )?></th>
 			</tr>
@@ -942,25 +978,25 @@ function groups_screen_notification_settings() {
 		<tbody>
 			<tr id="groups-notification-settings-invitation">
 				<td></td>
-				<td><?php _e( 'A member invites you to join a group', 'buddypress' ) ?></td>
+				<td><?php _ex( 'A member invites you to join a group', 'group settings on notification settings page','buddypress' ) ?></td>
 				<td class="yes"><input type="radio" name="notifications[notification_groups_invite]" value="yes" <?php checked( $group_invite, 'yes', true ) ?>/></td>
 				<td class="no"><input type="radio" name="notifications[notification_groups_invite]" value="no" <?php checked( $group_invite, 'no', true ) ?>/></td>
 			</tr>
 			<tr id="groups-notification-settings-info-updated">
 				<td></td>
-				<td><?php _e( 'Group information is updated', 'buddypress' ) ?></td>
+				<td><?php _ex( 'Group information is updated', 'group settings on notification settings page', 'buddypress' ) ?></td>
 				<td class="yes"><input type="radio" name="notifications[notification_groups_group_updated]" value="yes" <?php checked( $group_update, 'yes', true ) ?>/></td>
 				<td class="no"><input type="radio" name="notifications[notification_groups_group_updated]" value="no" <?php checked( $group_update, 'no', true ) ?>/></td>
 			</tr>
 			<tr id="groups-notification-settings-promoted">
 				<td></td>
-				<td><?php _e( 'You are promoted to a group administrator or moderator', 'buddypress' ) ?></td>
+				<td><?php _ex( 'You are promoted to a group administrator or moderator', 'group settings on notification settings page', 'buddypress' ) ?></td>
 				<td class="yes"><input type="radio" name="notifications[notification_groups_admin_promotion]" value="yes" <?php checked( $group_promo, 'yes', true ) ?>/></td>
 				<td class="no"><input type="radio" name="notifications[notification_groups_admin_promotion]" value="no" <?php checked( $group_promo, 'no', true ) ?>/></td>
 			</tr>
 			<tr id="groups-notification-settings-request">
 				<td></td>
-				<td><?php _e( 'A member requests to join a private group for which you are an admin', 'buddypress' ) ?></td>
+				<td><?php _ex( 'A member requests to join a private group for which you are an admin', 'group settings on notification settings page', 'buddypress' ) ?></td>
 				<td class="yes"><input type="radio" name="notifications[notification_groups_membership_request]" value="yes" <?php checked( $group_request, 'yes', true ) ?>/></td>
 				<td class="no"><input type="radio" name="notifications[notification_groups_membership_request]" value="no" <?php checked( $group_request, 'no', true ) ?>/></td>
 			</tr>
@@ -977,19 +1013,19 @@ add_action( 'bp_notification_settings', 'groups_screen_notification_settings' );
 /** Theme Compatability *******************************************************/
 
 /**
- * The main theme compat class for BuddyPress Groups
+ * The main theme compat class for BuddyPress Groups.
  *
  * This class sets up the necessary theme compatability actions to safely output
  * group template parts to the_title and the_content areas of a theme.
  *
- * @since BuddyPress (1.7)
+ * @since BuddyPress (1.7.0)
  */
 class BP_Groups_Theme_Compat {
 
 	/**
-	 * Setup the groups component theme compatibility
+	 * Set up theme compatibility for the Groups component.
 	 *
-	 * @since BuddyPress (1.7)
+	 * @since BuddyPress (1.7.0)
 	 */
 	public function __construct() {
 		add_action( 'bp_setup_theme_compat', array( $this, 'is_group' ) );
@@ -998,7 +1034,7 @@ class BP_Groups_Theme_Compat {
 	/**
 	 * Are we looking at something that needs group theme compatability?
 	 *
-	 * @since BuddyPress (1.7)
+	 * @since BuddyPress (1.7.0)
 	 */
 	public function is_group() {
 
@@ -1031,16 +1067,17 @@ class BP_Groups_Theme_Compat {
 		}
 	}
 
-	/** Directory *************************************************************/
+	/** Directory *********************************************************/
 
 	/**
 	 * Add template hierarchy to theme compat for the group directory page.
 	 *
-	 * This is to mirror how WordPress has {@link https://codex.wordpress.org/Template_Hierarchy template hierarchy}.
+	 * This is to mirror how WordPress has
+	 * {@link https://codex.wordpress.org/Template_Hierarchy template hierarchy}.
 	 *
-	 * @since BuddyPress (1.8)
+	 * @since BuddyPress (1.8.0)
 	 *
-	 * @param string $templates The templates from bp_get_theme_compat_templates()
+	 * @param string $templates The templates from bp_get_theme_compat_templates().
 	 * @return array $templates Array of custom templates to look for.
 	 */
 	public function directory_template_hierarchy( $templates ) {
@@ -1057,9 +1094,9 @@ class BP_Groups_Theme_Compat {
 	}
 
 	/**
-	 * Update the global $post with directory data
+	 * Update the global $post with directory data.
 	 *
-	 * @since BuddyPress (1.7)
+	 * @since BuddyPress (1.7.0)
 	 */
 	public function directory_dummy_post() {
 
@@ -1071,7 +1108,7 @@ class BP_Groups_Theme_Compat {
 			'post_author'    => 0,
 			'post_date'      => 0,
 			'post_content'   => '',
-			'post_type'      => 'bp_group',
+			'post_type'      => 'page',
 			'post_status'    => 'publish',
 			'is_page'        => true,
 			'comment_status' => 'closed'
@@ -1079,24 +1116,25 @@ class BP_Groups_Theme_Compat {
 	}
 
 	/**
-	 * Filter the_content with the groups index template part
+	 * Filter the_content with the groups index template part.
 	 *
-	 * @since BuddyPress (1.7)
+	 * @since BuddyPress (1.7.0)
 	 */
 	public function directory_content() {
 		return bp_buffer_template_part( 'groups/index', null, false );
 	}
 
-	/** Create ****************************************************************/
+	/** Create ************************************************************/
 
 	/**
 	 * Add custom template hierarchy to theme compat for the group create page.
 	 *
-	 * This is to mirror how WordPress has {@link https://codex.wordpress.org/Template_Hierarchy template hierarchy}.
+	 * This is to mirror how WordPress has
+	 * {@link https://codex.wordpress.org/Template_Hierarchy template hierarchy}.
 	 *
-	 * @since BuddyPress (1.8)
+	 * @since BuddyPress (1.8.0)
 	 *
-	 * @param string $templates The templates from bp_get_theme_compat_templates()
+	 * @param string $templates The templates from bp_get_theme_compat_templates().
 	 * @return array $templates Array of custom templates to look for.
 	 */
 	public function create_template_hierarchy( $templates ) {
@@ -1113,13 +1151,13 @@ class BP_Groups_Theme_Compat {
 	}
 
 	/**
-	 * Update the global $post with create screen data
+	 * Update the global $post with create screen data.
 	 *
-	 * @since BuddyPress (1.7)
+	 * @since BuddyPress (1.7.0)
 	 */
 	public function create_dummy_post() {
 
-		$title = __( 'Groups', 'buddypress' );
+		$title = _x( 'Groups', 'Group creation page', 'buddypress' );
 
 		bp_theme_compat_reset_post( array(
 			'ID'             => 0,
@@ -1127,7 +1165,7 @@ class BP_Groups_Theme_Compat {
 			'post_author'    => 0,
 			'post_date'      => 0,
 			'post_content'   => '',
-			'post_type'      => 'bp_group',
+			'post_type'      => 'page',
 			'post_status'    => 'publish',
 			'is_page'        => true,
 			'comment_status' => 'closed'
@@ -1135,24 +1173,25 @@ class BP_Groups_Theme_Compat {
 	}
 
 	/**
-	 * Filter the_content with the create screen template part
+	 * Filter the_content with the create screen template part.
 	 *
-	 * @since BuddyPress (1.7)
+	 * @since BuddyPress (1.7.0)
 	 */
 	public function create_content() {
 		return bp_buffer_template_part( 'groups/create', null, false );
 	}
 
-	/** Single ****************************************************************/
+	/** Single ************************************************************/
 
 	/**
 	 * Add custom template hierarchy to theme compat for group pages.
 	 *
-	 * This is to mirror how WordPress has {@link https://codex.wordpress.org/Template_Hierarchy template hierarchy}.
+	 * This is to mirror how WordPress has
+	 * {@link https://codex.wordpress.org/Template_Hierarchy template hierarchy}.
 	 *
-	 * @since BuddyPress (1.8)
+	 * @since BuddyPress (1.8.0)
 	 *
-	 * @param string $templates The templates from bp_get_theme_compat_templates()
+	 * @param string $templates The templates from bp_get_theme_compat_templates().
 	 * @return array $templates Array of custom templates to look for.
 	 */
 	public function single_template_hierarchy( $templates ) {
@@ -1176,9 +1215,9 @@ class BP_Groups_Theme_Compat {
 	}
 
 	/**
-	 * Update the global $post with single group data
+	 * Update the global $post with single group data.
 	 *
-	 * @since BuddyPress (1.7)
+	 * @since BuddyPress (1.7.0)
 	 */
 	public function single_dummy_post() {
 		bp_theme_compat_reset_post( array(
@@ -1187,7 +1226,7 @@ class BP_Groups_Theme_Compat {
 			'post_author'    => 0,
 			'post_date'      => 0,
 			'post_content'   => '',
-			'post_type'      => 'bp_group',
+			'post_type'      => 'page',
 			'post_status'    => 'publish',
 			'is_page'        => true,
 			'comment_status' => 'closed'
@@ -1195,9 +1234,9 @@ class BP_Groups_Theme_Compat {
 	}
 
 	/**
-	 * Filter the_content with the single group template part
+	 * Filter the_content with the single group template part.
 	 *
-	 * @since BuddyPress (1.7)
+	 * @since BuddyPress (1.7.0)
 	 */
 	public function single_content() {
 		return bp_buffer_template_part( 'groups/single/home', null, false );
diff --git a/wp-content/plugins/buddypress/bp-groups/bp-groups-template.php b/wp-content/plugins/buddypress/bp-groups/bp-groups-template.php
index bca272a19..38b9de46b 100644
--- a/wp-content/plugins/buddypress/bp-groups/bp-groups-template.php
+++ b/wp-content/plugins/buddypress/bp-groups/bp-groups-template.php
@@ -1,33 +1,26 @@
 <?php
 
 /**
- * BuddyPress Groups Template Functions
- *
- * @package BuddyPress
- * @subpackage GroupsTemplate
+ * BuddyPress Groups Template Functions.
  */
 
 // Exit if accessed directly
 if ( !defined( 'ABSPATH' ) ) exit;
 
 /**
- * Output the groups component slug
- *
- * @package BuddyPress
- * @subpackage Groups Template
- * @since BuddyPress (1.5)
+ * Output the groups component slug.
  *
- * @uses bp_get_groups_slug()
+ * @since BuddyPress (1.5.0)
  */
 function bp_groups_slug() {
 	echo bp_get_groups_slug();
 }
 	/**
-	 * Return the groups component slug
+	 * Return the groups component slug.
 	 *
-	 * @package BuddyPress
-	 * @subpackage Groups Template
-	 * @since BuddyPress (1.5)
+	 * @since BuddyPress (1.5.0)
+	 *
+	 * @return string
 	 */
 	function bp_get_groups_slug() {
 		return apply_filters( 'bp_get_groups_slug', buddypress()->groups->slug );
@@ -36,11 +29,7 @@ function bp_groups_slug() {
 /**
  * Output the groups component root slug
  *
- * @package BuddyPress
- * @subpackage Groups Template
- * @since BuddyPress (1.5)
- *
- * @uses bp_get_groups_root_slug()
+ * @since BuddyPress (1.5.0)
  */
 function bp_groups_root_slug() {
 	echo bp_get_groups_root_slug();
@@ -48,9 +37,9 @@ function bp_groups_root_slug() {
 	/**
 	 * Return the groups component root slug
 	 *
-	 * @package BuddyPress
-	 * @subpackage Groups Template
-	 * @since BuddyPress (1.5)
+	 * @since BuddyPress (1.5.0)
+	 *
+	 * @return string
 	 */
 	function bp_get_groups_root_slug() {
 		return apply_filters( 'bp_get_groups_root_slug', buddypress()->groups->root_slug );
@@ -59,10 +48,7 @@ function bp_groups_root_slug() {
 /**
  * Output group directory permalink
  *
- * @package BuddyPress
- * @subpackage Groups Template
- * @since BuddyPress (1.5)
- * @uses bp_get_groups_directory_permalink()
+ * @since BuddyPress (1.5.0)
  */
 function bp_groups_directory_permalink() {
 	echo bp_get_groups_directory_permalink();
@@ -70,41 +56,130 @@ function bp_groups_directory_permalink() {
 	/**
 	 * Return group directory permalink
 	 *
-	 * @package BuddyPress
-	 * @subpackage Groups Template
-	 * @since BuddyPress (1.5)
-	 * @uses apply_filters()
-	 * @uses traisingslashit()
-	 * @uses bp_get_root_domain()
-	 * @uses bp_get_groups_root_slug()
+	 * @since BuddyPress (1.5.0)
+	 *
 	 * @return string
 	 */
 	function bp_get_groups_directory_permalink() {
 		return apply_filters( 'bp_get_groups_directory_permalink', trailingslashit( bp_get_root_domain() . '/' . bp_get_groups_root_slug() ) );
 	}
 
-/*****************************************************************************
- * Groups Template Class/Tags
- **/
-
+/**
+ * The main Groups template loop class.
+ *
+ * Responsible for loading a group of groups into a loop for display.
+ */
 class BP_Groups_Template {
+
+	/**
+	 * The loop iterator.
+	 *
+	 * @access public
+	 * @var int
+	 */
 	var $current_group = -1;
+
+	/**
+	 * The number of groups returned by the paged query.
+	 *
+	 * @access public
+	 * @var int
+	 */
 	var $group_count;
+
+	/**
+	 * Array of groups located by the query.
+	 *
+	 * @access public
+	 * @var array
+	 */
 	var $groups;
+
+	/**
+	 * The group object currently being iterated on.
+	 *
+	 * @access public
+	 * @var object
+	 */
 	var $group;
 
+	/**
+	 * A flag for whether the loop is currently being iterated.
+	 *
+	 * @access public
+	 * @var bool
+	 */
 	var $in_the_loop;
 
+	/**
+	 * The page number being requested.
+	 *
+	 * @access public
+	 * @var public
+	 */
 	var $pag_page;
+
+	/**
+	 * The number of items being requested per page.
+	 *
+	 * @access public
+	 * @var public
+	 */
 	var $pag_num;
+
+	/**
+	 * An HTML string containing pagination links.
+	 *
+	 * @access public
+	 * @var string
+	 */
 	var $pag_links;
+
+	/**
+	 * The total number of groups matching the query parameters.
+	 *
+	 * @access public
+	 * @var int
+	 */
 	var $total_group_count;
 
+	/**
+	 * Whether the template loop is for a single group page.
+	 *
+	 * @access public
+	 * @var bool
+	 */
 	var $single_group = false;
 
+	/**
+	 * Field to sort by.
+	 *
+	 * @access public
+	 * @var string
+	 */
 	var $sort_by;
+
+	/**
+	 * Sort order.
+	 *
+	 * @access public
+	 * @var string
+	 */
 	var $order;
 
+	/**
+	 * Constructor method.
+	 *
+	 * @see BP_Groups_Group::get() for an in-depth description of arguments.
+	 *
+	 * @param array $args {
+	 *     Array of arguments. Accepts all arguments accepted by
+	 *     {@link BP_Groups_Group::get()}. In cases where the default
+	 *     values of the params differ, they have been discussed below.
+	 *     @type int $per_page Default: 20.
+	 *     @type int $page Default: 1.
+	 * }
+	 */
 	function __construct( $args = array() ){
 
 		// Backward compatibility with old method of passing arguments
@@ -234,8 +309,25 @@ class BP_Groups_Template {
 
 		// Build pagination links
 		if ( (int) $this->total_group_count && (int) $this->pag_num ) {
+			$pag_args = array(
+				$page_arg => '%#%',
+				'num'     => $this->pag_num,
+				'sortby'  => $this->sort_by,
+				'order'   => $this->order,
+			);
+
+			if ( defined( 'DOING_AJAX' ) && true === (bool) DOING_AJAX ) {
+				$base = remove_query_arg( 's', wp_get_referer() );
+			} else {
+				$base = '';
+			}
+
+			if ( ! empty( $search_terms ) ) {
+				$pag_args['s'] = $search_terms;
+			}
+
 			$this->pag_links = paginate_links( array(
-				'base'      => add_query_arg( array( $page_arg => '%#%', 'num' => $this->pag_num, 's' => $search_terms, 'sortby' => $this->sort_by, 'order' => $this->order ) ),
+				'base'      => add_query_arg( $pag_args, $base ),
 				'format'    => '',
 				'total'     => ceil( (int) $this->total_group_count / (int) $this->pag_num ),
 				'current'   => $this->pag_page,
@@ -246,6 +338,13 @@ class BP_Groups_Template {
 		}
 	}
 
+	/**
+	 * Whether there are groups available in the loop.
+	 *
+	 * @see bp_has_groups()
+	 *
+	 * @return bool True if there are items in the loop, otherwise false.
+	 */
 	function has_groups() {
 		if ( $this->group_count )
 			return true;
@@ -253,6 +352,11 @@ class BP_Groups_Template {
 		return false;
 	}
 
+	/**
+	 * Set up the next group and iterate index.
+	 *
+	 * @return object The next group to iterate over.
+	 */
 	function next_group() {
 		$this->current_group++;
 		$this->group = $this->groups[$this->current_group];
@@ -260,6 +364,9 @@ class BP_Groups_Template {
 		return $this->group;
 	}
 
+	/**
+	 * Rewind the groups and reset member index.
+	 */
 	function rewind_groups() {
 		$this->current_group = -1;
 		if ( $this->group_count > 0 ) {
@@ -267,6 +374,17 @@ class BP_Groups_Template {
 		}
 	}
 
+	/**
+	 * Whether there are groups left in the loop to iterate over.
+	 *
+	 * This method is used by {@link bp_groups()} as part of the while loop
+	 * that controls iteration inside the groups loop, eg:
+	 *     while ( bp_groups() ) { ...
+	 *
+	 * @see bp_groups()
+	 *
+	 * @return bool True if there are more groups to show, otherwise false.
+	 */
 	function groups() {
 		if ( $this->current_group + 1 < $this->group_count ) {
 			return true;
@@ -280,6 +398,15 @@ class BP_Groups_Template {
 		return false;
 	}
 
+	/**
+	 * Set up the current group inside the loop.
+	 *
+	 * Used by {@link bp_the_group()} to set up the current group data
+	 * while looping, so that template tags used during that iteration make
+	 * reference to the current member.
+	 *
+	 * @see bp_the_group()
+	 */
 	function the_group() {
 		$this->in_the_loop = true;
 		$this->group       = $this->next_group();
@@ -290,81 +417,104 @@ class BP_Groups_Template {
 }
 
 /**
- * Start the Groups Template Loop
- *
- * See the $defaults definition below for a description of parameters.
+ * Start the Groups Template Loop.
  *
- * Note that the 'type' parameter overrides 'order' and 'orderby'. See
- * BP_Groups_Group::get() for more details.
+ * @since BuddyPress (1.0.0)
  *
- * @param array $args
+ * @param array $args {
+ *     Array of parameters. All items are optional.
+ *     @type string $type Optional. Shorthand for certain orderby/
+ *           order combinations. 'newest', 'active', 'popular',
+ *           'alphabetical', 'random'. When present, will override
+ *           orderby and order params. Default: null.
+ *     @type string $orderby Optional. Property to sort by.
+ *           'date_created', 'last_activity', 'total_member_count',
+ *           'name', 'random'. Default: 'date_created'.
+ *     @type string $order Optional. Sort order. 'ASC' or 'DESC'.
+ *           Default: 'DESC'.
+ *     @type int $per_page Optional. Number of items to return per page
+ *           of results. Default: null (no limit).
+ *     @type int $page Optional. Page offset of results to return.
+ *           Default: null (no limit).
+ *     @type int $user_id Optional. If provided, results will be limited
+ *           to groups of which the specified user is a member. Default:
+ *           null.
+ *     @type string $search_terms Optional. If provided, only groups
+ *           whose names or descriptions match the search terms will be
+ *           returned. Default: false.
+ *     @type array $meta_query Optional. An array of meta_query
+ *           conditions. See {@link WP_Meta_Query::queries} for
+ *           description.
+ *     @type array|string Optional. Array or comma-separated list of
+ *           group IDs. Results will be limited to groups within the
+ *           list. Default: false.
+ *     @type bool $populate_extras Whether to fetch additional
+ *           information (such as member count) about groups. Default:
+ *           true.
+ *     @type array|string Optional. Array or comma-separated list of
+ *           group IDs. Results will exclude the listed groups.
+ *           Default: false.
+ *     @type bool $show_hidden Whether to include hidden groups in
+ *           results. Default: false.
+ * }
  * @return bool True if there are groups to display that match the params
  */
 function bp_has_groups( $args = '' ) {
-	global $groups_template, $bp;
+	global $groups_template;
 
 	/***
-	 * Set the defaults based on the current page. Any of these will be overridden
-	 * if arguments are directly passed into the loop. Custom plugins should always
-	 * pass their parameters directly to the loop.
+	 * Defaults based on the current page & overridden by parsed $args
 	 */
-	$slug    = false;
-	$type    = '';
-	$user_id = 0;
-	$order   = '';
-
-	// User filtering
-	if ( bp_displayed_user_id() )
-		$user_id = bp_displayed_user_id();
+	$slug         = false;
+	$type         = '';
+	$search_terms = false;
 
-	// Type
-	// @todo What is $order? At some point it was removed incompletely?
+	// When looking your own groups, check for two action variables
 	if ( bp_is_current_action( 'my-groups' ) ) {
-		if ( 'most-popular' == $order ) {
+		if ( bp_is_action_variable( 'most-popular', 0 ) ) {
 			$type = 'popular';
-		} elseif ( 'alphabetically' == $order ) {
+		} elseif ( bp_is_action_variable( 'alphabetically', 0 ) ) {
 			$type = 'alphabetical';
 		}
+
+	// When looking at invites, set type to invites
 	} elseif ( bp_is_current_action( 'invites' ) ) {
 		$type = 'invites';
-	} elseif ( isset( $bp->groups->current_group->slug ) && $bp->groups->current_group->slug ) {
+
+	// When looking at a single group, set the type and slug
+	} elseif ( bp_get_current_group_slug() ) {
 		$type = 'single-group';
-		$slug = $bp->groups->current_group->slug;
+		$slug = bp_get_current_group_slug();
 	}
 
-	// Default search string
+	// Default search string (too soon to escape here)
 	if ( ! empty( $_REQUEST['group-filter-box'] ) ) {
 		$search_terms = $_REQUEST['group-filter-box'];
-	} elseif ( isset( $_REQUEST['s'] ) && !empty( $_REQUEST['s'] ) ) {
+	} elseif ( !empty( $_REQUEST['s'] ) ) {
 		$search_terms = $_REQUEST['s'];
-	} else {
-		$search_terms = false;
 	}
 
-	$defaults = array(
-		'type'              => $type, // 'type' is an override for 'order' and 'orderby'. See docblock.
+	// Parse defaults and requested arguments
+	$r = bp_parse_args( $args, array(
+		'type'              => $type,
 		'order'             => 'DESC',
 		'orderby'           => 'last_activity',
 		'page'              => 1,
 		'per_page'          => 20,
 		'max'               => false,
 		'show_hidden'       => false,
-
-		'page_arg'          => 'grpage', // See https://buddypress.trac.wordpress.org/ticket/3679
-
-		'user_id'           => $user_id, // Pass a user ID to limit to groups this user has joined
-		'slug'              => $slug,    // Pass a group slug to only return that group
-		'search_terms'      => $search_terms, // Pass search terms to return only matching groups
-		'meta_query'        => false,    // Filter by groupmeta. See WP_Meta_Query for format
-		'include'           => false,    // Pass comma separated list or array of group ID's to return only these groups
-		'exclude'           => false,    // Pass comma separated list or array of group ID's to exclude these groups
-
-		'populate_extras'   => true,     // Get extra meta - is_member, is_banned
+		'page_arg'          => 'grpage',
+		'user_id'           => bp_displayed_user_id(),
+		'slug'              => $slug,
+		'search_terms'      => $search_terms,
+		'meta_query'        => false,
+		'include'           => false,
+		'exclude'           => false,
+		'populate_extras'   => true,
 		'update_meta_cache' => true,
-	);
-
-	$r = bp_parse_args( $args, $defaults, 'has_groups' );
+	), 'has_groups' );
 
+	// Setup the Groups template global
 	$groups_template = new BP_Groups_Template( array(
 		'type'              => $r['type'],
 		'order'             => $r['order'],
@@ -384,19 +534,36 @@ function bp_has_groups( $args = '' ) {
 		'update_meta_cache' => (bool) $r['update_meta_cache'],
 	) );
 
+	// Filter and return whether or not the groups loop has groups in it
 	return apply_filters( 'bp_has_groups', $groups_template->has_groups(), $groups_template, $r );
 }
 
+/**
+ * Check whether there are more groups to iterate over.
+ *
+ * @return bool
+ */
 function bp_groups() {
 	global $groups_template;
 	return $groups_template->groups();
 }
 
+/**
+ * Set up the current group inside the loop.
+ *
+ * @return object
+ */
 function bp_the_group() {
 	global $groups_template;
 	return $groups_template->the_group();
 }
 
+/**
+ * Is the group visible to the currently logged-in user?
+ *
+ * @param object $group Optional. Group object. Default: current group in loop.
+ * @return bool
+ */
 function bp_group_is_visible( $group = false ) {
 	global $groups_template;
 
@@ -417,9 +584,21 @@ function bp_group_is_visible( $group = false ) {
 	return false;
 }
 
+/**
+ * Output the ID of the current group in the loop.
+ *
+ * @param object $group Optional. Group object. Default: current group in loop.
+ */
 function bp_group_id( $group = false ) {
 	echo bp_get_group_id( $group );
 }
+	/**
+	 * Get the ID of the current group in the loop.
+	 *
+	 * @param object $group Optional. Group object. Default: current
+	 *        group in loop.
+	 * @return int
+	 */
 	function bp_get_group_id( $group = false ) {
 		global $groups_template;
 
@@ -430,19 +609,19 @@ function bp_group_id( $group = false ) {
 	}
 
 /**
- * Output the row class of a group
+ * Output the row class of the current group in the loop.
  *
- * @since BuddyPress (1.7)
+ * @since BuddyPress (1.7.0)
  */
 function bp_group_class() {
 	echo bp_get_group_class();
 }
 	/**
-	 * Return the row class of a group
+	 * Get the row class of the current group in the loop.
+	 *
+	 * @since BuddyPress (1.7.0)
 	 *
-	 * @global BP_Groups_Template $groups_template
-	 * @return string Row class of the group
-	 * @since BuddyPress (1.7)
+	 * @return string Row class of the group.
 	 */
 	function bp_get_group_class() {
 		global $groups_template;
@@ -478,9 +657,22 @@ function bp_group_class() {
 		return $retval;
 	}
 
+/**
+ * Output the name of the current group in the loop.
+ *
+ * @param object $group Optional. Group object. Default: current
+ *        group in loop.
+ */
 function bp_group_name( $group = false ) {
 	echo bp_get_group_name( $group );
 }
+	/**
+	 * Get the name of the current group in the loop.
+	 *
+	 * @param object $group Optional. Group object. Default: current
+	 *        group in loop.
+	 * @return string
+	 */
 	function bp_get_group_name( $group = false ) {
 		global $groups_template;
 
@@ -490,9 +682,22 @@ function bp_group_name( $group = false ) {
 		return apply_filters( 'bp_get_group_name', $group->name );
 	}
 
+/**
+ * Output the type of the current group in the loop.
+ *
+ * @param object $group Optional. Group object. Default: current
+ *        group in loop.
+ */
 function bp_group_type( $group = false ) {
 	echo bp_get_group_type( $group );
 }
+	/**
+	 * Get the type of the current group in the loop.
+	 *
+	 * @param object $group Optional. Group object. Default: current
+	 *        group in loop.
+	 * @return string
+	 */
 	function bp_get_group_type( $group = false ) {
 		global $groups_template;
 
@@ -512,9 +717,22 @@ function bp_group_type( $group = false ) {
 		return apply_filters( 'bp_get_group_type', $type );
 	}
 
+/**
+ * Output the status of the current group in the loop.
+ *
+ * @param object $group Optional. Group object. Default: current
+ *        group in loop.
+ */
 function bp_group_status( $group = false ) {
 	echo bp_get_group_status( $group );
 }
+	/**
+	 * Get the status of the current group in the loop.
+	 *
+	 * @param object $group Optional. Group object. Default: current
+	 *        group in loop.
+	 * @return string
+	 */
 	function bp_get_group_status( $group = false ) {
 		global $groups_template;
 
@@ -524,48 +742,144 @@ function bp_group_status( $group = false ) {
 		return apply_filters( 'bp_get_group_status', $group->status );
 	}
 
+/**
+ * Output the group avatar while in the groups loop.
+ *
+ * @since BuddyPress (1.0.0)
+ *
+ * @param array $args {
+ *      See {@link bp_get_group_avatar()} for description of arguments.
+ * }
+ */
 function bp_group_avatar( $args = '' ) {
 	echo bp_get_group_avatar( $args );
 }
+	/**
+	 * Return the group avatar while in the groups loop.
+	 *
+	 * @since BuddyPress (1.0.0)
+	 *
+	 * @param array $args {
+	 *     Array of arguments. See {@link bp_core_fetch_avatar()} for
+	 *     detailed description. Default values that differ from that
+	 *     function are described below.
+	 *     @type string $type Default: 'full'.
+	 *     @type string $id Passed to $css_id parameter.
+	 * }
+	 * @return string
+	 */
 	function bp_get_group_avatar( $args = '' ) {
-		global $bp, $groups_template;
+		global $groups_template;
 
-		$defaults = array(
+		// Bail if avatars are turned off
+		// @todo Should we maybe still filter this?
+		if ( ! buddypress()->avatar->show_avatars ) {
+			return false;
+		}
+
+		// Parse the arguments
+		$r = bp_parse_args( $args, array(
 			'type'   => 'full',
 			'width'  => false,
 			'height' => false,
 			'class'  => 'avatar',
 			'id'     => false,
 			'alt'    => sprintf( __( 'Group logo of %s', 'buddypress' ), $groups_template->group->name )
-		);
+		) );
 
-		$r = wp_parse_args( $args, $defaults );
-		extract( $r, EXTR_SKIP );
+		// Fetch the avatar from the folder
+		$avatar = bp_core_fetch_avatar( array(
+			'item_id'    => $groups_template->group->id,
+			'title'      => $groups_template->group->name,
+			'avatar_dir' => 'group-avatars',
+			'object'     => 'group',
+			'type'       => $r['type'],
+			'alt'        => $r['alt'],
+			'css_id'     => $r['id'],
+			'class'      => $r['class'],
+			'width'      => $r['width'],
+			'height'     => $r['height']
+		) );
 
-		/* Fetch the avatar from the folder, if not provide backwards compat. */
-		if ( !$avatar = bp_core_fetch_avatar( array( 'item_id' => $groups_template->group->id, 'object' => 'group', 'type' => $type, 'avatar_dir' => 'group-avatars', 'alt' => $alt, 'css_id' => $id, 'class' => $class, 'width' => $width, 'height' => $height, 'title' => $groups_template->group->name, 'alt' => $alt ) ) )
+		// If No avatar found, provide some backwards compatibility
+		if ( empty( $avatar ) ) {
 			$avatar = '<img src="' . esc_url( $groups_template->group->avatar_thumb ) . '" class="avatar" alt="' . esc_attr( $groups_template->group->name ) . '" />';
+		}
 
-		return apply_filters( 'bp_get_group_avatar', $avatar );
+		return apply_filters( 'bp_get_group_avatar', $avatar, $r );
 	}
 
+/**
+ * Output the group avatar thumbnail while in the groups loop.
+ *
+ * @since BuddyPress (1.0.0)
+ *
+ * @param object $group Optional. Group object. Default: current
+ *        group in loop.
+ */
 function bp_group_avatar_thumb( $group = false ) {
 	echo bp_get_group_avatar_thumb( $group );
 }
+	/**
+	 * Return the group avatar thumbnail while in the groups loop.
+	 *
+	 * @since BuddyPress (1.0.0)
+	 *
+	 * @param object $group Optional. Group object. Default: current
+	 *        group in loop.
+	 * @return string
+	 */
 	function bp_get_group_avatar_thumb( $group = false ) {
-		return bp_get_group_avatar( 'type=thumb' );
+		return bp_get_group_avatar( array(
+			'type' => 'thumb',
+			'id'   => ! empty( $group->id ) ? $group->id : false
+		) );
 	}
 
+/**
+ * Output the miniature group avatar thumbnail while in the groups loop.
+ *
+ * @since BuddyPress (1.0.0)
+ *
+ * @param object $group Optional. Group object. Default: current
+ *        group in loop.
+ */
 function bp_group_avatar_mini( $group = false ) {
 	echo bp_get_group_avatar_mini( $group );
 }
+	/**
+	 * Return the miniature group avatar thumbnail while in the groups loop.
+	 *
+	 * @since BuddyPress (1.0.0)
+	 *
+	 * @param object $group Optional. Group object. Default: current
+	 *        group in loop.
+	 */
 	function bp_get_group_avatar_mini( $group = false ) {
-		return bp_get_group_avatar( 'type=thumb&width=30&height=30' );
+		return bp_get_group_avatar( array(
+			'type'   => 'thumb',
+			'width'  => 30,
+			'height' => 30,
+			'id'     => ! empty( $group->id ) ? $group->id : false
+		) );
 	}
 
+/**
+ * Output the 'last active' string for the current group in the loop.
+ *
+ * @param object $group Optional. Group object. Default: current
+ *        group in loop.
+ */
 function bp_group_last_active( $group = false ) {
 	echo bp_get_group_last_active( $group );
 }
+	/**
+	 * Return the 'last active' string for the current group in the loop.
+	 *
+	 * @param object $group Optional. Group object. Default: current
+	 *        group in loop.
+	 * @return string
+	 */
 	function bp_get_group_last_active( $group = false ) {
 		global $groups_template;
 
@@ -584,9 +898,22 @@ function bp_group_last_active( $group = false ) {
 		}
 	}
 
+/**
+ * Output the permalink for the current group in the loop.
+ *
+ * @param object $group Optional. Group object. Default: current
+ *        group in loop.
+ */
 function bp_group_permalink( $group = false ) {
 	echo bp_get_group_permalink( $group );
 }
+	/**
+	 * Return the permalink for the current group in the loop.
+	 *
+	 * @param object $group Optional. Group object. Default: current
+	 *        group in loop.
+	 * @return string
+	 */
 	function bp_get_group_permalink( $group = false ) {
 		global $groups_template;
 
@@ -596,9 +923,22 @@ function bp_group_permalink( $group = false ) {
 		return apply_filters( 'bp_get_group_permalink', trailingslashit( bp_get_root_domain() . '/' . bp_get_groups_root_slug() . '/' . $group->slug . '/' ) );
 	}
 
+/**
+ * Output the permalink for the admin section of the current group in the loop.
+ *
+ * @param object $group Optional. Group object. Default: current
+ *        group in loop.
+ */
 function bp_group_admin_permalink( $group = false ) {
 	echo bp_get_group_admin_permalink( $group );
 }
+	/**
+	 * Return the permalink for the admin section of the current group in the loop.
+	 *
+	 * @param object $group Optional. Group object. Default: current
+	 *        group in loop.
+	 * @return string
+	 */
 	function bp_get_group_admin_permalink( $group = false ) {
 		global $groups_template;
 
@@ -608,9 +948,22 @@ function bp_group_admin_permalink( $group = false ) {
 		return apply_filters( 'bp_get_group_admin_permalink', trailingslashit( bp_get_group_permalink( $group ) . 'admin' ) );
 	}
 
+/**
+ * Return the slug for the current group in the loop.
+ *
+ * @param object $group Optional. Group object. Default: current
+ *        group in loop.
+ */
 function bp_group_slug( $group = false ) {
 	echo bp_get_group_slug( $group );
 }
+	/**
+	 * Return the slug for the current group in the loop.
+	 *
+	 * @param object $group Optional. Group object. Default: current
+	 *        group in loop.
+	 * @return string
+	 */
 	function bp_get_group_slug( $group = false ) {
 		global $groups_template;
 
@@ -620,9 +973,22 @@ function bp_group_slug( $group = false ) {
 		return apply_filters( 'bp_get_group_slug', $group->slug );
 	}
 
+/**
+ * Output the description for the current group in the loop.
+ *
+ * @param object $group Optional. Group object. Default: current
+ *        group in loop.
+ */
 function bp_group_description( $group = false ) {
 	echo bp_get_group_description( $group );
 }
+	/**
+	 * Return the description for the current group in the loop.
+	 *
+	 * @param object $group Optional. Group object. Default: current
+	 *        group in loop.
+	 * @return string
+	 */
 	function bp_get_group_description( $group = false ) {
 		global $groups_template;
 
@@ -632,9 +998,26 @@ function bp_group_description( $group = false ) {
 		return apply_filters( 'bp_get_group_description', stripslashes($group->description) );
 	}
 
+/**
+ * Output the description for the current group in the loop, for use in a textarea.
+ *
+ * @param object $group Optional. Group object. Default: current
+ *        group in loop.
+ */
 function bp_group_description_editable( $group = false ) {
 	echo bp_get_group_description_editable( $group );
 }
+	/**
+	 * Return the permalink for the current group in the loop, for use in a textarea.
+	 *
+	 * 'bp_get_group_description_editable' does not have the formatting
+	 * filters that 'bp_get_group_description' has, which makes it
+	 * appropriate for "raw" editing.
+	 *
+	 * @param object $group Optional. Group object. Default: current
+	 *        group in loop.
+	 * @return string
+	 */
 	function bp_get_group_description_editable( $group = false ) {
 		global $groups_template;
 
@@ -670,10 +1053,26 @@ function bp_group_description_excerpt( $group = false ) {
 		return apply_filters( 'bp_get_group_description_excerpt', bp_create_excerpt( $group->description ), $group );
 	}
 
-
+/**
+ * Output the status of the current group in the loop.
+ *
+ * Either 'Public' or 'Private'.
+ *
+ * @param object $group Optional. Group object. Default: current
+ *        group in loop.
+ */
 function bp_group_public_status( $group = false ) {
 	echo bp_get_group_public_status( $group );
 }
+	/**
+	 * Return the status of the current group in the loop.
+	 *
+	 * Either 'Public' or 'Private'.
+	 *
+	 * @param object $group Optional. Group object. Default: current
+	 *        group in loop.
+	 * @return string
+	 */
 	function bp_get_group_public_status( $group = false ) {
 		global $groups_template;
 
@@ -687,9 +1086,26 @@ function bp_group_public_status( $group = false ) {
 		}
 	}
 
+/**
+ * Output whether the current group in the loop is public.
+ *
+ * No longer used in BuddyPress.
+ *
+ * @param object $group Optional. Group object. Default: current
+ *        group in loop.
+ */
 function bp_group_is_public( $group = false ) {
 	echo bp_get_group_is_public( $group );
 }
+	/**
+	 * Return whether the current group in the loop is public.
+	 *
+	 * No longer used in BuddyPress.
+	 *
+	 * @param object $group Optional. Group object. Default: current
+	 *        group in loop.
+	 * @return unknown
+	 */
 	function bp_get_group_is_public( $group = false ) {
 		global $groups_template;
 
@@ -699,9 +1115,22 @@ function bp_group_is_public( $group = false ) {
 		return apply_filters( 'bp_get_group_is_public', $group->is_public );
 	}
 
+/**
+ * Output the created date of the current group in the loop.
+ *
+ * @param object $group Optional. Group object. Default: current
+ *        group in loop.
+ */
 function bp_group_date_created( $group = false ) {
 	echo bp_get_group_date_created( $group );
 }
+	/**
+	 * Return the created date of the current group in the loop.
+	 *
+	 * @param object $group Optional. Group object. Default: current
+	 *        group in loop.
+	 * @return string
+	 */
 	function bp_get_group_date_created( $group = false ) {
 		global $groups_template;
 
@@ -711,9 +1140,22 @@ function bp_group_date_created( $group = false ) {
 		return apply_filters( 'bp_get_group_date_created', bp_core_time_since( strtotime( $group->date_created ) ) );
 	}
 
+/**
+ * Output the username of the creator of the current group in the loop.
+ *
+ * @param object $group Optional. Group object. Default: current
+ *        group in loop.
+ */
 function bp_group_creator_username( $group = false ) {
 	echo bp_get_group_creator_username( $group );
 }
+	/**
+	 * Return the username of the creator of the current group in the loop.
+	 *
+	 * @param object $group Optional. Group object. Default: current
+	 *        group in loop.
+	 * @return string
+	 */
 	function bp_get_group_creator_username( $group = false ) {
 		global $groups_template;
 
@@ -723,9 +1165,22 @@ function bp_group_creator_username( $group = false ) {
 		return apply_filters( 'bp_get_group_creator_username', bp_core_get_user_displayname( $group->creator_id ) );
 	}
 
+/**
+ * Output the user ID of the creator of the current group in the loop.
+ *
+ * @param object $group Optional. Group object. Default: current
+ *        group in loop.
+ */
 function bp_group_creator_id( $group = false ) {
 	echo bp_get_group_creator_id( $group );
 }
+	/**
+	 * Return the user ID of the creator of the current group in the loop.
+	 *
+	 * @param object $group Optional. Group object. Default: current
+	 *        group in loop.
+	 * @return int
+	 */
 	function bp_get_group_creator_id( $group = false ) {
 		global $groups_template;
 
@@ -735,9 +1190,22 @@ function bp_group_creator_id( $group = false ) {
 		return apply_filters( 'bp_get_group_creator_id', $group->creator_id );
 	}
 
+/**
+ * Output the permalink of the creator of the current group in the loop.
+ *
+ * @param object $group Optional. Group object. Default: current
+ *        group in loop.
+ */
 function bp_group_creator_permalink( $group = false ) {
 	echo bp_get_group_creator_permalink( $group );
 }
+	/**
+	 * Return the permalink of the creator of the current group in the loop.
+	 *
+	 * @param object $group Optional. Group object. Default: current
+	 *        group in loop.
+	 * @return string
+	 */
 	function bp_get_group_creator_permalink( $group = false ) {
 		global $groups_template;
 
@@ -747,6 +1215,14 @@ function bp_group_creator_permalink( $group = false ) {
 		return apply_filters( 'bp_get_group_creator_permalink', bp_core_get_user_domain( $group->creator_id ) );
 	}
 
+/**
+ * Determine whether a user is the creator of the current group in the loop.
+ *
+ * @param object $group Optional. Group object. Default: current
+ *        group in loop.
+ * @param int $user_id ID of the user.
+ * @return bool
+ */
 function bp_is_group_creator( $group = false, $user_id = 0 ) {
 	global $groups_template;
 
@@ -759,9 +1235,37 @@ function bp_is_group_creator( $group = false, $user_id = 0 ) {
 	return (bool) ( $group->creator_id == $user_id );
 }
 
+/**
+ * Output the avatar of the creator of the current group in the loop.
+ *
+ * @param object $group Optional. Group object. Default: current
+ *        group in loop.
+ * @param array $args {
+ *     Array of optional arguments. See {@link bp_get_group_creator_avatar()}
+ *     for description.
+ * }
+ */
 function bp_group_creator_avatar( $group = false, $args = array() ) {
 	echo bp_get_group_creator_avatar( $group, $args );
 }
+	/**
+	 * Return the avatar of the creator of the current group in the loop.
+	 *
+	 * @param object $group Optional. Group object. Default: current
+	 *        group in loop.
+	 * @param array $args {
+	 *     Array of optional arguments. See {@link bp_core_fetch_avatar()}
+	 *     for detailed description of arguments.
+	 *     @type string $type Default: 'full'.
+	 *     @type int $width Default: false.
+	 *     @type int $height Default: false.
+	 *     @type int $class Default: 'avatar'.
+	 *     @type string $id Passed to 'css_id'. Default: false.
+	 *     @type string $alt Alt text. Default: 'Group creator profile
+	 *           photo of [user display name]'.
+	 * }
+	 * @return string
+	 */
 	function bp_get_group_creator_avatar( $group = false, $args = array() ) {
 		global $groups_template;
 
@@ -774,7 +1278,7 @@ function bp_group_creator_avatar( $group = false, $args = array() ) {
 			'height' => false,
 			'class'  => 'avatar',
 			'id'     => false,
-			'alt'    => sprintf( __( 'Group creator avatar of %s', 'buddypress' ),  bp_core_get_user_displayname( $group->creator_id ) )
+			'alt'    => sprintf( __( 'Group creator profile photo of %s', 'buddypress' ),  bp_core_get_user_displayname( $group->creator_id ) )
 		);
 
 		$r = wp_parse_args( $args, $defaults );
@@ -785,15 +1289,34 @@ function bp_group_creator_avatar( $group = false, $args = array() ) {
 		return apply_filters( 'bp_get_group_creator_avatar', $avatar );
 	}
 
-
+/**
+ * Determine whether the current user is the admin of the current group.
+ *
+ * Alias of {@link bp_is_item_admin()}.
+ *
+ * @return bool
+ */
 function bp_group_is_admin() {
 	return bp_is_item_admin();
 }
 
+/**
+ * Determine whether the current user is a mod of the current group.
+ *
+ * Alias of {@link bp_is_item_mod()}.
+ *
+ * @return bool
+ */
 function bp_group_is_mod() {
 	return bp_is_item_mod();
 }
 
+/**
+ * Output markup listing group admins.
+ *
+ * @param object $group Optional. Group object. Default: current
+ *        group in loop.
+ */
 function bp_group_list_admins( $group = false ) {
 	global $groups_template;
 
@@ -828,6 +1351,12 @@ function bp_group_list_admins( $group = false ) {
 <?php
 }
 
+/**
+ * Output markup listing group mod.
+ *
+ * @param object $group Optional. Group object. Default: current
+ *        group in loop.
+ */
 function bp_group_list_mods( $group = false ) {
 	global $groups_template;
 
@@ -871,14 +1400,15 @@ function bp_group_list_mods( $group = false ) {
 }
 
 /**
- * Return a list of user_ids for a group's admins
+ * Return a list of user IDs for a group's admins.
  *
- * @package BuddyPress
- * @since BuddyPress (1.5)
+ * @since BuddyPress (1.5.0)
  *
- * @param BP_Groups_Group $group (optional) The group being queried. Defaults to the current group in the loop
- * @param string $format 'string' to get a comma-separated string, 'array' to get an array
- * @return mixed $admin_ids A string or array of user_ids
+ * @param BP_Groups_Group $group Optional. The group being queried. Defaults
+ *        to the current group in the loop.
+ * @param string $format Optional. 'string' to get a comma-separated string,
+ *        'array' to get an array.
+ * @return mixed $admin_ids A string or array of user IDs.
  */
 function bp_group_admin_ids( $group = false, $format = 'string' ) {
 	global $groups_template;
@@ -901,14 +1431,15 @@ function bp_group_admin_ids( $group = false, $format = 'string' ) {
 }
 
 /**
- * Return a list of user_ids for a group's moderators
+ * Return a list of user IDs for a group's moderators.
  *
- * @package BuddyPress
- * @since BuddyPress (1.5)
+ * @since BuddyPress (1.5.0)
  *
- * @param BP_Groups_Group $group (optional) The group being queried. Defaults to the current group in the loop
- * @param string $format 'string' to get a comma-separated string, 'array' to get an array
- * @return mixed $mod_ids A string or array of user_ids
+ * @param BP_Groups_Group $group Optional. The group being queried. Defaults
+ *        to the current group in the loop.
+ * @param string $format Optional. 'string' to get a comma-separated string,
+ *        'array' to get an array.
+ * @return mixed $mod_ids A string or array of user IDs.
  */
 function bp_group_mod_ids( $group = false, $format = 'string' ) {
 	global $groups_template;
@@ -930,9 +1461,19 @@ function bp_group_mod_ids( $group = false, $format = 'string' ) {
 	return apply_filters( 'bp_group_mod_ids', $mod_ids );
 }
 
+/**
+ * Output the permalink of the current group's Members page.
+ */
 function bp_group_all_members_permalink() {
 	echo bp_get_group_all_members_permalink();
 }
+	/**
+	 * Return the permalink of the Members page of the current group in the loop.
+	 *
+	 * @param object $group Optional. Group object. Default: current
+	 *        group in loop.
+	 * @return string
+	 */
 	function bp_get_group_all_members_permalink( $group = false ) {
 		global $groups_template;
 
@@ -942,6 +1483,13 @@ function bp_group_all_members_permalink() {
 		return apply_filters( 'bp_get_group_all_members_permalink', bp_get_group_permalink( $group ) . 'members' );
 	}
 
+/**
+ * Display a Groups search form.
+ *
+ * No longer used in BuddyPress.
+ *
+ * @todo Deprecate
+ */
 function bp_group_search_form() {
 	global $bp;
 
@@ -994,7 +1542,7 @@ function bp_groups_pagination_count() {
 		$to_num    = bp_core_number_format( ( $start_num + ( $groups_template->pag_num - 1 ) > $groups_template->total_group_count ) ? $groups_template->total_group_count : $start_num + ( $groups_template->pag_num - 1 ) );
 		$total     = bp_core_number_format( $groups_template->total_group_count );
 
-		return apply_filters( 'bp_get_groups_pagination_count', sprintf( _n( 'Viewing group %1$s to %2$s (of %3$s group)', 'Viewing group %1$s to %2$s (of %3$s groups)', $total, 'buddypress' ), $from_num, $to_num, $total ), $from_num, $to_num, $total );
+		return apply_filters( 'bp_get_groups_pagination_count', sprintf( _n( 'Viewing 1', 'Viewing %1$s - %2$s of %3$s groups', $total, 'buddypress' ), $from_num, $to_num, $total ), $from_num, $to_num, $total );
 	}
 
 function bp_groups_auto_join() {
@@ -1142,9 +1690,7 @@ function bp_group_show_status_setting( $setting, $group = false ) {
 /**
  * Get the 'checked' value, if needed, for a given invite_status on the group create/admin screens
  *
- * @package BuddyPress
- * @subpackage Groups Template
- * @since BuddyPress (1.5)
+ * @since BuddyPress (1.5.0)
  *
  * @param string $setting The setting you want to check against ('members', 'mods', or 'admins')
  * @param BP_Groups_Group $group (optional) The group whose status you want to check
@@ -1167,9 +1713,7 @@ function bp_group_show_invite_status_setting( $setting, $group = false ) {
  *
  * This function can be used either in or out of the loop.
  *
- * @package BuddyPress
- * @subpackage Groups Template
- * @since BuddyPress (1.5)
+ * @since BuddyPress (1.5.0)
  *
  * @param int $group_id (optional) The id of the group whose status you want to check
  * @return mixed Returns false when no group can be found. Otherwise returns the group invite
@@ -1203,9 +1747,7 @@ function bp_group_get_invite_status( $group_id = false ) {
 /**
  * Can the logged-in user send invitations in the specified group?
  *
- * @package BuddyPress
- * @subpackage Groups Template
- * @since BuddyPress (1.5)
+ * @since BuddyPress (1.5.0)
  *
  * @param int $group_id (optional) The id of the group whose status you want to check
  * @return bool $can_send_invites
@@ -1262,7 +1804,7 @@ function bp_groups_user_can_send_invites( $group_id = false ) {
  *
  * @deprecated 1.5
  * @deprecated No longer used.
- * @since BuddyPress (1.0)
+ * @since BuddyPress (1.0.0)
  * @todo Remove in 1.4
  */
 function bp_group_admin_memberlist( $admin_list = false, $group = false ) {
@@ -1514,10 +2056,11 @@ function bp_group_member_remove_link( $user_id = 0 ) {
 	}
 
 function bp_group_admin_tabs( $group = false ) {
-	global $bp, $groups_template;
+	global $groups_template;
 
-	if ( empty( $group ) )
-		$group = ( $groups_template->group ) ? $groups_template->group : $bp->groups->current_group;
+	if ( empty( $group ) ) {
+		$group = ( $groups_template->group ) ? $groups_template->group : groups_get_current_group();
+	}
 
 	$current_tab = bp_get_group_current_admin_tab();
 
@@ -1532,9 +2075,9 @@ function bp_group_admin_tabs( $group = false ) {
 
 	<li<?php if ( 'group-settings' == $current_tab ) : ?> class="current"<?php endif; ?>><a href="<?php echo trailingslashit( bp_get_group_permalink( $group ) . 'admin/group-settings' ) ?>"><?php _e( 'Settings', 'buddypress' ); ?></a></li>
 
-	<?php if ( !(int)bp_get_option( 'bp-disable-avatar-uploads' ) ) : ?>
+	<?php if ( !(int)bp_get_option( 'bp-disable-avatar-uploads' ) && buddypress()->avatar->show_avatars ) : ?>
 
-		<li<?php if ( 'group-avatar'   == $current_tab ) : ?> class="current"<?php endif; ?>><a href="<?php echo trailingslashit( bp_get_group_permalink( $group ) . 'admin/group-avatar' ) ?>"><?php _e( 'Avatar', 'buddypress' ); ?></a></li>
+		<li<?php if ( 'group-avatar'   == $current_tab ) : ?> class="current"<?php endif; ?>><a href="<?php echo trailingslashit( bp_get_group_permalink( $group ) . 'admin/group-avatar' ) ?>"><?php _e( 'Photo', 'buddypress' ); ?></a></li>
 
 	<?php endif; ?>
 
@@ -1625,36 +2168,74 @@ function bp_group_is_member( $group = false ) {
 }
 
 /**
- * Checks if a user is banned from a group.
+ * Check whether the current user has an outstanding invite to the current group in the loop.
+ *
+ * @param object $group Optional. Group data object. Defaults to the current
+ *        group in the groups loop.
+ * @return bool True if the user has an outstanding invite, otherwise false.
+ */
+function bp_group_is_invited( $group = false ) {
+	global $groups_template;
+
+	if ( empty( $group ) ) {
+		$group =& $groups_template->group;
+	}
+
+	return apply_filters( 'bp_group_is_invited', ! empty( $group->is_invited ) );
+}
+
+/**
+ * Check if a user is banned from a group.
+ *
+ * If this function is invoked inside the groups template loop, then we check
+ * $groups_template->group->is_banned instead of using {@link groups_is_user_banned()}
+ * and making another SQL query.
  *
- * If this function is invoked inside the groups template loop (e.g. the group directory), then
- * check $groups_template->group->is_banned instead of making another SQL query.
- * However, if used in a single group's pages, we must use groups_is_user_banned().
+ * In BuddyPress 2.1, to standardize this function, we are defaulting the
+ * return value to a boolean.  In previous versions, using this function would
+ * return either a string of the integer (0 or 1) or null if a result couldn't
+ * be found from the database.  If the logged-in user had the 'bp_moderate'
+ * capability, the return value would be boolean false.
+ *
+ * @since BuddyPress (1.5.0)
  *
  * @global BP_Groups_Template $groups_template Group template loop object
- * @param object $group Group to check if user is banned from the group
- * @param int $user_id
- * @return bool If user is banned from the group or not
- * @since BuddyPress (1.5)
+ * @param BP_Groups_Group $group Group to check if user is banned
+ * @param int $user_id The user ID to check
+ * @return bool True if user is banned.  False if user isn't banned.
  */
 function bp_group_is_user_banned( $group = false, $user_id = 0 ) {
 	global $groups_template;
 
 	// Site admins always have access
-	if ( bp_current_user_can( 'bp_moderate' ) )
+	if ( bp_current_user_can( 'bp_moderate' ) ) {
 		return false;
+	}
 
-	if ( empty( $group ) ) {
-		$group =& $groups_template->group;
+	// check groups loop first
+	// @see BP_Groups_Group::get_group_extras()
+	if ( ! empty( $groups_template->in_the_loop ) && isset( $groups_template->group->is_banned ) ) {
+		$retval = $groups_template->group->is_banned;
 
-		if ( !$user_id && isset( $group->is_banned ) )
-			return apply_filters( 'bp_group_is_user_banned', $group->is_banned );
-	}
+	// not in loop
+	} else {
+		// Default to not banned
+		$retval = false;
 
-	if ( !$user_id )
-		$user_id = bp_loggedin_user_id();
+		if ( empty( $group ) ) {
+			$group = $groups_template->group;
+		}
 
-	return apply_filters( 'bp_group_is_user_banned', groups_is_user_banned( $user_id, $group->id ) );
+		if ( empty( $user_id ) ) {
+			$user_id = bp_loggedin_user_id();
+		}
+
+		if ( ! empty( $user_id ) && ! empty( $group->id ) ) {
+			$retval = groups_is_user_banned( $user_id, $group->id );
+		}
+	}
+
+	return (bool) apply_filters( 'bp_group_is_user_banned', $retval );
 }
 
 function bp_group_accept_invite_link() {
@@ -1945,7 +2526,7 @@ function bp_group_create_button() {
  *
  * @global BP_Groups_Template $groups_template Groups template object
  * @param object $group Group to get status message for. Optional; defaults to current group.
- * @since BuddyPress (1.0)
+ * @since BuddyPress (1.0.0)
  */
 function bp_group_status_message( $group = null ) {
 	global $groups_template;
@@ -1955,10 +2536,13 @@ function bp_group_status_message( $group = null ) {
 
 	if ( 'private' == $group->status ) {
  		if ( ! bp_group_has_requested_membership() ) {
-			if ( is_user_logged_in() )
+			if ( is_user_logged_in() && bp_group_is_invited() ) {
+				$message = __( 'You must accept your pending invitation before you can access this private group.', 'buddypress' );
+			} else if ( is_user_logged_in() ) {
 				$message = __( 'This is a private group and you must request group membership in order to join.', 'buddypress' );
-			else
+			} else {
 				$message = __( 'This is a private group. To join you must be a registered site member and request group membership.', 'buddypress' );
+			}
 
 		} else {
 			$message = __( 'This is a private group. Your membership request is awaiting approval from the group administrator.', 'buddypress' );
@@ -2190,7 +2774,9 @@ class BP_Groups_Group_Members_Template {
  *     @type string $type Optional. Sort order of results. 'last_joined',
  *           'first_joined', or any of the $type params available in
  *           {@link BP_User_Query}. Default: 'last_joined'.
- *     @type string $search_terms Optional. Search terms to match.
+ *     @type string $search_terms Optional. Search terms to match. Pass an
+ *           empty string to force-disable search, even in the presence of
+ *           $_REQUEST['s']. Default: null.
  * }
  */
 function bp_group_has_members( $args = '' ) {
@@ -2211,12 +2797,13 @@ function bp_group_has_members( $args = '' ) {
 		'exclude_admins_mods' => $exclude_admins_mods,
 		'exclude_banned'      => 1,
 		'group_role'          => false,
-		'search_terms'        => false,
+		'search_terms'        => null,
 		'type'                => 'last_joined',
 	) );
 
-	if ( empty( $r['search_terms'] ) && ! empty( $_REQUEST['s'] ) )
+	if ( is_null( $r['search_terms'] ) && ! empty( $_REQUEST['s'] ) ) {
 		$r['search_terms'] = $_REQUEST['s'];
+	}
 
 	$members_template = new BP_Groups_Group_Members_Template( $r );
 	return apply_filters( 'bp_group_has_members', $members_template->has_members(), $members_template );
@@ -2234,31 +2821,97 @@ function bp_group_the_member() {
 	return $members_template->the_member();
 }
 
-function bp_group_member_avatar() {
-	echo bp_get_group_member_avatar();
+/**
+ * Output the group member avatar while in the groups members loop.
+ *
+ * @since BuddyPress (1.0.0)
+ *
+ * @param array $args {@see bp_core_fetch_avatar()}
+ */
+function bp_group_member_avatar( $args = '' ) {
+	echo bp_get_group_member_avatar( $args );
 }
-	function bp_get_group_member_avatar() {
+	/**
+	 * Return the group member avatar while in the groups members loop.
+	 *
+	 * @since BuddyPress (1.0.0)
+	 *
+	 * @param array $args {@see bp_core_fetch_avatar()}
+	 */
+	function bp_get_group_member_avatar( $args = '' ) {
 		global $members_template;
 
-		return apply_filters( 'bp_get_group_member_avatar', bp_core_fetch_avatar( array( 'item_id' => $members_template->member->user_id, 'type' => 'full', 'email' => $members_template->member->user_email, 'alt' => sprintf( __( 'Profile picture of %s', 'buddypress' ), $members_template->member->display_name ) ) ) );
+		$r = bp_parse_args( $args, array(
+			'item_id' => $members_template->member->user_id,
+			'type'    => 'full',
+			'email'   => $members_template->member->user_email,
+			'alt'     => sprintf( __( 'Profile picture of %s', 'buddypress' ), $members_template->member->display_name )
+		) );
+
+		return apply_filters( 'bp_get_group_member_avatar', bp_core_fetch_avatar( $r ), $r );
 	}
 
-function bp_group_member_avatar_thumb() {
-	echo bp_get_group_member_avatar_thumb();
+/**
+ * Output the group member avatar while in the groups members loop.
+ *
+ * @since BuddyPress (1.0.0)
+ *
+ * @param array $args {@see bp_core_fetch_avatar()}
+ */
+
+function bp_group_member_avatar_thumb( $args = '' ) {
+	echo bp_get_group_member_avatar_thumb( $args );
 }
-	function bp_get_group_member_avatar_thumb() {
+	/**
+	 * Return the group member avatar while in the groups members loop.
+	 *
+	 * @since BuddyPress (1.0.0)
+	 *
+	 * @param array $args {@see bp_core_fetch_avatar()}
+	 */
+	function bp_get_group_member_avatar_thumb( $args = '' ) {
 		global $members_template;
 
-		return apply_filters( 'bp_get_group_member_avatar_thumb', bp_core_fetch_avatar( array( 'item_id' => $members_template->member->user_id, 'type' => 'thumb', 'email' => $members_template->member->user_email, 'alt' => sprintf( __( 'Profile picture of %s', 'buddypress' ), $members_template->member->display_name ) ) ) );
+		$r = bp_parse_args( $args, array(
+			'item_id' => $members_template->member->user_id,
+			'type'    => 'thumb',
+			'email'   => $members_template->member->user_email,
+			'alt'     => sprintf( __( 'Profile picture of %s', 'buddypress' ), $members_template->member->display_name )
+		) );
+
+		return apply_filters( 'bp_get_group_member_avatar_thumb', bp_core_fetch_avatar( $r ), $r );
 	}
 
+/**
+ * Output the group member avatar while in the groups members loop.
+ *
+ * @since BuddyPress (1.0.0)
+ *
+ * @param array $args {@see bp_core_fetch_avatar()}
+ */
 function bp_group_member_avatar_mini( $width = 30, $height = 30 ) {
 	echo bp_get_group_member_avatar_mini( $width, $height );
 }
+	/**
+	 * Output the group member avatar while in the groups members loop.
+	 *
+	 * @since BuddyPress (1.0.0)
+	 *
+	 * @param array $args {@see bp_core_fetch_avatar()}
+	 */
 	function bp_get_group_member_avatar_mini( $width = 30, $height = 30 ) {
 		global $members_template;
 
-		return apply_filters( 'bp_get_group_member_avatar_mini', bp_core_fetch_avatar( array( 'item_id' => $members_template->member->user_id, 'type' => 'thumb', 'width' => $width, 'height' => $height, 'email' => $members_template->member->user_email, 'alt' => sprintf( __( 'Profile picture of %s', 'buddypress' ), $members_template->member->display_name ) ) ) );
+		$r = bp_parse_args( array(), array(
+			'item_id' => $members_template->member->user_id,
+			'type'    => 'thumb',
+			'email'   => $members_template->member->user_email,
+			'alt'     => sprintf( __( 'Profile picture of %s', 'buddypress' ), $members_template->member->display_name ),
+			'width'   => absint( $width ),
+			'height'  => absint( $height )
+		) );
+
+		return apply_filters( 'bp_get_group_member_avatar_mini', bp_core_fetch_avatar( $r ), $r );
 	}
 
 function bp_group_member_name() {
@@ -2381,7 +3034,7 @@ function bp_group_member_pagination_count() {
 		$to_num = bp_core_number_format( ( $start_num + ( $members_template->pag_num - 1 ) > $members_template->total_member_count ) ? $members_template->total_member_count : $start_num + ( $members_template->pag_num - 1 ) );
 		$total = bp_core_number_format( $members_template->total_member_count );
 
-		return apply_filters( 'bp_get_group_member_pagination_count', sprintf( _n( 'Viewing member %1$s to %2$s (of %3$s member)', 'Viewing members %1$s to %2$s (of %3$s members)', $total, 'buddypress' ), $from_num, $to_num, $total ), $from_num, $to_num, $total );
+		return apply_filters( 'bp_get_group_member_pagination_count', sprintf( _n( 'Viewing 1 member', 'Viewing %1$s - %2$s of %3$s members', $total, 'buddypress' ), $from_num, $to_num, $total ), $from_num, $to_num, $total );
 	}
 
 function bp_group_member_admin_pagination() {
@@ -2437,6 +3090,11 @@ function bp_groups_members_filter() {
 		<select id="group_members-order-by">
 			<option value="last_joined"><?php _e( 'Newest', 'buddypress' ); ?></option>
 			<option value="first_joined"><?php _e( 'Oldest', 'buddypress' ); ?></option>
+
+			<?php if ( bp_is_active( 'activity' ) ) : ?>
+				<option value="group_activity"><?php _e( 'Group Activity', 'buddypress' ); ?></option>
+			<?php endif; ?>
+
 			<option value="alphabetical"><?php _e( 'Alphabetical', 'buddypress' ); ?></option>
 
 			<?php do_action( 'bp_groups_members_order_options' ); ?>
@@ -2453,8 +3111,7 @@ function bp_groups_members_filter() {
 /**
  * Determine if the current logged in user can create groups.
  *
- * @package BuddyPress Groups
- * @since BuddyPress (1.5)
+ * @since BuddyPress (1.5.0)
  *
  * @uses apply_filters() To call 'bp_user_can_create_groups'.
  * @uses bp_get_option() To retrieve value of 'bp_restrict_group_creation'. Defaults to 0.
@@ -2693,7 +3350,7 @@ function bp_group_creation_previous_link() {
 /**
  * Echoes the current group creation step
  *
- * @since BuddyPress (1.6)
+ * @since BuddyPress (1.6.0)
  */
 function bp_groups_current_create_step() {
 	echo bp_get_groups_current_create_step();
@@ -2701,7 +3358,7 @@ function bp_groups_current_create_step() {
 	/**
 	 * Returns the current group creation step. If none is found, returns an empty string
 	 *
-	 * @since BuddyPress (1.6)
+	 * @since BuddyPress (1.6.0)
 	 *
 	 * @uses apply_filters() Filter bp_get_groups_current_create_step to modify
 	 * @return string $current_create_step
@@ -2800,7 +3457,6 @@ function bp_directory_groups_search_form() {
 /**
  * Displays group header tabs
  *
- * @package BuddyPress
  * @todo Deprecate?
  */
 function bp_groups_header_tabs() {
@@ -2820,7 +3476,6 @@ function bp_groups_header_tabs() {
 /**
  * Displays group filter titles
  *
- * @package BuddyPress
  * @todo Deprecate?
  */
 function bp_groups_filter_title() {
@@ -2849,20 +3504,22 @@ function bp_groups_filter_title() {
 	do_action( 'bp_groups_filter_title' );
 }
 
-function bp_is_group_admin_screen( $slug ) {
-	if ( !bp_is_groups_component() || !bp_is_current_action( 'admin' ) )
-		return false;
-
-	if ( bp_is_action_variable( $slug ) )
-		return true;
-
-	return false;
+/**
+ * Is the current page a specific group admin screen?
+ *
+ * @since BuddyPress (1.1.0)
+ *
+ * @param string $slug
+ * @return bool
+ */
+function bp_is_group_admin_screen( $slug = '' ) {
+	return (bool) ( bp_is_group_admin_page() && bp_is_action_variable( $slug ) );
 }
 
 /**
  * Echoes the current group admin tab slug
  *
- * @since BuddyPress (1.6)
+ * @since BuddyPress (1.6.0)
  */
 function bp_group_current_admin_tab() {
 	echo bp_get_group_current_admin_tab();
@@ -2870,7 +3527,7 @@ function bp_group_current_admin_tab() {
 	/**
 	 * Returns the current group admin tab slug
 	 *
-	 * @since BuddyPress (1.6)
+	 * @since BuddyPress (1.6.0)
 	 *
 	 * @uses apply_filters() Filter bp_get_current_group_admin_tab to modify return value
 	 * @return string $tab The current tab's slug
@@ -2892,7 +3549,7 @@ function bp_group_current_admin_tab() {
 /**
  * Outputs the current group avatar
  *
- * @since BuddyPress (1.0)
+ * @since BuddyPress (1.0.0)
  * @param string $type thumb or full ?
  * @uses bp_get_group_current_avatar() to get the avatar of the current group
  */
@@ -3254,7 +3911,7 @@ function bp_group_requests_pagination_count() {
 		$to_num    = bp_core_number_format( ( $start_num + ( $requests_template->pag_num - 1 ) > $requests_template->total_request_count ) ? $requests_template->total_request_count : $start_num + ( $requests_template->pag_num - 1 ) );
 		$total     = bp_core_number_format( $requests_template->total_request_count );
 
-		return apply_filters( 'bp_get_group_requests_pagination_count', sprintf( _n( 'Viewing requests %1$s to %2$s (of %3$s request)', 'Viewing request %1$s to %2$s (of %3$s requests)', $total, 'buddypress' ), $from_num, $to_num, $total ), $from_num, $to_num, $total );
+		return apply_filters( 'bp_get_group_requests_pagination_count', sprintf( _n( 'Viewing 1 request', 'Viewing %1$s - %2$s of %3$s requests', $total, 'buddypress' ), $from_num, $to_num, $total ), $from_num, $to_num, $total );
 	}
 
 /************************************************************************************
@@ -3380,9 +4037,9 @@ class BP_Groups_Invite_Template {
 			$this->invite->user->profile_data = BP_XProfile_ProfileData::get_all_for_user( $user_id );
 		}
 
-		$this->invite->user->avatar       = bp_core_fetch_avatar( array( 'item_id' => $user_id, 'type' => 'full', 'alt' => sprintf( __( 'Avatar of %s', 'buddypress' ), $this->invite->user->fullname ) ) );
-		$this->invite->user->avatar_thumb = bp_core_fetch_avatar( array( 'item_id' => $user_id, 'type' => 'thumb', 'alt' => sprintf( __( 'Avatar of %s', 'buddypress' ), $this->invite->user->fullname ) ) );
-		$this->invite->user->avatar_mini  = bp_core_fetch_avatar( array( 'item_id' => $user_id, 'type' => 'thumb', 'alt' => sprintf( __( 'Avatar of %s', 'buddypress' ), $this->invite->user->fullname ), 'width' => 30, 'height' => 30 ) );
+		$this->invite->user->avatar       = bp_core_fetch_avatar( array( 'item_id' => $user_id, 'type' => 'full', 'alt' => sprintf( __( 'Profile photo of %s', 'buddypress' ), $this->invite->user->fullname ) ) );
+		$this->invite->user->avatar_thumb = bp_core_fetch_avatar( array( 'item_id' => $user_id, 'type' => 'thumb', 'alt' => sprintf( __( 'Profile photo of %s', 'buddypress' ), $this->invite->user->fullname ) ) );
+		$this->invite->user->avatar_mini  = bp_core_fetch_avatar( array( 'item_id' => $user_id, 'type' => 'thumb', 'alt' => sprintf( __( 'Profile photo of %s', 'buddypress' ), $this->invite->user->fullname ), 'width' => 30, 'height' => 30 ) );
 		$this->invite->user->email        = $this->invite->user->user_email;
 		$this->invite->user->user_url     = bp_core_get_user_domain( $user_id, $this->invite->user->user_nicename, $this->invite->user->user_login );
 		$this->invite->user->user_link    = "<a href='{$this->invite->user->user_url}' title='{$this->invite->user->fullname}'>{$this->invite->user->fullname}</a>";
@@ -3421,9 +4078,9 @@ function bp_group_has_invites( $args = '' ) {
 	) );
 
 	if ( empty( $r['group_id'] ) ) {
-		if ( ! empty( buddypress()->groups->current_group ) ) {
+		if ( groups_get_current_group() ) {
 			$r['group_id'] = bp_get_current_group_id();
-		} else if ( ! empty( buddypress()->groups->new_group_id ) ) {
+		} elseif ( ! empty( buddypress()->groups->new_group_id ) ) {
 			$r['group_id'] = buddypress()->groups->new_group_id;
 		}
 	}
@@ -3549,7 +4206,7 @@ function bp_group_invite_pagination_count() {
 		$to_num    = bp_core_number_format( ( $start_num + ( $invites_template->pag_num - 1 ) > $invites_template->total_invite_count ) ? $invites_template->total_invite_count : $start_num + ( $invites_template->pag_num - 1 ) );
 		$total     = bp_core_number_format( $invites_template->total_invite_count );
 
-		return apply_filters( 'bp_get_groups_pagination_count', sprintf( _n( 'Viewing invitation %1$s to %2$s (of %3$s invitation)', 'Viewing invitation %1$s to %2$s (of %3$s invitations)', $total, 'buddypress' ), $from_num, $to_num, $total ), $from_num, $to_num, $total );
+		return apply_filters( 'bp_get_groups_pagination_count', sprintf( _n( 'Viewing 1 invitation', 'Viewing %1$s - %2$s of %3$s invitations', $total, 'buddypress' ), $from_num, $to_num, $total ), $from_num, $to_num, $total );
 	}
 
 /***
@@ -3559,7 +4216,7 @@ function bp_group_invite_pagination_count() {
 /**
  * Hook group activity feed to <head>
  *
- * @since BuddyPress (1.5)
+ * @since BuddyPress (1.5.0)
  */
 function bp_groups_activity_feed() {
 	if ( !bp_is_active( 'groups' ) || !bp_is_active( 'activity' ) || !bp_is_group() )
@@ -3575,16 +4232,13 @@ function bp_group_activity_feed_link() {
 	echo bp_get_group_activity_feed_link();
 }
 	function bp_get_group_activity_feed_link() {
-		global $bp;
-
-		return apply_filters( 'bp_get_group_activity_feed_link', bp_get_group_permalink( $bp->groups->current_group ) . 'feed/' );
+		return apply_filters( 'bp_get_group_activity_feed_link', bp_get_group_permalink( groups_get_current_group() ) . 'feed/' );
 	}
 
 /**
  * Echoes the output of bp_get_current_group_id()
  *
- * @package BuddyPress
- * @since BuddyPress (1.5)
+ * @since BuddyPress (1.5.0)
  */
 function bp_current_group_id() {
 	echo bp_get_current_group_id();
@@ -3592,15 +4246,13 @@ function bp_current_group_id() {
 	/**
 	 * Returns the ID of the current group
 	 *
-	 * @package BuddyPress
-	 * @since BuddyPress (1.5)
+	 * @since BuddyPress (1.5.0)
 	 * @uses apply_filters() Filter bp_get_current_group_id to modify this output
 	 *
 	 * @return int $current_group_id The id of the current group, if there is one
 	 */
 	function bp_get_current_group_id() {
-		$current_group = groups_get_current_group();
-
+		$current_group    = groups_get_current_group();
 		$current_group_id = isset( $current_group->id ) ? (int) $current_group->id : 0;
 
 		return apply_filters( 'bp_get_current_group_id', $current_group_id, $current_group );
@@ -3609,8 +4261,7 @@ function bp_current_group_id() {
 /**
  * Echoes the output of bp_get_current_group_slug()
  *
- * @package BuddyPress
- * @since BuddyPress (1.5)
+ * @since BuddyPress (1.5.0)
  */
 function bp_current_group_slug() {
 	echo bp_get_current_group_slug();
@@ -3618,15 +4269,13 @@ function bp_current_group_slug() {
 	/**
 	 * Returns the slug of the current group
 	 *
-	 * @package BuddyPress
-	 * @since BuddyPress (1.5)
+	 * @since BuddyPress (1.5.0)
 	 * @uses apply_filters() Filter bp_get_current_group_slug to modify this output
 	 *
 	 * @return string $current_group_slug The slug of the current group, if there is one
 	 */
 	function bp_get_current_group_slug() {
-		$current_group = groups_get_current_group();
-
+		$current_group      = groups_get_current_group();
 		$current_group_slug = isset( $current_group->slug ) ? $current_group->slug : '';
 
 		return apply_filters( 'bp_get_current_group_slug', $current_group_slug, $current_group );
@@ -3635,7 +4284,6 @@ function bp_current_group_slug() {
 /**
  * Echoes the output of bp_get_current_group_name()
  *
- * @package BuddyPress
  */
 function bp_current_group_name() {
 	echo bp_get_current_group_name();
@@ -3643,51 +4291,100 @@ function bp_current_group_name() {
 	/**
 	 * Returns the name of the current group
 	 *
-	 * @package BuddyPress
-	 * @since BuddyPress (1.5)
+	 * @since BuddyPress (1.5.0)
 	 * @uses apply_filters() Filter bp_get_current_group_name to modify this output
 	 *
 	 * @return string The name of the current group, if there is one
 	 */
 	function bp_get_current_group_name() {
-		global $bp;
+		$current_group      = groups_get_current_group();
+		$current_group_name = isset( $current_group->name ) ? $current_group->name : '';
+		$name               = apply_filters( 'bp_get_group_name', $current_group_name );
 
-		$name = apply_filters( 'bp_get_group_name', $bp->groups->current_group->name );
-		return apply_filters( 'bp_get_current_group_name', $name );
+		return apply_filters( 'bp_get_current_group_name', $name, $current_group );
 	}
 
+/**
+ * Echoes the output of bp_get_current_group_description()
+ *
+ * @since BuddyPress (2.1.0)
+ */
+function bp_current_group_description() {
+	echo bp_get_current_group_description();
+}
+	/**
+	 * Returns the description of the current group
+	 *
+	 * @since BuddyPress (2.1.0)
+	 * @uses apply_filters() Filter bp_get_current_group_description to modify
+	 *                       this output
+	 *
+	 * @return string The description of the current group, if there is one
+	 */
+	function bp_get_current_group_description() {
+		$current_group      = groups_get_current_group();
+		$current_group_desc = isset( $current_group->description ) ? $current_group->description : '';
+		$desc               = apply_filters( 'bp_get_group_description', $current_group_desc );
+
+		return apply_filters( 'bp_get_current_group_description', $desc );
+	}
+
+/**
+ * Output a URL for a group component action
+ *
+ * @since BuddyPress (1.2.0)
+ *
+ * @param string $action
+ * @param string $query_args
+ * @param bool $nonce
+ * @return string
+ */
 function bp_groups_action_link( $action = '', $query_args = '', $nonce = false ) {
 	echo bp_get_groups_action_link( $action, $query_args, $nonce );
 }
+	/**
+	 * Get a URL for a group component action
+	 *
+	 * @since BuddyPress (1.2.0)
+	 *
+	 * @param string $action
+	 * @param string $query_args
+	 * @param bool $nonce
+	 * @return string
+	 */
 	function bp_get_groups_action_link( $action = '', $query_args = '', $nonce = false ) {
-		global $bp;
+
+		$current_group = groups_get_current_group();
+		$url           = '';
 
 		// Must be a group
-		if ( empty( $bp->groups->current_group->id ) )
-			return;
+		if ( ! empty( $current_group->id ) ) {
 
-		// Append $action to $url if provided
-		if ( !empty( $action ) )
-			$url = bp_get_group_permalink( groups_get_current_group() ) . $action;
-		else
-			$url = bp_get_group_permalink( groups_get_current_group() );
+			// Append $action to $url if provided
+			if ( !empty( $action ) ) {
+				$url = bp_get_group_permalink( $current_group ) . $action;
+			} else {
+				$url = bp_get_group_permalink( $current_group );
+			}
 
-		// Add a slash at the end of our user url
-		$url = trailingslashit( $url );
+			// Add a slash at the end of our user url
+			$url = trailingslashit( $url );
 
-		// Add possible query arg
-		if ( !empty( $query_args ) && is_array( $query_args ) )
-			$url = add_query_arg( $query_args, $url );
+			// Add possible query args
+			if ( !empty( $query_args ) && is_array( $query_args ) ) {
+				$url = add_query_arg( $query_args, $url );
+			}
 
-		// To nonce, or not to nonce...
-		if ( true === $nonce )
-			$url = wp_nonce_url( $url );
-		elseif ( is_string( $nonce ) )
-			$url = wp_nonce_url( $url, $nonce );
+			// To nonce, or not to nonce...
+			if ( true === $nonce ) {
+				$url = wp_nonce_url( $url );
+			} elseif ( is_string( $nonce ) ) {
+				$url = wp_nonce_url( $url, $nonce );
+			}
+		}
 
-		// Return the url, if there is one
-		if ( !empty( $url ) )
-			return $url;
+		// Return the url
+		return apply_filters( 'bp_get_groups_action_link', $url, $action, $query_args, $nonce );
 	}
 
 /** Stats **********************************************************************/
diff --git a/wp-content/plugins/buddypress/bp-groups/bp-groups-widgets.php b/wp-content/plugins/buddypress/bp-groups/bp-groups-widgets.php
index 43df1e02a..2406866f7 100644
--- a/wp-content/plugins/buddypress/bp-groups/bp-groups-widgets.php
+++ b/wp-content/plugins/buddypress/bp-groups/bp-groups-widgets.php
@@ -58,9 +58,18 @@ class BP_Groups_Widget extends WP_Widget {
 
 		$title = !empty( $instance['link_title'] ) ? '<a href="' . trailingslashit( bp_get_root_domain() . '/' . bp_get_groups_root_slug() ) . '">' . $title . '</a>' : $title;
 
-		echo $before_title . $title . $after_title; ?>
+		echo $before_title . $title . $after_title;
 
-		<?php if ( bp_has_groups( 'user_id=' . $user_id . '&type=' . $instance['group_default'] . '&max=' . $instance['max_groups'] ) ) : ?>
+		$group_args = array(
+			'user_id'         => $user_id,
+			'type'            => $instance['group_default'],
+			'per_page'        => $instance['max_groups'],
+			'max'             => $instance['max_groups'],
+		);
+
+		?>
+
+		<?php if ( bp_has_groups( $group_args ) ) : ?>
 			<div class="item-options" id="groups-list-options">
 				<a href="<?php bp_groups_directory_permalink(); ?>" id="newest-groups"<?php if ( $instance['group_default'] == 'newest' ) : ?> class="selected"<?php endif; ?>><?php _e("Newest", 'buddypress') ?></a> |
 				<a href="<?php bp_groups_directory_permalink(); ?>" id="recently-active-groups"<?php if ( $instance['group_default'] == 'active' ) : ?> class="selected"<?php endif; ?>><?php _e("Active", 'buddypress') ?></a> |
diff --git a/wp-content/plugins/buddypress/bp-groups/js/widget-groups.js b/wp-content/plugins/buddypress/bp-groups/js/widget-groups.js
index 781c2aa11..0255bdfda 100644
--- a/wp-content/plugins/buddypress/bp-groups/js/widget-groups.js
+++ b/wp-content/plugins/buddypress/bp-groups/js/widget-groups.js
@@ -1,17 +1,17 @@
 jQuery(document).ready( function() {
-	jQuery(".widget div#groups-list-options a").on('click',
+	jQuery('.widget div#groups-list-options a').on('click',
 		function() {
 			var link = this;
 			jQuery(link).addClass('loading');
 
-			jQuery(".widget div#groups-list-options a").removeClass("selected");
+			jQuery('.widget div#groups-list-options a').removeClass('selected');
 			jQuery(this).addClass('selected');
 
 			jQuery.post( ajaxurl, {
 				action: 'widget_groups_list',
 				'cookie': encodeURIComponent(document.cookie),
-				'_wpnonce': jQuery("input#_wpnonce-groups").val(),
-				'max_groups': jQuery("input#groups_widget_max").val(),
+				'_wpnonce': jQuery('input#_wpnonce-groups').val(),
+				'max_groups': jQuery('input#groups_widget_max').val(),
 				'filter': jQuery(this).attr('id')
 			},
 			function(response)
@@ -29,20 +29,20 @@ function groups_wiget_response(response) {
 	response = response.substr(0, response.length-1);
 	response = response.split('[[SPLIT]]');
 
-	if ( response[0] != "-1" ) {
-		jQuery(".widget ul#groups-list").fadeOut(200,
+	if ( response[0] !== '-1' ) {
+		jQuery('.widget ul#groups-list').fadeOut(200,
 			function() {
-				jQuery(".widget ul#groups-list").html(response[1]);
-				jQuery(".widget ul#groups-list").fadeIn(200);
+				jQuery('.widget ul#groups-list').html(response[1]);
+				jQuery('.widget ul#groups-list').fadeIn(200);
 			}
 		);
 
 	} else {
-		jQuery(".widget ul#groups-list").fadeOut(200,
+		jQuery('.widget ul#groups-list').fadeOut(200,
 			function() {
 				var message = '<p>' + response[1] + '</p>';
-				jQuery(".widget ul#groups-list").html(message);
-				jQuery(".widget ul#groups-list").fadeIn(200);
+				jQuery('.widget ul#groups-list').html(message);
+				jQuery('.widget ul#groups-list').fadeIn(200);
 			}
 		);
 	}
diff --git a/wp-content/plugins/buddypress/bp-groups/js/widget-groups.min.js b/wp-content/plugins/buddypress/bp-groups/js/widget-groups.min.js
index e4ba8c60c..621183042 100644
--- a/wp-content/plugins/buddypress/bp-groups/js/widget-groups.min.js
+++ b/wp-content/plugins/buddypress/bp-groups/js/widget-groups.min.js
@@ -1 +1,2 @@
-jQuery(document).ready(function(){jQuery(".widget div#groups-list-options a").on("click",function(){var a=this;jQuery(a).addClass("loading");jQuery(".widget div#groups-list-options a").removeClass("selected");jQuery(this).addClass("selected");jQuery.post(ajaxurl,{action:"widget_groups_list",cookie:encodeURIComponent(document.cookie),_wpnonce:jQuery("input#_wpnonce-groups").val(),max_groups:jQuery("input#groups_widget_max").val(),filter:jQuery(this).attr("id")},function(b){jQuery(a).removeClass("loading");groups_wiget_response(b)});return false})});function groups_wiget_response(a){a=a.substr(0,a.length-1);a=a.split("[[SPLIT]]");if(a[0]!="-1"){jQuery(".widget ul#groups-list").fadeOut(200,function(){jQuery(".widget ul#groups-list").html(a[1]);jQuery(".widget ul#groups-list").fadeIn(200)})}else{jQuery(".widget ul#groups-list").fadeOut(200,function(){var b="<p>"+a[1]+"</p>";jQuery(".widget ul#groups-list").html(b);jQuery(".widget ul#groups-list").fadeIn(200)})}};
\ No newline at end of file
+/*! buddypress - v2.1.0 - 2014-10-06 9:39:07 PM UTC - https://wordpress.org/plugins/buddypress/ */
+function groups_wiget_response(a){a=a.substr(0,a.length-1),a=a.split("[[SPLIT]]"),"-1"!==a[0]?jQuery(".widget ul#groups-list").fadeOut(200,function(){jQuery(".widget ul#groups-list").html(a[1]),jQuery(".widget ul#groups-list").fadeIn(200)}):jQuery(".widget ul#groups-list").fadeOut(200,function(){var b="<p>"+a[1]+"</p>";jQuery(".widget ul#groups-list").html(b),jQuery(".widget ul#groups-list").fadeIn(200)})}jQuery(document).ready(function(){jQuery(".widget div#groups-list-options a").on("click",function(){var a=this;return jQuery(a).addClass("loading"),jQuery(".widget div#groups-list-options a").removeClass("selected"),jQuery(this).addClass("selected"),jQuery.post(ajaxurl,{action:"widget_groups_list",cookie:encodeURIComponent(document.cookie),_wpnonce:jQuery("input#_wpnonce-groups").val(),max_groups:jQuery("input#groups_widget_max").val(),filter:jQuery(this).attr("id")},function(b){jQuery(a).removeClass("loading"),groups_wiget_response(b)}),!1})});
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-loader.php b/wp-content/plugins/buddypress/bp-loader.php
index bf5aaf61a..cac6f4887 100644
--- a/wp-content/plugins/buddypress/bp-loader.php
+++ b/wp-content/plugins/buddypress/bp-loader.php
@@ -4,8 +4,6 @@
  *
  * BuddyPress is social networking software with a twist from the creators of WordPress.
  *
- * $Id$
- *
  * @package BuddyPress
  * @subpackage Main
  */
@@ -16,7 +14,7 @@
  * Description: Social networking in a box. Build a social network for your company, school, sports team or niche community all based on the power and flexibility of WordPress.
  * Author:      The BuddyPress Community
  * Author URI:  http://buddypress.org/community/members/
- * Version:     2.0.2
+ * Version:     2.1.1
  * Text Domain: buddypress
  * Domain Path: /bp-languages/
  * License:     GPLv2 or later (license.txt)
@@ -37,7 +35,7 @@ if ( !class_exists( 'BuddyPress' ) ) :
  */
 class BuddyPress {
 
-	/** Magic *************************************************************/
+	/** Magic *****************************************************************/
 
 	/**
 	 * BuddyPress uses many variables, most of which can be filtered to
@@ -52,7 +50,7 @@ class BuddyPress {
 	 */
 	private $data;
 
-	/** Not Magic *********************************************************/
+	/** Not Magic *************************************************************/
 
 	/**
 	 * @var array Primary BuddyPress navigation.
@@ -97,14 +95,14 @@ class BuddyPress {
 	 */
 	public $active_components = array();
 
-	/** Option Overload ***************************************************/
+	/** Option Overload *******************************************************/
 
 	/**
 	 * @var array Optional Overloads default options retrieved from get_option().
 	 */
 	public $options = array();
 
-	/** Singleton *********************************************************/
+	/** Singleton *************************************************************/
 
 	/**
 	 * Main BuddyPress Instance.
@@ -147,7 +145,7 @@ class BuddyPress {
 		return $instance;
 	}
 
-	/** Magic Methods *****************************************************/
+	/** Magic Methods *********************************************************/
 
 	/**
 	 * A dummy constructor to prevent BuddyPress from being loaded more than once.
@@ -207,7 +205,7 @@ class BuddyPress {
 	 */
 	public function __call( $name = '', $args = array() ) { unset( $name, $args ); return null; }
 
-	/** Private Methods ***************************************************/
+	/** Private Methods *******************************************************/
 
 	/**
 	 * Bootstrap constants.
@@ -229,17 +227,16 @@ class BuddyPress {
 
 		// Path and URL
 		if ( ! defined( 'BP_PLUGIN_DIR' ) ) {
-			define( 'BP_PLUGIN_DIR', trailingslashit( plugin_dir_path( __FILE__ ) ) );
+			define( 'BP_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
 		}
 
 		if ( ! defined( 'BP_PLUGIN_URL' ) ) {
-			$plugin_url = plugin_dir_url( __FILE__ );
-
-			// If we're using https, update the protocol. Workaround for WP13941, WP15928, WP19037.
-			if ( is_ssl() )
-				$plugin_url = str_replace( 'http://', 'https://', $plugin_url );
+			define( 'BP_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
+		}
 
-			define( 'BP_PLUGIN_URL', $plugin_url );
+		// Only applicable to those running trunk
+		if ( ! defined( 'BP_SOURCE_SUBDIRECTORY' ) ) {
+			define( 'BP_SOURCE_SUBDIRECTORY', '' );
 		}
 
 		// Define on which blog ID BuddyPress should run
@@ -262,7 +259,7 @@ class BuddyPress {
 					$plugins = get_site_option( 'active_sitewide_plugins');
 
 					// basename
-					$basename = plugin_basename( constant( 'BP_PLUGIN_DIR' ) . 'bp-loader.php' );
+					$basename = basename( constant( 'BP_PLUGIN_DIR' ) ) . '/bp-loader.php';
 
 					// plugin is network-activated; use main site ID instead
 					if ( isset( $plugins[ $basename ] ) ) {
@@ -301,23 +298,23 @@ class BuddyPress {
 	 */
 	private function setup_globals() {
 
-		/** Versions **************************************************/
+		/** Versions **********************************************************/
 
-		$this->version    = '2.0.2';
+		$this->version    = '2.1.1';
 		$this->db_version = 8311;
 
-		/** Loading ***************************************************/
+		/** Loading ***********************************************************/
 
 		$this->load_deprecated = ! apply_filters( 'bp_ignore_deprecated', BP_IGNORE_DEPRECATED );
 
-		/** Toolbar ***************************************************/
+		/** Toolbar ***********************************************************/
 
 		/**
 		 * @var string The primary toolbar ID
 		 */
 		$this->my_account_menu_id = '';
 
-		/** URIs ******************************************************/
+		/** URIs **************************************************************/
 
 		/**
 		 * @var int The current offset of the URI.
@@ -330,7 +327,7 @@ class BuddyPress {
 		 */
 		$this->no_status_set = false;
 
-		/** Components ************************************************/
+		/** Components ********************************************************/
 
 		/**
 		 * @var string Name of the current BuddyPress component (primary)
@@ -352,18 +349,18 @@ class BuddyPress {
 		 */
 		$this->is_single_item = false;
 
-		/** Root ******************************************************/
+		/** Root **************************************************************/
 
 		// BuddyPress Root blog ID
 		$this->root_blog_id = (int) apply_filters( 'bp_get_root_blog_id', BP_ROOT_BLOG );
 
-		/** Paths******************************************************/
+		/** Paths**************************************************************/
 
 		// BuddyPress root directory
-		$this->file           = __FILE__;
-		$this->basename       = plugin_basename( $this->file );
-		$this->plugin_dir     = BP_PLUGIN_DIR;
-		$this->plugin_url     = BP_PLUGIN_URL;
+		$this->file           = constant( 'BP_PLUGIN_DIR' ) . 'bp-loader.php';
+		$this->basename       = basename( constant( 'BP_PLUGIN_DIR' ) ) . '/bp-loader.php';
+		$this->plugin_dir     = trailingslashit( constant( 'BP_PLUGIN_DIR' ) . constant( 'BP_SOURCE_SUBDIRECTORY' ) );
+		$this->plugin_url     = trailingslashit( constant( 'BP_PLUGIN_URL' ) . constant( 'BP_SOURCE_SUBDIRECTORY' ) );
 
 		// Languages
 		$this->lang_dir       = $this->plugin_dir . 'bp-languages';
@@ -376,12 +373,12 @@ class BuddyPress {
 		$this->old_themes_dir = $this->plugin_dir . 'bp-themes';
 		$this->old_themes_url = $this->plugin_url . 'bp-themes';
 
-		/** Theme Compat **********************************************/
+		/** Theme Compat ******************************************************/
 
 		$this->theme_compat   = new stdClass(); // Base theme compatibility class
 		$this->filters        = new stdClass(); // Used when adding/removing filters
 
-		/** Users *****************************************************/
+		/** Users *************************************************************/
 
 		$this->current_user   = new stdClass();
 		$this->displayed_user = new stdClass();
@@ -415,12 +412,12 @@ class BuddyPress {
 	private function includes() {
 
 		// Load the WP abstraction file so BuddyPress can run on all WordPress setups.
-		require( $this->plugin_dir . '/bp-core/bp-core-wpabstraction.php' );
+		require( $this->plugin_dir . 'bp-core/bp-core-wpabstraction.php' );
 
 		// Setup the versions (after we include multisite abstraction above)
 		$this->versions();
 
-		/** Update/Install ********************************************/
+		/** Update/Install ****************************************************/
 
 		// Theme compatability
 		require( $this->plugin_dir . 'bp-core/bp-core-template-loader.php'     );
@@ -453,7 +450,9 @@ class BuddyPress {
 			require( $this->plugin_dir . 'bp-core/deprecated/1.5.php' );
 			require( $this->plugin_dir . 'bp-core/deprecated/1.6.php' );
 			require( $this->plugin_dir . 'bp-core/deprecated/1.7.php' );
+			require( $this->plugin_dir . 'bp-core/deprecated/1.9.php' );
 			require( $this->plugin_dir . 'bp-core/deprecated/2.0.php' );
+			require( $this->plugin_dir . 'bp-core/deprecated/2.1.php' );
 		}
 	}
 
@@ -528,7 +527,7 @@ class BuddyPress {
 		}
 	}
 
-	/** Public Methods ****************************************************/
+	/** Public Methods ********************************************************/
 
 	/**
 	 * Set up BuddyPress's legacy theme directory.
diff --git a/wp-content/plugins/buddypress/bp-members/admin/bp-members-classes.php b/wp-content/plugins/buddypress/bp-members/admin/bp-members-classes.php
index 70a9ef3de..b9a5e366a 100644
--- a/wp-content/plugins/buddypress/bp-members/admin/bp-members-classes.php
+++ b/wp-content/plugins/buddypress/bp-members/admin/bp-members-classes.php
@@ -54,11 +54,9 @@ class BP_Members_List_Table extends WP_Users_List_Table {
 	public function prepare_items() {
 		global $usersearch;
 
-		$usersearch = isset( $_REQUEST['s'] ) ? $_REQUEST['s'] : '';
-
+		$usersearch       = isset( $_REQUEST['s'] ) ? $_REQUEST['s'] : '';
 		$signups_per_page = $this->get_items_per_page( str_replace( '-', '_', "{$this->screen->id}_per_page" ) );
-
-		$paged = $this->get_pagenum();
+		$paged            = $this->get_pagenum();
 
 		$args = array(
 			'offset'     => ( $paged - 1 ) * $signups_per_page,
@@ -99,7 +97,7 @@ class BP_Members_List_Table extends WP_Users_List_Table {
 
 		// Remove the 'current' class from the 'All' link
 		$views['all']        = str_replace( 'class="current"', '', $views['all'] );
-		$views['registered'] = '<a href="' . add_query_arg( 'page', 'bp-signups', bp_get_admin_url( 'users.php' ) ) . '"  class="current">' . sprintf( _x( 'Pending <span class="count">(%s)</span>', 'signup users', 'buddypress' ), number_format_i18n( $this->signup_counts ) ) . '</a>';
+		$views['registered'] = sprintf( '<a href="%1$s" class="current">%2$s</a>', add_query_arg( 'page', 'bp-signups', bp_get_admin_url( 'users.php' ) ), sprintf( _x( 'Pending %s', 'signup users', 'buddypress' ), '<span class="count">(' . number_format_i18n( $this->signup_counts ) . ')</span>' ) );
 
 		return $views;
 	}
@@ -124,12 +122,12 @@ class BP_Members_List_Table extends WP_Users_List_Table {
 	public function get_columns() {
 		return apply_filters( 'bp_members_signup_columns', array(
 			'cb'         => '<input type="checkbox" />',
-			'username'   => __( 'Username', 'buddypress' ),
-			'name'       => __( 'Name', 'buddypress' ),
-			'email'      => __( 'Email', 'buddypress' ),
-			'registered' => __( 'Registered', 'buddypress' ),
-			'date_sent'  => __( 'Last Sent', 'buddypress' ),
-			'count_sent' => __( '# Times Emailed', 'buddypress' )
+			'username'   => __( 'Username',    'buddypress' ),
+			'name'       => __( 'Name',        'buddypress' ),
+			'email'      => __( 'Email',       'buddypress' ),
+			'registered' => __( 'Registered',  'buddypress' ),
+			'date_sent'  => __( 'Last Sent',   'buddypress' ),
+			'count_sent' => __( 'Emails Sent', 'buddypress' )
 		) );
 	}
 
@@ -141,7 +139,7 @@ class BP_Members_List_Table extends WP_Users_List_Table {
 	public function get_bulk_actions() {
 		$actions = array(
 			'activate' => _x( 'Activate', 'Pending signup action', 'buddypress' ),
-			'resend'   => _x( 'Email', 'Pending signup action', 'buddypress' ),
+			'resend'   => _x( 'Email',    'Pending signup action', 'buddypress' ),
 		);
 
 		if ( current_user_can( 'delete_users' ) ) {
@@ -167,14 +165,14 @@ class BP_Members_List_Table extends WP_Users_List_Table {
 
 			// Specific case when BuddyPress is not network activated
 			if ( is_multisite() && current_user_can( 'manage_network_users') ) {
-				$link = '<a href="' . esc_url( network_admin_url( 'settings.php' ) ) . '">' . esc_html__( 'Edit settings', 'buddypress' ) . '</a>';
+				$link = sprintf( '<a href="%1$s">%2$s</a>', esc_url( network_admin_url( 'settings.php'       ) ), esc_html__( 'Edit settings', 'buddypress' ) );
 			} elseif ( current_user_can( 'manage_options' ) ) {
-				$link = '<a href="' . esc_url( bp_get_admin_url( 'options-general.php' ) ) . '">' . esc_html__( 'Edit settings', 'buddypress' ) . '</a>';
+				$link = sprintf( '<a href="%1$s">%2$s</a>', esc_url( bp_get_admin_url( 'options-general.php' ) ), esc_html__( 'Edit settings', 'buddypress' ) );
 			}
-			
+
 			printf( __( 'Registration is disabled. %s', 'buddypress' ), $link );
 		}
-			
+
 	}
 
 	/**
@@ -222,8 +220,8 @@ class BP_Members_List_Table extends WP_Users_List_Table {
 	 * @since BuddyPress (2.0.0)
 	 */
 	public function column_cb( $signup_object = null ) {
-		?>
-		<label class="screen-reader-text" for="signup_<?php echo intval( $signup_object->id ); ?>"><?php echo esc_html( sprintf( __( 'Select %s', 'buddypress' ), $signup_object->user_login ) ); ?></label>
+	?>
+		<label class="screen-reader-text" for="signup_<?php echo intval( $signup_object->id ); ?>"><?php printf( esc_html__( 'Select %s', 'buddypress' ), $signup_object->user_login ); ?></label>
 		<input type="checkbox" id="signup_<?php echo intval( $signup_object->id ) ?>" name="allsignups[]" value="<?php echo esc_attr( $signup_object->id ) ?>" />
 		<?php
 	}
@@ -268,19 +266,19 @@ class BP_Members_List_Table extends WP_Users_List_Table {
 			bp_get_admin_url( 'users.php' )
 		);
 
-		echo $avatar . '<strong><a href="' . $activate_link .'" class="edit" title="' . esc_attr__( 'Activate', 'buddypress' ) . '">' . $signup_object->user_login .'</a></strong><br/>';
+		echo $avatar . sprintf( '<strong><a href="%1$s" class="edit" title="%2$s">%3$s</a></strong><br/>', esc_url( $activate_link ), esc_attr__( 'Activate', 'buddypress' ), $signup_object->user_login );
 
 		$actions = array();
 
-		$actions['activate'] = '<a href="' . esc_url( $activate_link ) . '">' . __( 'Activate', 'buddypress' ) . '</a>';
-
-		$actions['resend'] = '<a href="' . esc_url( $email_link ) . '">' . __( 'Email', 'buddypress' ) . '</a>';
+		$actions['activate'] = sprintf( '<a href="%1$s">%2$s</a>', esc_url( $activate_link ), __( 'Activate', 'buddypress' ) );
+		$actions['resend']   = sprintf( '<a href="%1$s">%2$s</a>', esc_url( $email_link ), __( 'Email', 'buddypress' ) );
 
 		if ( current_user_can( 'delete_users' ) ) {
-			$actions['delete'] = '<a href="' . esc_url( $delete_link ) . '" class="delete">' . __( 'Delete', 'buddypress' ) . '</a>';
+			$actions['delete'] = sprintf( '<a href="%1$s" class="delete">%2$s</a>', esc_url( $delete_link ), __( 'Delete', 'buddypress' ) );
 		}
 
 		$actions = apply_filters( 'bp_members_ms_signup_row_actions', $actions, $signup_object );
+
 		echo $this->row_actions( $actions );
 	}
 
@@ -303,7 +301,7 @@ class BP_Members_List_Table extends WP_Users_List_Table {
 	 * @param object $signup_object The signup data object.
 	 */
 	public function column_email( $signup_object = null ) {
-		echo '<a href="mailto:' . esc_attr( $signup_object->user_email ) . '">' . esc_html( $signup_object->user_email ) .'</a>';
+		printf( '<a href="mailto:%1$s">%2$s</a>', esc_attr( $signup_object->user_email ), esc_html( $signup_object->user_email ) );
 	}
 
 	/**
@@ -336,6 +334,18 @@ class BP_Members_List_Table extends WP_Users_List_Table {
 	public function column_count_sent( $signup_object = null ) {
 		echo absint( $signup_object->count_sent );
 	}
+
+	/**
+	 * Allow plugins to add their costum column.
+	 *
+	 * @since BuddyPress 2.1.0
+	 *
+	 * @param object $signup_object The signup data object.
+	 * @param string the column name.
+	 */
+	function column_default( $signup_object = null, $column_name = '' ) {
+		return apply_filters( 'bp_members_signup_custom_column', '', $column_name, $signup_object );
+	}
 }
 
 endif;
@@ -381,13 +391,11 @@ class BP_Members_MS_List_Table extends WP_MS_Users_List_Table {
 	 * @since BuddyPress (2.0.0)
 	 */
 	public function prepare_items() {
-		global $usersearch, $wpdb, $mode;
-
-		$usersearch = isset( $_REQUEST['s'] ) ? $_REQUEST['s'] : '';
+		global $usersearch, $mode;
 
+		$usersearch       = isset( $_REQUEST['s'] ) ? $_REQUEST['s'] : '';
 		$signups_per_page = $this->get_items_per_page( str_replace( '-', '_', "{$this->screen->id}_per_page" ) );
-
-		$paged = $this->get_pagenum();
+		$paged            = $this->get_pagenum();
 
 		$args = array(
 			'offset'     => ( $paged - 1 ) * $signups_per_page,
@@ -397,17 +405,18 @@ class BP_Members_MS_List_Table extends WP_MS_Users_List_Table {
 			'order'      => 'DESC'
 		);
 
-		if ( isset( $_REQUEST['orderby'] ) )
+		if ( isset( $_REQUEST['orderby'] ) ) {
 			$args['orderby'] = $_REQUEST['orderby'];
+		}
 
-		if ( isset( $_REQUEST['order'] ) )
+		if ( isset( $_REQUEST['order'] ) ) {
 			$args['order'] = $_REQUEST['order'];
+		}
 
-		$mode = empty( $_REQUEST['mode'] ) ? 'list' : $_REQUEST['mode'];
-
+		$mode    = empty( $_REQUEST['mode'] ) ? 'list' : $_REQUEST['mode'];
 		$signups = BP_Signup::get( $args );
 
-		$this->items = $signups['signups'];
+		$this->items         = $signups['signups'];
 		$this->signup_counts = $signups['total'];
 
 		$this->set_pagination_args( array(
@@ -423,13 +432,12 @@ class BP_Members_MS_List_Table extends WP_MS_Users_List_Table {
 	 *
 	 * @uses WP_MS_Users_List_Table::get_views() to get the users views
 	 */
-	function get_views() {
+	public function get_views() {
 		$views = parent::get_views();
 
-		$views['all'] = str_replace( 'class="current"', '', $views['all'] );
-			$class = ' class="current"';
-
-		$views['registered'] = '<a href="' . add_query_arg( 'page', 'bp-signups', bp_get_admin_url( 'users.php' ) ) . '"  class="current">' . sprintf( _x( 'Pending <span class="count">(%s)</span>', 'signup users', 'buddypress' ), number_format_i18n( $this->signup_counts ) ) . '</a>';
+		// Remove the 'current' class from the 'All' link
+		$views['all']        = str_replace( 'class="current"', '', $views['all'] );
+		$views['registered'] = sprintf( '<a href="%1$s" class="current">%2$s</a>', add_query_arg( 'page', 'bp-signups', bp_get_admin_url( 'users.php' ) ), sprintf( _x( 'Pending %s', 'signup users', 'buddypress' ), '<span class="count">(' . number_format_i18n( $this->signup_counts ) . ')</span>' ) );
 
 		return $views;
 	}
@@ -442,12 +450,12 @@ class BP_Members_MS_List_Table extends WP_MS_Users_List_Table {
 	public function get_columns() {
 		return apply_filters( 'bp_members_ms_signup_columns', array(
 			'cb'         => '<input type="checkbox" />',
-			'username'   => __( 'Username', 'buddypress' ),
-			'name'       => __( 'Name', 'buddypress' ),
-			'email'      => __( 'Email', 'buddypress' ),
-			'registered' => __( 'Registered', 'buddypress' ),
-			'date_sent'  => __( 'Last Sent', 'buddypress' ),
-			'count_sent' => __( '# Times Emailed', 'buddypress' )
+			'username'   => __( 'Username',    'buddypress' ),
+			'name'       => __( 'Name',        'buddypress' ),
+			'email'      => __( 'Email',       'buddypress' ),
+			'registered' => __( 'Registered',  'buddypress' ),
+			'date_sent'  => __( 'Last Sent',   'buddypress' ),
+			'count_sent' => __( 'Emails Sent', 'buddypress' )
 		) );
 	}
 
@@ -459,7 +467,7 @@ class BP_Members_MS_List_Table extends WP_MS_Users_List_Table {
 	public function get_bulk_actions() {
 		$actions = array(
 			'activate' => _x( 'Activate', 'Pending signup action', 'buddypress' ),
-			'resend'   => _x( 'Email', 'Pending signup action', 'buddypress' ),
+			'resend'   => _x( 'Email',    'Pending signup action', 'buddypress' ),
 		);
 
 		if ( current_user_can( 'delete_users' ) ) {
@@ -483,7 +491,7 @@ class BP_Members_MS_List_Table extends WP_MS_Users_List_Table {
 			$link = false;
 
 			if ( current_user_can( 'manage_network_users' ) ) {
-				$link = '<a href="' . esc_url( network_admin_url( 'settings.php' ) ) . '">' . esc_html__( 'Edit settings', 'buddypress' ) . '</a>';
+				$link = sprintf( '<a href="%1$s">%2$s</a>', esc_url( network_admin_url( 'settings.php' ) ), esc_html__( 'Edit settings', 'buddypress' ) );
 			}
 
 			printf( __( 'Registration is disabled. %s', 'buddypress' ), $link );
@@ -535,8 +543,8 @@ class BP_Members_MS_List_Table extends WP_MS_Users_List_Table {
 	 * @since BuddyPress (2.0.0)
 	 */
 	public function column_cb( $signup_object = null ) {
-		?>
-		<label class="screen-reader-text" for="signup_<?php echo intval( $signup_object->id ); ?>"><?php echo esc_html( sprintf( __( 'Select %s', 'buddypress' ), $signup_object->user_login ) ); ?></label>
+	?>
+		<label class="screen-reader-text" for="signup_<?php echo intval( $signup_object->id ); ?>"><?php printf( esc_html__( 'Select %s', 'buddypress' ), $signup_object->user_login ); ?></label>
 		<input type="checkbox" id="signup_<?php echo intval( $signup_object->id ) ?>" name="allsignups[]" value="<?php echo esc_attr( $signup_object->id ) ?>" />
 		<?php
 	}
@@ -581,17 +589,19 @@ class BP_Members_MS_List_Table extends WP_MS_Users_List_Table {
 			bp_get_admin_url( 'users.php' )
 		);
 
-		echo $avatar . '<strong><a href="' . esc_url( $activate_link ) .'" class="edit" title="' . esc_attr__( 'Activate', 'buddypress' ) . '">' . $signup_object->user_login .'</a></strong><br/>';
+		echo $avatar . sprintf( '<strong><a href="%1$s" class="edit" title="%2$s">%3$s</a></strong><br/>', esc_url( $activate_link ), esc_attr__( 'Activate', 'buddypress' ), $signup_object->user_login );
 
-		$actions['activate'] = '<a href="' . esc_url( $activate_link ) . '">' . __( 'Activate', 'buddypress' ) . '</a>';
+		$actions = array();
 
-		$actions['resend'] = '<a href="' . esc_url( $email_link ) . '">' . __( 'Email', 'buddypress' ) . '</a>';
+		$actions['activate'] = sprintf( '<a href="%1$s">%2$s</a>', esc_url( $activate_link ), __( 'Activate', 'buddypress' ) );
+		$actions['resend']   = sprintf( '<a href="%1$s">%2$s</a>', esc_url( $email_link    ), __( 'Email',    'buddypress' ) );
 
 		if ( current_user_can( 'delete_users' ) ) {
-			$actions['delete'] = '<a href="' . esc_url( $delete_link ) . '" class="delete">' . __( 'Delete', 'buddypress' ) . '</a>';
+			$actions['delete'] = sprintf( '<a href="%1$s" class="delete">%2$s</a>', esc_url( $delete_link ), __( 'Delete', 'buddypress' ) );
 		}
 
 		$actions = apply_filters( 'bp_members_ms_signup_row_actions', $actions, $signup_object );
+
 		echo $this->row_actions( $actions );
 	}
 
@@ -614,7 +624,7 @@ class BP_Members_MS_List_Table extends WP_MS_Users_List_Table {
 	 * @param object $signup_object The signup data object.
 	 */
 	public function column_email( $signup_object = null ) {
-		echo '<a href="mailto:' . esc_attr( $signup_object->user_email ) . '">' . esc_html( $signup_object->user_email ) .'</a>';
+		printf( '<a href="mailto:%1$s">%2$s</a>', esc_attr( $signup_object->user_email ), esc_html( $signup_object->user_email ) );
 	}
 
 	/**
@@ -627,7 +637,7 @@ class BP_Members_MS_List_Table extends WP_MS_Users_List_Table {
 	public function column_registered( $signup_object = null ) {
 		global $mode;
 
-		if ( 'list' == $mode ) {
+		if ( 'list' === $mode ) {
 			$date = 'Y/m/d';
 		} else {
 			$date = 'Y/m/d \<\b\r \/\> g:i:s a';
@@ -644,7 +654,7 @@ class BP_Members_MS_List_Table extends WP_MS_Users_List_Table {
 	public function column_date_sent( $signup_object = null ) {
 		global $mode;
 
-		if ( 'list' == $mode ) {
+		if ( 'list' === $mode ) {
 			$date = 'Y/m/d';
 		} else {
 			$date = 'Y/m/d \<\b\r \/\> g:i:s a';
@@ -661,6 +671,18 @@ class BP_Members_MS_List_Table extends WP_MS_Users_List_Table {
 	public function column_count_sent( $signup_object = null ) {
 		echo absint( $signup_object->count_sent );
 	}
+
+	/**
+	 * Allow plugins to add their costum column.
+	 *
+	 * @since BuddyPress 2.1.0
+	 *
+	 * @param object $signup_object The signup data object.
+	 * @param string the column name.
+	 */
+	function column_default( $signup_object = null, $column_name = '' ) {
+		return apply_filters( 'bp_members_ms_signup_custom_column', '', $column_name, $signup_object );
+	}
 }
 
 endif;
diff --git a/wp-content/plugins/buddypress/bp-members/admin/css/admin-rtl.css b/wp-content/plugins/buddypress/bp-members/admin/css/admin-rtl.css
new file mode 100644
index 000000000..0f658bab8
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-members/admin/css/admin-rtl.css
@@ -0,0 +1,160 @@
+/**** BP Members Profile Administration Screens ****/
+
+div#profile-page.wrap form#your-profile {
+	position:relative;
+}
+
+div#profile-page.wrap form#your-profile h3:first-of-type {
+	margin-top:5em;
+}
+
+div#profile-page.wrap form#your-profile #profile-nav {
+	position: absolute;
+	top: -3.65em;
+	width: 97%;
+}
+
+div#community-profile-page #profile-nav {
+	margin-bottom: 1em;
+}
+
+#bp_members_admin_user_stats ul {
+	margin-bottom: 0;
+}
+div#community-profile-page li.bp-members-profile-stats:before,
+div#community-profile-page li.bp-friends-profile-stats:before,
+div#community-profile-page li.bp-groups-profile-stats:before,
+div#community-profile-page li.bp-blogs-profile-stats:before,
+div#community-profile-page a.bp-xprofile-avatar-user-admin:before {
+	font: normal 20px/1 'dashicons';
+	speak: none;
+	display: inline-block;
+	padding: 0 0 0 2px;
+	top: 0;
+	right: -1px;
+	position: relative;
+	vertical-align: top;
+	-webkit-font-smoothing: antialiased;
+	-moz-osx-font-smoothing: grayscale;
+	text-decoration: none !important;
+	color: #888;
+}
+
+div#community-profile-page li.bp-members-profile-stats:before {
+	content: "\f130";
+}
+
+div#community-profile-page li.bp-friends-profile-stats:before {
+	content: "\f454";
+}
+
+div#community-profile-page li.bp-groups-profile-stats:before {
+	content: "\f456";
+}
+
+div#community-profile-page li.bp-blogs-profile-stats:before {
+	content: "\f120";
+}
+
+div#community-profile-page a.bp-xprofile-avatar-user-admin:before {
+	content:"\f182";
+}
+
+div#community-profile-page div#bp_xprofile_user_admin_avatar div.avatar {
+	width:150px;
+	margin:0 auto;
+}
+
+div#community-profile-page div#bp_xprofile_user_admin_avatar div.avatar img {
+	max-width: 100%;
+	height: auto;
+}
+
+div#community-profile-page div#bp_xprofile_user_admin_avatar a {
+	display:block;
+	margin:1em 0;
+	text-decoration:none;
+	color:#888;
+}
+
+div#community-profile-page p.not-activated {
+	margin:1em 1em 0;
+	color:red;
+}
+
+#community-profile-page #submitdiv #publishing-action {
+	float: none;
+	width: 100%;
+}
+
+.bp-view-profile {
+	float: right;
+}
+
+.alt {
+	background: none;
+}
+.bp-profile-field {
+	border-bottom: dotted 1px #ccc;
+	font-size: 14px;
+	margin: 15px 0;
+	padding: 10px;
+}
+.bp-profile-field:last-child {
+	border-bottom: 0;
+}
+.bp-profile-field p {
+	font-size: 14px;
+}
+.bp-profile-field .datebox > label,
+.bp-profile-field .radio > label,
+.bp-profile-field > label {  /* label takes on left side 200px */
+	display: inline-block;
+	font-weight: 600;
+	text-align: right;
+	vertical-align: middle;
+	width: 200px;
+}
+
+.field_type_textarea > label,
+.field_type_multiselectbox > label,
+.field_type_radio .radio > label,
+.field_type_checkbox .checkbox > label {  /* these fields are usually pretty tall, so align the label for better consistency */
+	vertical-align: top;
+}
+.bp-profile-field .description {  /* description also sits in the right side column */
+	margin: 10px 200px 10px 0;
+	text-align: right;
+}
+.clear-value {  /* 'clear value' option also sits in the right side column */
+	display: block;
+	font-size: 12px;
+	margin-right: 200px;
+}
+.field_type_checkbox .checkbox > label + label {  /* force checkboxes to new lines, in the right side column */
+	display: block;
+	margin-right: 200px;
+	width: auto;
+}
+.field_type_radio .radio div:not(.field-visibility-settings) label {  /* force radio buttons to new lines */
+	display: block;
+}
+.field_type_radio .radio div:not(.field-visibility-settings) {  /* make the radio buttons sit in the right side column */
+	display: inline-block;
+}
+.field-visibility-settings-notoggle,
+.field-visibility-settings-toggle {  /* visibility settings go in the left column */
+	margin: 10px 200px 10px 0;
+	text-align: right;
+}
+.field-visibility-settings {  /* visibility settings go in the left column */
+	display: none;
+	margin-right: 200px;
+}
+.field-visibility-settings .button {  /* visibility setting close button */
+	margin-bottom: 15px;
+}
+#normal-sortables .field-visibility-settings legend {  /* id required for css selector weight */
+	font-size: 16px;
+	margin-bottom: 10px;
+}
diff --git a/wp-content/plugins/buddypress/bp-members/admin/css/admin-rtl.min.css b/wp-content/plugins/buddypress/bp-members/admin/css/admin-rtl.min.css
new file mode 100644
index 000000000..269deb289
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-members/admin/css/admin-rtl.min.css
@@ -0,0 +1,2 @@
+/*! buddypress - v2.1.0 - 2014-10-06 9:39:09 PM UTC - https://wordpress.org/plugins/buddypress/ */
+div#profile-page.wrap form#your-profile{position:relative}div#profile-page.wrap form#your-profile h3:first-of-type{margin-top:5em}div#profile-page.wrap form#your-profile #profile-nav{position:absolute;top:-3.65em;width:97%}div#community-profile-page #profile-nav{margin-bottom:1em}#bp_members_admin_user_stats ul{margin-bottom:0}div#community-profile-page a.bp-xprofile-avatar-user-admin:before,div#community-profile-page li.bp-blogs-profile-stats:before,div#community-profile-page li.bp-friends-profile-stats:before,div#community-profile-page li.bp-groups-profile-stats:before,div#community-profile-page li.bp-members-profile-stats:before{font:400 20px/1 dashicons;speak:none;display:inline-block;padding:0 0 0 2px;top:0;right:-1px;position:relative;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important;color:#888}div#community-profile-page li.bp-members-profile-stats:before{content:"\f130"}div#community-profile-page li.bp-friends-profile-stats:before{content:"\f454"}div#community-profile-page li.bp-groups-profile-stats:before{content:"\f456"}div#community-profile-page li.bp-blogs-profile-stats:before{content:"\f120"}div#community-profile-page a.bp-xprofile-avatar-user-admin:before{content:"\f182"}div#community-profile-page div#bp_xprofile_user_admin_avatar div.avatar{width:150px;margin:0 auto}div#community-profile-page div#bp_xprofile_user_admin_avatar div.avatar img{max-width:100%;height:auto}div#community-profile-page div#bp_xprofile_user_admin_avatar a{display:block;margin:1em 0;text-decoration:none;color:#888}div#community-profile-page p.not-activated{margin:1em 1em 0;color:red}#community-profile-page #submitdiv #publishing-action{float:none;width:100%}.bp-view-profile{float:right}.alt{background:0 0}.bp-profile-field{border-bottom:dotted 1px #ccc;font-size:14px;margin:15px 0;padding:10px}.bp-profile-field:last-child{border-bottom:0}.bp-profile-field p{font-size:14px}.bp-profile-field .datebox>label,.bp-profile-field .radio>label,.bp-profile-field>label{display:inline-block;font-weight:600;text-align:right;vertical-align:middle;width:200px}.field_type_checkbox .checkbox>label,.field_type_multiselectbox>label,.field_type_radio .radio>label,.field_type_textarea>label{vertical-align:top}.bp-profile-field .description{margin:10px 200px 10px 0;text-align:right}.clear-value{display:block;font-size:12px;margin-right:200px}.field_type_checkbox .checkbox>label+label{display:block;margin-right:200px;width:auto}.field_type_radio .radio div:not(.field-visibility-settings) label{display:block}.field_type_radio .radio div:not(.field-visibility-settings){display:inline-block}.field-visibility-settings-notoggle,.field-visibility-settings-toggle{margin:10px 200px 10px 0;text-align:right}.field-visibility-settings{display:none;margin-right:200px}.field-visibility-settings .button{margin-bottom:15px}#normal-sortables .field-visibility-settings legend{font-size:16px;margin-bottom:10px}
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-members/admin/css/admin.css b/wp-content/plugins/buddypress/bp-members/admin/css/admin.css
index b0a0e1f85..e4599f718 100644
--- a/wp-content/plugins/buddypress/bp-members/admin/css/admin.css
+++ b/wp-content/plugins/buddypress/bp-members/admin/css/admin.css
@@ -5,58 +5,39 @@ div#profile-page.wrap form#your-profile {
 }
 
 div#profile-page.wrap form#your-profile h3:first-of-type {
-	margin-top:6em;
+	margin-top:5em;
 }
 
-div#profile-page.wrap form#your-profile ul#profile-nav {
-	position:absolute;
-	top:-6em;
-	border-bottom:solid 1px #ccc;
-	width:100%;
+div#profile-page.wrap form#your-profile #profile-nav {
+	position: absolute;
+	top: -3.65em;
+	width: 97%;
 }
 
-div#community-profile-page ul#profile-nav {
-	border-bottom:solid 1px #ccc;
-	width:100%;
-	margin-top:1em;
-	margin-bottom:1em;
-	padding:1em 0;
-	padding-bottom: 0;
-	height:2.4em;
+div#community-profile-page #profile-nav {
+	margin-bottom: 1em;
 }
 
-form#your-profile ul#profile-nav li,
-div#community-profile-page ul#profile-nav li {
-	margin-left:0.4em;
-	float:left;
-	font-weight: bold;
-	font-size: 15px;
-	line-height: 24px;
+#bp_members_admin_user_stats ul {
+	margin-bottom: 0;
 }
-
-form#your-profile ul#profile-nav li a,
-div#community-profile-page ul#profile-nav li a {
-	text-decoration: none;
-	color:#888;
-}
-
-form#your-profile ul#profile-nav li a:hover,
-form#your-profile ul#profile-nav li.nav-tab-active a,
-div#community-profile-page ul#profile-nav li a:hover,
-div#community-profile-page ul#profile-nav li.nav-tab-active a {
-	text-decoration: none;
-	color:#000;
-}
-
 div#community-profile-page li.bp-members-profile-stats:before,
 div#community-profile-page li.bp-friends-profile-stats:before,
 div#community-profile-page li.bp-groups-profile-stats:before,
 div#community-profile-page li.bp-blogs-profile-stats:before,
 div#community-profile-page a.bp-xprofile-avatar-user-admin:before {
-	font-family: 'dashicons';
-	font-size: 18px;
-	vertical-align: bottom;
-	margin-right:5px;
+	font: normal 20px/1 'dashicons';
+	speak: none;
+	display: inline-block;
+	padding: 0 2px 0 0;
+	top: 0;
+	left: -1px;
+	position: relative;
+	vertical-align: top;
+	-webkit-font-smoothing: antialiased;
+	-moz-osx-font-smoothing: grayscale;
+	text-decoration: none !important;
+	color: #888;
 }
 
 div#community-profile-page li.bp-members-profile-stats:before {
diff --git a/wp-content/plugins/buddypress/bp-members/admin/css/admin.min.css b/wp-content/plugins/buddypress/bp-members/admin/css/admin.min.css
index 20b3d41a7..77b109159 100644
--- a/wp-content/plugins/buddypress/bp-members/admin/css/admin.min.css
+++ b/wp-content/plugins/buddypress/bp-members/admin/css/admin.min.css
@@ -1 +1,2 @@
-div#profile-page.wrap form#your-profile{position:relative}div#profile-page.wrap form#your-profile h3:first-of-type{margin-top:6em}div#profile-page.wrap form#your-profile ul#profile-nav{position:absolute;top:-6em;border-bottom:solid 1px #ccc;width:100%}div#community-profile-page ul#profile-nav{border-bottom:solid 1px #ccc;width:100%;margin-top:1em;margin-bottom:1em;padding:1em 0;padding-bottom:0;height:2.4em}form#your-profile ul#profile-nav li,div#community-profile-page ul#profile-nav li{margin-left:.4em;float:left;font-weight:bold;font-size:15px;line-height:24px}form#your-profile ul#profile-nav li a,div#community-profile-page ul#profile-nav li a{text-decoration:none;color:#888}form#your-profile ul#profile-nav li a:hover,form#your-profile ul#profile-nav li.nav-tab-active a,div#community-profile-page ul#profile-nav li a:hover,div#community-profile-page ul#profile-nav li.nav-tab-active a{text-decoration:none;color:#000}div#community-profile-page li.bp-members-profile-stats:before,div#community-profile-page li.bp-friends-profile-stats:before,div#community-profile-page li.bp-groups-profile-stats:before,div#community-profile-page li.bp-blogs-profile-stats:before,div#community-profile-page a.bp-xprofile-avatar-user-admin:before{font-family:'dashicons';font-size:18px;vertical-align:bottom;margin-right:5px}div#community-profile-page li.bp-members-profile-stats:before{content:"\f130"}div#community-profile-page li.bp-friends-profile-stats:before{content:"\f454"}div#community-profile-page li.bp-groups-profile-stats:before{content:"\f456"}div#community-profile-page li.bp-blogs-profile-stats:before{content:"\f120"}div#community-profile-page a.bp-xprofile-avatar-user-admin:before{content:"\f182"}div#community-profile-page div#bp_xprofile_user_admin_avatar div.avatar{width:150px;margin:0 auto}div#community-profile-page div#bp_xprofile_user_admin_avatar div.avatar img{max-width:100%;height:auto}div#community-profile-page div#bp_xprofile_user_admin_avatar a{display:block;margin:1em 0;text-decoration:none;color:#888}div#community-profile-page p.not-activated{margin:1em 1em 0;color:red}#community-profile-page #submitdiv #publishing-action{float:none;width:100%}.bp-view-profile{float:left}.alt{background:0}.bp-profile-field{border-bottom:dotted 1px #ccc;font-size:14px;margin:15px 0;padding:10px}.bp-profile-field:last-child{border-bottom:0}.bp-profile-field p{font-size:14px}.bp-profile-field .datebox>label,.bp-profile-field .radio>label,.bp-profile-field>label{display:inline-block;font-weight:600;text-align:left;vertical-align:middle;width:200px}.field_type_textarea>label,.field_type_multiselectbox>label,.field_type_radio .radio>label,.field_type_checkbox .checkbox>label{vertical-align:top}.bp-profile-field .description{margin:10px 0 10px 200px;text-align:left}.clear-value{display:block;font-size:12px;margin-left:200px}.field_type_checkbox .checkbox>label+label{display:block;margin-left:200px;width:auto}.field_type_radio .radio div:not(.field-visibility-settings) label{display:block}.field_type_radio .radio div:not(.field-visibility-settings){display:inline-block}.field-visibility-settings-notoggle,.field-visibility-settings-toggle{margin:10px 0 10px 200px;text-align:left}.field-visibility-settings{display:none;margin-left:200px}.field-visibility-settings .button{margin-bottom:15px}#normal-sortables .field-visibility-settings legend{font-size:16px;margin-bottom:10px}
\ No newline at end of file
+/*! buddypress - v2.1.0 - 2014-10-06 9:39:09 PM UTC - https://wordpress.org/plugins/buddypress/ */
+div#profile-page.wrap form#your-profile{position:relative}div#profile-page.wrap form#your-profile h3:first-of-type{margin-top:5em}div#profile-page.wrap form#your-profile #profile-nav{position:absolute;top:-3.65em;width:97%}div#community-profile-page #profile-nav{margin-bottom:1em}#bp_members_admin_user_stats ul{margin-bottom:0}div#community-profile-page a.bp-xprofile-avatar-user-admin:before,div#community-profile-page li.bp-blogs-profile-stats:before,div#community-profile-page li.bp-friends-profile-stats:before,div#community-profile-page li.bp-groups-profile-stats:before,div#community-profile-page li.bp-members-profile-stats:before{font:400 20px/1 dashicons;speak:none;display:inline-block;padding:0 2px 0 0;top:0;left:-1px;position:relative;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important;color:#888}div#community-profile-page li.bp-members-profile-stats:before{content:"\f130"}div#community-profile-page li.bp-friends-profile-stats:before{content:"\f454"}div#community-profile-page li.bp-groups-profile-stats:before{content:"\f456"}div#community-profile-page li.bp-blogs-profile-stats:before{content:"\f120"}div#community-profile-page a.bp-xprofile-avatar-user-admin:before{content:"\f182"}div#community-profile-page div#bp_xprofile_user_admin_avatar div.avatar{width:150px;margin:0 auto}div#community-profile-page div#bp_xprofile_user_admin_avatar div.avatar img{max-width:100%;height:auto}div#community-profile-page div#bp_xprofile_user_admin_avatar a{display:block;margin:1em 0;text-decoration:none;color:#888}div#community-profile-page p.not-activated{margin:1em 1em 0;color:red}#community-profile-page #submitdiv #publishing-action{float:none;width:100%}.bp-view-profile{float:left}.alt{background:0 0}.bp-profile-field{border-bottom:dotted 1px #ccc;font-size:14px;margin:15px 0;padding:10px}.bp-profile-field:last-child{border-bottom:0}.bp-profile-field p{font-size:14px}.bp-profile-field .datebox>label,.bp-profile-field .radio>label,.bp-profile-field>label{display:inline-block;font-weight:600;text-align:left;vertical-align:middle;width:200px}.field_type_checkbox .checkbox>label,.field_type_multiselectbox>label,.field_type_radio .radio>label,.field_type_textarea>label{vertical-align:top}.bp-profile-field .description{margin:10px 0 10px 200px;text-align:left}.clear-value{display:block;font-size:12px;margin-left:200px}.field_type_checkbox .checkbox>label+label{display:block;margin-left:200px;width:auto}.field_type_radio .radio div:not(.field-visibility-settings) label{display:block}.field_type_radio .radio div:not(.field-visibility-settings){display:inline-block}.field-visibility-settings-notoggle,.field-visibility-settings-toggle{margin:10px 0 10px 200px;text-align:left}.field-visibility-settings{display:none;margin-left:200px}.field-visibility-settings .button{margin-bottom:15px}#normal-sortables .field-visibility-settings legend{font-size:16px;margin-bottom:10px}
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-members/admin/js/admin.js b/wp-content/plugins/buddypress/bp-members/admin/js/admin.js
index a1d2857ca..9aed8a8d0 100644
--- a/wp-content/plugins/buddypress/bp-members/admin/js/admin.js
+++ b/wp-content/plugins/buddypress/bp-members/admin/js/admin.js
@@ -1,3 +1,5 @@
+/* exported clear */
+
 ( function( $ ) {
 	// Profile Visibility Settings
 
@@ -50,4 +52,4 @@ function clear( container ) {
 			options[i].selected = false;
 		}
 	}
-}
\ No newline at end of file
+}
diff --git a/wp-content/plugins/buddypress/bp-members/admin/js/admin.min.js b/wp-content/plugins/buddypress/bp-members/admin/js/admin.min.js
index 96b041092..143a0172f 100644
--- a/wp-content/plugins/buddypress/bp-members/admin/js/admin.min.js
+++ b/wp-content/plugins/buddypress/bp-members/admin/js/admin.min.js
@@ -1 +1,2 @@
-(function(a){a(".visibility-toggle-link").on("click",function(b){b.preventDefault();a(this).parent().hide().siblings(".field-visibility-settings").show()});a(".field-visibility-settings-close").on("click",function(d){d.preventDefault();var c=a(this).parent(),b=c.find("input:checked").parent().text();c.hide().siblings(".field-visibility-settings-toggle").children(".current-visibility-level").text(b).end().show()})})(jQuery);function clear(a){a=document.getElementById(a);if(!a){return}var d=a.getElementsByTagName("INPUT"),b=a.getElementsByTagName("OPTION"),c=0;if(d){for(c=0;c<d.length;c++){d[c].checked=""}}if(b){for(c=0;c<b.length;c++){b[c].selected=false}}};
\ No newline at end of file
+/*! buddypress - v2.1.0 - 2014-10-06 9:39:07 PM UTC - https://wordpress.org/plugins/buddypress/ */
+function clear(a){if(a=document.getElementById(a)){var b=a.getElementsByTagName("INPUT"),c=a.getElementsByTagName("OPTION"),d=0;if(b)for(d=0;d<b.length;d++)b[d].checked="";if(c)for(d=0;d<c.length;d++)c[d].selected=!1}}!function(a){a(".visibility-toggle-link").on("click",function(b){b.preventDefault(),a(this).parent().hide().siblings(".field-visibility-settings").show()}),a(".field-visibility-settings-close").on("click",function(b){b.preventDefault();var c=a(this).parent(),d=c.find("input:checked").parent().text();c.hide().siblings(".field-visibility-settings-toggle").children(".current-visibility-level").text(d).end().show()})}(jQuery);
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-members/bp-members-actions.php b/wp-content/plugins/buddypress/bp-members/bp-members-actions.php
index b8d770d80..339a1a852 100644
--- a/wp-content/plugins/buddypress/bp-members/bp-members-actions.php
+++ b/wp-content/plugins/buddypress/bp-members/bp-members-actions.php
@@ -15,13 +15,16 @@
 if ( !defined( 'ABSPATH' ) ) exit;
 
 /**
+ * Catch a "Mark as Spammer/Not Spammer" click from the toolbar.
+ *
  * When a site admin selects "Mark as Spammer/Not Spammer" from the admin menu
  * this action will fire and mark or unmark the user and their blogs as spam.
  * Must be a site admin for this function to run.
  *
- * @package BuddyPress Core
- * @param int $user_id Optional user ID to mark as spam
- * @global object $wpdb Global WordPress Database object
+ * Note: no longer used in the current state. See the Settings component.
+ *
+ * @param int $user_id Optional. User ID to mark as spam. Defaults to displayed
+ *        user.
  */
 function bp_core_action_set_spammer_status( $user_id = 0 ) {
 
@@ -65,9 +68,9 @@ function bp_core_action_set_spammer_status( $user_id = 0 ) {
 //add_action( 'bp_actions', 'bp_core_action_set_spammer_status' );
 
 /**
- * Allows a site admin to delete a user from the adminbar menu.
+ * Process user deletion requests.
  *
- * @package BuddyPress Core
+ * Note: No longer called here. See the Settings component.
  */
 function bp_core_action_delete_user() {
 
@@ -101,10 +104,8 @@ function bp_core_action_delete_user() {
 //add_action( 'bp_actions', 'bp_core_action_delete_user' );
 
 /**
- * Returns the user_id for a user based on their username.
+ * Redirect to a random member page when visiting a ?random-member URL.
  *
- * @package BuddyPress Core
- * @param string $username Username to check.
  * @since BuddyPress (1.0)
  */
 function bp_core_get_random_member() {
diff --git a/wp-content/plugins/buddypress/bp-members/bp-members-admin.php b/wp-content/plugins/buddypress/bp-members/bp-members-admin.php
index c1626bb37..287fb67d6 100644
--- a/wp-content/plugins/buddypress/bp-members/bp-members-admin.php
+++ b/wp-content/plugins/buddypress/bp-members/bp-members-admin.php
@@ -1,4 +1,5 @@
 <?php
+
 // Exit if accessed directly
 if ( !defined( 'ABSPATH' ) ) exit;
 
@@ -61,15 +62,16 @@ class BP_Members_Admin {
 	 * @access public
 	 * @since BuddyPress (2.0.0)
 	 *
-	 * @uses buddypress() to get BuddyPress main instance
+	 * @uses buddypress() to get BuddyPress main instance.
 	 */
 	public static function register_members_admin() {
-		if( ! is_admin() )
+		if ( ! is_admin() ) {
 			return;
+		}
 
 		$bp = buddypress();
 
-		if( empty( $bp->members->admin ) ) {
+		if ( empty( $bp->members->admin ) ) {
 			$bp->members->admin = new self;
 		}
 
@@ -108,17 +110,28 @@ class BP_Members_Admin {
 		// The Edit Profile Screen id
 		$this->user_page = '';
 
+		// The Show Profile Screen id
+		$this->user_profile = is_network_admin() ? 'users' : 'profile';
+
+		// The current user id
+		$this->current_user_id = get_current_user_id();
+
+		// The user id being edited
+		$this->user_id = 0;
+
+		// Is a member editing their own profile
+		$this->is_self_profile = false;
+
 		// The screen ids to load specific css for
 		$this->screen_id = array();
 
 		// The stats metabox default position
 		$this->stats_metabox = new StdClass();
 
-		// The WordPress edit user url
-		$this->edit_url = bp_get_admin_url( 'user-edit.php' );
-
-		// BuddyPress edit user's profile url
-		$this->edit_profile_url = add_query_arg( 'page', 'bp-profile-edit', bp_get_admin_url( 'users.php' ) );
+		// BuddyPress edit user's profile args
+		$this->edit_profile_args = array( 'page' => 'bp-profile-edit' );
+		$this->edit_profile_url  = '';
+		$this->edit_url          = '';
 
 		// Data specific to signups
 		$this->users_page   = '';
@@ -143,99 +156,367 @@ class BP_Members_Admin {
 	 */
 	private function setup_actions() {
 
-		/** Extended Profile *****************************************/
+		/** Extended Profile **************************************************/
+
+		// Enqueue all admin JS and CSS
+		add_action( 'bp_admin_enqueue_scripts', array( $this, 'enqueue_scripts'   )        );
 
 		// Add some page specific output to the <head>
-		add_action( 'bp_admin_head',            array( $this, 'admin_head'      ), 999    );
+		add_action( 'bp_admin_head',            array( $this, 'admin_head'        ), 999   );
 
 		// Add menu item to all users menu
-		add_action( bp_core_admin_hook(),       array( $this, 'admin_menus'     ),   5    );
-
-		// Enqueue all admin JS and CSS
-		add_action( 'bp_admin_enqueue_scripts', array( $this, 'enqueue_scripts' )         );
+		add_action( 'admin_menu',               array( $this, 'admin_menus'       ), 5     );
+		add_action( 'network_admin_menu',       array( $this, 'admin_menus'       ), 5     );
+		add_action( 'user_admin_menu',          array( $this, 'user_profile_menu' ), 5     );
 
 		// Create the Profile Navigation (Profile/Extended Profile)
-		add_action( 'edit_user_profile',        array( $this, 'profile_nav'     ),  99, 1 );
+		add_action( 'edit_user_profile',        array( $this, 'profile_nav'       ), 99, 1 );
+		add_action( 'show_user_profile',        array( $this, 'profile_nav'       ), 99, 1 );
+
+		// Editing users of a specific site
+		add_action( "admin_head-site-users.php", array( $this, 'profile_admin_head' ) );
 
 		// Add a row action to users listing
-		add_filter( bp_core_do_network_admin() ? 'ms_user_row_actions' : 'user_row_actions', array( $this, 'row_actions' ), 10, 2 );
+		if ( bp_core_do_network_admin() ) {
+			add_filter( 'ms_user_row_actions',        array( $this, 'row_actions'                    ), 10, 2 );
+			add_action( 'admin_init',                 array( $this, 'add_edit_profile_url_filter'    )        );
+			add_action( 'wp_after_admin_bar_render',  array( $this, 'remove_edit_profile_url_filter' )        );
+		}
+
+		// Add user row actions for single site
+		add_filter( 'user_row_actions', array( $this, 'row_actions' ), 10, 2 );
 
-		/** Signups **************************************************************/
+		/** Signups ***********************************************************/
 
 		if ( is_admin() ) {
+
+			// Filter non multisite user query to remove sign-up users
 			if ( ! is_multisite() ) {
-				add_action( 'pre_user_query', array( $this, 'remove_signups_from_user_query'),  10, 1 );
+				add_action( 'pre_user_query', array( $this, 'remove_signups_from_user_query' ), 10, 1 );
 			}
 
 			// Reorganise the views navigation in users.php and signups page
 			if ( current_user_can( $this->capability ) ) {
-				add_filter( "views_{$this->users_screen}", array( $this, 'signup_filter_view' ),    10, 1 );
+				add_filter( "views_{$this->users_screen}", array( $this, 'signup_filter_view'    ), 10, 1 );
 				add_filter( 'set-screen-option',           array( $this, 'signup_screen_options' ), 10, 3 );
 			}
 		}
 	}
 
 	/**
-	 * Create the All Users > Edit Profile and Signups submenus.
+	 * Get the user ID
+	 *
+	 * Look for $_GET['user_id']. If anything else, force the user ID to the
+	 * current user's ID so they aren't left without a user to edit.
+	 *
+	 * @since BuddyPress (2.1.0)
+	 *
+	 * @return int
+	 */
+	private function get_user_id() {
+
+		// No user ID to start
+		$user_id = 0;
+
+		// We'll need a user ID when not on the user admin
+		if ( ! empty( $_GET['user_id'] ) ) {
+			$user_id = $_GET['user_id'];
+
+		// Assume the current user ID
+		} else {
+			$user_id = get_current_user_id();
+		}
+
+		return intval( $user_id );
+	}
+
+	/**
+	 * Can the current user edit the one displayed
+	 *
+	 * self profile editing / or bp_moderate check.
+	 * This might be replaced by more granular capabilities
+	 * in the future.
+	 *
+	 * @access public
+	 * @since BuddyPress (2.1.0)
+	 */
+	private function member_can_edit( $user_id = 0 ) {
+		$retval = false;
+
+		// Bail if no user ID was passed
+		if ( empty( $user_id ) ) {
+			return $retval;
+		}
+
+		// Member can edit if they are viewing their own profile
+		if ( $this->current_user_id === $user_id ) {
+			$retval = true;
+
+		// Trust the 'bp_moderate' capability
+		} else {
+			$retval = bp_current_user_can( 'bp_moderate' );
+		}
+
+		return $retval;
+	}
+
+	/**
+	 * Get admin notice when saving a user or member profile
+	 *
+	 * @since BuddyPress (2.1.0)
+	 *
+	 * @return array
+	 */
+	private function get_user_notice() {
+
+		// Setup empty notice for return value
+		$notice = array();
+
+		// Updates
+		if ( ! empty( $_REQUEST['updated'] ) ) {
+			switch ( $_REQUEST['updated'] ) {
+			case 'avatar':
+				$notice = array(
+					'class'   => 'updated',
+					'message' => __( 'Profile photo was deleted.', 'buddypress' )
+				);
+				break;
+			case 'ham' :
+				$notice = array(
+					'class'   => 'updated',
+					'message' => __( 'User removed as spammer.', 'buddypress' )
+				);
+				break;
+			case 'spam' :
+				$notice = array(
+					'class'   => 'updated',
+					'message' => __( 'User marked as spammer. Spam users are visible only to site admins.', 'buddypress' )
+				);
+				break;
+			case 1 :
+				$notice = array(
+					'class'   => 'updated',
+					'message' => __( 'Profile updated.', 'buddypress' )
+				);
+				break;
+			}
+		}
+
+		// Errors
+		if ( ! empty( $_REQUEST['error'] ) ) {
+			switch ( $_REQUEST['error'] ) {
+			case 'avatar':
+				$notice = array(
+					'class'   => 'error',
+					'message' => __( 'There was a problem deleting that avatar, please try again.', 'buddypress' )
+				);
+				break;
+			case 'ham' :
+				$notice = array(
+					'class'   => 'error',
+					'message' => __( 'User could not be removed as spammer.', 'buddypress' )
+				);
+				break;
+			case 'spam' :
+				$notice = array(
+					'class'   => 'error',
+					'message' => __( 'User could not be marked as spammer.', 'buddypress' )
+				);
+				break;
+			case 1 :
+				$notice = array(
+					'class'   => 'error',
+					'message' => __( 'An error occured while trying to update the profile.', 'buddypress' )
+				);
+				break;
+			case 2:
+				$notice = array(
+					'class'   => 'error',
+					'message' => __( 'Please make sure you fill in all required fields in this profile field group before saving.', 'buddypress' )
+				);
+				break;
+			case 3:
+				$notice = array(
+					'class'   => 'error',
+					'message' => __( 'There was a problem updating some of your profile information, please try again.', 'buddypress' )
+				);
+				break;
+			}
+		}
+
+		return $notice;
+	}
+
+	/**
+	 * Create the /user/ admin Profile submenus for all members.
+	 *
+	 * @access public
+	 * @since BuddyPress (2.1.0)
+	 *
+	 * @uses add_submenu_page() To add the Edit Profile page in Profile section.
+	 */
+	public function user_profile_menu() {
+
+		// Setup the hooks array
+		$hooks = array();
+
+		// Add the faux "Edit Profile" submenu page
+		$hooks['user'] = $this->user_page = add_submenu_page(
+			'profile.php',
+			__( 'Edit Profile',  'buddypress' ),
+			__( 'Edit Profile',  'buddypress' ),
+			'exist',
+			'bp-profile-edit',
+			array( $this, 'user_admin' )
+		);
+
+		// Setup the screen ID's
+		$this->screen_id = array(
+			$this->user_page    . '-user',
+			$this->user_profile . '-user'
+		);
+
+		// Loop through new hooks and add method actions
+		foreach ( $hooks as $key => $hook ) {
+			add_action( "load-{$hook}", array( $this, $key . '_admin_load' ) );
+		}
+
+		// Add the profile_admin_head method to proper admin_head actions
+		add_action( "admin_head-{$this->user_page}", array( $this, 'profile_admin_head' ) );
+		add_action( "admin_head-profile.php",        array( $this, 'profile_admin_head' ) );
+	}
+
+	/**
+	 * Create the All Users / Profile > Edit Profile and All Users Signups submenus.
 	 *
 	 * @access public
 	 * @since BuddyPress (2.0.0)
 	 *
-	 * @uses add_users_page() To add the Edit Profile page in Users section.
+	 * @uses add_submenu_page() To add the Edit Profile page in Users/Profile section.
 	 */
 	public function admin_menus() {
 
+		// Setup the hooks array
+		$hooks = array();
+
 		// Manage user's profile
-		$hooks['user'] = $this->user_page = add_users_page(
+		$hooks['user'] = $this->user_page = add_submenu_page(
+			$this->user_profile . '.php',
 			__( 'Edit Profile',  'buddypress' ),
 			__( 'Edit Profile',  'buddypress' ),
-			'bp_moderate',
+			'read',
 			'bp-profile-edit',
-			array( &$this, 'user_admin' )
+			array( $this, 'user_admin' )
 		);
 
-		// Manage signups
-		$hooks['signups'] = $this->signups_page = add_users_page(
-			__( 'Manage Signups',  'buddypress' ),
-			__( 'Manage Signups',  'buddypress' ),
-			$this->capability,
-			'bp-signups',
-			array( &$this, 'signups_admin' )
-		);
+		// Only show sign-ups where they belong
+		if ( ! is_multisite() || is_network_admin() ) {
+
+			// Manage signups
+			$hooks['signups'] = $this->signups_page = add_users_page(
+				__( 'Manage Signups',  'buddypress' ),
+				__( 'Manage Signups',  'buddypress' ),
+				$this->capability,
+				'bp-signups',
+				array( $this, 'signups_admin' )
+			);
+		}
 
-		$edit_page = 'user-edit';
-		$this->users_page = 'users';
+		$edit_page         = 'user-edit';
+		$profile_page      = 'profile';
+		$this->users_page  = 'users';
 
-		if ( bp_core_do_network_admin() ) {
+		// Self profile check is needed for this pages
+		$page_head = array(
+			$edit_page        . '.php',
+			$profile_page     . '.php',
+			$this->user_page,
+			$this->users_page . '.php',
+		);
+
+		// Append '-network' to each array item if in network admin
+		if ( is_network_admin() ) {
 			$edit_page          .= '-network';
-			$this->users_page   .= '-network';
+			$profile_page       .= '-network';
 			$this->user_page    .= '-network';
+			$this->users_page   .= '-network';
 			$this->signups_page .= '-network';
 		}
 
-		$this->screen_id = array( $edit_page, $this->user_page );
+		// Setup the screen ID's
+		$this->screen_id = array(
+			$edit_page,
+			$this->user_page,
+			$profile_page
+		);
 
+		// Loop through new hooks and add method actions
 		foreach ( $hooks as $key => $hook ) {
-			add_action( "load-$hook", array( $this, $key . '_admin_load' ) );
+			add_action( "load-{$hook}", array( $this, $key . '_admin_load' ) );
 		}
 
-		add_action( "admin_head-$this->user_page", array( $this, 'modify_admin_menu_highlight' ) );
-
+		// Add the profile_admin_head method to proper admin_head actions
+		foreach ( $page_head as $head ) {
+			add_action( "admin_head-{$head}", array( $this, 'profile_admin_head' ) );
+		}
 	}
 
 	/**
 	 * Highlight the Users menu if on Edit Profile.
 	 *
+	 * + Check if on the user's admin profile
+	 *
 	 * @access public
-	 * @since BuddyPress (2.0.0)
+	 * @since BuddyPress (2.1.0)
 	 */
-	public function modify_admin_menu_highlight() {
-		global $plugin_page, $submenu_file;
+	public function profile_admin_head() {
+		global $submenu_file, $parent_file;
 
-		// Only Show the All users menu
-		if ( $plugin_page = 'bp-profile-edit' ) {
+		// Is the user editing their own profile?
+		if ( is_user_admin() || ( defined( 'IS_PROFILE_PAGE' ) && IS_PROFILE_PAGE ) ) {
+			$this->is_self_profile = true;
+
+		// Is the user attempting to edit their own profile
+		} else {
+			$this->is_self_profile = (bool) ( $this->get_user_id() === $this->current_user_id );
+		}
+
+		// Force the parent file to users.php to open the correct top level menu
+		// but only if not editing a site via the network site editing page.
+		if ( 'sites.php' !== $parent_file ) {
+			$parent_file  = 'users.php';
 			$submenu_file = 'users.php';
 		}
+
+		// Editing your own profile, so recheck some vars
+		if ( true === $this->is_self_profile ) {
+
+			// Use profile.php as the edit page
+			$edit_page = 'profile.php';
+
+			// Set profile.php as the parent & sub files to correct the menu nav
+			if ( is_blog_admin() || is_user_admin() ) {
+				$parent_file  = 'profile.php';
+				$submenu_file = 'profile.php';
+			}
+
+		// Not editing yourself, so use user-edit.php
+		} else {
+			$edit_page = 'user-edit.php';
+		}
+
+		if ( is_user_admin() ) {
+			$this->edit_profile_url = add_query_arg( $this->edit_profile_args, user_admin_url( 'profile.php' ) );
+			$this->edit_url         = user_admin_url( 'profile.php' );
+
+		} elseif ( is_blog_admin() ) {
+			$this->edit_profile_url = add_query_arg( $this->edit_profile_args, admin_url( 'users.php' ) );
+			$this->edit_url         = admin_url( $edit_page );
+
+		} elseif ( is_network_admin() ) {
+			$this->edit_profile_url = add_query_arg( $this->edit_profile_args, network_admin_url( 'users.php' ) );
+			$this->edit_url         = network_admin_url( $edit_page );
+		}
 	}
 
 	/**
@@ -249,11 +530,11 @@ class BP_Members_Admin {
 	 * @since BuddyPress (2.0.0)
 	 */
 	public function admin_head() {
-		// Remove submenu to force using Profile Navigation
-		remove_submenu_page( 'users.php', 'bp-profile-edit' );
+		remove_submenu_page( 'users.php',   'bp-profile-edit' );
+		remove_submenu_page( 'profile.php', 'bp-profile-edit' );
 	}
 
-	/** Community Profile ************************************************/
+	/** Community Profile *****************************************************/
 
 	/**
 	 * Add some specific styling to the Edit User and Edit User's Profile page.
@@ -267,11 +548,16 @@ class BP_Members_Admin {
 		}
 
 		$min = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
-
 		$css = $this->css_url . "admin{$min}.css";
 		$css = apply_filters( 'bp_members_admin_css', $css );
+
 		wp_enqueue_style( 'bp-members-css', $css, array(), bp_get_version() );
 
+		wp_style_add_data( 'bp-members-css', 'rtl', true );
+		if ( $min ) {
+			wp_style_add_data( 'bp-members-css', 'suffix', $min );
+		}
+
 		// Only load javascript for BuddyPress profile
 		if ( get_current_screen()->id == $this->user_page ) {
 			$js = $this->js_url . "admin{$min}.js";
@@ -291,22 +577,24 @@ class BP_Members_Admin {
 	 */
 	public function profile_nav( $user = null, $active = 'WordPress' ) {
 
+		// Bail if no user ID exists here
 		if ( empty( $user->ID ) ) {
 			return;
 		}
 
-		// Don't display here if this is not where other BP
-		// administration takes place
-		if ( bp_core_do_network_admin() && ! is_network_admin() ) {
-			return;
+		// Add the user ID to query agruments when not editing yourself
+		if ( false === $this->is_self_profile ) {
+			$query_args = array( 'user_id' => $user->ID );
+		} else {
+			$query_args = array();
 		}
 
-		$query_args = array( 'user_id' => $user->ID );
-
+		// Conditionally add a referer if it exists in the existing request
 		if ( ! empty( $_REQUEST['wp_http_referer'] ) ) {
 			$query_args['wp_http_referer'] = urlencode( stripslashes_deep( $_REQUEST['wp_http_referer'] ) );
 		}
 
+		// Setup the two distinct "edit" URL's
 		$community_url = add_query_arg( $query_args, $this->edit_profile_url );
 		$wordpress_url = add_query_arg( $query_args, $this->edit_url         );
 
@@ -317,21 +605,21 @@ class BP_Members_Admin {
 			$wp_active = false;
 		} ?>
 
-		<ul id="profile-nav" class="nav-tab-wrapper">
+		<h2 id="profile-nav" class="nav-tab-wrapper">
 			<?php
 			/**
 			 * In configs where BuddyPress is not network activated, as regular
 			 * admins do not have the capacity to edit other users, we must add
 			 * this check.
 			 */
-			?>
-			<?php if ( current_user_can( 'edit_user' ) ) :?>
-				<li class="nav-tab<?php echo esc_attr( $wp_active ); ?>"><a href="<?php echo esc_url( $wordpress_url );?>"><?php _e( 'Profile', 'buddypress' ); ?></a></li>
-			<?php endif ;?>
-			<li class="nav-tab<?php echo esc_attr( $bp_active ); ?>"><a href="<?php echo esc_url( $community_url );?>"><?php _e( 'Extended Profile', 'buddypress' ); ?></a></li>
+			if ( current_user_can( 'edit_user', $user->ID ) ) : ?>
 
-			<?php do_action( 'bp_members_admin_profile_nav', $active, $user ); ?>
-		</ul>
+				<a class="nav-tab<?php echo esc_attr( $wp_active ); ?>" href="<?php echo esc_url( $wordpress_url );?>"><?php _e( 'Profile', 'buddypress' ); ?></a>
+
+			<?php endif; ?>
+
+			<a class="nav-tab<?php echo esc_attr( $bp_active ); ?>" href="<?php echo esc_url( $community_url );?>"><?php _e( 'Extended Profile', 'buddypress' ); ?></a>
+		</h2>
 
 		<?php
 	}
@@ -348,23 +636,22 @@ class BP_Members_Admin {
 	 */
 	public function user_admin_load() {
 
-		if ( ! $user_id = intval( $_GET['user_id'] ) ) {
-			wp_die( __( 'No users were found', 'buddypress' ) );
-		}
+		// Get the user ID
+		$user_id = $this->get_user_id();
 
-		// only edit others profile
-		if ( get_current_user_id() == $user_id ) {
-			bp_core_redirect( get_edit_user_link( $user_id ) );
+		// can current user edit this profile ?
+		if ( ! $this->member_can_edit( $user_id ) ) {
+			wp_die( __( 'You cannot edit the requested user.', 'buddypress' ) );
 		}
 
 		// Build redirection URL
 		$redirect_to = remove_query_arg( array( 'action', 'error', 'updated', 'spam', 'ham', 'delete_avatar' ), $_SERVER['REQUEST_URI'] );
-		$doaction = ! empty( $_REQUEST['action'] ) ? $_REQUEST['action'] : false;
+		$doaction    = ! empty( $_REQUEST['action'] ) ? $_REQUEST['action'] : false;
 
 		if ( ! empty( $_REQUEST['user_status'] ) ) {
-			$spam = ( 'spam' == $_REQUEST['user_status'] ) ? true : false ;
+			$spam = (bool) ( 'spam' === $_REQUEST['user_status'] );
 
-			if ( $spam != bp_is_user_spammer( $user_id ) ) {
+			if ( $spam !== bp_is_user_spammer( $user_id ) ) {
 				$doaction = $_REQUEST['user_status'];
 			}
 		}
@@ -396,10 +683,17 @@ class BP_Members_Admin {
 			);
 
 			// Register metaboxes for the edit screen.
-			add_meta_box( 'submitdiv', _x( 'Status', 'members user-admin edit screen', 'buddypress' ), array( &$this, 'user_admin_status_metabox' ), get_current_screen()->id, 'side', 'core' );
+			add_meta_box(
+				'submitdiv',
+				_x( 'Status', 'members user-admin edit screen', 'buddypress' ),
+				array( $this, 'user_admin_status_metabox' ),
+				get_current_screen()->id,
+				'side',
+				'core'
+			);
 
 			// In case xprofile is not active
-			$this->stats_metabox->context = 'normal';
+			$this->stats_metabox->context  = 'normal';
 			$this->stats_metabox->priority = 'core';
 
 			/**
@@ -409,23 +703,37 @@ class BP_Members_Admin {
 			do_action_ref_array( 'bp_members_admin_xprofile_metabox', array( $user_id, get_current_screen()->id, $this->stats_metabox ) );
 
 			// If xProfile is inactive, difficult to know what's profile we're on
-			$display_name = false;
-			if ( 'normal' == $this->stats_metabox->context ) {
-				$display_name = ' - ' . esc_html( bp_core_get_user_displayname( $user_id ) );
+			if ( 'normal' === $this->stats_metabox->context ) {
+				$display_name = bp_core_get_user_displayname( $user_id );
+			} else {
+				$display_name = __( 'Member', 'buddypress' );
 			}
 
 			// User Stat metabox
-			add_meta_box( 'bp_members_admin_user_stats',    _x( 'Stats' . $display_name, 'members user-admin edit screen', 'buddypress' ), array( &$this, 'user_admin_stats_metabox' ), get_current_screen()->id, sanitize_key( $this->stats_metabox->context ), sanitize_key( $this->stats_metabox->priority ) );
+			add_meta_box(
+				'bp_members_admin_user_stats',
+				sprintf( _x( "%s's Stats", 'members user-admin edit screen', 'buddypress' ), $display_name ),
+				array( $this, 'user_admin_stats_metabox' ),
+				get_current_screen()->id,
+				sanitize_key( $this->stats_metabox->context ),
+				sanitize_key( $this->stats_metabox->priority )
+			);
 
-			// Custom metabox ?
-			do_action( 'bp_members_admin_user_metaboxes' );
+			/**
+			 * Custom metabox ?
+			 * Plugins can restrict metabox to "bp_moderate" admins checking
+			 * the first argument ($this->is_self_profile) is false in their hook
+			 * They can also restruct their metabox to self profile editing
+			 * by cheking it set to true.
+			 */
+			do_action( 'bp_members_admin_user_metaboxes', $this->is_self_profile, $user_id );
 
 			// Enqueue javascripts
-			wp_enqueue_script( 'postbox' );
+			wp_enqueue_script( 'postbox'   );
 			wp_enqueue_script( 'dashboard' );
 
 		// Spam or Ham user
-		} else if ( in_array( $doaction, array( 'spam', 'ham' ) ) ) {
+		} elseif ( in_array( $doaction, array( 'spam', 'ham' ) ) && empty( $this->is_self_profile ) ) {
 
 			check_admin_referer( 'edit-bp-profile_' . $user_id );
 
@@ -455,121 +763,72 @@ class BP_Members_Admin {
 	 */
 	public function user_admin() {
 
-		if ( ! current_user_can( 'bp_moderate' ) ) {
+		if ( ! bp_current_user_can( 'bp_moderate' ) && empty( $this->is_self_profile ) ) {
 			die( '-1' );
 		}
 
-		$user = get_user_to_edit( $_GET['user_id'] );
+		// Get the user ID
+		$user_id = $this->get_user_id();
+		$user    = get_user_to_edit( $user_id );
+
+		// Construct title
+		if ( true === $this->is_self_profile ) {
+			$title = __( 'Profile',   'buddypress' );
+		} else {
+			$title = __( 'Edit User', 'buddypress' );
+		}
 
 		// Construct URL for form
-		$form_url        = remove_query_arg( array( 'action', 'error', 'updated', 'spam', 'ham' ), $_SERVER['REQUEST_URI'] );
-		$form_url        = esc_url( add_query_arg( 'action', 'update', $form_url ) );
-		$wp_http_referer = remove_query_arg( array( 'action', 'updated' ), $_REQUEST['wp_http_referer'] );
+		$request_url     = remove_query_arg( array( 'action', 'error', 'updated', 'spam', 'ham' ), $_SERVER['REQUEST_URI'] );
+		$form_action_url = add_query_arg( 'action', 'update', $request_url );
+		$wp_http_referer = false;
+		if ( ! empty( $_REQUEST['wp_http_referer'] ) ) {
+			$wp_http_referer = remove_query_arg( array( 'action', 'updated' ), $_REQUEST['wp_http_referer'] );
+		}
 
 		// Prepare notice for admin
-		$notice = array();
+		$notice = $this->get_user_notice();
 
-		if ( ! empty( $_REQUEST['updated'] ) ) {
-			switch ( $_REQUEST['updated'] ) {
-			case 'avatar':
-				$notice = array(
-					'class'   => 'updated',
-					'message' => __( 'Avatar was deleted successfully!', 'buddypress' )
-				);
-				break;
-			case 'ham' :
-				$notice = array(
-					'class'   => 'updated',
-					'message' => __( 'User removed as spammer.', 'buddypress' )
-				);
-				break;
-			case 'spam' :
-				$notice = array(
-					'class'   => 'updated',
-					'message' => __( 'User marked as spammer. Spam users are visible only to site admins.', 'buddypress' )
-				);
-				break;
-			case 1 :
-				$notice = array(
-					'class'   => 'updated',
-					'message' => __( 'Profile updated.', 'buddypress' )
-				);
-				break;
-			}
-		}
+		if ( ! empty( $notice ) ) : ?>
 
-		if ( ! empty( $_REQUEST['error'] ) ) {
-			switch ( $_REQUEST['error'] ) {
-			case 'avatar':
-				$notice = array(
-					'class'   => 'error',
-					'message' => __( 'There was a problem deleting that avatar, please try again.', 'buddypress' )
-				);
-				break;
-			case 'ham' :
-				$notice = array(
-					'class'   => 'error',
-					'message' => __( 'User could not be removed as spammer.', 'buddypress' )
-				);
-				break;
-			case 'spam' :
-				$notice = array(
-					'class'   => 'error',
-					'message' => __( 'User could not be marked as spammer.', 'buddypress' )
-				);
-				break;
-			case 1 :
-				$notice = array(
-					'class'   => 'error',
-					'message' => __( 'An error occured while trying to update the profile.', 'buddypress' )
-				);
-				break;
-			case 2:
-				$notice = array(
-					'class'   => 'error',
-					'message' => __( 'Please make sure you fill in all required fields in this profile field group before saving.', 'buddypress' )
-				);
-				break;
-			case 3:
-				$notice = array(
-					'class'   => 'error',
-					'message' => __( 'There was a problem updating some of your profile information, please try again.', 'buddypress' )
-				);
-				break;
-			}
-		}
+			<div <?php if ( 'updated' === $notice['class'] ) : ?>id="message" <?php endif; ?>class="<?php echo esc_attr( $notice['class'] ); ?>">
 
-		if ( ! empty( $notice ) ) :
-			if ( 'updated' === $notice['class'] ) : ?>
-				<div id="message" class="<?php echo esc_attr( $notice['class'] ); ?>">
-			<?php else: ?>
-				<div class="<?php echo esc_attr( $notice['class'] ); ?>">
-			<?php endif; ?>
 				<p><?php echo esc_html( $notice['message'] ); ?></p>
+
 				<?php if ( !empty( $wp_http_referer ) && ( 'updated' === $notice['class'] ) ) : ?>
+
 					<p><a href="<?php echo esc_url( $wp_http_referer ); ?>"><?php esc_html_e( '&larr; Back to Users', 'buddypress' ); ?></a></p>
+
 				<?php endif; ?>
+
 			</div>
+
 		<?php endif; ?>
 
-		<div class="wrap"  id="community-profile-page">
+		<div class="wrap" id="community-profile-page">
 			<?php screen_icon( 'users' ); ?>
-			<h2>
-				<?php
-				_e( 'Edit User', 'buddypress' );
-				if ( current_user_can( 'create_users' ) ) { ?>
-					<a href="user-new.php" class="add-new-h2"><?php echo esc_html_x( 'Add New', 'user', 'buddypress' ); ?></a>
-				<?php } elseif ( is_multisite() && current_user_can( 'promote_users' ) ) { ?>
-					<a href="user-new.php" class="add-new-h2"><?php echo esc_html_x( 'Add Existing', 'user', 'buddypress' ); ?></a>
-				<?php }
-				?>
+			<h2><?php echo esc_html( $title ); ?>
+
+				<?php if ( empty( $this->is_self_profile ) ) : ?>
+
+					<?php if ( current_user_can( 'create_users' ) ) : ?>
+
+						<a href="user-new.php" class="add-new-h2"><?php echo esc_html_x( 'Add New', 'user', 'buddypress' ); ?></a>
+
+					<?php elseif ( is_multisite() && current_user_can( 'promote_users' ) ) : ?>
+
+						<a href="user-new.php" class="add-new-h2"><?php echo esc_html_x( 'Add Existing', 'user', 'buddypress' ); ?></a>
+
+					<?php endif; ?>
+
+				<?php endif; ?>
 			</h2>
 
 			<?php if ( ! empty( $user ) ) :
 
 				$this->profile_nav( $user, 'BuddyPress' ); ?>
 
-				<form action="<?php echo esc_attr( $form_url ); ?>" id="your-profile" method="post">
+				<form action="<?php echo esc_url( $form_action_url ); ?>" id="your-profile" method="post">
 					<div id="poststuff">
 
 						<div id="post-body" class="metabox-holder columns-<?php echo 1 == get_current_screen()->get_columns() ? '1' : '2'; ?>">
@@ -595,7 +854,9 @@ class BP_Members_Admin {
 				</form>
 
 			<?php else : ?>
+
 				<p><?php printf( __( 'No user found with this ID. <a href="%s">Go back and try again</a>.', 'buddypress' ), esc_url( bp_get_admin_url( 'users.php' ) ) ); ?></p>
+
 			<?php endif; ?>
 
 		</div><!-- .wrap -->
@@ -621,31 +882,43 @@ class BP_Members_Admin {
 			return;
 		}
 
-		if ( ( isset( $user->user_status ) && 2 == $user->user_status ) ) {
-			echo '<p class="not-activated">' . esc_html__( 'User account has not yet been activated', 'buddypress' ) . '</p><br/>';
-			return;
-		}
-		?>
+		// Bail if user has not been activated yet (how didy ou get here?)
+		if ( isset( $user->user_status ) && ( 2 == $user->user_status ) ) : ?>
+
+			<p class="not-activated"><?php esc_html_e( 'User account has not yet been activated', 'buddypress' ); ?></p><br/>
+
+			<?php return;
+
+		endif; ?>
 
 		<div class="submitbox" id="submitcomment">
 			<div id="minor-publishing">
 				<div id="misc-publishing-actions">
 					<?php
+
+					// Get the spam status once here to compare against below
+					$is_spammer = bp_is_user_spammer( $user->ID );
+
 					/**
-					 * In configs where BuddyPress is not network activated, regular admins
-					 * cannot mark a user as a spammer on front end. This prevent them to do
-					 * it in backend.
+					 * In configs where BuddyPress is not network activated,
+					 * regular admins cannot mark a user as a spammer on front
+					 * end. This prevent them to do it in backend.
+					 *
+					 * Also prevent admins from marking themselves or other
+					 * admins as spammers.
 					 */
-					?>
-					<?php if ( empty( $this->subsite_activated ) || ( ! empty( $this->subsite_activated ) && current_user_can( 'manage_network_users' ) ) ) : ?>
+					if ( ( empty( $this->is_self_profile ) && ( ! in_array( $user->user_login, get_super_admins() ) ) && empty( $this->subsite_activated ) ) || ( ! empty( $this->subsite_activated ) && current_user_can( 'manage_network_users' ) ) ) : ?>
+
 						<div class="misc-pub-section" id="comment-status-radio">
-							<label class="approved"><input type="radio" name="user_status" value="ham" <?php checked( bp_is_user_spammer( $user->ID ), false ); ?>><?php esc_html_e( 'Active', 'buddypress' ); ?></label><br />
-							<label class="spam"><input type="radio" name="user_status" value="spam" <?php checked( bp_is_user_spammer( $user->ID ), true ); ?>><?php esc_html_e( 'Spammer', 'buddypress' ); ?></label>
+							<label class="approved"><input type="radio" name="user_status" value="ham" <?php checked( $is_spammer, false ); ?>><?php esc_html_e( 'Active', 'buddypress' ); ?></label><br />
+							<label class="spam"><input type="radio" name="user_status" value="spam" <?php checked( $is_spammer, true ); ?>><?php esc_html_e( 'Spammer', 'buddypress' ); ?></label>
 						</div>
+
 					<?php endif ;?>
 
 					<div class="misc-pub-section curtime misc-pub-section-last">
 						<?php
+
 						// translators: Publish box date format, see http://php.net/date
 						$datef = __( 'M j, Y @ G:i', 'buddypress' );
 						$date  = date_i18n( $datef, strtotime( $user->user_registered ) );
@@ -680,9 +953,9 @@ class BP_Members_Admin {
 	 * @param WP_User $user The WP_User object to be edited.
 	 */
 	public function user_admin_spammer_metabox( $user = null ) {
-		?>
+	?>
 		<p><?php printf( __( '%s has been marked as a spammer. All BuddyPress data associated with the user has been removed', 'buddypress' ), esc_html( bp_core_get_user_displayname( $user->ID ) ) ) ;?></p>
-		<?php
+	<?php
 	}
 
 	/**
@@ -695,6 +968,7 @@ class BP_Members_Admin {
 	 */
 	public function user_admin_stats_metabox( $user = null ) {
 
+		// Bail if no user ID
 		if ( empty( $user->ID ) ) {
 			return;
 		}
@@ -712,7 +986,7 @@ class BP_Members_Admin {
 		$date  = date_i18n( $datef, strtotime( $last_active ) ); ?>
 
 		<ul>
-			<li class="bp-members-profile-stats"><?php printf( __( 'Last active: <strong>%1$s</strong>', 'buddypress' ), $date ); ?></li>
+			<li class="bp-members-profile-stats"><?php printf( __( 'Last active: %1$s', 'buddypress' ), '<strong>' . $date . '</strong>' ); ?></li>
 
 			<?php
 			// Loading other stats only if user has activated their account
@@ -736,44 +1010,90 @@ class BP_Members_Admin {
 	 * @return array Merged actions.
 	 */
 	public function row_actions( $actions = '', $user = null ) {
-		// only edit others profile
-		if ( get_current_user_id() == $user->ID ) {
-			return $actions;
+
+		// Bail if no user ID
+		if ( empty( $user->ID ) ) {
+			return;
 		}
 
-		// Prevent a regular admin to edit a super admin
-		if( in_array( $user->user_login, get_super_admins() ) ) {
-			return $actions;
+		// Setup args array
+		$args = array();
+
+		// Add the user ID if it's not for the current user
+		if ( $user->ID !== $this->current_user_id ) {
+			$args['user_id'] = $user->ID;
 		}
 
-		$edit_profile = add_query_arg( array(
-			'user_id'         => $user->ID,
-			'wp_http_referer' => urlencode( wp_unslash( $_SERVER['REQUEST_URI'] ) ),
-		), $this->edit_profile_url );
+		// Add the referer
+		$args['wp_http_referer'] = urlencode( wp_unslash( $_SERVER['REQUEST_URI'] ) );
 
-		$edit_profile_link = '<a href="' . esc_url( $edit_profile ) . '">' . esc_html__( 'Extended Profile', 'buddypress' ) . '</a>';
+		// Add the "Extended" link if the current user can edit this user
+		if ( current_user_can( 'edit_user', $user->ID ) || bp_current_user_can( 'bp_moderate' ) ) {
 
-		/**
-		 * Check the edit action is available
-		 * and preserve the order edit | profile | remove/delete
-		 */
-		if ( ! empty( $actions['edit'] ) ) {
-			$edit_action = $actions['edit'];
-			unset( $actions['edit'] );
+			// Add query args and setup the Extended link
+			$edit_profile      = add_query_arg( $args, $this->edit_profile_url );
+			$edit_profile_link = sprintf( '<a href="%1$s">%2$s</a>',  esc_url( $edit_profile ), esc_html__( 'Extended', 'buddypress' ) );
 
-			$new_edit_actions = array(
-				'edit'         => $edit_action,
-				'edit-profile' => $edit_profile_link,
-			);
-		// if not available simply add the edit profile action
-		} else {
-			$new_edit_actions = array( 'edit-profile' => $edit_profile_link );
+			/**
+			 * Check the edit action is available
+			 * and preserve the order edit | profile | remove/delete
+			 */
+			if ( ! empty( $actions['edit'] ) ) {
+				$edit_action = $actions['edit'];
+				unset( $actions['edit'] );
+
+				$new_edit_actions = array(
+					'edit'         => $edit_action,
+					'edit-profile' => $edit_profile_link,
+				);
+
+			// If not available simply add the edit profile action
+			} else {
+				$new_edit_actions = array( 'edit-profile' => $edit_profile_link );
+			}
+
+			$actions = array_merge( $new_edit_actions, $actions );
 		}
 
-		return array_merge( $new_edit_actions, $actions );
+		return $actions;
+	}
+
+	/**
+	 * Add a filter to edit profile url in WP Admin Bar
+	 *
+	 * @access public
+	 * @since BuddyPress (2.1.0)
+	 */
+	public function add_edit_profile_url_filter() {
+		add_filter( 'bp_members_edit_profile_url', array( $this, 'filter_adminbar_profile_link' ), 10, 3 );
 	}
 
-	/** Signups Management ***********************************************/
+	/**
+	 * Filter the profile url
+	 *
+	 * @access public
+	 * @since BuddyPress (2.1.0)
+	 *
+	 * @uses  user_admin_url()
+	 */
+	public function filter_adminbar_profile_link( $profile_link = '', $url = '', $user_id = 0 ) {
+		if ( ! is_super_admin( $user_id ) && is_admin() ) {
+			$profile_link = user_admin_url( 'profile.php' );
+		}
+		return $profile_link;
+	}
+
+	/**
+	 * Remove the filter to edit profile url in WP Admin Bar
+	 *
+	 * @access public
+	 * @since BuddyPress (2.1.0)
+	 */
+	public function remove_edit_profile_url_filter() {
+		remove_filter( 'bp_members_edit_profile_url', array( $this, 'filter_adminbar_profile_link' ), 10, 3 );
+	}
+
+	/** Signups Management ****************************************************/
 
 	/**
 	 * Display the admin preferences about signups pagination.
@@ -815,21 +1135,29 @@ class BP_Members_Admin {
 		global $wpdb;
 
 		// Bail if this is an ajax request
-		if ( defined( 'DOING_AJAX' ) )
+		if ( defined( 'DOING_AJAX' ) ) {
 			return;
+		}
 
+		// Bail if updating BuddyPress
 		if ( bp_is_update() ) {
 			return;
 		}
 
-		if ( ! function_exists( 'get_current_screen' ) ) {
+		// Bail if there is no current admin screen
+		if ( ! function_exists( 'get_current_screen' ) || ! get_current_screen() ) {
 			return;
 		}
 
-		if ( $this->users_page != get_current_screen()->id ) {
+		// Get current screen
+		$current_screen = get_current_screen();
+
+		// Bail if not on a users page
+		if ( ! isset( $current_screen->id ) || $this->users_page !== $current_screen->id ) {
 			return;
 		}
 
+		// Bail if already querying by an existing role
 		if ( ! empty( $query->query_vars['role'] ) ) {
 			return;
 		}
@@ -846,18 +1174,20 @@ class BP_Members_Admin {
 	 * @return array The views with the signup view added.
 	 */
 	public function signup_filter_view( $views = array() ) {
-		$class = '';
 
-		$signups = BP_Signup::count_signups();
-
-		// Remove the 'current' class from All if we're on the signups
-		// view
+		// Remove the 'current' class from All if we're on the signups view
 		if ( $this->signups_page == get_current_screen()->id ) {
 			$views['all'] = str_replace( 'class="current"', '', $views['all'] );
-			$class = ' class="current"';
+			$class        = 'current';
+		} else {
+			$class        = '';
 		}
 
-		$views['registered'] = '<a href="' . add_query_arg( 'page', 'bp-signups', bp_get_admin_url( 'users.php' ) ) . '"' . $class . '>' . sprintf( _x( 'Pending <span class="count">(%s)</span>', 'signup users', 'buddypress' ), number_format_i18n( $signups ) ) . '</a>';
+		$signups = BP_Signup::count_signups();
+		$url     = add_query_arg( 'page', 'bp-signups', bp_get_admin_url( 'users.php' ) );
+		$text    = sprintf( _x( 'Pending %s', 'signup users', 'buddypress' ), '<span class="count">(' . number_format_i18n( $signups ) . ')</span>' );
+
+		$views['registered'] = sprintf( '<a href="%1$s" class="%2$s">%3$s</a>', $url, $class, $text );
 
 		return $views;
 	}
@@ -900,7 +1230,7 @@ class BP_Members_Admin {
 
 		// Build redirection URL
 		$redirect_to = remove_query_arg( array( 'action', 'error', 'updated', 'activated', 'notactivated', 'deleted', 'notdeleted', 'resent', 'notresent', 'do_delete', 'do_resend', 'do_activate', '_wpnonce', 'signup_ids' ), $_SERVER['REQUEST_URI'] );
-		$doaction = bp_admin_list_table_current_bulk_action();
+		$doaction    = bp_admin_list_table_current_bulk_action();
 
 		// Call an action for plugins to hook in early
 		do_action( 'bp_signups_admin_load', $doaction, $_REQUEST );
@@ -909,7 +1239,7 @@ class BP_Members_Admin {
 		$allowed_actions = apply_filters( 'bp_signups_admin_allowed_actions', array( 'do_delete', 'do_activate', 'do_resend' ) );
 
 		// Prepare the display of the Community Profile screen
-		if ( ! in_array( $doaction, $allowed_actions ) || -1 == $doaction ) {
+		if ( ! in_array( $doaction, $allowed_actions ) || ( -1 == $doaction ) ) {
 
 			if ( bp_core_do_network_admin() ) {
 				$bp_members_signup_list_table = self::get_list_table_class( 'BP_Members_MS_List_Table', 'ms-users' );
@@ -953,6 +1283,7 @@ class BP_Members_Admin {
 
 			// Handle resent activation links
 			if ( 'do_resend' == $doaction ) {
+
 				// nonce check
 				check_admin_referer( 'signups_resend' );
 
@@ -979,6 +1310,7 @@ class BP_Members_Admin {
 
 			// Handle activated accounts
 			} else if ( 'do_activate' == $doaction ) {
+
 				// nonce check
 				check_admin_referer( 'signups_activate' );
 
@@ -1005,6 +1337,7 @@ class BP_Members_Admin {
 
 			// Handle sign-ups delete
 			} else if ( 'do_delete' == $doaction ) {
+
 				// nonce check
 				check_admin_referer( 'signups_delete' );
 
@@ -1046,40 +1379,39 @@ class BP_Members_Admin {
 	 * @since BuddyPress (2.0.0)
 	 */
 	public function signups_display_errors() {
+
+		// Look for sign-up errors
+		$errors = get_transient( '_bp_admin_signups_errors' );
+
 		// Bail if no activation errors
-		if ( ! $errors = get_transient( '_bp_admin_signups_errors' ) ) {
+		if ( empty( $errors ) ) {
 			return;
 		}
 
-		foreach ( $errors as $error ) {
-			?>
+		// Loop through errors and display them
+		foreach ( $errors as $error ) : ?>
+
 			<li><?php echo esc_html( $error[0] );?>: <?php echo esc_html( $error[1] );?></li>
-			<?php
-		}
+
+		<?php endforeach;
 
 		// Delete the redirect transient
 		delete_transient( '_bp_admin_signups_errors' );
 	}
 
 	/**
-	 * Signups admin page router.
+	 * Get admin notice when viewing the sign-up page
 	 *
-	 * Depending on the context, display
-	 * - the list of signups
-	 * - or the delete confirmation screen
-	 * - or the activate confirmation screen
-	 * - or the "resend" email confirmation screen
-	 *
-	 * Also prepare the admin notices.
+	 * @since BuddyPress (2.1.0)
 	 *
-	 * @since BuddyPress (2.0.0)
+	 * @return array
 	 */
-	public function signups_admin() {
-		$doaction = bp_admin_list_table_current_bulk_action();
+	private function get_signup_notice() {
 
-		// Prepare notices for admin
+		// Setup empty notice for return value
 		$notice = array();
 
+		// Updates
 		if ( ! empty( $_REQUEST['updated'] ) ) {
 			switch ( $_REQUEST['updated'] ) {
 				case 'resent':
@@ -1186,7 +1518,7 @@ class BP_Members_Admin {
 			}
 		}
 
-		// Process error messages
+		// Errors
 		if ( ! empty( $_REQUEST['error'] ) ) {
 			switch ( $_REQUEST['error'] ) {
 				case 'do_resend':
@@ -1212,18 +1544,50 @@ class BP_Members_Admin {
 			}
 		}
 
+		return $notice;
+	}
+
+	/**
+	 * Signups admin page router.
+	 *
+	 * Depending on the context, display
+	 * - the list of signups
+	 * - or the delete confirmation screen
+	 * - or the activate confirmation screen
+	 * - or the "resend" email confirmation screen
+	 *
+	 * Also prepare the admin notices.
+	 *
+	 * @since BuddyPress (2.0.0)
+	 */
+	public function signups_admin() {
+		$doaction = bp_admin_list_table_current_bulk_action();
+
+		// Prepare notices for admin
+		$notice = $this->get_signup_notice();
+
 		// Display notices
 		if ( ! empty( $notice ) ) :
 			if ( 'updated' === $notice['class'] ) : ?>
+
 				<div id="message" class="<?php echo esc_attr( $notice['class'] ); ?>">
+
 			<?php else: ?>
+
 				<div class="<?php echo esc_attr( $notice['class'] ); ?>">
+
 			<?php endif; ?>
+
 				<p><?php echo $notice['message']; ?></p>
+
 				<?php if ( ! empty( $_REQUEST['notactivated'] ) || ! empty( $_REQUEST['notdeleted'] ) || ! empty( $_REQUEST['notsent'] ) ) :?>
+
 					<ul><?php $this->signups_display_errors();?></ul>
+
 				<?php endif ;?>
+
 			</div>
+
 		<?php endif;
 
 		// Show the proper screen
@@ -1291,14 +1655,17 @@ class BP_Members_Admin {
 
 		<div class="wrap">
 			<?php screen_icon( 'users' ); ?>
-			<h2>
-				<?php
-				_e( 'Users', 'buddypress' );
-				if ( current_user_can( 'create_users' ) ) { ?>
+			<h2><?php _e( 'Users', 'buddypress' ); ?>
+
+				<?php if ( current_user_can( 'create_users' ) ) : ?>
+
 					<a href="user-new.php" class="add-new-h2"><?php echo esc_html_x( 'Add New', 'user', 'buddypress' ); ?></a>
-				<?php } elseif ( is_multisite() && current_user_can( 'promote_users' ) ) { ?>
+
+				<?php elseif ( is_multisite() && current_user_can( 'promote_users' ) ) : ?>
+
 					<a href="user-new.php" class="add-new-h2"><?php echo esc_html_x( 'Add Existing', 'user', 'buddypress' ); ?></a>
-				<?php }
+
+				<?php endif;
 
 				if ( $usersearch ) {
 					printf( '<span class="subtitle">' . __( 'Search results for &#8220;%s&#8221;', 'buddypress' ) . '</span>', esc_html( $usersearch ) );
@@ -1312,7 +1679,7 @@ class BP_Members_Admin {
 
 			<form id="bp-signups-search-form" action="<?php echo esc_url( $search_form_url ) ;?>">
 				<input type="hidden" name="page" value="<?php echo esc_attr( $plugin_page ); ?>" />
-				<?php $bp_members_signup_list_table->search_box( __( 'Search Pending Accounts', 'buddypress' ), 'bp-signups' ); ?>
+				<?php $bp_members_signup_list_table->search_box( __( 'Search Pending Users', 'buddypress' ), 'bp-signups' ); ?>
 			</form>
 
 			<form id="bp-signups-form" action="<?php echo esc_url( $form_url );?>" method="post">
@@ -1400,29 +1767,35 @@ class BP_Members_Admin {
 
 			<ol class="bp-signups-list">
 			<?php foreach ( $signups as $signup ) :
-				$last_notified = mysql2date( 'Y/m/d g:i:s a', $signup->date_sent )
-			?>
+
+				$last_notified = mysql2date( 'Y/m/d g:i:s a', $signup->date_sent ); ?>
 
 				<li>
 					<?php echo esc_html( $signup->user_name ) ?> - <?php echo sanitize_email( $signup->user_email );?>
 
 					<?php if ( 'resend' == $action ) : ?>
+
 						<p class="description">
 							<?php printf( esc_html__( 'Last notified: %s', 'buddypress'), $last_notified ) ;?>
 
 							<?php if ( ! empty( $signup->recently_sent ) ) : ?>
+
 								<span class="attention wp-ui-text-notification"> <?php esc_html_e( '(less than 24 hours ago)', 'buddypress' ); ?></span>
+
 							<?php endif; ?>
 						</p>
 
 					<?php endif; ?>
+
 				</li>
 
 			<?php endforeach; ?>
 			</ol>
 
-			<?php if ( 'resend' != $action ) : ?>
+			<?php if ( 'delete' === $action ) : ?>
+
 				<p><strong><?php esc_html_e( 'This action cannot be undone.', 'buddypress' ) ?></strong></p>
+
 			<?php endif ; ?>
 
 			<a class="button-primary" href="<?php echo esc_url( $action_url ); ?>"><?php esc_html_e( 'Confirm', 'buddypress' ); ?></a>
diff --git a/wp-content/plugins/buddypress/bp-members/bp-members-adminbar.php b/wp-content/plugins/buddypress/bp-members/bp-members-adminbar.php
index f0897b9b2..591667921 100644
--- a/wp-content/plugins/buddypress/bp-members/bp-members-adminbar.php
+++ b/wp-content/plugins/buddypress/bp-members/bp-members-adminbar.php
@@ -3,7 +3,7 @@
 /**
  * BuddyPress Members Toolbar
  *
- * Handles the member functions related to the WordPress Toolbar
+ * Handles the member functions related to the WordPress Toolbar.
  *
  * @package BuddyPress
  * @subpackage MembersAdminBar
@@ -15,7 +15,8 @@ if ( !defined( 'ABSPATH' ) ) exit;
 /**
  * Add the "My Account" menu and all submenus.
  *
- * @since BuddyPress (1.6)
+ * @since BuddyPress (1.6.0)
+ *
  * @todo Deprecate WP 3.2 Toolbar compatibility when we drop 3.2 support
  */
 function bp_members_admin_bar_my_account_menu() {
@@ -50,7 +51,7 @@ function bp_members_admin_bar_my_account_menu() {
 		$wp_admin_bar->add_menu( array(
 			'id'    => 'bp-login',
 			'title' => __( 'Log in', 'buddypress' ),
-			'href'  => wp_login_url( wp_guess_url() )
+			'href'  => wp_login_url( bp_get_requested_url() )
 		) );
 
 		// Sign up
@@ -66,10 +67,9 @@ function bp_members_admin_bar_my_account_menu() {
 add_action( 'bp_setup_admin_bar', 'bp_members_admin_bar_my_account_menu', 4 );
 
 /**
- * Adds the User Admin top-level menu to user pages
+ * Add the User Admin top-level menu to user pages.
  *
- * @package BuddyPress
- * @since BuddyPress (1.5)
+ * @since BuddyPress (1.5.0)
  */
 function bp_members_admin_bar_user_admin_menu() {
 	global $bp, $wp_admin_bar;
@@ -106,7 +106,7 @@ function bp_members_admin_bar_user_admin_menu() {
 			$wp_admin_bar->add_menu( array(
 				'parent' => $bp->user_admin_menu_id,
 				'id'     => $bp->user_admin_menu_id . '-change-avatar',
-				'title'  => __( "Edit Avatar", 'buddypress' ),
+				'title'  => __( "Edit Profile Photo", 'buddypress' ),
 				'href'   => bp_get_members_component_link( 'profile', 'change-avatar' )
 			) );
 		}
@@ -136,10 +136,9 @@ function bp_members_admin_bar_user_admin_menu() {
 add_action( 'admin_bar_menu', 'bp_members_admin_bar_user_admin_menu', 99 );
 
 /**
- * Build the "Notifications" dropdown
+ * Build the "Notifications" dropdown.
  *
- * @package BuddyPress
- * @since BuddyPress (1.5)
+ * @since BuddyPress (1.5.0)
  */
 function bp_members_admin_bar_notifications_menu() {
 
@@ -153,9 +152,9 @@ function bp_members_admin_bar_notifications_menu() {
 add_action( 'admin_bar_menu', 'bp_members_admin_bar_notifications_menu', 90 );
 
 /**
- * Remove rogue WP core edit menu when viewing a single user
+ * Remove rogue WP core Edit menu when viewing a single user.
  *
- * @since BuddyPress (1.6)
+ * @since BuddyPress (1.6.0)
  */
 function bp_members_remove_edit_page_menu() {
 	if ( bp_is_user() ) {
diff --git a/wp-content/plugins/buddypress/bp-members/bp-members-classes.php b/wp-content/plugins/buddypress/bp-members/bp-members-classes.php
index b986211b4..ca74e5ed5 100644
--- a/wp-content/plugins/buddypress/bp-members/bp-members-classes.php
+++ b/wp-content/plugins/buddypress/bp-members/bp-members-classes.php
@@ -150,9 +150,8 @@ class BP_Signup {
 
 			// Search terms
 			if ( ! empty( $r['usersearch'] ) ) {
-				$search_terms_clean = esc_sql( esc_sql( $r['usersearch'] ) );
-				$search_terms_clean = like_escape( $search_terms_clean );
-				$sql['where'][]     = "( user_login LIKE '%" . $search_terms_clean . "%' OR user_email LIKE '%" . $search_terms_clean . "%' OR meta LIKE '%" . $search_terms_clean . "%' )";
+				$search_terms_like = '%' . bp_esc_like( $r['usersearch'] ) . '%';
+				$sql['where'][]    = $wpdb->prepare( "( user_login LIKE %s OR user_email LIKE %s OR meta LIKE %s )", $search_terms_like, $search_terms_like, $search_terms_like );
 			}
 
 			// Activation key
@@ -208,7 +207,7 @@ class BP_Signup {
 			$diff    = $now - $sent_at;
 
 			/**
-			 * add a boolean in case the last time an activation link 
+			 * add a boolean in case the last time an activation link
 			 * has been sent happened less than a day ago
 			 */
 			if ( $diff < 1 * DAY_IN_SECONDS ) {
@@ -472,8 +471,8 @@ class BP_Signup {
 	 *
 	 * @since BuddyPress (2.0.0)
 	 *
-	 * @param array $signup_ids single id or list of ids to resend
-	 * @return array the results
+	 * @param array $signup_ids Single ID or list of IDs to resend.
+	 * @return array
 	 */
 	public static function resend( $signup_ids = array() ) {
 		if ( empty( $signup_ids ) || ! is_array( $signup_ids ) ) {
@@ -539,8 +538,8 @@ class BP_Signup {
 	 *
 	 * @since BuddyPress (2.0.0)
 	 *
-	 * @param array $signup_ids Single id or list of ids to resend.
-	 * @return array the results
+	 * @param array $signup_ids Single ID or list of IDs to activate.
+	 * @return array
 	 */
 	public static function activate( $signup_ids = array() ) {
 		if ( empty( $signup_ids ) || ! is_array( $signup_ids ) ) {
@@ -599,8 +598,8 @@ class BP_Signup {
 	 *
 	 * @since BuddyPress (2.0.0)
 	 *
-	 * @param array $signup_ids single id or list of ids to resend
-	 * @return array the results
+	 * @param array $signup_ids Single ID or list of IDs to delete.
+	 * @return array
 	 */
 	public static function delete( $signup_ids = array() ) {
 		global $wpdb;
diff --git a/wp-content/plugins/buddypress/bp-members/bp-members-filters.php b/wp-content/plugins/buddypress/bp-members/bp-members-filters.php
index 588916488..6d236015c 100644
--- a/wp-content/plugins/buddypress/bp-members/bp-members-filters.php
+++ b/wp-content/plugins/buddypress/bp-members/bp-members-filters.php
@@ -3,7 +3,7 @@
 /**
  * BuddyPress Members Filters
  *
- * Member specific filters
+ * Filters specific to the Members component.
  *
  * @package BuddyPress
  * @subpackage MembersFilters
@@ -13,19 +13,20 @@
 if ( !defined( 'ABSPATH' ) ) exit;
 
 /**
- * Escape commonly used fullname output functions
+ * Escape commonly used fullname output functions.
  */
 add_filter( 'bp_displayed_user_fullname',    'esc_html' );
 add_filter( 'bp_get_loggedin_user_fullname', 'esc_html' );
 
 /**
- * Load additional sign-up sanitization filters on bp_loaded. These are used
- * to prevent XSS in the BuddyPress sign-up process. You can unhook these to
- * allow for customization of your registration fields, however it is highly
- * recommended that you leave these in place for the safety of your network.
+ * Load additional sign-up sanitization filters on bp_loaded.
  *
- * @since BuddyPress (1.5)
- * @uses add_filter()
+ * These are used to prevent XSS in the BuddyPress sign-up process. You can
+ * unhook these to allow for customization of your registration fields;
+ * however, it is highly recommended that you leave these in place for the
+ * safety of your network.
+ *
+ * @since BuddyPress (1.5.0)
  */
 function bp_members_signup_sanitization() {
 
@@ -53,12 +54,49 @@ function bp_members_signup_sanitization() {
 add_action( 'bp_loaded', 'bp_members_signup_sanitization' );
 
 /**
- * Filter the user profile URL to point to BuddyPress profile edit
+ * Make sure the username is not the blog slug in case of root profile & subdirectory blog
+ *
+ * If BP_ENABLE_ROOT_PROFILES is defined & multisite config is set to subdirectories,
+ * then there is a chance site.url/username == site.url/blogslug. If so, user's profile
+ * is not reachable, instead the blog is displayed. This filter makes sure the signup username
+ * is not the same than the blog slug for this particular config.
+ *
+ * @since  BuddyPress (2.1.0)
+ * @param  array $illegal_names
+ * @return array $illegal_names
+ */
+function bp_members_signup_with_subdirectory_blog( $illegal_names = array() ) {
+	if ( ! bp_core_enable_root_profiles() ) {
+		return $illegal_names;
+	}
+
+	if ( is_network_admin() && isset( $_POST['blog'] ) ) {
+		$blog = $_POST['blog'];
+		$domain = '';
+
+		if ( preg_match( '|^([a-zA-Z0-9-])$|', $blog['domain'] ) ) {
+			$domain = strtolower( $blog['domain'] );
+		}
+
+		if ( username_exists( $domain ) ) {
+			$illegal_names[] = $domain;
+		}
+
+	} else {
+		$illegal_names[] = buddypress()->signup->username;
+	}
+
+	return $illegal_names;
+}
+add_filter( 'subdirectory_reserved_names', 'bp_members_signup_with_subdirectory_blog', 10, 1 );
+
+/**
+ * Filter the user profile URL to point to BuddyPress profile edit.
  *
- * @since BuddyPress 1.6
+ * @since BuddyPress (1.6.0)
  *
- * @param string $url
- * @param int $user_id
+ * @param string $url WP profile edit URL.
+ * @param int $user_id ID of the user.
  * @param string $scheme
  * @return string
  */
diff --git a/wp-content/plugins/buddypress/bp-members/bp-members-functions.php b/wp-content/plugins/buddypress/bp-members/bp-members-functions.php
index ad172a412..6a6de2733 100644
--- a/wp-content/plugins/buddypress/bp-members/bp-members-functions.php
+++ b/wp-content/plugins/buddypress/bp-members/bp-members-functions.php
@@ -13,12 +13,11 @@
 if ( !defined( 'ABSPATH' ) ) exit;
 
 /**
- * Checks $bp pages global and looks for directory page
+ * Check for the existence of a Members directory page.
  *
- * @since BuddyPress (1.5)
+ * @since BuddyPress (1.5.0)
  *
- * @global BuddyPress $bp The one true BuddyPress instance
- * @return bool True if set, False if empty
+ * @return bool True if found, otherwise false.
  */
 function bp_members_has_directory() {
 	global $bp;
@@ -27,17 +26,18 @@ function bp_members_has_directory() {
 }
 
 /**
- * Define the slugs used for BuddyPress pages, based on the slugs of the WP pages used.
- * These can be overridden manually by defining these slugs in wp-config.php.
+ * Define the slug constants for the Members component.
  *
- * The fallback values are only used during initial BP page creation, when no slugs have been
- * explicitly defined.
+ * Handles the three slug constants used in the Members component -
+ * BP_MEMBERS_SLUG, BP_REGISTER_SLUG, and BP_ACTIVATION_SLUG. If these
+ * constants are not overridden in wp-config.php or bp-custom.php, they are
+ * defined here to match the slug of the corresponding WP pages.
  *
- * @package BuddyPress Core Core
- * @global BuddyPress $bp The one true BuddyPress instance
+ * In general, fallback values are only used during initial BP page creation,
+ * when no slugs have been explicitly defined.
  */
 function bp_core_define_slugs() {
-	global $bp;
+	$bp = buddypress();
 
 	// No custom members slug
 	if ( !defined( 'BP_MEMBERS_SLUG' ) ) {
@@ -69,18 +69,35 @@ function bp_core_define_slugs() {
 add_action( 'bp_setup_globals', 'bp_core_define_slugs', 11 );
 
 /**
- * Return an array of users IDs based on the parameters passed.
+ * Fetch an array of users based on the parameters passed.
  *
  * Since BuddyPress 1.7, bp_core_get_users() uses BP_User_Query. If you
  * need backward compatibility with BP_Core_User::get_users(), filter the
  * bp_use_legacy_user_query value, returning true.
  *
- * @package BuddyPress Core
+ * @param array $args {
+ *     Array of arguments. All are optional. See {@link BP_User_Query} for
+ *     a more complete description of arguments.
+ *     @type string $type Sort order. Default: 'active'.
+ *     @type int $user_id Limit results to friends of a user. Default: false.
+ *     @type mixed $exclude IDs to exclude from results. Default: false.
+ *     @type string $search_terms Limit to users matching search terms. Default: false.
+ *     @type string $meta_key Limit to users with a meta_key. Default: false.
+ *     @type string $meta_value Limit to users with a meta_value (with
+ *           meta_key). Default: false.
+ *     @type mixed $include Limit results by user IDs. Default: false.
+ *     @type int $per_page Results per page. Default: 20.
+ *     @type int $page Page of results. Default: 1.
+ *     @type bool $populate_extras Fetch optional extras. Default: true.
+ *     @type string|bool $count_total How to do total user count.
+ *           Default: 'count_query'.
+ * }
+ * @return array
  */
 function bp_core_get_users( $args = '' ) {
 
 	// Parse the user query arguments
-	$params = wp_parse_args( $args, array(
+	$r = bp_parse_args( $args, array(
 		'type'            => 'active',     // active, newest, alphabetical, random or popular
 		'user_id'         => false,        // Pass a user_id to limit to only friend connections for this user
 		'exclude'         => false,        // Users to exclude from results
@@ -92,18 +109,28 @@ function bp_core_get_users( $args = '' ) {
 		'page'            => 1,            // The page to return if limiting per page
 		'populate_extras' => true,         // Fetch the last active, where the user is a friend, total friend count, latest update
 		'count_total'     => 'count_query' // What kind of total user count to do, if any. 'count_query', 'sql_calc_found_rows', or false
-	) );
+	), 'core_get_users' );
 
 	// For legacy users. Use of BP_Core_User::get_users() is deprecated.
-	if ( apply_filters( 'bp_use_legacy_user_query', false, __FUNCTION__, $params ) ) {
-		extract( $params, EXTR_SKIP );
-		$retval = BP_Core_User::get_users( $type, $per_page, $page, $user_id, $include, $search_terms, $populate_extras, $exclude, $meta_key, $meta_value );
+	if ( apply_filters( 'bp_use_legacy_user_query', false, __FUNCTION__, $r ) ) {
+		$retval = BP_Core_User::get_users(
+			$r['type'],
+			$r['per_page'],
+			$r['page'],
+			$r['user_id'],
+			$r['include'],
+			$r['search_terms'],
+			$r['populate_extras'],
+			$r['exclude'],
+			$r['meta_key'],
+			$r['meta_value']
+		);
 
 	// Default behavior as of BuddyPress 1.7
 	} else {
 
 		// Get users like we were asked to do...
-		$users = new BP_User_Query( $params );
+		$users = new BP_User_Query( $r );
 
 		// ...but reformat the results to match bp_core_get_users() behavior.
 		$retval = array(
@@ -112,17 +139,17 @@ function bp_core_get_users( $args = '' ) {
 		);
 	}
 
-	return apply_filters( 'bp_core_get_users', $retval, $params );
+	return apply_filters( 'bp_core_get_users', $retval, $r );
 }
 
 /**
- * Returns the domain for the passed user: e.g. http://domain.com/members/andy/
+ * Return the domain for the passed user: e.g. http://domain.com/members/andy/.
  *
- * @package BuddyPress Core
- * @global $current_user WordPress global variable containing current logged in user information
  * @param int $user_id The ID of the user.
+ * @param string $user_nicename Optional. user_nicename of the user.
+ * @param string $user_login Optional. user_login of the user.
  */
-function bp_core_get_user_domain( $user_id, $user_nicename = false, $user_login = false ) {
+function bp_core_get_user_domain( $user_id = 0, $user_nicename = false, $user_login = false ) {
 
 	if ( empty( $user_id ) ) {
 		return;
@@ -147,13 +174,13 @@ function bp_core_get_user_domain( $user_id, $user_nicename = false, $user_login
 /**
  * Fetch everything in the wp_users table for a user, without any usermeta.
  *
- * @package BuddyPress Core
  * @param int $user_id The ID of the user.
- * @uses BP_Core_User::get_core_userdata() Performs the query.
+ * @return array
  */
-function bp_core_get_core_userdata( $user_id ) {
-	if ( empty( $user_id ) )
+function bp_core_get_core_userdata( $user_id = 0 ) {
+	if ( empty( $user_id ) ) {
 		return false;
+	}
 
 	if ( !$userdata = wp_cache_get( 'bp_core_userdata_' . $user_id, 'bp' ) ) {
 		$userdata = BP_Core_User::get_core_userdata( $user_id );
@@ -163,57 +190,64 @@ function bp_core_get_core_userdata( $user_id ) {
 }
 
 /**
- * Returns the user id for the user that is currently being displayed.
- * eg: http://andy.domain.com/ or http://domain.com/andy/
+ * Return the ID of a user, based on user_login.
+ *
+ * No longer used.
  *
- * @package BuddyPress Core
- * @uses bp_core_get_userid_from_user_login() Returns the user id for the username passed
- * @return int The user id for the user that is currently being displayed, return zero if this is not a user home and just a normal blog.
+ * @todo Deprecate.
+ *
+ * @param string $user_login user_login of the user being queried.
+ * @return int
  */
 function bp_core_get_displayed_userid( $user_login ) {
 	return apply_filters( 'bp_core_get_displayed_userid', bp_core_get_userid( $user_login ) );
 }
 
 /**
- * Returns the user_id for a user based on their username.
+ * Return the user ID based on a user's user_login.
+ *
+ * @since BuddyPress (1.0.0)
  *
- * @package BuddyPress Core
- * @param string $username Username to check.
- * @global $wpdb WordPress DB access object.
- * @return int|bool The ID of the matched user, or false.
+ * @param string $username user_login to check.
+ * @return int|null The ID of the matched user on success, null on failure.
  */
-function bp_core_get_userid( $username ) {
-	global $wpdb;
-
-	if ( empty( $username ) )
+function bp_core_get_userid( $username = '' ) {
+	if ( empty( $username ) ) {
 		return false;
+	}
 
-	return apply_filters( 'bp_core_get_userid', $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM {$wpdb->users} WHERE user_login = %s", $username ) ), $username );
+	$user = get_user_by( 'login', $username );
+
+	return apply_filters( 'bp_core_get_userid', ! empty( $user->ID ) ? $user->ID : NULL, $username );
 }
 
 /**
- * Returns the user_id for a user based on their user_nicename.
+ * Return the user ID based on a user's user_nicename.
+ *
+ * @since BuddyPress (1.2.3)
  *
- * @package BuddyPress Core
- * @param string $username Username to check.
- * @global $wpdb WordPress DB access object.
- * @return int|bool The ID of the matched user, or false.
+ * @param string $user_nicename user_nicename to check.
+ * @return int|null The ID of the matched user on success, null on failure.
  */
-function bp_core_get_userid_from_nicename( $user_nicename ) {
-	global $wpdb;
-
-	if ( empty( $user_nicename ) )
+function bp_core_get_userid_from_nicename( $user_nicename = '' ) {
+	if ( empty( $user_nicename ) ) {
 		return false;
+	}
+
+	$user = get_user_by( 'slug', $user_nicename );
 
-	return apply_filters( 'bp_core_get_userid_from_nicename', $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM {$wpdb->users} WHERE user_nicename = %s", $user_nicename ) ), $user_nicename );
+	return apply_filters( 'bp_core_get_userid_from_nicename', ! empty( $user->ID ) ? $user->ID : NULL, $user_nicename );
 }
 
 /**
- * Returns the username for a user based on their user id.
+ * Return the username for a user based on their user id.
  *
- * @package BuddyPress Core
- * @param int $uid User ID to check.
- * @uses bp_core_get_core_userdata() Fetch the userdata for a user ID
+ * This function is sensitive to the BP_ENABLE_USERNAME_COMPATIBILITY_MODE,
+ * so it will return the user_login or user_nicename as appropriate.
+ *
+ * @param int $user_id User ID to check.
+ * @param string $user_nicename Optional. user_nicename of user being checked.
+ * @param string $user_login Optional. user_login of user being checked.
  * @return string|bool The username of the matched user, or false.
  */
 function bp_core_get_username( $user_id = 0, $user_nicename = false, $user_login = false ) {
@@ -280,20 +314,20 @@ function bp_core_get_username( $user_id = 0, $user_nicename = false, $user_login
 }
 
 /**
- * Returns the user_nicename for a user based on their user_id. This should be
- * used for linking to user profiles and anywhere else a sanitized and unique
- * slug to a user is needed.
+ * Return the user_nicename for a user based on their user_id.
  *
- * @since BuddyPress (1.5)
+ * This should be used for linking to user profiles and anywhere else a
+ * sanitized and unique slug to a user is needed.
  *
- * @package BuddyPress Core
- * @param int $uid User ID to check.
- * @global $userdata WordPress user data for the current logged in user.
- * @uses get_userdata() WordPress function to fetch the userdata for a user ID
+ * @since BuddyPress (1.5.0)
+ *
+ * @todo Refactor to use a WP core function, if possible.
+ *
+ * @param int $user_id User ID to check.
  * @return string|bool The username of the matched user, or false.
  */
 function bp_members_get_user_nicename( $user_id ) {
-	global $bp;
+	$bp = buddypress();
 
 	if ( !$user_nicename = wp_cache_get( 'bp_members_user_nicename_' . $user_id, 'bp' ) ) {
 		$update_cache = true;
@@ -329,30 +363,33 @@ function bp_members_get_user_nicename( $user_id ) {
 	}
 
 	// Add this to cache
-	if ( true == $update_cache && !empty( $user_nicename ) )
+	if ( true == $update_cache && !empty( $user_nicename ) ) {
 		wp_cache_set( 'bp_members_user_nicename_' . $user_id, $user_nicename, 'bp' );
+	}
 
 	return apply_filters( 'bp_members_get_user_nicename', $user_nicename );
 }
 
 /**
- * Returns the email address for the user based on user ID
+ * Return the email address for the user based on user ID.
  *
- * @package BuddyPress Core
  * @param int $uid User ID to check.
- * @uses get_userdata() WordPress function to fetch the userdata for a user ID
- * @return string The email for the matched user. Empty string if no user matched the $uid.
+ * @return string The email for the matched user. Empty string if no user
+ *         matched the $uid.
  */
 function bp_core_get_user_email( $uid ) {
 
 	if ( !$email = wp_cache_get( 'bp_user_email_' . $uid, 'bp' ) ) {
+
 		// User exists
-		if ( $ud = bp_core_get_core_userdata( $uid ) )
+		$ud = bp_core_get_core_userdata( $uid );
+		if ( ! empty( $ud ) ) {
 			$email = $ud->user_email;
 
 		// User was deleted
-		else
+		} else {
 			$email = '';
+		}
 
 		wp_cache_set( 'bp_user_email_' . $uid, $email, 'bp' );
 	}
@@ -361,30 +398,38 @@ function bp_core_get_user_email( $uid ) {
 }
 
 /**
- * Returns a HTML formatted link for a user with the user's full name as the link text.
+ * Return a HTML formatted link for a user with the user's full name as the link text.
+ *
  * eg: <a href="http://andy.domain.com/">Andy Peatling</a>
+ *
  * Optional parameters will return just the name or just the URL.
  *
  * @param int $user_id User ID to check.
- * @param bool $no_anchor Disable URL and HTML and just return full name. Default false.
- * @param bool $just_link Disable full name and HTML and just return the URL text. Default false.
- * @return string|bool The link text based on passed parameters, or false on no match.
- * @todo This function needs to be cleaned up or split into separate functions
+ * @param bool $no_anchor Disable URL and HTML and just return full name.
+ *        Default: false.
+ * @param bool $just_link Disable full name and HTML and just return the URL
+ *        text. Default false.
+ * @return string|bool The link text based on passed parameters, or false on
+ *         no match.
  */
 function bp_core_get_userlink( $user_id, $no_anchor = false, $just_link = false ) {
 	$display_name = bp_core_get_user_displayname( $user_id );
 
-	if ( empty( $display_name ) )
+	if ( empty( $display_name ) ) {
 		return false;
+	}
 
-	if ( $no_anchor )
+	if ( ! empty( $no_anchor ) ) {
 		return $display_name;
+	}
 
-	if ( !$url = bp_core_get_user_domain( $user_id ) )
+	if ( !$url = bp_core_get_user_domain( $user_id ) ) {
 		return false;
+	}
 
-	if ( $just_link )
+	if ( ! empty( $just_link ) ) {
 		return $url;
+	}
 
 	return apply_filters( 'bp_core_get_userlink', '<a href="' . $url . '" title="' . $display_name . '">' . $display_name . '</a>', $user_id );
 }
@@ -480,7 +525,6 @@ function bp_core_get_user_displaynames( $user_ids ) {
  *         user not found.
  */
 function bp_core_get_user_displayname( $user_id_or_username ) {
-	global $bp;
 
 	$fullname = '';
 
@@ -514,12 +558,9 @@ add_filter( 'bp_core_get_user_displayname', 'stripslashes'  );
 add_filter( 'bp_core_get_user_displayname', 'esc_html'      );
 
 /**
- * Returns the user link for the user based on user email address
+ * Return the user link for the user based on user email address.
  *
- * @package BuddyPress Core
  * @param string $email The email address for the user.
- * @uses bp_core_get_userlink() BuddyPress function to get a userlink by user ID.
- * @uses get_user_by() WordPress function to get userdata via an email address
  * @return string The link to the users home base. False on no match.
  */
 function bp_core_get_userlink_by_email( $email ) {
@@ -528,24 +569,29 @@ function bp_core_get_userlink_by_email( $email ) {
 }
 
 /**
- * Returns the user link for the user based on the supplied identifier
+ * Return the user link for the user based on the supplied identifier.
  *
- * @param string $username If BP_ENABLE_USERNAME_COMPATIBILITY_MODE is set, this will be user_login, otherwise it will be user_nicename.
- * @return string|bool The link to the users home base, false on no match.
+ * @param string $username If BP_ENABLE_USERNAME_COMPATIBILITY_MODE is set,
+ *        this should be user_login, otherwise it should be user_nicename.
+ * @return string|bool The link to the user's domain, false on no match.
  */
 function bp_core_get_userlink_by_username( $username ) {
-	if ( bp_is_username_compatibility_mode() )
+	if ( bp_is_username_compatibility_mode() ) {
 		$user_id = bp_core_get_userid( $username );
-	else
+	} else {
 		$user_id = bp_core_get_userid_from_nicename( $username );
+	}
 
 	return apply_filters( 'bp_core_get_userlink_by_username', bp_core_get_userlink( $user_id, false, false, true ) );
 }
 
 /**
- * Returns the total number of members for the installation.
+ * Return the total number of members for the installation.
+ *
+ * Note that this is a raw count of non-spam, activated users. It does not
+ * account for users who have logged activity (last_active). See
+ * {@link bp_core_get_active_member_count()}.
  *
- * @package BuddyPress Core
  * @return int The total number of members.
  */
 function bp_core_get_total_member_count() {
@@ -561,7 +607,7 @@ function bp_core_get_total_member_count() {
 }
 
 /**
- * Returns the total number of members, limited to those members with last_activity
+ * Return the total number of members, limited to those members with last_activity
  *
  * @return int The number of active members
  */
@@ -611,12 +657,14 @@ function bp_core_process_spammer_status( $user_id, $status, $do_wp_cleanup = tru
 	global $wpdb;
 
 	// Bail if no user ID
-	if ( empty( $user_id ) )
+	if ( empty( $user_id ) ) {
 		return;
+	}
 
 	// Bail if user ID is super admin
-	if ( is_super_admin( $user_id ) )
+	if ( is_super_admin( $user_id ) ) {
 		return;
+	}
 
 	// Get the functions file
 	if ( is_multisite() ) {
@@ -641,7 +689,7 @@ function bp_core_process_spammer_status( $user_id, $status, $do_wp_cleanup = tru
 		// Get the blogs for the user
 		$blogs = get_blogs_of_user( $user_id, true );
 
-		foreach ( (array) $blogs as $key => $details ) {
+		foreach ( (array) array_values( $blogs ) as $details ) {
 
 			// Do not mark the main or current root blog as spam
 			if ( 1 == $details->userblog_id || bp_get_root_blog_id() == $details->userblog_id ) {
@@ -687,11 +735,11 @@ function bp_core_process_spammer_status( $user_id, $status, $do_wp_cleanup = tru
 }
 
 /**
- * Hook to WP's make_spam_user and run our custom BP spam functions
+ * Hook to WP's make_spam_user and run our custom BP spam functions.
  *
- * @since BuddyPress (1.6)
+ * @since BuddyPress (1.6.0)
  *
- * @param int $user_id The user id passed from the make_spam_user hook
+ * @param int $user_id The user ID passed from the make_spam_user hook.
  */
 function bp_core_mark_user_spam_admin( $user_id ) {
 	bp_core_process_spammer_status( $user_id, 'spam', false );
@@ -699,11 +747,11 @@ function bp_core_mark_user_spam_admin( $user_id ) {
 add_action( 'make_spam_user', 'bp_core_mark_user_spam_admin' );
 
 /**
- * Hook to WP's make_ham_user and run our custom BP spam functions
+ * Hook to WP's make_ham_user and run our custom BP spam functions.
  *
- * @since BuddyPress (1.6)
+ * @since BuddyPress (1.6.0)
  *
- * @param int $user_id The user id passed from the make_ham_user hook
+ * @param int $user_id The user ID passed from the make_ham_user hook.
  */
 function bp_core_mark_user_ham_admin( $user_id ) {
 	bp_core_process_spammer_status( $user_id, 'ham', false );
@@ -711,17 +759,17 @@ function bp_core_mark_user_ham_admin( $user_id ) {
 add_action( 'make_ham_user', 'bp_core_mark_user_ham_admin' );
 
 /**
- * Checks if the user has been marked as a spammer.
+ * Check whether a user has been marked as a spammer.
  *
- * @package BuddyPress Core
- * @param int $user_id int The id for the user.
- * @return bool True if spammer, False if not.
+ * @param int $user_id The ID for the user.
+ * @return bool True if spammer, otherwise false.
  */
 function bp_is_user_spammer( $user_id = 0 ) {
 
 	// No user to check
-	if ( empty( $user_id ) )
+	if ( empty( $user_id ) ) {
 		return false;
+	}
 
 	$bp = buddypress();
 
@@ -755,28 +803,30 @@ function bp_is_user_spammer( $user_id = 0 ) {
 	} else {
 
 		// Check if spam
-		if ( !empty( $user->spam ) )
+		if ( !empty( $user->spam ) ) {
 			$is_spammer = true;
+		}
 
-		if ( 1 == $user->user_status )
+		if ( 1 == $user->user_status ) {
 			$is_spammer = true;
+		}
 	}
 
 	return apply_filters( 'bp_is_user_spammer', (bool) $is_spammer );
 }
 
 /**
- * Checks if the user has been marked as deleted.
+ * Check whether a user has been marked as deleted.
  *
- * @package BuddyPress Core
- * @param int $user_id int The id for the user.
- * @return bool True if deleted, False if not.
+ * @param int $user_id The ID for the user.
+ * @return bool True if deleted, otherwise false.
  */
 function bp_is_user_deleted( $user_id = 0 ) {
 
 	// No user to check
-	if ( empty( $user_id ) )
+	if ( empty( $user_id ) ) {
 		return false;
+	}
 
 	$bp = buddypress();
 
@@ -810,73 +860,83 @@ function bp_is_user_deleted( $user_id = 0 ) {
 	} else {
 
 		// Check if deleted
-		if ( !empty( $user->deleted ) )
+		if ( !empty( $user->deleted ) ) {
 			$is_deleted = true;
+		}
 
-		if ( 2 == $user->user_status )
+		if ( 2 == $user->user_status ) {
 			$is_deleted = true;
-
+		}
 	}
 
 	return apply_filters( 'bp_is_user_deleted', (bool) $is_deleted );
 }
 
 /**
- * Checks if user is active
+ * Check whether a user is "active", ie neither deleted nor spammer.
  *
- * @since BuddyPress (1.6)
+ * @since BuddyPress (1.6.0)
  *
  * @uses is_user_logged_in() To check if user is logged in
  * @uses bp_loggedin_user_id() To get current user ID
  * @uses bp_is_user_spammer() To check if user is spammer
  * @uses bp_is_user_deleted() To check if user is deleted
  *
- * @param int $user_id The user ID to check
- * @return bool True if public, false if not
+ * @param int $user_id The user ID to check.
+ * @return bool True if active, otherwise false.
  */
 function bp_is_user_active( $user_id = 0 ) {
 
 	// Default to current user
-	if ( empty( $user_id ) && is_user_logged_in() )
+	if ( empty( $user_id ) && is_user_logged_in() ) {
 		$user_id = bp_loggedin_user_id();
+	}
 
 	// No user to check
-	if ( empty( $user_id ) )
+	if ( empty( $user_id ) ) {
 		return false;
+	}
 
 	// Check spam
-	if ( bp_is_user_spammer( $user_id ) )
+	if ( bp_is_user_spammer( $user_id ) ) {
 		return false;
+	}
 
 	// Check deleted
-	if ( bp_is_user_deleted( $user_id ) )
+	if ( bp_is_user_deleted( $user_id ) ) {
 		return false;
+	}
 
 	// Assume true if not spam or deleted
 	return true;
 }
 
 /**
- * Checks if user is not active.
+ * Check whether user is not active.
  *
- * @since BuddyPress (1.6)
+ * @since BuddyPress (1.6.0)
+ *
+ * @todo No need for the user fallback checks, since they're done in
+ *       bp_is_user_active().
  *
  * @uses is_user_logged_in() To check if user is logged in
  * @uses bp_get_displayed_user_id() To get current user ID
  * @uses bp_is_user_active() To check if user is active
  *
- * @param int $user_id The user ID to check
- * @return bool True if inactive, false if active
+ * @param int $user_id The user ID to check.
+ * @return bool True if inactive, otherwise false.
  */
 function bp_is_user_inactive( $user_id = 0 ) {
 
 	// Default to current user
-	if ( empty( $user_id ) && is_user_logged_in() )
+	if ( empty( $user_id ) && is_user_logged_in() ) {
 		$user_id = bp_loggedin_user_id();
+	}
 
 	// No user to check
-	if ( empty( $user_id ) )
+	if ( empty( $user_id ) ) {
 		return false;
+	}
 
 	// Return the inverse of active
 	return !bp_is_user_active( $user_id );
@@ -892,6 +952,7 @@ function bp_is_user_inactive( $user_id = 0 ) {
  * @return bool True on success, false on failure.
  */
 function bp_update_user_last_activity( $user_id = 0, $time = '' ) {
+
 	// Fall back on current user
 	if ( empty( $user_id ) ) {
 		$user_id = bp_loggedin_user_id();
@@ -936,13 +997,13 @@ function bp_update_user_last_activity( $user_id = 0, $time = '' ) {
  * @param string $meta_key Meta key being fetched.
  */
 function _bp_get_user_meta_last_activity_warning( $retval, $object_id, $meta_key ) {
-	static $warned;
+	static $warned = false;
 
 	if ( 'last_activity' === $meta_key ) {
 		// Don't send the warning more than once per pageload
-		if ( empty( $warned ) ) {
+		if ( false === $warned ) {
 			_doing_it_wrong( 'get_user_meta( $user_id, \'last_activity\' )', __( 'User last_activity data is no longer stored in usermeta. Use bp_get_user_last_activity() instead.', 'buddypress' ), '2.0.0' );
-			$warned = 1;
+			$warned = true;
 		}
 
 		return bp_get_user_last_activity( $object_id );
@@ -1008,18 +1069,16 @@ function bp_last_activity_migrate() {
 
 	$bp = buddypress();
 
-	// The "NOT IN" clause prevents duplicates
+	// Wipe out existing last_activity data in the activity table -
+	// this helps to prevent duplicates when pulling from the usermeta
+	// table
+	$wpdb->query( $wpdb->prepare( "DELETE FROM {$bp->members->table_name_last_activity} WHERE component = %s AND type = 'last_activity'", $bp->members->id ) );
+
 	$sql = "INSERT INTO {$bp->members->table_name_last_activity} (`user_id`, `component`, `type`, `action`, `content`, `primary_link`, `item_id`, `date_recorded` ) (
 		  SELECT user_id, '{$bp->members->id}' as component, 'last_activity' as type, '' as action, '' as content, '' as primary_link, 0 as item_id, meta_value AS date_recorded
 		  FROM {$wpdb->usermeta}
 		  WHERE
 		    meta_key = 'last_activity'
-		    AND
-		    user_id NOT IN (
-		      SELECT user_id
-		      FROM {$bp->members->table_name_last_activity}
-		      WHERE component = '{$bp->members->id}' AND type = 'last_activity'
-		    )
 	);";
 
 	return $wpdb->query( $sql );
@@ -1028,35 +1087,43 @@ function bp_last_activity_migrate() {
 /**
  * Fetch every post that is authored by the given user for the current blog.
  *
- * @package BuddyPress Core
- * @global $wpdb WordPress user data for the current logged in user.
- * @return array of post ids.
+ * No longer used in BuddyPress.
+ *
+ * @todo Deprecate.
+ *
+ * @param int $user_id ID of the user being queried.
+ * @return array Post IDs.
  */
 function bp_core_get_all_posts_for_user( $user_id = 0 ) {
 	global $wpdb;
 
-	if ( empty( $user_id ) )
+	if ( empty( $user_id ) ) {
 		$user_id = bp_displayed_user_id();
+	}
 
 	return apply_filters( 'bp_core_get_all_posts_for_user', $wpdb->get_col( $wpdb->prepare( "SELECT ID FROM {$wpdb->posts} WHERE post_author = %d AND post_status = 'publish' AND post_type = 'post'", $user_id ) ) );
 }
 
 /**
- * Allows a user to completely remove their account from the system
+ * Process account deletion requests.
+ *
+ * Primarily used for self-deletions, as requested through Settings.
  *
- * @package BuddyPress Core
- * @uses wpmu_delete_user() Deletes a user from the system on multisite installs.
- * @uses wp_delete_user() Deletes a user from the system on singlesite installs.
+ * @param int $user_id Optional. ID of the user to be deleted. Default: the
+ *        logged-in user.
+ * @return bool True on success, false on failure.
  */
 function bp_core_delete_account( $user_id = 0 ) {
 
 	// Use logged in user ID if none is passed
-	if ( empty( $user_id ) )
+	if ( empty( $user_id ) ) {
 		$user_id = bp_loggedin_user_id();
+	}
 
 	// Site admins cannot be deleted
-	if ( is_super_admin( $user_id ) )
+	if ( is_super_admin( $user_id ) ) {
 		return false;
+	}
 
 	// Extra checks if user is not deleting themselves
 	if ( bp_loggedin_user_id() !== absint( $user_id ) ) {
@@ -1110,9 +1177,12 @@ add_action( 'wpmu_delete_user', 'bp_core_delete_avatar_on_user_delete' );
 add_action( 'delete_user', 'bp_core_delete_avatar_on_user_delete' );
 
 /**
- * Localization safe ucfirst() support.
+ * Multibyte-safe ucfirst() support.
  *
- * @package BuddyPress Core
+ * Uses multibyte functions when available on the PHP build.
+ *
+ * @param string $str String to be upper-cased.
+ * @return string
  */
 function bp_core_ucfirst( $str ) {
 	if ( function_exists( 'mb_strtoupper' ) && function_exists( 'mb_substr' ) ) {
@@ -1124,23 +1194,30 @@ function bp_core_ucfirst( $str ) {
 }
 
 /**
- * When a user logs in, check if they have been marked as a spammer. If yes then simply
- * redirect them to the home page and stop them from logging in.
+ * Prevent spammers from logging in.
  *
- * @param WP_User|WP_Error $user Either the WP_User object or the WP_Error object
- * @return WP_User|WP_Error If the user is not a spammer, return the WP_User object. Otherwise a new WP_Error object.
+ * When a user logs in, check if they have been marked as a spammer. If yes
+ * then simply redirect them to the home page and stop them from logging in.
  *
  * @since BuddyPress (1.1.2)
+ *
+ * @param WP_User|WP_Error $user Either the WP_User object or the WP_Error
+ *        object, as passed to the 'authenticate' filter.
+ * @return WP_User|WP_Error If the user is not a spammer, return the WP_User
+ *         object. Otherwise a new WP_Error object.
  */
 function bp_core_boot_spammer( $user ) {
+
 	// check to see if the $user has already failed logging in, if so return $user as-is
-	if ( is_wp_error( $user ) || empty( $user ) )
+	if ( is_wp_error( $user ) || empty( $user ) ) {
 		return $user;
+	}
 
 	// the user exists; now do a check to see if the user is a spammer
 	// if the user is a spammer, stop them in their tracks!
-	if ( is_a( $user, 'WP_User' ) && ( ( is_multisite() && (int) $user->spam ) || 1 == $user->user_status ) )
+	if ( is_a( $user, 'WP_User' ) && ( ( is_multisite() && (int) $user->spam ) || 1 == $user->user_status ) ) {
 		return new WP_Error( 'invalid_username', __( '<strong>ERROR</strong>: Your account has been marked as a spammer.', 'buddypress' ) );
+	}
 
 	// user is good to go!
 	return $user;
@@ -1148,11 +1225,9 @@ function bp_core_boot_spammer( $user ) {
 add_filter( 'authenticate', 'bp_core_boot_spammer', 30 );
 
 /**
- * Deletes usermeta for the user when the user is deleted.
+ * Delete last_activity data for the user when the user is deleted.
  *
- * @package BuddyPress Core
- * @param int $user_id The user id for the user to delete usermeta for
- * @uses bp_delete_user_meta() deletes a row from the wp_usermeta table based on meta_key
+ * @param int $user_id The user ID for the user to delete usermeta for.
  */
 function bp_core_remove_data( $user_id ) {
 
@@ -1166,16 +1241,23 @@ add_action( 'wpmu_delete_user',  'bp_core_remove_data' );
 add_action( 'delete_user',       'bp_core_remove_data' );
 add_action( 'bp_make_spam_user', 'bp_core_remove_data' );
 
+/**
+ * Check whether the logged-in user can edit settings for the displayed user.
+ *
+ * @return bool True if editing is allowed, otherwise false.
+ */
 function bp_core_can_edit_settings() {
-	if ( bp_is_my_profile() )
+	if ( bp_is_my_profile() ) {
 		return true;
+	}
 
 	if ( is_super_admin( bp_displayed_user_id() ) && ! is_super_admin() ) {
 		return false;
 	}
 
-	if ( bp_current_user_can( 'bp_moderate' ) || current_user_can( 'edit_users' ) )
+	if ( bp_current_user_can( 'bp_moderate' ) || current_user_can( 'edit_users' ) ) {
 		return true;
+	}
 
 	return false;
 }
@@ -1183,7 +1265,7 @@ function bp_core_can_edit_settings() {
 /** Sign-up *******************************************************************/
 
 /**
- * Flush illegal names by getting and setting 'illegal_names' site option
+ * Flush illegal names by getting and setting 'illegal_names' site option.
  */
 function bp_core_flush_illegal_names() {
 	$illegal_names = get_site_option( 'illegal_names' );
@@ -1191,12 +1273,12 @@ function bp_core_flush_illegal_names() {
 }
 
 /**
- * Filter the illegal_names site option and make sure it includes a few
- * specific BuddyPress and Multi-site slugs
+ * Add BuddyPress-specific items to the illegal_names array.
  *
- * @param array|string $value Illegal names from field
- * @param array|string $oldvalue The value as it is currently
- * @return array Merged and unique array of illegal names
+ * @param array|string $value Illegal names as being saved defined in
+ *        Multisite settings.
+ * @param array|string $oldvalue The old value of the option.
+ * @return array Merged and unique array of illegal names.
  */
 function bp_core_get_illegal_names( $value = '', $oldvalue = '' ) {
 
@@ -1262,7 +1344,7 @@ function bp_core_get_illegal_names( $value = '', $oldvalue = '' ) {
 add_filter( 'pre_update_site_option_illegal_names', 'bp_core_get_illegal_names', 10, 2 );
 
 /**
- * Check that an email address is valid for use
+ * Check that an email address is valid for use.
  *
  * Performs the following checks:
  *   - Is the email address well-formed?
@@ -1274,7 +1356,7 @@ add_filter( 'pre_update_site_option_illegal_names', 'bp_core_get_illegal_names',
  *
  * @param string $user_email The email being checked
  * @return bool|array True if the address passes all checks; otherwise an array
- *   of error codes
+ *         of error codes.
  */
 function bp_core_validate_email_address( $user_email ) {
 	$errors = array();
@@ -1282,13 +1364,15 @@ function bp_core_validate_email_address( $user_email ) {
 	$user_email = sanitize_email( $user_email );
 
 	// Is the email well-formed?
-	if ( ! is_email( $user_email ) )
+	if ( ! is_email( $user_email ) ) {
 		$errors['invalid'] = 1;
+	}
 
 	// Is the email on the Banned Email Domains list?
 	// Note: This check only works on Multisite
-	if ( function_exists( 'is_email_address_unsafe' ) && is_email_address_unsafe( $user_email ) )
+	if ( function_exists( 'is_email_address_unsafe' ) && is_email_address_unsafe( $user_email ) ) {
 		$errors['domain_banned'] = 1;
+	}
 
 	// Is the email on the Limited Email Domains list?
 	// Note: This check only works on Multisite
@@ -1301,8 +1385,9 @@ function bp_core_validate_email_address( $user_email ) {
 	}
 
 	// Is the email alreday in use?
-	if ( email_exists( $user_email ) )
+	if ( email_exists( $user_email ) ) {
 		$errors['in_use'] = 1;
+	}
 
 	$retval = ! empty( $errors ) ? $errors : true;
 
@@ -1310,39 +1395,44 @@ function bp_core_validate_email_address( $user_email ) {
 }
 
 /**
- * Add the appropriate errors to a WP_Error object, given results of a validation test
+ * Add the appropriate errors to a WP_Error object, given results of a validation test.
  *
  * Functions like bp_core_validate_email_address() return a structured array
  * of error codes. bp_core_add_validation_error_messages() takes this array and
  * parses, adding the appropriate error messages to the WP_Error object.
  *
- * @since BuddyPress (1.7)
+ * @since BuddyPress (1.7.0)
+ *
  * @see bp_core_validate_email_address()
  *
- * @param WP_Error $errors WP_Error object
+ * @param WP_Error $errors WP_Error object.
  * @param array $validation_results The return value of a validation function
- *   like bp_core_validate_email_address()
+ *        like bp_core_validate_email_address().
  */
 function bp_core_add_validation_error_messages( WP_Error $errors, $validation_results ) {
-	if ( ! empty( $validation_results['invalid'] ) )
+	if ( ! empty( $validation_results['invalid'] ) ) {
 		$errors->add( 'user_email', __( 'Please check your email address.', 'buddypress' ) );
+	}
 
-	if ( ! empty( $validation_results['domain_banned'] ) )
+	if ( ! empty( $validation_results['domain_banned'] ) ) {
 		$errors->add( 'user_email',  __( 'Sorry, that email address is not allowed!', 'buddypress' ) );
+	}
 
-	if ( ! empty( $validation_results['domain_not_allowed'] ) )
+	if ( ! empty( $validation_results['domain_not_allowed'] ) ) {
 		$errors->add( 'user_email', __( 'Sorry, that email address is not allowed!', 'buddypress' ) );
+	}
 
-	if ( ! empty( $validation_results['in_use'] ) )
+	if ( ! empty( $validation_results['in_use'] ) ) {
 		$errors->add( 'user_email', __( 'Sorry, that email address is already used!', 'buddypress' ) );
+	}
 }
 
 /**
  * Validate a user name and email address when creating a new user.
  *
- * @param string $user_name Username to validate
- * @param string $user_email Email address to validate
- * @return array Results of user validation including errors, if any
+ * @param string $user_name Username to validate.
+ * @param string $user_email Email address to validate.
+ * @return array Results of user validation including errors, if any.
  */
 function bp_core_validate_user_signup( $user_name, $user_email ) {
 
@@ -1427,15 +1517,37 @@ function bp_core_validate_user_signup( $user_name, $user_email ) {
  	return apply_filters( 'bp_core_validate_user_signup', $result );
 }
 
+/**
+ * Validate blog URL and title provided at signup.
+ *
+ * @todo Why do we have this wrapper?
+ *
+ * @param string $blog_url Blog URL requested during registration.
+ * @param string $blog_title Blog title requested during registration.
+ * @return array
+ */
 function bp_core_validate_blog_signup( $blog_url, $blog_title ) {
-	if ( !is_multisite() || !function_exists( 'wpmu_validate_blog_signup' ) )
+	if ( ! is_multisite() || ! function_exists( 'wpmu_validate_blog_signup' ) ) {
 		return false;
+	}
 
 	return apply_filters( 'bp_core_validate_blog_signup', wpmu_validate_blog_signup( $blog_url, $blog_title ) );
 }
 
+/**
+ * Process data submitted at user registration and convert to a signup object.
+ *
+ * @todo There appears to be a bug in the return value on success.
+ *
+ * @param string $user_login Login name requested by the user.
+ * @param string $user_password Password requested by the user.
+ * @param string $user_email Email address entered by the user.
+ * @param array $usermeta Miscellaneous metadata about the user (blog-specific
+ *        signup data, xprofile data, etc).
+ * @return bool|WP_Error True on success, WP_Error on failure.
+ */
 function bp_core_signup_user( $user_login, $user_password, $user_email, $usermeta ) {
-	global $bp;
+	$bp = buddypress();
 
 	// We need to cast $user_id to pass to the filters
 	$user_id = false;
@@ -1495,13 +1607,30 @@ function bp_core_signup_user( $user_login, $user_password, $user_email, $usermet
 	return $user_id;
 }
 
+/**
+ * Create a blog and user based on data supplied at user registration.
+ *
+ * @param string $blog_domain Domain requested by user.
+ * @param string $blog_path Path requested by user.
+ * @param string $blog_title Title as entered by user.
+ * @param string $user_name user_login of requesting user.
+ * @param string $user_email Email address of requesting user.
+ * @param string $usermeta Miscellaneous metadata for the user.
+ */
 function bp_core_signup_blog( $blog_domain, $blog_path, $blog_title, $user_name, $user_email, $usermeta ) {
-	if ( !is_multisite() || !function_exists( 'wpmu_signup_blog' ) )
+	if ( ! is_multisite() || ! function_exists( 'wpmu_signup_blog' ) ) {
 		return false;
+	}
 
 	return apply_filters( 'bp_core_signup_blog', wpmu_signup_blog( $blog_domain, $blog_path, $blog_title, $user_name, $user_email, $usermeta ) );
 }
 
+/**
+ * Activate a signup, as identified by an activation key.
+ *
+ * @param string $key Activation key.
+ * @return int|bool User ID on success, false on failure.
+ */
 function bp_core_activate_signup( $key ) {
 	global $wpdb;
 
@@ -1607,8 +1736,9 @@ function bp_core_activate_signup( $key ) {
 			foreach( (array) $profile_field_ids as $field_id ) {
 				$current_field = isset( $user['meta']["field_{$field_id}"] ) ? $user['meta']["field_{$field_id}"] : false;
 
-				if ( !empty( $current_field ) )
+				if ( !empty( $current_field ) ) {
 					xprofile_set_field_data( $field_id, $user_id, $current_field );
+				}
 
 				// Save the visibility level
 				$visibility_level = ! empty( $user['meta']['field_' . $field_id . '_visibility'] ) ? $user['meta']['field_' . $field_id . '_visibility'] : 'public';
@@ -1714,19 +1844,25 @@ function bp_members_migrate_signups() {
 	}
 }
 
+/**
+ * Create a "became a registered user" activity item when a user activates his account.
+ *
+ * @param array $user Array of userdata passed to bp_core_activated_user hook.
+ */
 function bp_core_new_user_activity( $user ) {
-	if ( empty( $user ) || !bp_is_active( 'activity' ) )
+	if ( empty( $user ) || ! bp_is_active( 'activity' ) || ! bp_is_active( 'xprofile' ) ) {
 		return false;
+	}
 
-	if ( is_array( $user ) )
+	if ( is_array( $user ) ) {
 		$user_id = $user['user_id'];
-	else
+	} else {
 		$user_id = $user;
+	}
 
-	if ( empty( $user_id ) )
+	if ( empty( $user_id ) ) {
 		return false;
-
-	$userlink = bp_core_get_userlink( $user_id );
+	}
 
 	bp_activity_add( array(
 		'user_id'   => $user_id,
@@ -1736,11 +1872,20 @@ function bp_core_new_user_activity( $user ) {
 }
 add_action( 'bp_core_activated_user', 'bp_core_new_user_activity' );
 
+/**
+ * Map a user's WP display name to the XProfile fullname field, if necessary.
+ *
+ * This only happens when a user is registered in wp-admin by an administrator;
+ * during normal registration, XProfile data is provided directly by the user.
+ *
+ * @param int $user_id ID of the user.
+ */
 function bp_core_map_user_registration( $user_id ) {
 
 	// Only map data when the site admin is adding users, not on registration.
-	if ( !is_admin() )
+	if ( ! is_admin() ) {
 		return false;
+	}
 
 	// Add the user's fullname to Xprofile
 	if ( bp_is_active( 'xprofile' ) ) {
@@ -1748,33 +1893,55 @@ function bp_core_map_user_registration( $user_id ) {
 		$lastname = ' ' . bp_get_user_meta( $user_id, 'last_name', true );
 		$name = $firstname . $lastname;
 
-		if ( empty( $name ) || ' ' == $name )
+		if ( empty( $name ) || ' ' == $name ) {
 			$name = bp_get_user_meta( $user_id, 'nickname', true );
+		}
 
 		xprofile_set_field_data( 1, $user_id, $name );
 	}
 }
 add_action( 'user_register', 'bp_core_map_user_registration' );
 
+/**
+ * Get the avatar storage directory for use during registration.
+ *
+ * @return string|bool Directory path on success, false on failure.
+ */
 function bp_core_signup_avatar_upload_dir() {
-	global $bp;
+	$bp = buddypress();
 
-	if ( !$bp->signup->avatar_dir )
+	if ( empty( $bp->signup->avatar_dir ) ) {
 		return false;
+	}
 
 	$path  = bp_core_avatar_upload_path() . '/avatars/signups/' . $bp->signup->avatar_dir;
 	$newbdir = $path;
 
-	if ( !file_exists( $path ) )
+	if ( ! file_exists( $path ) ) {
 		@wp_mkdir_p( $path );
+	}
 
 	$newurl = bp_core_avatar_url() . '/avatars/signups/' . $bp->signup->avatar_dir;
 	$newburl = $newurl;
 	$newsubdir = '/avatars/signups/' . $bp->signup->avatar_dir;
 
-	return apply_filters( 'bp_core_signup_avatar_upload_dir', array( 'path' => $path, 'url' => $newurl, 'subdir' => $newsubdir, 'basedir' => $newbdir, 'baseurl' => $newburl, 'error' => false ) );
+	return apply_filters( 'bp_core_signup_avatar_upload_dir', array(
+		'path'    => $path,
+		'url'     => $newurl,
+		'subdir'  => $newsubdir,
+		'basedir' => $newbdir,
+		'baseurl' => $newburl,
+		'error' => false
+	) );
 }
 
+/**
+ * Send activation email to a newly registered user.
+ *
+ * @param int $user_id ID of the new user.
+ * @param string $user_email Email address of the new user.
+ * @param string $key Activation key.
+ */
 function bp_core_signup_send_validation_email( $user_id, $user_email, $key ) {
 	$activate_url = bp_get_activation_page() ."?key=$key";
 	$activate_url = esc_url( $activate_url );
@@ -1881,25 +2048,27 @@ function bp_members_login_resend_activation_email() {
 	if ( ! empty( $resend['errors'] ) ) {
 		$error = __( '<strong>ERROR</strong>: Your account has already been activated.', 'buddypress' );
 	} else {
-		$error = __( 'Activation email resent!  Please check your inbox or spam folder.', 'buddypress' );
+		$error = __( 'Activation email resent! Please check your inbox or spam folder.', 'buddypress' );
 	}
 }
 add_action( 'login_form_bp-resend-activation', 'bp_members_login_resend_activation_email' );
 
 /**
- * Kill the wp-signup.php if custom registration signup templates are present
+ * Redirect away from wp-signup.php if BP registration templates are present.
  */
 function bp_core_wpsignup_redirect() {
 
 	// Bail in admin or if custom signup page is broken
-	if ( is_admin() || ! bp_has_custom_signup_page() )
+	if ( is_admin() || ! bp_has_custom_signup_page() ) {
 		return;
+	}
 
 	$action = !empty( $_GET['action'] ) ? $_GET['action'] : '';
 
 	// Not at the WP core signup page and action is not register
-	if ( ! empty( $_SERVER['SCRIPT_NAME'] ) && false === strpos( $_SERVER['SCRIPT_NAME'], 'wp-signup.php' ) && ( 'register' != $action ) )
+	if ( ! empty( $_SERVER['SCRIPT_NAME'] ) && false === strpos( $_SERVER['SCRIPT_NAME'], 'wp-signup.php' ) && ( 'register' != $action ) ) {
 		return;
+	}
 
 	bp_core_redirect( bp_get_signup_page() );
 }
@@ -1924,7 +2093,7 @@ add_action( 'bp_init', 'bp_core_wpsignup_redirect' );
  *
  * This is important as the $bp->loggedin_user object is setup at priority 4.
  *
- * @since BuddyPress (v1.8)
+ * @since BuddyPress (1.8.0)
  */
 function bp_stop_live_spammer() {
 	// if we're on the login page, stop now to prevent redirect loop
@@ -1968,7 +2137,7 @@ add_action( 'bp_init', 'bp_stop_live_spammer', 5 );
 /**
  * Show a custom error message when a logged-in user is marked as a spammer.
  *
- * @since BuddyPress (v1.8)
+ * @since BuddyPress (1.8.0)
  */
 function bp_live_spammer_login_error() {
 	global $error;
diff --git a/wp-content/plugins/buddypress/bp-members/bp-members-loader.php b/wp-content/plugins/buddypress/bp-members/bp-members-loader.php
index e04fb2564..1ab4a64e1 100644
--- a/wp-content/plugins/buddypress/bp-members/bp-members-loader.php
+++ b/wp-content/plugins/buddypress/bp-members/bp-members-loader.php
@@ -1,9 +1,8 @@
 <?php
+
 /**
  * BuddyPress Member Loader
  *
- * A members component to help contain all of the user specific slugs
- *
  * @package BuddyPress
  * @subpackage Members
  */
@@ -14,9 +13,9 @@ if ( !defined( 'ABSPATH' ) ) exit;
 class BP_Members_Component extends BP_Component {
 
 	/**
-	 * Start the members component creation process
+	 * Start the members component creation process.
 	 *
-	 * @since BuddyPress (1.5)
+	 * @since BuddyPress (1.5.0)
 	 */
 	public function __construct() {
 		parent::start(
@@ -30,23 +29,26 @@ class BP_Members_Component extends BP_Component {
 	}
 
 	/**
-	 * Include files
+	 * Include bp-members files.
 	 *
-	 * @global BuddyPress $bp The one true BuddyPress instance
+	 * @see BP_Component::includes() for description of parameters.
+	 *
+	 * @param array $includes See {@link BP_Component::includes()}.
 	 */
 	public function includes( $includes = array() ) {
+
+		// Always include these files
 		$includes = array(
 			'actions',
 			'classes',
 			'filters',
 			'screens',
 			'template',
-			'buddybar',
 			'adminbar',
-			'functions',
-			'notifications',
+			'functions'
 		);
 
+		// Include these only if in admin
 		if ( is_admin() ) {
 			$includes[] = 'admin';
 		}
@@ -55,38 +57,49 @@ class BP_Members_Component extends BP_Component {
 	}
 
 	/**
-	 * Setup globals
+	 * Set up bp-members global settings.
 	 *
 	 * The BP_MEMBERS_SLUG constant is deprecated, and only used here for
 	 * backwards compatibility.
 	 *
-	 * @since BuddyPress (1.5)
+	 * @since BuddyPress (1.5.0)
+	 *
+	 * @see BP_Component::setup_globals() for description of parameters.
+	 *
+	 * @param array $args See {@link BP_Component::setup_globals()}.
 	 */
 	public function setup_globals( $args = array() ) {
 		$bp = buddypress();
 
-		// Define a slug, if necessary
-		if ( !defined( 'BP_MEMBERS_SLUG' ) )
+		/** Component Globals *************************************************/
+
+		// Define a slug, as a fallback for backpat
+		if ( !defined( 'BP_MEMBERS_SLUG' ) ) {
 			define( 'BP_MEMBERS_SLUG', $this->id );
+		}
 
-		$members_globals = array(
-			'slug'          => BP_MEMBERS_SLUG,
-			'root_slug'     => isset( $bp->pages->members->slug ) ? $bp->pages->members->slug : BP_MEMBERS_SLUG,
-			'has_directory' => true,
+		// Override any passed args
+		$args = array(
+			'slug'            => BP_MEMBERS_SLUG,
+			'root_slug'       => isset( $bp->pages->members->slug ) ? $bp->pages->members->slug : BP_MEMBERS_SLUG,
+			'has_directory'   => true,
 			'directory_title' => _x( 'Members', 'component directory title', 'buddypress' ),
-			'global_tables' => array(
+			'search_string'   => __( 'Search Members...', 'buddypress' ),
+			'global_tables'   => array(
 				'table_name_last_activity' => bp_core_get_table_prefix() . 'bp_activity',
 				'table_name_signups'       => bp_core_get_table_prefix() . 'signups',
-			),
-			'search_string' => __( 'Search Members...', 'buddypress' ),
+			)
 		);
 
-		parent::setup_globals( $members_globals );
+		parent::setup_globals( $args );
 
 		/** Logged in user ****************************************************/
 
+		// The core userdata of the user who is currently logged in.
+		$bp->loggedin_user->userdata       = bp_core_get_core_userdata( bp_loggedin_user_id() );
+
 		// Fetch the full name for the logged in user
-		$bp->loggedin_user->fullname       = bp_core_get_user_displayname( bp_loggedin_user_id() );
+		$bp->loggedin_user->fullname       = isset( $bp->loggedin_user->userdata->display_name ) ? $bp->loggedin_user->userdata->display_name : '';
 
 		// Hits the DB on single WP installs so get this separately
 		$bp->loggedin_user->is_super_admin = $bp->loggedin_user->is_site_admin = is_super_admin( bp_loggedin_user_id() );
@@ -94,21 +107,19 @@ class BP_Members_Component extends BP_Component {
 		// The domain for the user currently logged in. eg: http://domain.com/members/andy
 		$bp->loggedin_user->domain         = bp_core_get_user_domain( bp_loggedin_user_id() );
 
-		// The core userdata of the user who is currently logged in.
-		$bp->loggedin_user->userdata       = bp_core_get_core_userdata( bp_loggedin_user_id() );
-
 		/** Displayed user ****************************************************/
 
-		// The domain for the user currently being displayed
-		$bp->displayed_user->domain   = bp_core_get_user_domain( bp_displayed_user_id() );
-
 		// The core userdata of the user who is currently being displayed
 		$bp->displayed_user->userdata = bp_core_get_core_userdata( bp_displayed_user_id() );
 
 		// Fetch the full name displayed user
-		$bp->displayed_user->fullname = bp_core_get_user_displayname( bp_displayed_user_id() );
+		$bp->displayed_user->fullname = isset( $bp->displayed_user->userdata->display_name ) ? $bp->displayed_user->userdata->display_name : '';
+
+		// The domain for the user currently being displayed
+		$bp->displayed_user->domain   = bp_core_get_user_domain( bp_displayed_user_id() );
+
+		/** Signup ************************************************************/
 
-		/** Signup ***************************************************/
 		$bp->signup = new stdClass;
 
 		/** Profiles Fallback *************************************************/
@@ -118,20 +129,30 @@ class BP_Members_Component extends BP_Component {
 			$bp->profile->slug = 'profile';
 			$bp->profile->id   = 'profile';
 		}
+	}
+
+	/**
+	 * Set up canonical stack for this component.
+	 *
+	 * @since BuddyPress (2.1.0)
+	 */
+	public function setup_canonical_stack() {
+		$bp = buddypress();
 
 		/** Default Profile Component *****************************************/
 
-		if ( !defined( 'BP_DEFAULT_COMPONENT' ) ) {
+		if ( defined( 'BP_DEFAULT_COMPONENT' ) && BP_DEFAULT_COMPONENT ) {
+			$bp->default_component = BP_DEFAULT_COMPONENT;
+		} else {
 			if ( bp_is_active( 'activity' ) && isset( $bp->pages->activity ) ) {
 				$bp->default_component = bp_get_activity_slug();
 			} else {
 				$bp->default_component = ( 'xprofile' === $bp->profile->id ) ? 'profile' : $bp->profile->id;
 			}
-
-		} else {
-			$bp->default_component = BP_DEFAULT_COMPONENT;
 		}
 
+		/** Canonical Component Stack *****************************************/
+
 		if ( bp_displayed_user_id() ) {
 			$bp->canonical_stack['base_url'] = bp_displayed_user_domain();
 
@@ -147,10 +168,12 @@ class BP_Members_Component extends BP_Component {
 				$bp->canonical_stack['action_variables'] = bp_action_variables();
 			}
 
-			if ( !bp_current_component() ) {
+			// Looking at the single member root/home, so assume the default
+			if ( ! bp_current_component() ) {
 				$bp->current_component = $bp->default_component;
-			} else if ( bp_is_current_component( $bp->default_component ) && !bp_current_action() ) {
-				// The canonical URL will not contain the default component
+
+			// The canonical URL will not contain the default component
+			} elseif ( bp_is_current_component( $bp->default_component ) && ! bp_current_action() ) {
 				unset( $bp->canonical_stack['component'] );
 			}
 
@@ -167,69 +190,82 @@ class BP_Members_Component extends BP_Component {
 	}
 
 	/**
-	 * Setup BuddyBar navigation
+	 * Set up fall-back component navigation if XProfile is inactive.
+	 *
+	 * @since BuddyPress (1.5.0)
+	 *
+	 * @see BP_Component::setup_nav() for a description of arguments.
+	 *
+	 * @param array $main_nav Optional. See BP_Component::setup_nav() for
+	 *        description.
+	 * @param array $sub_nav Optional. See BP_Component::setup_nav() for
+	 *        description.
 	 */
 	public function setup_nav( $main_nav = array(), $sub_nav = array() ) {
+
+		// Bail if XProfile component is active
+		if ( bp_is_active( 'xprofile' ) ) {
+			return;
+		}
+
+		// Don't set up navigation if there's no member
+		if ( ! is_user_logged_in() && ! bp_is_user() ) {
+			return;
+		}
+
 		$bp = buddypress();
 
-		// Add 'Profile' to the main navigation
-		if ( !bp_is_active( 'xprofile' ) ) {
+		// Setup the main navigation
+		$main_nav = array(
+			'name'                => _x( 'Profile', 'Member profile main navigation', 'buddypress' ),
+			'slug'                => $bp->profile->slug,
+			'position'            => 20,
+			'screen_function'     => 'bp_members_screen_display_profile',
+			'default_subnav_slug' => 'public',
+			'item_css_id'         => $bp->profile->id
+		);
 
-			// Don't set up navigation if there's no user
-			if ( !is_user_logged_in() && !bp_is_user() ) {
-				return;
-			}
+		// User links
+		$user_domain  = bp_displayed_user_domain() ? bp_displayed_user_domain() : bp_loggedin_user_domain();
+		$profile_link = trailingslashit( $user_domain . $bp->profile->slug );
+
+		// Setup the subnav items for the member profile
+		$sub_nav[] = array(
+			'name'            => _x( 'View', 'Member profile view', 'buddypress' ),
+			'slug'            => 'public',
+			'parent_url'      => $profile_link,
+			'parent_slug'     => $bp->profile->slug,
+			'screen_function' => 'bp_members_screen_display_profile',
+			'position'        => 10
+		);
 
-			$main_nav = array(
-				'name'                => __( 'Profile', 'buddypress' ),
-				'slug'                => $bp->profile->slug,
-				'position'            => 20,
-				'screen_function'     => 'bp_members_screen_display_profile',
-				'default_subnav_slug' => 'public',
-				'item_css_id'         => $bp->profile->id
-			);
-
-			// User links
-			$user_domain  = bp_displayed_user_domain() ? bp_displayed_user_domain() : bp_loggedin_user_domain();
-			$profile_link = trailingslashit( $user_domain . $bp->profile->slug );
-
-			// Add the subnav items to the profile
-			$sub_nav[] = array(
-				'name'            => __( 'View', 'buddypress' ),
-				'slug'            => 'public',
-				'parent_url'      => $profile_link,
-				'parent_slug'     => $bp->profile->slug,
-				'screen_function' => 'bp_members_screen_display_profile',
-				'position'        => 10
-			);
-
-			parent::setup_nav( $main_nav, $sub_nav );
-		}
+		parent::setup_nav( $main_nav, $sub_nav );
 	}
 
 	/**
-	 * Sets up the title for pages and <title>
-	 *
-	 * @global BuddyPress $bp The one true BuddyPress instance
+	 * Set up the title for pages and <title>.
 	 */
 	public function setup_title() {
 		$bp = buddypress();
 
 		if ( bp_is_my_profile() ) {
 			$bp->bp_options_title = __( 'You', 'buddypress' );
-		} elseif( bp_is_user() ) {
+		} elseif ( bp_is_user() ) {
+			$bp->bp_options_title  = bp_get_displayed_user_fullname();
 			$bp->bp_options_avatar = bp_core_fetch_avatar( array(
 				'item_id' => bp_displayed_user_id(),
 				'type'    => 'thumb',
-				'alt'     => sprintf( __( 'Profile picture of %s', 'buddypress' ), bp_get_displayed_user_fullname() )
+				'alt'     => sprintf( __( 'Profile picture of %s', 'buddypress' ), $bp->bp_options_title )
 			) );
-			$bp->bp_options_title = bp_get_displayed_user_fullname();
 		}
 
 		parent::setup_title();
 	}
 }
 
+/**
+ * Set up the bp-members component.
+ */
 function bp_setup_members() {
 	buddypress()->members = new BP_Members_Component();
 }
diff --git a/wp-content/plugins/buddypress/bp-members/bp-members-screens.php b/wp-content/plugins/buddypress/bp-members/bp-members-screens.php
index d756ae1e1..c2037be01 100644
--- a/wp-content/plugins/buddypress/bp-members/bp-members-screens.php
+++ b/wp-content/plugins/buddypress/bp-members/bp-members-screens.php
@@ -3,7 +3,7 @@
 /**
  * BuddyPress Member Screens
  *
- * Handlers for member screens that aren't handled elsewhere
+ * Handlers for member screens that aren't handled elsewhere.
  *
  * @package BuddyPress
  * @subpackage MembersScreens
@@ -13,10 +13,7 @@
 if ( !defined( 'ABSPATH' ) ) exit;
 
 /**
- * Handles the display of the profile page by loading the correct template file.
- *
- * @package BuddyPress Members
- * @uses bp_core_load_template() Looks for and loads a template file within the current member theme (folder/filename)
+ * Handle the display of the profile page by loading the correct template file.
  */
 function bp_members_screen_display_profile() {
 	do_action( 'bp_members_screen_display_profile' );
@@ -24,15 +21,7 @@ function bp_members_screen_display_profile() {
 }
 
 /**
- * Handles the display of the members directory index
- *
- * @global object $bp
- *
- * @uses bp_is_user()
- * @uses bp_is_current_component()
- * @uses do_action()
- * @uses bp_core_load_template()
- * @uses apply_filters()
+ * Handle the display of the members directory index.
  */
 function bp_members_screen_index() {
 	if ( bp_is_members_directory() ) {
@@ -45,11 +34,13 @@ function bp_members_screen_index() {
 }
 add_action( 'bp_screens', 'bp_members_screen_index' );
 
-
+/**
+ * Handle the loading of the signup screen.
+ */
 function bp_core_screen_signup() {
 	global $bp;
 
-	if ( !bp_is_current_component( 'register' ) )
+	if ( ! bp_is_current_component( 'register' ) || bp_current_action() )
 		return;
 
 	// Not a directory
@@ -220,6 +211,9 @@ function bp_core_screen_signup() {
 }
 add_action( 'bp_screens', 'bp_core_screen_signup' );
 
+/**
+ * Handle the loading of the Activate screen.
+ */
 function bp_core_screen_activation() {
 	global $bp;
 
@@ -267,31 +261,31 @@ function bp_core_screen_activation() {
 }
 add_action( 'bp_screens', 'bp_core_screen_activation' );
 
-/** Theme Compatability *******************************************************/
+/** Theme Compatibility *******************************************************/
 
 /**
  * The main theme compat class for BuddyPress Members.
  *
- * This class sets up the necessary theme compatability actions to safely output
+ * This class sets up the necessary theme compatibility actions to safely output
  * member template parts to the_title and the_content areas of a theme.
  *
- * @since BuddyPress (1.7)
+ * @since BuddyPress (1.7.0)
  */
 class BP_Members_Theme_Compat {
 
 	/**
-	 * Setup the members component theme compatibility
+	 * Set up the members component theme compatibility.
 	 *
-	 * @since BuddyPress (1.7)
+	 * @since BuddyPress (1.7.0)
 	 */
 	public function __construct() {
 		add_action( 'bp_setup_theme_compat', array( $this, 'is_members' ) );
 	}
 
 	/**
-	 * Are we looking at something that needs members theme compatability?
+	 * Are we looking at something that needs members theme compatibility?
 	 *
-	 * @since BuddyPress (1.7)
+	 * @since BuddyPress (1.7.0)
 	 */
 	public function is_members() {
 
@@ -330,11 +324,12 @@ class BP_Members_Theme_Compat {
 	/**
 	 * Add template hierarchy to theme compat for the members directory page.
 	 *
-	 * This is to mirror how WordPress has {@link https://codex.wordpress.org/Template_Hierarchy template hierarchy}.
+	 * This is to mirror how WordPress has
+	 * {@link https://codex.wordpress.org/Template_Hierarchy template hierarchy}.
 	 *
-	 * @since BuddyPress (1.8)
+	 * @since BuddyPress (1.8.0)
 	 *
-	 * @param string $templates The templates from bp_get_theme_compat_templates()
+	 * @param string $templates The templates from bp_get_theme_compat_templates().
 	 * @return array $templates Array of custom templates to look for.
 	 */
 	public function directory_template_hierarchy( $templates = array() ) {
@@ -352,9 +347,9 @@ class BP_Members_Theme_Compat {
 	}
 
 	/**
-	 * Update the global $post with directory data
+	 * Update the global $post with directory data.
 	 *
-	 * @since BuddyPress (1.7)
+	 * @since BuddyPress (1.7.0)
 	 */
 	public function directory_dummy_post() {
 		bp_theme_compat_reset_post( array(
@@ -363,7 +358,7 @@ class BP_Members_Theme_Compat {
 			'post_author'    => 0,
 			'post_date'      => 0,
 			'post_content'   => '',
-			'post_type'      => 'bp_members',
+			'post_type'      => 'page',
 			'post_status'    => 'publish',
 			'is_page'        => true,
 			'comment_status' => 'closed'
@@ -371,9 +366,9 @@ class BP_Members_Theme_Compat {
 	}
 
 	/**
-	 * Filter the_content with the members index template part
+	 * Filter the_content with the members index template part.
 	 *
-	 * @since BuddyPress (1.7)
+	 * @since BuddyPress (1.7.0)
 	 */
 	public function directory_content() {
 		return bp_buffer_template_part( 'members/index', null, false );
@@ -384,11 +379,13 @@ class BP_Members_Theme_Compat {
 	/**
 	 * Add custom template hierarchy to theme compat for member pages.
 	 *
-	 * This is to mirror how WordPress has {@link https://codex.wordpress.org/Template_Hierarchy template hierarchy}.
+	 * This is to mirror how WordPress has
+	 * {@link https://codex.wordpress.org/Template_Hierarchy template hierarchy}.
 	 *
-	 * @since BuddyPress (1.8)
+	 * @since BuddyPress (1.8.0)
 	 *
-	 * @param string $templates The templates from bp_get_theme_compat_templates()
+	 * @param string $templates The templates from
+	 *        bp_get_theme_compat_templates().
 	 * @return array $templates Array of custom templates to look for.
 	 */
 	public function single_template_hierarchy( $templates ) {
@@ -412,9 +409,9 @@ class BP_Members_Theme_Compat {
 	}
 
 	/**
-	 * Update the global $post with the displayed user's data
+	 * Update the global $post with the displayed user's data.
 	 *
-	 * @since BuddyPress (1.7)
+	 * @since BuddyPress (1.7.0)
 	 */
 	public function single_dummy_post() {
 		bp_theme_compat_reset_post( array(
@@ -423,7 +420,7 @@ class BP_Members_Theme_Compat {
 			'post_author'    => 0,
 			'post_date'      => 0,
 			'post_content'   => '',
-			'post_type'      => 'bp_members',
+			'post_type'      => 'page',
 			'post_status'    => 'publish',
 			'is_page'        => true,
 			'comment_status' => 'closed'
@@ -431,9 +428,9 @@ class BP_Members_Theme_Compat {
 	}
 
 	/**
-	 * Filter the_content with the members' single home template part
+	 * Filter the_content with the members' single home template part.
 	 *
-	 * @since BuddyPress (1.7)
+	 * @since BuddyPress (1.7.0)
 	 */
 	public function single_dummy_content() {
 		return bp_buffer_template_part( 'members/single/home', null, false );
@@ -447,14 +444,14 @@ new BP_Members_Theme_Compat();
  * This class sets up the necessary theme compatability actions to safely output
  * registration template parts to the_title and the_content areas of a theme.
  *
- * @since BuddyPress (1.7)
+ * @since BuddyPress (1.7.0)
  */
 class BP_Registration_Theme_Compat {
 
 	/**
 	 * Setup the groups component theme compatibility
 	 *
-	 * @since BuddyPress (1.7)
+	 * @since BuddyPress (1.7.0)
 	 */
 	public function __construct() {
 		add_action( 'bp_setup_theme_compat', array( $this, 'is_registration' ) );
@@ -463,7 +460,7 @@ class BP_Registration_Theme_Compat {
 	/**
 	 * Are we looking at either the registration or activation pages?
 	 *
-	 * @since BuddyPress (1.7)
+	 * @since BuddyPress (1.7.0)
 	 */
 	public function is_registration() {
 
@@ -484,13 +481,14 @@ class BP_Registration_Theme_Compat {
 	/** Template ***********************************************************/
 
 	/**
-	 * Add template hierarchy to theme compat for registration / activation pages.
+	 * Add template hierarchy to theme compat for registration/activation pages.
 	 *
-	 * This is to mirror how WordPress has {@link https://codex.wordpress.org/Template_Hierarchy template hierarchy}.
+	 * This is to mirror how WordPress has
+	 * {@link https://codex.wordpress.org/Template_Hierarchy template hierarchy}.
 	 *
-	 * @since BuddyPress (1.8)
+	 * @since BuddyPress (1.8.0)
 	 *
-	 * @param string $templates The templates from bp_get_theme_compat_templates()
+	 * @param string $templates The templates from bp_get_theme_compat_templates().
 	 * @return array $templates Array of custom templates to look for.
 	 */
 	public function template_hierarchy( $templates ) {
@@ -509,9 +507,9 @@ class BP_Registration_Theme_Compat {
 	}
 
 	/**
-	 * Update the global $post with dummy data
+	 * Update the global $post with dummy data.
 	 *
-	 * @since BuddyPress (1.7)
+	 * @since BuddyPress (1.7.0)
 	 */
 	public function dummy_post() {
 		// Registration page
@@ -531,15 +529,13 @@ class BP_Registration_Theme_Compat {
 			}
 		}
 
-		$post_type = bp_is_register_page() ? 'bp_register' : 'bp_activate';
-
 		bp_theme_compat_reset_post( array(
 			'ID'             => 0,
 			'post_title'     => $title,
 			'post_author'    => 0,
 			'post_date'      => 0,
 			'post_content'   => '',
-			'post_type'      => $post_type,
+			'post_type'      => 'page',
 			'post_status'    => 'publish',
 			'is_page'        => true,
 			'comment_status' => 'closed'
@@ -549,7 +545,7 @@ class BP_Registration_Theme_Compat {
 	/**
 	 * Filter the_content with either the register or activate templates.
 	 *
-	 * @since BuddyPress (1.7)
+	 * @since BuddyPress (1.7.0)
 	 */
 	public function dummy_content() {
 		if ( bp_is_register_page() ) {
diff --git a/wp-content/plugins/buddypress/bp-members/bp-members-template.php b/wp-content/plugins/buddypress/bp-members/bp-members-template.php
index 574169337..dbce029dd 100644
--- a/wp-content/plugins/buddypress/bp-members/bp-members-template.php
+++ b/wp-content/plugins/buddypress/bp-members/bp-members-template.php
@@ -3,7 +3,7 @@
 /**
  * BuddyPress Member Template Tags
  *
- * Functions that are safe to use inside your template files and themes
+ * Functions that are safe to use inside your template files and themes.
  *
  * @package BuddyPress
  * @subpackage Members
@@ -13,11 +13,9 @@
 if ( !defined( 'ABSPATH' ) ) exit;
 
 /**
- * Output the members component slug
+ * Output the members component slug.
  *
- * @package BuddyPress
- * @subpackage Members Template
- * @since BuddyPress (1.5)
+ * @since BuddyPress (1.5.0)
  *
  * @uses bp_get_members_slug()
  */
@@ -25,22 +23,20 @@ function bp_members_slug() {
 	echo bp_get_members_slug();
 }
 	/**
-	 * Return the members component slug
+	 * Return the members component slug.
+	 *
+	 * @since BuddyPress (1.5.0)
 	 *
-	 * @package BuddyPress
-	 * @subpackage Members Template
-	 * @since BuddyPress (1.5)
+	 * @return string
 	 */
 	function bp_get_members_slug() {
 		return apply_filters( 'bp_get_members_slug', buddypress()->members->slug );
 	}
 
 /**
- * Output the members component root slug
+ * Output the members component root slug.
  *
- * @package BuddyPress
- * @subpackage Members Template
- * @since BuddyPress (1.5)
+ * @since BuddyPress (1.5.0)
  *
  * @uses bp_get_members_root_slug()
  */
@@ -48,37 +44,31 @@ function bp_members_root_slug() {
 	echo bp_get_members_root_slug();
 }
 	/**
-	 * Return the members component root slug
+	 * Return the members component root slug.
+	 *
+	 * @since BuddyPress (1.5.0)
 	 *
-	 * @package BuddyPress
-	 * @subpackage Members Template
-	 * @since BuddyPress (1.5)
+	 * @return string
 	 */
 	function bp_get_members_root_slug() {
 		return apply_filters( 'bp_get_members_root_slug', buddypress()->members->root_slug );
 	}
 
 /**
- * Output member directory permalink
+ * Output member directory permalink.
+ *
+ * @since BuddyPress (1.5.0)
  *
- * @package BuddyPress
- * @subpackage Members Template
- * @since BuddyPress (1.5)
  * @uses bp_get_members_directory_permalink()
  */
 function bp_members_directory_permalink() {
 	echo bp_get_members_directory_permalink();
 }
 	/**
-	 * Return member directory permalink
+	 * Return member directory permalink.
+	 *
+	 * @since BuddyPress (1.5.0)
 	 *
-	 * @package BuddyPress
-	 * @subpackage Members Template
-	 * @since BuddyPress (1.5)
-	 * @uses apply_filters()
-	 * @uses traisingslashit()
-	 * @uses bp_get_root_domain()
-	 * @uses bp_get_members_root_slug()
 	 * @return string
 	 */
 	function bp_get_members_directory_permalink() {
@@ -86,11 +76,9 @@ function bp_members_directory_permalink() {
 	}
 
 /**
- * Output the sign-up slug
+ * Output the sign-up slug.
  *
- * @package BuddyPress
- * @subpackage Members Template
- * @since BuddyPress (1.5)
+ * @since BuddyPress (1.5.0)
  *
  * @uses bp_get_signup_slug()
  */
@@ -98,11 +86,11 @@ function bp_signup_slug() {
 	echo bp_get_signup_slug();
 }
 	/**
-	 * Return the sign-up slug
+	 * Return the sign-up slug.
+	 *
+	 * @since BuddyPress (1.5.0)
 	 *
-	 * @package BuddyPress
-	 * @subpackage Members Template
-	 * @since BuddyPress (1.5)
+	 * @return string
 	 */
 	function bp_get_signup_slug() {
 		$bp = buddypress();
@@ -119,11 +107,9 @@ function bp_signup_slug() {
 	}
 
 /**
- * Output the activation slug
+ * Output the activation slug.
  *
- * @package BuddyPress
- * @subpackage Members Template
- * @since BuddyPress (1.5)
+ * @since BuddyPress (1.5.0)
  *
  * @uses bp_get_activate_slug()
  */
@@ -131,11 +117,11 @@ function bp_activate_slug() {
 	echo bp_get_activate_slug();
 }
 	/**
-	 * Return the activation slug
+	 * Return the activation slug.
+	 *
+	 * @since BuddyPress (1.5.0)
 	 *
-	 * @package BuddyPress
-	 * @subpackage Members Template
-	 * @since BuddyPress (1.5)
+	 * @return string
 	 */
 	function bp_get_activate_slug() {
 		$bp = buddypress();
@@ -151,24 +137,104 @@ function bp_activate_slug() {
 		return apply_filters( 'bp_get_activate_slug', $slug );
 	}
 
-/***
- * Members template loop that will allow you to loop all members or friends of a member
- * if you pass a user_id.
+/**
+ * The main member template loop class.
+ *
+ * Responsible for loading a group of members into a loop for display.
  */
-
 class BP_Core_Members_Template {
+
+	/**
+	 * The loop iterator.
+	 *
+	 * @access public
+	 * @var int
+	 */
 	var $current_member = -1;
+
+	/**
+	 * The number of members returned by the paged query.
+	 *
+	 * @access public
+	 * @var int
+	 */
 	var $member_count;
+
+	/**
+	 * Array of members located by the query.
+	 *
+	 * @access public
+	 * @var array
+	 */
 	var $members;
+
+	/**
+	 * The member object currently being iterated on.
+	 *
+	 * @access public
+	 * @var object
+	 */
 	var $member;
 
+	/**
+	 * A flag for whether the loop is currently being iterated.
+	 *
+	 * @access public
+	 * @var bool
+	 */
 	var $in_the_loop;
 
+	/**
+	 * The page number being requested.
+	 *
+	 * @access public
+	 * @var public
+	 */
 	var $pag_page;
+
+	/**
+	 * The number of items being requested per page.
+	 *
+	 * @access public
+	 * @var public
+	 */
 	var $pag_num;
+
+	/**
+	 * An HTML string containing pagination links.
+	 *
+	 * @access public
+	 * @var string
+	 */
 	var $pag_links;
+
+	/**
+	 * The total number of members matching the query parameters.
+	 *
+	 * @access public
+	 * @var int
+	 */
 	var $total_member_count;
 
+	/**
+	 * Constructor method.
+	 *
+	 * @see BP_User_Query for an in-depth description of parameters.
+	 *
+	 * @param string $type Sort order.
+	 * @param int $page_number Page of results.
+	 * @param int $per_page Number of results per page.
+	 * @param int $max Max number of results to return.
+	 * @param int $user_id Limit to friends of a user.
+	 * @param string $search_terms Limit to users matching search terms.
+	 * @param array $include Limit results by these user IDs.
+	 * @param bool $populate_extras Fetch optional extras.
+	 * @param array $exclude Exclude these IDs from results.
+	 * @param array $meta_key Limit to users with a meta_key.
+	 * @param array $meta_value Limit to users with a meta_value (with meta_key).
+	 * @param array $page_arg Optional. The string used as a query
+	 *        parameter in pagination links. Default: 'upage'.
+	 */
 	function __construct( $type, $page_number, $per_page, $max, $user_id, $search_terms, $include, $populate_extras, $exclude, $meta_key, $meta_value, $page_arg = 'upage' ) {
 
 		$this->pag_page = !empty( $_REQUEST[$page_arg] ) ? intval( $_REQUEST[$page_arg] ) : (int) $page_number;
@@ -198,8 +264,22 @@ class BP_Core_Members_Template {
 		}
 
 		if ( (int) $this->total_member_count && (int) $this->pag_num ) {
+			$pag_args = array(
+				$page_arg => '%#%',
+			);
+
+			if ( defined( 'DOING_AJAX' ) && true === (bool) DOING_AJAX ) {
+				$base = remove_query_arg( 's', wp_get_referer() );
+			} else {
+				$base = '';
+			}
+
+			if ( ! empty( $search_terms ) ) {
+				$pag_args['s'] = urlencode( $search_terms );
+			}
+
 			$this->pag_links = paginate_links( array(
-				'base'      => add_query_arg( $page_arg, '%#%' ),
+				'base'      => add_query_arg( $pag_args, $base ),
 				'format'    => '',
 				'total'     => ceil( (int) $this->total_member_count / (int) $this->pag_num ),
 				'current'   => (int) $this->pag_page,
@@ -210,6 +290,13 @@ class BP_Core_Members_Template {
 		}
 	}
 
+	/**
+	 * Whether there are members available in the loop.
+	 *
+	 * @see bp_has_members()
+	 *
+	 * @return bool True if there are items in the loop, otherwise false.
+	 */
 	function has_members() {
 		if ( $this->member_count )
 			return true;
@@ -217,6 +304,11 @@ class BP_Core_Members_Template {
 		return false;
 	}
 
+	/**
+	 * Set up the next member and iterate index.
+	 *
+	 * @return object The next member to iterate over.
+	 */
 	function next_member() {
 		$this->current_member++;
 		$this->member = $this->members[$this->current_member];
@@ -224,6 +316,9 @@ class BP_Core_Members_Template {
 		return $this->member;
 	}
 
+	/**
+	 * Rewind the members and reset member index.
+	 */
 	function rewind_members() {
 		$this->current_member = -1;
 		if ( $this->member_count > 0 ) {
@@ -231,6 +326,17 @@ class BP_Core_Members_Template {
 		}
 	}
 
+	/**
+	 * Whether there are members left in the loop to iterate over.
+	 *
+	 * This method is used by {@link bp_members()} as part of the while loop
+	 * that controls iteration inside the members loop, eg:
+	 *     while ( bp_members() ) { ...
+	 *
+	 * @see bp_members()
+	 *
+	 * @return bool True if there are more members to show, otherwise false.
+	 */
 	function members() {
 		if ( $this->current_member + 1 < $this->member_count ) {
 			return true;
@@ -244,6 +350,15 @@ class BP_Core_Members_Template {
 		return false;
 	}
 
+	/**
+	 * Set up the current member inside the loop.
+	 *
+	 * Used by {@link bp_the_member()} to set up the current member data
+	 * while looping, so that template tags used during that iteration make
+	 * reference to the current member.
+	 *
+	 * @see bp_the_member()
+	 */
 	function the_member() {
 
 		$this->in_the_loop = true;
@@ -255,24 +370,67 @@ class BP_Core_Members_Template {
 	}
 }
 
+/**
+ * Rewind the members and reset member index.
+ */
 function bp_rewind_members() {
 	global $members_template;
 
 	return $members_template->rewind_members();
 }
 
+/**
+ * Initialize the members loop.
+ *
+ * Based on the $args passed, bp_has_members() populates the $members_template
+ * global, enabling the use of BuddyPress templates and template functions to
+ * display a list of members.
+ *
+ * @global object $members_template {@link BP_Members_Template}
+ *
+ * @param array $args {
+ *     Arguments for limiting the contents of the members loop. Most arguments
+ *     are in the same format as {@link BP_User_Query}. However, because
+ *     the format of the arguments accepted here differs in a number of ways,
+ *     and because bp_has_members() determines some default arguments in a
+ *     dynamic fashion, we list all accepted arguments here as well.
+ *
+ *     Arguments can be passed as an associative array, or as a URL query
+ *     string (eg, 'user_id=4&per_page=3').
+ *
+ *     @type int $type Sort order. 'active', 'random', 'newest', 'popular',
+ *           'online', 'alphabetical'. Default: 'active'.
+ *     @type int|bool $page Page of results to display. Default: 1.
+ *     @type int|bool $per_page Number of results per page. Default: 20.
+ *     @type int|bool $max Maximum number of results to return.
+ *           Default: false (unlimited).
+ *     @type string $page_arg The string used as a query parameter in
+ *           pagination links. Default: 'bpage'.
+ *     @type array|int|string|bool $include Limit results by a list of user
+ *           IDs. Accepts an array, a single integer, a comma-separated list of
+ *           IDs, or false (to disable this limiting). Default: false.
+ *	     'active', 'alphabetical', 'newest', or 'random'.
+ *     @type array|int|string|bool $exclude Exclude users from results by ID.
+ *           Accepts an array, a single integer, a comma-separated list of
+ *           IDs, or false (to disable this limiting). Default: false.
+ *     @type int $user_id If provided, results are limited to the friends of
+ *           the specified user. When on a user's Friends page, defaults to
+ *           the ID of the displayed user. Otherwise defaults to 0.
+ *     @type string $search_terms Limit results by a search term. Default: null.
+ *     @type string $meta_key Limit results by the presence of a usermeta key.
+ *           Default: false.
+ *     @type mixed $meta_value When used with meta_key, limits results by the
+ *           a matching usermeta value. Default: false.
+ *     @type bool $populate_extras Whether to fetch optional data, such as
+ *           friend counts. Default: true.
+ * }
+ * @return bool Returns true when blogs are found, otherwise false.
+ */
 function bp_has_members( $args = '' ) {
 	global $members_template;
 
-	/***
-	 * Set the defaults based on the current page. Any of these will be overridden
-	 * if arguments are directly passed into the loop. Custom plugins should always
-	 * pass their parameters directly to the loop.
-	 */
-	$type         = 'active';
-	$user_id      = 0;
-	$page         = 1;
-	$search_terms = null;
+	// Default user ID
+	$user_id = 0;
 
 	// User filtering
 	if ( bp_is_user_friends() && ! bp_is_user_friend_requests() ) {
@@ -280,58 +438,90 @@ function bp_has_members( $args = '' ) {
 	}
 
 	// type: active ( default ) | random | newest | popular | online | alphabetical
-	$defaults = array(
-		'type'            => $type,
-		'page'            => $page,
+	$r = bp_parse_args( $args, array(
+		'type'            => 'active',
+		'page'            => 1,
 		'per_page'        => 20,
 		'max'             => false,
 
-		'page_arg'        => 'upage',       // See https://buddypress.trac.wordpress.org/ticket/3679
-
-		'include'         => false,         // Pass a user_id or a list (comma-separated or array) of user_ids to only show these users
-		'exclude'         => false,         // Pass a user_id or a list (comma-separated or array) of user_ids to exclude these users
+		'page_arg'        => 'upage',  // See https://buddypress.trac.wordpress.org/ticket/3679
 
-		'user_id'         => $user_id,      // Pass a user_id to only show friends of this user
-		'search_terms'    => $search_terms, // Pass search_terms to filter users by their profile data
+		'include'         => false,    // Pass a user_id or a list (comma-separated or array) of user_ids to only show these users
+		'exclude'         => false,    // Pass a user_id or a list (comma-separated or array) of user_ids to exclude these users
 
-		'meta_key'        => false,	        // Only return users with this usermeta
-		'meta_value'	  => false,	        // Only return users where the usermeta value matches. Requires meta_key
+		'user_id'         => $user_id, // Pass a user_id to only show friends of this user
+		'search_terms'    => null,     // Pass search_terms to filter users by their profile data
 
-		'populate_extras' => true           // Fetch usermeta? Friend count, last active etc.
-	);
+		'meta_key'        => false,	   // Only return users with this usermeta
+		'meta_value'	  => false,	   // Only return users where the usermeta value matches. Requires meta_key
 
-	$r = bp_parse_args( $args, $defaults, 'has_members' );
-	extract( $r );
+		'populate_extras' => true      // Fetch usermeta? Friend count, last active etc.
+	), 'has_members' );
 
 	// Pass a filter if ?s= is set.
-	if ( is_null( $search_terms ) ) {
-		if ( !empty( $_REQUEST['s'] ) )
-			$search_terms = $_REQUEST['s'];
-		else
-			$search_terms = false;
+	if ( is_null( $r['search_terms'] ) ) {
+		if ( !empty( $_REQUEST['s'] ) ) {
+			$r['search_terms'] = $_REQUEST['s'];
+		} else {
+			$r['search_terms'] = false;
+		}
 	}
 
 	// Set per_page to max if max is larger than per_page
-	if ( !empty( $max ) && ( $per_page > $max ) )
-		$per_page = $max;
+	if ( !empty( $r['max'] ) && ( $r['per_page'] > $r['max'] ) ) {
+		$r['per_page'] = $r['max'];
+	}
+
+	// Query for members and populate $members_template global
+	$members_template = new BP_Core_Members_Template(
+		$r['type'],
+		$r['page'],
+		$r['per_page'],
+		$r['max'],
+		$r['user_id'],
+		$r['search_terms'],
+		$r['include'],
+		$r['populate_extras'],
+		$r['exclude'],
+		$r['meta_key'],
+		$r['meta_value'],
+		$r['page_arg']
+	);
 
-	$members_template = new BP_Core_Members_Template( $type, $page, $per_page, $max, $user_id, $search_terms, $include, (bool)$populate_extras, $exclude, $meta_key, $meta_value, $page_arg );
 	return apply_filters( 'bp_has_members', $members_template->has_members(), $members_template );
 }
 
+/**
+ * Set up the current member inside the loop.
+ *
+ * @return object
+ */
 function bp_the_member() {
 	global $members_template;
 	return $members_template->the_member();
 }
 
+/**
+ * Check whether there are more members to iterate over.
+ *
+ * @return bool
+ */
 function bp_members() {
 	global $members_template;
 	return $members_template->members();
 }
 
+/**
+ * Output the members pagination count.
+ */
 function bp_members_pagination_count() {
 	echo bp_get_members_pagination_count();
 }
+	/**
+	 * Generate the members pagination count.
+	 *
+	 * @return string
+	 */
 	function bp_get_members_pagination_count() {
 		global $members_template;
 
@@ -344,20 +534,28 @@ function bp_members_pagination_count() {
 		$total     = bp_core_number_format( $members_template->total_member_count );
 
 		if ( 'active' == $members_template->type )
-			$pag = sprintf( _n( 'Viewing member %1$s to %2$s (of %3$s active member)', 'Viewing member %1$s to %2$s (of %3$s active members)', $total, 'buddypress' ), $from_num, $to_num, $total );
+			$pag = sprintf( _n( 'Viewing 1 active member', 'Viewing %1$s - %2$s of %3$s active members', $members_template->total_member_count, 'buddypress' ), $from_num, $to_num, $total );
 		else if ( 'popular' == $members_template->type )
-			$pag = sprintf( _n( 'Viewing member %1$s to %2$s (of %3$s member with friends)', 'Viewing member %1$s to %2$s (of %3$s members with friends)', $total, 'buddypress' ), $from_num, $to_num, $total );
+			$pag = sprintf( _n( 'Viewing 1 member with friends', 'Viewing %1$s - %2$s of %3$s members with friends', $members_template->total_member_count, 'buddypress' ), $from_num, $to_num, $total );
 		else if ( 'online' == $members_template->type )
-			$pag = sprintf( _n( 'Viewing member %1$s to %2$s (of %3$s member online)', 'Viewing member %1$s to %2$s (of %3$s members online)', $total, 'buddypress' ), $from_num, $to_num, $total );
+			$pag = sprintf( _n( 'Viewing 1 online member', 'Viewing %1$s - %2$s of %3$s online members', $members_template->total_member_count, 'buddypress' ), $from_num, $to_num, $total );
 		else
-			$pag = sprintf( _n( 'Viewing member %1$s to %2$s (of %3$s member)', 'Viewing member %1$s to %2$s (of %3$s members)', $total, 'buddypress' ), $from_num, $to_num, $total );
+			$pag = sprintf( _n( 'Viewing 1 member', 'Viewing %1$s - %2$s of %3$s members', $members_template->total_member_count, 'buddypress' ), $from_num, $to_num, $total );
 
 		return apply_filters( 'bp_members_pagination_count', $pag );
 	}
 
+/**
+ * Output the members pagination links.
+ */
 function bp_members_pagination_links() {
 	echo bp_get_members_pagination_links();
 }
+	/**
+	 * Fetch the members pagination links.
+	 *
+	 * @return string
+	 */
 	function bp_get_members_pagination_links() {
 		global $members_template;
 
@@ -365,9 +563,7 @@ function bp_members_pagination_links() {
 	}
 
 /**
- * bp_member_user_id()
- *
- * Echo id from bp_get_member_user_id()
+ * Output the ID of the current member in the loop.
  *
  * @uses bp_get_member_user_id()
  */
@@ -375,12 +571,9 @@ function bp_member_user_id() {
 	echo bp_get_member_user_id();
 }
 	/**
-	 * bp_get_member_user_id()
-	 *
-	 * Get the id of the user in a members loop
+	 * Get the ID of the current member in the loop.
 	 *
-	 * @global object $members_template
-	 * @return string Members id
+	 * @return string Member ID.
 	 */
 	function bp_get_member_user_id() {
 		global $members_template;
@@ -389,19 +582,19 @@ function bp_member_user_id() {
 	}
 
 /**
- * Output the row class of a member
+ * Output the row class of the current member in the loop.
  *
- * @since BuddyPress (1.7)
+ * @since BuddyPress (1.7.0)
  */
 function bp_member_class() {
 	echo bp_get_member_class();
 }
 	/**
-	 * Return the row class of a member
+	 * Return the row class of the current member in the loop.
 	 *
-	 * @global BP_Core_Members_Template $members_template
-	 * @return string Row class of the member
-	 * @since BuddyPress (1.7)
+	 * @since BuddyPress (1.7.0)
+	 *
+	 * @return string Row class of the member.
 	 */
 	function bp_get_member_class() {
 		global $members_template;
@@ -430,22 +623,15 @@ function bp_member_class() {
 	}
 
 /**
- * bp_member_user_nicename()
- *
- * Echo nicename from bp_get_member_user_nicename()
- *
- * @uses bp_get_member_user_nicename()
+ * Output nicename of current member in the loop.
  */
 function bp_member_user_nicename() {
 	echo bp_get_member_user_nicename();
 }
 	/**
-	 * bp_get_member_user_nicename()
+	 * Get the nicename of the current member in the loop.
 	 *
-	 * Get the nicename of the user in a members loop
-	 *
-	 * @global object $members_template
-	 * @return string Members nicename
+	 * @return string Members nicename.
 	 */
 	function bp_get_member_user_nicename() {
 		global $members_template;
@@ -453,22 +639,15 @@ function bp_member_user_nicename() {
 	}
 
 /**
- * bp_member_user_login()
- *
- * Echo login from bp_get_member_user_login()
- *
- * @uses bp_get_member_user_login()
+ * Output login for current member in the loop.
  */
 function bp_member_user_login() {
 	echo bp_get_member_user_login();
 }
 	/**
-	 * bp_get_member_user_login()
+	 * Get the login of the current member in the loop.
 	 *
-	 * Get the login of the user in a members loop
-	 *
-	 * @global object $members_template
-	 * @return string Members login
+	 * @return string Member's login.
 	 */
 	function bp_get_member_user_login() {
 		global $members_template;
@@ -476,36 +655,61 @@ function bp_member_user_login() {
 	}
 
 /**
- * bp_member_user_email()
- *
- * Echo email address from bp_get_member_user_email()
- *
- * @uses bp_get_member_user_email()
+ * Output the email address for the current member in the loop.
  */
 function bp_member_user_email() {
 	echo bp_get_member_user_email();
 }
 	/**
-	 * bp_get_member_user_email()
+	 * Get the email address of the current member in the loop.
 	 *
-	 * Get the email address of the user in a members loop
-	 *
-	 * @global object $members_template
-	 * @return string Members email address
+	 * @return string Member's email address.
 	 */
 	function bp_get_member_user_email() {
 		global $members_template;
 		return apply_filters( 'bp_get_member_user_email', $members_template->member->user_email );
 	}
 
+/**
+ * Check whether the current member in the loop is the logged-in user.
+ *
+ * @return bool
+ */
 function bp_member_is_loggedin_user() {
 	global $members_template;
 	return apply_filters( 'bp_member_is_loggedin_user', bp_loggedin_user_id() == $members_template->member->id ? true : false );
 }
 
+/**
+ * Output a member's avatar.
+ *
+ * @see bp_get_member_avatar() for description of arguments.
+ *
+ * @param array $args See {@link bp_get_member_avatar()}.
+ */
 function bp_member_avatar( $args = '' ) {
 	echo apply_filters( 'bp_member_avatar', bp_get_member_avatar( $args ) );
 }
+	/**
+	 * Get a member's avatar.
+	 *
+	 * @see bp_core_fetch_avatar() For a description of arguments and
+	 *      return values.
+	 *
+	 * @param array $args  {
+	 *     Arguments are listed here with an explanation of their defaults.
+	 *     For more information about the arguments, see
+	 *     {@link bp_core_fetch_avatar()}.
+	 *     @type string $alt Default: 'Profile picture of [user name]'.
+	 *     @type string $class Default: 'avatar'.
+	 *     @type string $type Default: 'thumb'.
+	 *     @type int|bool $width Default: false.
+	 *     @type int|bool $height Default: false.
+	 *     @type bool $id Currently unused.
+	 *     @type bool $no_grav Default: false.
+	 * }
+	 * @return string User avatar string.
+	 */
 	function bp_get_member_avatar( $args = '' ) {
 		global $members_template;
 
@@ -526,36 +730,48 @@ function bp_member_avatar( $args = '' ) {
 		return apply_filters( 'bp_get_member_avatar', bp_core_fetch_avatar( array( 'item_id' => $members_template->member->id, 'type' => $type, 'alt' => $alt, 'css_id' => $id, 'class' => $class, 'width' => $width, 'height' => $height, 'email' => $members_template->member->user_email ) ) );
 	}
 
+/**
+ * Output the permalink for the current member in the loop.
+ */
 function bp_member_permalink() {
 	echo bp_get_member_permalink();
 }
+	/**
+	 * Get the permalink for the current member in the loop.
+	 *
+	 * @return string
+	 */
 	function bp_get_member_permalink() {
 		global $members_template;
 
 		return apply_filters( 'bp_get_member_permalink', bp_core_get_user_domain( $members_template->member->id, $members_template->member->user_nicename, $members_template->member->user_login ) );
 	}
+
+	/**
+	 * Alias of {@link bp_member_permalink()}.
+	 */
 	function bp_member_link() { echo bp_get_member_permalink(); }
+
+	/**
+	 * Alias of {@link bp_get_member_permalink()}.
+	 */
 	function bp_get_member_link() { return bp_get_member_permalink(); }
 
 /**
- * Echoes bp_get_member_name()
- *
- * @package BuddyPress
+ * Output display name of current member in the loop.
  */
 function bp_member_name() {
 	echo apply_filters( 'bp_member_name', bp_get_member_name() );
 }
 	/**
-	 * Used inside a bp_has_members() loop, this function returns a user's full name
-	 *
-	 * Full name is, by default, pulled from xprofile's Full Name field. When this field is
-	 * empty, we try to get an alternative name from the WP users table, in the following order
-	 * of preference: display_name, user_nicename, user_login.
+	 * Get the display name of the current member in the loop.
 	 *
-	 * @package BuddyPress
+	 * Full name is, by default, pulled from xprofile's Full Name field.
+	 * When this field is empty, we try to get an alternative name from the
+	 * WP users table, in the following order of preference: display_name,
+	 * user_nicename, user_login.
 	 *
-	 * @uses apply_filters() Filter bp_get_the_member_name() to alter the function's output
-	 * @return string The user's fullname for display
+	 * @return string The user's fullname for display.
 	 */
 	function bp_get_member_name() {
 		global $members_template;
@@ -599,34 +815,59 @@ function bp_member_last_active( $args = array() ) {
 	 *
 	 * @param array $args {
 	 *     Array of optional arguments.
-	 *     @type bool $active_format If true, formatted "Active 5 minutes
-	 *           ago". If false, formatted "5 minutes ago". Default: true.
+	 *     @type mixed $active_format If true, formatted "active 5 minutes
+	 *           ago". If false, formatted "5 minutes ago". If string, should
+	 *           be sprintf'able like 'last seen %s ago'.
 	 * }
 	 * @return string
 	 */
 	function bp_get_member_last_active( $args = array() ) {
 		global $members_template;
 
-		$r = wp_parse_args( $args, array(
-			'active_format' => true,
+		// Parse the activity format
+		$r = bp_parse_args( $args, array(
+			'active_format' => true
 		) );
 
+		// Backwards compatibilty for anyone forcing a 'true' active_format
+		if ( true === $r['active_format'] ) {
+			$r['active_format'] = __( 'active %s', 'buddypress' );
+		}
+
+		// Member has logged in at least one time
 		if ( isset( $members_template->member->last_activity ) ) {
-			if ( ! empty( $r['active_format'] ) ) {
-				$last_activity = bp_core_get_last_activity( $members_template->member->last_activity, __( 'active %s', 'buddypress' ) );
-			} else {
-				$last_activity = bp_core_time_since( $members_template->member->last_activity );
-			}
+
+			// Backwards compatibility for pre 1.5 'ago' strings
+			$last_activity = ! empty( $r['active_format'] )
+				? bp_core_get_last_activity( $members_template->member->last_activity, $r['active_format'] )
+				: bp_core_time_since( $members_template->member->last_activity );
+
+		// Member has never logged in or been active
 		} else {
 			$last_activity = __( 'Never active', 'buddypress' );
 		}
 
-		return apply_filters( 'bp_member_last_active', $last_activity );
+		// Filter and return
+		return apply_filters( 'bp_member_last_active', $last_activity, $r );
 	}
 
+/**
+ * Output the latest update of the current member in the loop.
+ */
 function bp_member_latest_update( $args = '' ) {
 	echo bp_get_member_latest_update( $args );
 }
+	/**
+	 * Get the latest update from the current member in the loop.
+	 *
+	 * @param array $args {
+	 *     Array of optional arguments.
+	 *     @type int $length Truncation length. Default: 225.
+	 *     @type bool $view_link Whether to provide a 'View' link for
+	 *           truncated entries. Default: false.
+	 * }
+	 * @return string
+	 */
 	function bp_get_member_latest_update( $args = '' ) {
 		global $members_template;
 
@@ -641,7 +882,9 @@ function bp_member_latest_update( $args = '' ) {
 		if ( !bp_is_active( 'activity' ) || empty( $members_template->member->latest_update ) || !$update = maybe_unserialize( $members_template->member->latest_update ) )
 			return false;
 
-		$update_content = apply_filters( 'bp_get_activity_latest_update_excerpt', sprintf( _x( '- &quot;%s &quot;', 'member latest update in member directory', 'buddypress' ), trim( strip_tags( bp_create_excerpt( $update['content'], $length ) ) ) ) );
+		$update_content = apply_filters( 'bp_get_activity_latest_update_excerpt', trim( strip_tags( bp_create_excerpt( $update['content'], $length ) ) ) );
+
+		$update_content = sprintf( _x( '- &quot;%s&quot;', 'member latest update in member directory', 'buddypress' ), $update_content );
 
 		// If $view_link is true and the text returned by bp_create_excerpt() is different from the original text (ie it's
 		// been truncated), add the "View" link.
@@ -729,17 +972,28 @@ function bp_member_profile_data( $args = '' ) {
 		return apply_filters( 'bp_get_member_profile_data', $data );
 	}
 
+/**
+ * Output the 'registered [x days ago]' string for the current member.
+ */
 function bp_member_registered() {
 	echo bp_get_member_registered();
 }
+	/**
+	 * Get the 'registered [x days ago]' string for the current member.
+	 *
+	 * @return string
+	 */
 	function bp_get_member_registered() {
 		global $members_template;
 
 		$registered = esc_attr( bp_core_get_last_activity( $members_template->member->user_registered, _x( 'registered %s', 'Records the timestamp that the user registered into the activy stream', 'buddypress' ) ) );
 
-		return apply_filters( 'bp_member_last_active', $registered );
+		return apply_filters( 'bp_member_registered', $registered );
 	}
 
+/**
+ * Output a random piece of profile data for the current member in the loop.
+ */
 function bp_member_random_profile_data() {
 	global $members_template;
 
@@ -750,6 +1004,9 @@ function bp_member_random_profile_data() {
 	<?php }
 }
 
+/**
+ * Output hidden input for preserving member search params on form submit.
+ */
 function bp_member_hidden_fields() {
 	if ( isset( $_REQUEST['s'] ) )
 		echo '<input type="hidden" id="search_terms" value="' . esc_attr( $_REQUEST['s'] ) . '" name="search_terms" />';
@@ -761,6 +1018,9 @@ function bp_member_hidden_fields() {
 		echo '<input type="hidden" id="search_terms" value="' . esc_attr( $_REQUEST['members_search'] ) . '" name="search_terms" />';
 }
 
+/**
+ * Output the Members directory search form.
+ */
 function bp_directory_members_search_form() {
 
 	$default_search_value = bp_get_search_default_text( 'members' );
@@ -774,29 +1034,37 @@ function bp_directory_members_search_form() {
 	echo apply_filters( 'bp_directory_members_search_form', $search_form_html );
 }
 
+/**
+ * Output the total member count.
+ */
 function bp_total_site_member_count() {
 	echo bp_get_total_site_member_count();
 }
+	/**
+	 * Get the total site member count.
+	 *
+	 * @return int
+	 */
 	function bp_get_total_site_member_count() {
 		return apply_filters( 'bp_get_total_site_member_count', bp_core_number_format( bp_core_get_total_member_count() ) );
 	}
 
-/** Navigation and other misc template tags **/
+/** Navigation and other misc template tags ***********************************/
 
 /**
- * Uses the $bp->bp_nav global to render out the navigation within a BuddyPress install.
- * Each component adds to this navigation array within its own [component_name]setup_nav() function.
+ * Render the navigation markup for the logged-in user.
+ *
+ * Each component adds to this navigation array within its own
+ * [component_name]setup_nav() function.
  *
  * This navigation array is the top level navigation, so it contains items such as:
  *      [Blog, Profile, Messages, Groups, Friends] ...
  *
- * The function will also analyze the current component the user is in, to determine whether
- * or not to highlight a particular nav item.
+ * The function will also analyze the current component the user is in, to
+ * determine whether or not to highlight a particular nav item.
  *
- * @package BuddyPress Core
  * @todo Move to a back-compat file?
- * @deprecated Does not seem to be called anywhere in the core
- * @global BuddyPress $bp The one true BuddyPress instance
+ * @deprecated Does not seem to be called anywhere in BP core.
  */
 function bp_get_loggedin_user_nav() {
 	global $bp;
@@ -838,11 +1106,7 @@ function bp_get_loggedin_user_nav() {
 }
 
 /**
- * Uses the $bp->bp_nav global to render out the user navigation when viewing another user other than
- * yourself.
- *
- * @package BuddyPress Core
- * @global BuddyPress $bp The one true BuddyPress instance
+ * Render the navigation markup for the displayed user.
  */
 function bp_get_displayed_user_nav() {
 	global $bp;
@@ -868,9 +1132,32 @@ function bp_get_displayed_user_nav() {
 
 /** Avatars *******************************************************************/
 
+/**
+ * Output the logged-in user's avatar.
+ *
+ * @see bp_get_loggedin_user_avatar() for a description of params.
+ */
 function bp_loggedin_user_avatar( $args = '' ) {
 	echo bp_get_loggedin_user_avatar( $args );
 }
+	/**
+	 * Get the logged-in user's avatar.
+	 *
+	 * @see bp_core_fetch_avatar() For a description of arguments and
+	 *      return values.
+	 *
+	 * @param array $args  {
+	 *     Arguments are listed here with an explanation of their defaults.
+	 *     For more information about the arguments, see
+	 *     {@link bp_core_fetch_avatar()}.
+	 *     @type string $alt Default: 'Profile picture of [user name]'.
+	 *     @type bool $html Default: true.
+	 *     @type string $type Default: 'thumb'.
+	 *     @type int|bool $width Default: false.
+	 *     @type int|bool $height Default: false.
+	 * }
+	 * @return string User avatar string.
+	 */
 	function bp_get_loggedin_user_avatar( $args = '' ) {
 
 		$defaults = array(
@@ -887,9 +1174,32 @@ function bp_loggedin_user_avatar( $args = '' ) {
 		return apply_filters( 'bp_get_loggedin_user_avatar', bp_core_fetch_avatar( array( 'item_id' => bp_loggedin_user_id(), 'type' => $type, 'width' => $width, 'height' => $height, 'html' => $html, 'alt' => $alt ) ) );
 	}
 
+/**
+ * Output the displayed user's avatar.
+ *
+ * @see bp_get_displayed_user_avatar() for a description of params.
+ */
 function bp_displayed_user_avatar( $args = '' ) {
 	echo bp_get_displayed_user_avatar( $args );
 }
+	/**
+	 * Get the displayed user's avatar.
+	 *
+	 * @see bp_core_fetch_avatar() For a description of arguments and
+	 *      return values.
+	 *
+	 * @param array $args  {
+	 *     Arguments are listed here with an explanation of their defaults.
+	 *     For more information about the arguments, see
+	 *     {@link bp_core_fetch_avatar()}.
+	 *     @type string $alt Default: 'Profile picture of [user name]'.
+	 *     @type bool $html Default: true.
+	 *     @type string $type Default: 'thumb'.
+	 *     @type int|bool $width Default: false.
+	 *     @type int|bool $height Default: false.
+	 * }
+	 * @return string User avatar string.
+	 */
 	function bp_get_displayed_user_avatar( $args = '' ) {
 
 		$defaults = array(
@@ -906,9 +1216,17 @@ function bp_displayed_user_avatar( $args = '' ) {
 		return apply_filters( 'bp_get_displayed_user_avatar', bp_core_fetch_avatar( array( 'item_id' => bp_displayed_user_id(), 'type' => $type, 'width' => $width, 'height' => $height, 'html' => $html, 'alt' => $alt ) ) );
 	}
 
+/**
+ * Output the email address of the displayed user.
+ */
 function bp_displayed_user_email() {
 	echo bp_get_displayed_user_email();
 }
+	/**
+	 * Get the email address of the displayed user.
+	 *
+	 * @return string
+	 */
 	function bp_get_displayed_user_email() {
 		global $bp;
 
@@ -921,9 +1239,22 @@ function bp_displayed_user_email() {
 		return apply_filters( 'bp_get_displayed_user_email', esc_attr( $retval ) );
 	}
 
+/**
+ * Output the "active [x days ago]" string for a user.
+ *
+ * @see bp_get_last_activity() for a description of parameters.
+ *
+ * @param int $user_id See {@link bp_get_last_activity()}.
+ */
 function bp_last_activity( $user_id = 0 ) {
 	echo apply_filters( 'bp_last_activity', bp_get_last_activity( $user_id ) );
 }
+	/**
+	 * Get the "active [x days ago]" string for a user.
+	 *
+	 * @param int $user_id ID of the user. Default: displayed user ID.
+	 * @return string
+	 */
 	function bp_get_last_activity( $user_id = 0 ) {
 
 		if ( empty( $user_id ) )
@@ -934,9 +1265,22 @@ function bp_last_activity( $user_id = 0 ) {
 		return apply_filters( 'bp_get_last_activity', $last_activity );
 	}
 
+/**
+ * Output the calculated first name of the displayed or logged-in user.
+ */
 function bp_user_firstname() {
 	echo bp_get_user_firstname();
 }
+	/**
+	 * Output the first name of a user.
+	 *
+	 * Simply takes all the characters before the first space in a name.
+	 *
+	 * @param string $name Full name to use when generating first name.
+	 *        Defaults to displayed user's first name, or to logged-in
+	 *        user's first name if it's unavailable.
+	 * @return string
+	 */
 	function bp_get_user_firstname( $name = false ) {
 
 		// Try to get displayed user
@@ -952,54 +1296,117 @@ function bp_user_firstname() {
 		return apply_filters( 'bp_get_user_firstname', $fullname[0], $fullname );
 	}
 
+/**
+ * Output the link for the logged-in user's profile.
+ */
 function bp_loggedin_user_link() {
 	echo bp_get_loggedin_user_link();
 }
+	/**
+	 * Get the link for the logged-in user's profile.
+	 *
+	 * @return string
+	 */
 	function bp_get_loggedin_user_link() {
 		return apply_filters( 'bp_get_loggedin_user_link', bp_loggedin_user_domain() );
 	}
 
+/**
+ * Output the link for the displayed user's profile.
+ */
 function bp_displayed_user_link() {
 	echo bp_get_displayed_user_link();
 }
+	/**
+	 * Get the link for the displayed user's profile.
+	 *
+	 * @return string
+	 */
 	function bp_get_displayed_user_link() {
 		return apply_filters( 'bp_get_displayed_user_link', bp_displayed_user_domain() );
 	}
-	function bp_user_link() { bp_displayed_user_domain(); } // Deprecated.
 
+	/**
+	 * Alias of {@link bp_displayed_user_domain()}.
+	 *
+	 * @deprecated
+	 */
+	function bp_user_link() { bp_displayed_user_domain(); }
+
+/**
+ * Alias of {@link bp_displayed_user_id()}.
+ */
 function bp_current_user_id() { return bp_displayed_user_id(); }
 
+/**
+ * Generate the link for the displayed user's profile.
+ *
+ * @return string
+ */
 function bp_displayed_user_domain() {
 	global $bp;
 	return apply_filters( 'bp_displayed_user_domain', isset( $bp->displayed_user->domain ) ? $bp->displayed_user->domain : '' );
 }
 
+/**
+ * Generate the link for the logged-in user's profile.
+ *
+ * @return string
+ */
 function bp_loggedin_user_domain() {
 	global $bp;
 	return apply_filters( 'bp_loggedin_user_domain', isset( $bp->loggedin_user->domain ) ? $bp->loggedin_user->domain : '' );
 }
 
+/**
+ * Output the displayed user's display name.
+ */
 function bp_displayed_user_fullname() {
 	echo bp_get_displayed_user_fullname();
 }
+	/**
+	 * Get the displayed user's display name.
+	 *
+	 * @return string
+	 */
 	function bp_get_displayed_user_fullname() {
 		global $bp;
 		return apply_filters( 'bp_displayed_user_fullname', isset( $bp->displayed_user->fullname ) ? $bp->displayed_user->fullname : '' );
 	}
+
+	/**
+	 * Alias of {@link bp_get_displayed_user_fullname()}.
+	 */
 	function bp_user_fullname() { echo bp_get_displayed_user_fullname(); }
 
 
+/**
+ * Output the logged-in user's display name.
+ */
 function bp_loggedin_user_fullname() {
 	echo bp_get_loggedin_user_fullname();
 }
+	/**
+	 * Get the logged-in user's display name.
+	 *
+	 * @return string
+	 */
 	function bp_get_loggedin_user_fullname() {
 		global $bp;
 		return apply_filters( 'bp_get_loggedin_user_fullname', isset( $bp->loggedin_user->fullname ) ? $bp->loggedin_user->fullname : '' );
 	}
 
+/**
+ * Output the username of the displayed user.
+ */
 function bp_displayed_user_username() {
 	echo bp_get_displayed_user_username();
 }
+	/**
+	 * Get the username of the displayed user.
+	 *
+	 * @return string
+	 */
 	function bp_get_displayed_user_username() {
 		global $bp;
 
@@ -1012,9 +1419,17 @@ function bp_displayed_user_username() {
 		return apply_filters( 'bp_get_displayed_user_username', $username );
 	}
 
+/**
+ * Output the username of the logged-in user.
+ */
 function bp_loggedin_user_username() {
 	echo bp_get_loggedin_user_username();
 }
+	/**
+	 * Get the username of the logged-in user.
+	 *
+	 * @return string
+	 */
 	function bp_get_loggedin_user_username() {
 		global $bp;
 
@@ -1032,11 +1447,11 @@ function bp_loggedin_user_username() {
 /**
  * Do we have a working custom sign up page?
  *
- * @since BuddyPress (1.5)
+ * @since BuddyPress (1.5.0)
  *
- * @uses bp_get_signup_slug() To make sure there is a slug assigned to the page
- * @uses bp_locate_template() To make sure a template exists to provide output
- * @return boolean True if page and template exist, false if not
+ * @uses bp_get_signup_slug() To make sure there is a slug assigned to the page.
+ * @uses bp_locate_template() To make sure a template exists to provide output.
+ * @return bool True if page and template exist, false if not.
  */
 function bp_has_custom_signup_page() {
 	static $has_page = false;
@@ -1048,13 +1463,13 @@ function bp_has_custom_signup_page() {
 }
 
 /**
- * Echoes the URL to the signup page
+ * Output the URL to the signup page.
  */
 function bp_signup_page() {
 	echo bp_get_signup_page();
 }
 	/**
-	 * Returns the URL to the signup page
+	 * Get the URL to the signup page.
 	 *
 	 * @return string
 	 */
@@ -1071,11 +1486,11 @@ function bp_signup_page() {
 /**
  * Do we have a working custom activation page?
  *
- * @since BuddyPress (1.5)
+ * @since BuddyPress (1.5.0)
  *
- * @uses bp_get_activate_slug() To make sure there is a slug assigned to the page
- * @uses bp_locate_template() To make sure a template exists to provide output
- * @return boolean True if page and template exist, false if not
+ * @uses bp_get_activate_slug() To make sure there is a slug assigned to the page.
+ * @uses bp_locate_template() To make sure a template exists to provide output.
+ * @return boolean True if page and template exist, false if not.
  */
 function bp_has_custom_activation_page() {
 	static $has_page = false;
@@ -1086,9 +1501,17 @@ function bp_has_custom_activation_page() {
 	return (bool) $has_page;
 }
 
+/**
+ * Output the URL of the actvitation page.
+ */
 function bp_activation_page() {
 	echo bp_get_activation_page();
 }
+	/**
+	 * Get the URL of the activation page.
+	 *
+	 * @return string
+	 */
 	function bp_get_activation_page() {
 		if ( bp_has_custom_activation_page() ) {
 			$page = trailingslashit( bp_get_root_domain() . '/' . bp_get_activate_slug() );
@@ -1099,9 +1522,19 @@ function bp_activation_page() {
 		return apply_filters( 'bp_get_activation_page', $page );
 	}
 
+/**
+ * Output the username submitted during signup.
+ */
 function bp_signup_username_value() {
 	echo bp_get_signup_username_value();
 }
+	/**
+	 * Get the username submitted during signup.
+	 *
+	 * @todo This should be properly escaped.
+	 *
+	 * @return string
+	 */
 	function bp_get_signup_username_value() {
 		$value = '';
 		if ( isset( $_POST['signup_username'] ) )
@@ -1110,9 +1543,19 @@ function bp_signup_username_value() {
 		return apply_filters( 'bp_get_signup_username_value', $value );
 	}
 
+/**
+ * Output the user email address submitted during signup.
+ */
 function bp_signup_email_value() {
 	echo bp_get_signup_email_value();
 }
+	/**
+	 * Get the email address submitted during signup.
+	 *
+	 * @todo This should be properly escaped.
+	 *
+	 * @return string
+	 */
 	function bp_get_signup_email_value() {
 		$value = '';
 		if ( isset( $_POST['signup_email'] ) )
@@ -1121,9 +1564,17 @@ function bp_signup_email_value() {
 		return apply_filters( 'bp_get_signup_email_value', $value );
 	}
 
+/**
+ * Output the 'signup_with_blog' value submitted during signup.
+ */
 function bp_signup_with_blog_value() {
 	echo bp_get_signup_with_blog_value();
 }
+	/**
+	 * Get the 'signup_with_blog' value submitted during signup.
+	 *
+	 * @return string
+	 */
 	function bp_get_signup_with_blog_value() {
 		$value = '';
 		if ( isset( $_POST['signup_with_blog'] ) )
@@ -1132,9 +1583,19 @@ function bp_signup_with_blog_value() {
 		return apply_filters( 'bp_get_signup_with_blog_value', $value );
 	}
 
+/**
+ * Output the 'signup_blog_url' value submitted at signup.
+ */
 function bp_signup_blog_url_value() {
 	echo bp_get_signup_blog_url_value();
 }
+	/**
+	 * Get the 'signup_blog_url' value submitted at signup.
+	 *
+	 * @todo Should be properly escaped.
+	 *
+	 * @return string
+	 */
 	function bp_get_signup_blog_url_value() {
 		$value = '';
 		if ( isset( $_POST['signup_blog_url'] ) )
@@ -1143,9 +1604,45 @@ function bp_signup_blog_url_value() {
 		return apply_filters( 'bp_get_signup_blog_url_value', $value );
 	}
 
+/**
+ * Output the base URL for subdomain installations of WordPress Multisite.
+ *
+ * @since BuddyPress (2.1.0)
+ */
+function bp_signup_subdomain_base() {
+	echo bp_signup_get_subdomain_base();
+}
+	/**
+	 * Return the base URL for subdomain installations of WordPress Multisite.
+	 *
+	 * Replaces bp_blogs_get_subdomain_base()
+	 *
+	 * @since BuddyPress (2.1.0)
+	 *
+	 * @return string The base URL - eg, 'example.com' for site_url() example.com or www.example.com.
+	 */
+	function bp_signup_get_subdomain_base() {
+		global $current_site;
+
+		// In case plugins are still using this filter
+		$subdomain_base = apply_filters( 'bp_blogs_subdomain_base', preg_replace( '|^www\.|', '', $current_site->domain ) . $current_site->path );
+
+		return apply_filters( 'bp_signup_subdomain_base', $subdomain_base );
+	}
+
+/**
+ * Output the 'signup_blog_titl' value submitted at signup.
+ */
 function bp_signup_blog_title_value() {
 	echo bp_get_signup_blog_title_value();
 }
+	/**
+	 * Get the 'signup_blog_title' value submitted at signup.
+	 *
+	 * @todo Should be properly escaped.
+	 *
+	 * @return string
+	 */
 	function bp_get_signup_blog_title_value() {
 		$value = '';
 		if ( isset( $_POST['signup_blog_title'] ) )
@@ -1154,9 +1651,19 @@ function bp_signup_blog_title_value() {
 		return apply_filters( 'bp_get_signup_blog_title_value', $value );
 	}
 
+/**
+ * Output the 'signup_blog_privacy' value submitted at signup.
+ */
 function bp_signup_blog_privacy_value() {
 	echo bp_get_signup_blog_privacy_value();
 }
+	/**
+	 * Get the 'signup_blog_privacy' value submitted at signup.
+	 *
+	 * @todo Should be properly escaped.
+	 *
+	 * @return string
+	 */
 	function bp_get_signup_blog_privacy_value() {
 		$value = '';
 		if ( isset( $_POST['signup_blog_privacy'] ) )
@@ -1165,9 +1672,17 @@ function bp_signup_blog_privacy_value() {
 		return apply_filters( 'bp_get_signup_blog_privacy_value', $value );
 	}
 
+/**
+ * Output the avatar dir used during signup.
+ */
 function bp_signup_avatar_dir_value() {
 	echo bp_get_signup_avatar_dir_value();
 }
+	/**
+	 * Get the avatar dir used during signup.
+	 *
+	 * @return string
+	 */
 	function bp_get_signup_avatar_dir_value() {
 		global $bp;
 
@@ -1186,25 +1701,54 @@ function bp_signup_avatar_dir_value() {
 		return apply_filters( 'bp_get_signup_avatar_dir_value', $bp->signup->avatar_dir );
 	}
 
+/**
+ * Output the current signup step.
+ */
 function bp_current_signup_step() {
 	echo bp_get_current_signup_step();
 }
+	/**
+	 * Get the current signup step.
+	 *
+	 * @return string
+	 */
 	function bp_get_current_signup_step() {
 		global $bp;
 
 		return $bp->signup->step;
 	}
 
+/**
+ * Output the user avatar during signup.
+ *
+ * @see bp_get_signup_avatar() for description of arguments.
+ *
+ * @param array $args See {@link bp_get_signup_avatar(}.
+ */
 function bp_signup_avatar( $args = '' ) {
 	echo bp_get_signup_avatar( $args );
 }
+	/**
+	 * Get the user avatar during signup.
+	 *
+	 * @see bp_core_fetch_avatar() for description of arguments.
+	 *
+	 * @param array $args {
+	 *     Array of optional arguments.
+	 *     @type int $size Height/weight in pixels. Default: value of
+	 *           bp_core_avatar_full_width().
+	 *     @type string $class CSS class. Default: 'avatar'.
+	 *     @type string $alt HTML 'alt' attribute. Default: 'Your Avatar'.
+	 * }
+	 * @return string
+	 */
 	function bp_get_signup_avatar( $args = '' ) {
 		$bp = buddypress();
 
 		$defaults = array(
 			'size' => bp_core_avatar_full_width(),
 			'class' => 'avatar',
-			'alt' => __( 'Your Avatar', 'buddypress' )
+			'alt' => __( 'Your Profile Photo', 'buddypress' )
 		);
 
 		$r = wp_parse_args( $args, $defaults );
@@ -1243,9 +1787,19 @@ function bp_signup_avatar( $args = '' ) {
 		return apply_filters( 'bp_get_signup_avatar', $gravatar_img, $args );
 	}
 
+/**
+ * Output whether signup is allowed.
+ *
+ * @todo Remove this function. Echoing a bool is pointless.
+ */
 function bp_signup_allowed() {
 	echo bp_get_signup_allowed();
 }
+	/**
+	 * Is user signup allowed?
+	 *
+	 * @return bool
+	 */
 	function bp_get_signup_allowed() {
 		global $bp;
 
@@ -1266,9 +1820,9 @@ function bp_signup_allowed() {
 	}
 
 /**
- * Hook member activity feed to <head>
+ * Hook member activity feed to <head>.
  *
- * @since BuddyPress (1.5)
+ * @since BuddyPress (1.5.0)
  */
 function bp_members_activity_feed() {
 	if ( !bp_is_active( 'activity' ) || !bp_is_user() )
@@ -1280,10 +1834,30 @@ function bp_members_activity_feed() {
 }
 add_action( 'bp_head', 'bp_members_activity_feed' );
 
-
+/**
+ * Output a link to a members component subpage.
+ *
+ * @see bp_get_members_component_link() for description of parameters.
+ *
+ * @param string $component See {@bp_get_members_component_link()}.
+ * @param string $action See {@bp_get_members_component_link()}.
+ * @param string $query_args See {@bp_get_members_component_link()}.
+ * @param string $nonce See {@bp_get_members_component_link()}.
+ */
 function bp_members_component_link( $component, $action = '', $query_args = '', $nonce = false ) {
 	echo bp_get_members_component_link( $component, $action, $query_args, $nonce );
 }
+	/**
+	 * Generate a link to a members component subpage.
+	 *
+	 * @param string $component ID of the component (eg 'friends').
+	 * @param string $action Optional. 'action' slug (eg 'invites').
+	 * @param array $query_args Optional. Array of URL params to add to the
+	 *        URL. See {@link add_query_arg()} for format.
+	 * @param array $nonce Optional. If provided, the URL will be passed
+	 *        through wp_nonce_url() with $nonce as the action string.
+	 * @return string
+	 */
 	function bp_get_members_component_link( $component, $action = '', $query_args = '', $nonce = false ) {
 		global $bp;
 
diff --git a/wp-content/plugins/buddypress/bp-messages/bp-messages-actions.php b/wp-content/plugins/buddypress/bp-messages/bp-messages-actions.php
index 85cc0a41b..3c44904c1 100644
--- a/wp-content/plugins/buddypress/bp-messages/bp-messages-actions.php
+++ b/wp-content/plugins/buddypress/bp-messages/bp-messages-actions.php
@@ -3,9 +3,9 @@
 /**
  * BuddyPress Messages Actions
  *
- * Action functions are exactly the same as screen functions, however they do not
- * have a template screen associated with them. Usually they will send the user
- * back to the default screen after execution.
+ * Action functions are exactly the same as screen functions, however they do
+ * not have a template screen associated with them. Usually they will send the
+ * user back to the default screen after execution.
  *
  * @package BuddyPress
  * @subpackage MessagesActions
@@ -14,15 +14,22 @@
 // Exit if accessed directly
 if ( !defined( 'ABSPATH' ) ) exit;
 
+/**
+ * Process a request to view a single message thread.
+ */
 function messages_action_conversation() {
 
-	if ( !bp_is_messages_component() || !bp_is_current_action( 'view' ) )
+	// Bail if not viewing a single conversation
+	if ( ! bp_is_messages_component() || ! bp_is_current_action( 'view' ) ) {
 		return false;
+	}
 
-	$thread_id = (int)bp_action_variable( 0 );
+	// Get the thread ID from the action variable
+	$thread_id = (int) bp_action_variable( 0 );
 
-	if ( !$thread_id || !messages_is_valid_thread( $thread_id ) || ( !messages_check_thread_access( $thread_id ) && !bp_current_user_can( 'bp_moderate' ) ) )
+	if ( ! messages_is_valid_thread( $thread_id ) || ( ! messages_check_thread_access( $thread_id ) && ! bp_current_user_can( 'bp_moderate' ) ) ) {
 		bp_core_redirect( trailingslashit( bp_displayed_user_domain() . bp_get_messages_slug() ) );
+	}
 
 	// Check if a new reply has been submitted
 	if ( isset( $_POST['send'] ) ) {
@@ -30,8 +37,14 @@ function messages_action_conversation() {
 		// Check the nonce
 		check_admin_referer( 'messages_send_message', 'send_message_nonce' );
 
+		$new_reply = messages_new_message( array(
+			'thread_id' => $thread_id,
+			'subject'   => ! empty( $_POST['subject'] ) ? $_POST['subject'] : false,
+			'content'   => $_POST['content']
+		) );
+
 		// Send the reply
-		if ( messages_new_message( array( 'thread_id' => $thread_id, 'subject' => ! empty( $_POST['subject'] ) ? $_POST['subject'] : false, 'content' => $_POST['content'] ) ) ) {
+		if ( ! empty( $new_reply ) ) {
 			bp_core_add_message( __( 'Your reply was sent successfully', 'buddypress' ) );
 		} else {
 			bp_core_add_message( __( 'There was a problem sending your reply, please try again', 'buddypress' ), 'error' );
@@ -47,18 +60,25 @@ function messages_action_conversation() {
 }
 add_action( 'bp_actions', 'messages_action_conversation' );
 
+/**
+ * Process a request to delete a message.
+ *
+ * @return bool False on failure.
+ */
 function messages_action_delete_message() {
 
-	if ( !bp_is_messages_component() || bp_is_current_action( 'notices' ) || !bp_is_action_variable( 'delete', 0 ) )
+	if ( ! bp_is_messages_component() || bp_is_current_action( 'notices' ) || ! bp_is_action_variable( 'delete', 0 ) ) {
 		return false;
+	}
 
 	$thread_id = bp_action_variable( 1 );
 
 	if ( !$thread_id || !is_numeric( $thread_id ) || !messages_check_thread_access( $thread_id ) ) {
 		bp_core_redirect( trailingslashit( bp_displayed_user_domain() . bp_get_messages_slug() . '/' . bp_current_action() ) );
 	} else {
-		if ( !check_admin_referer( 'messages_delete_thread' ) )
+		if ( ! check_admin_referer( 'messages_delete_thread' ) ) {
 			return false;
+		}
 
 		// Delete message
 		if ( !messages_delete_thread( $thread_id ) ) {
@@ -71,10 +91,16 @@ function messages_action_delete_message() {
 }
 add_action( 'bp_actions', 'messages_action_delete_message' );
 
+/**
+ * Process a request to bulk delete messages.
+ *
+ * @return bool False on failure.
+ */
 function messages_action_bulk_delete() {
 
-	if ( !bp_is_messages_component() || !bp_is_action_variable( 'bulk-delete', 0 ) )
+	if ( ! bp_is_messages_component() || ! bp_is_action_variable( 'bulk-delete', 0 ) ) {
 		return false;
+	}
 
 	$thread_ids = $_POST['thread_ids'];
 
diff --git a/wp-content/plugins/buddypress/bp-messages/bp-messages-cache.php b/wp-content/plugins/buddypress/bp-messages/bp-messages-cache.php
index 714c029cf..ef0e2f95a 100644
--- a/wp-content/plugins/buddypress/bp-messages/bp-messages-cache.php
+++ b/wp-content/plugins/buddypress/bp-messages/bp-messages-cache.php
@@ -7,7 +7,6 @@
  * actions throughout BuddyPress.
  *
  * @package BuddyPress
- * @subpackage SettingsLoader
  */
 
 // Exit if accessed directly
@@ -24,7 +23,7 @@ add_action( 'messages_screen_sentbox', 'bp_core_clear_cache' );
 add_action( 'messages_screen_inbox',   'bp_core_clear_cache' );
 
 /**
- * Clears unread count cache for each recipient after a message is sent.
+ * Clear unread count cache for each recipient after a message is sent.
  *
  * @since BuddyPress (2.0.0)
  *
@@ -38,7 +37,7 @@ function bp_messages_clear_unread_count_cache_on_message_save( BP_Messages_Messa
 add_action( 'messages_message_after_save', 'bp_messages_clear_unread_count_cache_on_message_save' );
 
 /**
- * Clears unread count cache for the logged-in user after a message is deleted.
+ * Clear unread count cache for the logged-in user after a message is deleted.
  *
  * @since BuddyPress (2.0.0)
  *
@@ -51,8 +50,8 @@ function bp_messages_clear_unread_count_cache_on_message_delete( $thread_ids ) {
 add_action( 'messages_before_delete_thread', 'bp_messages_clear_unread_count_cache_on_message_delete' );
 
 /**
- * Invalidates cache for notices.
- * 
+ * Invalidate cache for notices.
+ *
  * Currently, invalidates active notice cache.
  *
  * @since BuddyPress (2.0.0)
@@ -61,4 +60,4 @@ function bp_notices_clear_cache( $notice ) {
 	wp_cache_delete( 'active_notice', 'bp_messages' );
 }
 add_action( 'messages_notice_after_save',    'bp_notices_clear_cache' );
-add_action( 'messages_notice_before_delete', 'bp_notices_clear_cache' );
\ No newline at end of file
+add_action( 'messages_notice_before_delete', 'bp_notices_clear_cache' );
diff --git a/wp-content/plugins/buddypress/bp-messages/bp-messages-classes.php b/wp-content/plugins/buddypress/bp-messages/bp-messages-classes.php
index 6026dbd66..28e202f41 100644
--- a/wp-content/plugins/buddypress/bp-messages/bp-messages-classes.php
+++ b/wp-content/plugins/buddypress/bp-messages/bp-messages-classes.php
@@ -250,7 +250,8 @@ class BP_Messages_Thread {
 	public static function get_current_threads_for_user( $user_id, $box = 'inbox', $type = 'all', $limit = null, $page = null, $search_terms = '' ) {
 		global $wpdb, $bp;
 
-		$pag_sql = $type_sql = $search_sql = '';
+		$user_id_sql = $pag_sql = $type_sql = $search_sql = '';
+
 		if ( $limit && $page ) {
 			$pag_sql = $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) );
 		}
@@ -262,16 +263,18 @@ class BP_Messages_Thread {
 		}
 
 		if ( ! empty( $search_terms ) ) {
-			$search_terms = like_escape( esc_sql( $search_terms ) );
-			$search_sql   = "AND ( subject LIKE '%%$search_terms%%' OR message LIKE '%%$search_terms%%' )";
+			$search_terms_like = '%' . bp_esc_like( $search_terms ) . '%';
+			$search_sql        = $wpdb->prepare( "AND ( subject LIKE %s OR message LIKE %s )", $search_terms_like, $search_terms_like );
 		}
 
 		if ( 'sentbox' == $box ) {
-			$thread_ids    = $wpdb->get_results( $wpdb->prepare( "SELECT m.thread_id, MAX(m.date_sent) AS date_sent FROM {$bp->messages->table_name_recipients} r, {$bp->messages->table_name_messages} m WHERE m.thread_id = r.thread_id AND m.sender_id = r.user_id AND m.sender_id = %d AND r.is_deleted = 0 {$search_sql} GROUP BY m.thread_id ORDER BY date_sent DESC {$pag_sql}", $user_id ) );
-			$total_threads = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT( DISTINCT m.thread_id ) FROM {$bp->messages->table_name_recipients} r, {$bp->messages->table_name_messages} m WHERE m.thread_id = r.thread_id AND m.sender_id = r.user_id AND m.sender_id = %d AND r.is_deleted = 0 {$search_sql} ", $user_id ) );
+			$user_id_sql = $wpdb->prepare( 'm.sender_id = %d', $user_id );
+			$thread_ids  = $wpdb->get_results( "SELECT m.thread_id, MAX(m.date_sent) AS date_sent FROM {$bp->messages->table_name_recipients} r, {$bp->messages->table_name_messages} m WHERE m.thread_id = r.thread_id AND m.sender_id = r.user_id AND {$user_id_sql} AND r.is_deleted = 0 {$search_sql} GROUP BY m.thread_id ORDER BY date_sent DESC {$pag_sql}" );
+			$total_threads = $wpdb->get_var( "SELECT COUNT( DISTINCT m.thread_id ) FROM {$bp->messages->table_name_recipients} r, {$bp->messages->table_name_messages} m WHERE m.thread_id = r.thread_id AND m.sender_id = r.user_id AND {$user_id_sql} AND r.is_deleted = 0 {$search_sql} " );
 		} else {
-			$thread_ids = $wpdb->get_results( $wpdb->prepare( "SELECT m.thread_id, MAX(m.date_sent) AS date_sent FROM {$bp->messages->table_name_recipients} r, {$bp->messages->table_name_messages} m WHERE m.thread_id = r.thread_id AND r.is_deleted = 0 AND r.user_id = %d AND r.sender_only = 0 {$type_sql} {$search_sql} GROUP BY m.thread_id ORDER BY date_sent DESC {$pag_sql}", $user_id ) );
-			$total_threads = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT( DISTINCT m.thread_id ) FROM {$bp->messages->table_name_recipients} r, {$bp->messages->table_name_messages} m WHERE m.thread_id = r.thread_id AND r.is_deleted = 0 AND r.user_id = %d AND r.sender_only = 0 {$type_sql} {$search_sql} ", $user_id ) );
+			$user_id_sql = $wpdb->prepare( 'r.user_id = %d', $user_id );
+			$thread_ids = $wpdb->get_results( "SELECT m.thread_id, MAX(m.date_sent) AS date_sent FROM {$bp->messages->table_name_recipients} r, {$bp->messages->table_name_messages} m WHERE m.thread_id = r.thread_id AND r.is_deleted = 0 AND {$user_id_sql} AND r.sender_only = 0 {$type_sql} {$search_sql} GROUP BY m.thread_id ORDER BY date_sent DESC {$pag_sql}" );
+			$total_threads = $wpdb->get_var( "SELECT COUNT( DISTINCT m.thread_id ) FROM {$bp->messages->table_name_recipients} r, {$bp->messages->table_name_messages} m WHERE m.thread_id = r.thread_id AND r.is_deleted = 0 AND {$user_id_sql} AND r.sender_only = 0 {$type_sql} {$search_sql}" );
 		}
 
 		if ( empty( $thread_ids ) ) {
@@ -442,8 +445,15 @@ class BP_Messages_Thread {
 	 * @param int $thread_id The message thread ID.
 	 * @return int The message thread ID on success.
 	 */
-	public static function is_valid( $thread_id ) {
-		global $wpdb, $bp;
+	public static function is_valid( $thread_id = 0 ) {
+		global $wpdb;
+
+		// Bail if no thread ID is passed
+		if ( empty( $thread_id ) ) {
+			return false;
+		}
+
+		$bp = buddypress();
 
 		return $wpdb->get_var( $wpdb->prepare( "SELECT thread_id FROM {$bp->messages->table_name_messages} WHERE thread_id = %d LIMIT 1", $thread_id ) );
 	}
@@ -520,16 +530,64 @@ class BP_Messages_Thread {
 	}
 }
 
+/**
+ * Single message class.
+ */
 class BP_Messages_Message {
+	/**
+	 * ID of the message.
+	 *
+	 * @var int
+	 */
 	public $id;
+
+	/**
+	 * ID of the message thread.
+	 *
+	 * @var int
+	 */
 	public $thread_id;
+
+	/**
+	 * ID of the sender.
+	 *
+	 * @var int
+	 */
 	public $sender_id;
+
+	/**
+	 * Subject line of the message.
+	 *
+	 * @var string
+	 */
 	public $subject;
+
+	/**
+	 * Content of the message.
+	 *
+	 * @var string
+	 */
 	public $message;
+
+	/**
+	 * Date the message was sent.
+	 *
+	 * @var string
+	 */
 	public $date_sent;
 
+	/**
+	 * Message recipients.
+	 *
+	 * @var bool|array
+	 */
 	public $recipients = false;
 
+	/**
+	 * Constructor.
+	 *
+	 * @param int $id Optional. ID of the message.
+	 */
 	public function __construct( $id = null ) {
 		$this->date_sent = bp_core_current_time();
 		$this->sender_id = bp_loggedin_user_id();
@@ -539,6 +597,11 @@ class BP_Messages_Message {
 		}
 	}
 
+	/**
+	 * Set up data related to a specific message object.
+	 *
+	 * @param int $id ID of the message.
+	 */
 	public function populate( $id ) {
 		global $wpdb, $bp;
 
@@ -552,6 +615,12 @@ class BP_Messages_Message {
 		}
 	}
 
+	/**
+	 * Send a message.
+	 *
+	 * @return int|bool ID of the newly created message on success, false
+	 *         on failure.
+	 */
 	public function send() {
 		global $wpdb, $bp;
 
@@ -605,13 +674,24 @@ class BP_Messages_Message {
 		return $this->id;
 	}
 
+	/**
+	 * Get a list of recipients for a message.
+	 *
+	 * @return array
+	 */
 	public function get_recipients() {
 		global $bp, $wpdb;
 		return $wpdb->get_results( $wpdb->prepare( "SELECT user_id FROM {$bp->messages->table_name_recipients} WHERE thread_id = %d", $this->thread_id ) );
 	}
 
-	/** Static Functions ******************************************************/
+	/** Static Functions **************************************************/
 
+	/**
+	 * Get list of recipient IDs from their usernames.
+	 *
+	 * @param array $recipient_usernames Usernames of recipients.
+	 * @return array
+	 */
 	public static function get_recipient_ids( $recipient_usernames ) {
 		if ( !$recipient_usernames )
 			return false;
@@ -627,16 +707,36 @@ class BP_Messages_Message {
 		return $recipient_ids;
 	}
 
+	/**
+	 * Get the ID of the message last sent by the logged-in user for a given thread.
+	 *
+	 * @param int $thread_id ID of the thread.
+	 * @return int|null ID of the message if found, otherwise null.
+	 */
 	public static function get_last_sent_for_user( $thread_id ) {
 		global $wpdb, $bp;
 		return $wpdb->get_var( $wpdb->prepare( "SELECT id FROM {$bp->messages->table_name_messages} WHERE sender_id = %d AND thread_id = %d ORDER BY date_sent DESC LIMIT 1", bp_loggedin_user_id(), $thread_id ) );
 	}
 
+	/**
+	 * Check whether a user is the sender of a message.
+	 *
+	 * @param int $user_id ID of the user.
+	 * @param int $message_id ID of the message.
+	 * @return int|null Returns the ID of the message if the user is the
+	 *         sender, otherwise null.
+	 */
 	public static function is_user_sender( $user_id, $message_id ) {
 		global $wpdb, $bp;
 		return $wpdb->get_var( $wpdb->prepare( "SELECT id FROM {$bp->messages->table_name_messages} WHERE sender_id = %d AND id = %d", $user_id, $message_id ) );
 	}
 
+	/**
+	 * Get the ID of the sender of a message.
+	 *
+	 * @param int $message_id ID of the message.
+	 * @return int|null The ID of the sender if found, otherwise null.
+	 */
 	public static function get_message_sender( $message_id ) {
 		global $wpdb, $bp;
 		return $wpdb->get_var( $wpdb->prepare( "SELECT sender_id FROM {$bp->messages->table_name_messages} WHERE id = %d", $message_id ) );
diff --git a/wp-content/plugins/buddypress/bp-messages/bp-messages-cssjs.php b/wp-content/plugins/buddypress/bp-messages/bp-messages-cssjs.php
index f60bdfbe3..ac91992b9 100644
--- a/wp-content/plugins/buddypress/bp-messages/bp-messages-cssjs.php
+++ b/wp-content/plugins/buddypress/bp-messages/bp-messages-cssjs.php
@@ -3,8 +3,6 @@
 /**
  * BuddyPress Messages CSS and JS
  *
- * Apply WordPress defined filters to private messages
- *
  * @package BuddyPress
  * @subpackage MessagesScripts
  */
@@ -12,33 +10,41 @@
 // Exit if accessed directly
 if ( !defined( 'ABSPATH' ) ) exit;
 
+/**
+ * Enqueue the JS for messages autocomplete.
+ */
 function messages_add_autocomplete_js() {
 
 	// Include the autocomplete JS for composing a message.
 	if ( bp_is_messages_component() && bp_is_current_action( 'compose' ) ) {
 		add_action( 'wp_head', 'messages_autocomplete_init_jsblock' );
 
-		$bp  = buddypress();
-		$min = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
-		wp_enqueue_script( 'bp-jquery-autocomplete',    $bp->plugin_url . "bp-messages/js/autocomplete/jquery.autocomplete{$min}.js",   array( 'jquery' ), bp_get_version() );
-		wp_enqueue_script( 'bp-jquery-autocomplete-fb', $bp->plugin_url . "bp-messages/js/autocomplete/jquery.autocompletefb{$min}.js", array(),           bp_get_version() );
-		wp_enqueue_script( 'bp-jquery-bgiframe',        $bp->plugin_url . "bp-messages/js/autocomplete/jquery.bgiframe{$min}.js",       array(),           bp_get_version() );
-		wp_enqueue_script( 'bp-jquery-dimensions',      $bp->plugin_url . "bp-messages/js/autocomplete/jquery.dimensions{$min}.js",     array(),           bp_get_version() );
+		wp_enqueue_script( 'bp-jquery-autocomplete' );
+		wp_enqueue_script( 'bp-jquery-autocomplete-fb' );
+		wp_enqueue_script( 'bp-jquery-bgiframe' );
+		wp_enqueue_script( 'bp-jquery-dimensions' );
 	}
 }
-add_action( 'bp_actions', 'messages_add_autocomplete_js' );
+add_action( 'bp_enqueue_scripts', 'messages_add_autocomplete_js' );
 
+/**
+ * Enqueue the CSS for messages autocomplete.
+ *
+ * @todo Why do we call wp_print_styles()?
+ */
 function messages_add_autocomplete_css() {
-
 	if ( bp_is_messages_component() && bp_is_current_action( 'compose' ) ) {
-		$min = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
-		wp_enqueue_style( 'bp-messages-autocomplete', buddypress()->plugin_url . "bp-messages/css/autocomplete/jquery.autocompletefb{$min}.css", array(), bp_get_version() );
-
+		wp_enqueue_style( 'bp-messages-autocomplete' );
 		wp_print_styles();
 	}
 }
 add_action( 'wp_head', 'messages_add_autocomplete_css' );
 
+/**
+ * Print inline JS for initializing the messages autocomplete.
+ *
+ * @todo Why is this here and not in a properly enqueued file?
+ */
 function messages_autocomplete_init_jsblock() {
 ?>
 
diff --git a/wp-content/plugins/buddypress/bp-messages/bp-messages-filters.php b/wp-content/plugins/buddypress/bp-messages/bp-messages-filters.php
index 9a0ee5551..e49e4ce07 100644
--- a/wp-content/plugins/buddypress/bp-messages/bp-messages-filters.php
+++ b/wp-content/plugins/buddypress/bp-messages/bp-messages-filters.php
@@ -52,7 +52,6 @@ add_filter( 'bp_get_message_thread_excerpt',     'convert_chars' );
 add_filter( 'bp_get_the_thread_message_content', 'convert_chars' );
 
 add_filter( 'bp_get_message_notice_text',        'make_clickable', 9 );
-add_filter( 'bp_get_message_thread_excerpt',     'make_clickable', 9 );
 add_filter( 'bp_get_the_thread_message_content', 'make_clickable', 9 );
 
 add_filter( 'bp_get_message_notice_text',        'wpautop' );
diff --git a/wp-content/plugins/buddypress/bp-messages/bp-messages-functions.php b/wp-content/plugins/buddypress/bp-messages/bp-messages-functions.php
index f63a24d2f..370953396 100644
--- a/wp-content/plugins/buddypress/bp-messages/bp-messages-functions.php
+++ b/wp-content/plugins/buddypress/bp-messages/bp-messages-functions.php
@@ -15,66 +15,99 @@
 // Exit if accessed directly
 if ( !defined( 'ABSPATH' ) ) exit;
 
+/**
+ * Create a new message.
+ *
+ * @param array $args {
+ *     Array of arguments.
+ *     @type int $sender_id Optional. ID of the user who is sending the
+ *           message. Default: ID of the logged-in user.
+ *     @type int $thread_id Optional. ID of the parent thread. Leave blank to
+ *           create a new thread for the message.
+ *     @type array $recipients IDs or usernames of message recipients. If this
+ *           is an existing thread, it is unnecessary to pass a $recipients
+ *           argument - existing thread recipients will be assumed.
+ *     @type string $subject Optional. Subject line for the message. For
+ *           existing threads, the existing subject will be used. For new
+ *           threads, 'No Subject' will be used if no $subject is provided.
+ *     @type string $content Content of the message. Cannot be empty.
+ *     @type string $date_sent Date sent, in 'Y-m-d H:i:s' format. Default:
+ *           current date/time.
+ * }
+ * @return int|bool ID of the message thread on success, false on failure.
+ */
 function messages_new_message( $args = '' ) {
 
-	$defaults = array (
+	// Parse the default arguments
+	$r = bp_parse_args( $args, array(
 		'sender_id'  => bp_loggedin_user_id(),
-		'thread_id'  => false, // false for a new message, thread id for a reply to a thread.
-		'recipients' => false, // Can be an array of usernames, user_ids or mixed.
+		'thread_id'  => false,   // false for a new message, thread id for a reply to a thread.
+		'recipients' => array(), // Can be an array of usernames, user_ids or mixed.
 		'subject'    => false,
 		'content'    => false,
 		'date_sent'  => bp_core_current_time()
-	);
-
-	$r = wp_parse_args( $args, $defaults );
-	extract( $r, EXTR_SKIP );
+	), 'messages_new_message' );
 
-	if ( empty( $sender_id ) || empty( $content ) )
+	// Bail if no sender or no content
+	if ( empty( $r['sender_id'] ) || empty( $r['content'] ) ) {
 		return false;
+	}
 
 	// Create a new message object
 	$message            = new BP_Messages_Message;
-	$message->thread_id = $thread_id;
-	$message->sender_id = $sender_id;
-	$message->subject   = $subject;
-	$message->message   = $content;
-	$message->date_sent = $date_sent;
-
-	// If we have a thread ID, use the existing recipients, otherwise use the recipients passed
-	if ( !empty( $thread_id ) ) {
-		$thread = new BP_Messages_Thread( $thread_id );
+	$message->thread_id = $r['thread_id'];
+	$message->sender_id = $r['sender_id'];
+	$message->subject   = $r['subject'];
+	$message->message   = $r['content'];
+	$message->date_sent = $r['date_sent'];
+
+	// If we have a thread ID...
+	if ( ! empty( $r['thread_id'] ) ) {
+
+		// ...use the existing recipients
+		$thread              = new BP_Messages_Thread( $r['thread_id'] );
 		$message->recipients = $thread->get_recipients();
 
-		// Strip the sender from the recipient list if they exist
-		if ( isset( $message->recipients[$sender_id] ) )
-			unset( $message->recipients[$sender_id] );
+		// Strip the sender from the recipient list, and unset them if they are
+		// not alone. If they are alone, let them talk to themselves.
+		if ( isset( $message->recipients[ $r['sender_id'] ] ) && ( count( $message->recipients ) > 1 ) ) {
+			unset( $message->recipients[ $r['sender_id'] ] );
+		}
 
-		if ( empty( $message->subject ) )
+		// Set a default reply subject if none was sent
+		if ( empty( $message->subject ) ) {
 			$message->subject = sprintf( __( 'Re: %s', 'buddypress' ), $thread->messages[0]->subject );
+		}
 
-	// No thread ID, so make some adjustments
+	// ...otherwise use the recipients passed
 	} else {
-		if ( empty( $recipients ) )
+
+		// Bail if no recipients
+		if ( empty( $r['recipients'] ) ) {
 			return false;
+		}
 
-		if ( empty( $message->subject ) )
+		// Set a default subject if none exists
+		if ( empty( $message->subject ) ) {
 			$message->subject = __( 'No Subject', 'buddypress' );
+		}
 
+		// Setup the recipients array
 		$recipient_ids 	    = array();
 
 		// Invalid recipients are added to an array, for future enhancements
 		$invalid_recipients = array();
 
 		// Loop the recipients and convert all usernames to user_ids where needed
-		foreach( (array) $recipients as $recipient ) {
-			$recipient = trim( $recipient );
+		foreach( (array) $r['recipients'] as $recipient ) {
 
-			if ( empty( $recipient ) )
+			// Trim spaces and skip if empty
+			$recipient = trim( $recipient );
+			if ( empty( $recipient ) ) {
 				continue;
+			}
 
-			$recipient_id = false;
-
-			// check user_login / nicename columns first
+			// Check user_login / nicename columns first
 			// @see http://buddypress.trac.wordpress.org/ticket/5151
 			if ( bp_is_username_compatibility_mode() ) {
 				$recipient_id = bp_core_get_userid( urldecode( $recipient ) );
@@ -82,29 +115,33 @@ function messages_new_message( $args = '' ) {
 				$recipient_id = bp_core_get_userid_from_nicename( $recipient );
 			}
 
-			// check against user ID column if no match and if passed recipient is numeric
-			if ( ! $recipient_id && is_numeric( $recipient ) ) {
+			// Check against user ID column if no match and if passed recipient is numeric
+			if ( empty( $recipient_id ) && is_numeric( $recipient ) ) {
 				if ( bp_core_get_core_userdata( (int) $recipient ) ) {
 					$recipient_id = (int) $recipient;
 				}
 			}
 
-			if ( ! $recipient_id ) {
+			// Decide which group to add this recipient to
+			if ( empty( $recipient_id ) ) {
 				$invalid_recipients[] = $recipient;
 			} else {
 				$recipient_ids[] = (int) $recipient_id;
 			}
 		}
 
-		// Strip the sender from the recipient list if they exist
-		if ( $key = array_search( $sender_id, (array) $recipient_ids ) )
-			unset( $recipient_ids[$key] );
-
-		// Remove duplicates
-		$recipient_ids = array_unique( (array) $recipient_ids );
+		// Strip the sender from the recipient list, and unset them if they are
+		// not alone. If they are alone, let them talk to themselves.
+		$self_send = array_search( $r['sender_id'], $recipient_ids );
+		if ( ! empty( $self_send ) && ( count( $recipient_ids ) > 1 ) ) {
+			unset( $recipient_ids[ $self_send ] );
+		}
 
-		if ( empty( $recipient_ids ) )
+		// Remove duplicates & bail if no recipients
+		$recipient_ids = array_unique( $recipient_ids );
+		if ( empty( $recipient_ids ) ) {
 			return false;
+		}
 
 		// Format this to match existing recipients
 		foreach( (array) $recipient_ids as $i => $recipient_id ) {
@@ -113,16 +150,25 @@ function messages_new_message( $args = '' ) {
 		}
 	}
 
-	if ( $message->send() ) {
-		do_action_ref_array( 'messages_message_sent', array( &$message ) );
-
-		return $message->thread_id;
+	// Bail if message failed to send
+	if ( ! $message->send() ) {
+		return false;
 	}
 
-	return false;
-}
+	// Allow additional actions when a message is sent successfully
+	do_action_ref_array( 'messages_message_sent', array( &$message ) );
 
+	// Return the thread ID
+	return $message->thread_id;
+}
 
+/**
+ * Send a notice.
+ *
+ * @param string $subject Subject of the notice.
+ * @param string $message Content of the notice.
+ * @return bool True on success, false on failure.
+ */
 function messages_send_notice( $subject, $message ) {
 	if ( !bp_current_user_can( 'bp_moderate' ) || empty( $subject ) || empty( $message ) ) {
 		return false;
@@ -142,26 +188,34 @@ function messages_send_notice( $subject, $message ) {
 	}
 }
 
+/**
+ * Delete message thread(s).
+ *
+ * @param int|array Thread ID or array of thread IDs.
+ * @return bool True on success, false on failure.
+ */
 function messages_delete_thread( $thread_ids ) {
 	do_action( 'messages_before_delete_thread', $thread_ids );
 
 	if ( is_array( $thread_ids ) ) {
 		$error = 0;
 		for ( $i = 0, $count = count( $thread_ids ); $i < $count; ++$i ) {
-			if ( !$status = BP_Messages_Thread::delete( $thread_ids[$i]) ) {
+			if ( ! BP_Messages_Thread::delete( $thread_ids[$i] ) ) {
 				$error = 1;
 			}
 		}
 
-		if ( !empty( $error ) )
+		if ( ! empty( $error ) ) {
 			return false;
+		}
 
 		do_action( 'messages_delete_thread', $thread_ids );
 
 		return true;
 	} else {
-		if ( !BP_Messages_Thread::delete( $thread_ids ) )
+		if ( ! BP_Messages_Thread::delete( $thread_ids ) ) {
 			return false;
+		}
 
 		do_action( 'messages_delete_thread', $thread_ids );
 
@@ -169,48 +223,115 @@ function messages_delete_thread( $thread_ids ) {
 	}
 }
 
+/**
+ * Check whether a user has access to a thread.
+ *
+ * @param int $thread_id ID of the thread.
+ * @param int $user_id Optional. ID of the user. Default: ID of the logged-in
+ *        user.
+ * @return int|null Message ID if the user has access, otherwise null.
+ */
 function messages_check_thread_access( $thread_id, $user_id = 0 ) {
-	if ( empty( $user_id ) )
+	if ( empty( $user_id ) ) {
 		$user_id = bp_loggedin_user_id();
+	}
 
 	return BP_Messages_Thread::check_access( $thread_id, $user_id );
 }
 
+/**
+ * Mark a thread as read.
+ *
+ * Wrapper for {@link BP_Messages_Thread::mark_as_read()}.
+ *
+ * @param int $thread_id ID of the thread.
+ */
 function messages_mark_thread_read( $thread_id ) {
 	return BP_Messages_Thread::mark_as_read( $thread_id );
 }
 
+/**
+ * Mark a thread as unread.
+ *
+ * Wrapper for {@link BP_Messages_Thread::mark_as_unread()}.
+ *
+ * @param int $thread_id ID of the thread.
+ */
 function messages_mark_thread_unread( $thread_id ) {
 	return BP_Messages_Thread::mark_as_unread( $thread_id );
 }
 
+/**
+ * Set messages-related cookies.
+ *
+ * Saves the 'bp_messages_send_to', 'bp_messages_subject', and
+ * 'bp_messages_content' cookies, which are used when setting up the default
+ * values on the messages page.
+ *
+ * @param string $recipients Comma-separated list of recipient usernames.
+ * @param string $subject Subject of the message.
+ * @param string $content Content of the message.
+ */
 function messages_add_callback_values( $recipients, $subject, $content ) {
 	@setcookie( 'bp_messages_send_to', $recipients, time() + 60 * 60 * 24, COOKIEPATH );
 	@setcookie( 'bp_messages_subject', $subject,    time() + 60 * 60 * 24, COOKIEPATH );
 	@setcookie( 'bp_messages_content', $content,    time() + 60 * 60 * 24, COOKIEPATH );
 }
 
+/**
+ * Unset messages-related cookies.
+ *
+ * @see messages_add_callback_values()
+ */
 function messages_remove_callback_values() {
 	@setcookie( 'bp_messages_send_to', false, time() - 1000, COOKIEPATH );
 	@setcookie( 'bp_messages_subject', false, time() - 1000, COOKIEPATH );
 	@setcookie( 'bp_messages_content', false, time() - 1000, COOKIEPATH );
 }
 
+/**
+ * Get the unread messages count for a user.
+ *
+ * @param int $user_id Optional. ID of the user. Default: ID of the
+ *        logged-in user.
+ * @return int
+ */
 function messages_get_unread_count( $user_id = 0 ) {
-	if ( empty( $user_id ) )
+	if ( empty( $user_id ) ) {
 		$user_id = bp_loggedin_user_id();
+	}
 
 	return BP_Messages_Thread::get_inbox_count( $user_id );
 }
 
+/**
+ * Check whether a user is the sender of a message.
+ *
+ * @param int $user_id ID of the user.
+ * @param int $message_id ID of the message.
+ * @return int|null Returns the ID of the message if the user is the
+ *         sender, otherwise null.
+ */
 function messages_is_user_sender( $user_id, $message_id ) {
 	return BP_Messages_Message::is_user_sender( $user_id, $message_id );
 }
 
+/**
+ * Get the ID of the sender of a message.
+ *
+ * @param int $message_id ID of the message.
+ * @return int|null The ID of the sender if found, otherwise null.
+ */
 function messages_get_message_sender( $message_id ) {
 	return BP_Messages_Message::get_message_sender( $message_id );
 }
 
+/**
+ * Check whether a message thread exists.
+ *
+ * @param int $thread_id ID of the thread.
+ * @return int|null The message thread ID on success, null on failure.
+ */
 function messages_is_valid_thread( $thread_id ) {
 	return BP_Messages_Thread::is_valid( $thread_id );
 }
diff --git a/wp-content/plugins/buddypress/bp-messages/bp-messages-loader.php b/wp-content/plugins/buddypress/bp-messages/bp-messages-loader.php
index d7c652d0c..9ccc208e9 100644
--- a/wp-content/plugins/buddypress/bp-messages/bp-messages-loader.php
+++ b/wp-content/plugins/buddypress/bp-messages/bp-messages-loader.php
@@ -12,6 +12,11 @@
 // Exit if accessed directly
 if ( !defined( 'ABSPATH' ) ) exit;
 
+/**
+ * Implementation of BP_Component for the Messages component.
+ *
+ * @since BuddyPress (1.5.0)
+ */
 class BP_Messages_Component extends BP_Component {
 	/**
 	 * If this is true, the Message autocomplete will return friends only, unless
@@ -23,9 +28,9 @@ class BP_Messages_Component extends BP_Component {
 	public $autocomplete_all;
 
 	/**
-	 * Start the messages component creation process
+	 * Start the messages component creation process.
 	 *
-	 * @since BuddyPress (1.5)
+	 * @since BuddyPress (1.5.0)
 	 */
 	public function __construct() {
 		parent::start(
@@ -39,7 +44,11 @@ class BP_Messages_Component extends BP_Component {
 	}
 
 	/**
-	 * Include files
+	 * Include files.
+	 *
+	 * @since BuddyPress (1.5.0)
+	 *
+	 * @param array $includes See {BP_Component::includes()} for details.
 	 */
 	public function includes( $includes = array() ) {
 
@@ -61,12 +70,14 @@ class BP_Messages_Component extends BP_Component {
 	}
 
 	/**
-	 * Setup globals
+	 * Set up globals for the Messages component.
 	 *
 	 * The BP_MESSAGES_SLUG constant is deprecated, and only used here for
 	 * backwards compatibility.
 	 *
-	 * @since BuddyPress (1.5)
+	 * @since BuddyPress (1.5.0)
+	 *
+	 * @param array $args Not used.
 	 */
 	public function setup_globals( $args = array() ) {
 		$bp = buddypress();
@@ -98,7 +109,10 @@ class BP_Messages_Component extends BP_Component {
 	}
 
 	/**
-	 * Setup BuddyBar navigation
+	 * Set up navigation for user pages.
+	 *
+	 * @param array $main_nav See {BP_Component::setup_nav()} for details.
+	 * @param array $sub_nav See {BP_Component::setup_nav()} for details.
 	 */
 	public function setup_nav( $main_nav = array(), $sub_nav = array() ) {
 
@@ -181,7 +195,10 @@ class BP_Messages_Component extends BP_Component {
 	}
 
 	/**
-	 * Set up the Toolbar
+	 * Set up the Toolbar.
+	 *
+	 * @param array $wp_admin_nav See {BP_Component::setup_admin_bar()}
+	 *        for details.
 	 */
 	public function setup_admin_bar( $wp_admin_nav = array() ) {
 		$bp = buddypress();
@@ -250,7 +267,7 @@ class BP_Messages_Component extends BP_Component {
 	}
 
 	/**
-	 * Sets up the title for pages and <title>
+	 * Set up the title for pages and <title>.
 	 */
 	public function setup_title() {
 		$bp = buddypress();
@@ -272,6 +289,9 @@ class BP_Messages_Component extends BP_Component {
 	}
 }
 
+/**
+ * Bootstrap the Messages component.
+ */
 function bp_setup_messages() {
 	buddypress()->messages = new BP_Messages_Component();
 }
diff --git a/wp-content/plugins/buddypress/bp-messages/bp-messages-notifications.php b/wp-content/plugins/buddypress/bp-messages/bp-messages-notifications.php
index f50ed30e1..2b14dec9d 100644
--- a/wp-content/plugins/buddypress/bp-messages/bp-messages-notifications.php
+++ b/wp-content/plugins/buddypress/bp-messages/bp-messages-notifications.php
@@ -13,10 +13,17 @@ if ( !defined( 'ABSPATH' ) ) exit;
 /** Email *********************************************************************/
 
 /**
- * Email message recipients to alert them of a new unread private message
+ * Email message recipients to alert them of a new unread private message.
  *
- * @since BuddyPress (1.0)
- * @param array $raw_args
+ * @since BuddyPress (1.0.0)
+ *
+ * @param array|BP_Messages_Message $raw_args {
+ *     Array of arguments. Also accepts a BP_Messages_Message object.
+ *     @type array $recipients User IDs of recipients.
+ *     @type string $email_subject Subject line of message.
+ *     @type string $email_content Content of message.
+ *     @type int $sender_id User ID of sender.
+ * }
  */
 function messages_notification_new_message( $raw_args = array() ) {
 
@@ -82,13 +89,13 @@ To view and read your messages please log in and visit: %4$s
 
 			// Only show the disable notifications line if the settings component is enabled
 			if ( bp_is_active( 'settings' ) ) {
-				$email_content .= sprintf( __( 'To disable these notifications please log in and go to: %s', 'buddypress' ), $settings_link );
+				$email_content .= sprintf( __( 'To disable these notifications, please log in and go to: %s', 'buddypress' ), $settings_link );
 			}
 
 			// Send the message
-			$email_to      = apply_filters( 'messages_notification_new_message_to',      $email_to );
-			$email_subject = apply_filters( 'messages_notification_new_message_subject', $email_subject, $sender_name );
-			$email_content = apply_filters( 'messages_notification_new_message_message', $email_content, $sender_name, $subject, $content, $message_link, $settings_link );
+			$email_to      = apply_filters( 'messages_notification_new_message_to',      $email_to, $ud );
+			$email_subject = apply_filters( 'messages_notification_new_message_subject', $email_subject, $sender_name, $ud );
+			$email_content = apply_filters( 'messages_notification_new_message_message', $email_content, $sender_name, $subject, $content, $message_link, $settings_link, $ud );
 
 			wp_mail( $email_to, $email_subject, $email_content );
 		}
@@ -101,42 +108,52 @@ add_action( 'messages_message_sent', 'messages_notification_new_message', 10 );
 /** Notifications *************************************************************/
 
 /**
- * Format the BuddyBar/Toolbar notifications for the Messages component
+ * Format notifications for the Messages component.
+ *
+ * @since BuddyPress (1.0.0)
  *
- * @since BuddyPress (1.0)
- * @param string $action The kind of notification being rendered
- * @param int $item_id The primary item id
- * @param int $secondary_item_id The secondary item id
- * @param int $total_items The total number of messaging-related notifications waiting for the user
- * @param string $format 'string' for BuddyBar-compatible notifications; 'array' for WP Toolbar
+ * @param string $action The kind of notification being rendered.
+ * @param int $item_id The primary item id.
+ * @param int $secondary_item_id The secondary item id.
+ * @param int $total_items The total number of messaging-related notifications
+ *        waiting for the user
+ * @param string $format Return value format. 'string' for BuddyBar-compatible
+ *        notifications; 'array' for WP Toolbar. Default: 'string'.
+ * @return string|array Formatted notifications.
  */
 function messages_format_notifications( $action, $item_id, $secondary_item_id, $total_items, $format = 'string' ) {
+	$total_items = (int) $total_items;
+	$link        = trailingslashit( bp_loggedin_user_domain() . bp_get_messages_slug() . '/inbox' );
+	$title       = __( 'Inbox', 'buddypress' );
 
 	if ( 'new_message' === $action ) {
-		$link  = trailingslashit( bp_loggedin_user_domain() . bp_get_messages_slug() . '/inbox' );
-		$title = __( 'Inbox', 'buddypress' );
-
-		if ( (int) $total_items > 1 ) {
-			$text   = sprintf( __('You have %d new messages', 'buddypress' ), (int) $total_items );
+		if ( $total_items > 1 ) {
+			$text   = sprintf( __( 'You have %d new messages', 'buddypress' ), $total_items );
 			$filter = 'bp_messages_multiple_new_message_notification';
 		} else {
 			// get message thread ID
 			$message   = new BP_Messages_Message( $item_id );
 			$thread_id = $message->thread_id;
-
-			$link = bp_get_message_thread_view_link( $thread_id );
+			$link      = ( ! empty( $thread_id ) )
+				? bp_get_message_thread_view_link( $thread_id )
+				: false;
 
 			if ( ! empty( $secondary_item_id ) ) {
 				$text = sprintf( __( '%s sent you a new private message', 'buddypress' ), bp_core_get_user_displayname( $secondary_item_id ) );
 			} else {
-				$text = sprintf( __( 'You have %d new private messages', 'buddypress' ), (int) $total_items );
+				$text = sprintf( _n( 'You have %s new private message', 'You have %s new private messages', $total_items, 'buddypress' ), bp_core_number_format( $total_items ) );
 			}
 			$filter = 'bp_messages_single_new_message_notification';
 		}
 	}
 
 	if ( 'string' === $format ) {
-		$return = apply_filters( $filter, '<a href="' . esc_url( $link ) . '" title="' . esc_attr( $title ) . '">' . esc_html( $text ) . '</a>', (int) $total_items, $text, $link, $item_id, $secondary_item_id );
+		if ( ! empty( $link ) ) {
+			$retval = '<a href="' . esc_url( $link ) . '" title="' . esc_attr( $title ) . '">' . esc_html( $text ) . '</a>';
+		} else {
+			$retval = esc_html( $text );
+		}
+		$return = apply_filters( $filter, $retval, (int) $total_items, $text, $link, $item_id, $secondary_item_id );
 	} else {
 		$return = apply_filters( $filter, array(
 			'text' => $text,
@@ -150,10 +167,11 @@ function messages_format_notifications( $action, $item_id, $secondary_item_id, $
 }
 
 /**
- * Send notifications to message recipients
+ * Send notifications to message recipients.
  *
  * @since BuddyPress (1.9.0)
- * @param obj $message
+ *
+ * @param BP_Messages_Message $message Message object.
  */
 function bp_messages_message_sent_add_notification( $message ) {
 	if ( bp_is_active( 'notifications' ) && ! empty( $message->recipients ) ) {
diff --git a/wp-content/plugins/buddypress/bp-messages/bp-messages-screens.php b/wp-content/plugins/buddypress/bp-messages/bp-messages-screens.php
index 897d61bfe..f853ae4fb 100644
--- a/wp-content/plugins/buddypress/bp-messages/bp-messages-screens.php
+++ b/wp-content/plugins/buddypress/bp-messages/bp-messages-screens.php
@@ -3,9 +3,9 @@
 /**
  * BuddyPress Messages Screens
  *
- * Screen functions are the controllers of BuddyPress. They will execute when their
- * specific URL is caught. They will first save or manipulate data using business
- * functions, then pass on the user to a template file.
+ * Screen functions are the controllers of BuddyPress. They will execute when
+ * their specific URL is caught. They will first save or manipulate data using
+ * business functions, then pass on the user to a template file.
  *
  * @package BuddyPress
  * @subpackage MessagesScreens
@@ -14,6 +14,9 @@
 // Exit if accessed directly
 if ( !defined( 'ABSPATH' ) ) exit;
 
+/**
+ * Load the Messages > Inbox screen.
+ */
 function messages_screen_inbox() {
 	if ( bp_action_variables() ) {
 		bp_do_404();
@@ -24,6 +27,9 @@ function messages_screen_inbox() {
 	bp_core_load_template( apply_filters( 'messages_template_inbox', 'members/single/home' ) );
 }
 
+/**
+ * Load the Messages > Sent screen.
+ */
 function messages_screen_sentbox() {
 	if ( bp_action_variables() ) {
 		bp_do_404();
@@ -34,8 +40,10 @@ function messages_screen_sentbox() {
 	bp_core_load_template( apply_filters( 'messages_template_sentbox', 'members/single/home' ) );
 }
 
+/**
+ * Load the Messages > Compose screen.
+ */
 function messages_screen_compose() {
-	global $bp;
 
 	if ( bp_action_variables() ) {
 		bp_do_404();
@@ -59,7 +67,7 @@ function messages_screen_compose() {
 			if ( isset( $_POST['send-notice'] ) ) {
 				if ( messages_send_notice( $_POST['subject'], $_POST['content'] ) ) {
 					bp_core_add_message( __( 'Notice sent successfully!', 'buddypress' ) );
-					bp_core_redirect( bp_loggedin_user_domain() . $bp->messages->slug . '/inbox/' );
+					bp_core_redirect( bp_loggedin_user_domain() . bp_get_messages_slug() . '/inbox/' );
 				} else {
 					bp_core_add_message( __( 'There was an error sending that notice, please try again', 'buddypress' ), 'error' );
 				}
@@ -69,11 +77,16 @@ function messages_screen_compose() {
 				$typed_recipients        = explode( ' ', $_POST['send_to_usernames'] );
 				$recipients              = array_merge( (array) $autocomplete_recipients, (array) $typed_recipients );
 				$recipients              = apply_filters( 'bp_messages_recipients', $recipients );
+				$thread_id               = messages_new_message( array(
+					'recipients' => $recipients,
+					'subject'    => $_POST['subject'],
+					'content'    => $_POST['content']
+				) );
 
 				// Send the message
-				if ( $thread_id = messages_new_message( array( 'recipients' => $recipients, 'subject' => $_POST['subject'], 'content' => $_POST['content'] ) ) ) {
+				if ( ! empty( $thread_id ) ) {
 					bp_core_add_message( __( 'Message sent successfully!', 'buddypress' ) );
-					bp_core_redirect( bp_loggedin_user_domain() . $bp->messages->slug . '/view/' . $thread_id . '/' );
+					bp_core_redirect( bp_loggedin_user_domain() . bp_get_messages_slug() . '/view/' . $thread_id . '/' );
 				} else {
 					bp_core_add_message( __( 'There was an error sending that message, please try again', 'buddypress' ), 'error' );
 				}
@@ -86,16 +99,23 @@ function messages_screen_compose() {
 	bp_core_load_template( apply_filters( 'messages_template_compose', 'members/single/home' ) );
 }
 
+/**
+ * Load an individual conversation screen.
+ *
+ * @return bool|null False on failure.
+ */
 function messages_screen_conversation() {
 
 	// Bail if not viewing a single message
-	if ( !bp_is_messages_component() || !bp_is_current_action( 'view' ) )
+	if ( !bp_is_messages_component() || !bp_is_current_action( 'view' ) ) {
 		return false;
+	}
 
 	$thread_id = (int) bp_action_variable( 0 );
 
-	if ( empty( $thread_id ) || !messages_is_valid_thread( $thread_id ) || ( !messages_check_thread_access( $thread_id ) && !bp_current_user_can( 'bp_moderate' ) ) )
+	if ( empty( $thread_id ) || !messages_is_valid_thread( $thread_id ) || ( !messages_check_thread_access( $thread_id ) && !bp_current_user_can( 'bp_moderate' ) ) ) {
 		bp_core_redirect( trailingslashit( bp_displayed_user_domain() . bp_get_messages_slug() ) );
+	}
 
 	// Load up BuddyPress one time
 	$bp = buddypress();
@@ -109,11 +129,17 @@ function messages_screen_conversation() {
 }
 add_action( 'bp_screens', 'messages_screen_conversation' );
 
+/**
+ * Load the Messages > Notices screen.
+ *
+ * @return false|null False on failure.
+ */
 function messages_screen_notices() {
 	global $notice_id;
 
-	if ( !bp_current_user_can( 'bp_moderate' ) )
+	if ( !bp_current_user_can( 'bp_moderate' ) ) {
 		return false;
+	}
 
 	$notice_id = (int)bp_action_variable( 1 );
 
@@ -152,14 +178,18 @@ function messages_screen_notices() {
 	bp_core_load_template( apply_filters( 'messages_template_notices', 'members/single/home' ) );
 }
 
+/**
+ * Render the markup for the Messages section of Settings > Notifications.
+ */
 function messages_screen_notification_settings() {
 	if ( bp_action_variables() ) {
 		bp_do_404();
 		return;
 	}
 
-	if ( !$new_messages = bp_get_user_meta( bp_displayed_user_id(), 'notification_messages_new_message', true ) )
-		$new_messages = 'yes'; ?>
+	if ( !$new_messages = bp_get_user_meta( bp_displayed_user_id(), 'notification_messages_new_message', true ) ) {
+		$new_messages = 'yes';
+	} ?>
 
 	<table class="notification-settings" id="messages-notification-settings">
 		<thead>
diff --git a/wp-content/plugins/buddypress/bp-messages/bp-messages-template.php b/wp-content/plugins/buddypress/bp-messages/bp-messages-template.php
index 07729852f..90ed2f61c 100644
--- a/wp-content/plugins/buddypress/bp-messages/bp-messages-template.php
+++ b/wp-content/plugins/buddypress/bp-messages/bp-messages-template.php
@@ -14,22 +14,119 @@ if ( !defined( 'ABSPATH' ) ) exit;
  * Message Box Template Class
  */
 class BP_Messages_Box_Template {
-	var $current_thread = -1;
-	var $current_thread_count;
-	var $total_thread_count;
-	var $threads;
-	var $thread;
-
-	var $in_the_loop;
-	var $user_id;
-	var $box;
-
-	var $pag_page;
-	var $pag_num;
-	var $pag_links;
-	var $search_terms;
-
-	function __construct( $user_id, $box, $per_page, $max, $type, $search_terms, $page_arg = 'mpage' ) {
+
+	/**
+	 * The loop iterator.
+	 *
+	 * @access public
+	 * @var int
+	 */
+	public $current_thread = -1;
+
+	/**
+	 * The number of threads returned by the paged query.
+	 *
+	 * @access public
+	 * @var int
+	 */
+	public $current_thread_count = 0;
+
+	/**
+	 * Total number of threads matching the query params.
+	 *
+	 * @access public
+	 * @var int
+	 */
+	public $total_thread_count = 0;
+
+	/**
+	 * Array of threads located by the query.
+	 *
+	 * @access public
+	 * @var array
+	 */
+	public $threads = array();
+
+	/**
+	 * The thread object currently being iterated on.
+	 *
+	 * @access public
+	 * @var object
+	 */
+	public $thread = false;
+
+	/**
+	 * A flag for whether the loop is currently being iterated.
+	 *
+	 * @access public
+	 * @var bool
+	 */
+	public $in_the_loop = false;
+
+	/**
+	 * User ID of the current inbox.
+	 *
+	 * @access public
+	 * @var int
+	 */
+	public $user_id = 0;
+
+	/**
+	 * The current "box" view ('notices', 'sentbox', 'inbox')
+	 *
+	 * @access public
+	 * @var string
+	 */
+	public $box = 'inbox';
+
+	/**
+	 * The page number being requested.
+	 *
+	 * @access public
+	 * @var int
+	 */
+	public $pag_page = 1;
+
+	/**
+	 * The number of items being requested per page.
+	 *
+	 * @access public
+	 * @var int
+	 */
+	public $pag_num = 10;
+
+	/**
+	 * An HTML string containing pagination links.
+	 *
+	 * @access public
+	 * @var string
+	 */
+	public $pag_links = '';
+
+	/**
+	 * Search terms for limiting the thread query.
+	 *
+	 * @access public
+	 * @var string
+	 */
+	public $search_terms = '';
+
+	/**
+	 * Constructor method.
+	 *
+	 * @param int $user_id ID of the user whose Messages box is being
+	 *        viewed.
+	 * @param string $box Type of box being viewed ('notices', 'sentbox',
+	 *        'inbox').
+	 * @param int $per_page Number of thread to return per page of results.
+	 * @param int $max Max number of results to return.
+	 * @param string $type Type of results to return. 'unread', 'read',
+	 *        or 'all'.
+	 * @param string $search_terms Search terms for limiting results.
+	 * @param string $page_arg Optional. URL argument for pagination
+	 *        parameter. Default: 'mpage'.
+	 */
+	public function __construct( $user_id, $box, $per_page, $max, $type, $search_terms, $page_arg = 'mpage' ) {
 		$this->pag_page = isset( $_GET[$page_arg] ) ? intval( $_GET[$page_arg] ) : 1;
 		$this->pag_num  = isset( $_GET['num'] )   ? intval( $_GET['num'] )   : $per_page;
 
@@ -76,8 +173,22 @@ class BP_Messages_Box_Template {
 		}
 
 		if ( (int) $this->total_thread_count && (int) $this->pag_num ) {
+			$pag_args = array(
+				$page_arg => '%#%',
+			);
+
+			if ( defined( 'DOING_AJAX' ) && true === (bool) DOING_AJAX ) {
+				$base = remove_query_arg( 's', wp_get_referer() );
+			} else {
+				$base = '';
+			}
+
+			if ( ! empty( $this->search_terms ) ) {
+				$pag_args['s'] = $this->search_terms;
+			}
+
 			$this->pag_links = paginate_links( array(
-				'base'      => add_query_arg( $page_arg, '%#%' ),
+				'base'      => add_query_arg( $pag_args, $base ),
 				'format'    => '',
 				'total'     => ceil( (int) $this->total_thread_count / (int) $this->pag_num ),
 				'current'   => $this->pag_page,
@@ -88,27 +199,54 @@ class BP_Messages_Box_Template {
 		}
 	}
 
-	function has_threads() {
-		if ( $this->thread_count )
+	/**
+	 * Whether there are threads available in the loop.
+	 *
+	 * @see bp_has_message_threads()
+	 *
+	 * @return bool True if there are items in the loop, otherwise false.
+	 */
+	public function has_threads() {
+		if ( $this->thread_count ) {
 			return true;
+		}
 
 		return false;
 	}
 
-	function next_thread() {
+	/**
+	 * Set up the next member and iterate index.
+	 *
+	 * @return object The next member to iterate over.
+	 */
+	public function next_thread() {
 		$this->current_thread++;
 		$this->thread = $this->threads[$this->current_thread];
 
 		return $this->thread;
 	}
 
-	function rewind_threads() {
+	/**
+	 * Rewind the threads and reset thread index.
+	 */
+	public function rewind_threads() {
 		$this->current_thread = -1;
 		if ( $this->thread_count > 0 ) {
 			$this->thread = $this->threads[0];
 		}
 	}
 
+	/**
+	 * Whether there are threads left in the loop to iterate over.
+	 *
+	 * This method is used by {@link bp_message_threads()} as part of the
+	 * while loop that controls iteration inside the threads loop, eg:
+	 *     while ( bp_message_threads() ) { ...
+	 *
+	 * @see bp_message_threads()
+	 *
+	 * @return bool True if there are more threads to show, otherwise false.
+	 */
 	function message_threads() {
 		if ( $this->current_thread + 1 < $this->thread_count ) {
 			return true;
@@ -122,7 +260,16 @@ class BP_Messages_Box_Template {
 		return false;
 	}
 
-	function the_message_thread() {
+	/**
+	 * Set up the current thread inside the loop.
+	 *
+	 * Used by {@link bp_message_thread()} to set up the current thread data
+	 * while looping, so that template tags used during that iteration make
+	 * reference to the current thread.
+	 *
+	 * @see bp_message_thread()
+	 */
+	public function the_message_thread() {
 
 		$this->in_the_loop = true;
 		$this->thread      = $this->next_thread();
@@ -151,22 +298,22 @@ class BP_Messages_Box_Template {
 				}
 			}
 
-			$this->thread->last_message_id      = $this->thread->messages[$last_message_index]->id;
-			$this->thread->last_message_date    = $this->thread->messages[$last_message_index]->date_sent;
-			$this->thread->last_sender_id       = $this->thread->messages[$last_message_index]->sender_id;
-			$this->thread->last_message_subject = $this->thread->messages[$last_message_index]->subject;
-			$this->thread->last_message_content = $this->thread->messages[$last_message_index]->message;
+			$this->thread->last_message_id      = $this->thread->messages[ $last_message_index ]->id;
+			$this->thread->last_message_date    = $this->thread->messages[ $last_message_index ]->date_sent;
+			$this->thread->last_sender_id       = $this->thread->messages[ $last_message_index ]->sender_id;
+			$this->thread->last_message_subject = $this->thread->messages[ $last_message_index ]->subject;
+			$this->thread->last_message_content = $this->thread->messages[ $last_message_index ]->message;
 		}
 
 		// loop has just started
 		if ( 0 == $this->current_thread ) {
-			do_action('messages_box_loop_start');
+			do_action( 'messages_box_loop_start' );
 		}
 	}
 }
 
 /**
- * Retrieve private message threads for display in inbox/sentbox/notices
+ * Retrieve private message threads for display in inbox/sentbox/notices.
  *
  * Similar to WordPress's have_posts() function, this function is responsible
  * for querying the database and retrieving private messages for display inside
@@ -175,8 +322,21 @@ class BP_Messages_Box_Template {
  * @since BuddyPress (1.0.0)
  *
  * @global BP_Messages_Box_Template $messages_template
- * @param array $args
- * @return object
+ *
+ * @param array $args {
+ *     Array of arguments. All are optional.
+ *     @type int $user_id ID of the user whose threads are being loaded.
+ *           Default: ID of the logged-in user.
+ *     @type string $box Current "box" view. If not provided here, the current
+ *           view will be inferred from the URL.
+ *     @type int $per_page Number of results to return per page. Default: 10.
+ *     @type int $max Max results to return. Default: false.
+ *     @type string $search_terms Terms to which to limit results. Default:
+ *           the value of $_REQUEST['s'].
+ *     @type string $page_arg URL argument used for the pagination param.
+ *           Default: 'mpage'.
+ * }
+ * @return bool True if there are threads to display, otherwise false.
  */
 function bp_has_message_threads( $args = '' ) {
 	global $messages_template;
@@ -220,37 +380,71 @@ function bp_has_message_threads( $args = '' ) {
 	return apply_filters( 'bp_has_message_threads', $messages_template->has_threads(), $messages_template, $r );
 }
 
+/**
+ * Check whether there are more threads to iterate over.
+ *
+ * @return bool
+ */
 function bp_message_threads() {
 	global $messages_template;
 	return $messages_template->message_threads();
 }
 
+/**
+ * Set up the current thread inside the loop.
+ *
+ * @return object
+ */
 function bp_message_thread() {
 	global $messages_template;
 	return $messages_template->the_message_thread();
 }
 
+/**
+ * Output the ID of the current thread in the loop.
+ */
 function bp_message_thread_id() {
 	echo bp_get_message_thread_id();
 }
+	/**
+	 * Get the ID of the current thread in the loop.
+	 *
+	 * @return int
+	 */
 	function bp_get_message_thread_id() {
 		global $messages_template;
 
 		return apply_filters( 'bp_get_message_thread_id', $messages_template->thread->thread_id );
 	}
 
+/**
+ * Output the subject of the current thread in the loop.
+ */
 function bp_message_thread_subject() {
 	echo bp_get_message_thread_subject();
 }
+	/**
+	 * Get the subject of the current thread in the loop.
+	 *
+	 * @return string
+	 */
 	function bp_get_message_thread_subject() {
 		global $messages_template;
 
 		return apply_filters( 'bp_get_message_thread_subject', stripslashes_deep( $messages_template->thread->last_message_subject ) );
 	}
 
+/**
+ * Output an excerpt from the current message in the loop.
+ */
 function bp_message_thread_excerpt() {
 	echo bp_get_message_thread_excerpt();
 }
+	/**
+	 * Generate an excerpt from the current message in the loop.
+	 *
+	 * @return string
+	 */
 	function bp_get_message_thread_excerpt() {
 		global $messages_template;
 
@@ -289,89 +483,172 @@ function bp_message_thread_content() {
 		return apply_filters( 'bp_get_message_thread_content', $messages_template->thread->last_message_content );
 	}
 
+/**
+ * Output a link to the page of the current thread's last author.
+ */
 function bp_message_thread_from() {
 	echo bp_get_message_thread_from();
 }
+	/**
+	 * Get a link to the page of the current thread's last author.
+	 *
+	 * @return string
+	 */
 	function bp_get_message_thread_from() {
 		global $messages_template;
 
 		return apply_filters( 'bp_get_message_thread_from', bp_core_get_userlink( $messages_template->thread->last_sender_id ) );
 	}
 
+/**
+ * Output links to the pages of the current thread's recipients.
+ */
 function bp_message_thread_to() {
 	echo bp_get_message_thread_to();
 }
+	/**
+	 * Generate HTML links to the pages of the current thread's recipients.
+	 *
+	 * @return string
+	 */
 	function bp_get_message_thread_to() {
 		global $messages_template;
 		return apply_filters( 'bp_message_thread_to', BP_Messages_Thread::get_recipient_links($messages_template->thread->recipients ) );
 	}
 
+/**
+ * Output the permalink for a particular thread.
+ *
+ * @param int $thread_id Optional. ID of the thread. Default: current thread
+ *        being iterated on in the loop.
+ */
 function bp_message_thread_view_link( $thread_id = 0 ) {
 	echo bp_get_message_thread_view_link( $thread_id );
 }
+	/**
+	 * Get the permalink of a particular thread.
+	 *
+	 * @param int $thread_id Optional. ID of the thread. Default: current
+	 *        thread being iterated on in the loop.
+	 * @return string
+	 */
 	function bp_get_message_thread_view_link( $thread_id = 0 ) {
 		global $messages_template;
 
 		if ( empty( $messages_template ) && (int) $thread_id > 0 ) {
 			$thread_id = (int) $thread_id;
-		} else {
+		} elseif ( ! empty( $messages_template->thread->thread_id ) ) {
 			$thread_id = $messages_template->thread->thread_id;
 		}
 
-		return apply_filters( 'bp_get_message_thread_view_link', trailingslashit( bp_loggedin_user_domain() . buddypress()->messages->slug . '/view/' . $thread_id ) );
+		return apply_filters( 'bp_get_message_thread_view_link', trailingslashit( bp_loggedin_user_domain() . bp_get_messages_slug() . '/view/' . $thread_id ) );
 	}
 
+/**
+ * Output the URL for deleting the current thread.
+ */
 function bp_message_thread_delete_link() {
 	echo bp_get_message_thread_delete_link();
 }
+	/**
+	 * Generate the URL for deleting the current thread.
+	 *
+	 * @return string
+	 */
 	function bp_get_message_thread_delete_link() {
-		global $messages_template, $bp;
-		return apply_filters( 'bp_get_message_thread_delete_link', wp_nonce_url( trailingslashit( bp_loggedin_user_domain() . $bp->messages->slug . '/' . bp_current_action() . '/delete/' . $messages_template->thread->thread_id ), 'messages_delete_thread' ) );
+		global $messages_template;
+		return apply_filters( 'bp_get_message_thread_delete_link', wp_nonce_url( trailingslashit( bp_loggedin_user_domain() . bp_get_messages_slug() . '/' . bp_current_action() . '/delete/' . $messages_template->thread->thread_id ), 'messages_delete_thread' ) );
 	}
 
+/**
+ * Output the CSS class for the current thread.
+ */
 function bp_message_css_class() {
 	echo bp_get_message_css_class();
 }
-
+	/**
+	 * Generate the CSS class for the current thread.
+	 *
+	 * @return string
+	 */
 	function bp_get_message_css_class() {
 		global $messages_template;
 
 		$class = false;
 
-		if ( $messages_template->current_thread % 2 == 1 )
+		if ( $messages_template->current_thread % 2 == 1 ) {
 			$class .= 'alt';
+		}
 
 		return apply_filters( 'bp_get_message_css_class', trim( $class ) );
 	}
 
+/**
+ * Check whether the current thread has unread items.
+ *
+ * @return bool True if there are unread items, otherwise false.
+ */
 function bp_message_thread_has_unread() {
 	global $messages_template;
 
-	if ( $messages_template->thread->unread_count )
-		return true;
+	$retval = ! empty( $messages_template->thread->unread_count )
+		? true
+		: false;
 
-	return false;
+	return apply_filters( 'bp_message_thread_has_unread', $retval );
 }
 
+/**
+ * Output the current thread's unread count.
+ */
 function bp_message_thread_unread_count() {
 	echo bp_get_message_thread_unread_count();
 }
+	/**
+	 * Get the current thread's unread count.
+	 *
+	 * @return int
+	 */
 	function bp_get_message_thread_unread_count() {
 		global $messages_template;
 
-		if ( (int) $messages_template->thread->unread_count )
-			return apply_filters( 'bp_get_message_thread_unread_count', $messages_template->thread->unread_count );
+		$count = ! empty( $messages_template->thread->unread_count )
+			? (int) $messages_template->thread->unread_count
+			: false;
 
-		return false;
+		return apply_filters( 'bp_get_message_thread_unread_count', $count );
 	}
 
+/**
+ * Output the unformatted date of the last post in the current thread.
+ */
+function bp_message_thread_last_post_date_raw() {
+	echo bp_get_message_thread_last_post_date_raw();
+}
+	/**
+	 * Get the unformatted date of the last post in the current thread.
+	 *
+	 * @return string
+	 */
+	function bp_get_message_thread_last_post_date_raw() {
+		global $messages_template;
+
+		return apply_filters( 'bp_get_message_thread_last_message_date', $messages_template->thread->last_message_date );
+	}
+
+/**
+ * Output the nicely formatted date of the last post in the current thread.
+ */
 function bp_message_thread_last_post_date() {
 	echo bp_get_message_thread_last_post_date();
 }
+	/**
+	 * Get the nicely formatted date of the last post in the current thread.
+	 *
+	 * @return string
+	 */
 	function bp_get_message_thread_last_post_date() {
-		global $messages_template;
-
-		return apply_filters( 'bp_get_message_thread_last_post_date', bp_format_time( strtotime( $messages_template->thread->last_message_date ) ) );
+		return apply_filters( 'bp_get_message_thread_last_post_date', bp_format_time( strtotime( bp_get_message_thread_last_post_date_raw() ) ) );
 	}
 
 /**
@@ -407,17 +684,16 @@ function bp_message_thread_avatar( $args = '' ) {
 		global $messages_template;
 
 		$fullname = bp_core_get_user_displayname( $messages_template->thread->last_sender_id );
+		$alt      = sprintf( __( 'Profile picture of %s', 'buddypress' ), $fullname );
 
-		$defaults = array(
+		$r = bp_parse_args( $args, array(
 			'type'   => 'thumb',
 			'width'  => false,
 			'height' => false,
 			'class'  => 'avatar',
 			'id'     => false,
-			'alt'    => sprintf( __( 'Profile picture of %s', 'buddypress' ), $fullname )
-		);
-
-		$r = wp_parse_args( $args, $defaults );
+			'alt'    => $alt
+		) );
 
 		return apply_filters( 'bp_get_message_thread_avatar', bp_core_fetch_avatar( array(
 			'item_id' => $messages_template->thread->last_sender_id,
@@ -430,36 +706,57 @@ function bp_message_thread_avatar( $args = '' ) {
 		) ) );
 	}
 
+/**
+ * Output the unread messages count for the current inbox.
+ */
 function bp_total_unread_messages_count() {
 	echo bp_get_total_unread_messages_count();
 }
+	/**
+	 * Get the unread messages count for the current inbox.
+	 *
+	 * @return int
+	 */
 	function bp_get_total_unread_messages_count() {
 		return apply_filters( 'bp_get_total_unread_messages_count', BP_Messages_Thread::get_inbox_count() );
 	}
 
+/**
+ * Output the pagination HTML for the current thread loop.
+ */
 function bp_messages_pagination() {
 	echo bp_get_messages_pagination();
 }
+	/**
+	 * Get the pagination HTML for the current thread loop.
+	 *
+	 * @return string
+	 */
 	function bp_get_messages_pagination() {
 		global $messages_template;
 		return apply_filters( 'bp_get_messages_pagination', $messages_template->pag_links );
 	}
 
+/**
+ * Generate the "Viewing message x to y (of z messages)" string for a loop.
+ *
+ * @return string
+ */
 function bp_messages_pagination_count() {
 	global $messages_template;
 
 	$start_num = intval( ( $messages_template->pag_page - 1 ) * $messages_template->pag_num ) + 1;
-	$from_num = bp_core_number_format( $start_num );
-	$to_num = bp_core_number_format( ( $start_num + ( $messages_template->pag_num - 1 ) > $messages_template->total_thread_count ) ? $messages_template->total_thread_count : $start_num + ( $messages_template->pag_num - 1 ) );
-	$total = bp_core_number_format( $messages_template->total_thread_count );
+	$from_num  = bp_core_number_format( $start_num );
+	$to_num    = bp_core_number_format( ( $start_num + ( $messages_template->pag_num - 1 ) > $messages_template->total_thread_count ) ? $messages_template->total_thread_count : $start_num + ( $messages_template->pag_num - 1 ) );
+	$total     = bp_core_number_format( $messages_template->total_thread_count );
 
-	echo sprintf( _n( 'Viewing message %1$s to %2$s (of %3$s message)', 'Viewing message %1$s to %2$s (of %3$s messages)', $total, 'buddypress' ), $from_num, $to_num, number_format_i18n( $total ) ); ?><?php
+	echo sprintf( _n( 'Viewing 1 message', 'Viewing %1$s - %2$s of %3$s messages', $total, 'buddypress' ), $from_num, $to_num, number_format_i18n( $total ) );
 }
 
 /**
- * Output the Private Message search form
+ * Output the Private Message search form.
  *
- * @since BuddyPress (1.6)
+ * @since BuddyPress (1.6.0)
  */
 function bp_message_search_form() {
 
@@ -475,17 +772,13 @@ function bp_message_search_form() {
 }
 
 /**
- * Echoes the form action for Messages HTML forms
- *
- * @package BuddyPress
+ * Echo the form action for Messages HTML forms.
  */
 function bp_messages_form_action() {
 	echo bp_get_messages_form_action();
 }
 	/**
-	 * Returns the form action for Messages HTML forms
-	 *
-	 * @package BuddyPress
+	 * Return the form action for Messages HTML forms.
 	 *
 	 * @return string The form action
 	 */
@@ -493,9 +786,17 @@ function bp_messages_form_action() {
 		return apply_filters( 'bp_get_messages_form_action', trailingslashit( bp_loggedin_user_domain() . bp_get_messages_slug() . '/' . bp_current_action() . '/' . bp_action_variable( 0 ) ) );
 	}
 
+/**
+ * Output the default username for the recipient box.
+ */
 function bp_messages_username_value() {
 	echo bp_get_messages_username_value();
 }
+	/**
+	 * Get the default username for the recipient box.
+	 *
+	 * @return string
+	 */
 	function bp_get_messages_username_value() {
 		if ( isset( $_COOKIE['bp_messages_send_to'] ) ) {
 			return apply_filters( 'bp_get_messages_username_value', $_COOKIE['bp_messages_send_to'] );
@@ -504,28 +805,54 @@ function bp_messages_username_value() {
 		}
 	}
 
+/**
+ * Output the default value for the Subject field.
+ */
 function bp_messages_subject_value() {
 	echo bp_get_messages_subject_value();
 }
+	/**
+	 * Get the default value for the Subject field.
+	 *
+	 * Will get a value out of $_POST['subject'] if available (ie after a
+	 * failed submission).
+	 *
+	 * @return string
+	 */
 	function bp_get_messages_subject_value() {
-		$subject = '';
-		if ( !empty( $_POST['subject'] ) )
-			$subject = $_POST['subject'];
+		$subject = ! empty( $_POST['subject'] )
+			? $_POST['subject']
+			: '';
 
 		return apply_filters( 'bp_get_messages_subject_value', $subject );
 	}
 
+/**
+ * Output the default value for the Compose content field.
+ */
 function bp_messages_content_value() {
 	echo bp_get_messages_content_value();
 }
+	/**
+	 * Get the default value fo the Compose content field.
+	 *
+	 * Will get a value out of $_POST['content'] if available (ie after a
+	 * failed submission).
+	 *
+	 * @return string
+	 */
 	function bp_get_messages_content_value() {
-		$content = '';
-		if ( !empty( $_POST['content'] ) )
-			$content = $_POST['content'];
+
+		$content = !empty( $_POST['content'] )
+			? $_POST['content']
+			: '';
 
 		return apply_filters( 'bp_get_messages_content_value', $content );
 	}
 
+/**
+ * Output the markup for the message type dropdown.
+ */
 function bp_messages_options() {
 ?>
 
@@ -533,15 +860,15 @@ function bp_messages_options() {
 
 	<select name="message-type-select" id="message-type-select">
 		<option value=""></option>
-		<option value="read"><?php _e('Read', 'buddypress') ?></option>
-		<option value="unread"><?php _e('Unread', 'buddypress') ?></option>
-		<option value="all"><?php _e('All', 'buddypress') ?></option>
+		<option value="read"><?php _ex('Read', 'Message dropdown filter', 'buddypress') ?></option>
+		<option value="unread"><?php _ex('Unread', 'Message dropdown filter', 'buddypress') ?></option>
+		<option value="all"><?php _ex('All', 'Message dropdown filter', 'buddypress') ?></option>
 	</select> &nbsp;
 
 	<?php if ( ! bp_is_current_action( 'sentbox' ) && bp_is_current_action( 'notices' ) ) : ?>
 
-		<a href="#" id="mark_as_read"><?php _e('Mark as Read', 'buddypress') ?></a> &nbsp;
-		<a href="#" id="mark_as_unread"><?php _e('Mark as Unread', 'buddypress') ?></a> &nbsp;
+		<a href="#" id="mark_as_read"><?php _ex('Mark as Read', 'Message management markup', 'buddypress') ?></a> &nbsp;
+		<a href="#" id="mark_as_unread"><?php _ex('Mark as Unread', 'Message management markup', 'buddypress') ?></a> &nbsp;
 
 	<?php endif; ?>
 
@@ -551,112 +878,169 @@ function bp_messages_options() {
 }
 
 /**
- * Return whether or not the notice is currently active
+ * Return whether or not the notice is currently active.
  *
- * @since BuddyPress (1.6)
- * @uses bp_get_messages_is_active_notice()
+ * @since BuddyPress (1.6.0)
  */
 function bp_messages_is_active_notice() {
 	global $messages_template;
 
-	if ( $messages_template->thread->is_active )
-		return true;
+	$retval = ! empty( $messages_template->thread->is_active )
+		? true
+		: false;
 
-	return false;
+	return apply_filters( 'bp_messages_is_active_notice', $retval );
 }
 
 /**
- * Output a string for the active notice
+ * Output a string for the active notice.
  *
- * Since 1.6 this function has been deprecated in favor of text in the theme
+ * Since 1.6 this function has been deprecated in favor of text in the theme.
  *
- * @since BuddyPress (1.0)
- * @deprecated BuddyPress (1.6)
+ * @since BuddyPress (1.0.0)
+ * @deprecated BuddyPress (1.6.0)
  * @uses bp_get_message_is_active_notice()
  */
 function bp_message_is_active_notice() {
 	echo bp_get_message_is_active_notice();
 }
 	/**
-	 * Returns a string for the active notice
+	 * Returns a string for the active notice.
 	 *
-	 * Since 1.6 this function has been deprecated in favor of text in the theme
+	 * Since 1.6 this function has been deprecated in favor of text in the
+	 * theme.
 	 *
-	 * @since BuddyPress (1.0)
-	 * @deprecated BuddyPress (1.6)
+	 * @since BuddyPress (1.0.0)
+	 * @deprecated BuddyPress (1.6.0)
 	 * @uses bp_messages_is_active_notice()
 	 */
 	function bp_get_message_is_active_notice() {
 
-		$string = '';
-		if ( bp_messages_is_active_notice() )
-			$string = __( 'Currently Active', 'buddypress' );
+		$string = bp_messages_is_active_notice()
+			? __( 'Currently Active', 'buddypress' )
+			: '';
 
 		return apply_filters( 'bp_get_message_is_active_notice', $string );
 	}
 
+/**
+ * Output the ID of the current notice in the loop.
+ */
 function bp_message_notice_id() {
 	echo bp_get_message_notice_id();
 }
+	/**
+	 * Get the ID of the current notice in the loop.
+	 *
+	 * @return int
+	 */
 	function bp_get_message_notice_id() {
 		global $messages_template;
 		return apply_filters( 'bp_get_message_notice_id', $messages_template->thread->id );
 	}
 
+/**
+ * Output the post date of the current notice in the loop.
+ */
 function bp_message_notice_post_date() {
 	echo bp_get_message_notice_post_date();
 }
+	/**
+	 * Get the post date of the current notice in the loop.
+	 *
+	 * @return string
+	 */
 	function bp_get_message_notice_post_date() {
 		global $messages_template;
-		return apply_filters( 'bp_get_message_notice_post_date', bp_format_time( strtotime($messages_template->thread->date_sent) ) );
+		return apply_filters( 'bp_get_message_notice_post_date', bp_format_time( strtotime( $messages_template->thread->date_sent ) ) );
 	}
 
+/**
+ * Output the subject of the current notice in the loop.
+ */
 function bp_message_notice_subject() {
 	echo bp_get_message_notice_subject();
 }
+	/**
+	 * Get the subject of the current notice in the loop.
+	 *
+	 * @return string
+	 */
 	function bp_get_message_notice_subject() {
 		global $messages_template;
 		return apply_filters( 'bp_get_message_notice_subject', $messages_template->thread->subject );
 	}
 
+/**
+ * Output the text of the current notice in the loop.
+ */
 function bp_message_notice_text() {
 	echo bp_get_message_notice_text();
 }
+	/**
+	 * Get the text of the current notice in the loop.
+	 *
+	 * @return string
+	 */
 	function bp_get_message_notice_text() {
 		global $messages_template;
 		return apply_filters( 'bp_get_message_notice_text', $messages_template->thread->message );
 	}
 
+/**
+ * Output the URL for deleting the current notice.
+ */
 function bp_message_notice_delete_link() {
 	echo bp_get_message_notice_delete_link();
 }
+	/**
+	 * Get the URL for deleting the current notice.
+	 *
+	 * @return string Delete URL.
+	 */
 	function bp_get_message_notice_delete_link() {
-		global $messages_template, $bp;
+		global $messages_template;
 
-		return apply_filters( 'bp_get_message_notice_delete_link', wp_nonce_url( bp_loggedin_user_domain() . $bp->messages->slug . '/notices/delete/' . $messages_template->thread->id, 'messages_delete_thread' ) );
+		return apply_filters( 'bp_get_message_notice_delete_link', wp_nonce_url( bp_loggedin_user_domain() . bp_get_messages_slug() . '/notices/delete/' . $messages_template->thread->id, 'messages_delete_thread' ) );
 	}
 
+/**
+ * Output the URL for deactivating the current notice.
+ */
 function bp_message_activate_deactivate_link() {
 	echo bp_get_message_activate_deactivate_link();
 }
+	/**
+	 * Get the URL for deactivating the current notice.
+	 *
+	 * @return string
+	 */
 	function bp_get_message_activate_deactivate_link() {
-		global $messages_template, $bp;
+		global $messages_template;
 
-		if ( 1 == (int) $messages_template->thread->is_active ) {
-			$link = wp_nonce_url( trailingslashit( bp_loggedin_user_domain() . $bp->messages->slug . '/notices/deactivate/' . $messages_template->thread->id ), 'messages_deactivate_notice' );
+		if ( 1 === (int) $messages_template->thread->is_active ) {
+			$link = wp_nonce_url( trailingslashit( bp_loggedin_user_domain() . bp_get_messages_slug() . '/notices/deactivate/' . $messages_template->thread->id ), 'messages_deactivate_notice' );
 		} else {
-			$link = wp_nonce_url( trailingslashit( bp_loggedin_user_domain() . $bp->messages->slug . '/notices/activate/' . $messages_template->thread->id ), 'messages_activate_notice' );
+			$link = wp_nonce_url( trailingslashit( bp_loggedin_user_domain() . bp_get_messages_slug() . '/notices/activate/' . $messages_template->thread->id ), 'messages_activate_notice' );
 		}
 		return apply_filters( 'bp_get_message_activate_deactivate_link', $link );
 	}
 
+/**
+ * Output the Deactivate/Activate text for the notice action link.
+ */
 function bp_message_activate_deactivate_text() {
 	echo bp_get_message_activate_deactivate_text();
 }
+	/**
+	 * Generate the text ('Deactivate' or 'Activate' for the notice action link.
+	 *
+	 * @return string
+	 */
 	function bp_get_message_activate_deactivate_text() {
 		global $messages_template;
 
-		if ( 1 == (int) $messages_template->thread->is_active  ) {
+		if ( 1 === (int) $messages_template->thread->is_active  ) {
 			$text = __('Deactivate', 'buddypress');
 		} else {
 			$text = __('Activate', 'buddypress');
@@ -665,11 +1049,9 @@ function bp_message_activate_deactivate_text() {
 	}
 
 /**
- * Output the messages component slug
+ * Output the messages component slug.
  *
- * @package BuddyPress
- * @subpackage Messages Template
- * @since BuddyPress (1.5)
+ * @since BuddyPress (1.5.0)
  *
  * @uses bp_get_messages_slug()
  */
@@ -677,32 +1059,36 @@ function bp_messages_slug() {
 	echo bp_get_messages_slug();
 }
 	/**
-	 * Return the messages component slug
+	 * Return the messages component slug.
+	 *
+	 * @since BuddyPress (1.5.0)
 	 *
-	 * @package BuddyPress
-	 * @subpackage Messages Template
-	 * @since BuddyPress (1.5)
+	 * @return string
 	 */
 	function bp_get_messages_slug() {
-		global $bp;
-		return apply_filters( 'bp_get_messages_slug', $bp->messages->slug );
+		return apply_filters( 'bp_get_messages_slug', buddypress()->messages->slug );
 	}
 
+/**
+ * Generate markup for currently active notices.
+ */
 function bp_message_get_notices() {
 	$notice = BP_Messages_Notice::get_active();
 
-	if ( empty( $notice ) )
+	if ( empty( $notice ) ) {
 		return false;
+	}
 
 	$closed_notices = bp_get_user_meta( bp_loggedin_user_id(), 'closed_notices', true );
 
-	if ( !$closed_notices )
+	if ( empty( $closed_notices ) ) {
 		$closed_notices = array();
+	}
 
-	if ( is_array($closed_notices) ) {
+	if ( is_array( $closed_notices ) ) {
 		if ( !in_array( $notice->id, $closed_notices ) && $notice->id ) {
 			?>
-			<div id="message" class="info notice" rel="n-<?php echo $notice->id ?>">
+			<div id="message" class="info notice" rel="n-<?php echo esc_attr( $notice->id ); ?>">
 				<p>
 					<strong><?php echo stripslashes( wp_filter_kses( $notice->subject ) ) ?></strong><br />
 					<?php echo stripslashes( wp_filter_kses( $notice->message) ) ?>
@@ -714,32 +1100,50 @@ function bp_message_get_notices() {
 	}
 }
 
+/**
+ * Output the URL for the Private Message link in member profile headers.
+ */
 function bp_send_private_message_link() {
 	echo bp_get_send_private_message_link();
 }
+	/**
+	 * Generate the URL for the Private Message link in member profile headers.
+	 *
+	 * @return bool|string False on failure, otherwise the URL.
+	 */
 	function bp_get_send_private_message_link() {
 
-		if ( bp_is_my_profile() || !is_user_logged_in() )
+		if ( bp_is_my_profile() || ! is_user_logged_in() ) {
 			return false;
+		}
 
 		return apply_filters( 'bp_get_send_private_message_link', wp_nonce_url( bp_loggedin_user_domain() . bp_get_messages_slug() . '/compose/?r=' . bp_core_get_username( bp_displayed_user_id() ) ) );
 	}
 
 /**
- * bp_send_private_message_button()
+ * Output the 'Private Message' button for member profile headers.
  *
  * Explicitly named function to avoid confusion with public messages.
  *
- * @uses bp_get_send_message_button()
  * @since BuddyPress (1.2.6)
+ *
+ * @uses bp_get_send_message_button()
  */
 function bp_send_private_message_button() {
 	echo bp_get_send_message_button();
 }
 
+/**
+ * Output the 'Private Message' button for member profile headers.
+ */
 function bp_send_message_button() {
 	echo bp_get_send_message_button();
 }
+	/**
+	 * Generate the 'Private Message' button for member profile headers.
+	 *
+	 * @return string
+	 */
 	function bp_get_send_message_button() {
 		// Note: 'bp_get_send_message_button' is a legacy filter. Use
 		// 'bp_get_send_message_button_args' instead. See #4536
@@ -758,21 +1162,34 @@ function bp_send_message_button() {
 		);
 	}
 
+/**
+ * Output the URL of the Messages AJAX loader gif.
+ */
 function bp_message_loading_image_src() {
 	echo bp_get_message_loading_image_src();
 }
+	/**
+	 * Get the URL of the Messages AJAX loader gif.
+	 *
+	 * @return string
+	 */
 	function bp_get_message_loading_image_src() {
-		global $bp;
-		return apply_filters( 'bp_get_message_loading_image_src', $bp->messages->image_base . '/ajax-loader.gif' );
+		return apply_filters( 'bp_get_message_loading_image_src', buddypress()->messages->image_base . '/ajax-loader.gif' );
 	}
 
+/**
+ * Output the markup for the message recipient tabs.
+ */
 function bp_message_get_recipient_tabs() {
 	$recipients = explode( ' ', bp_get_message_get_recipient_usernames() );
 
 	foreach ( $recipients as $recipient ) {
-		$user_id = bp_is_username_compatibility_mode() ? bp_core_get_userid( $recipient ) : bp_core_get_userid_from_nicename( $recipient );
 
-		if ( $user_id ) : ?>
+		$user_id = bp_is_username_compatibility_mode()
+			? bp_core_get_userid( $recipient )
+			: bp_core_get_userid_from_nicename( $recipient );
+
+		if ( ! empty( $user_id ) ) : ?>
 
 			<li id="un-<?php echo esc_attr( $recipient ); ?>" class="friend-tab">
 				<span><?php
@@ -785,9 +1202,17 @@ function bp_message_get_recipient_tabs() {
 	}
 }
 
+/**
+ * Output recipient usernames for prefilling the 'To' field on the Compose screen.
+ */
 function bp_message_get_recipient_usernames() {
 	echo bp_get_message_get_recipient_usernames();
 }
+	/**
+	 * Get the recipient usernames for prefilling the 'To' field on the Compose screen.
+	 *
+	 * @return string
+	 */
 	function bp_get_message_get_recipient_usernames() {
 		$recipients = isset( $_GET['r'] ) ? stripslashes( $_GET['r'] ) : '';
 
@@ -795,62 +1220,154 @@ function bp_message_get_recipient_usernames() {
 	}
 
 
-/*****************************************************************************
+/**
  * Message Thread Template Class
- **/
-
+ */
 class BP_Messages_Thread_Template {
-	var $current_message = -1;
-	var $message_count;
-	var $message;
 
-	var $thread;
+	/**
+	 * The loop iterator.
+	 *
+	 * @access public
+	 * @var int
+	 */
+	public $current_message = -1;
+
+	/**
+	 * Number of messages returned by the paged query.
+	 *
+	 * @access public
+	 * @var int
+	 */
+	public $message_count = 0;
+
+	/**
+	 * The message object currently being iterated on.
+	 *
+	 * @access public
+	 * @var object
+	 */
+	public $message;
+
+	/**
+	 * Thread that the current messages belong to.
+	 *
+	 * @access public
+	 * @var BP_Messages_Thread
+	 */
+	public $thread;
+
+	/**
+	 * A flag for whether the loop is currently being iterated.
+	 *
+	 * @access public
+	 * @var bool
+	 */
+	public $in_the_loop = false;
 
-	var $in_the_loop;
+	/**
+	 * The page number being requested.
+	 *
+	 * @access public
+	 * @var int
+	 */
+	public $pag_page = 1;
 
-	var $pag_page;
-	var $pag_num;
-	var $pag_links;
-	var $total_message_count;
+	/**
+	 * The number of items being requested per page.
+	 *
+	 * @access public
+	 * @var int
+	 */
+	public $pag_num = 10;
 
-	function __construct( $thread_id, $order ) {
+	/**
+	 * An HTML string containing pagination links.
+	 *
+	 * @access public
+	 * @var string
+	 */
+	public $pag_links = '';
+
+	/**
+	 * The total number of messages matching the query.
+	 *
+	 * @access public
+	 * @var int
+	 */
+	public $total_message_count = 0;
+
+	/**
+	 * Constructor method.
+	 *
+	 * @param int $thread_id ID of the message thread.
+	 * @param string $order 'ASC' or 'DESC'.
+	 */
+	public function __construct( $thread_id, $order ) {
 		$this->thread        = new BP_Messages_Thread( $thread_id, $order );
 		$this->message_count = count( $this->thread->messages );
 
-		$last_message_index = $this->message_count - 1;
-		$this->thread->last_message_id = $this->thread->messages[$last_message_index]->id;
-		$this->thread->last_message_date = $this->thread->messages[$last_message_index]->date_sent;
-		$this->thread->last_sender_id = $this->thread->messages[$last_message_index]->sender_id;
-		$this->thread->last_message_subject = $this->thread->messages[$last_message_index]->subject;
-		$this->thread->last_message_content = $this->thread->messages[$last_message_index]->message;
+		$last_message_index                 = $this->message_count - 1;
+		$this->thread->last_message_id      = $this->thread->messages[ $last_message_index ]->id;
+		$this->thread->last_message_date    = $this->thread->messages[ $last_message_index ]->date_sent;
+		$this->thread->last_sender_id       = $this->thread->messages[ $last_message_index ]->sender_id;
+		$this->thread->last_message_subject = $this->thread->messages[ $last_message_index ]->subject;
+		$this->thread->last_message_content = $this->thread->messages[ $last_message_index ]->message;
 	}
 
-	function has_messages() {
-		if ( $this->message_count )
+	/**
+	 * Whether there are messages available in the loop.
+	 *
+	 * @see bp_thread_has_messages()
+	 *
+	 * @return bool True if there are items in the loop, otherwise false.
+	 */
+	public function has_messages() {
+		if ( ! empty( $this->message_count ) ) {
 			return true;
+		}
 
 		return false;
 	}
 
-	function next_message() {
+	/**
+	 * Set up the next member and iterate index.
+	 *
+	 * @return object The next member to iterate over.
+	 */
+	public function next_message() {
 		$this->current_message++;
-		$this->message = $this->thread->messages[$this->current_message];
+		$this->message = $this->thread->messages[ $this->current_message ];
 
 		return $this->message;
 	}
 
-	function rewind_messages() {
+	/**
+	 * Rewind the messages and reset message index.
+	 */
+	public function rewind_messages() {
 		$this->current_message = -1;
 		if ( $this->message_count > 0 ) {
 			$this->message = $this->thread->messages[0];
 		}
 	}
 
-	function messages() {
-		if ( $this->current_message + 1 < $this->message_count ) {
+	/**
+	 * Whether there are messages left in the loop to iterate over.
+	 *
+	 * This method is used by {@link bp_thread_messages()} as part of the
+	 * while loop that controls iteration inside the messages loop, eg:
+	 *     while ( bp_thread_messages() ) { ...
+	 *
+	 * @see bp_thread_messages()
+	 *
+	 * @return bool True if there are more messages to show, otherwise false.
+	 */
+	public function messages() {
+		if ( ( $this->current_message + 1 ) < $this->message_count ) {
 			return true;
-		} elseif ( $this->current_message + 1 == $this->message_count ) {
-			do_action('thread_loop_end');
+		} elseif ( ( $this->current_message + 1 ) === $this->message_count ) {
+			do_action( 'thread_loop_end' );
 			// Do some cleaning up after the loop
 			$this->rewind_messages();
 		}
@@ -859,83 +1376,146 @@ class BP_Messages_Thread_Template {
 		return false;
 	}
 
-	function the_message() {
+	/**
+	 * Set up the current message inside the loop.
+	 *
+	 * Used by {@link bp_thread_the_message()} to set up the current
+	 * message data while looping, so that template tags used during
+	 * that iteration make reference to the current message.
+	 *
+	 * @see bp_thread_the_message()
+	 */
+	public function the_message() {
 		$this->in_the_loop = true;
 		$this->message     = $this->next_message();
 
 		// loop has just started
-		if ( 0 == $this->current_message )
-			do_action('thread_loop_start');
+		if ( 0 === $this->current_message ) {
+			do_action( 'thread_loop_start' );
+		}
 	}
 }
 
+/**
+ * Initialize the messages template loop for a specific thread.
+ *
+ * @param array $args {
+ *     Array of arguments. All are optional.
+ *     @type int $thread_id ID of the thread whose messages you are displaying.
+ *           Default: if viewing a thread, the thread ID will be parsed from
+ *           the URL (bp_action_variable( 0 )).
+ *     @type string $order 'ASC' or 'DESC'. Default: 'ASC'.
+ * }
+ * @return bool True if there are messages to display, otherwise false.
+ */
 function bp_thread_has_messages( $args = '' ) {
 	global $thread_template;
 
-	$defaults = array(
+	$r = bp_parse_args( $args, array(
 		'thread_id' => false,
 		'order'     => 'ASC'
-	);
+	), 'thread_has_messages' );
 
-	$r = wp_parse_args( $args, $defaults );
-	extract( $r, EXTR_SKIP );
+	if ( empty( $r['thread_id'] ) && bp_is_messages_component() && bp_is_current_action( 'view' ) ) {
+		$r['thread_id'] = (int) bp_action_variable( 0 );
+	}
 
-	if ( empty( $thread_id ) && bp_is_messages_component() && bp_is_current_action( 'view' ) )
-		$thread_id = (int) bp_action_variable( 0 );
+	$thread_template = new BP_Messages_Thread_Template( $r['thread_id'], $r['order'] );
 
-	$thread_template = new BP_Messages_Thread_Template( $thread_id, $order );
 	return $thread_template->has_messages();
 }
 
+/**
+ * Output the 'ASC' or 'DESC' messages order string for this loop.
+ */
 function bp_thread_messages_order() {
 	echo bp_get_thread_messages_order();
 }
-
+	/**
+	 * Get the 'ASC' or 'DESC' messages order string for this loop.
+	 *
+	 * @return string
+	 */
 	function bp_get_thread_messages_order() {
 		global $thread_template;
 		return $thread_template->thread->messages_order;
 	}
 
+/**
+ * Check whether there are more messages to iterate over.
+ *
+ * @return bool
+ */
 function bp_thread_messages() {
 	global $thread_template;
 
 	return $thread_template->messages();
 }
 
+/**
+ * Set up the current thread inside the loop.
+ *
+ * @return object
+ */
 function bp_thread_the_message() {
 	global $thread_template;
 
 	return $thread_template->the_message();
 }
 
+/**
+ * Output the ID of the thread that the current loop belongs to.
+ */
 function bp_the_thread_id() {
 	echo bp_get_the_thread_id();
 }
+	/**
+	 * Get the ID of the thread that the current loop belongs to.
+	 *
+	 * @return int
+	 */
 	function bp_get_the_thread_id() {
 		global $thread_template;
 
 		return apply_filters( 'bp_get_the_thread_id', $thread_template->thread->thread_id );
 	}
 
+/**
+ * Output the subject of the thread currently being iterated over.
+ */
 function bp_the_thread_subject() {
 	echo bp_get_the_thread_subject();
 }
+	/**
+	 * Get the subject of the thread currently being iterated over.
+	 *
+	 * @return string
+	 */
 	function bp_get_the_thread_subject() {
 		global $thread_template;
 
 		return apply_filters( 'bp_get_the_thread_subject', $thread_template->thread->last_message_subject );
 	}
 
+/**
+ * Output HTML links to recipients in the current thread.
+ */
 function bp_the_thread_recipients() {
 	echo bp_get_the_thread_recipients();
 }
+	/**
+	 * Generate HTML links to the profiles of recipients in the current thread.
+	 *
+	 * @return string
+	 */
 	function bp_get_the_thread_recipients() {
 		global $thread_template;
 
 		$recipient_links = array();
 
-		if ( count( $thread_template->thread->recipients ) >= 5 )
-			return apply_filters( 'bp_get_the_thread_recipients', sprintf( __( '%d Recipients', 'buddypress' ), count($thread_template->thread->recipients) ) );
+		if ( count( $thread_template->thread->recipients ) >= 5 ) {
+			return apply_filters( 'bp_get_the_thread_recipients', sprintf( __( '%d Recipients', 'buddypress' ), count( $thread_template->thread->recipients ) ) );
+		}
 
 		foreach( (array) $thread_template->thread->recipients as $recipient ) {
 			if ( (int) $recipient->user_id !== bp_loggedin_user_id() ) {
@@ -953,29 +1533,77 @@ function bp_the_thread_recipients() {
 	}
 
 /**
- * Echoes the ID of the current message in the thread
+ * Echo the ID of the current message in the thread.
  *
- * @since BuddyPress (1.9)
+ * @since BuddyPress (1.9.0)
  */
 function bp_the_thread_message_id() {
 	echo bp_get_the_thread_message_id();
 }
 	/**
-	 * Gets the ID of the current message in the thread
+	 * Get the ID of the current message in the thread.
+	 *
+	 * @since BuddyPress (1.9.0)
 	 *
-	 * @since BuddyPress (1.9)
 	 * @return int
 	 */
 	function bp_get_the_thread_message_id() {
 		global $thread_template;
 
-		$thread_message_id = isset( $thread_template->message->id ) ? (int) $thread_template->message->id : null;
+		$thread_message_id = isset( $thread_template->message->id )
+			? (int) $thread_template->message->id
+			: null;
+
 		return apply_filters( 'bp_get_the_thread_message_id', $thread_message_id );
 	}
 
+/**
+ * Output the CSS classes for messages within a single thread.
+ *
+ * @since BuddyPress (2.1.0)
+ */
+function bp_the_thread_message_css_class() {
+	echo bp_get_the_thread_message_css_class();
+}
+	/**
+	 * Generate the CSS classes for messages within a single thread.
+	 *
+	 * @since BuddyPress (2.1.0)
+	 *
+	 * @return string
+	 */
+	function bp_get_the_thread_message_css_class() {
+		global $thread_template;
+
+		$classes = array();
+
+		// Zebra-striping
+		$classes[] = bp_get_the_thread_message_alt_class();
+
+		// ID of the sender
+		$classes[] = 'sent-by-' . intval( $thread_template->message->sender_id );
+
+		// Whether the sender is the same as the logged-in user
+		if ( bp_loggedin_user_id() == $thread_template->message->sender_id ) {
+			$classes[] = 'sent-by-me';
+		}
+
+		$classes = apply_filters( 'bp_get_the_thread_message_css_class', $classes );
+
+		return implode( ' ', $classes );
+	}
+
+/**
+ * Output the CSS class used for message zebra striping.
+ */
 function bp_the_thread_message_alt_class() {
 	echo bp_get_the_thread_message_alt_class();
 }
+	/**
+	 * Get the CSS class used for message zebra striping.
+	 *
+	 * @return string
+	 */
 	function bp_get_the_thread_message_alt_class() {
 		global $thread_template;
 
@@ -988,68 +1616,173 @@ function bp_the_thread_message_alt_class() {
 		return apply_filters( 'bp_get_the_thread_message_alt_class', $class );
 	}
 
+/**
+ * Output the ID for message sender within a single thread
+ *
+ * @since BuddyPress (2.1.0)
+ */
+function bp_the_thread_message_sender_id() {
+	echo bp_get_the_thread_message_sender_id();
+}
+	/**
+	 * Return the ID for message sender within a single thread
+	 *
+	 * @since BuddyPress (2.1.0)
+	 *
+	 * @return string
+	 */
+	function bp_get_the_thread_message_sender_id() {
+		global $thread_template;
+
+		$user_id = ! empty( $thread_template->message->sender_id )
+			? $thread_template->message->sender_id
+			: 0;
+
+		return (int) apply_filters( 'bp_get_the_thread_message_css_class', (int) $user_id );
+	}
+
+/**
+ * Output the avatar for the current message sender.
+ *
+ * @param array $args See {@link bp_get_the_thread_message_sender_avatar_thumb()}
+ *        for a description.
+ */
 function bp_the_thread_message_sender_avatar( $args = '' ) {
 	echo bp_get_the_thread_message_sender_avatar_thumb( $args );
 }
+	/**
+	 * Get the avatar for the current message sender.
+	 *
+	 * @param array $args {
+	 *     Array of arguments. See {@link bp_core_fetch_avatar()} for more
+	 *     complete details. All arguments are optional.
+	 *     @type string $type Avatar type. Default: 'thumb'.
+	 *     @type int $width Avatar width. Default: default for your $type.
+	 *     @type int $height Avatar height. Default: default for your $type.
+	 * }
+	 * @return string <img> tag containing the avatar.
+	 */
 	function bp_get_the_thread_message_sender_avatar_thumb( $args = '' ) {
 		global $thread_template;
 
-		$defaults = array(
+		$r = bp_parse_args( $args, array(
 			'type'   => 'thumb',
 			'width'  => false,
 			'height' => false,
-		);
+		) );
 
-		$r = wp_parse_args( $args, $defaults );
-		extract( $r, EXTR_SKIP );
-
-		return apply_filters( 'bp_get_the_thread_message_sender_avatar_thumb', bp_core_fetch_avatar( array( 'item_id' => $thread_template->message->sender_id, 'type' => $type, 'width' => $width, 'height' => $height, 'alt' => bp_core_get_user_displayname( $thread_template->message->sender_id ) ) ) );
+		return apply_filters( 'bp_get_the_thread_message_sender_avatar_thumb', bp_core_fetch_avatar( array(
+			'item_id' => $thread_template->message->sender_id,
+			'type'    => $r['type'],
+			'width'   => $r['width'],
+			'height'  => $r['height'],
+			'alt'     => bp_core_get_user_displayname( $thread_template->message->sender_id )
+		) ) );
 	}
 
+/**
+ * Output a link to the sender of the current message.
+ */
 function bp_the_thread_message_sender_link() {
 	echo bp_get_the_thread_message_sender_link();
 }
+	/**
+	 * Get a link to the sender of the current message.
+	 *
+	 * @return string
+	 */
 	function bp_get_the_thread_message_sender_link() {
 		global $thread_template;
 
 		return apply_filters( 'bp_get_the_thread_message_sender_link', bp_core_get_userlink( $thread_template->message->sender_id, false, true ) );
 	}
 
+/**
+ * Output the display name of the sender of the current message.
+ */
 function bp_the_thread_message_sender_name() {
 	echo bp_get_the_thread_message_sender_name();
 }
+	/**
+	 * Get the display name of the sender of the current message.
+	 *
+	 * @return string
+	 */
 	function bp_get_the_thread_message_sender_name() {
 		global $thread_template;
 
 		$display_name = bp_core_get_user_displayname( $thread_template->message->sender_id );
 
-		if ( empty( $display_name ) )
+		if ( empty( $display_name ) ) {
 			$display_name = __( 'Deleted User', 'buddypress' );
+		}
 
 		return apply_filters( 'bp_get_the_thread_message_sender_name', $display_name );
 	}
 
+/**
+ * Output the URL for deleting the current thread.
+ */
 function bp_the_thread_delete_link() {
 	echo bp_get_the_thread_delete_link();
 }
+	/**
+	 * Get the URL for deleting the current thread.
+	 *
+	 * @return string URL
+	 */
 	function bp_get_the_thread_delete_link() {
-		global $bp;
-
-		return apply_filters( 'bp_get_message_thread_delete_link', wp_nonce_url( bp_loggedin_user_domain() . $bp->messages->slug . '/inbox/delete/' . bp_get_the_thread_id(), 'messages_delete_thread' ) );
+		return apply_filters( 'bp_get_message_thread_delete_link', wp_nonce_url( bp_loggedin_user_domain() . bp_get_messages_slug() . '/inbox/delete/' . bp_get_the_thread_id(), 'messages_delete_thread' ) );
 	}
 
+/**
+ * Output the 'Sent x hours ago' string for the current message.
+ */
 function bp_the_thread_message_time_since() {
 	echo bp_get_the_thread_message_time_since();
 }
+	/**
+	 * Generate the 'Sent x hours ago' string for the current message.
+	 *
+	 * @return string
+	 */
 	function bp_get_the_thread_message_time_since() {
+		return apply_filters( 'bp_get_the_thread_message_time_since', sprintf( __( 'Sent %s', 'buddypress' ), bp_core_time_since( bp_get_the_thread_message_date_sent() ) ) );
+	}
+
+/**
+ * Output the timestamp for the current message.
+ *
+ * @since BuddyPress (2.1.0)
+ */
+function bp_the_thread_message_date_sent() {
+	echo bp_get_the_thread_message_date_sent();
+}
+	/**
+	 * Generate the 'Sent x hours ago' string for the current message.
+	 *
+	 * @since BuddyPress (2.1.0)
+	 *
+	 * @uses strtotime() To convert the message string into a usable timestamp
+	 * @return int
+	 */
+	function bp_get_the_thread_message_date_sent() {
 		global $thread_template;
 
-		return apply_filters( 'bp_get_the_thread_message_time_since', sprintf( __( 'Sent %s', 'buddypress' ), bp_core_time_since( strtotime( $thread_template->message->date_sent ) ) ) );
+		return apply_filters( 'bp_get_the_thread_message_date_sent', strtotime( $thread_template->message->date_sent ) );
 	}
 
+/**
+ * Output the content of the current message in the loop.
+ */
 function bp_the_thread_message_content() {
 	echo bp_get_the_thread_message_content();
 }
+	/**
+	 * Get the content of the current message in the loop.
+	 *
+	 * @return string
+	 */
 	function bp_get_the_thread_message_content() {
 		global $thread_template;
 
@@ -1059,12 +1792,14 @@ function bp_the_thread_message_content() {
 /** Embeds *******************************************************************/
 
 /**
- * Enable oembed support for Messages.
+ * Enable oEmbed support for Messages.
  *
  * There's no caching as BP 1.5 does not have a Messages meta API.
  *
+ * @since BuddyPress (1.5.0)
+ *
  * @see BP_Embed
- * @since BuddyPress (1.5)
+ *
  * @todo Add Messages meta?
  */
 function bp_messages_embed() {
diff --git a/wp-content/plugins/buddypress/bp-messages/bp-messages-widgets.php b/wp-content/plugins/buddypress/bp-messages/bp-messages-widgets.php
index aa26a33e2..4893c5bcc 100644
--- a/wp-content/plugins/buddypress/bp-messages/bp-messages-widgets.php
+++ b/wp-content/plugins/buddypress/bp-messages/bp-messages-widgets.php
@@ -16,7 +16,7 @@ function bp_messages_register_widgets() {
 }
 add_action( 'bp_register_widgets', 'bp_messages_register_widgets' );
 
-/** Sitewide Notices widget *************************************************/
+/** Sitewide Notices widget ***************************************************/
 
 /**
  * A widget that displays sitewide notices.
diff --git a/wp-content/plugins/buddypress/bp-notifications/bp-notifications-actions.php b/wp-content/plugins/buddypress/bp-notifications/bp-notifications-actions.php
index 0bdaeb441..0ca3b8102 100644
--- a/wp-content/plugins/buddypress/bp-notifications/bp-notifications-actions.php
+++ b/wp-content/plugins/buddypress/bp-notifications/bp-notifications-actions.php
@@ -19,7 +19,7 @@ if ( !defined( 'ABSPATH' ) ) exit;
  *
  * @since BuddyPress (1.9.0)
  *
- * @return boolean
+ * @return bool
  */
 function bp_notifications_action_mark_read() {
 
@@ -55,7 +55,7 @@ add_action( 'bp_actions', 'bp_notifications_action_mark_read' );
  *
  * @since BuddyPress (1.9.0)
  *
- * @return boolean
+ * @return bool
  */
 function bp_notifications_action_mark_unread() {
 
@@ -91,7 +91,7 @@ add_action( 'bp_actions', 'bp_notifications_action_mark_unread' );
  *
  * @since BuddyPress (1.9.0)
  *
- * @return boolean
+ * @return bool
  */
 function bp_notifications_action_delete() {
 
diff --git a/wp-content/plugins/buddypress/bp-notifications/bp-notifications-classes.php b/wp-content/plugins/buddypress/bp-notifications/bp-notifications-classes.php
index 09fcf8852..95cd127cc 100644
--- a/wp-content/plugins/buddypress/bp-notifications/bp-notifications-classes.php
+++ b/wp-content/plugins/buddypress/bp-notifications/bp-notifications-classes.php
@@ -26,6 +26,8 @@ class BP_Notifications_Notification {
 	/**
 	 * The notification ID.
 	 *
+	 * @since BuddyPress (1.9.0)
+	 * @access public
 	 * @var int
 	 */
 	public $id;
@@ -33,6 +35,8 @@ class BP_Notifications_Notification {
 	/**
 	 * The ID of the item associated with the notification.
 	 *
+	 * @since BuddyPress (1.9.0)
+	 * @access public
 	 * @var int
 	 */
 	public $item_id;
@@ -40,6 +44,8 @@ class BP_Notifications_Notification {
 	/**
 	 * The ID of the secondary item associated with the notification.
 	 *
+	 * @since BuddyPress (1.9.0)
+	 * @access public
 	 * @var int
 	 */
 	public $secondary_item_id = null;
@@ -47,6 +53,8 @@ class BP_Notifications_Notification {
 	/**
 	 * The ID of the user the notification is associated with.
 	 *
+	 * @since BuddyPress (1.9.0)
+	 * @access public
 	 * @var int
 	 */
 	public $user_id;
@@ -54,6 +62,8 @@ class BP_Notifications_Notification {
 	/**
 	 * The name of the component that the notification is for.
 	 *
+	 * @since BuddyPress (1.9.0)
+	 * @access public
 	 * @var string
 	 */
 	public $component_name;
@@ -61,6 +71,8 @@ class BP_Notifications_Notification {
 	/**
 	 * The component action which the notification is related to.
 	 *
+	 * @since BuddyPress (1.9.0)
+	 * @access public
 	 * @var string
 	 */
 	public $component_action;
@@ -68,6 +80,8 @@ class BP_Notifications_Notification {
 	/**
 	 * The date the notification was created.
 	 *
+	 * @since BuddyPress (1.9.0)
+	 * @access public
 	 * @var string
 	 */
 	public $date_notified;
@@ -75,6 +89,8 @@ class BP_Notifications_Notification {
 	/**
 	 * Is the notification new, or has it already been read.
 	 *
+	 * @since BuddyPress (1.9.0)
+	 * @access public
 	 * @var bool
 	 */
 	public $is_new;
@@ -327,8 +343,8 @@ class BP_Notifications_Notification {
 
 		// search_terms
 		if ( ! empty( $args['search_terms'] ) ) {
-			$search_terms = like_escape( esc_sql( $args['search_terms'] ) );
-			$where_conditions['search_terms'] = "( component_name LIKE '%%$search_terms%%' OR component_action LIKE '%%$search_terms%%' )";
+			$search_terms_like = '%' . bp_esc_like( $args['search_terms'] ) . '%';
+			$where_conditions['search_terms'] = $wpdb->prepare( "( component_name LIKE %s OR component_action LIKE %s )", $search_terms_like, $search_terms_like );
 		}
 
 		// Custom WHERE
@@ -542,6 +558,8 @@ class BP_Notifications_Notification {
 	 *           notifications. 'both' returns all. Default: true.
 	 *     @type string $search_terms Term to match against component_name
 	 *           or component_action fields.
+	 *     @type string $order_by Database column to order notifications by.
+	 *     @type string $sort_order Either 'ASC' or 'DESC'.
 	 *     @type string $order_by Field to order results by.
 	 *     @type string $sort_order ASC or DESC.
 	 *     @type int $page Number of the current page of results. Default:
@@ -690,7 +708,7 @@ class BP_Notifications_Notification {
 		return self::_delete( $where['data'], $where['format'] );
 	}
 
-	/** Convenience methods ***************************************************/
+	/** Convenience methods ***********************************************/
 
 	/**
 	 * Delete a single notification by ID.
@@ -803,7 +821,7 @@ class BP_Notifications_Notification {
 		return array( 'notifications' => &$notifications, 'total' => $total_count );
 	}
 
-	/** Mark ******************************************************************/
+	/** Mark **************************************************************/
 
 	/**
 	 * Mark all user notifications as read.
diff --git a/wp-content/plugins/buddypress/bp-notifications/bp-notifications-functions.php b/wp-content/plugins/buddypress/bp-notifications/bp-notifications-functions.php
index d7c1f346e..f8bdc96b2 100644
--- a/wp-content/plugins/buddypress/bp-notifications/bp-notifications-functions.php
+++ b/wp-content/plugins/buddypress/bp-notifications/bp-notifications-functions.php
@@ -112,8 +112,8 @@ function bp_notifications_delete_notification( $id ) {
  *
  * @since BuddyPress (1.9.0)
  *
- * @param int $user_id ID of the user whose notifications are being deleted.
- * @param int $is_new 0 for read, 1 for unread
+ * @param int $id ID of the user whose notifications are being deleted.
+ * @param int $is_new 0 for read, 1 for unread.
  * @return bool True on success, false on failure.
  */
 function bp_notifications_mark_notification( $id, $is_new = false ) {
@@ -128,19 +128,19 @@ function bp_notifications_mark_notification( $id, $is_new = false ) {
 }
 
 /**
- * Get notifications for a specific user.
+ * Get all notifications for a user and cache them.
  *
- * @since BuddyPress (1.9.0)
+ * @since BuddyPress (2.1.0)
  *
- * @param int $user_id ID of the user whose notification are being fetched.
- * @param string $format Format of the returned values. 'string' returns HTML,
- *        while 'object' returns a structured object for parsing.
- * @return mixed Object or array on success, false on failure.
+ * @param int $user_id ID of the user whose notifications are being fetched.
+ * @return array
  */
-function bp_notifications_get_notifications_for_user( $user_id, $format = 'string' ) {
+function bp_notifications_get_all_notifications_for_user( $user_id = 0 ) {
 
-	// Setup local variables
-	$bp = buddypress();
+	// Default to displayed user if no ID is passed
+	if ( empty( $user_id ) ) {
+		$user_id = ( bp_displayed_user_id() ) ? bp_displayed_user_id() : bp_loggedin_user_id();
+	}
 
 	// Get notifications out of the cache, or query if necessary
 	$notifications = wp_cache_get( 'all_for_user_' . $user_id, 'bp_notifications' );
@@ -151,6 +151,27 @@ function bp_notifications_get_notifications_for_user( $user_id, $format = 'strin
 		wp_cache_set( 'all_for_user_' . $user_id, $notifications, 'bp_notifications' );
 	}
 
+	// Filter and return
+	return apply_filters( 'bp_notifications_get_all_notifications_for_user', $notifications, $user_id );
+}
+
+/**
+ * Get notifications for a specific user.
+ *
+ * @since BuddyPress (1.9.0)
+ *
+ * @param int $user_id ID of the user whose notifications are being fetched.
+ * @param string $format Format of the returned values. 'string' returns HTML,
+ *        while 'object' returns a structured object for parsing.
+ * @return mixed Object or array on success, false on failure.
+ */
+function bp_notifications_get_notifications_for_user( $user_id, $format = 'string' ) {
+
+	// Setup local variables
+	$bp = buddypress();
+
+	// Get notifications (out of the cache, or query if necessary)
+	$notifications         = bp_notifications_get_all_notifications_for_user( $user_id );
 	$grouped_notifications = array(); // Notification groups
 	$renderable            = array(); // Renderable notifications
 
@@ -201,7 +222,7 @@ function bp_notifications_get_notifications_for_user( $user_id, $format = 'strin
 					);
 
 					// Create the object to be returned
-					$notification_object = new stdClass;
+					$notification_object = $component_action_items[0];
 
 					// Minimal backpat with non-compatible notification
 					// callback functions
@@ -213,8 +234,7 @@ function bp_notifications_get_notifications_for_user( $user_id, $format = 'strin
 						$notification_object->href    = $content['link'];
 					}
 
-					$notification_object->id = $component_action_items[0]->id;
-					$renderable[]            = $notification_object;
+					$renderable[] = $notification_object;
 
 				// Return an array of content strings
 				} else {
@@ -245,7 +265,7 @@ function bp_notifications_get_notifications_for_user( $user_id, $format = 'strin
 					$content = apply_filters_ref_array( 'bp_notifications_get_notifications_for_user', $ref_array );
 
 					// Create the object to be returned
-					$notification_object = new stdClass;
+					$notification_object = $component_action_items[0];
 
 					// Minimal backpat with non-compatible notification
 					// callback functions
@@ -257,8 +277,7 @@ function bp_notifications_get_notifications_for_user( $user_id, $format = 'strin
 						$notification_object->href    = $content['link'];
 					}
 
-					$notification_object->id = $component_action_items[0]->id;
-					$renderable[]            = $notification_object;
+					$renderable[] = $notification_object;
 
 				// Return an array of content strings
 				} else {
@@ -332,7 +351,7 @@ function bp_notifications_delete_notifications_by_item_id( $user_id, $item_id, $
  *
  * @since BuddyPress (1.9.0)
  *
- * @param int $user_id ID of the user whose notifications are being deleted.
+ * @param int $item_id ID of the user whose notifications are being deleted.
  * @param string $component_name Name of the associated component.
  * @param string $component_action Optional. Name of the associated action.
  * @param int $secondary_item_id Optional. ID of the secondary associated item.
@@ -384,7 +403,7 @@ function bp_notifications_delete_notifications_from_user( $user_id, $component_n
  * @param int $user_id ID of the user whose notifications are being deleted.
  * @param string $component_name Name of the associated component.
  * @param string $component_action Name of the associated action.
- * @param int $is_new 0 for read, 1 for unread
+ * @param int $is_new 0 for read, 1 for unread.
  * @return bool True on success, false on failure.
  */
 function bp_notifications_mark_notifications_by_type( $user_id, $component_name, $component_action, $is_new = false ) {
@@ -413,7 +432,7 @@ function bp_notifications_mark_notifications_by_type( $user_id, $component_name,
  * @param string $component_name Name of the associated component.
  * @param string $component_action Name of the associated action.
  * @param int $secondary_item_id ID of the secondary associated item.
- * @param int $is_new 0 for read, 1 for unread
+ * @param int $is_new 0 for read, 1 for unread.
  * @return bool True on success, false on failure.
  */
 function bp_notifications_mark_notifications_by_item_id( $user_id, $item_id, $component_name, $component_action, $secondary_item_id = false, $is_new = false ) {
@@ -443,7 +462,7 @@ function bp_notifications_mark_notifications_by_item_id( $user_id, $item_id, $co
  * @param string $component_name Name of the associated component.
  * @param string $component_action Optional. Name of the associated action.
  * @param int $secondary_item_id Optional. ID of the secondary associated item.
- * @param int $is_new 0 for read, 1 for unread
+ * @param int $is_new 0 for read, 1 for unread.
  * @return bool True on success, false on failure.
  */
 function bp_notifications_mark_all_notifications_by_type( $item_id, $component_name, $component_action = false, $secondary_item_id = false, $is_new = false ) {
@@ -475,7 +494,7 @@ function bp_notifications_mark_all_notifications_by_type( $item_id, $component_n
  * @param int $is_new 0 for read, 1 for unread
  * @param string $component_name Name of the associated component.
  * @param string $component_action Name of the associated action.
- * @param int $is_new 0 for read, 1 for unread
+ * @param int $is_new 0 for read, 1 for unread.
  * @return bool True on success, false on failure.
  */
 function bp_notifications_mark_notifications_from_user( $user_id, $component_name, $component_action, $is_new = false ) {
@@ -518,24 +537,10 @@ function bp_notifications_check_notification_access( $user_id, $notification_id
  * @return int Unread notification count.
  */
 function bp_notifications_get_unread_notification_count( $user_id = 0 ) {
+	$notifications = bp_notifications_get_all_notifications_for_user( $user_id );
+	$count         = ! empty( $notifications ) ? count( $notifications ) : 0;
 
-	// Default to displayed user if no ID is passed
-	if ( empty( $user_id ) ) {
-		$user_id = ( bp_displayed_user_id() ) ? bp_displayed_user_id() : bp_loggedin_user_id();
-	}
-
-	// Get the notifications, and count them
-	$notifications = wp_cache_get( 'all_for_user_' . $user_id, 'bp_notifications' );
-	if ( false === $notifications ) {
-		$notifications = BP_Notifications_Notification::get( array(
-			'user_id' => $user_id,
-		) );
-		wp_cache_set( 'all_for_user_' . $user_id, $notifications, 'bp_notifications' );
-	}
-
-	$count = ! empty( $notifications ) ? count( $notifications ) : 0;
-
-	return apply_filters( 'bp_notifications_get_total_notification_count', $count );
+	return apply_filters( 'bp_notifications_get_total_notification_count', (int) $count );
 }
 
 /**
@@ -545,6 +550,8 @@ function bp_notifications_get_unread_notification_count( $user_id = 0 ) {
  * @since BuddyPress (1.9.1)
  *
  * @see http://buddypress.trac.wordpress.org/ticket/5300
+ *
+ * @return array
  */
 function bp_notifications_get_registered_components() {
 
diff --git a/wp-content/plugins/buddypress/bp-notifications/bp-notifications-loader.php b/wp-content/plugins/buddypress/bp-notifications/bp-notifications-loader.php
index ab440697e..c801220d5 100644
--- a/wp-content/plugins/buddypress/bp-notifications/bp-notifications-loader.php
+++ b/wp-content/plugins/buddypress/bp-notifications/bp-notifications-loader.php
@@ -23,7 +23,7 @@ class BP_Notifications_Component extends BP_Component {
 	public function __construct() {
 		parent::start(
 			'notifications',
-			__( 'Notifications', 'buddypress' ),
+			_x( 'Notifications', 'Page <title>', 'buddypress' ),
 			buddypress()->plugin_dir,
 			array(
 				'adminbar_myaccount_order' => 30
@@ -46,7 +46,6 @@ class BP_Notifications_Component extends BP_Component {
 			'classes',
 			'screens',
 			'adminbar',
-			'buddybar',
 			'template',
 			'functions',
 			'cache',
@@ -56,10 +55,7 @@ class BP_Notifications_Component extends BP_Component {
 	}
 
 	/**
-	 * Setup globals
-	 *
-	 * The BP_FRIENDS_SLUG constant is deprecated, and only used here for
-	 * backwards compatibility.
+	 * Set up component global data.
 	 *
 	 * @since BuddyPress (1.9.0)
 	 *
@@ -108,9 +104,9 @@ class BP_Notifications_Component extends BP_Component {
 		if ( bp_is_user() && bp_user_has_access() ) {
 			$count    = bp_notifications_get_unread_notification_count( bp_displayed_user_id() );
 			$class    = ( 0 === $count ) ? 'no-count' : 'count';
-			$nav_name = sprintf( __( 'Notifications <span class="%s">%s</span>', 'buddypress' ), esc_attr( $class ), number_format_i18n( $count ) );
+			$nav_name = sprintf( _x( 'Notifications <span class="%s">%s</span>', 'Profile screen nav', 'buddypress' ), esc_attr( $class ), number_format_i18n( $count ) );
 		} else {
-			$nav_name = __( 'Notifications', 'buddypress' );
+			$nav_name = _x( 'Notifications', 'Profile screen nav', 'buddypress' );
 		}
 
 		// Add 'Notifications' to the main navigation
@@ -137,7 +133,7 @@ class BP_Notifications_Component extends BP_Component {
 
 		// Add the subnav items to the notifications nav item
 		$sub_nav[] = array(
-			'name'            => __( 'Unread', 'buddypress' ),
+			'name'            => _x( 'Unread', 'Notification screen nav', 'buddypress' ),
 			'slug'            => 'unread',
 			'parent_url'      => $notifications_link,
 			'parent_slug'     => bp_get_notifications_slug(),
@@ -148,7 +144,7 @@ class BP_Notifications_Component extends BP_Component {
 		);
 
 		$sub_nav[] = array(
-			'name'            => __( 'Read',   'buddypress' ),
+			'name'            => _x( 'Read', 'Notification screen nav', 'buddypress' ),
 			'slug'            => 'read',
 			'parent_url'      => $notifications_link,
 			'parent_slug'     => bp_get_notifications_slug(),
@@ -182,11 +178,11 @@ class BP_Notifications_Component extends BP_Component {
 			// Pending notification requests
 			$count = bp_notifications_get_unread_notification_count( bp_loggedin_user_id() );
 			if ( ! empty( $count ) ) {
-				$title  = sprintf( __( 'Notifications <span class="count">%s</span>', 'buddypress' ), number_format_i18n( $count ) );
-				$unread = sprintf( __( 'Unread <span class="count">%s</span>',        'buddypress' ), number_format_i18n( $count ) );
+				$title  = sprintf( _x( 'Notifications <span class="count">%s</span>', 'My Account Notification pending', 'buddypress' ), number_format_i18n( $count ) );
+				$unread = sprintf( _x( 'Unread <span class="count">%s</span>', 'My Account Notification pending', 'buddypress' ), number_format_i18n( $count ) );
 			} else {
-				$title  = __( 'Notifications', 'buddypress' );
-				$unread = __( 'Unread',        'buddypress' );
+				$title  = _x( 'Notifications', 'My Account Notification', 'buddypress' );
+				$unread = _x( 'Unread', 'My Account Notification sub nav', 'buddypress' );
 			}
 
 			// Add the "My Account" sub menus
diff --git a/wp-content/plugins/buddypress/bp-notifications/bp-notifications-template.php b/wp-content/plugins/buddypress/bp-notifications/bp-notifications-template.php
index 47bcdcac8..52f138ed7 100644
--- a/wp-content/plugins/buddypress/bp-notifications/bp-notifications-template.php
+++ b/wp-content/plugins/buddypress/bp-notifications/bp-notifications-template.php
@@ -42,7 +42,7 @@ function bp_notifications_permalink() {
 	 *
 	 * @since BuddyPress (1.9.0)
 	 *
-	 * @return string Notifications permalink
+	 * @return string Notifications permalink.
 	 */
 	function bp_get_notifications_permalink() {
 		$retval = trailingslashit( bp_loggedin_user_domain() . bp_get_notifications_slug() );
@@ -62,7 +62,7 @@ function bp_notifications_unread_permalink() {
 	 *
 	 * @since BuddyPress (1.9.0)
 	 *
-	 * @return string Unread notifications permalink
+	 * @return string Unread notifications permalink.
 	 */
 	function bp_get_notifications_unread_permalink() {
 		$retval = trailingslashit( bp_loggedin_user_domain() . bp_get_notifications_slug() . '/unread' );
@@ -82,7 +82,7 @@ function bp_notifications_read_permalink() {
 	 *
 	 * @since BuddyPress (1.9.0)
 	 *
-	 * @return string Read notifications permalink
+	 * @return string Read notifications permalink.
 	 */
 	function bp_get_notifications_read_permalink() {
 		$retval = trailingslashit( bp_loggedin_user_domain() . bp_get_notifications_slug() . '/read' );
@@ -220,98 +220,80 @@ class BP_Notifications_Template {
 	/**
 	 * Constructor method.
 	 *
+	 * @see bp_has_notifications() For information on the array format.
+	 *
 	 * @since BuddyPress (1.9.0)
 	 *
 	 * @param array $args {
-	 *     @type int $user_id ID of the user to whom the displayed
-	 *           notifications belong.
-	 *     @type bool $is_new Whether to limit the query to unread
-	 *           notifications. Default: true.
-	 *     @type int $page Number of the page of results to return.
-	 *           Will be overridden by URL parameter. Default: 1.
-	 *     @type int $per_page Number of results to return per page.
-	 *           Will be overridden by URL parameter. Default: 25.
-	 *     @type int $max Optional. Max results to display.
-	 *     @type string $search_terms Optional. Term to match against
-	 *           component_name and component_action.
-	 *     @type string $page_arg URL argument to use for pagination.
-	 *           Default: 'npage'.
+	 *     An array of arguments. See {@link bp_has_notifications()}
+	 *     for more details.
 	 * }
 	 */
 	public function __construct( $args = array() ) {
 
 		// Parse arguments
 		$r = wp_parse_args( $args, array(
-			'user_id'      => 0,
-			'is_new'       => true,
-			'page'         => 1,
-			'per_page'     => 25,
-			'order_by'     => 'date_notified',
-			'sort_order'   => 'DESC',
-			'max'          => null,
-			'search_terms' => '',
-			'page_arg'     => 'npage',
+			'id'                => false,
+			'user_id'           => 0,
+			'secondary_item_id' => false,
+			'component_name'    => bp_notifications_get_registered_components(),
+			'component_action'  => false,
+			'is_new'            => true,
+			'search_terms'      => '',
+			'order_by'          => 'date_notified',
+			'sort_order'        => 'DESC',
+			'page'              => 1,
+			'per_page'          => 25,
+			'max'               => null,
+			'page_arg'          => 'npage',
 		) );
 
 		// Overrides
 
 		// Set which pagination page
 		if ( isset( $_GET[ $r['page_arg'] ] ) ) {
-			$pag_page = intval( $_GET[ $r['page_arg'] ] );
-		} else {
-			$pag_page = $r['page'];
+			$r['page'] = intval( $_GET[ $r['page_arg'] ] );
 		}
 
 		// Set the number to show per page
 		if ( isset( $_GET['num'] ) ) {
-			$pag_num = intval( $_GET['num'] );
+			$r['per_page'] = intval( $_GET['num'] );
 		} else {
-			$pag_num = intval( $r['per_page'] );
+			$r['per_page'] = intval( $r['per_page'] );
 		}
 
 		// Sort order direction
 		$orders = array( 'ASC', 'DESC' );
 		if ( ! empty( $_GET['sort_order'] ) && in_array( $_GET['sort_order'], $orders ) ) {
-			$sort_order = $_GET['sort_order'];
+			$r['sort_order'] = $_GET['sort_order'];
 		} else {
-			$sort_order = in_array( $r['sort_order'], $orders ) ? $r['sort_order'] : 'DESC';
+			$r['sort_order'] = in_array( $r['sort_order'], $orders ) ? $r['sort_order'] : 'DESC';
 		}
 
 		// Setup variables
-		$this->pag_page     = $pag_page;
-		$this->pag_num      = $pag_num;
+		$this->pag_page     = $r['page'];
+		$this->pag_num      = $r['per_page'];
 		$this->user_id      = $r['user_id'];
 		$this->is_new       = $r['is_new'];
 		$this->search_terms = $r['search_terms'];
 		$this->page_arg     = $r['page_arg'];
 		$this->order_by     = $r['order_by'];
-		$this->sort_order   = $sort_order;
-
-		// Get the notifications
-		$notifications      = BP_Notifications_Notification::get_current_notifications_for_user( array(
-			'user_id'      => $this->user_id,
-			'is_new'       => $this->is_new,
-			'page'         => $this->pag_page,
-			'per_page'     => $this->pag_num,
-			'search_terms' => $this->search_terms,
-			'order_by'     => $this->order_by,
-			'sort_order'   => $this->sort_order,
-		) );
+		$this->sort_order   = $r['sort_order'];
 
 		// Setup the notifications to loop through
-		$this->notifications            = $notifications['notifications'];
-		$this->total_notification_count = $notifications['total'];
+		$this->notifications            = BP_Notifications_Notification::get( $r );
+		$this->total_notification_count = BP_Notifications_Notification::get_total_count( $r );
 
 		if ( empty( $this->notifications ) ) {
 			$this->notification_count       = 0;
 			$this->total_notification_count = 0;
 
 		} else {
-			if ( ! empty( $max ) ) {
-				if ( $max >= count( $this->notifications ) ) {
+			if ( ! empty( $r['max'] ) ) {
+				if ( $r['max'] >= count( $this->notifications ) ) {
 					$this->notification_count = count( $this->notifications );
 				} else {
-					$this->notification_count = (int) $max;
+					$this->notification_count = (int) $r['max'];
 				}
 			} else {
 				$this->notification_count = count( $this->notifications );
@@ -447,16 +429,11 @@ class BP_Notifications_Template {
  * @param array $args {
  *     Arguments for limiting the contents of the notifications loop. Can be
  *     passed as an associative array, or as a URL query string.
- *     @type int $user_id ID of the user to whom notifications belong. Default:
- *           ID of the logged-in user.
- *     @type bool $is_new Whether to limit query to unread notifications.
- *           Default: when viewing the 'unread' tab, defaults to true; when
- *           viewing the 'read' tab, defaults to false.
- *     @type int $page The page of notifications being fetched. Default: 1.
- *     @type int $per_page Number of items to display on a page. Default: 25.
+ *
+ *     See {@link BP_Notifications_Notification::get()} for detailed
+ *     information on the arguments.  In addition, also supports:
+ *
  *     @type int $max Optional. Max items to display. Default: false.
- *     @type string $search_terms Optional. Term to match against
- *           component_name and component_action.
  *     @type string $page_arg URL argument to use for pagination.
  *           Default: 'npage'.
  * }
@@ -468,6 +445,10 @@ function bp_has_notifications( $args = '' ) {
 		$is_new = 1;
 	} elseif ( bp_is_current_action( 'read' ) ) {
 		$is_new = 0;
+
+	// not on a notifications page? default to fetch new notifications
+	} else {
+		$is_new = 1;
 	}
 
 	// Get the user ID
@@ -479,13 +460,22 @@ function bp_has_notifications( $args = '' ) {
 
 	// Parse the args
 	$r = bp_parse_args( $args, array(
-		'user_id'      => $user_id,
-		'is_new'       => $is_new,
-		'page'         => 1,
-		'per_page'     => 25,
-		'max'          => false,
-		'search_terms' => isset( $_REQUEST['s'] ) ? stripslashes( $_REQUEST['s'] ) : '',
-		'page_arg'     => 'npage',
+		'id'                => false,
+		'user_id'           => $user_id,
+		'secondary_item_id' => false,
+		'component_name'    => bp_notifications_get_registered_components(),
+		'component_action'  => false,
+		'is_new'            => $is_new,
+		'search_terms'      => isset( $_REQUEST['s'] ) ? stripslashes( $_REQUEST['s'] ) : '',
+		'order_by'          => 'date_notified',
+		'sort_order'        => 'DESC',
+		'page'              => 1,
+		'per_page'          => 25,
+
+		// these are additional arguments that are not available in
+		// BP_Notifications_Notification::get()
+		'max'               => false,
+		'page_arg'          => 'npage',
 	), 'has_notifications' );
 
 	// Get the notifications
@@ -724,19 +714,54 @@ function bp_the_notification_mark_read_link() {
 	 */
 	function bp_get_the_notification_mark_read_link() {
 
-		// Get the URL with nonce, action, and id
-		$url = wp_nonce_url( add_query_arg( array( 'action' => 'read', 'notification_id' => bp_get_the_notification_id() ), bp_get_notifications_unread_permalink() ), 'bp_notification_mark_read_' . bp_get_the_notification_id() );
-
 		// Start the output buffer
 		ob_start(); ?>
 
-		<a href="<?php echo esc_url( $url ); ?>" class="mark-read primary"><?php _e( 'Read', 'buddypress' ); ?></a>
+		<a href="<?php bp_the_notification_mark_read_url(); ?>" class="mark-read primary"><?php _e( 'Read', 'buddypress' ); ?></a>
 
 		<?php $retval = ob_get_clean();
 
 		return apply_filters( 'bp_get_the_notification_mark_read_link', $retval );
 	}
 
+/**
+ * Output the URL used for marking a single notification as read
+ *
+ * Since this function directly outputs a URL, it is escaped.
+ *
+ * @since BuddyPress (2.1.0)
+ *
+ * @uses bp_get_the_notification_mark_read_url()
+ */
+function bp_the_notification_mark_read_url() {
+	echo esc_url( bp_get_the_notification_mark_read_url() );
+}
+	/**
+	 * Return the URL used for marking a single notification as read
+ 	 *
+	 * @since BuddyPress (2.1.0)
+	 */
+	function bp_get_the_notification_mark_read_url() {
+
+		// Get the notification ID
+		$id   = bp_get_the_notification_id();
+
+		// Get the args to add to the URL
+		$args = array(
+			'action'          => 'read',
+			'notification_id' => $id
+		);
+
+		// Add the args to the URL
+		$url = add_query_arg( $args, bp_get_notifications_unread_permalink() );
+
+		// Add the nonce
+		$url = wp_nonce_url( $url, 'bp_notification_mark_read_' . $id );
+
+		// Filter and return
+		return apply_filters( 'bp_get_the_notification_mark_read_url', $url );
+	}
+
 /**
  * Output the mark read link for the current notification.
  *
@@ -754,19 +779,54 @@ function bp_the_notification_mark_unread_link() {
 	 */
 	function bp_get_the_notification_mark_unread_link() {
 
-		// Get the URL with nonce, action, and id
-		$url = wp_nonce_url( add_query_arg( array( 'action' => 'unread', 'notification_id' => bp_get_the_notification_id() ), bp_get_notifications_read_permalink() ), 'bp_notification_mark_unread_' . bp_get_the_notification_id() );
-
 		// Start the output buffer
 		ob_start(); ?>
 
-		<a href="<?php echo esc_url( $url ); ?>" class="mark-unread primary"><?php _e( 'Unread', 'buddypress' ); ?></a>
+		<a href="<?php bp_the_notification_mark_unread_url(); ?>" class="mark-unread primary"><?php _ex( 'Unread',  'Notification screen action', 'buddypress' ); ?></a>
 
 		<?php $retval = ob_get_clean();
 
 		return apply_filters( 'bp_get_the_notification_mark_unread_link', $retval );
 	}
 
+/**
+ * Output the URL used for marking a single notification as unread
+ *
+ * Since this function directly outputs a URL, it is escaped.
+ *
+ * @since BuddyPress (2.1.0)
+ *
+ * @uses bp_get_the_notification_mark_unread_url()
+ */
+function bp_the_notification_mark_unread_url() {
+	echo esc_url( bp_get_the_notification_mark_unread_url() );
+}
+	/**
+	 * Return the URL used for marking a single notification as unread
+ 	 *
+	 * @since BuddyPress (2.1.0)
+	 */
+	function bp_get_the_notification_mark_unread_url() {
+
+		// Get the notification ID
+		$id   = bp_get_the_notification_id();
+
+		// Get the args to add to the URL
+		$args = array(
+			'action'          => 'unread',
+			'notification_id' => $id
+		);
+
+		// Add the args to the URL
+		$url = add_query_arg( $args, bp_get_notifications_read_permalink() );
+
+		// Add the nonce
+		$url = wp_nonce_url( $url, 'bp_notification_mark_unread_' . $id );
+
+		// Filter and return
+		return apply_filters( 'bp_get_the_notification_mark_unread_url', $url );
+	}
+
 /**
  * Output the mark link for the current notification.
  *
@@ -810,6 +870,38 @@ function bp_the_notification_delete_link() {
 	 */
 	function bp_get_the_notification_delete_link() {
 
+		// Start the output buffer
+		ob_start(); ?>
+
+		<a href="<?php bp_the_notification_delete_url(); ?>" class="delete secondary confirm"><?php _e( 'Delete', 'buddypress' ); ?></a>
+
+		<?php $retval = ob_get_clean();
+
+		return apply_filters( 'bp_get_the_notification_delete_link', $retval );
+	}
+
+/**
+ * Output the URL used for deleting a single notification
+ *
+ * Since this function directly outputs a URL, it is escaped.
+ *
+ * @since BuddyPress (2.1.0)
+ *
+ * @uses esc_url()
+ * @uses bp_get_the_notification_delete_url()
+ */
+function bp_the_notification_delete_url() {
+	echo esc_url( bp_get_the_notification_delete_url() );
+}
+	/**
+	 * Return the URL used for deleting a single notification
+	 *
+	 * @since BuddyPress (2.1.0)
+	 *
+	 * @return string
+	 */
+	function bp_get_the_notification_delete_url() {
+
 		// URL to add nonce to
 		if ( bp_is_current_action( 'unread' ) ) {
 			$link = bp_get_notifications_unread_permalink();
@@ -817,17 +909,23 @@ function bp_the_notification_delete_link() {
 			$link = bp_get_notifications_read_permalink();
 		}
 
-		// Get the URL with nonce, action, and id
-		$url = wp_nonce_url( add_query_arg( array( 'action' => 'delete', 'notification_id' => bp_get_the_notification_id() ), $link ), 'bp_notification_delete_' . bp_get_the_notification_id() );
+		// Get the ID
+		$id = bp_get_the_notification_id();
 
-		// Start the output buffer
-		ob_start(); ?>
+		// Get the args to add to the URL
+		$args = array(
+			'action'          => 'delete',
+			'notification_id' => $id
+		);
 
-		<a href="<?php echo esc_url( $url ); ?>" class="delete secondary confirm"><?php _e( 'Delete', 'buddypress' ); ?></a>
+		// Add the args
+		$url = add_query_arg( $args, $link );
 
-		<?php $retval = ob_get_clean();
+		// Add the nonce
+		$url = wp_nonce_url( $url, 'bp_notification_delete_' . $id );
 
-		return apply_filters( 'bp_get_the_notification_delete_link', $retval );
+		// Filter and return
+		return apply_filters( 'bp_get_the_notification_delete_url', $url );
 	}
 
 /**
@@ -844,10 +942,10 @@ function bp_the_notification_action_links( $args = '' ) {
 	 * @since BuddyPress (1.9.0)
 	 *
 	 * @param array $args {
-	 *     @type string $before HTML before the links
-	 *     @type string $after HTML after the links
-	 *     @type string $sep HTML between the links
-	 *     @type array $links Array of links to implode by 'sep'
+	 *     @type string $before HTML before the links.
+	 *     @type string $after HTML after the links.
+	 *     @type string $sep HTML between the links.
+	 *     @type array $links Array of links to implode by 'sep'.
 	 * }
 	 *
 	 * @return string HTML links for actions to take on single notifications.
@@ -892,7 +990,7 @@ function bp_notifications_pagination_count() {
 		$from_num   = bp_core_number_format( $start_num );
 		$to_num     = bp_core_number_format( ( $start_num + ( $query_loop->pag_num - 1 ) > $query_loop->total_notification_count ) ? $query_loop->total_notification_count : $start_num + ( $query_loop->pag_num - 1 ) );
 		$total      = bp_core_number_format( $query_loop->total_notification_count );
-		$pag        = sprintf( _n( 'Viewing %1$s to %2$s (of %3$s notification)', 'Viewing %1$s to %2$s (of %3$s notifications)', $total, 'buddypress' ), $from_num, $to_num, $total );
+		$pag        = sprintf( _n( 'Viewing 1 notification', 'Viewing %1$s - %2$s of %3$s notifications', $total, 'buddypress' ), $from_num, $to_num, $total );
 
 		return apply_filters( 'bp_notifications_pagination_count', $pag );
 	}
diff --git a/wp-content/plugins/buddypress/bp-settings/bp-settings-actions.php b/wp-content/plugins/buddypress/bp-settings/bp-settings-actions.php
index db290e2c5..a579b0ec9 100644
--- a/wp-content/plugins/buddypress/bp-settings/bp-settings-actions.php
+++ b/wp-content/plugins/buddypress/bp-settings/bp-settings-actions.php
@@ -65,11 +65,13 @@ function bp_settings_action_general() {
 
 		if ( !empty( $_POST['email'] ) ) {
 
-			// What is missing from the profile page vs signup - lets double check the goodies
-			$user_email = sanitize_email( esc_html( trim( $_POST['email'] ) ) );
+			// What is missing from the profile page vs signup -
+			// let's double check the goodies
+			$user_email     = sanitize_email( esc_html( trim( $_POST['email'] ) ) );
+			$old_user_email = $bp->displayed_user->userdata->user_email;
 
 			// User is changing email address
-			if ( $bp->displayed_user->userdata->user_email != $user_email ) {
+			if ( $old_user_email != $user_email ) {
 
 				// Run some tests on the email address
 				$email_checks = bp_core_validate_email_address( $user_email );
@@ -88,9 +90,59 @@ function bp_settings_action_general() {
 					}
 				}
 
-				// Yay we made it!
+				// Store a hash to enable email validation
 				if ( false === $email_error ) {
-					$update_user->user_email = $user_email;
+					$hash = wp_hash( $_POST['email'] );
+
+					$pending_email = array(
+						'hash'     => $hash,
+						'newemail' => $user_email,
+					);
+
+					bp_update_user_meta( bp_displayed_user_id(), 'pending_email_change', $pending_email );
+
+					$email_text = sprintf(
+						__( 'Dear %1$s,
+
+You recently changed the email address associated with your account on %2$s.
+If this is correct, please click on the following link to complete the change:
+%3$s
+
+You can safely ignore and delete this email if you do not want to take this action or if you have received this email in error.
+
+This email has been sent to %4$s.
+
+Regards,
+%5$s
+%6$s', 'buddypress' ),
+						bp_core_get_user_displayname( bp_displayed_user_id() ),
+						bp_get_site_name(),
+						esc_url( bp_displayed_user_domain() . bp_get_settings_slug() . '/?verify_email_change=' . $hash ),
+						$user_email,
+						bp_get_site_name(),
+						bp_get_root_domain()
+					);
+
+					/**
+					 * Filter the email text sent when a user changes emails.
+					 *
+					 * @since BuddyPress (2.1.0)
+					 *
+					 * @param string $email_text Text of the email.
+					 * @param string $new_user_email New user email that
+					 *        the current user has changed to.
+					 * @param string $old_user_email Existing email addres
+					 *        for the current user.
+					 * @param object $update_user Userdata for the current user.
+					 */
+					$content = apply_filters( 'bp_new_user_email_content', $email_text, $user_email, $old_user_email, $update_user );
+
+					// Send the verification email
+					wp_mail( $user_email, sprintf( __( '[%s] Verify your new email address', 'buddypress' ), wp_specialchars_decode( bp_get_site_name() ) ), $content );
+
+					// We mark that the change has taken place so as to ensure a
+					// success message, even though verification is still required
+					$_POST['email'] = $current_user->user_email;
 					$email_changed = true;
 				}
 
@@ -355,3 +407,61 @@ function bp_settings_action_delete_account() {
 	}
 }
 add_action( 'bp_actions', 'bp_settings_action_delete_account' );
+
+/**
+ * Process email change verification or cancel requests.
+ *
+ * @since BuddyPress (2.1.0)
+ */
+function bp_settings_verify_email_change(){
+	if ( ! bp_is_settings_component() ) {
+		return;
+	}
+
+	if ( ! bp_is_my_profile() ) {
+		return;
+	}
+
+	$redirect_to = trailingslashit( bp_displayed_user_domain() . bp_get_settings_slug() );
+
+	// Email change is being verified
+	if ( isset( $_GET['verify_email_change'] ) ) {
+		$pending_email = bp_get_user_meta( bp_displayed_user_id(), 'pending_email_change', true );
+
+		// Bail if the hash provided doesn't match the one saved in the database
+		if ( urldecode( $_GET['verify_email_change'] ) !== $pending_email['hash'] ) {
+			return;
+		}
+
+		$email_changed = wp_update_user( array(
+			'ID'         => bp_displayed_user_id(),
+			'user_email' => trim( $pending_email['newemail'] ),
+		) );
+
+		if ( $email_changed ) {
+			// Delete object cache for displayed user
+			wp_cache_delete( 'bp_core_userdata_' . bp_displayed_user_id(), 'bp' );
+
+			// Delete the pending email change key
+			bp_delete_user_meta( bp_displayed_user_id(), 'pending_email_change' );
+
+			// Post a success message and redirect
+			bp_core_add_message( __( 'You have successfully verified your new email address.', 'buddypress' ) );
+		} else {
+			// Unknown error
+			bp_core_add_message( __( 'There was a problem verifying your new email address. Please try again.', 'buddypress' ), 'error' );
+		}
+
+		bp_core_redirect( $redirect_to );
+		die();
+
+	// Email change is being dismissed
+	} elseif ( ! empty( $_GET['dismiss_email_change'] ) ) {
+	        bp_delete_user_meta( bp_displayed_user_id(), 'pending_email_change' );
+		bp_core_add_message( __( 'You have successfully dismissed your pending email change.', 'buddypress' ) );
+
+		bp_core_redirect( $redirect_to );
+		die();
+	}
+}
+add_action( 'bp_actions', 'bp_settings_verify_email_change' );
diff --git a/wp-content/plugins/buddypress/bp-settings/bp-settings-loader.php b/wp-content/plugins/buddypress/bp-settings/bp-settings-loader.php
index 8d97f5af7..ce07fbee8 100644
--- a/wp-content/plugins/buddypress/bp-settings/bp-settings-loader.php
+++ b/wp-content/plugins/buddypress/bp-settings/bp-settings-loader.php
@@ -64,7 +64,7 @@ class BP_Settings_Component extends BP_Component {
 	}
 
 	/**
-	 * Setup BuddyBar navigation
+	 * Set up navigation.
 	 */
 	public function setup_nav( $main_nav = array(), $sub_nav = array() ) {
 
diff --git a/wp-content/plugins/buddypress/bp-settings/bp-settings-template.php b/wp-content/plugins/buddypress/bp-settings/bp-settings-template.php
index 965e30164..393ec4543 100644
--- a/wp-content/plugins/buddypress/bp-settings/bp-settings-template.php
+++ b/wp-content/plugins/buddypress/bp-settings/bp-settings-template.php
@@ -55,3 +55,29 @@ function bp_settings_root_slug() {
 	function bp_get_settings_root_slug() {
 		return apply_filters( 'bp_get_settings_root_slug', buddypress()->settings->root_slug );
 	}
+
+/**
+ * Add the 'pending email change' message to the settings page.
+ *
+ * @since BuddyPress (2.1.0)
+ */
+function bp_settings_pending_email_notice() {
+	$pending_email = bp_get_user_meta( bp_displayed_user_id(), 'pending_email_change', true );
+
+	if ( empty( $pending_email['newemail'] ) ) {
+		return;
+	}
+
+	if ( bp_get_displayed_user_email() == $pending_email['newemail'] ) {
+		return;
+	}
+
+	?>
+
+	<div id="message" class="bp-template-notice error">
+		<p><?php printf( __( 'There is a pending change of your email address to <code>%1$s</code>.<br />Check your email (<code>%2$s</code>) for the verification link. <a href="%3$s">Cancel</a>', 'buddypress' ), $pending_email['newemail'], bp_get_displayed_user_email(), esc_url( bp_displayed_user_domain() . bp_get_settings_slug() . '/?dismiss_email_change=1' ) ) ?></p>
+	</div>
+
+	<?php
+}
+add_action( 'bp_before_member_settings_template', 'bp_settings_pending_email_notice' );
diff --git a/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress-functions.php b/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress-functions.php
index 784b2dc21..b4da42472 100644
--- a/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress-functions.php
+++ b/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress-functions.php
@@ -199,16 +199,19 @@ class BP_Legacy extends BP_Theme_Compat {
 	 * @uses wp_enqueue_style() To enqueue the styles
 	 */
 	public function enqueue_styles() {
-
-		// LTR or RTL
-		$file = is_rtl() ? 'buddypress-rtl.css' : 'buddypress.css';
+		$min = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
 
 		// Locate the BP stylesheet
-		$asset = $this->locate_asset_in_stack( $file, 'css' );
+		$asset = $this->locate_asset_in_stack( "buddypress{$min}.css", 'css' );
 
 		// Enqueue BuddyPress-specific styling, if found
 		if ( isset( $asset['location'], $asset['handle'] ) ) {
 			wp_enqueue_style( $asset['handle'], $asset['location'], array(), $this->version, 'screen' );
+
+			wp_style_add_data( $asset['handle'], 'rtl', true );
+			if ( $min ) {
+				wp_style_add_data( $asset['handle'], 'suffix', $min );
+			}
 		}
 	}
 
@@ -218,11 +221,10 @@ class BP_Legacy extends BP_Theme_Compat {
 	 * @since BuddyPress (1.7)
 	 */
 	public function enqueue_scripts() {
-
-		$file = 'buddypress.js';
+		$min = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
 
 		// Locate the BP JS file
-		$asset = $this->locate_asset_in_stack( $file, 'js' );
+		$asset = $this->locate_asset_in_stack( "buddypress{$min}.js", 'js' );
 
 		// Enqueue the global JS, if found - AJAX will not work
 		// without it
@@ -253,6 +255,20 @@ class BP_Legacy extends BP_Theme_Compat {
 		if ( is_singular() && bp_is_blog_page() && get_option( 'thread_comments' ) ) {
 			wp_enqueue_script( 'comment-reply' );
 		}
+
+		// Maybe enqueue password verify JS (register page or user settings page)
+		if ( bp_is_register_page() || ( function_exists( 'bp_is_user_settings_general' ) && bp_is_user_settings_general() ) ) {
+
+			// Locate the Register Page JS file
+			$asset = $this->locate_asset_in_stack( "password-verify{$min}.js", 'js' );
+
+			$dependencies = array_merge( bp_core_get_js_dependencies(), array(
+				'password-strength-meter',
+			) );
+
+			// Enqueue script
+			wp_enqueue_script( $asset['handle'] . '-password-verify', $asset['location'], $dependencies, $this->version);
+		}
 	}
 
 	/**
@@ -292,19 +308,22 @@ class BP_Legacy extends BP_Theme_Compat {
 		// No need to check child if template == stylesheet
 		if ( is_child_theme() ) {
 			$locations['bp-child'] = array(
-				'dir' => get_stylesheet_directory(),
-				'uri' => get_stylesheet_directory_uri(),
+				'dir'  => get_stylesheet_directory(),
+				'uri'  => get_stylesheet_directory_uri(),
+				'file' => str_replace( '.min', '', $file )
 			);
 		}
 
 		$locations['bp-parent'] = array(
-			'dir' => get_template_directory(),
-			'uri' => get_template_directory_uri(),
+			'dir'  => get_template_directory(),
+			'uri'  => get_template_directory_uri(),
+			'file' => str_replace( '.min', '', $file )
 		);
 
 		$locations['bp-legacy'] = array(
-			'dir' => bp_get_theme_compat_dir(),
-			'uri' => bp_get_theme_compat_url(),
+			'dir'  => bp_get_theme_compat_dir(),
+			'uri'  => bp_get_theme_compat_url(),
+			'file' => $file
 		);
 
 		// Subdirectories within the top-level $locations directories
@@ -318,8 +337,8 @@ class BP_Legacy extends BP_Theme_Compat {
 
 		foreach ( $locations as $location_type => $location ) {
 			foreach ( $subdirs as $subdir ) {
-				if ( file_exists( trailingslashit( $location['dir'] ) . trailingslashit( $subdir ) . $file ) ) {
-					$retval['location'] = trailingslashit( $location['uri'] ) . trailingslashit( $subdir ) . $file;
+				if ( file_exists( trailingslashit( $location['dir'] ) . trailingslashit( $subdir ) . $location['file'] ) ) {
+					$retval['location'] = trailingslashit( $location['uri'] ) . trailingslashit( $subdir ) . $location['file'];
 					$retval['handle']   = $location_type . '-' . $type;
 					break 2;
 				}
@@ -520,7 +539,7 @@ function bp_legacy_theme_ajax_querystring( $query_string, $object ) {
 
 	$object_search_text = bp_get_search_default_text( $object );
  	if ( ! empty( $_POST['search_terms'] ) && $object_search_text != $_POST['search_terms'] && 'false' != $_POST['search_terms'] && 'undefined' != $_POST['search_terms'] )
-		$qs[] = 'search_terms=' . $_POST['search_terms'];
+		$qs[] = 'search_terms=' . urlencode( $_POST['search_terms'] );
 
 	// Now pass the querystring to override default values.
 	$query_string = empty( $qs ) ? '' : join( '&', (array) $qs );
@@ -704,7 +723,7 @@ function bp_legacy_theme_post_update() {
 	}
 
 	if ( empty( $activity_id ) )
-		exit( '-1<div id="message" class="error"><p>' . __( 'There was a problem posting your update, please try again.', 'buddypress' ) . '</p></div>' );
+		exit( '-1<div id="message" class="error"><p>' . __( 'There was a problem posting your update; please try again.', 'buddypress' ) . '</p></div>' );
 
 	$last_recorded = ! empty( $_POST['since'] ) ? date( 'Y-m-d H:i:s', intval( $_POST['since'] ) ) : 0;
 	if ( $last_recorded ) {
@@ -765,7 +784,7 @@ function bp_legacy_theme_new_activity_comment() {
 		exit( '-1<div id="message" class="error"><p>' . __( 'There was an error posting that reply, please try again.', 'buddypress' ) . '</p></div>' );
 
 	// Load the new activity item into the $activities_template global
-	bp_has_activities( 'display_comments=stream&hide_spam=false&include=' . $comment_id );
+	bp_has_activities( 'display_comments=stream&hide_spam=false&show_hidden=true&include=' . $comment_id );
 
 	// Swap the current comment with the activity item we just loaded
 	if ( isset( $activities_template->activities[0] ) ) {
@@ -776,11 +795,11 @@ function bp_legacy_theme_new_activity_comment() {
 		// Because the whole tree has not been loaded, we manually
 		// determine depth
 		$depth = 1;
-		$parent_id = $activities_template->activities[0]->secondary_item_id;
-		while ( $parent_id !== $activities_template->activities[0]->item_id ) {
+		$parent_id = (int) $activities_template->activities[0]->secondary_item_id;
+		while ( $parent_id !== (int) $activities_template->activities[0]->item_id ) {
 			$depth++;
 			$p_obj = new BP_Activity_Activity( $parent_id );
-			$parent_id = $p_obj->secondary_item_id;
+			$parent_id = (int) $p_obj->secondary_item_id;
 		}
 		$activities_template->activity->current_comment->depth = $depth;
 	}
@@ -1383,70 +1402,34 @@ function bp_legacy_theme_ajax_messages_delete() {
  * @return string HTML.
  */
 function bp_legacy_theme_ajax_messages_autocomplete_results() {
+	$limit = isset( $_GET['limit'] ) ? absint( $_GET['limit'] )          : (int) apply_filters( 'bp_autocomplete_max_results', 10 );
+	$term  = isset( $_GET['q'] )     ? sanitize_text_field( $_GET['q'] ) : '';
 
 	// Include everyone in the autocomplete, or just friends?
-	if ( bp_is_current_component( bp_get_messages_slug() ) )
-		$autocomplete_all = buddypress()->messages->autocomplete_all;
-
-	$pag_page     = 1;
-	$limit        = (int) $_GET['limit'] ? $_GET['limit'] : apply_filters( 'bp_autocomplete_max_results', 10 );
-	$search_terms = isset( $_GET['q'] ) ? $_GET['q'] : '';
-
-	$user_query_args = array(
-		'search_terms' => $search_terms,
-		'page'         => intval( $pag_page ),
-		'per_page'     => intval( $limit ),
-	);
-
-	// If only matching against friends, get an $include param for
-	// BP_User_Query
-	if ( ! $autocomplete_all && bp_is_active( 'friends' ) ) {
-		$include = BP_Friends_Friendship::get_friend_user_ids( bp_loggedin_user_id() );
-
-		// Ensure zero matches if no friends are found
-		if ( empty( $include ) ) {
-			$include = array( 0 );
-		}
-
-		$user_query_args['include'] = $include;
+	if ( bp_is_current_component( bp_get_messages_slug() ) ) {
+		$only_friends = ( buddypress()->messages->autocomplete_all === false );
+	} else {
+		$only_friends = true;
 	}
 
-	$user_query = new BP_User_Query( $user_query_args );
-
-	// Backward compatibility - if a plugin is expecting a legacy
-	// filter, pass the IDs through the filter and requery (groan)
-	if ( has_filter( 'bp_core_autocomplete_ids' ) || has_filter( 'bp_friends_autocomplete_ids' ) ) {
-		$found_user_ids = wp_list_pluck( $user_query->results, 'ID' );
-
-		if ( $autocomplete_all ) {
-			$found_user_ids = apply_filters( 'bp_core_autocomplete_ids', $found_user_ids );
-		} else {
-			$found_user_ids = apply_filters( 'bp_friends_autocomplete_ids', $found_user_ids );
-		}
-
-		if ( empty( $found_user_ids ) ) {
-			$found_user_ids = array( 0 );
-		}
-
-		// Repopulate the $user_query variable
-		$user_query = new BP_User_Query( array(
-			'include' => $found_user_ids,
-		) );
-	}
+	$suggestions = bp_core_get_suggestions( array(
+		'limit'        => $limit,
+		'only_friends' => $only_friends,
+		'term'         => $term,
+		'type'         => 'members',
+	) );
 
-	if ( ! empty( $user_query->results ) ) {
-		foreach ( $user_query->results as $user ) {
-			if ( bp_is_username_compatibility_mode() ) {
-				// Sanitize for spaces. Use urlencode() rather
-				// than rawurlencode() because %20 breaks JS
-				$username = urlencode( $user->user_login );
-			} else {
-				$username = $user->user_nicename;
-			}
+	if ( $suggestions && ! is_wp_error( $suggestions ) ) {
+		foreach ( $suggestions as $user ) {
 
 			// Note that the final line break acts as a delimiter for the
 			// autocomplete javascript and thus should not be removed
-			echo '<span id="link-' . esc_attr( $username ) . '" href="' . bp_core_get_user_domain( $user->ID ) . '"></span>' . bp_core_fetch_avatar( array( 'item_id' => $user->ID, 'type' => 'thumb', 'width' => 15, 'height' => 15, 'alt' => $user->display_name ) ) . ' &nbsp;' . bp_core_get_user_displayname( $user->ID ) . ' (' . esc_html( $username ) . ')' . "\n";
+			printf( '<span id="%s" href="#"></span><img src="%s" style="width: 15px"> &nbsp; %s (%s)' . "\n",
+				esc_attr( 'link-' . $user->ID ),
+				esc_url( $user->image ),
+				esc_html( $user->name ),
+				esc_html( $user->ID )
+			);
 		}
 	}
 
diff --git a/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/activity/activity-loop.php b/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/activity/activity-loop.php
index 6134ff6bd..24ef57919 100644
--- a/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/activity/activity-loop.php
+++ b/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/activity/activity-loop.php
@@ -2,14 +2,6 @@
 
 <?php if ( bp_has_activities( bp_ajax_querystring( 'activity' ) ) ) : ?>
 
-	<?php /* Show pagination if JS is not enabled, since the "Load More" link will do nothing */ ?>
-	<noscript>
-		<div class="pagination">
-			<div class="pag-count"><?php bp_activity_pagination_count(); ?></div>
-			<div class="pagination-links"><?php bp_activity_pagination_links(); ?></div>
-		</div>
-	</noscript>
-
 	<?php if ( empty( $_POST['page'] ) ) : ?>
 
 		<ul id="activity-stream" class="activity-list item-list">
@@ -25,7 +17,7 @@
 	<?php if ( bp_activity_has_more_items() ) : ?>
 
 		<li class="load-more">
-			<a href="#more"><?php _e( 'Load More', 'buddypress' ); ?></a>
+			<a href="<?php bp_activity_load_more_link() ?>"><?php _e( 'Load More', 'buddypress' ); ?></a>
 		</li>
 
 	<?php endif; ?>
diff --git a/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/activity/entry.php b/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/activity/entry.php
index 24e296b73..95bb3a5ac 100644
--- a/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/activity/entry.php
+++ b/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/activity/entry.php
@@ -85,19 +85,19 @@
 
 	<?php do_action( 'bp_before_activity_entry_comments' ); ?>
 
-	<?php if ( ( is_user_logged_in() && bp_activity_can_comment() ) || bp_is_single_activity() ) : ?>
+	<?php if ( ( bp_activity_get_comment_count() || bp_activity_can_comment() ) || bp_is_single_activity() ) : ?>
 
 		<div class="activity-comments">
 
 			<?php bp_activity_comments(); ?>
 
-			<?php if ( is_user_logged_in() ) : ?>
+			<?php if ( is_user_logged_in() && bp_activity_can_comment() ) : ?>
 
 				<form action="<?php bp_activity_comment_form_action(); ?>" method="post" id="ac-form-<?php bp_activity_id(); ?>" class="ac-form"<?php bp_activity_comment_form_nojs_display(); ?>>
 					<div class="ac-reply-avatar"><?php bp_loggedin_user_avatar( 'width=' . BP_AVATAR_THUMB_WIDTH . '&height=' . BP_AVATAR_THUMB_HEIGHT ); ?></div>
 					<div class="ac-reply-content">
 						<div class="ac-textarea">
-							<textarea id="ac-input-<?php bp_activity_id(); ?>" class="ac-input" name="ac_input_<?php bp_activity_id(); ?>"></textarea>
+							<textarea id="ac-input-<?php bp_activity_id(); ?>" class="ac-input bp-suggestions" name="ac_input_<?php bp_activity_id(); ?>"></textarea>
 						</div>
 						<input type="submit" name="ac_form_submit" value="<?php esc_attr_e( 'Post', 'buddypress' ); ?>" /> &nbsp; <a href="#" class="ac-reply-cancel"><?php _e( 'Cancel', 'buddypress' ); ?></a>
 						<input type="hidden" name="comment_form_id" value="<?php bp_activity_id(); ?>" />
diff --git a/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/activity/index.php b/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/activity/index.php
index de21b6373..40d7725f1 100644
--- a/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/activity/index.php
+++ b/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/activity/index.php
@@ -75,37 +75,9 @@
 			<li id="activity-filter-select" class="last">
 				<label for="activity-filter-by"><?php _e( 'Show:', 'buddypress' ); ?></label>
 				<select id="activity-filter-by">
-					<option value="-1"><?php _e( 'Everything', 'buddypress' ); ?></option>
-					<option value="activity_update"><?php _e( 'Updates', 'buddypress' ); ?></option>
+					<option value="-1"><?php _e( '&mdash; Everything &mdash;', 'buddypress' ); ?></option>
 
-					<?php if ( bp_is_active( 'blogs' ) ) : ?>
-
-						<option value="new_blog_post"><?php _e( 'Posts', 'buddypress' ); ?></option>
-						<option value="new_blog_comment"><?php _e( 'Comments', 'buddypress' ); ?></option>
-
-					<?php endif; ?>
-
-					<?php if ( bp_is_active( 'forums' ) ) : ?>
-
-						<option value="new_forum_topic"><?php _e( 'Forum Topics', 'buddypress' ); ?></option>
-						<option value="new_forum_post"><?php _e( 'Forum Replies', 'buddypress' ); ?></option>
-
-					<?php endif; ?>
-
-					<?php if ( bp_is_active( 'groups' ) ) : ?>
-
-						<option value="created_group"><?php _e( 'New Groups', 'buddypress' ); ?></option>
-						<option value="joined_group"><?php _e( 'Group Memberships', 'buddypress' ); ?></option>
-
-					<?php endif; ?>
-
-					<?php if ( bp_is_active( 'friends' ) ) : ?>
-
-						<option value="friendship_accepted,friendship_created"><?php _e( 'Friendships', 'buddypress' ); ?></option>
-
-					<?php endif; ?>
-
-					<option value="new_member"><?php _e( 'New Members', 'buddypress' ); ?></option>
+					<?php bp_activity_show_filters(); ?>
 
 					<?php do_action( 'bp_activity_filter_options' ); ?>
 
diff --git a/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/activity/post-form.php b/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/activity/post-form.php
index c8577a246..a45213a15 100644
--- a/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/activity/post-form.php
+++ b/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/activity/post-form.php
@@ -18,16 +18,16 @@
 			<?php bp_loggedin_user_avatar( 'width=' . bp_core_avatar_thumb_width() . '&height=' . bp_core_avatar_thumb_height() ); ?>
 		</a>
 	</div>
-	
+
 	<p class="activity-greeting"><?php if ( bp_is_group() )
-		printf( __( "What's new in %s, %s?", 'buddypress' ), bp_get_group_name(), bp_get_user_firstname() );
+		printf( __( "What's new in %s, %s?", 'buddypress' ), bp_get_group_name(), bp_get_user_firstname( bp_get_loggedin_user_fullname() ) );
 	else
-		printf( __( "What's new, %s?", 'buddypress' ), bp_get_user_firstname() );
+		printf( __( "What's new, %s?", 'buddypress' ), bp_get_user_firstname( bp_get_loggedin_user_fullname() ) );
 	?></p>
 
 	<div id="whats-new-content">
 		<div id="whats-new-textarea">
-			<textarea name="whats-new" id="whats-new" cols="50" rows="10"><?php if ( isset( $_GET['r'] ) ) : ?>@<?php echo esc_textarea( $_GET['r'] ); ?> <?php endif; ?></textarea>
+			<textarea class="bp-suggestions" name="whats-new" id="whats-new" cols="50" rows="10"><?php if ( isset( $_GET['r'] ) ) : ?>@<?php echo esc_textarea( $_GET['r'] ); ?> <?php endif; ?></textarea>
 		</div>
 
 		<div id="whats-new-options">
diff --git a/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/groups/create.php b/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/groups/create.php
index b90223dde..5741f1017 100644
--- a/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/groups/create.php
+++ b/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/groups/create.php
@@ -51,32 +51,35 @@
 				<h4><?php _e( 'Privacy Options', 'buddypress' ); ?></h4>
 
 				<div class="radio">
-					<label><input type="radio" name="group-status" value="public"<?php if ( 'public' == bp_get_new_group_status() || !bp_get_new_group_status() ) { ?> checked="checked"<?php } ?> />
-						<strong><?php _e( 'This is a public group', 'buddypress' ); ?></strong>
-						<ul>
-							<li><?php _e( 'Any site member can join this group.', 'buddypress' ); ?></li>
-							<li><?php _e( 'This group will be listed in the groups directory and in search results.', 'buddypress' ); ?></li>
-							<li><?php _e( 'Group content and activity will be visible to any site member.', 'buddypress' ); ?></li>
-						</ul>
-					</label>
+					<label><input type="radio" name="group-status" value="public"<?php if ( 'public' == bp_get_new_group_status() || !bp_get_new_group_status() ) { ?> checked="checked"<?php } ?> /> <strong><?php _e( 'This is a public group', 'buddypress' ); ?></strong></label>
+					<ul>
+						<li><?php _e( 'Any site member can join this group.', 'buddypress' ); ?></li>
+						<li><?php _e( 'This group will be listed in the groups directory and in search results.', 'buddypress' ); ?></li>
+						<li><?php _e( 'Group content and activity will be visible to any site member.', 'buddypress' ); ?></li>
+					</ul>
+
 
-					<label><input type="radio" name="group-status" value="private"<?php if ( 'private' == bp_get_new_group_status() ) { ?> checked="checked"<?php } ?> />
+					<label>
+						<input type="radio" name="group-status" value="private"<?php if ( 'private' == bp_get_new_group_status() ) { ?> checked="checked"<?php } ?> /> 
 						<strong><?php _e( 'This is a private group', 'buddypress' ); ?></strong>
-						<ul>
-							<li><?php _e( 'Only users who request membership and are accepted can join the group.', 'buddypress' ); ?></li>
-							<li><?php _e( 'This group will be listed in the groups directory and in search results.', 'buddypress' ); ?></li>
-							<li><?php _e( 'Group content and activity will only be visible to members of the group.', 'buddypress' ); ?></li>
-						</ul>
 					</label>
+					<ul>
+						<li><?php _e( 'Only users who request membership and are accepted can join the group.', 'buddypress' ); ?></li>
+						<li><?php _e( 'This group will be listed in the groups directory and in search results.', 'buddypress' ); ?></li>
+						<li><?php _e( 'Group content and activity will only be visible to members of the group.', 'buddypress' ); ?></li>
+					</ul>
 
-					<label><input type="radio" name="group-status" value="hidden"<?php if ( 'hidden' == bp_get_new_group_status() ) { ?> checked="checked"<?php } ?> />
+
+					<label>
+						<input type="radio" name="group-status" value="hidden"<?php if ( 'hidden' == bp_get_new_group_status() ) { ?> checked="checked"<?php } ?> /> 
 						<strong><?php _e('This is a hidden group', 'buddypress' ); ?></strong>
-						<ul>
-							<li><?php _e( 'Only users who are invited can join the group.', 'buddypress' ); ?></li>
-							<li><?php _e( 'This group will not be listed in the groups directory or search results.', 'buddypress' ); ?></li>
-							<li><?php _e( 'Group content and activity will only be visible to members of the group.', 'buddypress' ); ?></li>
-						</ul>
 					</label>
+					<ul>
+						<li><?php _e( 'Only users who are invited can join the group.', 'buddypress' ); ?></li>
+						<li><?php _e( 'This group will not be listed in the groups directory or search results.', 'buddypress' ); ?></li>
+						<li><?php _e( 'Group content and activity will only be visible to members of the group.', 'buddypress' ); ?></li>
+					</ul>
+
 				</div>
 
 				<h4><?php _e( 'Group Invitations', 'buddypress' ); ?></h4>
@@ -139,7 +142,7 @@
 					</div><!-- .left-menu -->
 
 					<div class="main-column">
-						<p><?php _e( "Upload an image to use as an avatar for this group. The image will be shown on the main group page, and in search results.", 'buddypress' ); ?></p>
+						<p><?php _e( "Upload an image to use as a profile photo for this group. The image will be shown on the main group page, and in search results.", 'buddypress' ); ?></p>
 
 						<p>
 							<input type="file" name="file" id="file" />
@@ -147,19 +150,19 @@
 							<input type="hidden" name="action" id="action" value="bp_avatar_upload" />
 						</p>
 
-						<p><?php _e( 'To skip the avatar upload process, hit the "Next Step" button.', 'buddypress' ); ?></p>
+						<p><?php _e( 'To skip the group profile photo upload process, hit the "Next Step" button.', 'buddypress' ); ?></p>
 					</div><!-- .main-column -->
 
 				<?php endif; ?>
 
 				<?php if ( 'crop-image' == bp_get_avatar_admin_step() ) : ?>
 
-					<h4><?php _e( 'Crop Group Avatar', 'buddypress' ); ?></h4>
+					<h4><?php _e( 'Crop Group Profile Photo', 'buddypress' ); ?></h4>
 
-					<img src="<?php bp_avatar_to_crop(); ?>" id="avatar-to-crop" class="avatar" alt="<?php esc_attr_e( 'Avatar to crop', 'buddypress' ); ?>" />
+					<img src="<?php bp_avatar_to_crop(); ?>" id="avatar-to-crop" class="avatar" alt="<?php esc_attr_e( 'Profile photo to crop', 'buddypress' ); ?>" />
 
 					<div id="avatar-crop-pane">
-						<img src="<?php bp_avatar_to_crop(); ?>" id="avatar-crop-preview" class="avatar" alt="<?php esc_attr_e( 'Avatar preview', 'buddypress' ); ?>" />
+						<img src="<?php bp_avatar_to_crop(); ?>" id="avatar-crop-preview" class="avatar" alt="<?php esc_attr_e( 'Profile photo preview', 'buddypress' ); ?>" />
 					</div>
 
 					<input type="submit" name="avatar-crop-submit" id="avatar-crop-submit" value="<?php esc_attr_e( 'Crop Image', 'buddypress' ); ?>" />
diff --git a/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/groups/single/activity.php b/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/groups/single/activity.php
index ff2c6d909..e810cefc7 100644
--- a/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/groups/single/activity.php
+++ b/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/groups/single/activity.php
@@ -5,17 +5,11 @@
 		<?php do_action( 'bp_group_activity_syndication_options' ); ?>
 
 		<li id="activity-filter-select" class="last">
-			<label for="activity-filter-by"><?php _e( 'Show:', 'buddypress' ); ?></label> 
+			<label for="activity-filter-by"><?php _e( 'Show:', 'buddypress' ); ?></label>
 			<select id="activity-filter-by">
-				<option value="-1"><?php _e( 'Everything', 'buddypress' ); ?></option>
-				<option value="activity_update"><?php _e( 'Updates', 'buddypress' ); ?></option>
+				<option value="-1"><?php _e( '&mdash; Everything &mdash;', 'buddypress' ); ?></option>
 
-				<?php if ( bp_is_active( 'forums' ) ) : ?>
-					<option value="new_forum_topic"><?php _e( 'Forum Topics', 'buddypress' ); ?></option>
-					<option value="new_forum_post"><?php _e( 'Forum Replies', 'buddypress' ); ?></option>
-				<?php endif; ?>
-
-				<option value="joined_group"><?php _e( 'Group Memberships', 'buddypress' ); ?></option>
+				<?php bp_activity_show_filters( 'group' ); ?>
 
 				<?php do_action( 'bp_group_activity_filter_options' ); ?>
 			</select>
diff --git a/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/groups/single/admin.php b/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/groups/single/admin.php
index 90dfb3b1e..67d514875 100644
--- a/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/groups/single/admin.php
+++ b/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/groups/single/admin.php
@@ -124,7 +124,7 @@
 
 	<?php if ( 'upload-image' == bp_get_avatar_admin_step() ) : ?>
 
-			<p><?php _e("Upload an image to use as an avatar for this group. The image will be shown on the main group page, and in search results.", 'buddypress' ); ?></p>
+			<p><?php _e("Upload an image to use as a profile photo for this group. The image will be shown on the main group page, and in search results.", 'buddypress' ); ?></p>
 
 			<p>
 				<input type="file" name="file" id="file" />
@@ -134,9 +134,9 @@
 
 			<?php if ( bp_get_group_has_avatar() ) : ?>
 
-				<p><?php _e( "If you'd like to remove the existing avatar but not upload a new one, please use the delete avatar button.", 'buddypress' ); ?></p>
+				<p><?php _e( "If you'd like to remove the existing group profile photo but not upload a new one, please use the delete group profile photo button.", 'buddypress' ); ?></p>
 
-				<?php bp_button( array( 'id' => 'delete_group_avatar', 'component' => 'groups', 'wrapper_id' => 'delete-group-avatar-button', 'link_class' => 'edit', 'link_href' => bp_get_group_avatar_delete_link(), 'link_title' => __( 'Delete Avatar', 'buddypress' ), 'link_text' => __( 'Delete Avatar', 'buddypress' ) ) ); ?>
+				<?php bp_button( array( 'id' => 'delete_group_avatar', 'component' => 'groups', 'wrapper_id' => 'delete-group-avatar-button', 'link_class' => 'edit', 'link_href' => bp_get_group_avatar_delete_link(), 'link_title' => __( 'Delete Group Profile Photo', 'buddypress' ), 'link_text' => __( 'Delete Group Profile Photo', 'buddypress' ) ) ); ?>
 
 			<?php endif; ?>
 
@@ -146,12 +146,12 @@
 
 	<?php if ( 'crop-image' == bp_get_avatar_admin_step() ) : ?>
 
-		<h4><?php _e( 'Crop Avatar', 'buddypress' ); ?></h4>
+		<h4><?php _e( 'Crop Profile Photo', 'buddypress' ); ?></h4>
 
-		<img src="<?php bp_avatar_to_crop(); ?>" id="avatar-to-crop" class="avatar" alt="<?php esc_attr_e( 'Avatar to crop', 'buddypress' ); ?>" />
+		<img src="<?php bp_avatar_to_crop(); ?>" id="avatar-to-crop" class="avatar" alt="<?php esc_attr_e( 'Profile photo to crop', 'buddypress' ); ?>" />
 
 		<div id="avatar-crop-pane">
-			<img src="<?php bp_avatar_to_crop(); ?>" id="avatar-crop-preview" class="avatar" alt="<?php esc_attr_e( 'Avatar preview', 'buddypress' ); ?>" />
+			<img src="<?php bp_avatar_to_crop(); ?>" id="avatar-crop-preview" class="avatar" alt="<?php esc_attr_e( 'Profile photo preview', 'buddypress' ); ?>" />
 		</div>
 
 		<input type="submit" name="avatar-crop-submit" id="avatar-crop-submit" value="<?php esc_attr_e( 'Crop Image', 'buddypress' ); ?>" />
diff --git a/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/groups/single/home.php b/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/groups/single/home.php
index 11dfb2e5c..f22e33904 100644
--- a/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/groups/single/home.php
+++ b/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/groups/single/home.php
@@ -33,24 +33,35 @@
 		 * @todo A real template hierarchy? Gasp!
 		 */
 
-		// Group is visible
-		if ( bp_group_is_visible() ) : 
-
 			// Looking at home location
 			if ( bp_is_group_home() ) :
 
-				// Use custom front if one exists
-				$custom_front = bp_locate_template( array( 'groups/single/front.php' ), false, true );
-				if     ( ! empty( $custom_front   ) ) : load_template( $custom_front, true );
+				if ( bp_group_is_visible() ) {
 
-				// Default to activity
-				elseif ( bp_is_active( 'activity' ) ) : bp_get_template_part( 'groups/single/activity' );
+					// Use custom front if one exists
+					$custom_front = bp_locate_template( array( 'groups/single/front.php' ), false, true );
+					if     ( ! empty( $custom_front   ) ) : load_template( $custom_front, true );
 
-				// Otherwise show members
-				elseif ( bp_is_active( 'members'  ) ) : bp_groups_members_template_part();
+					// Default to activity
+					elseif ( bp_is_active( 'activity' ) ) : bp_get_template_part( 'groups/single/activity' );
+
+					// Otherwise show members
+					elseif ( bp_is_active( 'members'  ) ) : bp_groups_members_template_part();
+
+					endif;
+
+				} else {
+
+					do_action( 'bp_before_group_status_message' ); ?>
+
+					<div id="message" class="info">
+						<p><?php bp_group_status_message(); ?></p>
+					</div>
+
+					<?php do_action( 'bp_after_group_status_message' );
+
+				}
 
-				endif;
-				
 			// Not looking at home
 			else :
 
@@ -76,28 +87,8 @@
 				else                                : bp_get_template_part( 'groups/single/plugins'      );
 
 				endif;
-			endif;
-
-		// Group is not visible
-		elseif ( ! bp_group_is_visible() ) :
-
-			// Membership request
-			if ( bp_is_group_membership_request() ) :
-				bp_get_template_part( 'groups/single/request-membership' );
-
-			// The group is not visible, show the status message
-			else :
-
-				do_action( 'bp_before_group_status_message' ); ?>
-
-				<div id="message" class="info">
-					<p><?php bp_group_status_message(); ?></p>
-				</div>
-
-				<?php do_action( 'bp_after_group_status_message' );
 
 			endif;
-		endif;
 
 		do_action( 'bp_after_group_body' ); ?>
 
diff --git a/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/members/register.php b/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/members/register.php
index 6624817ee..25121ae28 100644
--- a/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/members/register.php
+++ b/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/members/register.php
@@ -39,11 +39,12 @@
 
 				<label for="signup_password"><?php _e( 'Choose a Password', 'buddypress' ); ?> <?php _e( '(required)', 'buddypress' ); ?></label>
 				<?php do_action( 'bp_signup_password_errors' ); ?>
-				<input type="password" name="signup_password" id="signup_password" value="" />
+				<input type="password" name="signup_password" id="signup_password" value="" class="password-entry" />
+				<div id="pass-strength-result"></div>
 
 				<label for="signup_password_confirm"><?php _e( 'Confirm Password', 'buddypress' ); ?> <?php _e( '(required)', 'buddypress' ); ?></label>
 				<?php do_action( 'bp_signup_password_confirm_errors' ); ?>
-				<input type="password" name="signup_password_confirm" id="signup_password_confirm" value="" />
+				<input type="password" name="signup_password_confirm" id="signup_password_confirm" value="" class="password-entry-confirm" />
 
 				<?php do_action( 'bp_account_details_fields' ); ?>
 
@@ -66,7 +67,7 @@
 
 					<?php while ( bp_profile_fields() ) : bp_the_profile_field(); ?>
 
-						<div class="editfield">
+						<div<?php bp_field_css_class( 'editfield' ); ?>>
 
 							<?php
 							$field_type = bp_xprofile_create_field_type( bp_get_the_profile_field_type() );
@@ -103,7 +104,7 @@
 
 					<?php endwhile; ?>
 
-					<input type="hidden" name="signup_profile_field_ids" id="signup_profile_field_ids" value="<?php bp_the_profile_group_field_ids(); ?>" />
+					<input type="hidden" name="signup_profile_field_ids" id="signup_profile_field_ids" value="<?php bp_the_profile_field_ids(); ?>" />
 
 					<?php endwhile; endif; endif; ?>
 
@@ -133,7 +134,7 @@
 						<?php do_action( 'bp_signup_blog_url_errors' ); ?>
 
 						<?php if ( is_subdomain_install() ) : ?>
-							http:// <input type="text" name="signup_blog_url" id="signup_blog_url" value="<?php bp_signup_blog_url_value(); ?>" /> .<?php bp_blogs_subdomain_base(); ?>
+							http:// <input type="text" name="signup_blog_url" id="signup_blog_url" value="<?php bp_signup_blog_url_value(); ?>" /> .<?php bp_signup_subdomain_base(); ?>
 						<?php else : ?>
 							<?php echo home_url( '/' ); ?> <input type="text" name="signup_blog_url" id="signup_blog_url" value="<?php bp_signup_blog_url_value(); ?>" />
 						<?php endif; ?>
@@ -142,7 +143,7 @@
 						<?php do_action( 'bp_signup_blog_title_errors' ); ?>
 						<input type="text" name="signup_blog_title" id="signup_blog_title" value="<?php bp_signup_blog_title_value(); ?>" />
 
-						<span class="label"><?php _e( 'I would like my site to appear in search engines, and in public listings around this network.', 'buddypress' ); ?>:</span>
+						<span class="label"><?php _e( 'I would like my site to appear in search engines, and in public listings around this network.', 'buddypress' ); ?></span>
 						<?php do_action( 'bp_signup_blog_privacy_errors' ); ?>
 
 						<label><input type="radio" name="signup_blog_privacy" id="signup_blog_privacy_public" value="public"<?php if ( 'public' == bp_get_signup_blog_privacy_value() || !bp_get_signup_blog_privacy_value() ) : ?> checked="checked"<?php endif; ?> /> <?php _e( 'Yes', 'buddypress' ); ?></label>
diff --git a/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/members/single/activity.php b/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/members/single/activity.php
index 06e9263d1..af4ea66d4 100644
--- a/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/members/single/activity.php
+++ b/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/members/single/activity.php
@@ -17,42 +17,11 @@
 		<li id="activity-filter-select" class="last">
 			<label for="activity-filter-by"><?php _e( 'Show:', 'buddypress' ); ?></label>
 			<select id="activity-filter-by">
-				<option value="-1"><?php _e( 'Everything', 'buddypress' ); ?></option>
-				<option value="activity_update"><?php _e( 'Updates', 'buddypress' ); ?></option>
+				<option value="-1"><?php _e( '&mdash; Everything &mdash;', 'buddypress' ); ?></option>
 
-				<?php
-				if ( !bp_is_current_action( 'groups' ) ) :
-					if ( bp_is_active( 'blogs' ) ) : ?>
+				<?php bp_activity_show_filters(); ?>
 
-						<option value="new_blog_post"><?php _e( 'Posts', 'buddypress' ); ?></option>
-						<option value="new_blog_comment"><?php _e( 'Comments', 'buddypress' ); ?></option>
-
-					<?php
-					endif;
-
-					if ( bp_is_active( 'friends' ) ) : ?>
-
-						<option value="friendship_accepted,friendship_created"><?php _e( 'Friendships', 'buddypress' ); ?></option>
-
-					<?php endif;
-
-				endif;
-
-				if ( bp_is_active( 'forums' ) ) : ?>
-
-					<option value="new_forum_topic"><?php _e( 'Forum Topics', 'buddypress' ); ?></option>
-					<option value="new_forum_post"><?php _e( 'Forum Replies', 'buddypress' ); ?></option>
-
-				<?php endif;
-
-				if ( bp_is_active( 'groups' ) ) : ?>
-
-					<option value="created_group"><?php _e( 'New Groups', 'buddypress' ); ?></option>
-					<option value="joined_group"><?php _e( 'Group Memberships', 'buddypress' ); ?></option>
-
-				<?php endif;
-
-				do_action( 'bp_member_activity_filter_options' ); ?>
+				<?php do_action( 'bp_member_activity_filter_options' ); ?>
 
 			</select>
 		</li>
diff --git a/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/members/single/groups/invites.php b/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/members/single/groups/invites.php
index 613aa6262..e41210cba 100644
--- a/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/members/single/groups/invites.php
+++ b/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/members/single/groups/invites.php
@@ -11,7 +11,7 @@
 					<a href="<?php bp_group_permalink(); ?>"><?php bp_group_avatar( 'type=thumb&width=50&height=50' ); ?></a>
 				</div>
 
-				<h4><a href="<?php bp_group_permalink(); ?>"><?php bp_group_name(); ?></a><span class="small"> - <?php printf( _n( '1 member', '%d members', bp_get_group_total_members( false ), 'buddypress' ), bp_get_group_total_members( false )  ); ?></span></h4>
+				<h4><a href="<?php bp_group_permalink(); ?>"><?php bp_group_name(); ?></a><span class="small"> - <?php printf( _nx( '1 member', '%d members', bp_get_group_total_members( false ),'Group member count', 'buddypress' ), bp_get_group_total_members( false )  ); ?></span></h4>
 
 				<p class="desc">
 					<?php bp_group_description_excerpt(); ?>
diff --git a/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/members/single/messages/single.php b/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/members/single/messages/single.php
index 09f73bdbe..8588f3b6b 100644
--- a/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/members/single/messages/single.php
+++ b/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/members/single/messages/single.php
@@ -28,7 +28,7 @@
 
 		<?php while ( bp_thread_messages() ) : bp_thread_the_message(); ?>
 
-			<div class="message-box <?php bp_the_thread_message_alt_class(); ?>">
+			<div class="message-box <?php bp_the_thread_message_css_class(); ?>">
 
 				<div class="message-metadata">
 
diff --git a/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/members/single/profile/change-avatar.php b/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/members/single/profile/change-avatar.php
index e6cd1bec8..f2a30603c 100644
--- a/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/members/single/profile/change-avatar.php
+++ b/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/members/single/profile/change-avatar.php
@@ -1,10 +1,10 @@
-<h4><?php _e( 'Change Avatar', 'buddypress' ); ?></h4>
+<h4><?php _e( 'Change Profile Photo', 'buddypress' ); ?></h4>
 
 <?php do_action( 'bp_before_profile_avatar_upload_content' ); ?>
 
 <?php if ( !(int)bp_get_option( 'bp-disable-avatar-uploads' ) ) : ?>
 
-	<p><?php _e( 'Your avatar will be used on your profile and throughout the site. If there is a <a href="http://gravatar.com">Gravatar</a> associated with your account email we will use that, or you can upload an image from your computer.', 'buddypress' ); ?></p>
+	<p><?php _e( 'Your profile photo will be used on your profile and throughout the site. If there is a <a href="http://gravatar.com">Gravatar</a> associated with your account email we will use that, or you can upload an image from your computer.', 'buddypress' ); ?></p>
 
 	<form action="" method="post" id="avatar-upload-form" class="standard-form" enctype="multipart/form-data">
 
@@ -20,20 +20,20 @@
 			</p>
 
 			<?php if ( bp_get_user_has_avatar() ) : ?>
-				<p><?php _e( "If you'd like to delete your current avatar but not upload a new one, please use the delete avatar button.", 'buddypress' ); ?></p>
-				<p><a class="button edit" href="<?php bp_avatar_delete_link(); ?>" title="<?php esc_attr_e( 'Delete Avatar', 'buddypress' ); ?>"><?php _e( 'Delete My Avatar', 'buddypress' ); ?></a></p>
+				<p><?php _e( "If you'd like to delete your current profile photo but not upload a new one, please use the delete profile photo button.", 'buddypress' ); ?></p>
+				<p><a class="button edit" href="<?php bp_avatar_delete_link(); ?>" title="<?php esc_attr_e( 'Delete Profile Photo', 'buddypress' ); ?>"><?php _e( 'Delete My Profile Photo', 'buddypress' ); ?></a></p>
 			<?php endif; ?>
 
 		<?php endif; ?>
 
 		<?php if ( 'crop-image' == bp_get_avatar_admin_step() ) : ?>
 
-			<h5><?php _e( 'Crop Your New Avatar', 'buddypress' ); ?></h5>
+			<h5><?php _e( 'Crop Your New Profile Photo', 'buddypress' ); ?></h5>
 
-			<img src="<?php bp_avatar_to_crop(); ?>" id="avatar-to-crop" class="avatar" alt="<?php esc_attr_e( 'Avatar to crop', 'buddypress' ); ?>" />
+			<img src="<?php bp_avatar_to_crop(); ?>" id="avatar-to-crop" class="avatar" alt="<?php esc_attr_e( 'Profile Photo to crop', 'buddypress' ); ?>" />
 
 			<div id="avatar-crop-pane">
-				<img src="<?php bp_avatar_to_crop(); ?>" id="avatar-crop-preview" class="avatar" alt="<?php esc_attr_e( 'Avatar preview', 'buddypress' ); ?>" />
+				<img src="<?php bp_avatar_to_crop(); ?>" id="avatar-crop-preview" class="avatar" alt="<?php esc_attr_e( 'Profile Photo preview', 'buddypress' ); ?>" />
 			</div>
 
 			<input type="submit" name="avatar-crop-submit" id="avatar-crop-submit" value="<?php esc_attr_e( 'Crop Image', 'buddypress' ); ?>" />
@@ -52,7 +52,7 @@
 
 <?php else : ?>
 
-	<p><?php _e( 'Your avatar will be used on your profile and throughout the site. To change your avatar, please create an account with <a href="http://gravatar.com">Gravatar</a> using the same email address as you used to register with this site.', 'buddypress' ); ?></p>
+	<p><?php _e( 'Your profile photo will be used on your profile and throughout the site. To change your profile photo, please create an account with <a href="http://gravatar.com">Gravatar</a> using the same email address as you used to register with this site.', 'buddypress' ); ?></p>
 
 <?php endif; ?>
 
diff --git a/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/members/single/profile/edit.php b/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/members/single/profile/edit.php
index a20c079ad..7fe800f4a 100644
--- a/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/members/single/profile/edit.php
+++ b/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/members/single/profile/edit.php
@@ -9,11 +9,13 @@ if ( bp_has_profile( 'profile_group_id=' . bp_get_current_profile_group_id() ) )
 
 		<h4><?php printf( __( "Editing '%s' Profile Group", "buddypress" ), bp_get_the_profile_group_name() ); ?></h4>
 
-		<ul class="button-nav">
+		<?php if ( bp_profile_has_multiple_groups() ) : ?>
+			<ul class="button-nav">
 
-			<?php bp_profile_group_tabs(); ?>
+				<?php bp_profile_group_tabs(); ?>
 
-		</ul>
+			</ul>
+		<?php endif ;?>
 
 		<div class="clear"></div>
 
@@ -61,7 +63,7 @@ if ( bp_has_profile( 'profile_group_id=' . bp_get_current_profile_group_id() ) )
 		<input type="submit" name="profile-group-edit-submit" id="profile-group-edit-submit" value="<?php esc_attr_e( 'Save Changes', 'buddypress' ); ?> " />
 	</div>
 
-	<input type="hidden" name="field_ids" id="field_ids" value="<?php bp_the_profile_group_field_ids(); ?>" />
+	<input type="hidden" name="field_ids" id="field_ids" value="<?php bp_the_profile_field_ids(); ?>" />
 
 	<?php wp_nonce_field( 'bp_xprofile_edit' ); ?>
 
diff --git a/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/members/single/settings/general.php b/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/members/single/settings/general.php
index d5058fc12..8d27837f8 100644
--- a/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/members/single/settings/general.php
+++ b/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/members/single/settings/general.php
@@ -13,8 +13,9 @@
 	<input type="text" name="email" id="email" value="<?php echo bp_get_displayed_user_email(); ?>" class="settings-input" />
 
 	<label for="pass1"><?php _e( 'Change Password <span>(leave blank for no change)</span>', 'buddypress' ); ?></label>
-	<input type="password" name="pass1" id="pass1" size="16" value="" class="settings-input small" /> &nbsp;<?php _e( 'New Password', 'buddypress' ); ?><br />
-	<input type="password" name="pass2" id="pass2" size="16" value="" class="settings-input small" /> &nbsp;<?php _e( 'Repeat New Password', 'buddypress' ); ?>
+	<input type="password" name="pass1" id="pass1" size="16" value="" class="settings-input small password-entry" /> &nbsp;<?php _e( 'New Password', 'buddypress' ); ?><br />
+	<div id="pass-strength-result"></div>
+	<input type="password" name="pass2" id="pass2" size="16" value="" class="settings-input small password-entry-confirm" /> &nbsp;<?php _e( 'Repeat New Password', 'buddypress' ); ?>
 
 	<?php do_action( 'bp_core_general_settings_before_submit' ); ?>
 
diff --git a/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/members/single/settings/profile.php b/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/members/single/settings/profile.php
index 4e5f1b293..0fdae6f0f 100644
--- a/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/members/single/settings/profile.php
+++ b/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/members/single/settings/profile.php
@@ -46,7 +46,7 @@
 
 	<?php wp_nonce_field( 'bp_xprofile_settings' ); ?>
 
-	<input type="hidden" name="field_ids" id="field_ids" value="<?php bp_the_profile_group_field_ids(); ?>" />
+	<input type="hidden" name="field_ids" id="field_ids" value="<?php bp_the_profile_field_ids(); ?>" />
 
 </form>
 
diff --git a/wp-content/plugins/buddypress/bp-templates/bp-legacy/css/buddypress-rtl.css b/wp-content/plugins/buddypress/bp-templates/bp-legacy/css/buddypress-rtl.css
index 3dd99d0d8..b2f0b7d7b 100644
--- a/wp-content/plugins/buddypress/bp-templates/bp-legacy/css/buddypress-rtl.css
+++ b/wp-content/plugins/buddypress/bp-templates/bp-legacy/css/buddypress-rtl.css
@@ -115,7 +115,7 @@ Hello, this is the BuddyPress Legacy stylesheet.
 }
 #buddypress form#whats-new-form #whats-new-content {
 	margin-right: 55px;
-	padding: 0 0 20px 20px;
+	padding: 0 20px 20px 0;
 }
 #buddypress form#whats-new-form p.activity-greeting {
 	line-height: 0.5em;
@@ -250,7 +250,7 @@ body.activity-permalink #buddypress .activity-list li .activity-header > p {
 }
 #buddypress .activity-list .activity-content .activity-header img.avatar {
 	float: none !important;
-	margin: 0 0 -8px 5px !important;
+	margin: 0 5px -8px 0 !important;
 }
 #buddypress a.bp-secondary-action,
 #buddypress span.highlight {
@@ -293,14 +293,16 @@ body.activity-permalink #buddypress .activity-content blockquote {
 	margin-right: 1em;
 	white-space: nowrap;
 }
-#buddypress .activity-list li.load-more {
+#buddypress .activity-list li.load-more,
+#buddypress .activity-list li.load-newest {
 	background: #f0f0f0;
 	font-size: 110%;
 	margin: 15px 0;
 	padding: 10px 15px;
 	text-align: center;
 }
-#buddypress .activity-list li.load-more a {
+#buddypress .activity-list li.load-more a,
+#buddypress .activity-list li.load-newest a {
 	color: #4D4D4D;
 }
 
@@ -489,7 +491,8 @@ body.activity-permalink #buddypress div.activity-comments div.acomment-content {
 	float: left;
 	margin: -39px 0 0 0;
 }
-#buddypress div.dir-search input[type=text] {
+#buddypress div.dir-search input[type=text],
+#buddypress li.groups-members-search input[type=text] {
 	font-size: 90%;
 	padding: 1px 3px;
 }
@@ -517,15 +520,50 @@ body.activity-permalink #buddypress div.activity-comments div.acomment-content {
 	padding: 10px 15px;
 }
 #buddypress div#message.error p {
-	background-color: #ffa;
-	border: 1px solid #960;
+	background-color: #fdc;
+	border: 1px solid #a00;
 	clear: right;
-	color: #960;
+	color: #800;
 }
 #buddypress div#message.updated p {
 	background-color: #efc;
 	border: 1px solid #591;
-	color: #591;
+	color: #250;
+}
+#buddypress #pass-strength-result {
+	background-color: #eee;
+	border-color: #ddd;
+	border-style: solid;
+	border-width: 1px;
+	display: none;
+	margin: 5px 0 5px 5px;
+	padding: 5px;
+	text-align: center;
+	width: 150px;
+}
+#buddypress .standard-form #basic-details-section #pass-strength-result {
+	width: 35%;
+}
+#buddypress #pass-strength-result.error,
+#buddypress #pass-strength-result.bad {
+	background-color: #ffb78c;
+	border-color: #ff853c !important;
+	display: block;
+}
+#buddypress #pass-strength-result.good {
+	background-color: #ffec8b;
+	border-color: #fc0 !important;
+	display: block;
+}
+#buddypress #pass-strength-result.short {
+	background-color: #ffa0a0;
+	border-color: #f04040 !important;
+	display: block;
+}
+#buddypress #pass-strength-result.strong {
+	background-color: #c3ff88;
+	border-color: #8dff1c !important;
+	display: block;
 }
 #buddypress .standard-form#signup_form div div.error {
 	background: #faa;
@@ -584,7 +622,9 @@ body.activity-permalink #buddypress div.activity-comments div.acomment-content {
 #buddypress .standard-form select,
 #buddypress .standard-form input[type=password],
 #buddypress .dir-search input[type=search],
-#buddypress .dir-search input[type=text] {
+#buddypress .dir-search input[type=text],
+#buddypress .groups-members-search input[type=search],
+#buddypress .groups-members-search input[type=text] {
 	border: 1px solid #ccc;
 	background: #fafafa;
 	border-radius: 0;
@@ -604,9 +644,10 @@ body.activity-permalink #buddypress div.activity-comments div.acomment-content {
 	display: block;
 	font-weight: bold;
 	margin: 15px 0 5px 0;
+	width: auto;
 }
-#buddypress .standard-form div.checkbox label,
-#buddypress .standard-form div.radio label {
+#buddypress .standard-form div.checkbox label:nth-child(n+2),
+#buddypress .standard-form div.radio div label {
 	color: #888;
 	font-size: 100%;
 	font-weight: normal;
@@ -743,17 +784,17 @@ a.bp-title-button {
 	text-decoration: none;
 }
 
-#buddypress form.standard-form .right-menu {
+#buddypress form.standard-form .left-menu {
 	float: right;
 }
 
-#buddypress form.standard-form .right-menu #invite-list ul{
-	margin: 1%;
+#buddypress form.standard-form .left-menu #invite-list ul{
+	margin:1%;
 	list-style: none;
 }
 
-#buddypress form.standard-form .right-menu #invite-list ul li {
-	margin: 0 1% 0 0;
+#buddypress form.standard-form .left-menu #invite-list ul li {
+	margin:0 1% 0 0;
 }
 
 #buddypress form.standard-form .main-column {
@@ -762,12 +803,21 @@ a.bp-title-button {
 
 #buddypress form.standard-form .main-column ul#friend-list {
 	clear:none;
+	float: right;
 }
 
 #buddypress form.standard-form .main-column ul#friend-list h4 {
 	clear:none;
 }
 
+/* Overrides for embedded WP editors */
+#buddypress .wp-editor-wrap a.button,
+#buddypress .wp-editor-wrap button,
+#buddypress .wp-editor-wrap input[type=submit],
+#buddypress .wp-editor-wrap input[type=button],
+#buddypress .wp-editor-wrap input[type=reset] {
+	padding: 0 10px 1px;
+}
 /*--------------------------------------------------------------
 3.6 - Ajax Loading
 --------------------------------------------------------------*/
@@ -882,10 +932,22 @@ a.bp-title-button {
 	margin: 20px 0 0 0;
 	padding: 1px 0 0 0;
 }
-#buddypress table {
+#buddypress table.notifications,
+#buddypress table.notifications-settings,
+#buddypress table.profile-settings,
+#buddypress table.profile-fields,
+#buddypress table.wp-profile-fields,
+#buddypress table.messages-notices,
+#buddypress table.forum {
 	width: 100%;
 }
-#buddypress table thead tr {
+#buddypress table.notifications thead tr,
+#buddypress table.notifications-settings thead tr,
+#buddypress table.profile-settings thead tr,
+#buddypress table.profile-fields thead tr,
+#buddypress table.wp-profile-fields thead tr,
+#buddypress table.messages-notices thead tr,
+#buddypress table.forum thead tr {
 	background: #eaeaea;
 }
 #buddypress table#message-threads {
@@ -905,12 +967,28 @@ a.bp-title-button {
 #buddypress table.profile-fields p:last-child {
 	margin-top: 0;
 }
-#buddypress table tr td,
-#buddypress table tr th {
+#buddypress table.notifications tr td,
+#buddypress table.notifications-settings tr td,
+#buddypress table.profile-settings tr td,
+#buddypress table.profile-fields tr td,
+#buddypress table.wp-profile-fields tr td,
+#buddypress table.messages-notices tr td,
+#buddypress table.forum tr td,
+#buddypress table.notifications tr th,
+#buddypress table.notifications-settings tr th,
+#buddypress table.profile-fields tr th,
+#buddypress table.wp-profile-fields tr th,
+#buddypress table.messages-notices tr th,
+#buddypress table.forum tr th {
 	padding: 8px;
 	vertical-align: middle;
 }
-#buddypress table tr td.label {
+#buddypress table.notifications tr td.label,
+#buddypress table.notifications-settings tr td.label,
+#buddypress table.profile-fields tr td.label,
+#buddypress table.wp-profile-fields tr td.label,
+#buddypress table.messages-notices tr td.label,
+#buddypress table.forum tr td.label {
 	border-left: 1px solid #eaeaea;
 	font-weight: bold;
 	width: 25%;
@@ -926,7 +1004,13 @@ a.bp-title-button {
 #buddypress table.forum td {
 	text-align: center;
 }
-#buddypress table tr.alt td {
+#buddypress table.notifications tr.alt td,
+#buddypress table.notifications-settings tr.alt td,
+#buddypress table.profile-settings tr.alt td,
+#buddypress table.profile-fields tr.alt td,
+#buddypress table.wp-profile-fields tr.alt td,
+#buddypress table.messages-notices tr.alt td,
+#buddypress table.forum tr.alt td {
 	background: #f5f5f5;
 }
 #buddypress table.notification-settings {
@@ -936,11 +1020,14 @@ a.bp-title-button {
 #buddypress #groups-notification-settings {
 	margin-bottom: 0;
 }
+#buddypress table.notifications th.icon,
+#buddypress table.notifications td:first-child,
 #buddypress table.notification-settings th.icon,
 #buddypress table.notification-settings td:first-child {
 	display: none;
 }
-#buddypress table.notification-settings th.title {
+#buddypress table.notification-settings th.title,
+#buddypress table.profile-settings th.title {
 	width: 80%;
 }
 #buddypress table.notification-settings .yes,
@@ -1037,7 +1124,9 @@ a.bp-title-button {
 	font-weight: normal;
 	margin-top: 3px;
 	text-decoration: none;
-	background: #ffff00;
+	background-color: #ffd;
+	border: 1px solid #cb2;
+	color: #440;
 }
 #buddypress div#item-header {
 	overflow: hidden;
@@ -1246,7 +1335,7 @@ body.activity-permalink #buddypress ul.item-list li.activity-item {
 	background-color: #fff;
 }
 #buddypress div#item-nav ul li.loading a {
-	background-position: 88% 50%;
+	background-position: 12% 50%;
 }
 #buddypress div.item-list-tabs#object-nav {
 	margin-top: 0;
@@ -1303,7 +1392,7 @@ body.activity-permalink #buddypress ul.item-list li.activity-item {
 }
 #buddypress div#message-thread img.avatar {
 	float: right;
-	margin: 0 10px 0 0;
+	margin: 0 0 0 10px;
 	vertical-align: middle;
 }
 #buddypress div#message-thread strong {
@@ -1434,15 +1523,38 @@ body.register #buddypress div.page ul {
 	overflow: hidden;
 }
 
+.widget.buddypress #bp-login-widget-form label {
+	display: block;
+	margin: 1rem 0 .5rem;
+}
+
+.widget.buddypress #bp-login-widget-form #bp-login-widget-submit {
+	margin-left: 10px;
+}
+
+.widget.buddypress .bp-login-widget-user-avatar {
+	float: right;
+	width: 60px;
+}
+
+.widget.buddypress .bp-login-widget-user-links > div {
+	padding-right: 60px;
+}
+
+.widget.buddypress .bp-login-widget-user-links > div {
+	margin-bottom: .5rem;
+}
+
+.widget.buddypress .bp-login-widget-user-links > div.bp-login-widget-user-link a {
+	font-weight: bold;
+}
+
 /*--------------------------------------------------------------
 4.0 - Media Queries
 --------------------------------------------------------------*/
 /*--------------------------------------------------------------
 4.1 - Smartphones - landscape
 --------------------------------------------------------------*/
-@media screen and (max-device-width: 480px), screen and (-webkit-min-device-pixel-ratio: 2) {
-	-webkit-text-size-adjust: none;
-}
 @media only screen and (max-width: 480px ){
 	#buddypress div.dir-search {
 		float: left;
diff --git a/wp-content/plugins/buddypress/bp-templates/bp-legacy/css/buddypress-rtl.min.css b/wp-content/plugins/buddypress/bp-templates/bp-legacy/css/buddypress-rtl.min.css
new file mode 100644
index 000000000..7ff9b54f9
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-templates/bp-legacy/css/buddypress-rtl.min.css
@@ -0,0 +1,2 @@
+/*! buddypress - v2.1.0 - 2014-10-06 9:39:09 PM UTC - https://wordpress.org/plugins/buddypress/ */
+#buddypress div.pagination{background:0 0;border:none;color:#888;font-size:90%;margin:0;position:relative;display:block;float:right;width:100%;padding:10px 0}#buddypress div.pagination .pag-count{float:right;margin-right:10px}#buddypress div.pagination .pagination-links{float:left;margin-left:10px}#buddypress div.pagination .pagination-links a,#buddypress div.pagination .pagination-links span{font-size:90%;padding:0 5px}#buddypress div.pagination .pagination-links a:hover{font-weight:700}#buddypress noscript div.pagination{margin-bottom:15px}#buddypress #nav-above{display:none}#buddypress .paged #nav-above{display:block}#buddypress img.wp-smiley{border:none!important;clear:none!important;float:none!important;margin:0!important;padding:0!important}#buddypress .clear{clear:right}#buddypress #activity-stream{margin-top:-5px}#buddypress #activity-stream p{margin:5px 0}#buddypress #item-body form#whats-new-form{margin:0;padding:0}#buddypress .home-page form#whats-new-form{border-bottom:none;padding-bottom:0}#buddypress form#whats-new-form #whats-new-avatar{float:right}#buddypress form#whats-new-form #whats-new-content{margin-right:55px;padding:0 20px 20px 0}#buddypress form#whats-new-form p.activity-greeting{line-height:.5em;margin-bottom:15px;margin-right:75px}#buddypress form#whats-new-form textarea{background:#fff;color:#555;font-family:inherit;font-size:90%;height:20px;padding:6px;width:98%}body.no-js #buddypress form#whats-new-form textarea{height:50px}#buddypress form#whats-new-form #whats-new-options select{max-width:200px;margin-top:12px}#buddypress form#whats-new-form #whats-new-submit{float:left;margin-top:12px}#buddypress #whats-new-options{overflow:auto;height:0}body.no-js #buddypress #whats-new-options{height:auto}#buddypress #whats-new:focus{border-color:rgba(31,179,221,.9)!important;outline-color:rgba(31,179,221,.9)}#buddypress ul.activity-list li{overflow:hidden;padding:15px 0 0;list-style:none}#buddypress .activity-list .activity-avatar{float:right}#buddypress ul.item-list.activity-list li.has-comments{padding-bottom:15px}body.activity-permalink #buddypress ul.activity-list li.has-comments{padding-bottom:0}#buddypress .activity-list li.mini{font-size:80%;position:relative}#buddypress .activity-list li.mini .activity-avatar img.FB_profile_pic,#buddypress .activity-list li.mini .activity-avatar img.avatar{height:20px;margin-right:30px;width:20px}#buddypress .activity-permalink .activity-list li.mini .activity-avatar img.FB_profile_pic,#buddypress .activity-permalink .activity-list li.mini .activity-avatar img.avatar{height:auto;margin-right:0;width:auto}body.activity-permalink #buddypress .activity-list>li:first-child{padding-top:0}#buddypress .activity-list li .activity-content{position:relative}#buddypress .activity-list li.mini .activity-content p{margin:0}#buddypress .activity-list li.mini .activity-comments{clear:both;font-size:120%}body.activity-permalink #buddypress li.mini .activity-meta{margin-top:4px}#buddypress .activity-list li .activity-inreplyto{color:#888;font-size:80%}#buddypress .activity-list li .activity-inreplyto>p{margin:0;display:inline}#buddypress .activity-list li .activity-inreplyto blockquote,#buddypress .activity-list li .activity-inreplyto div.activity-inner{background:0 0;border:none;display:inline;margin:0;overflow:hidden;padding:0}#buddypress .activity-list .activity-content{margin:0 70px 0 0}body.activity-permalink #buddypress .activity-list li .activity-content{border:none;font-size:100%;line-height:150%;margin-right:170px;margin-left:0;padding:0}body.activity-permalink #buddypress .activity-list li .activity-header>p{margin:0;padding:5px 0 0}#buddypress .activity-list .activity-content .activity-header,#buddypress .activity-list .activity-content .comment-header{color:#888;line-height:220%}#buddypress .activity-header{margin-left:20px}#buddypress .acomment-meta a,#buddypress .activity-header a,#buddypress .comment-meta a{text-decoration:none}#buddypress .activity-list .activity-content .activity-header img.avatar{float:none!important;margin:0 5px -8px 0!important}#buddypress a.bp-secondary-action,#buddypress span.highlight{font-size:80%;padding:0;margin-left:5px;text-decoration:none}#buddypress .activity-list .activity-content .activity-inner,#buddypress .activity-list .activity-content blockquote{margin:10px 0 5px 10px;overflow:hidden}#buddypress .activity-list li.new_forum_post .activity-content .activity-inner,#buddypress .activity-list li.new_forum_topic .activity-content .activity-inner{border-right:2px solid #EAEAEA;margin-right:5px;padding-right:10px}body.activity-permalink #buddypress .activity-content .activity-inner,body.activity-permalink #buddypress .activity-content blockquote{margin-right:0;margin-top:5px}#buddypress .activity-inner>p{word-wrap:break-word}#buddypress .activity-inner>.activity-inner,#buddypress .activity-inner>blockquote{margin:0}#buddypress .activity-list .activity-content img.thumbnail{border:2px solid #eee;float:right;margin:0 0 5px 10px}#buddypress .activity-read-more{margin-right:1em;white-space:nowrap}#buddypress .activity-list li.load-more,#buddypress .activity-list li.load-newest{background:#f0f0f0;font-size:110%;margin:15px 0;padding:10px 15px;text-align:center}#buddypress .activity-list li.load-more a,#buddypress .activity-list li.load-newest a{color:#4D4D4D}#buddypress div.activity-meta{margin:18px 0 0}body.activity-permalink #buddypress div.activity-meta{margin-bottom:6px}#buddypress div.activity-meta a{padding:4px 8px}#buddypress a.activity-time-since{color:#aaa;text-decoration:none}#buddypress a.activity-time-since:hover{color:#888;text-decoration:underline}#buddypress #reply-title small a,#buddypress a.bp-primary-action{font-size:80%;margin-left:5px;text-decoration:none}#buddypress #reply-title small a span,#buddypress a.bp-primary-action span{background:#999;color:#fff;font-size:90%;margin-right:2px;padding:0 5px}#buddypress #reply-title small a:hover span,#buddypress a.bp-primary-action:hover span{background:#555;color:#fff}#buddypress div.activity-comments{margin:0 70px 0 0;overflow:hidden;position:relative;width:auto;clear:both}body.activity-permalink #buddypress div.activity-comments{background:0 0;margin-right:170px;width:auto}#buddypress div.activity-comments>ul{padding:0 10px 0 0}#buddypress div.activity-comments ul,#buddypress div.activity-comments ul li{border:none;list-style:none}#buddypress div.activity-comments ul{clear:both;margin:0}#buddypress div.activity-comments ul li{border-top:1px solid #eee;padding:10px 0 0}body.activity-permalink #buddypress .activity-list li.mini .activity-comments{clear:none;margin-top:0}body.activity-permalink #buddypress div.activity-comments ul li{border-width:1px;padding:10px 0 0}#buddypress div.activity-comments>ul>li:first-child{border-top:none}#buddypress div.activity-comments ul li:last-child{margin-bottom:0}#buddypress div.activity-comments ul li>ul{margin-right:30px;margin-top:0;padding-right:10px}body.activity-permalink #buddypress div.activity-comments ul li>ul{margin-top:10px}body.activity-permalink #buddypress div.activity-comments>ul{padding:0 15px 0 10px}#buddypress div.activity-comments div.acomment-avatar img{border-width:1px;float:right;height:25px;margin-left:10px;width:25px}#buddypress div.activity-comments div.acomment-content{font-size:80%;margin:5px 40px 0 0}#buddypress div.acomment-content .activity-delete-link,#buddypress div.acomment-content .comment-header,#buddypress div.acomment-content .time-since{display:none}body.activity-permalink #buddypress div.activity-comments div.acomment-content{font-size:90%}#buddypress div.activity-comments div.acomment-meta{color:#888;font-size:80%}#buddypress div.activity-comments form.ac-form{display:none;padding:10px}#buddypress div.activity-comments li form.ac-form{margin-left:15px;clear:both}#buddypress div.activity-comments form.root{margin-right:0}#buddypress div.activity-comments div#message{margin-top:15px;margin-bottom:0}#buddypress div.activity-comments form .ac-textarea{background:#fff;border:1px inset #ccc;margin-bottom:10px;padding:8px}#buddypress div.activity-comments form textarea{border:none;background:0 0;box-shadow:none;outline:0;color:#555;font-family:inherit;font-size:100%;height:60px;padding:0;margin:0;width:100%}#buddypress div.activity-comments form input{margin-top:5px}#buddypress div.activity-comments form div.ac-reply-avatar{float:right}#buddypress div.ac-reply-avatar img{border:1px solid #eee}#buddypress div.activity-comments form div.ac-reply-content{color:#888;margin-right:50px;padding-right:15px}#buddypress div.activity-comments form div.ac-reply-content a{text-decoration:none}#buddypress .acomment-options{float:right;margin:5px 40px 5px 0}#buddypress .acomment-options a{color:#999}#buddypress .acomment-options a:hover{color:inherit}#buddypress div.dir-search{float:left;margin:-39px 0 0}#buddypress div.dir-search input[type=text],#buddypress li.groups-members-search input[type=text]{font-size:90%;padding:1px 3px}#buddypress .dir-form{clear:both}#buddypress div#message{margin:0 0 15px}#buddypress #message.info{margin-bottom:0}#buddypress div#message.updated{clear:both}#buddypress div#message p,#sitewide-notice p{font-size:90%;display:block;padding:10px 15px}#buddypress div#message.error p{background-color:#fdc;border:1px solid #a00;clear:right;color:#800}#buddypress div#message.updated p{background-color:#efc;border:1px solid #591;color:#250}#buddypress #pass-strength-result{background-color:#eee;border-color:#ddd;border-style:solid;border-width:1px;display:none;margin:5px 0 5px 5px;padding:5px;text-align:center;width:150px}#buddypress .standard-form #basic-details-section #pass-strength-result{width:35%}#buddypress #pass-strength-result.bad,#buddypress #pass-strength-result.error{background-color:#ffb78c;border-color:#ff853c!important;display:block}#buddypress #pass-strength-result.good{background-color:#ffec8b;border-color:#fc0!important;display:block}#buddypress #pass-strength-result.short{background-color:#ffa0a0;border-color:#f04040!important;display:block}#buddypress #pass-strength-result.strong{background-color:#c3ff88;border-color:#8dff1c!important;display:block}#buddypress .standard-form#signup_form div div.error{background:#faa;color:#a00;margin:0 0 10px;padding:6px;width:90%}#buddypress div.accept,#buddypress div.reject{float:right;margin-right:10px}#buddypress ul.button-nav li{float:right;margin:0 0 10px 10px;list-style:none}#buddypress ul.button-nav li.current a{font-weight:700}#sitewide-notice #message{right:2%;position:fixed;top:1em;width:96%;z-index:9999}#sitewide-notice.admin-bar-on #message{top:3.3em}#sitewide-notice strong{display:block;margin-bottom:-1em}#buddypress .dir-search input[type=search],#buddypress .dir-search input[type=text],#buddypress .groups-members-search input[type=search],#buddypress .groups-members-search input[type=text],#buddypress .standard-form input[type=color],#buddypress .standard-form input[type=date],#buddypress .standard-form input[type=datetime-local],#buddypress .standard-form input[type=datetime],#buddypress .standard-form input[type=email],#buddypress .standard-form input[type=month],#buddypress .standard-form input[type=number],#buddypress .standard-form input[type=password],#buddypress .standard-form input[type=range],#buddypress .standard-form input[type=search],#buddypress .standard-form input[type=tel],#buddypress .standard-form input[type=text],#buddypress .standard-form input[type=time],#buddypress .standard-form input[type=url],#buddypress .standard-form input[type=week],#buddypress .standard-form select,#buddypress .standard-form textarea{border:1px solid #ccc;background:#fafafa;border-radius:0;color:#888;font:inherit;font-size:100%;padding:6px}#buddypress .standard-form select{padding:3px}#buddypress .standard-form input[type=password]{margin-bottom:5px}#buddypress .standard-form label,#buddypress .standard-form span.label{display:block;font-weight:700;margin:15px 0 5px;width:auto}#buddypress .standard-form div.checkbox label:nth-child(n+2),#buddypress .standard-form div.radio div label{color:#888;font-size:100%;font-weight:400;margin:5px 0 0}#buddypress .standard-form#sidebar-login-form label{margin-top:5px}#buddypress .standard-form input[type=text]{width:75%}#buddypress .standard-form#sidebar-login-form input[type=password],#buddypress .standard-form#sidebar-login-form input[type=text]{padding:4px;width:95%}#buddypress .standard-form #basic-details-section input[type=password],#buddypress .standard-form #blog-details-section input#signup_blog_url{width:35%}#buddypress #commentform input[type=text],#buddypress #commentform textarea,#buddypress .form-allowed-tags,#buddypress .standard-form#signup_form input[type=text],#buddypress .standard-form#signup_form textarea{width:90%}#buddypress .standard-form#signup_form div.submit{float:left}#buddypress div#signup-avatar img{margin:0 0 10px 15px}#buddypress .standard-form textarea{width:75%;height:120px}#buddypress .standard-form textarea#message_content{height:200px}#buddypress .standard-form#send-reply textarea{width:97.5%}#buddypress .standard-form p.description{color:#888;font-size:80%;margin:5px 0}#buddypress .standard-form div.submit{clear:both;padding:15px 0 0}#buddypress .standard-form p.submit{margin-bottom:0;padding:15px 0 0}#buddypress .standard-form div.submit input{margin-left:15px}#buddypress .standard-form div.radio ul{margin:10px 38px 15px 0;list-style:disc}#buddypress .standard-form div.radio ul li{margin-bottom:5px}#buddypress .standard-form a.clear-value{display:block;margin-top:5px;outline:0}#buddypress .standard-form #basic-details-section,#buddypress .standard-form #blog-details-section,#buddypress .standard-form #profile-details-section{float:right;width:48%}#buddypress .standard-form #profile-details-section{float:left}#buddypress .standard-form #blog-details-section{clear:right}#buddypress .standard-form input:focus,#buddypress .standard-form select:focus,#buddypress .standard-form textarea:focus{background:#fafafa;color:#555}#buddypress form#send-invite-form{margin-top:20px}#buddypress div#invite-list{background:#f5f5f5;height:400px;margin:0 0 10px;overflow:auto;padding:5px;width:160px}#buddypress .comment-reply-link,#buddypress a.button,#buddypress button,#buddypress div.generic-button a,#buddypress input[type=button],#buddypress input[type=reset],#buddypress input[type=submit],#buddypress ul.button-nav li a,a.bp-title-button{background:#fff;border:1px solid #ccc;color:#777;font-size:.8rem;cursor:pointer;outline:0;padding:4px 10px;text-align:center;text-decoration:none}#buddypress .comment-reply-link:hover,#buddypress a.button:focus,#buddypress a.button:hover,#buddypress button:hover,#buddypress div.generic-button a:hover,#buddypress input[type=button]:hover,#buddypress input[type=reset]:hover,#buddypress input[type=submit]:hover,#buddypress ul.button-nav li a:hover,#buddypress ul.button-nav li.current a{background:#ededed;border:1px solid #bbb;color:#555;outline:0;text-decoration:none}#buddypress form.standard-form .left-menu{float:right}#buddypress form.standard-form .left-menu #invite-list ul{margin:1%;list-style:none}#buddypress form.standard-form .left-menu #invite-list ul li{margin:0 1% 0 0}#buddypress form.standard-form .main-column{margin-right:190px}#buddypress form.standard-form .main-column ul#friend-list{clear:none;float:right}#buddypress form.standard-form .main-column ul#friend-list h4{clear:none}#buddypress .wp-editor-wrap a.button,#buddypress .wp-editor-wrap button,#buddypress .wp-editor-wrap input[type=button],#buddypress .wp-editor-wrap input[type=reset],#buddypress .wp-editor-wrap input[type=submit]{padding:0 10px 1px}#buddypress a.loading,#buddypress input.loading{-webkit-animation:loader-pulsate .5s infinite ease-in-out alternate;-moz-animation:loader-pulsate .5s infinite ease-in-out alternate;border-color:#aaa}@-webkit-keyframes loader-pulsate{from{border-color:#aaa;-webkit-box-shadow:0 0 6px #ccc;box-shadow:0 0 6px #ccc}to{border-color:#ccc;-webkit-box-shadow:0 0 6px #f8f8f8;box-shadow:0 0 6px #f8f8f8}}@-moz-keyframes loader-pulsate{from{border-color:#aaa;-moz-box-shadow:0 0 6px #ccc;box-shadow:0 0 6px #ccc}to{border-color:#ccc;-moz-box-shadow:0 0 6px #f8f8f8;box-shadow:0 0 6px #f8f8f8}}#buddypress a.loading:hover,#buddypress input.loading:hover{color:#777}#buddypress a.disabled,#buddypress button.disabled,#buddypress button.pending,#buddypress div.pending a,#buddypress input[type=button].disabled,#buddypress input[type=button].pending,#buddypress input[type=reset].disabled,#buddypress input[type=reset].pending,#buddypress input[type=submit].disabled,#buddypress input[type=submit].pending{border-color:#eee;color:#bbb;cursor:default}#buddypress a.disabled:hover,#buddypress button.disabled:hover,#buddypress button.pending:hover,#buddypress div.pending a:hover,#buddypress input[type=button]:hover.disabled,#buddypress input[type=button]:hover.pending,#buddypress input[type=reset]:hover.disabled,#buddypress input[type=reset]:hover.pending,#buddypress input[type=submit]:hover.disabled,#buddypress input[type=submit]:hover.pending{border-color:#eee;color:#bbb}#buddypress ul#topic-post-list{margin:0;width:auto}#buddypress ul#topic-post-list li{padding:15px;position:relative}#buddypress ul#topic-post-list li.alt{background:#f5f5f5}#buddypress ul#topic-post-list li div.poster-meta{color:#888;margin-bottom:10px}#buddypress ul#topic-post-list li div.post-content{margin-right:54px}#buddypress div.topic-tags{font-size:80%}#buddypress div.admin-links{color:#888;font-size:80%;position:absolute;top:15px;left:25px}#buddypress div#topic-meta{margin:0;padding:5px 19px 30px;position:relative}#buddypress div#topic-meta div.admin-links{left:19px;top:-36px}#buddypress div#topic-meta h3{margin:5px 0}#buddypress div#new-topic-post{display:none;margin:20px 0 0;padding:1px 0 0}#buddypress table.forum,#buddypress table.messages-notices,#buddypress table.notifications,#buddypress table.notifications-settings,#buddypress table.profile-fields,#buddypress table.profile-settings,#buddypress table.wp-profile-fields{width:100%}#buddypress table.forum thead tr,#buddypress table.messages-notices thead tr,#buddypress table.notifications thead tr,#buddypress table.notifications-settings thead tr,#buddypress table.profile-fields thead tr,#buddypress table.profile-settings thead tr,#buddypress table.wp-profile-fields thead tr{background:#eaeaea}#buddypress table#message-threads{clear:both;margin:0;width:auto}#buddypress table.profile-fields{margin-bottom:20px}#buddypress table.profile-fields:last-child{margin-bottom:0}#buddypress table.profile-fields p{margin:0}#buddypress table.profile-fields p:last-child{margin-top:0}#buddypress table.forum tr td,#buddypress table.forum tr th,#buddypress table.messages-notices tr td,#buddypress table.messages-notices tr th,#buddypress table.notifications tr td,#buddypress table.notifications tr th,#buddypress table.notifications-settings tr td,#buddypress table.notifications-settings tr th,#buddypress table.profile-fields tr td,#buddypress table.profile-fields tr th,#buddypress table.profile-settings tr td,#buddypress table.wp-profile-fields tr td,#buddypress table.wp-profile-fields tr th{padding:8px;vertical-align:middle}#buddypress table.forum tr td.label,#buddypress table.messages-notices tr td.label,#buddypress table.notifications tr td.label,#buddypress table.notifications-settings tr td.label,#buddypress table.profile-fields tr td.label,#buddypress table.wp-profile-fields tr td.label{border-left:1px solid #eaeaea;font-weight:700;width:25%}#buddypress table tr td.thread-info p{margin:0}#buddypress table tr td.thread-info p.thread-excerpt{color:#888;font-size:80%;margin-top:3px}#buddypress table.forum td{text-align:center}#buddypress table.forum tr.alt td,#buddypress table.messages-notices tr.alt td,#buddypress table.notifications tr.alt td,#buddypress table.notifications-settings tr.alt td,#buddypress table.profile-fields tr.alt td,#buddypress table.profile-settings tr.alt td,#buddypress table.wp-profile-fields tr.alt td{background:#f5f5f5}#buddypress table.notification-settings{margin-bottom:20px;text-align:right}#buddypress #groups-notification-settings{margin-bottom:0}#buddypress table.notification-settings td:first-child,#buddypress table.notification-settings th.icon,#buddypress table.notifications td:first-child,#buddypress table.notifications th.icon{display:none}#buddypress table.notification-settings th.title,#buddypress table.profile-settings th.title{width:80%}#buddypress table.notification-settings .no,#buddypress table.notification-settings .yes{text-align:center;width:40px}#buddypress table.forum{margin:0;width:auto;clear:both}#buddypress table.forum tr.sticky td{font-size:110%;background:#fff9db;border-top:1px solid #ffe8c4;border-bottom:1px solid #ffe8c4}#buddypress table.forum tr.closed td.td-title{padding-right:35px}#buddypress table.forum td p.topic-text{color:#888;font-size:100%}#buddypress table.forum tr>td:first-child,#buddypress table.forum tr>th:first-child{padding-right:15px}#buddypress table.forum tr>td:last-child,#buddypress table.forum tr>th:last-child{padding-left:15px}#buddypress table.forum td.td-group,#buddypress table.forum td.td-poster,#buddypress table.forum td.td-title,#buddypress table.forum tr th#th-group,#buddypress table.forum tr th#th-poster,#buddypress table.forum tr th#th-title{text-align:right}#buddypress table.forum tr td.td-title a.topic-title{font-size:110%}#buddypress table.forum td.td-freshness{white-space:nowrap}#buddypress table.forum td.td-freshness span.time-since{font-size:80%;color:#888}#buddypress table.forum td img.avatar{float:none;margin:0 0 -8px 5px}#buddypress table.forum td.td-group,#buddypress table.forum td.td-poster{min-width:140px}#buddypress table.forum th#th-title{width:80%}#buddypress table.forum th#th-freshness{width:25%}#buddypress table.forum th#th-postcount{width:15%}#buddypress table.forum p.topic-meta{font-size:80%;margin:5px 0 0}#buddypress .item-body{margin:20px 0}#buddypress span.activity{display:inline-block;font-size:80%;opacity:.8;padding:0}#buddypress span.user-nicename{color:#777;display:inline-block;font-size:120%;font-weight:700}#buddypress div#message p,#sitewide-notice p{font-weight:400;margin-top:3px;text-decoration:none;background-color:#ffd;border:1px solid #cb2;color:#440}#buddypress div#item-header{overflow:hidden}#buddypress div#item-header div#item-header-content{float:right;margin-right:0}#buddypress div#item-header h2{line-height:120%;margin:0 0 15px}#buddypress div#item-header h2 a{color:#777;text-decoration:none}#buddypress div#item-header img.avatar{float:right;margin:0 0 19px 15px}#buddypress div#item-header h2{margin-bottom:5px}#buddypress div#item-header h2 span.highlight{font-size:60%;font-weight:400;line-height:170%;vertical-align:middle;display:inline-block}#buddypress div#item-header h2 span.highlight span{background:#a1dcfa;color:#fff;cursor:pointer;font-weight:700;font-size:80%;margin-bottom:2px;padding:1px 4px;position:relative;left:-2px;top:-2px;vertical-align:middle}#buddypress div#item-header div#item-meta{font-size:80%;color:#aaa;overflow:hidden;margin:15px 0 5px;padding-bottom:10px}#buddypress div#item-header div#item-actions{float:left;margin:0 15px 15px 0;text-align:left;width:20%}#buddypress div#item-header div#item-actions h3{margin:0 0 5px}#buddypress div#item-header ul{margin-bottom:15px;overflow:hidden}#buddypress div#item-header ul h5,#buddypress div#item-header ul hr,#buddypress div#item-header ul span{display:none}#buddypress div#item-header ul li{float:left;list-style:none}#buddypress div#item-header ul img.avatar,#buddypress div#item-header ul.avatars img.avatar{height:30px;margin:2px;width:30px}#buddypress div#item-header a.button,#buddypress div#item-header div.generic-button{float:right;margin:10px 0 0 10px}#buddypress div#item-header div#message.info{line-height:80%}#buddypress ul.item-list{border-top:1px solid #eaeaea;width:100%;list-style:none;clear:both;margin:0;padding:0}body.activity-permalink #buddypress ul.item-list,body.activity-permalink #buddypress ul.item-list li.activity-item{border:none}#buddypress ul.item-list li{border-bottom:1px solid #eaeaea;padding:15px 0;margin:0;position:relative;list-style:none}#buddypress ul.single-line li{border:none}#buddypress ul.item-list li img.avatar{float:right;margin:0 0 0 10px}#buddypress ul.item-list li div.item-title,#buddypress ul.item-list li h4{font-weight:400;font-size:90%;margin:0;width:75%}#buddypress ul.item-list li div.item-title span{color:#999;font-size:80%}#buddypress ul.item-list li div.item-desc{color:#888;font-size:80%;margin:10px 60px 0 0;width:50%}#buddypress ul.item-list li div.action{position:absolute;top:15px;left:0;text-align:left}#buddypress ul.item-list li div.meta{color:#888;font-size:80%;margin-top:10px}#buddypress ul.item-list li h5 span.small{float:left;font-size:80%;font-weight:400}#buddypress div.item-list-tabs{background:0 0;clear:right;overflow:hidden}#buddypress div.item-list-tabs ul{margin:0;padding:0}#buddypress div.item-list-tabs ul li{float:right;margin:0;list-style:none}#buddypress div.item-list-tabs#subnav ul li{margin-top:0}#buddypress div.item-list-tabs ul li.last{float:left;margin:7px 0 0}#buddypress div.item-list-tabs#subnav ul li.last{margin-top:4px}#buddypress div.item-list-tabs ul li.last select{max-width:175px}#buddypress div.item-list-tabs ul li a,#buddypress div.item-list-tabs ul li span{display:block;padding:5px 10px;text-decoration:none}#buddypress div.item-list-tabs ul li a span{background:#eee;border-radius:50%;border:1px solid #ccc;color:#999;display:inline;font-size:70%;margin-right:2px;padding:3px 6px;text-align:center;vertical-align:middle}#buddypress div.item-list-tabs ul li.current a,#buddypress div.item-list-tabs ul li.selected a{background-color:#eee;color:#555;opacity:.8;font-weight:700}#buddypress div.item-list-tabs ul li a:hover span,#buddypress div.item-list-tabs ul li.current a span,#buddypress div.item-list-tabs ul li.selected a span{background-color:#eee}#buddypress div.item-list-tabs ul li.current a span,#buddypress div.item-list-tabs ul li.selected a span{background-color:#fff}#buddypress div#item-nav ul li.loading a{background-position:12% 50%}#buddypress div.item-list-tabs#object-nav{margin-top:0}#buddypress div.item-list-tabs#subnav{background:0 0;margin:10px 0;overflow:hidden}#buddypress #admins-list li,#buddypress #members-list li,#buddypress #mods-list li{overflow:auto;list-style:none}#buddypress table#message-threads tr.unread td{background:#fff9db;border-top:1px solid #ffe8c4;border-bottom:1px solid #ffe8c4;font-weight:700}#buddypress li span.unread-count,#buddypress tr.unread span.unread-count{background:#d00;color:#fff;font-weight:700;padding:2px 8px}#buddypress div.item-list-tabs ul li a span.unread-count{padding:1px 6px;color:#fff}#buddypress div.messages-options-nav{background:#eee;font-size:80%;margin:0;padding:5px 15px;text-align:left}#buddypress div#message-thread div.message-box{margin:0;padding:15px}#buddypress div#message-thread div.alt{background:#f4f4f4}#buddypress div#message-thread p#message-recipients{margin:10px 0 20px}#buddypress div#message-thread img.avatar{float:right;margin:0 0 0 10px;vertical-align:middle}#buddypress div#message-thread strong{font-size:100%;margin:0}#buddypress div#message-thread strong a{text-decoration:none}#buddypress div#message-thread strong span.activity{margin-top:4px}#buddypress div#message-thread div.message-metadata{overflow:hidden}#buddypress div#message-thread div.message-content{margin-right:45px}#buddypress div#message-thread div.message-options{text-align:left}#buddypress #message-threads img.avatar{max-width:none}#buddypress div.message-search{float:left;margin:0 20px}#buddypress div.profile h4{margin-bottom:auto;margin-top:15px}#buddypress #profile-edit-form ul.button-nav{margin-top:15px}body.no-js #buddypress .field-visibility-settings-close,body.no-js #buddypress .field-visibility-settings-toggle{display:none}#buddypress .field-visibility-settings{display:none;margin-top:10px}body.no-js #buddypress .field-visibility-settings{display:block}#buddypress .current-visibility-level{font-weight:700;font-style:normal}#buddypress .field-visibility-settings,#buddypress .field-visibility-settings-notoggle,#buddypress .field-visibility-settings-toggle{color:#888}#buddypress .field-visibility-settings a,#buddypress .field-visibility-settings-toggle a{font-size:80%}body.register #buddypress div.page ul{list-style:none}#buddypress .standard-form .field-visibility-settings label{margin:0;font-weight:400}#buddypress .field-visibility-settings legend,#buddypress .field-visibility-settings-toggle{font-style:italic}#buddypress .field-visibility-settings .radio{list-style:none;margin-bottom:0}#buddypress .field-visibility select{margin:0}.widget.buddypress div.item-avatar img.avatar{float:right;margin:0 0 15px 10px}.widget.buddypress span.activity{display:inline-block;font-size:80%;opacity:.8;padding:0}.widget.buddypress div.item-options{font-size:90%;margin:0 0 1em;padding:1em 0}.widget.buddypress div.item{margin:0 0 1em}.widget.buddypress div.item-content,.widget.buddypress div.item-meta{font-size:11px;margin-right:38px}.widget.buddypress ul.item-list img.avatar{height:20px;margin-left:10px;width:20px}.widget.buddypress div.item-avatar img{height:40px;margin:1px;width:40px}.widget.buddypress div.avatar-block{overflow:hidden}.widget.buddypress #bp-login-widget-form label{display:block;margin:1rem 0 .5rem}.widget.buddypress #bp-login-widget-form #bp-login-widget-submit{margin-left:10px}.widget.buddypress .bp-login-widget-user-avatar{float:right;width:60px}.widget.buddypress .bp-login-widget-user-links>div{padding-right:60px;margin-bottom:.5rem}.widget.buddypress .bp-login-widget-user-links>div.bp-login-widget-user-link a{font-weight:700}@media only screen and (max-width:480px){#buddypress div.dir-search{float:left;margin-top:-50px;text-align:left}#buddypress div.dir-search input[type=text]{margin-bottom:1em;width:50%}a.bp-title-button{margin-right:10px}#buddypress form.standard-form .main-column div.action{position:relative;margin-bottom:1em}#buddypress form.standard-form .main-column ul#friend-list h4{width:100%}}@media only screen and (max-width:320px){#buddypress div.dir-search{clear:right;float:right;margin-top:0;text-align:right}#buddypress li#groups-order-select{clear:right;float:right}#buddypress ul.item-list li div.action{clear:right;float:right;margin-top:0;margin-right:70px;position:relative;top:0;left:0;text-align:right}#buddypress ul.item-list li div.item-desc{clear:right;float:right;margin:10px 0 0;width:auto}#buddypress li div.item{margin-right:70px;width:auto}#buddypress ul.item-list li div.meta{margin-top:0}#buddypress .item-desc p{margin:0 0 10px}#buddypress div.pagination .pag-count{margin-right:0}}@media only screen and (max-width:240px){#buddypress div.dir-search{float:right;margin:0}#buddypress div.dir-search input[type=text]{width:50%}#buddypress li#groups-order-select{float:right}#buddypress ul.item-list li img.avatar{width:30px;height:auto}#buddypress li div.item,#buddypress ul.item-list li div.action{margin-right:45px}h1 a.bp-title-button{clear:right;float:right;margin:10px 0 20px}}
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-templates/bp-legacy/css/buddypress.css b/wp-content/plugins/buddypress/bp-templates/bp-legacy/css/buddypress.css
index 36a16c7eb..35ebe0bc4 100644
--- a/wp-content/plugins/buddypress/bp-templates/bp-legacy/css/buddypress.css
+++ b/wp-content/plugins/buddypress/bp-templates/bp-legacy/css/buddypress.css
@@ -530,6 +530,41 @@ body.activity-permalink #buddypress div.activity-comments div.acomment-content {
 	border: 1px solid #591;
 	color: #250;
 }
+#buddypress #pass-strength-result {
+	background-color: #eee;
+	border-color: #ddd;
+	border-style: solid;
+	border-width: 1px;
+	display: none;
+	margin: 5px 5px 5px 0;
+	padding: 5px;
+	text-align: center;
+	width: 150px;
+}
+#buddypress .standard-form #basic-details-section #pass-strength-result {
+	width: 35%;
+}
+#buddypress #pass-strength-result.error,
+#buddypress #pass-strength-result.bad {
+	background-color: #ffb78c;
+	border-color: #ff853c !important;
+	display: block;
+}
+#buddypress #pass-strength-result.good {
+	background-color: #ffec8b;
+	border-color: #fc0 !important;
+	display: block;
+}
+#buddypress #pass-strength-result.short {
+	background-color: #ffa0a0;
+	border-color: #f04040 !important;
+	display: block;
+}
+#buddypress #pass-strength-result.strong {
+	background-color: #c3ff88;
+	border-color: #8dff1c !important;
+	display: block;
+}
 #buddypress .standard-form#signup_form div div.error {
 	background: #faa;
 	color: #a00;
@@ -609,6 +644,7 @@ body.activity-permalink #buddypress div.activity-comments div.acomment-content {
 	display: block;
 	font-weight: bold;
 	margin: 15px 0 5px 0;
+	width: auto;
 }
 #buddypress .standard-form div.checkbox label:nth-child(n+2),
 #buddypress .standard-form div.radio div label {
@@ -1091,7 +1127,6 @@ a.bp-title-button {
 	background-color: #ffd;
 	border: 1px solid #cb2;
 	color: #440;
-	
 }
 #buddypress div#item-header {
 	overflow: hidden;
@@ -1520,9 +1555,6 @@ body.register #buddypress div.page ul {
 /*--------------------------------------------------------------
 4.1 - Smartphones - landscape
 --------------------------------------------------------------*/
-@media screen and (max-device-width: 480px), screen and (-webkit-min-device-pixel-ratio: 2) {
-	-webkit-text-size-adjust: none;
-}
 @media only screen and (max-width: 480px ){
 	#buddypress div.dir-search {
 		float: right;
diff --git a/wp-content/plugins/buddypress/bp-templates/bp-legacy/css/buddypress.min.css b/wp-content/plugins/buddypress/bp-templates/bp-legacy/css/buddypress.min.css
new file mode 100644
index 000000000..5a953e9f5
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-templates/bp-legacy/css/buddypress.min.css
@@ -0,0 +1,2 @@
+/*! buddypress - v2.1.0 - 2014-10-06 9:39:09 PM UTC - https://wordpress.org/plugins/buddypress/ */
+#buddypress div.pagination{background:0 0;border:none;color:#888;font-size:90%;margin:0;position:relative;display:block;float:left;width:100%;padding:10px 0}#buddypress div.pagination .pag-count{float:left;margin-left:10px}#buddypress div.pagination .pagination-links{float:right;margin-right:10px}#buddypress div.pagination .pagination-links a,#buddypress div.pagination .pagination-links span{font-size:90%;padding:0 5px}#buddypress div.pagination .pagination-links a:hover{font-weight:700}#buddypress noscript div.pagination{margin-bottom:15px}#buddypress #nav-above{display:none}#buddypress .paged #nav-above{display:block}#buddypress img.wp-smiley{border:none!important;clear:none!important;float:none!important;margin:0!important;padding:0!important}#buddypress .clear{clear:left}#buddypress #activity-stream{margin-top:-5px}#buddypress #activity-stream p{margin:5px 0}#buddypress #item-body form#whats-new-form{margin:0;padding:0}#buddypress .home-page form#whats-new-form{border-bottom:none;padding-bottom:0}#buddypress form#whats-new-form #whats-new-avatar{float:left}#buddypress form#whats-new-form #whats-new-content{margin-left:55px;padding:0 0 20px 20px}#buddypress form#whats-new-form p.activity-greeting{line-height:.5em;margin-bottom:15px;margin-left:75px}#buddypress form#whats-new-form textarea{background:#fff;color:#555;font-family:inherit;font-size:90%;height:20px;padding:6px;width:98%}body.no-js #buddypress form#whats-new-form textarea{height:50px}#buddypress form#whats-new-form #whats-new-options select{max-width:200px;margin-top:12px}#buddypress form#whats-new-form #whats-new-submit{float:right;margin-top:12px}#buddypress #whats-new-options{overflow:auto;height:0}body.no-js #buddypress #whats-new-options{height:auto}#buddypress #whats-new:focus{border-color:rgba(31,179,221,.9)!important;outline-color:rgba(31,179,221,.9)}#buddypress ul.activity-list li{overflow:hidden;padding:15px 0 0;list-style:none}#buddypress .activity-list .activity-avatar{float:left}#buddypress ul.item-list.activity-list li.has-comments{padding-bottom:15px}body.activity-permalink #buddypress ul.activity-list li.has-comments{padding-bottom:0}#buddypress .activity-list li.mini{font-size:80%;position:relative}#buddypress .activity-list li.mini .activity-avatar img.FB_profile_pic,#buddypress .activity-list li.mini .activity-avatar img.avatar{height:20px;margin-left:30px;width:20px}#buddypress .activity-permalink .activity-list li.mini .activity-avatar img.FB_profile_pic,#buddypress .activity-permalink .activity-list li.mini .activity-avatar img.avatar{height:auto;margin-left:0;width:auto}body.activity-permalink #buddypress .activity-list>li:first-child{padding-top:0}#buddypress .activity-list li .activity-content{position:relative}#buddypress .activity-list li.mini .activity-content p{margin:0}#buddypress .activity-list li.mini .activity-comments{clear:both;font-size:120%}body.activity-permalink #buddypress li.mini .activity-meta{margin-top:4px}#buddypress .activity-list li .activity-inreplyto{color:#888;font-size:80%}#buddypress .activity-list li .activity-inreplyto>p{margin:0;display:inline}#buddypress .activity-list li .activity-inreplyto blockquote,#buddypress .activity-list li .activity-inreplyto div.activity-inner{background:0 0;border:none;display:inline;margin:0;overflow:hidden;padding:0}#buddypress .activity-list .activity-content{margin:0 0 0 70px}body.activity-permalink #buddypress .activity-list li .activity-content{border:none;font-size:100%;line-height:150%;margin-left:170px;margin-right:0;padding:0}body.activity-permalink #buddypress .activity-list li .activity-header>p{margin:0;padding:5px 0 0}#buddypress .activity-list .activity-content .activity-header,#buddypress .activity-list .activity-content .comment-header{color:#888;line-height:220%}#buddypress .activity-header{margin-right:20px}#buddypress .acomment-meta a,#buddypress .activity-header a,#buddypress .comment-meta a{text-decoration:none}#buddypress .activity-list .activity-content .activity-header img.avatar{float:none!important;margin:0 5px -8px 0!important}#buddypress a.bp-secondary-action,#buddypress span.highlight{font-size:80%;padding:0;margin-right:5px;text-decoration:none}#buddypress .activity-list .activity-content .activity-inner,#buddypress .activity-list .activity-content blockquote{margin:10px 10px 5px 0;overflow:hidden}#buddypress .activity-list li.new_forum_post .activity-content .activity-inner,#buddypress .activity-list li.new_forum_topic .activity-content .activity-inner{border-left:2px solid #EAEAEA;margin-left:5px;padding-left:10px}body.activity-permalink #buddypress .activity-content .activity-inner,body.activity-permalink #buddypress .activity-content blockquote{margin-left:0;margin-top:5px}#buddypress .activity-inner>p{word-wrap:break-word}#buddypress .activity-inner>.activity-inner,#buddypress .activity-inner>blockquote{margin:0}#buddypress .activity-list .activity-content img.thumbnail{border:2px solid #eee;float:left;margin:0 10px 5px 0}#buddypress .activity-read-more{margin-left:1em;white-space:nowrap}#buddypress .activity-list li.load-more,#buddypress .activity-list li.load-newest{background:#f0f0f0;font-size:110%;margin:15px 0;padding:10px 15px;text-align:center}#buddypress .activity-list li.load-more a,#buddypress .activity-list li.load-newest a{color:#4D4D4D}#buddypress div.activity-meta{margin:18px 0 0}body.activity-permalink #buddypress div.activity-meta{margin-bottom:6px}#buddypress div.activity-meta a{padding:4px 8px}#buddypress a.activity-time-since{color:#aaa;text-decoration:none}#buddypress a.activity-time-since:hover{color:#888;text-decoration:underline}#buddypress #reply-title small a,#buddypress a.bp-primary-action{font-size:80%;margin-right:5px;text-decoration:none}#buddypress #reply-title small a span,#buddypress a.bp-primary-action span{background:#999;color:#fff;font-size:90%;margin-left:2px;padding:0 5px}#buddypress #reply-title small a:hover span,#buddypress a.bp-primary-action:hover span{background:#555;color:#fff}#buddypress div.activity-comments{margin:0 0 0 70px;overflow:hidden;position:relative;width:auto;clear:both}body.activity-permalink #buddypress div.activity-comments{background:0 0;margin-left:170px;width:auto}#buddypress div.activity-comments>ul{padding:0 0 0 10px}#buddypress div.activity-comments ul,#buddypress div.activity-comments ul li{border:none;list-style:none}#buddypress div.activity-comments ul{clear:both;margin:0}#buddypress div.activity-comments ul li{border-top:1px solid #eee;padding:10px 0 0}body.activity-permalink #buddypress .activity-list li.mini .activity-comments{clear:none;margin-top:0}body.activity-permalink #buddypress div.activity-comments ul li{border-width:1px;padding:10px 0 0}#buddypress div.activity-comments>ul>li:first-child{border-top:none}#buddypress div.activity-comments ul li:last-child{margin-bottom:0}#buddypress div.activity-comments ul li>ul{margin-left:30px;margin-top:0;padding-left:10px}body.activity-permalink #buddypress div.activity-comments ul li>ul{margin-top:10px}body.activity-permalink #buddypress div.activity-comments>ul{padding:0 10px 0 15px}#buddypress div.activity-comments div.acomment-avatar img{border-width:1px;float:left;height:25px;margin-right:10px;width:25px}#buddypress div.activity-comments div.acomment-content{font-size:80%;margin:5px 0 0 40px}#buddypress div.acomment-content .activity-delete-link,#buddypress div.acomment-content .comment-header,#buddypress div.acomment-content .time-since{display:none}body.activity-permalink #buddypress div.activity-comments div.acomment-content{font-size:90%}#buddypress div.activity-comments div.acomment-meta{color:#888;font-size:80%}#buddypress div.activity-comments form.ac-form{display:none;padding:10px}#buddypress div.activity-comments li form.ac-form{margin-right:15px;clear:both}#buddypress div.activity-comments form.root{margin-left:0}#buddypress div.activity-comments div#message{margin-top:15px;margin-bottom:0}#buddypress div.activity-comments form .ac-textarea{background:#fff;border:1px inset #ccc;margin-bottom:10px;padding:8px}#buddypress div.activity-comments form textarea{border:none;background:0 0;box-shadow:none;outline:0;color:#555;font-family:inherit;font-size:100%;height:60px;padding:0;margin:0;width:100%}#buddypress div.activity-comments form input{margin-top:5px}#buddypress div.activity-comments form div.ac-reply-avatar{float:left}#buddypress div.ac-reply-avatar img{border:1px solid #eee}#buddypress div.activity-comments form div.ac-reply-content{color:#888;margin-left:50px;padding-left:15px}#buddypress div.activity-comments form div.ac-reply-content a{text-decoration:none}#buddypress .acomment-options{float:left;margin:5px 0 5px 40px}#buddypress .acomment-options a{color:#999}#buddypress .acomment-options a:hover{color:inherit}#buddypress div.dir-search{float:right;margin:-39px 0 0}#buddypress div.dir-search input[type=text],#buddypress li.groups-members-search input[type=text]{font-size:90%;padding:1px 3px}#buddypress .dir-form{clear:both}#buddypress div#message{margin:0 0 15px}#buddypress #message.info{margin-bottom:0}#buddypress div#message.updated{clear:both}#buddypress div#message p,#sitewide-notice p{font-size:90%;display:block;padding:10px 15px}#buddypress div#message.error p{background-color:#fdc;border:1px solid #a00;clear:left;color:#800}#buddypress div#message.updated p{background-color:#efc;border:1px solid #591;color:#250}#buddypress #pass-strength-result{background-color:#eee;border-color:#ddd;border-style:solid;border-width:1px;display:none;margin:5px 5px 5px 0;padding:5px;text-align:center;width:150px}#buddypress .standard-form #basic-details-section #pass-strength-result{width:35%}#buddypress #pass-strength-result.bad,#buddypress #pass-strength-result.error{background-color:#ffb78c;border-color:#ff853c!important;display:block}#buddypress #pass-strength-result.good{background-color:#ffec8b;border-color:#fc0!important;display:block}#buddypress #pass-strength-result.short{background-color:#ffa0a0;border-color:#f04040!important;display:block}#buddypress #pass-strength-result.strong{background-color:#c3ff88;border-color:#8dff1c!important;display:block}#buddypress .standard-form#signup_form div div.error{background:#faa;color:#a00;margin:0 0 10px;padding:6px;width:90%}#buddypress div.accept,#buddypress div.reject{float:left;margin-left:10px}#buddypress ul.button-nav li{float:left;margin:0 10px 10px 0;list-style:none}#buddypress ul.button-nav li.current a{font-weight:700}#sitewide-notice #message{left:2%;position:fixed;top:1em;width:96%;z-index:9999}#sitewide-notice.admin-bar-on #message{top:3.3em}#sitewide-notice strong{display:block;margin-bottom:-1em}#buddypress .dir-search input[type=search],#buddypress .dir-search input[type=text],#buddypress .groups-members-search input[type=search],#buddypress .groups-members-search input[type=text],#buddypress .standard-form input[type=color],#buddypress .standard-form input[type=date],#buddypress .standard-form input[type=datetime-local],#buddypress .standard-form input[type=datetime],#buddypress .standard-form input[type=email],#buddypress .standard-form input[type=month],#buddypress .standard-form input[type=number],#buddypress .standard-form input[type=password],#buddypress .standard-form input[type=range],#buddypress .standard-form input[type=search],#buddypress .standard-form input[type=tel],#buddypress .standard-form input[type=text],#buddypress .standard-form input[type=time],#buddypress .standard-form input[type=url],#buddypress .standard-form input[type=week],#buddypress .standard-form select,#buddypress .standard-form textarea{border:1px solid #ccc;background:#fafafa;border-radius:0;color:#888;font:inherit;font-size:100%;padding:6px}#buddypress .standard-form select{padding:3px}#buddypress .standard-form input[type=password]{margin-bottom:5px}#buddypress .standard-form label,#buddypress .standard-form span.label{display:block;font-weight:700;margin:15px 0 5px;width:auto}#buddypress .standard-form div.checkbox label:nth-child(n+2),#buddypress .standard-form div.radio div label{color:#888;font-size:100%;font-weight:400;margin:5px 0 0}#buddypress .standard-form#sidebar-login-form label{margin-top:5px}#buddypress .standard-form input[type=text]{width:75%}#buddypress .standard-form#sidebar-login-form input[type=password],#buddypress .standard-form#sidebar-login-form input[type=text]{padding:4px;width:95%}#buddypress .standard-form #basic-details-section input[type=password],#buddypress .standard-form #blog-details-section input#signup_blog_url{width:35%}#buddypress #commentform input[type=text],#buddypress #commentform textarea,#buddypress .form-allowed-tags,#buddypress .standard-form#signup_form input[type=text],#buddypress .standard-form#signup_form textarea{width:90%}#buddypress .standard-form#signup_form div.submit{float:right}#buddypress div#signup-avatar img{margin:0 15px 10px 0}#buddypress .standard-form textarea{width:75%;height:120px}#buddypress .standard-form textarea#message_content{height:200px}#buddypress .standard-form#send-reply textarea{width:97.5%}#buddypress .standard-form p.description{color:#888;font-size:80%;margin:5px 0}#buddypress .standard-form div.submit{clear:both;padding:15px 0 0}#buddypress .standard-form p.submit{margin-bottom:0;padding:15px 0 0}#buddypress .standard-form div.submit input{margin-right:15px}#buddypress .standard-form div.radio ul{margin:10px 0 15px 38px;list-style:disc}#buddypress .standard-form div.radio ul li{margin-bottom:5px}#buddypress .standard-form a.clear-value{display:block;margin-top:5px;outline:0}#buddypress .standard-form #basic-details-section,#buddypress .standard-form #blog-details-section,#buddypress .standard-form #profile-details-section{float:left;width:48%}#buddypress .standard-form #profile-details-section{float:right}#buddypress .standard-form #blog-details-section{clear:left}#buddypress .standard-form input:focus,#buddypress .standard-form select:focus,#buddypress .standard-form textarea:focus{background:#fafafa;color:#555}#buddypress form#send-invite-form{margin-top:20px}#buddypress div#invite-list{background:#f5f5f5;height:400px;margin:0 0 10px;overflow:auto;padding:5px;width:160px}#buddypress .comment-reply-link,#buddypress a.button,#buddypress button,#buddypress div.generic-button a,#buddypress input[type=button],#buddypress input[type=reset],#buddypress input[type=submit],#buddypress ul.button-nav li a,a.bp-title-button{background:#fff;border:1px solid #ccc;color:#777;font-size:.8rem;cursor:pointer;outline:0;padding:4px 10px;text-align:center;text-decoration:none}#buddypress .comment-reply-link:hover,#buddypress a.button:focus,#buddypress a.button:hover,#buddypress button:hover,#buddypress div.generic-button a:hover,#buddypress input[type=button]:hover,#buddypress input[type=reset]:hover,#buddypress input[type=submit]:hover,#buddypress ul.button-nav li a:hover,#buddypress ul.button-nav li.current a{background:#ededed;border:1px solid #bbb;color:#555;outline:0;text-decoration:none}#buddypress form.standard-form .left-menu{float:left}#buddypress form.standard-form .left-menu #invite-list ul{margin:1%;list-style:none}#buddypress form.standard-form .left-menu #invite-list ul li{margin:0 0 0 1%}#buddypress form.standard-form .main-column{margin-left:190px}#buddypress form.standard-form .main-column ul#friend-list{clear:none;float:left}#buddypress form.standard-form .main-column ul#friend-list h4{clear:none}#buddypress .wp-editor-wrap a.button,#buddypress .wp-editor-wrap button,#buddypress .wp-editor-wrap input[type=button],#buddypress .wp-editor-wrap input[type=reset],#buddypress .wp-editor-wrap input[type=submit]{padding:0 10px 1px}#buddypress a.loading,#buddypress input.loading{-webkit-animation:loader-pulsate .5s infinite ease-in-out alternate;-moz-animation:loader-pulsate .5s infinite ease-in-out alternate;border-color:#aaa}@-webkit-keyframes loader-pulsate{from{border-color:#aaa;-webkit-box-shadow:0 0 6px #ccc;box-shadow:0 0 6px #ccc}to{border-color:#ccc;-webkit-box-shadow:0 0 6px #f8f8f8;box-shadow:0 0 6px #f8f8f8}}@-moz-keyframes loader-pulsate{from{border-color:#aaa;-moz-box-shadow:0 0 6px #ccc;box-shadow:0 0 6px #ccc}to{border-color:#ccc;-moz-box-shadow:0 0 6px #f8f8f8;box-shadow:0 0 6px #f8f8f8}}#buddypress a.loading:hover,#buddypress input.loading:hover{color:#777}#buddypress a.disabled,#buddypress button.disabled,#buddypress button.pending,#buddypress div.pending a,#buddypress input[type=button].disabled,#buddypress input[type=button].pending,#buddypress input[type=reset].disabled,#buddypress input[type=reset].pending,#buddypress input[type=submit].disabled,#buddypress input[type=submit].pending{border-color:#eee;color:#bbb;cursor:default}#buddypress a.disabled:hover,#buddypress button.disabled:hover,#buddypress button.pending:hover,#buddypress div.pending a:hover,#buddypress input[type=button]:hover.disabled,#buddypress input[type=button]:hover.pending,#buddypress input[type=reset]:hover.disabled,#buddypress input[type=reset]:hover.pending,#buddypress input[type=submit]:hover.disabled,#buddypress input[type=submit]:hover.pending{border-color:#eee;color:#bbb}#buddypress ul#topic-post-list{margin:0;width:auto}#buddypress ul#topic-post-list li{padding:15px;position:relative}#buddypress ul#topic-post-list li.alt{background:#f5f5f5}#buddypress ul#topic-post-list li div.poster-meta{color:#888;margin-bottom:10px}#buddypress ul#topic-post-list li div.post-content{margin-left:54px}#buddypress div.topic-tags{font-size:80%}#buddypress div.admin-links{color:#888;font-size:80%;position:absolute;top:15px;right:25px}#buddypress div#topic-meta{margin:0;padding:5px 19px 30px;position:relative}#buddypress div#topic-meta div.admin-links{right:19px;top:-36px}#buddypress div#topic-meta h3{margin:5px 0}#buddypress div#new-topic-post{display:none;margin:20px 0 0;padding:1px 0 0}#buddypress table.forum,#buddypress table.messages-notices,#buddypress table.notifications,#buddypress table.notifications-settings,#buddypress table.profile-fields,#buddypress table.profile-settings,#buddypress table.wp-profile-fields{width:100%}#buddypress table.forum thead tr,#buddypress table.messages-notices thead tr,#buddypress table.notifications thead tr,#buddypress table.notifications-settings thead tr,#buddypress table.profile-fields thead tr,#buddypress table.profile-settings thead tr,#buddypress table.wp-profile-fields thead tr{background:#eaeaea}#buddypress table#message-threads{clear:both;margin:0;width:auto}#buddypress table.profile-fields{margin-bottom:20px}#buddypress table.profile-fields:last-child{margin-bottom:0}#buddypress table.profile-fields p{margin:0}#buddypress table.profile-fields p:last-child{margin-top:0}#buddypress table.forum tr td,#buddypress table.forum tr th,#buddypress table.messages-notices tr td,#buddypress table.messages-notices tr th,#buddypress table.notifications tr td,#buddypress table.notifications tr th,#buddypress table.notifications-settings tr td,#buddypress table.notifications-settings tr th,#buddypress table.profile-fields tr td,#buddypress table.profile-fields tr th,#buddypress table.profile-settings tr td,#buddypress table.wp-profile-fields tr td,#buddypress table.wp-profile-fields tr th{padding:8px;vertical-align:middle}#buddypress table.forum tr td.label,#buddypress table.messages-notices tr td.label,#buddypress table.notifications tr td.label,#buddypress table.notifications-settings tr td.label,#buddypress table.profile-fields tr td.label,#buddypress table.wp-profile-fields tr td.label{border-right:1px solid #eaeaea;font-weight:700;width:25%}#buddypress table tr td.thread-info p{margin:0}#buddypress table tr td.thread-info p.thread-excerpt{color:#888;font-size:80%;margin-top:3px}#buddypress table.forum td{text-align:center}#buddypress table.forum tr.alt td,#buddypress table.messages-notices tr.alt td,#buddypress table.notifications tr.alt td,#buddypress table.notifications-settings tr.alt td,#buddypress table.profile-fields tr.alt td,#buddypress table.profile-settings tr.alt td,#buddypress table.wp-profile-fields tr.alt td{background:#f5f5f5}#buddypress table.notification-settings{margin-bottom:20px;text-align:left}#buddypress #groups-notification-settings{margin-bottom:0}#buddypress table.notification-settings td:first-child,#buddypress table.notification-settings th.icon,#buddypress table.notifications td:first-child,#buddypress table.notifications th.icon{display:none}#buddypress table.notification-settings th.title,#buddypress table.profile-settings th.title{width:80%}#buddypress table.notification-settings .no,#buddypress table.notification-settings .yes{text-align:center;width:40px}#buddypress table.forum{margin:0;width:auto;clear:both}#buddypress table.forum tr.sticky td{font-size:110%;background:#fff9db;border-top:1px solid #ffe8c4;border-bottom:1px solid #ffe8c4}#buddypress table.forum tr.closed td.td-title{padding-left:35px}#buddypress table.forum td p.topic-text{color:#888;font-size:100%}#buddypress table.forum tr>td:first-child,#buddypress table.forum tr>th:first-child{padding-left:15px}#buddypress table.forum tr>td:last-child,#buddypress table.forum tr>th:last-child{padding-right:15px}#buddypress table.forum td.td-group,#buddypress table.forum td.td-poster,#buddypress table.forum td.td-title,#buddypress table.forum tr th#th-group,#buddypress table.forum tr th#th-poster,#buddypress table.forum tr th#th-title{text-align:left}#buddypress table.forum tr td.td-title a.topic-title{font-size:110%}#buddypress table.forum td.td-freshness{white-space:nowrap}#buddypress table.forum td.td-freshness span.time-since{font-size:80%;color:#888}#buddypress table.forum td img.avatar{float:none;margin:0 5px -8px 0}#buddypress table.forum td.td-group,#buddypress table.forum td.td-poster{min-width:140px}#buddypress table.forum th#th-title{width:80%}#buddypress table.forum th#th-freshness{width:25%}#buddypress table.forum th#th-postcount{width:15%}#buddypress table.forum p.topic-meta{font-size:80%;margin:5px 0 0}#buddypress .item-body{margin:20px 0}#buddypress span.activity{display:inline-block;font-size:80%;opacity:.8;padding:0}#buddypress span.user-nicename{color:#777;display:inline-block;font-size:120%;font-weight:700}#buddypress div#message p,#sitewide-notice p{font-weight:400;margin-top:3px;text-decoration:none;background-color:#ffd;border:1px solid #cb2;color:#440}#buddypress div#item-header{overflow:hidden}#buddypress div#item-header div#item-header-content{float:left;margin-left:0}#buddypress div#item-header h2{line-height:120%;margin:0 0 15px}#buddypress div#item-header h2 a{color:#777;text-decoration:none}#buddypress div#item-header img.avatar{float:left;margin:0 15px 19px 0}#buddypress div#item-header h2{margin-bottom:5px}#buddypress div#item-header h2 span.highlight{font-size:60%;font-weight:400;line-height:170%;vertical-align:middle;display:inline-block}#buddypress div#item-header h2 span.highlight span{background:#a1dcfa;color:#fff;cursor:pointer;font-weight:700;font-size:80%;margin-bottom:2px;padding:1px 4px;position:relative;right:-2px;top:-2px;vertical-align:middle}#buddypress div#item-header div#item-meta{font-size:80%;color:#aaa;overflow:hidden;margin:15px 0 5px;padding-bottom:10px}#buddypress div#item-header div#item-actions{float:right;margin:0 0 15px 15px;text-align:right;width:20%}#buddypress div#item-header div#item-actions h3{margin:0 0 5px}#buddypress div#item-header ul{margin-bottom:15px;overflow:hidden}#buddypress div#item-header ul h5,#buddypress div#item-header ul hr,#buddypress div#item-header ul span{display:none}#buddypress div#item-header ul li{float:right;list-style:none}#buddypress div#item-header ul img.avatar,#buddypress div#item-header ul.avatars img.avatar{height:30px;margin:2px;width:30px}#buddypress div#item-header a.button,#buddypress div#item-header div.generic-button{float:left;margin:10px 10px 0 0}#buddypress div#item-header div#message.info{line-height:80%}#buddypress ul.item-list{border-top:1px solid #eaeaea;width:100%;list-style:none;clear:both;margin:0;padding:0}body.activity-permalink #buddypress ul.item-list,body.activity-permalink #buddypress ul.item-list li.activity-item{border:none}#buddypress ul.item-list li{border-bottom:1px solid #eaeaea;padding:15px 0;margin:0;position:relative;list-style:none}#buddypress ul.single-line li{border:none}#buddypress ul.item-list li img.avatar{float:left;margin:0 10px 0 0}#buddypress ul.item-list li div.item-title,#buddypress ul.item-list li h4{font-weight:400;font-size:90%;margin:0;width:75%}#buddypress ul.item-list li div.item-title span{color:#999;font-size:80%}#buddypress ul.item-list li div.item-desc{color:#888;font-size:80%;margin:10px 0 0 60px;width:50%}#buddypress ul.item-list li div.action{position:absolute;top:15px;right:0;text-align:right}#buddypress ul.item-list li div.meta{color:#888;font-size:80%;margin-top:10px}#buddypress ul.item-list li h5 span.small{float:right;font-size:80%;font-weight:400}#buddypress div.item-list-tabs{background:0 0;clear:left;overflow:hidden}#buddypress div.item-list-tabs ul{margin:0;padding:0}#buddypress div.item-list-tabs ul li{float:left;margin:0;list-style:none}#buddypress div.item-list-tabs#subnav ul li{margin-top:0}#buddypress div.item-list-tabs ul li.last{float:right;margin:7px 0 0}#buddypress div.item-list-tabs#subnav ul li.last{margin-top:4px}#buddypress div.item-list-tabs ul li.last select{max-width:175px}#buddypress div.item-list-tabs ul li a,#buddypress div.item-list-tabs ul li span{display:block;padding:5px 10px;text-decoration:none}#buddypress div.item-list-tabs ul li a span{background:#eee;border-radius:50%;border:1px solid #ccc;color:#999;display:inline;font-size:70%;margin-left:2px;padding:3px 6px;text-align:center;vertical-align:middle}#buddypress div.item-list-tabs ul li.current a,#buddypress div.item-list-tabs ul li.selected a{background-color:#eee;color:#555;opacity:.8;font-weight:700}#buddypress div.item-list-tabs ul li a:hover span,#buddypress div.item-list-tabs ul li.current a span,#buddypress div.item-list-tabs ul li.selected a span{background-color:#eee}#buddypress div.item-list-tabs ul li.current a span,#buddypress div.item-list-tabs ul li.selected a span{background-color:#fff}#buddypress div#item-nav ul li.loading a{background-position:88% 50%}#buddypress div.item-list-tabs#object-nav{margin-top:0}#buddypress div.item-list-tabs#subnav{background:0 0;margin:10px 0;overflow:hidden}#buddypress #admins-list li,#buddypress #members-list li,#buddypress #mods-list li{overflow:auto;list-style:none}#buddypress table#message-threads tr.unread td{background:#fff9db;border-top:1px solid #ffe8c4;border-bottom:1px solid #ffe8c4;font-weight:700}#buddypress li span.unread-count,#buddypress tr.unread span.unread-count{background:#d00;color:#fff;font-weight:700;padding:2px 8px}#buddypress div.item-list-tabs ul li a span.unread-count{padding:1px 6px;color:#fff}#buddypress div.messages-options-nav{background:#eee;font-size:80%;margin:0;padding:5px 15px;text-align:right}#buddypress div#message-thread div.message-box{margin:0;padding:15px}#buddypress div#message-thread div.alt{background:#f4f4f4}#buddypress div#message-thread p#message-recipients{margin:10px 0 20px}#buddypress div#message-thread img.avatar{float:left;margin:0 10px 0 0;vertical-align:middle}#buddypress div#message-thread strong{font-size:100%;margin:0}#buddypress div#message-thread strong a{text-decoration:none}#buddypress div#message-thread strong span.activity{margin-top:4px}#buddypress div#message-thread div.message-metadata{overflow:hidden}#buddypress div#message-thread div.message-content{margin-left:45px}#buddypress div#message-thread div.message-options{text-align:right}#buddypress #message-threads img.avatar{max-width:none}#buddypress div.message-search{float:right;margin:0 20px}#buddypress div.profile h4{margin-bottom:auto;margin-top:15px}#buddypress #profile-edit-form ul.button-nav{margin-top:15px}body.no-js #buddypress .field-visibility-settings-close,body.no-js #buddypress .field-visibility-settings-toggle{display:none}#buddypress .field-visibility-settings{display:none;margin-top:10px}body.no-js #buddypress .field-visibility-settings{display:block}#buddypress .current-visibility-level{font-weight:700;font-style:normal}#buddypress .field-visibility-settings,#buddypress .field-visibility-settings-notoggle,#buddypress .field-visibility-settings-toggle{color:#888}#buddypress .field-visibility-settings a,#buddypress .field-visibility-settings-toggle a{font-size:80%}body.register #buddypress div.page ul{list-style:none}#buddypress .standard-form .field-visibility-settings label{margin:0;font-weight:400}#buddypress .field-visibility-settings legend,#buddypress .field-visibility-settings-toggle{font-style:italic}#buddypress .field-visibility-settings .radio{list-style:none;margin-bottom:0}#buddypress .field-visibility select{margin:0}.widget.buddypress div.item-avatar img.avatar{float:left;margin:0 10px 15px 0}.widget.buddypress span.activity{display:inline-block;font-size:80%;opacity:.8;padding:0}.widget.buddypress div.item-options{font-size:90%;margin:0 0 1em;padding:1em 0}.widget.buddypress div.item{margin:0 0 1em}.widget.buddypress div.item-content,.widget.buddypress div.item-meta{font-size:11px;margin-left:38px}.widget.buddypress ul.item-list img.avatar{height:20px;margin-right:10px;width:20px}.widget.buddypress div.item-avatar img{height:40px;margin:1px;width:40px}.widget.buddypress div.avatar-block{overflow:hidden}.widget.buddypress #bp-login-widget-form label{display:block;margin:1rem 0 .5rem}.widget.buddypress #bp-login-widget-form #bp-login-widget-submit{margin-right:10px}.widget.buddypress .bp-login-widget-user-avatar{float:left;width:60px}.widget.buddypress .bp-login-widget-user-links>div{padding-left:60px;margin-bottom:.5rem}.widget.buddypress .bp-login-widget-user-links>div.bp-login-widget-user-link a{font-weight:700}@media only screen and (max-width:480px){#buddypress div.dir-search{float:right;margin-top:-50px;text-align:right}#buddypress div.dir-search input[type=text]{margin-bottom:1em;width:50%}a.bp-title-button{margin-left:10px}#buddypress form.standard-form .main-column div.action{position:relative;margin-bottom:1em}#buddypress form.standard-form .main-column ul#friend-list h4{width:100%}}@media only screen and (max-width:320px){#buddypress div.dir-search{clear:left;float:left;margin-top:0;text-align:left}#buddypress li#groups-order-select{clear:left;float:left}#buddypress ul.item-list li div.action{clear:left;float:left;margin-top:0;margin-left:70px;position:relative;top:0;right:0;text-align:left}#buddypress ul.item-list li div.item-desc{clear:left;float:left;margin:10px 0 0;width:auto}#buddypress li div.item{margin-left:70px;width:auto}#buddypress ul.item-list li div.meta{margin-top:0}#buddypress .item-desc p{margin:0 0 10px}#buddypress div.pagination .pag-count{margin-left:0}}@media only screen and (max-width:240px){#buddypress div.dir-search{float:left;margin:0}#buddypress div.dir-search input[type=text]{width:50%}#buddypress li#groups-order-select{float:left}#buddypress ul.item-list li img.avatar{width:30px;height:auto}#buddypress li div.item,#buddypress ul.item-list li div.action{margin-left:45px}h1 a.bp-title-button{clear:left;float:left;margin:10px 0 20px}}
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-templates/bp-legacy/js/buddypress.js b/wp-content/plugins/buddypress/bp-templates/bp-legacy/js/buddypress.js
index 67ecbbe5d..1107c9f73 100644
--- a/wp-content/plugins/buddypress/bp-templates/bp-legacy/js/buddypress.js
+++ b/wp-content/plugins/buddypress/bp-templates/bp-legacy/js/buddypress.js
@@ -1,3 +1,4 @@
+/* jshint undef: false, unused:false */
 // AJAX Functions
 var jq = jQuery;
 
@@ -12,61 +13,68 @@ jq(document).ready( function() {
 	/**** Page Load Actions *******************************************************/
 
 	/* Hide Forums Post Form */
-	if ( '-1' == window.location.search.indexOf('new') && jq('div.forums').length )
+	if ( '-1' === window.location.search.indexOf('new') && jq('div.forums').length ) {
 		jq('#new-topic-post').hide();
-	else
+	} else {
 		jq('#new-topic-post').show();
+	}
 
 	/* Activity filter and scope set */
 	bp_init_activity();
 
+	var objects  = [ 'members', 'groups', 'blogs', 'forums', 'group_members' ],
+		$whats_new = jq('#whats-new');
+
 	/* Object filter and scope set. */
-	var objects = [ 'members', 'groups', 'blogs', 'forums', 'group_members' ];
 	bp_init_objects( objects );
 
 	/* @mention Compose Scrolling */
-	var $whats_new = jq('#whats-new');
-	if ( jq.query.get('r') && $whats_new.length ) {
+	if ( $whats_new.length && bp_get_querystring('r') ) {
+		var $member_nicename = $whats_new.val();
+
 		jq('#whats-new-options').animate({
 			height:'40px'
 		});
-		jq("#whats-new-form textarea").animate({
+
+		$whats_new.animate({
 			height:'50px'
 		});
+
 		jq.scrollTo( $whats_new, 500, {
 			offset:-125,
-			easing:'easeOutQuad'
+			easing:'swing'
 		} );
-		var whats_new_content = $whats_new.val();
-		$whats_new.val('').focus().val(whats_new_content);
+
+		$whats_new.val('').focus().val( $member_nicename );
 	}
 
 	/**** Activity Posting ********************************************************/
 
 	/* Textarea focus */
 	$whats_new.focus( function(){
-		jq("#whats-new-options").animate({
+		jq('#whats-new-options').animate({
 			height:'40px'
 		});
-		jq("#whats-new-form textarea").animate({
+		jq('#whats-new-form textarea').animate({
 			height:'50px'
 		});
-		jq("#aw-whats-new-submit").prop("disabled", false);
+		jq('#aw-whats-new-submit').prop('disabled', false);
+
+		var $whats_new_form = jq('form#whats-new-form'),
+			$activity_all = jq( '#activity-all' );
 
-		var $whats_new_form = jq("form#whats-new-form");
-		if ( $whats_new_form.hasClass("submitted") ) {
-			$whats_new_form.removeClass("submitted");
+		if ( $whats_new_form.hasClass('submitted') ) {
+			$whats_new_form.removeClass('submitted');
 		}
 
 		// Return to the 'All Members' tab and 'Everything' filter,
 		// to avoid inconsistencies with the heartbeat integration
-		var $activity_all = jq( '#activity-all' );
 		if ( $activity_all.length  ) {
 			if ( ! $activity_all.hasClass( 'selected' ) ) {
 				// reset to everyting
 				jq( '#activity-filter-select select' ).val( '-1' );
-				$activity_all.children( 'a' ).trigger( "click" );
-			} else if ( '-1' != jq( '#activity-filter-select select' ).val() ) {
+				$activity_all.children( 'a' ).trigger( 'click' );
+			} else if ( '-1' !== jq( '#activity-filter-select select' ).val() ) {
 				jq( '#activity-filter-select select' ).val( '-1' );
 				jq( '#activity-filter-select select' ).trigger( 'change' );
 			}
@@ -75,44 +83,45 @@ jq(document).ready( function() {
 
 	/* On blur, shrink if it's empty */
 	$whats_new.blur( function(){
-		if ( document.activeElement != this ) {
+		if ( document.activeElement !== this ) {
 			if (!this.value.match(/\S+/)) {
-				this.value = "";
-				jq("#whats-new-options").animate({
+				this.value = '';
+				jq('#whats-new-options').animate({
 					height:'40px'
 				});
-				jq("form#whats-new-form textarea").animate({
+				jq('form#whats-new-form textarea').animate({
 					height:'20px'
 				});
-				jq("#aw-whats-new-submit").prop("disabled", true);
+				jq('#aw-whats-new-submit').prop('disabled', true);
 			}
 		}
 	});
 
 	/* New posts */
-	jq("#aw-whats-new-submit").on( 'click', function() {
-		var last_date_recorded = 0;
-		var button = jq(this);
-		var form = button.closest("form#whats-new-form");
+	jq('#aw-whats-new-submit').on( 'click', function() {
+		var last_date_recorded = 0,
+			button = jq(this),
+			form   = button.closest('form#whats-new-form');
 
 		form.children().each( function() {
-			if ( jq.nodeName(this, "textarea") || jq.nodeName(this, "input") )
+			if ( jq.nodeName(this, 'textarea') || jq.nodeName(this, 'input') ) {
 				jq(this).prop( 'disabled', true );
+			}
 		});
 
 		/* Remove any errors */
 		jq('div.error').remove();
 		button.addClass('loading');
 		button.prop('disabled', true);
-		form.addClass("submitted");
+		form.addClass('submitted');
 
 		/* Default POST values */
-		var object = '';
-		var item_id = jq("#whats-new-post-in").val();
-		var content = jq("#whats-new").val();
-		var firstrow = jq( '#buddypress ul.activity-list li' ).first();
-		var activity_row = firstrow;
-		var timestamp = null;
+		object = '';
+		item_id = jq('#whats-new-post-in').val();
+		content = jq('#whats-new').val();
+		firstrow = jq( '#buddypress ul.activity-list li' ).first();
+		activity_row = firstrow;
+		timestamp = null;
 
 		// Checks if at least one activity exists
 		if ( firstrow.length ) {
@@ -120,23 +129,23 @@ jq(document).ready( function() {
 			if ( activity_row.hasClass( 'load-newest' ) ) {
 				activity_row = firstrow.next();
 			}
-			
+
 			timestamp = activity_row.prop( 'class' ).match( /date-recorded-([0-9]+)/ );
 		}
- 		
- 		if ( timestamp ) {
+
+		if ( timestamp ) {
 			last_date_recorded = timestamp[1];
 		}
 
 		/* Set object for non-profile posts */
 		if ( item_id > 0 ) {
-			object = jq("#whats-new-post-object").val();
+			object = jq('#whats-new-post-object').val();
 		}
 
 		jq.post( ajaxurl, {
 			action: 'post_update',
 			'cookie': bp_get_cookies(),
-			'_wpnonce_post_update': jq("#_wpnonce_post_update").val(),
+			'_wpnonce_post_update': jq('#_wpnonce_post_update').val(),
 			'content': content,
 			'object': object,
 			'item_id': item_id,
@@ -146,64 +155,66 @@ jq(document).ready( function() {
 		function(response) {
 
 			form.children().each( function() {
-				if ( jq.nodeName(this, "textarea") || jq.nodeName(this, "input") ) {
+				if ( jq.nodeName(this, 'textarea') || jq.nodeName(this, 'input') ) {
 					jq(this).prop( 'disabled', false );
 				}
 			});
 
 			/* Check for errors and append if found. */
-			if ( response[0] + response[1] == '-1' ) {
+			if ( response[0] + response[1] === '-1' ) {
 				form.prepend( response.substr( 2, response.length ) );
 				jq( '#' + form.attr('id') + ' div.error').hide().fadeIn( 200 );
 			} else {
-				if ( 0 == jq("ul.activity-list").length ) {
-					jq("div.error").slideUp(100).remove();
-					jq("#message").slideUp(100).remove();
-					jq("div.activity").append( '<ul id="activity-stream" class="activity-list item-list">' );
+				if ( 0 === jq('ul.activity-list').length ) {
+					jq('div.error').slideUp(100).remove();
+					jq('#message').slideUp(100).remove();
+					jq('div.activity').append( '<ul id="activity-stream" class="activity-list item-list">' );
 				}
 
-				if ( firstrow.hasClass( 'load-newest' ) )
+				if ( firstrow.hasClass( 'load-newest' ) ) {
 					firstrow.remove();
+				}
 
-				jq("#activity-stream").prepend(response);
-
-				if ( ! last_date_recorded )
-					jq("#activity-stream li:first").addClass('new-update just-posted');
+				jq('#activity-stream').prepend(response);
 
-				if ( 0 != jq("#latest-update").length ) {
-					var l = jq("#activity-stream li.new-update .activity-content .activity-inner p").html();
-					var v = jq("#activity-stream li.new-update .activity-content .activity-header p a.view").attr('href');
+				if ( ! last_date_recorded ) {
+					jq('#activity-stream li:first').addClass('new-update just-posted');
+				}
 
-					var ltext = jq("#activity-stream li.new-update .activity-content .activity-inner p").text();
+				if ( 0 !== jq('#latest-update').length ) {
+					var l   = jq('#activity-stream li.new-update .activity-content .activity-inner p').html(),
+						v     = jq('#activity-stream li.new-update .activity-content .activity-header p a.view').attr('href'),
+						ltext = jq('#activity-stream li.new-update .activity-content .activity-inner p').text(),
+						u     = '';
 
-					var u = '';
-					if ( ltext != '' )
+					if ( ltext !== '' ) {
 						u = l + ' ';
+					}
 
 					u += '<a href="' + v + '" rel="nofollow">' + BP_DTheme.view + '</a>';
 
-					jq("#latest-update").slideUp(300,function(){
-						jq("#latest-update").html( u );
-						jq("#latest-update").slideDown(300);
+					jq('#latest-update').slideUp(300,function(){
+						jq('#latest-update').html( u );
+						jq('#latest-update').slideDown(300);
 					});
 				}
 
-				jq("li.new-update").hide().slideDown( 300 );
-				jq("li.new-update").removeClass( 'new-update' );
-				jq("#whats-new").val('');
+				jq('li.new-update').hide().slideDown( 300 );
+				jq('li.new-update').removeClass( 'new-update' );
+				jq('#whats-new').val('');
 
 				// reset vars to get newest activities
 				newest_activities = '';
 				activity_last_recorded  = 0;
 			}
 
-			jq("#whats-new-options").animate({
+			jq('#whats-new-options').animate({
 				height:'0px'
 			});
-			jq("#whats-new-form textarea").animate({
+			jq('#whats-new-form textarea').animate({
 				height:'20px'
 			});
-			jq("#aw-whats-new-submit").prop("disabled", true).removeClass('loading');
+			jq('#aw-whats-new-submit').prop('disabled', true).removeClass('loading');
 		});
 
 		return false;
@@ -211,12 +222,14 @@ jq(document).ready( function() {
 
 	/* List tabs event delegation */
 	jq('div.activity-type-tabs').on( 'click', function(event) {
-		var target = jq(event.target).parent();
+		var target = jq(event.target).parent(),
+			scope, filter;
 
-		if ( event.target.nodeName == 'STRONG' || event.target.nodeName == 'SPAN' )
+		if ( event.target.nodeName === 'STRONG' || event.target.nodeName === 'SPAN' ) {
 			target = target.parent();
-		else if ( event.target.nodeName != 'A' )
+		} else if ( event.target.nodeName !== 'A' ) {
 			return false;
+		}
 
 		/* Reset the page */
 		jq.cookie( 'bp-activity-oldestpage', 1, {
@@ -224,11 +237,12 @@ jq(document).ready( function() {
 		} );
 
 		/* Activity Stream Tabs */
-		var scope = target.attr('id').substr( 9, target.attr('id').length );
-		var filter = jq("#activity-filter-select select").val();
+		scope  = target.attr('id').substr( 9, target.attr('id').length );
+		filter = jq('#activity-filter-select select').val();
 
-		if ( scope == 'mentions' )
+		if ( scope === 'mentions' ) {
 			jq( '#' + target.attr('id') + ' a strong' ).remove();
+		}
 
 		bp_activity_request(scope, filter);
 
@@ -237,14 +251,15 @@ jq(document).ready( function() {
 
 	/* Activity filter select */
 	jq('#activity-filter-select select').change( function() {
-		var selected_tab = jq( 'div.activity-type-tabs li.selected' );
+		var selected_tab = jq( 'div.activity-type-tabs li.selected' ),
+			filter = jq(this).val(),
+			scope;
 
-		if ( !selected_tab.length )
-			var scope = null;
-		else
-			var scope = selected_tab.attr('id').substr( 9, selected_tab.attr('id').length );
-
-		var filter = jq(this).val();
+		if ( !selected_tab.length ) {
+			scope = null;
+		} else {
+			scope = selected_tab.attr('id').substr( 9, selected_tab.attr('id').length );
+		}
 
 		bp_activity_request(scope, filter);
 
@@ -253,13 +268,16 @@ jq(document).ready( function() {
 
 	/* Stream event delegation */
 	jq('div.activity').on( 'click', function(event) {
-		var target = jq(event.target);
+		var target = jq(event.target),
+			type, parent, parent_id,
+			li, id, link_href, nonce, timestamp,
+			oldest_page, just_posted;
 
 		/* Favoriting activity stream items */
 		if ( target.hasClass('fav') || target.hasClass('unfav') ) {
-			var type = target.hasClass('fav') ? 'fav' : 'unfav';
-			var parent = target.closest('.activity-item');
-			var parent_id = parent.attr('id').substr( 9, parent.attr('id').length );
+			type      = target.hasClass('fav') ? 'fav' : 'unfav';
+			parent    = target.closest('.activity-item');
+			parent_id = parent.attr('id').substr( 9, parent.attr('id').length );
 
 			target.addClass('loading');
 
@@ -273,14 +291,15 @@ jq(document).ready( function() {
 
 				target.fadeOut( 200, function() {
 					jq(this).html(response);
-					jq(this).attr('title', 'fav' == type ? BP_DTheme.remove_fav : BP_DTheme.mark_as_fav);
+					jq(this).attr('title', 'fav' === type ? BP_DTheme.remove_fav : BP_DTheme.mark_as_fav);
 					jq(this).fadeIn(200);
 				});
 
-				if ( 'fav' == type ) {
+				if ( 'fav' === type ) {
 					if ( !jq('.item-list-tabs #activity-favs-personal-li').length ) {
-						if ( !jq('.item-list-tabs #activity-favorites').length )
+						if ( !jq('.item-list-tabs #activity-favorites').length ) {
 							jq('.item-list-tabs ul #activity-mentions').before( '<li id="activity-favorites"><a href="#">' + BP_DTheme.my_favs + ' <span>0</span></a></li>');
+						}
 
 						jq('.item-list-tabs ul #activity-favorites span').html( Number( jq('.item-list-tabs ul #activity-favorites span').html() ) + 1 );
 					}
@@ -295,15 +314,17 @@ jq(document).ready( function() {
 					jq('.item-list-tabs ul #activity-favorites span').html( Number( jq('.item-list-tabs ul #activity-favorites span').html() ) - 1 );
 
 					if ( !Number( jq('.item-list-tabs ul #activity-favorites span').html() ) ) {
-						if ( jq('.item-list-tabs ul #activity-favorites').hasClass('selected') )
+						if ( jq('.item-list-tabs ul #activity-favorites').hasClass('selected') ) {
 							bp_activity_request( null, null );
+						}
 
 						jq('.item-list-tabs ul #activity-favorites').remove();
 					}
 				}
 
-				if ( 'activity-favorites' == jq( '.item-list-tabs li.selected').attr('id') )
+				if ( 'activity-favorites' === jq( '.item-list-tabs li.selected').attr('id') ) {
 					target.closest( '.activity-item' ).slideUp( 100 );
+				}
 			});
 
 			return false;
@@ -311,13 +332,12 @@ jq(document).ready( function() {
 
 		/* Delete activity stream items */
 		if ( target.hasClass('delete-activity') ) {
-			var li        = target.parents('div.activity ul li');
-			var id        = li.attr('id').substr( 9, li.attr('id').length );
-			var link_href = target.attr('href');
-			var nonce     = link_href.split('_wpnonce=');
-			var timestamp = li.prop( 'class' ).match( /date-recorded-([0-9]+)/ );
-
-			nonce = nonce[1];
+			li        = target.parents('div.activity ul li');
+			id        = li.attr('id').substr( 9, li.attr('id').length );
+			link_href = target.attr('href');
+			nonce     = link_href.split('_wpnonce=');
+			timestamp = li.prop( 'class' ).match( /date-recorded-([0-9]+)/ );
+			nonce     = nonce[1];
 
 			target.addClass('loading');
 
@@ -329,14 +349,14 @@ jq(document).ready( function() {
 			},
 			function(response) {
 
-				if ( response[0] + response[1] == '-1' ) {
+				if ( response[0] + response[1] === '-1' ) {
 					li.prepend( response.substr( 2, response.length ) );
 					li.children('#message').hide().fadeIn(300);
 				} else {
 					li.slideUp(300);
 
 					// reset vars to get newest activities
-					if ( timestamp && activity_last_recorded == timestamp[1] ) {
+					if ( timestamp && activity_last_recorded === timestamp[1] ) {
 						newest_activities = '';
 						activity_last_recorded  = 0;
 					}
@@ -348,8 +368,8 @@ jq(document).ready( function() {
 
 		// Spam activity stream items
 		if ( target.hasClass( 'spam-activity' ) ) {
-			var li        = target.parents( 'div.activity ul li' );
-			var timestamp = li.prop( 'class' ).match( /date-recorded-([0-9]+)/ );
+			li        = target.parents( 'div.activity ul li' );
+			timestamp = li.prop( 'class' ).match( /date-recorded-([0-9]+)/ );
 			target.addClass( 'loading' );
 
 			jq.post( ajaxurl, {
@@ -366,7 +386,7 @@ jq(document).ready( function() {
 				} else {
 					li.slideUp( 300 );
 					// reset vars to get newest activities
-					if ( timestamp && activity_last_recorded == timestamp[1] ) {
+					if ( timestamp && activity_last_recorded === timestamp[1] ) {
 						newest_activities = '';
 						activity_last_recorded  = 0;
 					}
@@ -378,34 +398,46 @@ jq(document).ready( function() {
 
 		/* Load more updates at the end of the page */
 		if ( target.parent().hasClass('load-more') ) {
-			jq("#buddypress li.load-more").addClass('loading');
+			if ( bp_ajax_request ) {
+				bp_ajax_request.abort();
+			}
 
-			if ( null == jq.cookie('bp-activity-oldestpage') )
+			jq('#buddypress li.load-more').addClass('loading');
+
+			if ( null === jq.cookie('bp-activity-oldestpage') ) {
 				jq.cookie('bp-activity-oldestpage', 1, {
 					path: '/'
 				} );
+			}
 
-			var oldest_page = ( jq.cookie('bp-activity-oldestpage') * 1 ) + 1;
-
-			var just_posted = [];
+			oldest_page = ( jq.cookie('bp-activity-oldestpage') * 1 ) + 1;
+			just_posted = [];
 
 			jq('.activity-list li.just-posted').each( function(){
 				just_posted.push( jq(this).attr('id').replace( 'activity-','' ) );
 			});
 
-			jq.post( ajaxurl, {
+			load_more_args = {
 				action: 'activity_get_older_updates',
 				'cookie': bp_get_cookies(),
 				'page': oldest_page,
 				'exclude_just_posted': just_posted.join(',')
-			},
+			};
+
+			load_more_search = bp_get_querystring('s');
+
+			if ( load_more_search ) {
+				load_more_args.search_terms = load_more_search;
+			}
+
+			bp_ajax_request = jq.post( ajaxurl, load_more_args,
 			function(response)
 			{
-				jq("#buddypress li.load-more").removeClass('loading');
+				jq('#buddypress li.load-more').removeClass('loading');
 				jq.cookie( 'bp-activity-oldestpage', oldest_page, {
 					path: '/'
 				} );
-				jq("#buddypress ul.activity-list").append(response.contents);
+				jq('#buddypress ul.activity-list').append(response.contents);
 
 				target.parent().hide();
 			}, 'json' );
@@ -420,17 +452,18 @@ jq(document).ready( function() {
 
 			target.parent().hide();
 
-			/** 
-			 * If a plugin is updating the recorded_date of an activity 
+			/**
+			 * If a plugin is updating the recorded_date of an activity
 			 * it will be loaded as a new one. We need to look in the
 			 * stream and eventually remove similar ids to avoid "double".
 			 */
 			activity_html = jq.parseHTML( newest_activities );
-			
+
 			jq.each( activity_html, function( i, el ){
-				if( 'LI' == el.nodeName && jq(el).hasClass( 'just-posted' ) ) {
-					if( jq( '#' + jq(el).attr( 'id' ) ).length )
+				if( 'LI' === el.nodeName && jq(el).hasClass( 'just-posted' ) ) {
+					if( jq( '#' + jq(el).attr( 'id' ) ).length ) {
 						jq( '#' + jq(el).attr( 'id' ) ).remove();
+					}
 				}
 			} );
 
@@ -444,13 +477,14 @@ jq(document).ready( function() {
 
 	// Activity "Read More" links
 	jq('div.activity').on('click', '.activity-read-more a', function(event) {
-		var target = jq(event.target);
-		var link_id = target.parent().attr('id').split('-');
-		var a_id = link_id[3];
-		var type = link_id[0]; /* activity or acomment */
-
-		var inner_class = type == 'acomment' ? 'acomment-content' : 'activity-inner';
-		var a_inner = jq('#' + type + '-' + a_id + ' .' + inner_class + ':first' );
+		var target = jq(event.target),
+			link_id = target.parent().attr('id').split('-'),
+			a_id    = link_id[3],
+			type    = link_id[0], /* activity or acomment */
+			inner_class, a_inner;
+
+		inner_class = type === 'acomment' ? 'acomment-content' : 'activity-inner';
+		a_inner = jq('#' + type + '-' + a_id + ' .' + inner_class + ':first' );
 		jq(target).addClass('loading');
 
 		jq.post( ajaxurl, {
@@ -470,24 +504,33 @@ jq(document).ready( function() {
 	jq('form.ac-form').hide();
 
 	/* Hide excess comments */
-	if ( jq('.activity-comments').length )
+	if ( jq('.activity-comments').length ) {
 		bp_legacy_theme_hide_comments();
+	}
 
 	/* Activity list event delegation */
 	jq('div.activity').on( 'click', function(event) {
-		var target = jq(event.target);
+		var target = jq(event.target),
+			id, ids, a_id, c_id, form,
+			form_parent, form_id,
+			tmp_id, comment_id, comment,
+			ajaxdata,
+			ak_nonce,
+			show_all_a, new_count,
+			link_href, comment_li, nonce;
 
 		/* Comment / comment reply links */
 		if ( target.hasClass('acomment-reply') || target.parent().hasClass('acomment-reply') ) {
-			if ( target.parent().hasClass('acomment-reply') )
+			if ( target.parent().hasClass('acomment-reply') ) {
 				target = target.parent();
+			}
 
-			var id = target.attr('id');
+			id  = target.attr('id');
 			ids = id.split('-');
 
-			var a_id = ids[2]
-			var c_id = target.attr('href').substr( 10, target.attr('href').length );
-			var form = jq( '#ac-form-' + a_id );
+			a_id = ids[2];
+			c_id = target.attr('href').substr( 10, target.attr('href').length );
+			form = jq( '#ac-form-' + a_id );
 
 			form.css( 'display', 'none' );
 			form.removeClass('root');
@@ -495,23 +538,25 @@ jq(document).ready( function() {
 
 			/* Hide any error messages */
 			form.children('div').each( function() {
-				if ( jq(this).hasClass( 'error' ) )
+				if ( jq(this).hasClass( 'error' ) ) {
 					jq(this).hide();
+				}
 			});
 
-			if ( ids[1] != 'comment' ) {
+			if ( ids[1] !== 'comment' ) {
 				jq('#acomment-' + c_id).append( form );
 			} else {
 				jq('#activity-' + a_id + ' .activity-comments').append( form );
 			}
 
-			if ( form.parent().hasClass( 'activity-comments' ) )
+			if ( form.parent().hasClass( 'activity-comments' ) ) {
 				form.addClass('root');
+			}
 
 			form.slideDown( 200 );
 			jq.scrollTo( form, 500, {
 				offset:-100,
-				easing:'easeOutQuad'
+				easing:'swing'
 			} );
 			jq('#ac-form-' + ids[2] + ' textarea').focus();
 
@@ -519,36 +564,36 @@ jq(document).ready( function() {
 		}
 
 		/* Activity comment posting */
-		if ( target.attr('name') == 'ac_form_submit' ) {
-			var form = target.parents( 'form' );
-			var form_parent = form.parent();
-			var form_id = form.attr('id').split('-');
+		if ( target.attr('name') === 'ac_form_submit' ) {
+			form = target.parents( 'form' );
+			form_parent = form.parent();
+			form_id = form.attr('id').split('-');
 
 			if ( !form_parent.hasClass('activity-comments') ) {
-				var tmp_id = form_parent.attr('id').split('-');
-				var comment_id = tmp_id[1];
+				tmp_id = form_parent.attr('id').split('-');
+				comment_id = tmp_id[1];
 			} else {
-				var comment_id = form_id[2];
+				comment_id = form_id[2];
 			}
 
-			var content = jq( '#' + form.attr('id') + ' textarea' );
+			content = jq( '#' + form.attr('id') + ' textarea' );
 
 			/* Hide any error messages */
 			jq( '#' + form.attr('id') + ' div.error').hide();
 			target.addClass('loading').prop('disabled', true);
 			content.addClass('loading').prop('disabled', true);
 
-			var ajaxdata = {
+			ajaxdata = {
 				action: 'new_activity_comment',
 				'cookie': bp_get_cookies(),
-				'_wpnonce_new_activity_comment': jq("#_wpnonce_new_activity_comment").val(),
+				'_wpnonce_new_activity_comment': jq('#_wpnonce_new_activity_comment').val(),
 				'comment_id': comment_id,
 				'form_id': form_id[2],
 				'content': content.val()
 			};
 
 			// Akismet
-			var ak_nonce = jq('#_bp_as_nonce_' + comment_id).val();
+			ak_nonce = jq('#_bp_as_nonce_' + comment_id).val();
 			if ( ak_nonce ) {
 				ajaxdata['_bp_as_nonce_' + comment_id] = ak_nonce;
 			}
@@ -558,12 +603,12 @@ jq(document).ready( function() {
 				content.removeClass('loading');
 
 				/* Check for errors and append if found. */
-				if ( response[0] + response[1] == '-1' ) {
+				if ( response[0] + response[1] === '-1' ) {
 					form.append( jq( response.substr( 2, response.length ) ).hide().fadeIn( 200 ) );
 				} else {
 					var activity_comments = form.parent();
 					form.fadeOut( 200, function() {
-						if ( 0 == activity_comments.children('ul').length ) {
+						if ( 0 === activity_comments.children('ul').length ) {
 							if ( activity_comments.hasClass('activity-comments') ) {
 								activity_comments.prepend('<ul></ul>');
 							} else {
@@ -584,15 +629,15 @@ jq(document).ready( function() {
 					jq('#activity-' + form_id[2] + ' a.acomment-reply span').html( Number( jq('#activity-' + form_id[2] + ' a.acomment-reply span').html() ) + 1 );
 
 					// Increment the 'Show all x comments' string, if present
-					var show_all_a = activity_comments.find('.show-all').find('a');
+					show_all_a = activity_comments.find('.show-all').find('a');
 					if ( show_all_a ) {
-						var new_count = jq('li#activity-' + form_id[2] + ' a.acomment-reply span').html();
+						new_count = jq('li#activity-' + form_id[2] + ' a.acomment-reply span').html();
 						show_all_a.html( BP_DTheme.show_x_comments.replace( '%d', new_count ) );
 					}
 				}
 
-				jq(target).prop("disabled", false);
-				jq(content).prop("disabled", false);
+				jq(target).prop('disabled', false);
+				jq(content).prop('disabled', false);
 			});
 
 			return false;
@@ -600,14 +645,14 @@ jq(document).ready( function() {
 
 		/* Deleting an activity comment */
 		if ( target.hasClass('acomment-delete') ) {
-			var link_href = target.attr('href');
-			var comment_li = target.parent().parent();
-			var form = comment_li.parents('div.activity-comments').children('form');
+			link_href = target.attr('href');
+			comment_li = target.parent().parent();
+			form = comment_li.parents('div.activity-comments').children('form');
 
-			var nonce = link_href.split('_wpnonce=');
+			nonce = link_href.split('_wpnonce=');
 			nonce = nonce[1];
 
-			var comment_id = link_href.split('cid=');
+			comment_id = link_href.split('cid=');
 			comment_id = comment_id[1].split('&');
 			comment_id = comment_id[0];
 
@@ -627,32 +672,35 @@ jq(document).ready( function() {
 			},
 			function(response) {
 				/* Check for errors and append if found. */
-				if ( response[0] + response[1] == '-1' ) {
+				if ( response[0] + response[1] === '-1' ) {
 					comment_li.prepend( jq( response.substr( 2, response.length ) ).hide().fadeIn( 200 ) );
 				} else {
-					var children = jq( '#' + comment_li.attr('id') + ' ul' ).children('li');
-					var child_count = 0;
+					var children  = jq( '#' + comment_li.attr('id') + ' ul' ).children('li'),
+						child_count = 0,
+						count_span, new_count, show_all_a;
+
 					jq(children).each( function() {
-						if ( !jq(this).is(':hidden') )
+						if ( !jq(this).is(':hidden') ) {
 							child_count++;
+						}
 					});
 					comment_li.fadeOut(200, function() {
 						comment_li.remove();
 					});
 
 					/* Decrease the "Reply (X)" button count */
-					var count_span = jq('#' + comment_li.parents('#activity-stream > li').attr('id') + ' a.acomment-reply span');
-					var new_count = count_span.html() - ( 1 + child_count );
+					count_span = jq('#' + comment_li.parents('#activity-stream > li').attr('id') + ' a.acomment-reply span');
+					new_count = count_span.html() - ( 1 + child_count );
 					count_span.html(new_count);
 
 					// Change the 'Show all x comments' text
-					var show_all_a = comment_li.siblings('.show-all').find('a');
+					show_all_a = comment_li.siblings('.show-all').find('a');
 					if ( show_all_a ) {
 						show_all_a.html( BP_DTheme.show_x_comments.replace( '%d', new_count ) );
 					}
 
 					/* If that was the last comment for the item, remove the has-comments class to clean up the styling */
-					if ( 0 == new_count ) {
+					if ( 0 === new_count ) {
 						jq(comment_li.parents('#activity-stream > li')).removeClass('has-comments');
 					}
 				}
@@ -663,8 +711,8 @@ jq(document).ready( function() {
 
 		// Spam an activity stream comment
 		if ( target.hasClass( 'spam-activity-comment' ) ) {
-			var link_href  = target.attr( 'href' );
-			var comment_li = target.parent().parent();
+			link_href  = target.attr( 'href' );
+			comment_li = target.parent().parent();
 
 			target.addClass('loading');
 
@@ -683,12 +731,14 @@ jq(document).ready( function() {
 
 			function ( response ) {
 				// Check for errors and append if found.
-				if ( response[0] + response[1] == '-1' ) {
+				if ( response[0] + response[1] === '-1' ) {
 					comment_li.prepend( jq( response.substr( 2, response.length ) ).hide().fadeIn( 200 ) );
 
 				} else {
-					var children = jq( '#' + comment_li.attr( 'id' ) + ' ul' ).children( 'li' );
-					var child_count = 0;
+					var children  = jq( '#' + comment_li.attr( 'id' ) + ' ul' ).children( 'li' ),
+						child_count = 0,
+						parent_li;
+
 					jq(children).each( function() {
 						if ( !jq( this ).is( ':hidden' ) ) {
 							child_count++;
@@ -697,7 +747,7 @@ jq(document).ready( function() {
 					comment_li.fadeOut( 200 );
 
 					// Decrease the "Reply (X)" button count
-					var parent_li = comment_li.parents( '#activity-stream > li' );
+					parent_li = comment_li.parents( '#activity-stream > li' );
 					jq( '#' + parent_li.attr( 'id' ) + ' a.acomment-reply span' ).html( jq( '#' + parent_li.attr( 'id' ) + ' a.acomment-reply span' ).html() - ( 1 + child_count ) );
 				}
 			});
@@ -722,29 +772,33 @@ jq(document).ready( function() {
 		if ( target.hasClass( 'ac-reply-cancel' ) ) {
 			jq(target).closest('.ac-form').slideUp( 200 );
 			return false;
-		};
+		}
 	});
 
 	/* Escape Key Press for cancelling comment forms */
 	jq(document).keydown( function(e) {
 		e = e || window.event;
-		if (e.target)
+		if (e.target) {
 			element = e.target;
-		else if (e.srcElement)
+		} else if (e.srcElement) {
 			element = e.srcElement;
+		}
 
-		if( element.nodeType == 3)
+		if( element.nodeType === 3) {
 			element = element.parentNode;
+		}
 
-		if( e.ctrlKey == true || e.altKey == true || e.metaKey == true )
+		if( e.ctrlKey === true || e.altKey === true || e.metaKey === true ) {
 			return;
+		}
 
 		var keyCode = (e.keyCode) ? e.keyCode : e.which;
 
-		if ( keyCode == 27 ) {
-			if (element.tagName == 'TEXTAREA') {
-				if ( jq(element).hasClass('ac-input') )
+		if ( keyCode === 27 ) {
+			if (element.tagName === 'TEXTAREA') {
+				if ( jq(element).hasClass('ac-input') ) {
 					jq(element).parent().parent().parent().slideUp( 200 );
+				}
 			}
 		}
 	});
@@ -753,18 +807,20 @@ jq(document).ready( function() {
 
 	/* The search form on all directory pages */
 	jq( '.dir-search, .groups-members-search' ).on( 'click', function(event) {
-		if ( jq(this).hasClass('no-ajax') )
+		if ( jq(this).hasClass('no-ajax') ) {
 			return;
+		}
 
-		var target = jq(event.target);
+		var target = jq(event.target),
+			css_id, object, template;
 
-		if ( target.attr('type') == 'submit' ) {
-			var css_id = jq('.item-list-tabs li.selected').attr('id').split( '-' );
-			var object = css_id[0];
-			var template = null;
+		if ( target.attr('type') === 'submit' ) {
+			css_id = jq('.item-list-tabs li.selected').attr('id').split( '-' );
+			object = css_id[0];
+			template = null;
 
 			// The Group Members page specifies its own template
-			if ( 'members' == object && 'groups' == css_id[1] ) {
+			if ( 'members' === object && 'groups' === css_id[1] ) {
 				object = 'group_members';
 				template = 'groups/single/members';
 			}
@@ -779,21 +835,25 @@ jq(document).ready( function() {
 
 	/* When a navigation tab is clicked - e.g. | All Groups | My Groups | */
 	jq('div.item-list-tabs').on( 'click', function(event) {
-		if ( jq(this).hasClass('no-ajax') )
+		if ( jq(this).hasClass('no-ajax') )  {
 			return;
+		}
+
+		var targetElem = ( event.target.nodeName === 'SPAN' ) ? event.target.parentNode : event.target,
+			target       = jq( targetElem ).parent(),
+			css_id, object, scope, filter, search_terms;
 
-		var targetElem = ( event.target.nodeName == 'SPAN' ) ? event.target.parentNode : event.target;
-		var target     = jq( targetElem ).parent();
-		if ( 'LI' == target[0].nodeName && !target.hasClass( 'last' ) ) {
-			var css_id = target.attr('id').split( '-' );
-			var object = css_id[0];
+		if ( 'LI' === target[0].nodeName && !target.hasClass( 'last' ) ) {
+			css_id = target.attr('id').split( '-' );
+			object = css_id[0];
 
-			if ( 'activity' == object )
+			if ( 'activity' === object ) {
 				return false;
+			}
 
-			var scope = css_id[1];
-			var filter = jq("#" + object + "-order-select select").val();
-			var search_terms = jq("#" + object + "_search").val();
+			scope = css_id[1];
+			filter = jq('#' + object + '-order-select select').val();
+			search_terms = jq('#' + object + '_search').val();
 
 			bp_filter_request( object, filter, scope, 'div.' + object, search_terms, 1, jq.cookie('bp-' + object + '-extras') );
 
@@ -803,36 +863,43 @@ jq(document).ready( function() {
 
 	/* When the filter select box is changed re-query */
 	jq('li.filter select').change( function() {
-		if ( jq('.item-list-tabs li.selected').length )
-			var el = jq('.item-list-tabs li.selected');
-		else
-			var el = jq(this);
-
-		var css_id = el.attr('id').split('-');
-		var object = css_id[0];
-		var scope = css_id[1];
-		var filter = jq(this).val();
-		var search_terms = false;
-		var template = null;
-
-		if ( jq('.dir-search input').length )
+		var el,
+			css_id, object, scope, filter, search_terms, template,
+			$gm_search;
+
+		if ( jq('.item-list-tabs li.selected').length ) {
+			el = jq('.item-list-tabs li.selected');
+		} else {
+			el = jq(this);
+		}
+
+		css_id = el.attr('id').split('-');
+		object = css_id[0];
+		scope = css_id[1];
+		filter = jq(this).val();
+		search_terms = false;
+		template = null;
+
+		if ( jq('.dir-search input').length ) {
 			search_terms = jq('.dir-search input').val();
+		}
 
 		// The Group Members page has a different selector for its
 		// search terms box
-		var $gm_search = jq( '.groups-members-search input' );
+		$gm_search = jq( '.groups-members-search input' );
 		if ( $gm_search.length ) {
 			search_terms = $gm_search.val();
 		}
 
 		// On the Groups Members page, we specify a template
-		if ( 'members' == object && 'groups' == scope ) {
+		if ( 'members' === object && 'groups' === scope ) {
 			object = 'group_members';
 			template = 'groups/single/members';
 		}
 
-		if ( 'friends' == object )
+		if ( 'friends' === object ) {
 			object = 'members';
+		}
 
 		bp_filter_request( object, filter, scope, 'div.' + object, search_terms, 1, jq.cookie('bp-' + object + '-extras'), null, template );
 
@@ -841,56 +908,64 @@ jq(document).ready( function() {
 
 	/* All pagination links run through this function */
 	jq('#buddypress').on( 'click', function(event) {
-		var target = jq(event.target);
+		var target = jq(event.target),
+			el,
+			css_id, object, search_terms, pagination_id, template, page_number,
+			$gm_search,
+			caller;
 
-		if ( target.hasClass('button') )
+		if ( target.hasClass('button') ) {
 			return true;
+		}
 
 		if ( target.parent().parent().hasClass('pagination') && !target.parent().parent().hasClass('no-ajax') ) {
-			if ( target.hasClass('dots') || target.hasClass('current') )
+			if ( target.hasClass('dots') || target.hasClass('current') ) {
 				return false;
+			}
 
-			if ( jq('.item-list-tabs li.selected').length )
-				var el = jq('.item-list-tabs li.selected');
-			else
-				var el = jq('li.filter select');
+			if ( jq('.item-list-tabs li.selected').length ) {
+				el = jq('.item-list-tabs li.selected');
+			} else {
+				el = jq('li.filter select');
+			}
 
-			var css_id = el.attr('id').split( '-' );
-			var object = css_id[0];
-			var search_terms = false;
-			var pagination_id = jq(target).closest('.pagination-links').attr('id');
-			var template = null;
+			css_id = el.attr('id').split( '-' );
+			object = css_id[0];
+			search_terms = false;
+			pagination_id = jq(target).closest('.pagination-links').attr('id');
+			template = null;
 
-			var page_number = target.attr('href').split( '=' );
+			page_number = target.attr('href').split( '=' );
 			page_number = page_number[1];
 
 			// Search terms
-			if ( jq('div.dir-search input').length )
-				search_terms = jq('.dir-search input').val();
+			if ( jq('div.dir-search input').length ) {
+				search_terms =  jq('.dir-search input').prop('placeholder') ? jq('.dir-search input').prop('placeholder') : jq('.dir-search input').val();
+			}
 
 			// The Group Members page has a different selector for
 			// its search terms box
-			var $gm_search = jq( '.groups-members-search input' );
+			$gm_search = jq( '.groups-members-search input' );
 			if ( $gm_search.length ) {
 				search_terms = $gm_search.val();
 			}
 
 			// On the Groups Members page, we specify a template
-			if ( 'members' == object && 'groups' == css_id[1] ) {
+			if ( 'members' === object && 'groups' === css_id[1] ) {
 				object = 'group_members';
 				template = 'groups/single/members';
 			}
 
 			// On the Admin > Requests page, we need to reset the object,
 			// since "admin" isn't specific enough
-			if ( 'admin' == object && jq( 'body' ).hasClass( 'membership-requests' ) ) {
+			if ( 'admin' === object && jq( 'body' ).hasClass( 'membership-requests' ) ) {
 				object = 'requests';
 			}
 
 			if ( pagination_id.indexOf( 'pag-bottom' ) !== -1 ) {
-				var caller = 'pag-bottom';
+				caller = 'pag-bottom';
 			} else {
-				var caller = null;
+				caller = null;
 			}
 
 			bp_filter_request( object, jq.cookie('bp-' + object + '-filter'), jq.cookie('bp-' + object + '-scope'), 'div.' + object, search_terms, page_number, jq.cookie('bp-' + object + '-extras'), caller, template );
@@ -904,23 +979,26 @@ jq(document).ready( function() {
 
 	/* Hit the "New Topic" button on the forums directory page */
 	jq('a.show-hide-new').on( 'click', function() {
-		if ( !jq('#new-topic-post').length )
+		if ( !jq('#new-topic-post').length ) {
 			return false;
+		}
 
-		if ( jq('#new-topic-post').is(":visible") )
+		if ( jq('#new-topic-post').is(':visible') ) {
 			jq('#new-topic-post').slideUp(200);
-		else
+		} else {
 			jq('#new-topic-post').slideDown(200, function() {
 				jq('#topic_title').focus();
 			} );
+		}
 
 		return false;
 	});
 
 	/* Cancel the posting of a new forum topic */
 	jq('#submit_topic_cancel').on( 'click', function() {
-		if ( !jq('#new-topic-post').length )
+		if ( !jq('#new-topic-post').length ) {
 			return false;
+		}
 
 		jq('#new-topic-post').slideUp(200);
 		return false;
@@ -935,11 +1013,12 @@ jq(document).ready( function() {
 	/** Invite Friends Interface ****************************************/
 
 	/* Select a user from the list of friends and add them to the invite list */
-	jq("#send-invite-form").on( 'click', '#invite-list input', function() {
+	jq('#send-invite-form').on( 'click', '#invite-list input', function() {
 		// invites-loop template contains a div with the .invite class
 		// We use the existence of this div to check for old- vs new-
 		// style templates.
-		var invites_new_template = jq( "#send-invite-form > .invite" ).length;
+		var invites_new_template = jq( '#send-invite-form > .invite' ).length,
+			friend_id, friend_action;
 
 		jq('.ajax-loader').toggle();
 
@@ -948,12 +1027,12 @@ jq(document).ready( function() {
 			jq( this ).parents( 'ul' ).find( 'input' ).prop( 'disabled', true );
 		}
 
-		var friend_id = jq(this).val();
+		friend_id = jq(this).val();
 
-		if ( jq(this).prop('checked') == true ) {
-			var friend_action = 'invite';
+		if ( jq(this).prop('checked') === true ) {
+			friend_action = 'invite';
 		} else {
-			var friend_action = 'uninvite';
+			friend_action = 'uninvite';
 		}
 
 		if ( ! invites_new_template ) {
@@ -964,14 +1043,14 @@ jq(document).ready( function() {
 			action: 'groups_invite_user',
 			'friend_action': friend_action,
 			'cookie': bp_get_cookies(),
-			'_wpnonce': jq("#_wpnonce_invite_uninvite_user").val(),
+			'_wpnonce': jq('#_wpnonce_invite_uninvite_user').val(),
 			'friend_id': friend_id,
-			'group_id': jq("#group_id").val()
+			'group_id': jq('#group_id').val()
 		},
 		function(response)
 		{
-			if ( jq("#message") ) {
-				jq("#message").hide();
+			if ( jq('#message') ) {
+				jq('#message').hide();
 			}
 
 			if ( invites_new_template ) {
@@ -983,9 +1062,9 @@ jq(document).ready( function() {
 				// single invitation element
 				jq('.ajax-loader').toggle();
 
-				if ( friend_action == 'invite' ) {
+				if ( friend_action === 'invite' ) {
 					jq('#friend-list').append(response);
-				} else if ( friend_action == 'uninvite' ) {
+				} else if ( friend_action === 'uninvite' ) {
 					jq('#friend-list li#uid-' + friend_id).remove();
 				}
 
@@ -995,15 +1074,15 @@ jq(document).ready( function() {
 	});
 
 	/* Remove a user from the list of users to invite to a group */
-	jq("#send-invite-form").on('click', 'a.remove', function() {
+	jq('#send-invite-form').on('click', 'a.remove', function() {
 		// invites-loop template contains a div with the .invite class
 		// We use the existence of this div to check for old- vs new-
 		// style templates.
-		var invites_new_template = jq("#send-invite-form > .invite").length;
+		var invites_new_template = jq('#send-invite-form > .invite').length,
+			friend_id = jq(this).attr('id');
 
 		jq('.ajax-loader').toggle();
 
-		var friend_id = jq(this).attr('id');
 		friend_id = friend_id.split('-');
 		friend_id = friend_id[1];
 
@@ -1011,9 +1090,9 @@ jq(document).ready( function() {
 			action: 'groups_invite_user',
 			'friend_action': 'uninvite',
 			'cookie': bp_get_cookies(),
-			'_wpnonce': jq("#_wpnonce_invite_uninvite_user").val(),
+			'_wpnonce': jq('#_wpnonce_invite_uninvite_user').val(),
 			'friend_id': friend_id,
-			'group_id': jq("#group_id").val()
+			'group_id': jq('#group_id').val()
 		},
 		function(response)
 		{
@@ -1037,8 +1116,8 @@ jq(document).ready( function() {
 	jq( '.visibility-toggle-link' ).on( 'click', function( event ) {
 		event.preventDefault();
 
-		jq( this ).parent().hide()
-			.siblings( '.field-visibility-settings' ).show();
+		jq( this ).parent().hide().addClass( 'field-visibility-settings-hide' )
+			.siblings( '.field-visibility-settings' ).show().addClass( 'field-visibility-settings-open' );
 	} );
 
 	jq( '.field-visibility-settings-close' ).on( 'click', function( event ) {
@@ -1047,13 +1126,13 @@ jq(document).ready( function() {
 		var settings_div = jq( this ).parent(),
 			vis_setting_text = settings_div.find( 'input:checked' ).parent().text();
 
-		settings_div.hide()
+		settings_div.hide().removeClass( 'field-visibility-settings-open' )
 			.siblings( '.field-visibility-settings-toggle' )
 				.children( '.current-visibility-level' ).text( vis_setting_text ).end()
-			.show();
+			.show().removeClass( 'field-visibility-settings-hide' );
 	} );
 
-	jq("#profile-edit-form input:not(:submit), #profile-edit-form textarea, #profile-edit-form select, #signup_form input:not(:submit), #signup_form textarea, #signup_form select").change( function() {
+	jq('#profile-edit-form input:not(:submit), #profile-edit-form textarea, #profile-edit-form select, #signup_form input:not(:submit), #signup_form textarea, #signup_form select').change( function() {
 		var shouldconfirm = true;
 
 		jq('#profile-edit-form input:submit, #signup_form input:submit').on( 'click', function() {
@@ -1070,25 +1149,24 @@ jq(document).ready( function() {
 	/** Friendship Requests **************************************/
 
 	/* Accept and Reject friendship request buttons */
-	jq("#friend-list a.accept, #friend-list a.reject").on( 'click', function() {
-		var button = jq(this);
-		var li = jq(this).parents('#friend-list li');
-		var action_div = jq(this).parents('li div.action');
-
-		var id = li.attr('id').substr( 11, li.attr('id').length );
-		var link_href = button.attr('href');
-
-		var nonce = link_href.split('_wpnonce=');
-		nonce = nonce[1];
-
-		if ( jq(this).hasClass('accepted') || jq(this).hasClass('rejected') )
+	jq('#friend-list a.accept, #friend-list a.reject').on( 'click', function() {
+		var button   = jq(this),
+			li         = jq(this).parents('#friend-list li'),
+			action_div = jq(this).parents('li div.action'),
+			id         = li.attr('id').substr( 11, li.attr('id').length ),
+			link_href  = button.attr('href'),
+			nonce      = link_href.split('_wpnonce=')[1],
+			action;
+
+		if ( jq(this).hasClass('accepted') || jq(this).hasClass('rejected') ) {
 			return false;
+		}
 
 		if ( jq(this).hasClass('accept') ) {
-			var action = 'accept_friendship';
+			action = 'accept_friendship';
 			action_div.children('a.reject').css( 'visibility', 'hidden' );
 		} else {
-			var action = 'reject_friendship';
+			action = 'reject_friendship';
 			action_div.children('a.accept').css( 'visibility', 'hidden' );
 		}
 
@@ -1103,7 +1181,7 @@ jq(document).ready( function() {
 		function(response) {
 			button.removeClass('loading');
 
-			if ( response[0] + response[1] == '-1' ) {
+			if ( response[0] + response[1] === '-1' ) {
 				li.prepend( response.substr( 2, response.length ) );
 				li.children('#message').hide().fadeIn(200);
 			} else {
@@ -1125,17 +1203,17 @@ jq(document).ready( function() {
 	/* Add / Remove friendship buttons */
 	jq( '#members-dir-list, #members-group-list' ).on('click', '.friendship-button a', function() {
 		jq(this).parent().addClass('loading');
-		var fid = jq(this).attr('id');
+		var fid   = jq(this).attr('id'),
+			nonce   = jq(this).attr('href'),
+			thelink = jq(this);
+
 		fid = fid.split('-');
 		fid = fid[1];
 
-		var nonce = jq(this).attr('href');
 		nonce = nonce.split('?_wpnonce=');
 		nonce = nonce[1].split('&');
 		nonce = nonce[0];
 
-		var thelink = jq(this);
-
 		jq.post( ajaxurl, {
 			action: 'addremove_friend',
 			'cookie': bp_get_cookies(),
@@ -1144,10 +1222,10 @@ jq(document).ready( function() {
 		},
 		function(response)
 		{
-			var action = thelink.attr('rel');
-			var parentdiv = thelink.parent();
+			var action  = thelink.attr('rel');
+				parentdiv = thelink.parent();
 
-			if ( action == 'add' ) {
+			if ( action === 'add' ) {
 				jq(parentdiv).fadeOut(200,
 					function() {
 						parentdiv.removeClass('add_friend');
@@ -1157,7 +1235,7 @@ jq(document).ready( function() {
 					}
 					);
 
-			} else if ( action == 'remove' ) {
+			} else if ( action === 'remove' ) {
 				jq(parentdiv).fadeOut(200,
 					function() {
 						parentdiv.removeClass('remove_friend');
@@ -1175,26 +1253,26 @@ jq(document).ready( function() {
 
 	// Confirmation when clicking Leave Group in group headers
 	jq('#buddypress').on('click', '.group-button .leave-group', function() {
-		if ( false == confirm( BP_DTheme.leave_group_confirm ) ) {
+		if ( false === confirm( BP_DTheme.leave_group_confirm ) ) {
 			return false;
 		}
 	});
 
 	jq('#groups-dir-list').on('click', '.group-button a', function() {
-		var gid = jq(this).parent().attr('id');
+		var gid   = jq(this).parent().attr('id'),
+			nonce   = jq(this).attr('href'),
+			thelink = jq(this);
+
 		gid = gid.split('-');
 		gid = gid[1];
 
-		var nonce = jq(this).attr('href');
 		nonce = nonce.split('?_wpnonce=');
 		nonce = nonce[1].split('&');
 		nonce = nonce[0];
 
-		var thelink = jq(this);
-
 		// Leave Group confirmation within directories - must intercept
 		// AJAX request
-		if ( thelink.hasClass( 'leave-group' ) && false == confirm( BP_DTheme.leave_group_confirm ) ) {
+		if ( thelink.hasClass( 'leave-group' ) && false === confirm( BP_DTheme.leave_group_confirm ) ) {
 			return false;
 		}
 
@@ -1218,8 +1296,8 @@ jq(document).ready( function() {
 					function() {
 						parentdiv.fadeIn(200).html(response);
 
-						var mygroups = jq('#groups-personal span');
-						var add      = 1;
+						var mygroups = jq('#groups-personal span'),
+							add        = 1;
 
 						if( thelink.hasClass( 'leave-group' ) ) {
 							// hidden groups slide up
@@ -1258,14 +1336,16 @@ jq(document).ready( function() {
 
 	/** Message search*/
 	jq('.message-search').on( 'click', function(event) {
-		if ( jq(this).hasClass('no-ajax') )
+		if ( jq(this).hasClass('no-ajax') ) {
 			return;
+		}
 
-		var target = jq(event.target);
+		var target = jq(event.target),
+			object;
 
-		if ( target.attr('type') == 'submit' ) {
+		if ( target.attr('type') === 'submit' ) {
 			//var css_id = jq('.item-list-tabs li.selected').attr('id').split( '-' );
-			var object = 'messages';
+			object = 'messages';
 
 			bp_filter_request( object, jq.cookie('bp-' + object + '-filter'), jq.cookie('bp-' + object + '-scope') , 'div.' + object, target.parent().children('label').children('input').val(), 1, jq.cookie('bp-' + object + '-extras') );
 
@@ -1274,40 +1354,40 @@ jq(document).ready( function() {
 	});
 
 	/* AJAX send reply functionality */
-	jq("#send_reply_button").click(
+	jq('#send_reply_button').click(
 		function() {
 			var order = jq('#messages_order').val() || 'ASC',
-			offset = jq('#message-recipients').offset();
+				offset  = jq('#message-recipients').offset(),
+				button  = jq('#send_reply_button');
 
-			var button = jq("#send_reply_button");
 			jq(button).addClass('loading');
 
 			jq.post( ajaxurl, {
 				action: 'messages_send_reply',
 				'cookie': bp_get_cookies(),
-				'_wpnonce': jq("#send_message_nonce").val(),
+				'_wpnonce': jq('#send_message_nonce').val(),
 
-				'content': jq("#message_content").val(),
-				'send_to': jq("#send_to").val(),
-				'subject': jq("#subject").val(),
-				'thread_id': jq("#thread_id").val()
+				'content': jq('#message_content').val(),
+				'send_to': jq('#send_to').val(),
+				'subject': jq('#subject').val(),
+				'thread_id': jq('#thread_id').val()
 			},
 			function(response)
 			{
-				if ( response[0] + response[1] == "-1" ) {
+				if ( response[0] + response[1] === '-1' ) {
 					jq('#send-reply').prepend( response.substr( 2, response.length ) );
 				} else {
 					jq('#send-reply #message').remove();
-					jq("#message_content").val('');
+					jq('#message_content').val('');
 
-					if ( 'ASC' == order ) {
+					if ( 'ASC' === order ) {
 						jq('#send-reply').before( response );
 					} else {
 						jq('#message-recipients').after( response );
 						jq(window).scrollTop(offset.top);
 					}
 
-					jq(".new-message").hide().slideDown( 200, function() {
+					jq('.new-message').hide().slideDown( 200, function() {
 						jq('.new-message').removeClass('new-message');
 					});
 				}
@@ -1319,24 +1399,26 @@ jq(document).ready( function() {
 	);
 
 	/* Marking private messages as read and unread */
-	jq("#mark_as_read, #mark_as_unread").click(function() {
-		var checkboxes_tosend = '';
-		var checkboxes = jq("#message-threads tr td input[type='checkbox']");
-
-		if ( 'mark_as_unread' == jq(this).attr('id') ) {
-			var currentClass = 'read'
-			var newClass = 'unread'
-			var unreadCount = 1;
-			var inboxCount = 0;
-			var unreadCountDisplay = 'inline';
-			var action = 'messages_markunread';
+	jq('#mark_as_read, #mark_as_unread').click(function() {
+		var checkboxes_tosend = '',
+			checkboxes = jq('#message-threads tr td input[type="checkbox"]'),
+			currentClass, newClass, unreadCount, inboxCount, unreadCountDisplay, action,
+			inboxcount, thread_count;
+
+		if ( 'mark_as_unread' === jq(this).attr('id') ) {
+			currentClass = 'read';
+			newClass = 'unread';
+			unreadCount = 1;
+			inboxCount = 0;
+			unreadCountDisplay = 'inline';
+			action = 'messages_markunread';
 		} else {
-			var currentClass = 'unread'
-			var newClass = 'read'
-			var unreadCount = 0;
-			var inboxCount = 1;
-			var unreadCountDisplay = 'none';
-			var action = 'messages_markread';
+			currentClass = 'unread';
+			newClass = 'read';
+			unreadCount = 0;
+			inboxCount = 1;
+			unreadCountDisplay = 'none';
+			action = 'messages_markread';
 		}
 
 		checkboxes.each( function(i) {
@@ -1345,17 +1427,17 @@ jq(document).ready( function() {
 					checkboxes_tosend += jq(this).attr('value');
 					jq('#m-' + jq(this).attr('value')).removeClass(currentClass);
 					jq('#m-' + jq(this).attr('value')).addClass(newClass);
-					var thread_count = jq('#m-' + jq(this).attr('value') + ' td span.unread-count').html();
+					thread_count = jq('#m-' + jq(this).attr('value') + ' td span.unread-count').html();
 
 					jq('#m-' + jq(this).attr('value') + ' td span.unread-count').html(unreadCount);
 					jq('#m-' + jq(this).attr('value') + ' td span.unread-count').css('display', unreadCountDisplay);
 
-					var inboxcount = jq('tr.unread').length;
+					inboxcount = jq('tr.unread').length;
 
 					jq('#user-messages span').html( inboxcount );
 
-					if ( i != checkboxes.length - 1 ) {
-						checkboxes_tosend += ','
+					if ( i !== checkboxes.length - 1 ) {
+						checkboxes_tosend += ',';
 					}
 				}
 			}
@@ -1369,23 +1451,23 @@ jq(document).ready( function() {
 
 	/* Selecting unread and read messages in inbox */
 	jq( 'body.messages #item-body div.messages' ).on( 'change', '#message-type-select', function() {
-		var selection = this.value;
-		var checkboxes = jq( "td input[type='checkbox']" );
+		var selection   = this.value,
+			checkboxes    = jq( 'td input[type="checkbox"]' ),
+			checked_value = 'checked';
 
 		checkboxes.each( function(i) {
-			checkboxes[i].checked = "";
+			checkboxes[i].checked = '';
 		});
 
-		var checked_value = "checked";
 		switch ( selection ) {
-			case 'unread' :
-				checkboxes = jq("tr.unread td input[type='checkbox']");
+			case 'unread':
+				checkboxes = jq('tr.unread td input[type="checkbox"]');
 				break;
-			case 'read' :
-				checkboxes = jq("tr.read td input[type='checkbox']");
+			case 'read':
+				checkboxes = jq('tr.read td input[type="checkbox"]');
 				break;
-			case '' :
-				checked_value = "";
+			case '':
+				checked_value = '';
 				break;
 		}
 
@@ -1396,22 +1478,23 @@ jq(document).ready( function() {
 
 	/* Bulk delete messages */
 	jq( 'body.messages #item-body div.messages' ).on( 'click', '.messages-options-nav a', function() {
-		if ( -1 == jq.inArray( this.id, Array( 'delete_sentbox_messages', 'delete_inbox_messages' ) ) ) {
+		if ( -1 === jq.inArray( this.id, Array( 'delete_sentbox_messages', 'delete_inbox_messages' ) ) ) {
 			return;
 		}
 
 		checkboxes_tosend = '';
-		checkboxes = jq("#message-threads tr td input[type='checkbox']");
+		checkboxes = jq('#message-threads tr td input[type="checkbox"]');
 
 		jq('#message').remove();
 		jq(this).addClass('loading');
 
 		jq(checkboxes).each( function(i) {
-			if( jq(this).is(':checked') )
+			if( jq(this).is(':checked') ) {
 				checkboxes_tosend += jq(this).attr('value') + ',';
+			}
 		});
 
-		if ( '' == checkboxes_tosend ) {
+		if ( '' === checkboxes_tosend ) {
 			jq(this).removeClass('loading');
 			return false;
 		}
@@ -1420,7 +1503,7 @@ jq(document).ready( function() {
 			action: 'messages_delete',
 			'thread_ids': checkboxes_tosend
 		}, function(response) {
-			if ( response[0] + response[1] == "-1" ) {
+			if ( response[0] + response[1] === '-1' ) {
 				jq('#message-threads').prepend( response.substr( 2, response.length ) );
 			} else {
 				jq('#message-threads').before( '<div id="message" class="updated"><p>' + response + '</p></div>' );
@@ -1436,14 +1519,14 @@ jq(document).ready( function() {
 			}
 
 			jq('#message').hide().slideDown(150);
-			jq("#delete_inbox_messages, #delete_sentbox_messages").removeClass('loading');
+			jq('#delete_inbox_messages, #delete_sentbox_messages').removeClass('loading');
 		});
 
 		return false;
 	});
 
 	/* Close site wide notices in the sidebar */
-	jq("#close-notice").on( 'click', function() {
+	jq('#close-notice').on( 'click', function() {
 		jq(this).addClass('loading');
 		jq('#sidebar div.error').remove();
 
@@ -1452,9 +1535,9 @@ jq(document).ready( function() {
 			'notice_id': jq('.notice').attr('rel').substr( 2, jq('.notice').attr('rel').length )
 		},
 		function(response) {
-			jq("#close-notice").removeClass('loading');
+			jq('#close-notice').removeClass('loading');
 
-			if ( response[0] + response[1] == '-1' ) {
+			if ( response[0] + response[1] === '-1' ) {
 				jq('.notice').prepend( response.substr( 2, response.length ) );
 				jq( '#sidebar div.error').hide().fadeIn( 200 );
 			} else {
@@ -1465,62 +1548,62 @@ jq(document).ready( function() {
 	});
 
 	/* Toolbar & wp_list_pages Javascript IE6 hover class */
-	jq("#wp-admin-bar ul.main-nav li, #nav li").mouseover( function() {
+	jq('#wp-admin-bar ul.main-nav li, #nav li').mouseover( function() {
 		jq(this).addClass('sfhover');
 	});
 
-	jq("#wp-admin-bar ul.main-nav li, #nav li").mouseout( function() {
+	jq('#wp-admin-bar ul.main-nav li, #nav li').mouseout( function() {
 		jq(this).removeClass('sfhover');
 	});
 
 	/* Clear BP cookies on logout */
 	jq('a.logout').on( 'click', function() {
-		jq.cookie('bp-activity-scope', null, {
+		jq.removeCookie('bp-activity-scope', {
 			path: '/'
 		});
-		jq.cookie('bp-activity-filter', null, {
+		jq.removeCookie('bp-activity-filter', {
 			path: '/'
 		});
-		jq.cookie('bp-activity-oldestpage', null, {
+		jq.removeCookie('bp-activity-oldestpage', {
 			path: '/'
 		});
 
 		var objects = [ 'members', 'groups', 'blogs', 'forums' ];
 		jq(objects).each( function(i) {
-			jq.cookie('bp-' + objects[i] + '-scope', null, {
+			jq.removeCookie('bp-' + objects[i] + '-scope', {
 				path: '/'
 			} );
-			jq.cookie('bp-' + objects[i] + '-filter', null, {
+			jq.removeCookie('bp-' + objects[i] + '-filter', {
 				path: '/'
 			} );
-			jq.cookie('bp-' + objects[i] + '-extras', null, {
+			jq.removeCookie('bp-' + objects[i] + '-extras', {
 				path: '/'
 			} );
 		});
 	});
 
 	/* if js is enabled then replace the no-js class by a js one */
-	if( jq('body').hasClass('no-js') )
+	if( jq('body').hasClass('no-js') ) {
 		jq('body').attr('class', jq('body').attr('class').replace( /no-js/,'js' ) );
+	}
 
 	/** Activity HeartBeat ************************************************/
 
 	// Set the interval and the namespace event
-	if ( typeof wp != 'undefined' && typeof wp.heartbeat != 'undefined' && typeof BP_DTheme.pulse != 'undefined' ) {
+	if ( typeof wp !== 'undefined' && typeof wp.heartbeat !== 'undefined' && typeof BP_DTheme.pulse !== 'undefined' ) {
 
 		wp.heartbeat.interval( Number( BP_DTheme.pulse ) );
 
 		jq.fn.extend({
 			'heartbeat-send': function() {
-			return this.bind( 'heartbeat-send.buddypress' );
-	        },
-	    });
-
+				return this.bind( 'heartbeat-send.buddypress' );
+			}
+		});
 	}
 
 	// Set the last id to request after
 	jq( document ).on( 'heartbeat-send.buddypress', function( e, data ) {
-		
+
 		firstrow = 0;
 
 		// First row is default latest activity id
@@ -1533,25 +1616,33 @@ jq(document).ready( function() {
 			}
 		}
 
-		if ( 0 == activity_last_recorded || Number( firstrow ) > activity_last_recorded )
+		if ( 0 === activity_last_recorded || Number( firstrow ) > activity_last_recorded ) {
 			activity_last_recorded = Number( firstrow );
+		}
 
-		data['bp_activity_last_recorded'] = activity_last_recorded;
+		data.bp_activity_last_recorded = activity_last_recorded;
+
+		last_recorded_search = bp_get_querystring('s');
+
+		if ( last_recorded_search ) {
+			data.bp_activity_last_recorded_search_terms = last_recorded_search;
+		}
 	});
 
 	// Increment newest_activities and activity_last_recorded if data has been returned
 	jq( document ).on( 'heartbeat-tick', function( e, data ) {
 
 		// Only proceed if we have newest activities
-		if ( ! data['bp_activity_newest_activities'] ) {
+		if ( ! data.bp_activity_newest_activities ) {
 			return;
 		}
 
-		newest_activities = data['bp_activity_newest_activities']['activities'] + newest_activities;
-		activity_last_recorded  = Number( data['bp_activity_newest_activities']['last_recorded'] );
+		newest_activities = data.bp_activity_newest_activities.activities + newest_activities;
+		activity_last_recorded  = Number( data.bp_activity_newest_activities.last_recorded );
 
-		if ( jq( '#buddypress ul.activity-list li' ).first().hasClass( 'load-newest' ) )
+		if ( jq( '#buddypress ul.activity-list li' ).first().hasClass( 'load-newest' ) ) {
 			return;
+		}
 
 		jq( '#buddypress ul.activity-list' ).prepend( '<li class="load-newest"><a href="#newest">' + BP_DTheme.newest + '</a></li>' );
 	});
@@ -1564,8 +1655,9 @@ function bp_init_activity() {
 		path: '/'
 	} );
 
-	if ( null != jq.cookie('bp-activity-filter') && jq('#activity-filter-select').length )
+	if ( null != jq.cookie('bp-activity-filter') && jq('#activity-filter-select').length ) {
 		jq('#activity-filter-select select option[value="' + jq.cookie('bp-activity-filter') + '"]').prop( 'selected', true );
+	}
 
 	/* Activity Tab Set */
 	if ( null != jq.cookie('bp-activity-scope') && jq('.activity-type-tabs').length ) {
@@ -1579,8 +1671,9 @@ function bp_init_activity() {
 /* Setup object scope and filter based on the current cookie settings for the object. */
 function bp_init_objects(objects) {
 	jq(objects).each( function(i) {
-		if ( null != jq.cookie('bp-' + objects[i] + '-filter') && jq('#' + objects[i] + '-order-select select').length )
+		if ( null != jq.cookie('bp-' + objects[i] + '-filter') && jq('#' + objects[i] + '-order-select select').length ) {
 			jq('#' + objects[i] + '-order-select select option[value="' + jq.cookie('bp-' + objects[i] + '-filter') + '"]').prop( 'selected', true );
+		}
 
 		if ( null != jq.cookie('bp-' + objects[i] + '-scope') && jq('div.' + objects[i]).length ) {
 			jq('.item-list-tabs li').each( function() {
@@ -1593,14 +1686,13 @@ function bp_init_objects(objects) {
 
 /* Filter the current content list (groups/members/blogs/topics) */
 function bp_filter_request( object, filter, scope, target, search_terms, page, extras, caller, template ) {
-	if ( 'activity' == object )
+	if ( 'activity' === object ) {
 		return false;
+	}
 
-	if ( jq.query.get('s') && !search_terms )
-		search_terms = jq.query.get('s');
-
-	if ( null == scope )
+	if ( null === scope ) {
 		scope = 'all';
+	}
 
 	/* Save the settings we want to remain persistent to a cookie */
 	jq.cookie( 'bp-' + object + '-scope', scope, {
@@ -1621,12 +1713,13 @@ function bp_filter_request( object, filter, scope, target, search_terms, page, e
 	jq('.item-list-tabs li.selected').addClass('loading');
 	jq('.item-list-tabs select option[value="' + filter + '"]').prop( 'selected', true );
 
-	if ( 'friends' == object || 'group_members' == object ) {
+	if ( 'friends' === object || 'group_members' === object ) {
 		object = 'members';
 	}
 
-	if ( bp_ajax_request )
+	if ( bp_ajax_request ) {
 		bp_ajax_request.abort();
+	}
 
 	bp_ajax_request = jq.post( ajaxurl, {
 		action: object + '_filter',
@@ -1642,20 +1735,20 @@ function bp_filter_request( object, filter, scope, target, search_terms, page, e
 	function(response)
 	{
 		/* animate to top if called from bottom pagination */
-		if ( caller == 'pag-bottom' && jq('#subnav').length ) {
+		if ( caller === 'pag-bottom' && jq('#subnav').length ) {
 			var top = jq('#subnav').parent();
 			jq('html,body').animate({scrollTop: top.offset().top}, 'slow', function() {
 				jq(target).fadeOut( 100, function() {
 					jq(this).html(response);
 					jq(this).fadeIn(100);
-			 	});
+				});
 			});
 
 		} else {
 			jq(target).fadeOut( 100, function() {
 				jq(this).html(response);
 				jq(this).fadeIn(100);
-		 	});
+			});
 		}
 
 		jq('.item-list-tabs li.selected').removeClass('loading');
@@ -1687,13 +1780,14 @@ function bp_activity_request(scope, filter) {
 	/* Reload the activity stream based on the selection */
 	jq('.widget_bp_activity_widget h2 span.ajax-loader').show();
 
-	if ( bp_ajax_request )
+	if ( bp_ajax_request ) {
 		bp_ajax_request.abort();
+	}
 
 	bp_ajax_request = jq.post( ajaxurl, {
 		action: 'activity_widget_filter',
 		'cookie': bp_get_cookies(),
-		'_wpnonce_activity_filter': jq("#_wpnonce_activity_filter").val(),
+		'_wpnonce_activity_filter': jq('#_wpnonce_activity_filter').val(),
 		'scope': scope,
 		'filter': filter
 	},
@@ -1710,8 +1804,9 @@ function bp_activity_request(scope, filter) {
 		});
 
 		/* Update the feed link */
-		if ( null != response.feed_url )
+		if ( null != response.feed_url ) {
 			jq('.directory #subnav li.feed a, .home-page #subnav li.feed a').attr('href', response.feed_url);
+		}
 
 		jq('.item-list-tabs li.selected').removeClass('loading');
 
@@ -1720,21 +1815,26 @@ function bp_activity_request(scope, filter) {
 
 /* Hide long lists of activity comments, only show the latest five root comments. */
 function bp_legacy_theme_hide_comments() {
-	var comments_divs = jq('div.activity-comments');
+	var comments_divs = jq('div.activity-comments'),
+		parent_li, comment_lis, comment_count;
 
-	if ( !comments_divs.length )
+	if ( !comments_divs.length ) {
 		return false;
+	}
 
 	comments_divs.each( function() {
-		if ( jq(this).children('ul').children('li').length < 5 ) return;
+		if ( jq(this).children('ul').children('li').length < 5 ) {
+			return;
+		}
 
-		var comments_div = jq(this);
-		var parent_li = comments_div.parents('#activity-stream > li');
-		var comment_lis = jq(this).children('ul').children('li');
-		var comment_count = ' ';
+		comments_div = jq(this);
+		parent_li = comments_div.parents('#activity-stream > li');
+		comment_lis = jq(this).children('ul').children('li');
+		comment_count = ' ';
 
-		if ( jq('#' + parent_li.attr('id') + ' a.acomment-reply span').length )
-			var comment_count = jq('#' + parent_li.attr('id') + ' a.acomment-reply span').html();
+		if ( jq('#' + parent_li.attr('id') + ' a.acomment-reply span').length ) {
+			comment_count = jq('#' + parent_li.attr('id') + ' a.acomment-reply span').html();
+		}
 
 		comment_lis.each( function(i) {
 			/* Show the latest 5 root comments */
@@ -1742,8 +1842,9 @@ function bp_legacy_theme_hide_comments() {
 				jq(this).addClass('hidden');
 				jq(this).toggle();
 
-				if ( !i )
+				if ( !i ) {
 					jq(this).before( '<li class="show-all"><a href="#' + parent_li.attr('id') + '/show-all/" title="' + BP_DTheme.show_all_comments + '">' + BP_DTheme.show_x_comments.replace( '%d', comment_count ) + '</a></li>' );
+				}
 			}
 		});
 
@@ -1753,14 +1854,16 @@ function bp_legacy_theme_hide_comments() {
 /* Helper Functions */
 
 function checkAll() {
-	var checkboxes = document.getElementsByTagName("input");
-	for(var i=0; i<checkboxes.length; i++) {
-		if(checkboxes[i].type == "checkbox") {
-			if($("check_all").checked == "") {
-				checkboxes[i].checked = "";
+	var checkboxes = document.getElementsByTagName('input'),
+		i;
+
+	for(i=0; i<checkboxes.length; i++) {
+		if(checkboxes[i].type === 'checkbox') {
+			if($('check_all').checked === '') {
+				checkboxes[i].checked = '';
 			}
 			else {
-				checkboxes[i].checked = "checked";
+				checkboxes[i].checked = 'checked';
 			}
 		}
 	}
@@ -1797,21 +1900,20 @@ function clear( container ) {
 
 /* Returns a querystring of BP cookies (cookies beginning with 'bp-') */
 function bp_get_cookies() {
-	// get all cookies and split into an array
-	var allCookies   = document.cookie.split(";");
-
-	var bpCookies    = {};
-	var cookiePrefix = 'bp-';
+	var allCookies = document.cookie.split(';'),  // get all cookies and split into an array
+		bpCookies      = {},
+		cookiePrefix   = 'bp-',
+		i, cookie, delimiter, name, value;
 
 	// loop through cookies
-	for (var i = 0; i < allCookies.length; i++) {
-		var cookie    = allCookies[i];
-		var delimiter = cookie.indexOf("=");
-		var name      = jq.trim( unescape( cookie.slice(0, delimiter) ) );
-		var value     = unescape( cookie.slice(delimiter + 1) );
+	for (i = 0; i < allCookies.length; i++) {
+		cookie    = allCookies[i];
+		delimiter = cookie.indexOf('=');
+		name      = jq.trim( unescape( cookie.slice(0, delimiter) ) );
+		value     = unescape( cookie.slice(delimiter + 1) );
 
 		// if BP cookie, store it
-		if ( name.indexOf(cookiePrefix) == 0 ) {
+		if ( name.indexOf(cookiePrefix) === 0 ) {
 			bpCookies[name] = value;
 		}
 	}
@@ -1819,15 +1921,3 @@ function bp_get_cookies() {
 	// returns BP cookies as querystring
 	return encodeURIComponent( jq.param(bpCookies) );
 }
-
-/* ScrollTo plugin - just inline and minified */
-;(function($){var h=$.scrollTo=function(a,b,c){$(window).scrollTo(a,b,c)};h.defaults={axis:'xy',duration:parseFloat($.fn.jquery)>=1.3?0:1,limit:true};h.window=function(a){return $(window)._scrollable()};$.fn._scrollable=function(){return this.map(function(){var a=this,isWin=!a.nodeName||$.inArray(a.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!isWin)return a;var b=(a.contentWindow||a).document||a.ownerDocument||a;return/webkit/i.test(navigator.userAgent)||b.compatMode=='BackCompat'?b.body:b.documentElement})};$.fn.scrollTo=function(e,f,g){if(typeof f=='object'){g=f;f=0}if(typeof g=='function')g={onAfter:g};if(e=='max')e=9e9;g=$.extend({},h.defaults,g);f=f||g.duration;g.queue=g.queue&&g.axis.length>1;if(g.queue)f/=2;g.offset=both(g.offset);g.over=both(g.over);return this._scrollable().each(function(){if(e==null)return;var d=this,$elem=$(d),targ=e,toff,attr={},win=$elem.is('html,body');switch(typeof targ){case'number':case'string':if(/^([+-]=?)?\d+(\.\d+)?(px|%)?$/.test(targ)){targ=both(targ);break}targ=$(targ,this);if(!targ.length)return;case'object':if(targ.is||targ.style)toff=(targ=$(targ)).offset()}$.each(g.axis.split(''),function(i,a){var b=a=='x'?'Left':'Top',pos=b.toLowerCase(),key='scroll'+b,old=d[key],max=h.max(d,a);if(toff){attr[key]=toff[pos]+(win?0:old-$elem.offset()[pos]);if(g.margin){attr[key]-=parseInt(targ.css('margin'+b))||0;attr[key]-=parseInt(targ.css('border'+b+'Width'))||0}attr[key]+=g.offset[pos]||0;if(g.over[pos])attr[key]+=targ[a=='x'?'width':'height']()*g.over[pos]}else{var c=targ[pos];attr[key]=c.slice&&c.slice(-1)=='%'?parseFloat(c)/100*max:c}if(g.limit&&/^\d+$/.test(attr[key]))attr[key]=attr[key]<=0?0:Math.min(attr[key],max);if(!i&&g.queue){if(old!=attr[key])animate(g.onAfterFirst);delete attr[key]}});animate(g.onAfter);function animate(a){$elem.animate(attr,f,g.easing,a&&function(){a.call(this,e,g)})}}).end()};h.max=function(a,b){var c=b=='x'?'Width':'Height',scroll='scroll'+c;if(!$(a).is('html,body'))return a[scroll]-$(a)[c.toLowerCase()]();var d='client'+c,html=a.ownerDocument.documentElement,body=a.ownerDocument.body;return Math.max(html[scroll],body[scroll])-Math.min(html[d],body[d])};function both(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery);
-
-/* jQuery Easing Plugin, v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/ */
-jQuery.easing.jswing=jQuery.easing.swing;jQuery.extend(jQuery.easing,{def:"easeOutQuad",swing:function(e,f,a,h,g){return jQuery.easing[jQuery.easing.def](e,f,a,h,g)},easeInQuad:function(e,f,a,h,g){return h*(f/=g)*f+a},easeOutQuad:function(e,f,a,h,g){return -h*(f/=g)*(f-2)+a},easeInOutQuad:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f+a}return -h/2*((--f)*(f-2)-1)+a},easeInCubic:function(e,f,a,h,g){return h*(f/=g)*f*f+a},easeOutCubic:function(e,f,a,h,g){return h*((f=f/g-1)*f*f+1)+a},easeInOutCubic:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f*f+a}return h/2*((f-=2)*f*f+2)+a},easeInQuart:function(e,f,a,h,g){return h*(f/=g)*f*f*f+a},easeOutQuart:function(e,f,a,h,g){return -h*((f=f/g-1)*f*f*f-1)+a},easeInOutQuart:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f*f*f+a}return -h/2*((f-=2)*f*f*f-2)+a},easeInQuint:function(e,f,a,h,g){return h*(f/=g)*f*f*f*f+a},easeOutQuint:function(e,f,a,h,g){return h*((f=f/g-1)*f*f*f*f+1)+a},easeInOutQuint:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f*f*f*f+a}return h/2*((f-=2)*f*f*f*f+2)+a},easeInSine:function(e,f,a,h,g){return -h*Math.cos(f/g*(Math.PI/2))+h+a},easeOutSine:function(e,f,a,h,g){return h*Math.sin(f/g*(Math.PI/2))+a},easeInOutSine:function(e,f,a,h,g){return -h/2*(Math.cos(Math.PI*f/g)-1)+a},easeInExpo:function(e,f,a,h,g){return(f==0)?a:h*Math.pow(2,10*(f/g-1))+a},easeOutExpo:function(e,f,a,h,g){return(f==g)?a+h:h*(-Math.pow(2,-10*f/g)+1)+a},easeInOutExpo:function(e,f,a,h,g){if(f==0){return a}if(f==g){return a+h}if((f/=g/2)<1){return h/2*Math.pow(2,10*(f-1))+a}return h/2*(-Math.pow(2,-10*--f)+2)+a},easeInCirc:function(e,f,a,h,g){return -h*(Math.sqrt(1-(f/=g)*f)-1)+a},easeOutCirc:function(e,f,a,h,g){return h*Math.sqrt(1-(f=f/g-1)*f)+a},easeInOutCirc:function(e,f,a,h,g){if((f/=g/2)<1){return -h/2*(Math.sqrt(1-f*f)-1)+a}return h/2*(Math.sqrt(1-(f-=2)*f)+1)+a},easeInElastic:function(f,h,e,l,k){var i=1.70158;var j=0;var g=l;if(h==0){return e}if((h/=k)==1){return e+l}if(!j){j=k*0.3}if(g<Math.abs(l)){g=l;var i=j/4}else{var i=j/(2*Math.PI)*Math.asin(l/g)}return -(g*Math.pow(2,10*(h-=1))*Math.sin((h*k-i)*(2*Math.PI)/j))+e},easeOutElastic:function(f,h,e,l,k){var i=1.70158;var j=0;var g=l;if(h==0){return e}if((h/=k)==1){return e+l}if(!j){j=k*0.3}if(g<Math.abs(l)){g=l;var i=j/4}else{var i=j/(2*Math.PI)*Math.asin(l/g)}return g*Math.pow(2,-10*h)*Math.sin((h*k-i)*(2*Math.PI)/j)+l+e},easeInOutElastic:function(f,h,e,l,k){var i=1.70158;var j=0;var g=l;if(h==0){return e}if((h/=k/2)==2){return e+l}if(!j){j=k*(0.3*1.5)}if(g<Math.abs(l)){g=l;var i=j/4}else{var i=j/(2*Math.PI)*Math.asin(l/g)}if(h<1){return -0.5*(g*Math.pow(2,10*(h-=1))*Math.sin((h*k-i)*(2*Math.PI)/j))+e}return g*Math.pow(2,-10*(h-=1))*Math.sin((h*k-i)*(2*Math.PI)/j)*0.5+l+e},easeInBack:function(e,f,a,i,h,g){if(g==undefined){g=1.70158}return i*(f/=h)*f*((g+1)*f-g)+a},easeOutBack:function(e,f,a,i,h,g){if(g==undefined){g=1.70158}return i*((f=f/h-1)*f*((g+1)*f+g)+1)+a},easeInOutBack:function(e,f,a,i,h,g){if(g==undefined){g=1.70158}if((f/=h/2)<1){return i/2*(f*f*(((g*=(1.525))+1)*f-g))+a}return i/2*((f-=2)*f*(((g*=(1.525))+1)*f+g)+2)+a},easeInBounce:function(e,f,a,h,g){return h-jQuery.easing.easeOutBounce(e,g-f,0,h,g)+a},easeOutBounce:function(e,f,a,h,g){if((f/=g)<(1/2.75)){return h*(7.5625*f*f)+a}else{if(f<(2/2.75)){return h*(7.5625*(f-=(1.5/2.75))*f+0.75)+a}else{if(f<(2.5/2.75)){return h*(7.5625*(f-=(2.25/2.75))*f+0.9375)+a}else{return h*(7.5625*(f-=(2.625/2.75))*f+0.984375)+a}}}},easeInOutBounce:function(e,f,a,h,g){if(f<g/2){return jQuery.easing.easeInBounce(e,f*2,0,h,g)*0.5+a}return jQuery.easing.easeOutBounce(e,f*2-g,0,h,g)*0.5+h*0.5+a}});
-
-/* jQuery Cookie plugin */
-jQuery.cookie=function(name,value,options){if(typeof value!='undefined'){options=options||{};if(value===null){value='';options.expires=-1;}var expires='';if(options.expires&&(typeof options.expires=='number'||options.expires.toUTCString)){var date;if(typeof options.expires=='number'){date=new Date();date.setTime(date.getTime()+(options.expires*24*60*60*1000));}else{date=options.expires;}expires='; expires='+date.toUTCString();}var path=options.path?'; path='+(options.path):'';var domain=options.domain?'; domain='+(options.domain):'';var secure=options.secure?'; secure':'';document.cookie=[name,'=',encodeURIComponent(value),expires,path,domain,secure].join('');}else{var cookieValue=null;if(document.cookie&&document.cookie!=''){var cookies=document.cookie.split(';');for(var i=0;i<cookies.length;i++){var cookie=jQuery.trim(cookies[i]);if(cookie.substring(0,name.length+1)==(name+'=')){cookieValue=decodeURIComponent(cookie.substring(name.length+1));break;}}}return cookieValue;}};
-
-/* jQuery querystring plugin */
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('M 6(A){4 $11=A.11||\'&\';4 $V=A.V===r?r:j;4 $1p=A.1p===r?\'\':\'[]\';4 $13=A.13===r?r:j;4 $D=$13?A.D===j?"#":"?":"";4 $15=A.15===r?r:j;v.1o=M 6(){4 f=6(o,t){8 o!=1v&&o!==x&&(!!t?o.1t==t:j)};4 14=6(1m){4 m,1l=/\\[([^[]*)\\]/g,T=/^([^[]+)(\\[.*\\])?$/.1r(1m),k=T[1],e=[];19(m=1l.1r(T[2]))e.u(m[1]);8[k,e]};4 w=6(3,e,7){4 o,y=e.1b();b(I 3!=\'X\')3=x;b(y===""){b(!3)3=[];b(f(3,L)){3.u(e.h==0?7:w(x,e.z(0),7))}n b(f(3,1a)){4 i=0;19(3[i++]!=x);3[--i]=e.h==0?7:w(3[i],e.z(0),7)}n{3=[];3.u(e.h==0?7:w(x,e.z(0),7))}}n b(y&&y.T(/^\\s*[0-9]+\\s*$/)){4 H=1c(y,10);b(!3)3=[];3[H]=e.h==0?7:w(3[H],e.z(0),7)}n b(y){4 H=y.B(/^\\s*|\\s*$/g,"");b(!3)3={};b(f(3,L)){4 18={};1w(4 i=0;i<3.h;++i){18[i]=3[i]}3=18}3[H]=e.h==0?7:w(3[H],e.z(0),7)}n{8 7}8 3};4 C=6(a){4 p=d;p.l={};b(a.C){v.J(a.Z(),6(5,c){p.O(5,c)})}n{v.J(1u,6(){4 q=""+d;q=q.B(/^[?#]/,\'\');q=q.B(/[;&]$/,\'\');b($V)q=q.B(/[+]/g,\' \');v.J(q.Y(/[&;]/),6(){4 5=1e(d.Y(\'=\')[0]||"");4 c=1e(d.Y(\'=\')[1]||"");b(!5)8;b($15){b(/^[+-]?[0-9]+\\.[0-9]*$/.1d(c))c=1A(c);n b(/^[+-]?[0-9]+$/.1d(c))c=1c(c,10)}c=(!c&&c!==0)?j:c;b(c!==r&&c!==j&&I c!=\'1g\')c=c;p.O(5,c)})})}8 p};C.1H={C:j,1G:6(5,1f){4 7=d.Z(5);8 f(7,1f)},1h:6(5){b(!f(5))8 d.l;4 K=14(5),k=K[0],e=K[1];4 3=d.l[k];19(3!=x&&e.h!=0){3=3[e.1b()]}8 I 3==\'1g\'?3:3||""},Z:6(5){4 3=d.1h(5);b(f(3,1a))8 v.1E(j,{},3);n b(f(3,L))8 3.z(0);8 3},O:6(5,c){4 7=!f(c)?x:c;4 K=14(5),k=K[0],e=K[1];4 3=d.l[k];d.l[k]=w(3,e.z(0),7);8 d},w:6(5,c){8 d.N().O(5,c)},1s:6(5){8 d.O(5,x).17()},1z:6(5){8 d.N().1s(5)},1j:6(){4 p=d;v.J(p.l,6(5,7){1y p.l[5]});8 p},1F:6(Q){4 D=Q.B(/^.*?[#](.+?)(?:\\?.+)?$/,"$1");4 S=Q.B(/^.*?[?](.+?)(?:#.+)?$/,"$1");8 M C(Q.h==S.h?\'\':S,Q.h==D.h?\'\':D)},1x:6(){8 d.N().1j()},N:6(){8 M C(d)},17:6(){6 F(G){4 R=I G=="X"?f(G,L)?[]:{}:G;b(I G==\'X\'){6 1k(o,5,7){b(f(o,L))o.u(7);n o[5]=7}v.J(G,6(5,7){b(!f(7))8 j;1k(R,5,F(7))})}8 R}d.l=F(d.l);8 d},1B:6(){8 d.N().17()},1D:6(){4 i=0,U=[],W=[],p=d;4 16=6(E){E=E+"";b($V)E=E.B(/ /g,"+");8 1C(E)};4 1n=6(1i,5,7){b(!f(7)||7===r)8;4 o=[16(5)];b(7!==j){o.u("=");o.u(16(7))}1i.u(o.P(""))};4 F=6(R,k){4 12=6(5){8!k||k==""?[5].P(""):[k,"[",5,"]"].P("")};v.J(R,6(5,7){b(I 7==\'X\')F(7,12(5));n 1n(W,12(5),7)})};F(d.l);b(W.h>0)U.u($D);U.u(W.P($11));8 U.P("")}};8 M C(1q.S,1q.D)}}(v.1o||{});',62,106,'|||target|var|key|function|value|return|||if|val|this|tokens|is||length||true|base|keys||else||self||false|||push|jQuery|set|null|token|slice|settings|replace|queryObject|hash|str|build|orig|index|typeof|each|parsed|Array|new|copy|SET|join|url|obj|search|match|queryString|spaces|chunks|object|split|get||separator|newKey|prefix|parse|numbers|encode|COMPACT|temp|while|Object|shift|parseInt|test|decodeURIComponent|type|number|GET|arr|EMPTY|add|rx|path|addFields|query|suffix|location|exec|REMOVE|constructor|arguments|undefined|for|empty|delete|remove|parseFloat|compact|encodeURIComponent|toString|extend|load|has|prototype'.split('|'),0,{}))
diff --git a/wp-content/plugins/buddypress/bp-templates/bp-legacy/js/buddypress.min.js b/wp-content/plugins/buddypress/bp-templates/bp-legacy/js/buddypress.min.js
new file mode 100644
index 000000000..6e9e61ecb
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-templates/bp-legacy/js/buddypress.min.js
@@ -0,0 +1,2 @@
+/*! buddypress - v2.1.0 - 2014-10-06 9:39:07 PM UTC - https://wordpress.org/plugins/buddypress/ */
+function bp_init_activity(){jq.cookie("bp-activity-oldestpage",1,{path:"/"}),null!=jq.cookie("bp-activity-filter")&&jq("#activity-filter-select").length&&jq('#activity-filter-select select option[value="'+jq.cookie("bp-activity-filter")+'"]').prop("selected",!0),null!=jq.cookie("bp-activity-scope")&&jq(".activity-type-tabs").length&&(jq(".activity-type-tabs li").each(function(){jq(this).removeClass("selected")}),jq("#activity-"+jq.cookie("bp-activity-scope")+", .item-list-tabs li.current").addClass("selected"))}function bp_init_objects(a){jq(a).each(function(b){null!=jq.cookie("bp-"+a[b]+"-filter")&&jq("#"+a[b]+"-order-select select").length&&jq("#"+a[b]+'-order-select select option[value="'+jq.cookie("bp-"+a[b]+"-filter")+'"]').prop("selected",!0),null!=jq.cookie("bp-"+a[b]+"-scope")&&jq("div."+a[b]).length&&(jq(".item-list-tabs li").each(function(){jq(this).removeClass("selected")}),jq("#"+a[b]+"-"+jq.cookie("bp-"+a[b]+"-scope")+", #object-nav li.current").addClass("selected"))})}function bp_filter_request(a,b,c,d,e,f,g,h,i){return"activity"===a?!1:(null===c&&(c="all"),jq.cookie("bp-"+a+"-scope",c,{path:"/"}),jq.cookie("bp-"+a+"-filter",b,{path:"/"}),jq.cookie("bp-"+a+"-extras",g,{path:"/"}),jq(".item-list-tabs li").each(function(){jq(this).removeClass("selected")}),jq("#"+a+"-"+c+", #object-nav li.current").addClass("selected"),jq(".item-list-tabs li.selected").addClass("loading"),jq('.item-list-tabs select option[value="'+b+'"]').prop("selected",!0),("friends"===a||"group_members"===a)&&(a="members"),bp_ajax_request&&bp_ajax_request.abort(),void(bp_ajax_request=jq.post(ajaxurl,{action:a+"_filter",cookie:bp_get_cookies(),object:a,filter:b,search_terms:e,scope:c,page:f,extras:g,template:i},function(a){if("pag-bottom"===h&&jq("#subnav").length){var b=jq("#subnav").parent();jq("html,body").animate({scrollTop:b.offset().top},"slow",function(){jq(d).fadeOut(100,function(){jq(this).html(a),jq(this).fadeIn(100)})})}else jq(d).fadeOut(100,function(){jq(this).html(a),jq(this).fadeIn(100)});jq(".item-list-tabs li.selected").removeClass("loading")})))}function bp_activity_request(a,b){jq.cookie("bp-activity-scope",a,{path:"/"}),jq.cookie("bp-activity-filter",b,{path:"/"}),jq.cookie("bp-activity-oldestpage",1,{path:"/"}),jq(".item-list-tabs li").each(function(){jq(this).removeClass("selected loading")}),jq("#activity-"+a+", .item-list-tabs li.current").addClass("selected"),jq("#object-nav.item-list-tabs li.selected, div.activity-type-tabs li.selected").addClass("loading"),jq('#activity-filter-select select option[value="'+b+'"]').prop("selected",!0),jq(".widget_bp_activity_widget h2 span.ajax-loader").show(),bp_ajax_request&&bp_ajax_request.abort(),bp_ajax_request=jq.post(ajaxurl,{action:"activity_widget_filter",cookie:bp_get_cookies(),_wpnonce_activity_filter:jq("#_wpnonce_activity_filter").val(),scope:a,filter:b},function(a){jq(".widget_bp_activity_widget h2 span.ajax-loader").hide(),jq("div.activity").fadeOut(100,function(){jq(this).html(a.contents),jq(this).fadeIn(100),bp_legacy_theme_hide_comments()}),null!=a.feed_url&&jq(".directory #subnav li.feed a, .home-page #subnav li.feed a").attr("href",a.feed_url),jq(".item-list-tabs li.selected").removeClass("loading")},"json")}function bp_legacy_theme_hide_comments(){var a,b,c,d=jq("div.activity-comments");return d.length?void d.each(function(){jq(this).children("ul").children("li").length<5||(comments_div=jq(this),a=comments_div.parents("#activity-stream > li"),b=jq(this).children("ul").children("li"),c=" ",jq("#"+a.attr("id")+" a.acomment-reply span").length&&(c=jq("#"+a.attr("id")+" a.acomment-reply span").html()),b.each(function(d){d<b.length-5&&(jq(this).addClass("hidden"),jq(this).toggle(),d||jq(this).before('<li class="show-all"><a href="#'+a.attr("id")+'/show-all/" title="'+BP_DTheme.show_all_comments+'">'+BP_DTheme.show_x_comments.replace("%d",c)+"</a></li>"))}))}):!1}function checkAll(){var a,b=document.getElementsByTagName("input");for(a=0;a<b.length;a++)"checkbox"===b[a].type&&(b[a].checked=""===$("check_all").checked?"":"checked")}function clear(a){if(a=document.getElementById(a)){var b=a.getElementsByTagName("INPUT"),c=a.getElementsByTagName("OPTION"),d=0;if(b)for(d=0;d<b.length;d++)b[d].checked="";if(c)for(d=0;d<c.length;d++)c[d].selected=!1}}function bp_get_cookies(){var a,b,c,d,e,f=document.cookie.split(";"),g={},h="bp-";for(a=0;a<f.length;a++)b=f[a],c=b.indexOf("="),d=jq.trim(unescape(b.slice(0,c))),e=unescape(b.slice(c+1)),0===d.indexOf(h)&&(g[d]=e);return encodeURIComponent(jq.param(g))}var jq=jQuery,bp_ajax_request=null,newest_activities="",activity_last_recorded=0;jq(document).ready(function(){"-1"===window.location.search.indexOf("new")&&jq("div.forums").length?jq("#new-topic-post").hide():jq("#new-topic-post").show(),bp_init_activity();var a=["members","groups","blogs","forums","group_members"],b=jq("#whats-new");if(bp_init_objects(a),b.length&&bp_get_querystring("r")){var c=b.val();jq("#whats-new-options").animate({height:"40px"}),b.animate({height:"50px"}),jq.scrollTo(b,500,{offset:-125,easing:"swing"}),b.val("").focus().val(c)}b.focus(function(){jq("#whats-new-options").animate({height:"40px"}),jq("#whats-new-form textarea").animate({height:"50px"}),jq("#aw-whats-new-submit").prop("disabled",!1);var a=jq("form#whats-new-form"),b=jq("#activity-all");a.hasClass("submitted")&&a.removeClass("submitted"),b.length&&(b.hasClass("selected")?"-1"!==jq("#activity-filter-select select").val()&&(jq("#activity-filter-select select").val("-1"),jq("#activity-filter-select select").trigger("change")):(jq("#activity-filter-select select").val("-1"),b.children("a").trigger("click")))}),b.blur(function(){document.activeElement!==this&&(this.value.match(/\S+/)||(this.value="",jq("#whats-new-options").animate({height:"40px"}),jq("form#whats-new-form textarea").animate({height:"20px"}),jq("#aw-whats-new-submit").prop("disabled",!0)))}),jq("#aw-whats-new-submit").on("click",function(){var a=0,b=jq(this),c=b.closest("form#whats-new-form");return c.children().each(function(){(jq.nodeName(this,"textarea")||jq.nodeName(this,"input"))&&jq(this).prop("disabled",!0)}),jq("div.error").remove(),b.addClass("loading"),b.prop("disabled",!0),c.addClass("submitted"),object="",item_id=jq("#whats-new-post-in").val(),content=jq("#whats-new").val(),firstrow=jq("#buddypress ul.activity-list li").first(),activity_row=firstrow,timestamp=null,firstrow.length&&(activity_row.hasClass("load-newest")&&(activity_row=firstrow.next()),timestamp=activity_row.prop("class").match(/date-recorded-([0-9]+)/)),timestamp&&(a=timestamp[1]),item_id>0&&(object=jq("#whats-new-post-object").val()),jq.post(ajaxurl,{action:"post_update",cookie:bp_get_cookies(),_wpnonce_post_update:jq("#_wpnonce_post_update").val(),content:content,object:object,item_id:item_id,since:a,_bp_as_nonce:jq("#_bp_as_nonce").val()||""},function(b){if(c.children().each(function(){(jq.nodeName(this,"textarea")||jq.nodeName(this,"input"))&&jq(this).prop("disabled",!1)}),b[0]+b[1]==="-1")c.prepend(b.substr(2,b.length)),jq("#"+c.attr("id")+" div.error").hide().fadeIn(200);else{if(0===jq("ul.activity-list").length&&(jq("div.error").slideUp(100).remove(),jq("#message").slideUp(100).remove(),jq("div.activity").append('<ul id="activity-stream" class="activity-list item-list">')),firstrow.hasClass("load-newest")&&firstrow.remove(),jq("#activity-stream").prepend(b),a||jq("#activity-stream li:first").addClass("new-update just-posted"),0!==jq("#latest-update").length){var d=jq("#activity-stream li.new-update .activity-content .activity-inner p").html(),e=jq("#activity-stream li.new-update .activity-content .activity-header p a.view").attr("href"),f=jq("#activity-stream li.new-update .activity-content .activity-inner p").text(),g="";""!==f&&(g=d+" "),g+='<a href="'+e+'" rel="nofollow">'+BP_DTheme.view+"</a>",jq("#latest-update").slideUp(300,function(){jq("#latest-update").html(g),jq("#latest-update").slideDown(300)})}jq("li.new-update").hide().slideDown(300),jq("li.new-update").removeClass("new-update"),jq("#whats-new").val(""),newest_activities="",activity_last_recorded=0}jq("#whats-new-options").animate({height:"0px"}),jq("#whats-new-form textarea").animate({height:"20px"}),jq("#aw-whats-new-submit").prop("disabled",!0).removeClass("loading")}),!1}),jq("div.activity-type-tabs").on("click",function(a){var b,c,d=jq(a.target).parent();if("STRONG"===a.target.nodeName||"SPAN"===a.target.nodeName)d=d.parent();else if("A"!==a.target.nodeName)return!1;return jq.cookie("bp-activity-oldestpage",1,{path:"/"}),b=d.attr("id").substr(9,d.attr("id").length),c=jq("#activity-filter-select select").val(),"mentions"===b&&jq("#"+d.attr("id")+" a strong").remove(),bp_activity_request(b,c),!1}),jq("#activity-filter-select select").change(function(){var a,b=jq("div.activity-type-tabs li.selected"),c=jq(this).val();return a=b.length?b.attr("id").substr(9,b.attr("id").length):null,bp_activity_request(a,c),!1}),jq("div.activity").on("click",function(a){var b,c,d,e,f,g,h,i,j,k,l=jq(a.target);return l.hasClass("fav")||l.hasClass("unfav")?(b=l.hasClass("fav")?"fav":"unfav",c=l.closest(".activity-item"),d=c.attr("id").substr(9,c.attr("id").length),l.addClass("loading"),jq.post(ajaxurl,{action:"activity_mark_"+b,cookie:bp_get_cookies(),id:d},function(a){l.removeClass("loading"),l.fadeOut(200,function(){jq(this).html(a),jq(this).attr("title","fav"===b?BP_DTheme.remove_fav:BP_DTheme.mark_as_fav),jq(this).fadeIn(200)}),"fav"===b?(jq(".item-list-tabs #activity-favs-personal-li").length||(jq(".item-list-tabs #activity-favorites").length||jq(".item-list-tabs ul #activity-mentions").before('<li id="activity-favorites"><a href="#">'+BP_DTheme.my_favs+" <span>0</span></a></li>"),jq(".item-list-tabs ul #activity-favorites span").html(Number(jq(".item-list-tabs ul #activity-favorites span").html())+1)),l.removeClass("fav"),l.addClass("unfav")):(l.removeClass("unfav"),l.addClass("fav"),jq(".item-list-tabs ul #activity-favorites span").html(Number(jq(".item-list-tabs ul #activity-favorites span").html())-1),Number(jq(".item-list-tabs ul #activity-favorites span").html())||(jq(".item-list-tabs ul #activity-favorites").hasClass("selected")&&bp_activity_request(null,null),jq(".item-list-tabs ul #activity-favorites").remove())),"activity-favorites"===jq(".item-list-tabs li.selected").attr("id")&&l.closest(".activity-item").slideUp(100)}),!1):l.hasClass("delete-activity")?(e=l.parents("div.activity ul li"),f=e.attr("id").substr(9,e.attr("id").length),g=l.attr("href"),h=g.split("_wpnonce="),i=e.prop("class").match(/date-recorded-([0-9]+)/),h=h[1],l.addClass("loading"),jq.post(ajaxurl,{action:"delete_activity",cookie:bp_get_cookies(),id:f,_wpnonce:h},function(a){a[0]+a[1]==="-1"?(e.prepend(a.substr(2,a.length)),e.children("#message").hide().fadeIn(300)):(e.slideUp(300),i&&activity_last_recorded===i[1]&&(newest_activities="",activity_last_recorded=0))}),!1):l.hasClass("spam-activity")?(e=l.parents("div.activity ul li"),i=e.prop("class").match(/date-recorded-([0-9]+)/),l.addClass("loading"),jq.post(ajaxurl,{action:"bp_spam_activity",cookie:encodeURIComponent(document.cookie),id:e.attr("id").substr(9,e.attr("id").length),_wpnonce:l.attr("href").split("_wpnonce=")[1]},function(a){a[0]+a[1]==="-1"?(e.prepend(a.substr(2,a.length)),e.children("#message").hide().fadeIn(300)):(e.slideUp(300),i&&activity_last_recorded===i[1]&&(newest_activities="",activity_last_recorded=0))}),!1):l.parent().hasClass("load-more")?(bp_ajax_request&&bp_ajax_request.abort(),jq("#buddypress li.load-more").addClass("loading"),null===jq.cookie("bp-activity-oldestpage")&&jq.cookie("bp-activity-oldestpage",1,{path:"/"}),j=1*jq.cookie("bp-activity-oldestpage")+1,k=[],jq(".activity-list li.just-posted").each(function(){k.push(jq(this).attr("id").replace("activity-",""))}),load_more_args={action:"activity_get_older_updates",cookie:bp_get_cookies(),page:j,exclude_just_posted:k.join(",")},load_more_search=bp_get_querystring("s"),load_more_search&&(load_more_args.search_terms=load_more_search),bp_ajax_request=jq.post(ajaxurl,load_more_args,function(a){jq("#buddypress li.load-more").removeClass("loading"),jq.cookie("bp-activity-oldestpage",j,{path:"/"}),jq("#buddypress ul.activity-list").append(a.contents),l.parent().hide()},"json"),!1):void(l.parent().hasClass("load-newest")&&(a.preventDefault(),l.parent().hide(),activity_html=jq.parseHTML(newest_activities),jq.each(activity_html,function(a,b){"LI"===b.nodeName&&jq(b).hasClass("just-posted")&&jq("#"+jq(b).attr("id")).length&&jq("#"+jq(b).attr("id")).remove()}),jq("#buddypress ul.activity-list").prepend(newest_activities),newest_activities=""))}),jq("div.activity").on("click",".activity-read-more a",function(a){var b,c,d=jq(a.target),e=d.parent().attr("id").split("-"),f=e[3],g=e[0];return b="acomment"===g?"acomment-content":"activity-inner",c=jq("#"+g+"-"+f+" ."+b+":first"),jq(d).addClass("loading"),jq.post(ajaxurl,{action:"get_single_activity_content",activity_id:f},function(a){jq(c).slideUp(300).html(a).slideDown(300)}),!1}),jq("form.ac-form").hide(),jq(".activity-comments").length&&bp_legacy_theme_hide_comments(),jq("div.activity").on("click",function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r=jq(a.target);return r.hasClass("acomment-reply")||r.parent().hasClass("acomment-reply")?(r.parent().hasClass("acomment-reply")&&(r=r.parent()),b=r.attr("id"),c=b.split("-"),d=c[2],e=r.attr("href").substr(10,r.attr("href").length),f=jq("#ac-form-"+d),f.css("display","none"),f.removeClass("root"),jq(".ac-form").hide(),f.children("div").each(function(){jq(this).hasClass("error")&&jq(this).hide()}),"comment"!==c[1]?jq("#acomment-"+e).append(f):jq("#activity-"+d+" .activity-comments").append(f),f.parent().hasClass("activity-comments")&&f.addClass("root"),f.slideDown(200),jq.scrollTo(f,500,{offset:-100,easing:"swing"}),jq("#ac-form-"+c[2]+" textarea").focus(),!1):"ac_form_submit"===r.attr("name")?(f=r.parents("form"),g=f.parent(),h=f.attr("id").split("-"),g.hasClass("activity-comments")?j=h[2]:(i=g.attr("id").split("-"),j=i[1]),content=jq("#"+f.attr("id")+" textarea"),jq("#"+f.attr("id")+" div.error").hide(),r.addClass("loading").prop("disabled",!0),content.addClass("loading").prop("disabled",!0),k={action:"new_activity_comment",cookie:bp_get_cookies(),_wpnonce_new_activity_comment:jq("#_wpnonce_new_activity_comment").val(),comment_id:j,form_id:h[2],content:content.val()},l=jq("#_bp_as_nonce_"+j).val(),l&&(k["_bp_as_nonce_"+j]=l),jq.post(ajaxurl,k,function(a){if(r.removeClass("loading"),content.removeClass("loading"),a[0]+a[1]==="-1")f.append(jq(a.substr(2,a.length)).hide().fadeIn(200));else{var b=f.parent();f.fadeOut(200,function(){0===b.children("ul").length&&(b.hasClass("activity-comments")?b.prepend("<ul></ul>"):b.append("<ul></ul>"));var c=jq.trim(a);b.children("ul").append(jq(c).hide().fadeIn(200)),f.children("textarea").val(""),b.parent().addClass("has-comments")}),jq("#"+f.attr("id")+" textarea").val(""),jq("#activity-"+h[2]+" a.acomment-reply span").html(Number(jq("#activity-"+h[2]+" a.acomment-reply span").html())+1),m=b.find(".show-all").find("a"),m&&(n=jq("li#activity-"+h[2]+" a.acomment-reply span").html(),m.html(BP_DTheme.show_x_comments.replace("%d",n)))}jq(r).prop("disabled",!1),jq(content).prop("disabled",!1)}),!1):r.hasClass("acomment-delete")?(o=r.attr("href"),p=r.parent().parent(),f=p.parents("div.activity-comments").children("form"),q=o.split("_wpnonce="),q=q[1],j=o.split("cid="),j=j[1].split("&"),j=j[0],r.addClass("loading"),jq(".activity-comments ul .error").remove(),p.parents(".activity-comments").append(f),jq.post(ajaxurl,{action:"delete_activity_comment",cookie:bp_get_cookies(),_wpnonce:q,id:j},function(a){if(a[0]+a[1]==="-1")p.prepend(jq(a.substr(2,a.length)).hide().fadeIn(200));else{var b,c,d,e=jq("#"+p.attr("id")+" ul").children("li"),f=0;jq(e).each(function(){jq(this).is(":hidden")||f++}),p.fadeOut(200,function(){p.remove()}),b=jq("#"+p.parents("#activity-stream > li").attr("id")+" a.acomment-reply span"),c=b.html()-(1+f),b.html(c),d=p.siblings(".show-all").find("a"),d&&d.html(BP_DTheme.show_x_comments.replace("%d",c)),0===c&&jq(p.parents("#activity-stream > li")).removeClass("has-comments")}}),!1):r.hasClass("spam-activity-comment")?(o=r.attr("href"),p=r.parent().parent(),r.addClass("loading"),jq(".activity-comments ul div.error").remove(),p.parents(".activity-comments").append(p.parents(".activity-comments").children("form")),jq.post(ajaxurl,{action:"bp_spam_activity_comment",cookie:encodeURIComponent(document.cookie),_wpnonce:o.split("_wpnonce=")[1],id:o.split("cid=")[1].split("&")[0]},function(a){if(a[0]+a[1]==="-1")p.prepend(jq(a.substr(2,a.length)).hide().fadeIn(200));else{var b,c=jq("#"+p.attr("id")+" ul").children("li"),d=0;jq(c).each(function(){jq(this).is(":hidden")||d++}),p.fadeOut(200),b=p.parents("#activity-stream > li"),jq("#"+b.attr("id")+" a.acomment-reply span").html(jq("#"+b.attr("id")+" a.acomment-reply span").html()-(1+d))}}),!1):r.parent().hasClass("show-all")?(r.parent().addClass("loading"),setTimeout(function(){r.parent().parent().children("li").fadeIn(200,function(){r.parent().remove()})},600),!1):r.hasClass("ac-reply-cancel")?(jq(r).closest(".ac-form").slideUp(200),!1):void 0}),jq(document).keydown(function(a){if(a=a||window.event,a.target?element=a.target:a.srcElement&&(element=a.srcElement),3===element.nodeType&&(element=element.parentNode),a.ctrlKey!==!0&&a.altKey!==!0&&a.metaKey!==!0){var b=a.keyCode?a.keyCode:a.which;27===b&&"TEXTAREA"===element.tagName&&jq(element).hasClass("ac-input")&&jq(element).parent().parent().parent().slideUp(200)}}),jq(".dir-search, .groups-members-search").on("click",function(a){if(!jq(this).hasClass("no-ajax")){var b,c,d,e=jq(a.target);return"submit"===e.attr("type")?(b=jq(".item-list-tabs li.selected").attr("id").split("-"),c=b[0],d=null,"members"===c&&"groups"===b[1]&&(c="group_members",d="groups/single/members"),bp_filter_request(c,jq.cookie("bp-"+c+"-filter"),jq.cookie("bp-"+c+"-scope"),"div."+c,e.parent().children("label").children("input").val(),1,jq.cookie("bp-"+c+"-extras"),null,d),!1):void 0}}),jq("div.item-list-tabs").on("click",function(a){if(!jq(this).hasClass("no-ajax")){var b,c,d,e,f,g="SPAN"===a.target.nodeName?a.target.parentNode:a.target,h=jq(g).parent();return"LI"!==h[0].nodeName||h.hasClass("last")?void 0:(b=h.attr("id").split("-"),c=b[0],"activity"===c?!1:(d=b[1],e=jq("#"+c+"-order-select select").val(),f=jq("#"+c+"_search").val(),bp_filter_request(c,e,d,"div."+c,f,1,jq.cookie("bp-"+c+"-extras")),!1))}}),jq("li.filter select").change(function(){var a,b,c,d,e,f,g,h;return a=jq(jq(".item-list-tabs li.selected").length?".item-list-tabs li.selected":this),b=a.attr("id").split("-"),c=b[0],d=b[1],e=jq(this).val(),f=!1,g=null,jq(".dir-search input").length&&(f=jq(".dir-search input").val()),h=jq(".groups-members-search input"),h.length&&(f=h.val()),"members"===c&&"groups"===d&&(c="group_members",g="groups/single/members"),"friends"===c&&(c="members"),bp_filter_request(c,e,d,"div."+c,f,1,jq.cookie("bp-"+c+"-extras"),null,g),!1}),jq("#buddypress").on("click",function(a){var b,c,d,e,f,g,h,i,j,k=jq(a.target);return k.hasClass("button")?!0:k.parent().parent().hasClass("pagination")&&!k.parent().parent().hasClass("no-ajax")?k.hasClass("dots")||k.hasClass("current")?!1:(b=jq(jq(".item-list-tabs li.selected").length?".item-list-tabs li.selected":"li.filter select"),c=b.attr("id").split("-"),d=c[0],e=!1,f=jq(k).closest(".pagination-links").attr("id"),g=null,h=k.attr("href").split("="),h=h[1],jq("div.dir-search input").length&&(e=jq(".dir-search input").prop("placeholder")?jq(".dir-search input").prop("placeholder"):jq(".dir-search input").val()),i=jq(".groups-members-search input"),i.length&&(e=i.val()),"members"===d&&"groups"===c[1]&&(d="group_members",g="groups/single/members"),"admin"===d&&jq("body").hasClass("membership-requests")&&(d="requests"),j=-1!==f.indexOf("pag-bottom")?"pag-bottom":null,bp_filter_request(d,jq.cookie("bp-"+d+"-filter"),jq.cookie("bp-"+d+"-scope"),"div."+d,e,h,jq.cookie("bp-"+d+"-extras"),j,g),!1):void 0}),jq("a.show-hide-new").on("click",function(){return jq("#new-topic-post").length?(jq("#new-topic-post").is(":visible")?jq("#new-topic-post").slideUp(200):jq("#new-topic-post").slideDown(200,function(){jq("#topic_title").focus()}),!1):!1}),jq("#submit_topic_cancel").on("click",function(){return jq("#new-topic-post").length?(jq("#new-topic-post").slideUp(200),!1):!1}),jq("#forum-directory-tags a").on("click",function(){return bp_filter_request("forums","tags",jq.cookie("bp-forums-scope"),"div.forums",jq(this).html().replace(/&nbsp;/g,"-"),1,jq.cookie("bp-forums-extras")),!1}),jq("#send-invite-form").on("click","#invite-list input",function(){var a,b,c=jq("#send-invite-form > .invite").length;jq(".ajax-loader").toggle(),c&&jq(this).parents("ul").find("input").prop("disabled",!0),a=jq(this).val(),b=jq(this).prop("checked")===!0?"invite":"uninvite",c||jq(".item-list-tabs li.selected").addClass("loading"),jq.post(ajaxurl,{action:"groups_invite_user",friend_action:b,cookie:bp_get_cookies(),_wpnonce:jq("#_wpnonce_invite_uninvite_user").val(),friend_id:a,group_id:jq("#group_id").val()},function(d){jq("#message")&&jq("#message").hide(),c?bp_filter_request("invite","bp-invite-filter","bp-invite-scope","div.invite",!1,1,"","",""):(jq(".ajax-loader").toggle(),"invite"===b?jq("#friend-list").append(d):"uninvite"===b&&jq("#friend-list li#uid-"+a).remove(),jq(".item-list-tabs li.selected").removeClass("loading"))})}),jq("#send-invite-form").on("click","a.remove",function(){var a=jq("#send-invite-form > .invite").length,b=jq(this).attr("id");return jq(".ajax-loader").toggle(),b=b.split("-"),b=b[1],jq.post(ajaxurl,{action:"groups_invite_user",friend_action:"uninvite",cookie:bp_get_cookies(),_wpnonce:jq("#_wpnonce_invite_uninvite_user").val(),friend_id:b,group_id:jq("#group_id").val()},function(){a?bp_filter_request("invite","bp-invite-filter","bp-invite-scope","div.invite",!1,1,"","",""):(jq(".ajax-loader").toggle(),jq("#friend-list #uid-"+b).remove(),jq("#invite-list #f-"+b).prop("checked",!1))}),!1}),jq(".visibility-toggle-link").on("click",function(a){a.preventDefault(),jq(this).parent().hide().addClass("field-visibility-settings-hide").siblings(".field-visibility-settings").show().addClass("field-visibility-settings-open")}),jq(".field-visibility-settings-close").on("click",function(a){a.preventDefault();var b=jq(this).parent(),c=b.find("input:checked").parent().text();b.hide().removeClass("field-visibility-settings-open").siblings(".field-visibility-settings-toggle").children(".current-visibility-level").text(c).end().show().removeClass("field-visibility-settings-hide")}),jq("#profile-edit-form input:not(:submit), #profile-edit-form textarea, #profile-edit-form select, #signup_form input:not(:submit), #signup_form textarea, #signup_form select").change(function(){var a=!0;jq("#profile-edit-form input:submit, #signup_form input:submit").on("click",function(){a=!1}),window.onbeforeunload=function(){return a?BP_DTheme.unsaved_changes:void 0}}),jq("#friend-list a.accept, #friend-list a.reject").on("click",function(){var a,b=jq(this),c=jq(this).parents("#friend-list li"),d=jq(this).parents("li div.action"),e=c.attr("id").substr(11,c.attr("id").length),f=b.attr("href"),g=f.split("_wpnonce=")[1];return jq(this).hasClass("accepted")||jq(this).hasClass("rejected")?!1:(jq(this).hasClass("accept")?(a="accept_friendship",d.children("a.reject").css("visibility","hidden")):(a="reject_friendship",d.children("a.accept").css("visibility","hidden")),b.addClass("loading"),jq.post(ajaxurl,{action:a,cookie:bp_get_cookies(),id:e,_wpnonce:g},function(a){b.removeClass("loading"),a[0]+a[1]==="-1"?(c.prepend(a.substr(2,a.length)),c.children("#message").hide().fadeIn(200)):b.fadeOut(100,function(){jq(this).hasClass("accept")?(d.children("a.reject").hide(),jq(this).html(BP_DTheme.accepted).contents().unwrap()):(d.children("a.accept").hide(),jq(this).html(BP_DTheme.rejected).contents().unwrap())})}),!1)}),jq("#members-dir-list, #members-group-list").on("click",".friendship-button a",function(){jq(this).parent().addClass("loading");var a=jq(this).attr("id"),b=jq(this).attr("href"),c=jq(this);return a=a.split("-"),a=a[1],b=b.split("?_wpnonce="),b=b[1].split("&"),b=b[0],jq.post(ajaxurl,{action:"addremove_friend",cookie:bp_get_cookies(),fid:a,_wpnonce:b},function(a){var b=c.attr("rel");parentdiv=c.parent(),"add"===b?jq(parentdiv).fadeOut(200,function(){parentdiv.removeClass("add_friend"),parentdiv.removeClass("loading"),parentdiv.addClass("pending_friend"),parentdiv.fadeIn(200).html(a)}):"remove"===b&&jq(parentdiv).fadeOut(200,function(){parentdiv.removeClass("remove_friend"),parentdiv.removeClass("loading"),parentdiv.addClass("add"),parentdiv.fadeIn(200).html(a)})}),!1}),jq("#buddypress").on("click",".group-button .leave-group",function(){return!1===confirm(BP_DTheme.leave_group_confirm)?!1:void 0}),jq("#groups-dir-list").on("click",".group-button a",function(){var a=jq(this).parent().attr("id"),b=jq(this).attr("href"),c=jq(this);return a=a.split("-"),a=a[1],b=b.split("?_wpnonce="),b=b[1].split("&"),b=b[0],c.hasClass("leave-group")&&!1===confirm(BP_DTheme.leave_group_confirm)?!1:(jq.post(ajaxurl,{action:"joinleave_group",cookie:bp_get_cookies(),gid:a,_wpnonce:b},function(a){var b=c.parent();jq("body.directory").length?jq(b).fadeOut(200,function(){b.fadeIn(200).html(a);var d=jq("#groups-personal span"),e=1;c.hasClass("leave-group")?(b.hasClass("hidden")&&b.closest("li").slideUp(200),e=0):c.hasClass("request-membership")&&(e=!1),d.length&&e!==!1&&d.text(e?(d.text()>>0)+1:(d.text()>>0)-1)}):location.href=location.href}),!1)}),jq("#buddypress").on("click",".pending",function(){return!1}),jq(".message-search").on("click",function(a){if(!jq(this).hasClass("no-ajax")){var b,c=jq(a.target);return"submit"===c.attr("type")?(b="messages",bp_filter_request(b,jq.cookie("bp-"+b+"-filter"),jq.cookie("bp-"+b+"-scope"),"div."+b,c.parent().children("label").children("input").val(),1,jq.cookie("bp-"+b+"-extras")),!1):void 0}}),jq("#send_reply_button").click(function(){var a=jq("#messages_order").val()||"ASC",b=jq("#message-recipients").offset(),c=jq("#send_reply_button");return jq(c).addClass("loading"),jq.post(ajaxurl,{action:"messages_send_reply",cookie:bp_get_cookies(),_wpnonce:jq("#send_message_nonce").val(),content:jq("#message_content").val(),send_to:jq("#send_to").val(),subject:jq("#subject").val(),thread_id:jq("#thread_id").val()},function(d){d[0]+d[1]==="-1"?jq("#send-reply").prepend(d.substr(2,d.length)):(jq("#send-reply #message").remove(),jq("#message_content").val(""),"ASC"===a?jq("#send-reply").before(d):(jq("#message-recipients").after(d),jq(window).scrollTop(b.top)),jq(".new-message").hide().slideDown(200,function(){jq(".new-message").removeClass("new-message")})),jq(c).removeClass("loading")}),!1}),jq("#mark_as_read, #mark_as_unread").click(function(){var a,b,c,d,e,f,g,h,i="",j=jq('#message-threads tr td input[type="checkbox"]');return"mark_as_unread"===jq(this).attr("id")?(a="read",b="unread",c=1,d=0,e="inline",f="messages_markunread"):(a="unread",b="read",c=0,d=1,e="none",f="messages_markread"),j.each(function(d){jq(this).is(":checked")&&jq("#m-"+jq(this).attr("value")).hasClass(a)&&(i+=jq(this).attr("value"),jq("#m-"+jq(this).attr("value")).removeClass(a),jq("#m-"+jq(this).attr("value")).addClass(b),h=jq("#m-"+jq(this).attr("value")+" td span.unread-count").html(),jq("#m-"+jq(this).attr("value")+" td span.unread-count").html(c),jq("#m-"+jq(this).attr("value")+" td span.unread-count").css("display",e),g=jq("tr.unread").length,jq("#user-messages span").html(g),d!==j.length-1&&(i+=","))}),jq.post(ajaxurl,{action:f,thread_ids:i}),!1}),jq("body.messages #item-body div.messages").on("change","#message-type-select",function(){var a=this.value,b=jq('td input[type="checkbox"]'),c="checked";switch(b.each(function(a){b[a].checked=""}),a){case"unread":b=jq('tr.unread td input[type="checkbox"]');break;case"read":b=jq('tr.read td input[type="checkbox"]');break;case"":c=""}b.each(function(a){b[a].checked=c})}),jq("body.messages #item-body div.messages").on("click",".messages-options-nav a",function(){return-1!==jq.inArray(this.id,Array("delete_sentbox_messages","delete_inbox_messages"))?(checkboxes_tosend="",checkboxes=jq('#message-threads tr td input[type="checkbox"]'),jq("#message").remove(),jq(this).addClass("loading"),jq(checkboxes).each(function(){jq(this).is(":checked")&&(checkboxes_tosend+=jq(this).attr("value")+",")}),""===checkboxes_tosend?(jq(this).removeClass("loading"),!1):(jq.post(ajaxurl,{action:"messages_delete",thread_ids:checkboxes_tosend},function(a){a[0]+a[1]==="-1"?jq("#message-threads").prepend(a.substr(2,a.length)):(jq("#message-threads").before('<div id="message" class="updated"><p>'+a+"</p></div>"),jq(checkboxes).each(function(){jq(this).is(":checked")&&(jq(this).attr("checked",!1),jq(this).parent().parent().fadeOut(150))})),jq("#message").hide().slideDown(150),jq("#delete_inbox_messages, #delete_sentbox_messages").removeClass("loading")}),!1)):void 0}),jq("#close-notice").on("click",function(){return jq(this).addClass("loading"),jq("#sidebar div.error").remove(),jq.post(ajaxurl,{action:"messages_close_notice",notice_id:jq(".notice").attr("rel").substr(2,jq(".notice").attr("rel").length)},function(a){jq("#close-notice").removeClass("loading"),a[0]+a[1]==="-1"?(jq(".notice").prepend(a.substr(2,a.length)),jq("#sidebar div.error").hide().fadeIn(200)):jq(".notice").slideUp(100)}),!1}),jq("#wp-admin-bar ul.main-nav li, #nav li").mouseover(function(){jq(this).addClass("sfhover")}),jq("#wp-admin-bar ul.main-nav li, #nav li").mouseout(function(){jq(this).removeClass("sfhover")}),jq("a.logout").on("click",function(){jq.removeCookie("bp-activity-scope",{path:"/"}),jq.removeCookie("bp-activity-filter",{path:"/"}),jq.removeCookie("bp-activity-oldestpage",{path:"/"});var a=["members","groups","blogs","forums"];jq(a).each(function(b){jq.removeCookie("bp-"+a[b]+"-scope",{path:"/"}),jq.removeCookie("bp-"+a[b]+"-filter",{path:"/"}),jq.removeCookie("bp-"+a[b]+"-extras",{path:"/"})})}),jq("body").hasClass("no-js")&&jq("body").attr("class",jq("body").attr("class").replace(/no-js/,"js")),"undefined"!=typeof wp&&"undefined"!=typeof wp.heartbeat&&"undefined"!=typeof BP_DTheme.pulse&&(wp.heartbeat.interval(Number(BP_DTheme.pulse)),jq.fn.extend({"heartbeat-send":function(){return this.bind("heartbeat-send.buddypress")}})),jq(document).on("heartbeat-send.buddypress",function(a,b){firstrow=0,jq("#buddypress ul.activity-list li").first().prop("id")&&(timestamp=jq("#buddypress ul.activity-list li").first().prop("class").match(/date-recorded-([0-9]+)/),timestamp&&(firstrow=timestamp[1])),(0===activity_last_recorded||Number(firstrow)>activity_last_recorded)&&(activity_last_recorded=Number(firstrow)),b.bp_activity_last_recorded=activity_last_recorded,last_recorded_search=bp_get_querystring("s"),last_recorded_search&&(b.bp_activity_last_recorded_search_terms=last_recorded_search)}),jq(document).on("heartbeat-tick",function(a,b){b.bp_activity_newest_activities&&(newest_activities=b.bp_activity_newest_activities.activities+newest_activities,activity_last_recorded=Number(b.bp_activity_newest_activities.last_recorded),jq("#buddypress ul.activity-list li").first().hasClass("load-newest")||jq("#buddypress ul.activity-list").prepend('<li class="load-newest"><a href="#newest">'+BP_DTheme.newest+"</a></li>"))})});
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-templates/bp-legacy/js/password-verify.js b/wp-content/plugins/buddypress/bp-templates/bp-legacy/js/password-verify.js
new file mode 100644
index 000000000..89c9cc45b
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-templates/bp-legacy/js/password-verify.js
@@ -0,0 +1,43 @@
+/* jshint undef: false */
+/* Password Verify */
+( function( $ ){
+	function check_pass_strength() {
+		var pass1 = $( '.password-entry' ).val(),
+		    pass2 = $( '.password-entry-confirm' ).val(),
+		    strength;
+
+		// Reset classes and result text
+		$( '#pass-strength-result' ).removeClass( 'short bad good strong' );
+		if ( ! pass1 ) {
+			$( '#pass-strength-result' ).html( pwsL10n.empty );
+			return;
+		}
+
+		strength = wp.passwordStrength.meter( pass1, wp.passwordStrength.userInputBlacklist(), pass2 );
+
+		switch ( strength ) {
+			case 2:
+				$( '#pass-strength-result' ).addClass( 'bad' ).html( pwsL10n.bad );
+				break;
+			case 3:
+				$( '#pass-strength-result' ).addClass( 'good' ).html( pwsL10n.good );
+				break;
+			case 4:
+				$( '#pass-strength-result' ).addClass( 'strong' ).html( pwsL10n.strong );
+				break;
+			case 5:
+				$( '#pass-strength-result' ).addClass( 'short' ).html( pwsL10n.mismatch );
+				break;
+			default:
+				$( '#pass-strength-result' ).addClass( 'short' ).html( pwsL10n['short'] );
+				break;
+		}
+	}
+
+	// Bind check_pass_strength to keyup events in the password fields
+	$( document ).ready( function() {
+		$( '.password-entry' ).val( '' ).keyup( check_pass_strength );
+		$( '.password-entry-confirm' ).val( '' ).keyup( check_pass_strength );
+	});
+
+} )( jQuery );
diff --git a/wp-content/plugins/buddypress/bp-templates/bp-legacy/js/password-verify.min.js b/wp-content/plugins/buddypress/bp-templates/bp-legacy/js/password-verify.min.js
new file mode 100644
index 000000000..a5fd26d81
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-templates/bp-legacy/js/password-verify.min.js
@@ -0,0 +1,2 @@
+/*! buddypress - v2.1.0 - 2014-10-06 9:39:07 PM UTC - https://wordpress.org/plugins/buddypress/ */
+!function(a){function b(){var b,c=a(".password-entry").val(),d=a(".password-entry-confirm").val();if(a("#pass-strength-result").removeClass("short bad good strong"),!c)return void a("#pass-strength-result").html(pwsL10n.empty);switch(b=wp.passwordStrength.meter(c,wp.passwordStrength.userInputBlacklist(),d)){case 2:a("#pass-strength-result").addClass("bad").html(pwsL10n.bad);break;case 3:a("#pass-strength-result").addClass("good").html(pwsL10n.good);break;case 4:a("#pass-strength-result").addClass("strong").html(pwsL10n.strong);break;case 5:a("#pass-strength-result").addClass("short").html(pwsL10n.mismatch);break;default:a("#pass-strength-result").addClass("short").html(pwsL10n["short"])}}a(document).ready(function(){a(".password-entry").val("").keyup(b),a(".password-entry-confirm").val("").keyup(b)})}(jQuery);
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-themes/bp-default/.jshintrc b/wp-content/plugins/buddypress/bp-themes/bp-default/.jshintrc
new file mode 100644
index 000000000..cd8ab889f
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-themes/bp-default/.jshintrc
@@ -0,0 +1,25 @@
+{
+	"boss": true,
+	"curly": true,
+	"eqeqeq": true,
+	"eqnull": true,
+	"es3": true,
+	"expr": true,
+	"immed": true,
+	"noarg": true,
+	"onevar": true,
+	"quotmark": "single",
+	"trailing": true,
+	"undef": true,
+	"unused": true,
+
+	"browser": true,
+
+	"globals": {
+		"_": false,
+		"ajaxurl": false,
+		"Backbone": false,
+		"jQuery": false,
+		"wp": false
+	}
+}
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-themes/bp-default/_inc/ajax.php b/wp-content/plugins/buddypress/bp-themes/bp-default/_inc/ajax.php
index 3bf6dd1b6..3b15c29d8 100644
--- a/wp-content/plugins/buddypress/bp-themes/bp-default/_inc/ajax.php
+++ b/wp-content/plugins/buddypress/bp-themes/bp-default/_inc/ajax.php
@@ -336,7 +336,7 @@ function bp_dtheme_new_activity_comment() {
 		exit( '-1<div id="message" class="error"><p>' . __( 'There was an error posting that reply, please try again.', 'buddypress' ) . '</p></div>' );
 
 	// Load the new activity item into the $activities_template global
-	bp_has_activities( 'display_comments=stream&hide_spam=false&include=' . $comment_id );
+	bp_has_activities( 'display_comments=stream&hide_spam=false&show_hidden=true&include=' . $comment_id );
 
 	// Swap the current comment with the activity item we just loaded
 	$activities_template->activity                  = new stdClass;
diff --git a/wp-content/plugins/buddypress/bp-themes/bp-default/_inc/global.js b/wp-content/plugins/buddypress/bp-themes/bp-default/_inc/global.js
index 97322e8db..40d6e43cd 100644
--- a/wp-content/plugins/buddypress/bp-themes/bp-default/_inc/global.js
+++ b/wp-content/plugins/buddypress/bp-themes/bp-default/_inc/global.js
@@ -17,22 +17,29 @@ jq(document).ready( function() {
 	bp_init_activity();
 
 	/* Object filter and scope set. */
-	var objects = [ 'members', 'groups', 'blogs', 'forums' ];
+	var objects = [ 'members', 'groups', 'blogs', 'forums' ],
+		$whats_new = jq('#whats-new');
+
 	bp_init_objects( objects );
 
 	/* @mention Compose Scrolling */
-	if ( jq.query.get('r') && jq('textarea#whats-new').length ) {
+	if ( $whats_new.length && bp_get_querystring('r') ) {
+		var $member_nicename = $whats_new.val();
+
 		jq('#whats-new-options').animate({
 			height:'40px'
 		});
-		jq("form#whats-new-form textarea").animate({
+
+		$whats_new.animate({
 			height:'50px'
 		});
-		jq.scrollTo( jq('textarea#whats-new'), 500, {
+
+		jq.scrollTo( $whats_new, 500, {
 			offset:-125,
-			easing:'easeOutQuad'
+			easing:'swing'
 		} );
-		jq('textarea#whats-new').focus();
+
+		$whats_new.val('').focus().val( $member_nicename );
 	}
 
 	/**** Activity Posting ********************************************************/
@@ -417,7 +424,7 @@ jq(document).ready( function() {
 			form.slideDown( 200 );
 			jq.scrollTo( form, 500, {
 				offset:-100,
-				easing:'easeOutQuad'
+				easing:'swing'
 			} );
 			jq('#ac-form-' + ids[2] + ' textarea').focus();
 
@@ -1289,25 +1296,25 @@ jq(document).ready( function() {
 
 	/* Clear BP cookies on logout */
 	jq('a.logout').click( function() {
-		jq.cookie('bp-activity-scope', null, {
+		jq.removeCookie('bp-activity-scope', {
 			path: '/'
 		});
-		jq.cookie('bp-activity-filter', null, {
+		jq.removeCookie('bp-activity-filter', {
 			path: '/'
 		});
-		jq.cookie('bp-activity-oldestpage', null, {
+		jq.removeCookie('bp-activity-oldestpage', {
 			path: '/'
 		});
 
 		var objects = [ 'members', 'groups', 'blogs', 'forums' ];
 		jq(objects).each( function(i) {
-			jq.cookie('bp-' + objects[i] + '-scope', null, {
+			jq.removeCookie('bp-' + objects[i] + '-scope', {
 				path: '/'
 			} );
-			jq.cookie('bp-' + objects[i] + '-filter', null, {
+			jq.removeCookie('bp-' + objects[i] + '-filter', {
 				path: '/'
 			} );
-			jq.cookie('bp-' + objects[i] + '-extras', null, {
+			jq.removeCookie('bp-' + objects[i] + '-extras', {
 				path: '/'
 			} );
 		});
@@ -1353,8 +1360,8 @@ function bp_filter_request( object, filter, scope, target, search_terms, page, e
 	if ( 'activity' == object )
 		return false;
 
-	if ( jq.query.get('s') && !search_terms )
-		search_terms = jq.query.get('s');
+	if ( bp_get_querystring('s') && !search_terms )
+		search_terms = bp_get_querystring('s');
 
 	if ( null == scope )
 		scope = 'all';
@@ -1565,15 +1572,3 @@ function bp_get_cookies() {
 	// returns BP cookies as querystring
 	return encodeURIComponent( jq.param(bpCookies) );
 }
-
-/* ScrollTo plugin - just inline and minified */
-;(function($){var h=$.scrollTo=function(a,b,c){$(window).scrollTo(a,b,c)};h.defaults={axis:'xy',duration:parseFloat($.fn.jquery)>=1.3?0:1,limit:true};h.window=function(a){return $(window)._scrollable()};$.fn._scrollable=function(){return this.map(function(){var a=this,isWin=!a.nodeName||$.inArray(a.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!isWin)return a;var b=(a.contentWindow||a).document||a.ownerDocument||a;return/webkit/i.test(navigator.userAgent)||b.compatMode=='BackCompat'?b.body:b.documentElement})};$.fn.scrollTo=function(e,f,g){if(typeof f=='object'){g=f;f=0}if(typeof g=='function')g={onAfter:g};if(e=='max')e=9e9;g=$.extend({},h.defaults,g);f=f||g.duration;g.queue=g.queue&&g.axis.length>1;if(g.queue)f/=2;g.offset=both(g.offset);g.over=both(g.over);return this._scrollable().each(function(){if(e==null)return;var d=this,$elem=$(d),targ=e,toff,attr={},win=$elem.is('html,body');switch(typeof targ){case'number':case'string':if(/^([+-]=?)?\d+(\.\d+)?(px|%)?$/.test(targ)){targ=both(targ);break}targ=$(targ,this);if(!targ.length)return;case'object':if(targ.is||targ.style)toff=(targ=$(targ)).offset()}$.each(g.axis.split(''),function(i,a){var b=a=='x'?'Left':'Top',pos=b.toLowerCase(),key='scroll'+b,old=d[key],max=h.max(d,a);if(toff){attr[key]=toff[pos]+(win?0:old-$elem.offset()[pos]);if(g.margin){attr[key]-=parseInt(targ.css('margin'+b))||0;attr[key]-=parseInt(targ.css('border'+b+'Width'))||0}attr[key]+=g.offset[pos]||0;if(g.over[pos])attr[key]+=targ[a=='x'?'width':'height']()*g.over[pos]}else{var c=targ[pos];attr[key]=c.slice&&c.slice(-1)=='%'?parseFloat(c)/100*max:c}if(g.limit&&/^\d+$/.test(attr[key]))attr[key]=attr[key]<=0?0:Math.min(attr[key],max);if(!i&&g.queue){if(old!=attr[key])animate(g.onAfterFirst);delete attr[key]}});animate(g.onAfter);function animate(a){$elem.animate(attr,f,g.easing,a&&function(){a.call(this,e,g)})}}).end()};h.max=function(a,b){var c=b=='x'?'Width':'Height',scroll='scroll'+c;if(!$(a).is('html,body'))return a[scroll]-$(a)[c.toLowerCase()]();var d='client'+c,html=a.ownerDocument.documentElement,body=a.ownerDocument.body;return Math.max(html[scroll],body[scroll])-Math.min(html[d],body[d])};function both(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery);
-
-/* jQuery Easing Plugin, v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/ */
-jQuery.easing.jswing=jQuery.easing.swing;jQuery.extend(jQuery.easing,{def:"easeOutQuad",swing:function(e,f,a,h,g){return jQuery.easing[jQuery.easing.def](e,f,a,h,g)},easeInQuad:function(e,f,a,h,g){return h*(f/=g)*f+a},easeOutQuad:function(e,f,a,h,g){return -h*(f/=g)*(f-2)+a},easeInOutQuad:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f+a}return -h/2*((--f)*(f-2)-1)+a},easeInCubic:function(e,f,a,h,g){return h*(f/=g)*f*f+a},easeOutCubic:function(e,f,a,h,g){return h*((f=f/g-1)*f*f+1)+a},easeInOutCubic:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f*f+a}return h/2*((f-=2)*f*f+2)+a},easeInQuart:function(e,f,a,h,g){return h*(f/=g)*f*f*f+a},easeOutQuart:function(e,f,a,h,g){return -h*((f=f/g-1)*f*f*f-1)+a},easeInOutQuart:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f*f*f+a}return -h/2*((f-=2)*f*f*f-2)+a},easeInQuint:function(e,f,a,h,g){return h*(f/=g)*f*f*f*f+a},easeOutQuint:function(e,f,a,h,g){return h*((f=f/g-1)*f*f*f*f+1)+a},easeInOutQuint:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f*f*f*f+a}return h/2*((f-=2)*f*f*f*f+2)+a},easeInSine:function(e,f,a,h,g){return -h*Math.cos(f/g*(Math.PI/2))+h+a},easeOutSine:function(e,f,a,h,g){return h*Math.sin(f/g*(Math.PI/2))+a},easeInOutSine:function(e,f,a,h,g){return -h/2*(Math.cos(Math.PI*f/g)-1)+a},easeInExpo:function(e,f,a,h,g){return(f==0)?a:h*Math.pow(2,10*(f/g-1))+a},easeOutExpo:function(e,f,a,h,g){return(f==g)?a+h:h*(-Math.pow(2,-10*f/g)+1)+a},easeInOutExpo:function(e,f,a,h,g){if(f==0){return a}if(f==g){return a+h}if((f/=g/2)<1){return h/2*Math.pow(2,10*(f-1))+a}return h/2*(-Math.pow(2,-10*--f)+2)+a},easeInCirc:function(e,f,a,h,g){return -h*(Math.sqrt(1-(f/=g)*f)-1)+a},easeOutCirc:function(e,f,a,h,g){return h*Math.sqrt(1-(f=f/g-1)*f)+a},easeInOutCirc:function(e,f,a,h,g){if((f/=g/2)<1){return -h/2*(Math.sqrt(1-f*f)-1)+a}return h/2*(Math.sqrt(1-(f-=2)*f)+1)+a},easeInElastic:function(f,h,e,l,k){var i=1.70158;var j=0;var g=l;if(h==0){return e}if((h/=k)==1){return e+l}if(!j){j=k*0.3}if(g<Math.abs(l)){g=l;var i=j/4}else{var i=j/(2*Math.PI)*Math.asin(l/g)}return -(g*Math.pow(2,10*(h-=1))*Math.sin((h*k-i)*(2*Math.PI)/j))+e},easeOutElastic:function(f,h,e,l,k){var i=1.70158;var j=0;var g=l;if(h==0){return e}if((h/=k)==1){return e+l}if(!j){j=k*0.3}if(g<Math.abs(l)){g=l;var i=j/4}else{var i=j/(2*Math.PI)*Math.asin(l/g)}return g*Math.pow(2,-10*h)*Math.sin((h*k-i)*(2*Math.PI)/j)+l+e},easeInOutElastic:function(f,h,e,l,k){var i=1.70158;var j=0;var g=l;if(h==0){return e}if((h/=k/2)==2){return e+l}if(!j){j=k*(0.3*1.5)}if(g<Math.abs(l)){g=l;var i=j/4}else{var i=j/(2*Math.PI)*Math.asin(l/g)}if(h<1){return -0.5*(g*Math.pow(2,10*(h-=1))*Math.sin((h*k-i)*(2*Math.PI)/j))+e}return g*Math.pow(2,-10*(h-=1))*Math.sin((h*k-i)*(2*Math.PI)/j)*0.5+l+e},easeInBack:function(e,f,a,i,h,g){if(g==undefined){g=1.70158}return i*(f/=h)*f*((g+1)*f-g)+a},easeOutBack:function(e,f,a,i,h,g){if(g==undefined){g=1.70158}return i*((f=f/h-1)*f*((g+1)*f+g)+1)+a},easeInOutBack:function(e,f,a,i,h,g){if(g==undefined){g=1.70158}if((f/=h/2)<1){return i/2*(f*f*(((g*=(1.525))+1)*f-g))+a}return i/2*((f-=2)*f*(((g*=(1.525))+1)*f+g)+2)+a},easeInBounce:function(e,f,a,h,g){return h-jQuery.easing.easeOutBounce(e,g-f,0,h,g)+a},easeOutBounce:function(e,f,a,h,g){if((f/=g)<(1/2.75)){return h*(7.5625*f*f)+a}else{if(f<(2/2.75)){return h*(7.5625*(f-=(1.5/2.75))*f+0.75)+a}else{if(f<(2.5/2.75)){return h*(7.5625*(f-=(2.25/2.75))*f+0.9375)+a}else{return h*(7.5625*(f-=(2.625/2.75))*f+0.984375)+a}}}},easeInOutBounce:function(e,f,a,h,g){if(f<g/2){return jQuery.easing.easeInBounce(e,f*2,0,h,g)*0.5+a}return jQuery.easing.easeOutBounce(e,f*2-g,0,h,g)*0.5+h*0.5+a}});
-
-/* jQuery Cookie plugin */
-jQuery.cookie=function(name,value,options){if(typeof value!='undefined'){options=options||{};if(value===null){value='';options.expires=-1;}var expires='';if(options.expires&&(typeof options.expires=='number'||options.expires.toUTCString)){var date;if(typeof options.expires=='number'){date=new Date();date.setTime(date.getTime()+(options.expires*24*60*60*1000));}else{date=options.expires;}expires='; expires='+date.toUTCString();}var path=options.path?'; path='+(options.path):'';var domain=options.domain?'; domain='+(options.domain):'';var secure=options.secure?'; secure':'';document.cookie=[name,'=',encodeURIComponent(value),expires,path,domain,secure].join('');}else{var cookieValue=null;if(document.cookie&&document.cookie!=''){var cookies=document.cookie.split(';');for(var i=0;i<cookies.length;i++){var cookie=jQuery.trim(cookies[i]);if(cookie.substring(0,name.length+1)==(name+'=')){cookieValue=decodeURIComponent(cookie.substring(name.length+1));break;}}}return cookieValue;}};
-
-/* jQuery querystring plugin */
-eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('M 6(A){4 $11=A.11||\'&\';4 $V=A.V===r?r:j;4 $1p=A.1p===r?\'\':\'[]\';4 $13=A.13===r?r:j;4 $D=$13?A.D===j?"#":"?":"";4 $15=A.15===r?r:j;v.1o=M 6(){4 f=6(o,t){8 o!=1v&&o!==x&&(!!t?o.1t==t:j)};4 14=6(1m){4 m,1l=/\\[([^[]*)\\]/g,T=/^([^[]+)(\\[.*\\])?$/.1r(1m),k=T[1],e=[];19(m=1l.1r(T[2]))e.u(m[1]);8[k,e]};4 w=6(3,e,7){4 o,y=e.1b();b(I 3!=\'X\')3=x;b(y===""){b(!3)3=[];b(f(3,L)){3.u(e.h==0?7:w(x,e.z(0),7))}n b(f(3,1a)){4 i=0;19(3[i++]!=x);3[--i]=e.h==0?7:w(3[i],e.z(0),7)}n{3=[];3.u(e.h==0?7:w(x,e.z(0),7))}}n b(y&&y.T(/^\\s*[0-9]+\\s*$/)){4 H=1c(y,10);b(!3)3=[];3[H]=e.h==0?7:w(3[H],e.z(0),7)}n b(y){4 H=y.B(/^\\s*|\\s*$/g,"");b(!3)3={};b(f(3,L)){4 18={};1w(4 i=0;i<3.h;++i){18[i]=3[i]}3=18}3[H]=e.h==0?7:w(3[H],e.z(0),7)}n{8 7}8 3};4 C=6(a){4 p=d;p.l={};b(a.C){v.J(a.Z(),6(5,c){p.O(5,c)})}n{v.J(1u,6(){4 q=""+d;q=q.B(/^[?#]/,\'\');q=q.B(/[;&]$/,\'\');b($V)q=q.B(/[+]/g,\' \');v.J(q.Y(/[&;]/),6(){4 5=1e(d.Y(\'=\')[0]||"");4 c=1e(d.Y(\'=\')[1]||"");b(!5)8;b($15){b(/^[+-]?[0-9]+\\.[0-9]*$/.1d(c))c=1A(c);n b(/^[+-]?[0-9]+$/.1d(c))c=1c(c,10)}c=(!c&&c!==0)?j:c;b(c!==r&&c!==j&&I c!=\'1g\')c=c;p.O(5,c)})})}8 p};C.1H={C:j,1G:6(5,1f){4 7=d.Z(5);8 f(7,1f)},1h:6(5){b(!f(5))8 d.l;4 K=14(5),k=K[0],e=K[1];4 3=d.l[k];19(3!=x&&e.h!=0){3=3[e.1b()]}8 I 3==\'1g\'?3:3||""},Z:6(5){4 3=d.1h(5);b(f(3,1a))8 v.1E(j,{},3);n b(f(3,L))8 3.z(0);8 3},O:6(5,c){4 7=!f(c)?x:c;4 K=14(5),k=K[0],e=K[1];4 3=d.l[k];d.l[k]=w(3,e.z(0),7);8 d},w:6(5,c){8 d.N().O(5,c)},1s:6(5){8 d.O(5,x).17()},1z:6(5){8 d.N().1s(5)},1j:6(){4 p=d;v.J(p.l,6(5,7){1y p.l[5]});8 p},1F:6(Q){4 D=Q.B(/^.*?[#](.+?)(?:\\?.+)?$/,"$1");4 S=Q.B(/^.*?[?](.+?)(?:#.+)?$/,"$1");8 M C(Q.h==S.h?\'\':S,Q.h==D.h?\'\':D)},1x:6(){8 d.N().1j()},N:6(){8 M C(d)},17:6(){6 F(G){4 R=I G=="X"?f(G,L)?[]:{}:G;b(I G==\'X\'){6 1k(o,5,7){b(f(o,L))o.u(7);n o[5]=7}v.J(G,6(5,7){b(!f(7))8 j;1k(R,5,F(7))})}8 R}d.l=F(d.l);8 d},1B:6(){8 d.N().17()},1D:6(){4 i=0,U=[],W=[],p=d;4 16=6(E){E=E+"";b($V)E=E.B(/ /g,"+");8 1C(E)};4 1n=6(1i,5,7){b(!f(7)||7===r)8;4 o=[16(5)];b(7!==j){o.u("=");o.u(16(7))}1i.u(o.P(""))};4 F=6(R,k){4 12=6(5){8!k||k==""?[5].P(""):[k,"[",5,"]"].P("")};v.J(R,6(5,7){b(I 7==\'X\')F(7,12(5));n 1n(W,12(5),7)})};F(d.l);b(W.h>0)U.u($D);U.u(W.P($11));8 U.P("")}};8 M C(1q.S,1q.D)}}(v.1o||{});',62,106,'|||target|var|key|function|value|return|||if|val|this|tokens|is||length||true|base|keys||else||self||false|||push|jQuery|set|null|token|slice|settings|replace|queryObject|hash|str|build|orig|index|typeof|each|parsed|Array|new|copy|SET|join|url|obj|search|match|queryString|spaces|chunks|object|split|get||separator|newKey|prefix|parse|numbers|encode|COMPACT|temp|while|Object|shift|parseInt|test|decodeURIComponent|type|number|GET|arr|EMPTY|add|rx|path|addFields|query|suffix|location|exec|REMOVE|constructor|arguments|undefined|for|empty|delete|remove|parseFloat|compact|encodeURIComponent|toString|extend|load|has|prototype'.split('|'),0,{}))
diff --git a/wp-content/plugins/buddypress/bp-themes/bp-default/_inc/images/45pc_black.png b/wp-content/plugins/buddypress/bp-themes/bp-default/_inc/images/45pc_black.png
index 38b032aa2ae4561ede965f119714099359fd8a94..4f981931ef2eea76b90f8f59d8d1dda158848be6 100644
GIT binary patch
delta 7
Ocmb;po1ik$(+B_yKLU~f

delta 42
xcmWHmo}i*6S>hT|5}cn_Ql40p%HWuipOmWLnVXoN8kCxtQdxL1)n=liDF8j%4<-Nr

diff --git a/wp-content/plugins/buddypress/bp-themes/bp-default/_inc/images/60pc_black.png b/wp-content/plugins/buddypress/bp-themes/bp-default/_inc/images/60pc_black.png
index ce7c1c7330326b32e8767f4110d6527886a1deea..d5d91f0ed30d467abea6f9940610b883fe25e127 100644
GIT binary patch
delta 48
zcmd0GnINgn!oa|=RfdO&fq{YB)5S4_LpJ%r9A*ZFjSS1S2X1s`U|?YIboFyt=akR{
E0RATn;s5{u

delta 89
zcmZ?Cogf*)#=yWJFM6btfq_A?#5JNMI6tkVJh3R1!7(L2DOJHUH!(dmC^a#qvhZZ8
t4FdxMzo(01NX4zBM^B#2VHQYWVEDtZYsbIk0SpWb44$rjF6*2UngG_?9l!tp

diff --git a/wp-content/plugins/buddypress/bp-themes/bp-default/_inc/images/activity_arrow.gif b/wp-content/plugins/buddypress/bp-themes/bp-default/_inc/images/activity_arrow.gif
index 6c52bfd534e1091ecf2781f67ab3965c328159f8..f18a70ecab1102b31e396621854ae14b247cdc1c 100644
GIT binary patch
delta 39
vcmdnPxQCI)-P6s&GEs~{nc*|TL>?Ko|Ns9pFfdHi(_)>t#r@!fiLvnj>=X?z

delta 39
wcmdnPxQCI)-P6s&GEs~{nPD@>L>?KoZ{NQC|NnoYo)+uEE$#;wOpJ{O01u`Q`2YX_

diff --git a/wp-content/plugins/buddypress/bp-themes/bp-default/_inc/images/admin-menu-arrow.gif b/wp-content/plugins/buddypress/bp-themes/bp-default/_inc/images/admin-menu-arrow.gif
index ba8eab77cfc9761426220d1caf4510cfea3affca..3d8299f7dd442c58c6310b8996ddc968f2ef2ca9 100644
GIT binary patch
delta 18
ZcmXpu=5hCQv#?BLXJBRcz%Y?V9RMR?1KR)q

delta 18
ZcmXpu=5hCQv#?BLXJBP$V4TRK4geuF18e{Q

diff --git a/wp-content/plugins/buddypress/bp-themes/bp-default/_inc/images/ajax-loader.gif b/wp-content/plugins/buddypress/bp-themes/bp-default/_inc/images/ajax-loader.gif
index 6e5bace6e654c094f212632e8692e78c55ba3119..824c801e1bc2dc49c149e2fac5267d2d111477eb 100644
GIT binary patch
literal 445
zcmZ?wbhEHb<YVAt_{hNU|NsB@@893McW>|By^8<2{aizWogD*Qjr0td85tND6o0a?
zvNNzS=rAxaFo3i$Fl&44V)(t`plH*il%DXlSESQ*Z>88dY56=@ur8qboT}ulXimG*
z`s4e9-%do+&%?mMz`!i!u}kpx8ArvCU<Qq-{A<x$Qvz1<yhspQnWcuXj){SR0jAtb
z>Gx_!qqa#ZETK^A=5Z}xdd{VSP|n7{z`()412Wyh`Od98LB$)3MT1UM|6pWklVxGJ
z+gYSO8Obqh3`|hv(jH#MtIzKJwn{W&&ziT~2bmaHB!m_-X=Pru<3t$G#J~o1jkL!u
zE4v<B32nv(&W#0pj2jEX-5O4XEu4192uVEyT)h+r*OhzSdp)x`@_EWP3bbq!4F7B@
zRT`%D0_=KDw6K-;*mdV07sH7sOFll5tvYaTdvCWw&NEA%2`kqq?>Xti#9$2oiyeU3

literal 457
zcmZ?wbhEHb<YVAtSj52a|NsB@@893McW>|By@uyNTm~>u{Lk&@8WQa67~pE8XTZ$J
zz`&sRlZBO?ft5iAqyVIyfmu6Z7sKxj2SuAErS^ocy&|2idn?7xNz3QKf^`Aa=Ts$c
zMRVGf)*s&={B|OmejWx61_oxSh+Tre&p0ZE1T$zv<zI{5ni8;*=S70p$}Ba6bxaHl
z3^3(UO21bhG-{iq$`T5-ZXVYHrsrHL2<2=H3=A9$JRs98g74hQ6IHyiSTyKF^$$jt
zHdz*iyPZYqlaU<5#=rzsE*%kNy!!0kZ>vNj_N;l!eUOQPRYGhrlUC+cJ5Gf0Obl#L
z*GNa~va;*3mB?mn;M`ci=eV&jJgnhV*urUtjF8kbz|~7}a9zFEz1K6FBcG>yqd@C6
z(eTfvQl(*PFTk$nL<?K_h+TL7aWR~DvgG3<*{TEgw)b``<UF(FnXqz=@}84EObpfl
Dr51)m

diff --git a/wp-content/plugins/buddypress/bp-themes/bp-default/_inc/images/background.gif b/wp-content/plugins/buddypress/bp-themes/bp-default/_inc/images/background.gif
index 1af6782476a71177e5713394379b20874261ab09..7178d9b7f76dd3dbdb653a580656f453ef0bbeb3 100644
GIT binary patch
delta 23
fcmZ3^GM|Op-P6s&JdvB>6yukP+({ctH!%VLQpN|N

delta 27
jcmbQwvYdt6-P6s&GLf6%6yuSJ+)2!eKUp?rY-a=jZiWbq

diff --git a/wp-content/plugins/buddypress/bp-themes/bp-default/_inc/images/closed.png b/wp-content/plugins/buddypress/bp-themes/bp-default/_inc/images/closed.png
index 81f9329e42fc90dc85e1b8226662329d12c4ed2e..1e68a8cded3ba73b72a34968c339ce87c40820bd 100644
GIT binary patch
delta 204
zcmdnZbcb<*L_G^L0|NtFVE01?1_pxwpAgp_+t>d8|9{8!wZ_KAxw*L&6%~sXEn2#C
z>8e$$Hf-3iZQHghSFYT?ef#m_$FE<%{{H>D!(yGo3=9m+B|(0{3=9q8=iL7>Ffc@T
zx;Tb#$R-OV6ciRF2qYwlMDES*RA3fvz8Y?>$E<Kxpj^L^(dEBu{dtBZGexKLicV>)
z3EplJ%s#;?IazzcE?b8J1`lawMzeo13;r;%E!&@eexB{`X^adeF0%c*E(hFYU|?YI
MboFyt=akR{0QmS+@c;k-

delta 300
zcmcb^xSMH$L_G%^0|UdC`e~OK7#Ji=Tq8<?^V3So6N^$A98>a>QWZRN6Vp?JQWH}u
z3s0unFfcIO^>lFzskoK&=l_5E!{=mQOC%(`-p2f2@<PM*>CDPKZ{G<XIlyp<<?zm(
zJO9V;ulxJ|_xJY+JW0(49x{=#ZEQ1?B#tec$a+`P*Vk9!xk<g!$Jei4y$ZOJkkPbj
zH{;3vuP;6&_*Pa{{`d9uJ;<aWb);R>L43YRrjW9*PmqgC%fZ8knSH9Osty@$vS|BU
zQd%l$mUE-w?AC&hZ*Om3oMl!0O^10S!#dCC=-CS%?XCX4D9ft;pUq3N%*;%|keVMK
z5<`5wr|B@Vv*{K5{FG{;I$Lngv;~E(C)5ID8Z#Ogm>CKJCoUJRnqk7gz`)??>gTe~
HDWM4fcgBSL

diff --git a/wp-content/plugins/buddypress/bp-themes/bp-default/_inc/images/default_header.jpg b/wp-content/plugins/buddypress/bp-themes/bp-default/_inc/images/default_header.jpg
index 64289f5e05663bc55d1de2ed15a59f5f409d7133..10a5ff650a76decb2bef83f3b6ecff44a1b5fdf2 100644
GIT binary patch
literal 708
zcmex=<NpH&0WUXCHwH#VMg|WC4+e(+w;7y4JVr_Y$Ph~OgZ2JDz#z!MaDsu0nNg5|
zNsy6Qkn#T!21y1+Mh0d^1|-13$jr+1{|JMs00RRnGYb=vETeGZLMEYyfsGSC1SJVN
zUfc*W0c<)WvJp&-%<LThk1%KmGB7bPaj-EXOlO>Ukx5WUF)(P-!o;M;MGqe-6&C%!
z#lXYN$iO7XEXZKb@LBOgl{}l>&XpgoEUUEmVawmlHJ{fjVcDrIlcYmsZX4*V_EcEa
zmpent_p#FZ6N?&rA1l_mig4?EZ8q3#eWhXZHKsT3gIGKFq(pG;NntGV^)F-6e&}D>
zGHc!&rhOvcXBNe6o?vv{KEwN35z}@1%&NNO3ci2#F0>DxApYsw^d(oz6T>tUcd4jc
zEl=3!&3nO$(=_%*?9{2pZ?Mc-_eLx%Tt1;hC~NnIO;tfx-+&l=Q?^!%-|#=j@JL7f
zIRp1(TkpMB!o95aHcq)`B&+f28|%vXoesD5OU*gp^T&&6{juc+QIkXOw#N2yR2p46
z>VCp=)w_dbCW=p@B3As=^L?yz^oPbymU~7_e?(&Xn(`%?ryrl4F#DK8P31PdO>0#e
zPWy|C8>U8iGHm%+SggHa{v5`pLv;lV8;w6|NCzK0*f8_Q6jpzBHm)^hPyREod+QtD
zONhul`Hyw_%=ZRCvyZukeqVWp<(`pf?W<z8FX!K!{$(QR`&fau0Te~{|8D{SlycbG

literal 1062
zcmZ?wbhEHb<YG9%@Qi`M(x+0_F4HckLESvjKDf~#wAt9TP{Sh0%CB10B+lBuM#VTr
z&pu1VB-X;a!ZxtpA*4yoEWygR%E+a_CZN{9DObff*3dc6%(GO}D#g^JMAbB2%PLjV
zGTGd#+}x{7**HeaI@La;N#7w`$2LRXF-O}vO~*FfHn7enpibK+%`vpaF|1Y9G|t4W
z$i%(aDXdk^EMCnt-qgL=%%jvcsNTpqU&A8VE~wtfCEvuY*xIk!z%fVJC`Q*d!_1?^
zA*9*DyIkEoLB}TD)V;*ouSU;4Tf;J0-yuiOA=}V7U)v^K(=x>_xWUr5%EG6@F|^st
zv&`JHOx-NOz$wqbG1u6w$Udae#=lm}D#g$#&oQh;*(lm6yp@42K=CIF*d84a35pX2
z_WunrP0cN>ZS5VMU9Gmgef<g(CrzF*g?svpnX_iknJzYe!NNt0c$Y3)zGCI7rJQTm
zt>3V5(^}oF+qUo6A-#Lg-hKOw4jwvu(9qE6*zuF6PYa$qf8pY#%jbfxUBBUU>-HVy
zd-oqaeDwIq1NP@HUcP$$=Iu-K4<A3dfBE`N_Q%g(zkmDu`_Ev^A>*+j;h+wOu-20U
z8x|gJ=Xds)<FPTxRan9}>&}kA*5myO&TTPHo0gnZ)CgW>b8yqr)6?}mPt5V$oaQTU
zQT&SMz~<%W=Q}iWeLcBg#l^)QleKiSmaM$I+;frFT&qQ^uC9*QsC4tx*6hyp35UBx
zPcL3`b93mWRk6_v*WTV<@c&`ZOz-XMrtPly9CzdN_Vw}my_mS=au#oRc-T@%JI-d|
z#>dAeD0}DSEZFq)^bF(ddo?$^o}XV3+ac$>t0Yr)MeypngS)oAmNbsr+~&L6EJtZa
z@#|{`c5i=we}6rPyx*L*kB?6nYQ&%0Q~6or!eZ~~PJ4HK<-f5x`~JSW&EMZYINZ+f
zv~N!(`-{t~<InH2{iXil@o9F4{rmp@{_*+s_V-Kn|Nk$<qVb@CMJywsfkS1*gC-uc
z7YR+)E*cM8TthM*wsNJcc-SUW_9C$@qDA9ThsczSN1YnWRwQ+5Zh7&j+u%^gp&pZK
z8H;=QpR9P?XY=hva-S)S=938)BAHJnGO4V5(mct>?B$cm-e!tVr-TS4Je?Ymw({w;
zn54?1(-Yb>56wuKmbq-Ez><~EX60;qnKsMei01P-tXDFh&#id2^7*`Sr-#qyH>^{5
zv7kjP>V;T`+Nu|eddyzESlqoy;pLJkVNseqGtySATo!xag6s16ZCbBZESZ+|YUPS$
Vt6r^Iv+dQZ)f<le%2Z&m1^`>3!pHys

diff --git a/wp-content/plugins/buddypress/bp-themes/bp-default/_inc/images/item_back.gif b/wp-content/plugins/buddypress/bp-themes/bp-default/_inc/images/item_back.gif
index afc88fcb121cdc89b3ea1f88bdbf3a12087709e5..113db087fcdbe17e21ed39b04e3efece6ee609e4 100644
GIT binary patch
delta 20
bcmb;`<97FSvoKF&Vu)b)JdxXIqN^nUJL(0{

delta 24
fcmXS`<97FSv#?BLVu)baJdxXoS@9>!L<>6rQTqm~

diff --git a/wp-content/plugins/buddypress/bp-themes/bp-default/_inc/images/replyto_arrow.gif b/wp-content/plugins/buddypress/bp-themes/bp-default/_inc/images/replyto_arrow.gif
index 168c53af649d83b7bd57ea69c48a7629e96aaaf0..fbf38f3759e3cbe1185ec4675c18bff8309f2c9d 100644
GIT binary patch
delta 18
ZcmZ>A;&JzMv#?C$X5eG^z%Y@=3;-qI1Qh@P

delta 18
ZcmZ>A;&JzMv#?C$X5eFJV4TQf1^^?p1Ev4~

diff --git a/wp-content/plugins/buddypress/bp-themes/bp-default/_inc/images/rss.png b/wp-content/plugins/buddypress/bp-themes/bp-default/_inc/images/rss.png
index b3c949d2244f2c0c81d65e74719af2a1b56d06a3..1e7bb73e4431896729a58bc7d6d9d5125e0ca927 100644
GIT binary patch
delta 10
RcmdnU`iEtL^2UfrCIA<#1I_>d

delta 62
zcmeyvvXOOyvM~cox}&cn1H<|g=B!;W85kHOOI#yLg7ec#$`gxH85~pclTsBta}(23
SgHjVyDhp4h+H6#eW&!|l3>3ov

diff --git a/wp-content/plugins/buddypress/bp-themes/bp-default/_inc/images/sidebar_back.gif b/wp-content/plugins/buddypress/bp-themes/bp-default/_inc/images/sidebar_back.gif
index 0a0142d101f829fcc906702badbe7a519d806704..751e682345a6ed0f5ceed919166e8eddd5ea0483 100644
GIT binary patch
delta 22
dcmZ3$ID?Vf-P6s&JduT=kKyw~Zlj5=(Evp_25<lX

delta 26
hcmbQixPXz{-P6s&GLeO$k74sfZX;&JpDYtC5&&H}2TK3|

diff --git a/wp-content/plugins/buddypress/bp-themes/bp-default/_inc/images/white-grad.png b/wp-content/plugins/buddypress/bp-themes/bp-default/_inc/images/white-grad.png
index 3ffe025da8709d0e939adec4b6fe4e9a66e40d0b..867bacb214562fe765784dc64e1a87355a0bf477 100644
GIT binary patch
delta 62
zcmXR8njmS(z`($8P_#Rdfq_BN)5S4_V`lO%ekLCtg##>!lhvJea=OgsWUw`lyJwNG
Q@B&D&r>mdKI;Vst00Zn1q5uE@

delta 95
zcmWG4o*)^;#=yYvr0&XI1_lPs0*}aI1_o{+5N5n|x9$%E1B0rki(`m}X!0L^7M_d-
y&R+g!n-T&~G=vtc$dK21Cv(GLnX3jPLo<(++6<B7iy0Ug7(8A5T-G@yGywoL_8lGo

diff --git a/wp-content/plugins/buddypress/bp-themes/bp-default/activity/entry.php b/wp-content/plugins/buddypress/bp-themes/bp-default/activity/entry.php
index 44a665a07..af8802afa 100644
--- a/wp-content/plugins/buddypress/bp-themes/bp-default/activity/entry.php
+++ b/wp-content/plugins/buddypress/bp-themes/bp-default/activity/entry.php
@@ -99,7 +99,7 @@
 					<div class="ac-reply-avatar"><?php bp_loggedin_user_avatar( 'width=' . BP_AVATAR_THUMB_WIDTH . '&height=' . BP_AVATAR_THUMB_HEIGHT ); ?></div>
 					<div class="ac-reply-content">
 						<div class="ac-textarea">
-							<textarea id="ac-input-<?php bp_activity_id(); ?>" class="ac-input" name="ac_input_<?php bp_activity_id(); ?>"></textarea>
+							<textarea id="ac-input-<?php bp_activity_id(); ?>" class="ac-input bp-suggestions" name="ac_input_<?php bp_activity_id(); ?>"></textarea>
 						</div>
 						<input type="submit" name="ac_form_submit" value="<?php esc_attr_e( 'Post', 'buddypress' ); ?>" /> &nbsp; <?php _e( 'or press esc to cancel.', 'buddypress' ); ?>
 						<input type="hidden" name="comment_form_id" value="<?php bp_activity_id(); ?>" />
diff --git a/wp-content/plugins/buddypress/bp-themes/bp-default/activity/index.php b/wp-content/plugins/buddypress/bp-themes/bp-default/activity/index.php
index eecd17ada..b836784f9 100644
--- a/wp-content/plugins/buddypress/bp-themes/bp-default/activity/index.php
+++ b/wp-content/plugins/buddypress/bp-themes/bp-default/activity/index.php
@@ -95,7 +95,7 @@ get_header( 'buddypress' ); ?>
 					<li id="activity-filter-select" class="last">
 						<label for="activity-filter-by"><?php _e( 'Show:', 'buddypress' ); ?></label>
 						<select id="activity-filter-by">
-							<option value="-1"><?php _e( 'Everything', 'buddypress' ); ?></option>
+							<option value="-1"><?php _e( '&mdash; Everything &mdash;', 'buddypress' ); ?></option>
 							<option value="activity_update"><?php _e( 'Updates', 'buddypress' ); ?></option>
 
 							<?php if ( bp_is_active( 'blogs' ) ) : ?>
diff --git a/wp-content/plugins/buddypress/bp-themes/bp-default/activity/post-form.php b/wp-content/plugins/buddypress/bp-themes/bp-default/activity/post-form.php
index fe0e8921e..43d3dd4c3 100644
--- a/wp-content/plugins/buddypress/bp-themes/bp-default/activity/post-form.php
+++ b/wp-content/plugins/buddypress/bp-themes/bp-default/activity/post-form.php
@@ -27,7 +27,7 @@
 
 	<div id="whats-new-content">
 		<div id="whats-new-textarea">
-			<textarea name="whats-new" id="whats-new" cols="50" rows="10"><?php if ( isset( $_GET['r'] ) ) : ?>@<?php echo esc_textarea( $_GET['r'] ); ?> <?php endif; ?></textarea>
+			<textarea name="whats-new" id="whats-new" class="bp-suggestions" cols="50" rows="10"><?php if ( isset( $_GET['r'] ) ) : ?>@<?php echo esc_textarea( $_GET['r'] ); ?> <?php endif; ?></textarea>
 		</div>
 
 		<div id="whats-new-options">
diff --git a/wp-content/plugins/buddypress/bp-themes/bp-default/functions.php b/wp-content/plugins/buddypress/bp-themes/bp-default/functions.php
index a4b39cc29..dd18c9e67 100644
--- a/wp-content/plugins/buddypress/bp-themes/bp-default/functions.php
+++ b/wp-content/plugins/buddypress/bp-themes/bp-default/functions.php
@@ -150,6 +150,21 @@ if ( !function_exists( 'bp_dtheme_enqueue_scripts' ) ) :
  */
 function bp_dtheme_enqueue_scripts() {
 
+	// Enqueue various scripts
+	wp_enqueue_script( 'bp-jquery-query' );
+	wp_enqueue_script( 'bp-jquery-cookie' );
+
+	// Enqueue scrollTo only on activity pages
+	if ( bp_is_activity_component() ) {
+		wp_enqueue_script( 'bp-jquery-scroll-to' );
+	}
+
+	// A similar check is done in BP_Core_Members_Widget, but due to a load order
+	// issue, we do it again here
+	if ( is_active_widget( false, false, 'bp_core_members_widget' ) && ! is_admin() && ! is_network_admin() ) {
+		wp_enqueue_script( 'bp-widget-members' );
+	}
+
 	// Enqueue the global JS - Ajax will not work without it
 	wp_enqueue_script( 'dtheme-ajax-js', get_template_directory_uri() . '/_inc/global.js', array( 'jquery' ), bp_get_version() );
 
@@ -790,4 +805,23 @@ function bp_dtheme_remove_nojs_body_class() {
 }
 add_action( 'bp_before_header', 'bp_dtheme_remove_nojs_body_class' );
 
-?>
+/**
+ * Ensure that multiselect boxes have trailing brackets in their 'id' and 'name' attributes.
+ *
+ * These brackets are required for an array of values to be sent in the POST
+ * request. Previously, bp_get_the_profile_field_input_name() contained the
+ * necessary logic, but since BP 2.0 that logic has been moved into
+ * BP_XProfile_Field_Type_Multiselectbox. Since bp-default does not use the
+ * BP_XProfile_Field_Type classes to build its markup, it did not inherit
+ * the brackets from their new location. Thus this workaround.
+ */
+function bp_dtheme_add_brackets_to_multiselectbox_attributes( $name ) {
+	global $field;
+
+	if ( 'multiselectbox' === $field->type ) {
+		$name .= '[]';
+	}
+
+	return $name;
+}
+add_filter( 'bp_get_the_profile_field_input_name', 'bp_dtheme_add_brackets_to_multiselectbox_attributes' );
diff --git a/wp-content/plugins/buddypress/bp-themes/bp-default/groups/single/activity.php b/wp-content/plugins/buddypress/bp-themes/bp-default/groups/single/activity.php
index e89d5e1fb..369c17fe9 100644
--- a/wp-content/plugins/buddypress/bp-themes/bp-default/groups/single/activity.php
+++ b/wp-content/plugins/buddypress/bp-themes/bp-default/groups/single/activity.php
@@ -7,7 +7,7 @@
 		<li id="activity-filter-select" class="last">
 			<label for="activity-filter-by"><?php _e( 'Show:', 'buddypress' ); ?></label> 
 			<select id="activity-filter-by">
-				<option value="-1"><?php _e( 'Everything', 'buddypress' ); ?></option>
+				<option value="-1"><?php _e( '&mdash; Everything &mdash;', 'buddypress' ); ?></option>
 				<option value="activity_update"><?php _e( 'Updates', 'buddypress' ); ?></option>
 
 				<?php if ( bp_is_active( 'forums' ) ) : ?>
diff --git a/wp-content/plugins/buddypress/bp-themes/bp-default/members/single/activity.php b/wp-content/plugins/buddypress/bp-themes/bp-default/members/single/activity.php
index 869df39af..15bafb511 100644
--- a/wp-content/plugins/buddypress/bp-themes/bp-default/members/single/activity.php
+++ b/wp-content/plugins/buddypress/bp-themes/bp-default/members/single/activity.php
@@ -17,7 +17,7 @@
 		<li id="activity-filter-select" class="last">
 			<label for="activity-filter-by"><?php _e( 'Show:', 'buddypress' ); ?></label>
 			<select id="activity-filter-by">
-				<option value="-1"><?php _e( 'Everything', 'buddypress' ); ?></option>
+				<option value="-1"><?php _e( '&mdash; Everything &mdash;', 'buddypress' ); ?></option>
 				<option value="activity_update"><?php _e( 'Updates', 'buddypress' ); ?></option>
 
 				<?php
diff --git a/wp-content/plugins/buddypress/bp-themes/bp-default/rtl.css b/wp-content/plugins/buddypress/bp-themes/bp-default/rtl.css
index 44c840330..13b352f25 100644
--- a/wp-content/plugins/buddypress/bp-themes/bp-default/rtl.css
+++ b/wp-content/plugins/buddypress/bp-themes/bp-default/rtl.css
@@ -2,7 +2,7 @@
  * Theme Name: BuddyPress Default
  * Theme URI: http://buddypress.org/extend/themes/
  * Description: Clean and stylish, BuddyPress Default lets you build a social network straight out of the box. Make it yours with a custom menu, header image, and background. Along with five widgetized areas (one in the sidebar, four in the footer), BP-Default supports featured images (as custom header images on posts and pages) and is furnished with an optional one-column page template that removes the sidebar, and a stylesheet for the admin Visual Editor.
- * Version: 2.0.2
+ * Version: 2.1
  * Author: the BuddyPress team
  * Author URI: http://buddypress.org
  * License: GNU General Public License
diff --git a/wp-content/plugins/buddypress/bp-themes/bp-default/screenshot.png b/wp-content/plugins/buddypress/bp-themes/bp-default/screenshot.png
index 68928f7a41d1e89b7d6d3c5370813e4342832631..80f0a243634da20617b2c8142020c7eabdf1728b 100644
GIT binary patch
literal 36065
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

literal 36316
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
JWt~$(698swhQ|N^

diff --git a/wp-content/plugins/buddypress/bp-themes/bp-default/style.css b/wp-content/plugins/buddypress/bp-themes/bp-default/style.css
index c889e2608..576f6237c 100644
--- a/wp-content/plugins/buddypress/bp-themes/bp-default/style.css
+++ b/wp-content/plugins/buddypress/bp-themes/bp-default/style.css
@@ -2,7 +2,7 @@
  * Theme Name: BuddyPress Default
  * Theme URI: http://buddypress.org/extend/themes/
  * Description: [NOTE: except for security issues, BuddyPress Default is no longer being actively maintained by the BuddyPress team.] Clean and stylish, BuddyPress Default lets you build a social network straight out of the box. Make it yours with a custom menu, header image, and background. Along with five widgetized areas (one in the sidebar, four in the footer), BP-Default supports featured images (as custom header images on posts and pages) and is furnished with an optional one-column page template that removes the sidebar, and a stylesheet for the admin Visual Editor.
- * Version: 2.0.2
+ * Version: 2.1
  * Author: the BuddyPress team
  * Author URI: http://buddypress.org
  * License: GNU General Public License
diff --git a/wp-content/plugins/buddypress/bp-xprofile/admin/css/admin-rtl.css b/wp-content/plugins/buddypress/bp-xprofile/admin/css/admin-rtl.css
new file mode 100644
index 000000000..9730a358a
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-xprofile/admin/css/admin-rtl.css
@@ -0,0 +1,251 @@
+/* Profile field group main admin page */
+#tabs-bottom {
+	background: #f5f5f5;
+	height: 32px;
+	border: 1px solid #dedede;
+}
+
+#tabs {
+	position: relative;
+	}
+	p.nofields {
+		margin: 20px 20px 0;
+	}
+
+	/* Field group tabs */
+	ul#field-group-tabs {
+		float: right;
+		padding: 0 15px 0 0;
+		margin: 0;
+		display: none;
+	}
+		ul#field-group-tabs li {
+			float: right;
+			margin-left: 8px;
+			margin-bottom: -1px;
+		}
+		ul#field-group-tabs li.ui-state-hover a {
+			background-color: #fafafa;
+		}
+		ul#field-group-tabs li.ui-state-hover a.ui-tab {
+			border-color: #dedede #dedede #f5f5f5 #dedede;
+			color: #d54e21;
+		}
+		ul#field-group-tabs li.ui-state-acceptable a.ui-tab {
+			border-color: #5a5 #5a5 #ccc #5a5;
+			color: #8a8;
+			background-color: #efe;
+		}
+		ul#field-group-tabs li.drop-candidate a.ui-tab {
+			background-color: #ffc;
+			border-color: #aa5 #aa5 #ccc #aa5;
+			color: #aa8;
+		}
+		ul#field-group-tabs li a.ui-tab {
+			font-size: 14px;
+			display: block;
+			margin-top: 3px;
+			padding: 5px 10px 5px;
+			border: 1px solid #dedede;
+			border-bottom: none;
+			background-color: #f5f5f5;
+			text-decoration: none;
+			color: #000;
+			outline: none;
+		}
+
+		/* Selected tab */
+		ul#field-group-tabs li.ui-state-active a.ui-tab {
+			background-color: #f5f5f5;
+			margin-top: -1px;
+			padding: 7px 10px 7px;
+			border: 1px solid #dedede;
+			border-bottom: 1px solid transparent;
+			color: #000;
+		}
+
+	/* Toolbar */
+	.tab-toolbar {
+		background: #f5f5f5;
+		border-width: 0 0 1px;
+		border-color: #dedede;
+		border-style: solid;
+		padding: 10px;
+	}
+
+	.bp-option a.delete,
+	.field-wrapper a.deletion,
+	.tab-toolbar a.deletion {
+		color: #f00;
+		border-bottom: 1px solid #f00;
+		text-decoration: none;
+		padding: 0;
+	}
+
+	div.delete-button {
+		float: left;
+		line-height: 28px;
+		margin: 0 0 0 10px;
+	}
+
+	div.tab-wrapper {
+		background-color: #fff;
+		border: 1px solid #dedede;
+		border-bottom: none;
+		clear: right;
+		padding-bottom: 20px;
+	}
+
+	.tab-wrapper fieldset {
+		position: relative;
+		cursor: default;
+	}
+		.tab-wrapper fieldset legend {
+			font-weight: bold;
+		}
+	.tab-wrapper .xprofile-field {
+		position: relative;
+	}
+	.tab-wrapper fieldset fieldset {
+		position: relative;
+		border: 1px solid #ddd;
+		margin: 20px 20px 0;
+		cursor: move;
+		background: #fafafa;
+		padding: 10px 0 0 ;
+	}
+	.tab-wrapper fieldset fieldset legend {
+		position: absolute;
+		top: 10px;
+		right: 10px;
+		padding: 0;
+	}
+		.field-group fieldset:hover {
+			border-color: #999;
+		}
+		fieldset div.field-wrapper {
+			padding: 25px 10px 10px;
+		}
+	fieldset.radio div div label,
+	fieldset.checkbox div label {
+		margin-left: 20px;
+	}
+
+	fieldset.clear-value {
+		margin-right: 10px;
+	}
+	.field-group div.actions {
+		float: none;
+		border-top: 1px solid #ddd;
+		margin: 10px 0 0;
+		padding-top: 10px;
+	}
+	.field-group div.actions a,
+	.field-group div.actions button,
+	.field-group div.actions input {
+		float: none;
+	}
+	.field-group fieldset:hover div.actions {
+		display: block;
+	}
+
+	.bp-options-box .ui-sortable-placeholder,
+	#field-group-tabs .ui-sortable-placeholder,
+	.field-group fieldset.ui-sortable-placeholder {
+		border: 1px dashed #999;
+		background-color: #fff;
+		visibility: visible !important;
+	}
+
+	#field-group-tabs .ui-sortable-placeholder {
+		background: transparent;
+		border-bottom: none;
+		margin: -1px 0 -1px 6px;
+	}
+
+	ul.forTab {
+		list-style: none;
+		padding: 0;
+		margin: 0 1em 0 0;
+	}
+		ul.forTab li {
+			margin: 0 0 1em 0;
+		}
+			ul.forTab li label {
+				display: block;
+			}
+
+			ul.forTab li input {
+				font-size: 1.4em;
+			}
+
+	p.success { background: green;}
+	p.err {
+		border-top: 2px solid red;
+		border-bottom: 2px solid red;
+		color: red;
+		padding: 5px 0;
+		width: 40%;
+	}
+
+	span.desc, span.signup-description {
+		display: block;
+		font-size: 11px;
+		color: #555;
+	}
+
+ul.multi-checkbox {
+	margin: 0 0 0 5px;
+	padding: .5em .9em;
+	height: 10em;
+	overflow: auto;
+	list-style: none;
+	border: solid 1px #ccc;
+	width: 90%;
+}
+
+ul.multi-checkbox li {
+	padding: 0;
+	margin: 0;
+}
+
+div.bp-option {
+	background: #fafafa;
+	border: 1px solid #dfdfdf;
+	margin: 10px 0;
+	padding: 10px 5px;
+}
+
+div.bp-option:hover {
+	border: 1px solid #999;
+}
+
+.bp-option-icon {
+	font: normal 20px/1 'dashicons';
+	speak: none;
+	display: inline-block;
+	padding: 0 2px 0 0;
+	top: 5px;
+	position: relative;
+	vertical-align: top;
+	-webkit-font-smoothing: antialiased;
+	-moz-osx-font-smoothing: grayscale;
+	text-decoration: none !important;
+	color: #888;
+}
+
+div.bp-option .grabber:before {
+	content: "\f329";
+}
+
+th a {
+	background: #fff;
+	padding: 2px 5px;
+	top: -2px;
+}
+
+textarea#description,
+textarea#group_description {
+	border: 1px solid #ddd;
+	width: 100%;
+}
diff --git a/wp-content/plugins/buddypress/bp-xprofile/admin/css/admin-rtl.min.css b/wp-content/plugins/buddypress/bp-xprofile/admin/css/admin-rtl.min.css
new file mode 100644
index 000000000..f2f3a2f5d
--- /dev/null
+++ b/wp-content/plugins/buddypress/bp-xprofile/admin/css/admin-rtl.min.css
@@ -0,0 +1,2 @@
+/*! buddypress - v2.1.0 - 2014-10-06 9:39:09 PM UTC - https://wordpress.org/plugins/buddypress/ */
+#tabs-bottom{background:#f5f5f5;height:32px;border:1px solid #dedede}#tabs{position:relative}p.nofields{margin:20px 20px 0}ul#field-group-tabs{float:right;padding:0 15px 0 0;margin:0;display:none}ul#field-group-tabs li{float:right;margin-left:8px;margin-bottom:-1px}ul#field-group-tabs li.ui-state-hover a{background-color:#fafafa}ul#field-group-tabs li.ui-state-hover a.ui-tab{border-color:#dedede #dedede #f5f5f5;color:#d54e21}ul#field-group-tabs li.ui-state-acceptable a.ui-tab{border-color:#5a5 #5a5 #ccc;color:#8a8;background-color:#efe}ul#field-group-tabs li.drop-candidate a.ui-tab{background-color:#ffc;border-color:#aa5 #aa5 #ccc;color:#aa8}ul#field-group-tabs li a.ui-tab{font-size:14px;display:block;margin-top:3px;padding:5px 10px;border:1px solid #dedede;border-bottom:none;background-color:#f5f5f5;text-decoration:none;color:#000;outline:0}ul#field-group-tabs li.ui-state-active a.ui-tab{background-color:#f5f5f5;margin-top:-1px;padding:7px 10px;border:1px solid #dedede;border-bottom:1px solid transparent;color:#000}.tab-toolbar{background:#f5f5f5;border-width:0 0 1px;border-color:#dedede;border-style:solid;padding:10px}.bp-option a.delete,.field-wrapper a.deletion,.tab-toolbar a.deletion{color:red;border-bottom:1px solid red;text-decoration:none;padding:0}div.delete-button{float:left;line-height:28px;margin:0 0 0 10px}div.tab-wrapper{background-color:#fff;border:1px solid #dedede;border-bottom:none;clear:right;padding-bottom:20px}.tab-wrapper fieldset{position:relative;cursor:default}.tab-wrapper fieldset legend{font-weight:700}.tab-wrapper .xprofile-field{position:relative}.tab-wrapper fieldset fieldset{position:relative;border:1px solid #ddd;margin:20px 20px 0;cursor:move;background:#fafafa;padding:10px 0 0}.tab-wrapper fieldset fieldset legend{position:absolute;top:10px;right:10px;padding:0}.field-group fieldset:hover{border-color:#999}fieldset div.field-wrapper{padding:25px 10px 10px}fieldset.checkbox div label,fieldset.radio div div label{margin-left:20px}fieldset.clear-value{margin-right:10px}.field-group div.actions{float:none;border-top:1px solid #ddd;margin:10px 0 0;padding-top:10px}.field-group div.actions a,.field-group div.actions button,.field-group div.actions input{float:none}.field-group fieldset:hover div.actions{display:block}#field-group-tabs .ui-sortable-placeholder,.bp-options-box .ui-sortable-placeholder,.field-group fieldset.ui-sortable-placeholder{border:1px dashed #999;background-color:#fff;visibility:visible!important}#field-group-tabs .ui-sortable-placeholder{background:0 0;border-bottom:none;margin:-1px 0 -1px 6px}ul.forTab{list-style:none;padding:0;margin:0 1em 0 0}ul.forTab li{margin:0 0 1em}ul.forTab li label{display:block}ul.forTab li input{font-size:1.4em}p.success{background:green}p.err{border-top:2px solid red;border-bottom:2px solid red;color:red;padding:5px 0;width:40%}span.desc,span.signup-description{display:block;font-size:11px;color:#555}ul.multi-checkbox{margin:0 0 0 5px;padding:.5em .9em;height:10em;overflow:auto;list-style:none;border:1px solid #ccc;width:90%}ul.multi-checkbox li{padding:0;margin:0}div.bp-option{background:#fafafa;border:1px solid #dfdfdf;margin:10px 0;padding:10px 5px}div.bp-option:hover{border:1px solid #999}.bp-option-icon{font:400 20px/1 dashicons;speak:none;display:inline-block;padding:0 2px 0 0;top:5px;position:relative;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important;color:#888}div.bp-option .grabber:before{content:"\f329"}th a{background:#fff;padding:2px 5px;top:-2px}textarea#description,textarea#group_description{border:1px solid #ddd;width:100%}
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-xprofile/admin/css/admin.css b/wp-content/plugins/buddypress/bp-xprofile/admin/css/admin.css
index f5a509829..5be6ad24a 100644
--- a/wp-content/plugins/buddypress/bp-xprofile/admin/css/admin.css
+++ b/wp-content/plugins/buddypress/bp-xprofile/admin/css/admin.css
@@ -1,16 +1,15 @@
 /* Profile field group main admin page */
 #tabs-bottom {
-	background: #f9f9f9;
+	background: #f5f5f5;
 	height: 32px;
-	border: 1px solid #dfdfdf;
-	border-radius: 0 0 3px 3px;
+	border: 1px solid #dedede;
 }
 
 #tabs {
 	position: relative;
 	}
 	p.nofields {
-		margin-top: 20px;
+		margin: 20px 20px 0;
 	}
 
 	/* Field group tabs */
@@ -22,15 +21,14 @@
 	}
 		ul#field-group-tabs li {
 			float: left;
-			margin-bottom: -1px;
-			background-color: transparent;
 			margin-right: 8px;
+			margin-bottom: -1px;
 		}
 		ul#field-group-tabs li.ui-state-hover a {
 			background-color: #fafafa;
 		}
 		ul#field-group-tabs li.ui-state-hover a.ui-tab {
-			border-color: #dfdfdf #dfdfdf #f9f9f9 #dfdfdf;
+			border-color: #dedede #dedede #f5f5f5 #dedede;
 			color: #d54e21;
 		}
 		ul#field-group-tabs li.ui-state-acceptable a.ui-tab {
@@ -38,9 +36,6 @@
 			color: #8a8;
 			background-color: #efe;
 		}
-			ul#field-group-tabs li.ui-state-active.ui-state-acceptable a.ui-tab {
-				background-color: #f9f9f9;
-			}
 		ul#field-group-tabs li.drop-candidate a.ui-tab {
 			background-color: #ffc;
 			border-color: #aa5 #aa5 #ccc #aa5;
@@ -51,64 +46,61 @@
 			display: block;
 			margin-top: 3px;
 			padding: 5px 10px 5px;
-			border: 1px solid #dfdfdf;
+			border: 1px solid #dedede;
 			border-bottom: none;
-			border-radius: 3px 3px 0 0;
+			background-color: #f5f5f5;
 			text-decoration: none;
-			color: #aaa;
+			color: #000;
+			outline: none;
 		}
 
 		/* Selected tab */
 		ul#field-group-tabs li.ui-state-active a.ui-tab {
-			background-color: #f9f9f9;
+			background-color: #f5f5f5;
 			margin-top: -1px;
 			padding: 7px 10px 7px;
-			border: 1px solid #dfdfdf;
+			border: 1px solid #dedede;
 			border-bottom: 1px solid transparent;
 			color: #000;
 		}
 
 	/* Toolbar */
 	.tab-toolbar {
-		background: #f9f9f9;
-		border-width: 1px 1px 0;
-		border-radius: 3px 3px 0 0;
-		margin: -20px -21px 20px -21px;
-		clear: left;
+		background: #f5f5f5;
+		border-width: 0 0 1px;
+		border-color: #dedede;
+		border-style: solid;
 		padding: 10px;
-		border: 1px solid #dfdfdf;
 	}
 
+	.bp-option a.delete,
 	.field-wrapper a.deletion,
 	.tab-toolbar a.deletion {
 		color: #f00;
 		border-bottom: 1px solid #f00;
-		font-size: 12px;
 		text-decoration: none;
 		padding: 0;
-		margin: -2px 0 0 5px;
 	}
-		
-	div.tab-toolbar a.button-primary {
-		color: #fff !important; /* Overriding a WP !important */
+
+	div.delete-button {
+		float: right;
+		line-height: 28px;
+		margin: 0 10px 0 0;
 	}
 
 	div.tab-wrapper {
 		background-color: #fff;
+		border: 1px solid #dedede;
+		border-bottom: none;
 		clear: left;
-		padding: 20px;
-		border-left: 1px solid #ccc;
-		border-right: 1px solid #ccc;
-		border-radius: 3px 3px 0 0;
+		padding-bottom: 20px;
 	}
 
 	.tab-wrapper fieldset {
 		position: relative;
-		cursor: default !important;
-		background: inherit;
-		}
+		cursor: default;
+	}
 		.tab-wrapper fieldset legend {
-			padding-bottom: 15px;
 			font-weight: bold;
 		}
 	.tab-wrapper .xprofile-field {
@@ -117,31 +109,22 @@
 	.tab-wrapper fieldset fieldset {
 		position: relative;
 		border: 1px solid #ddd;
-		border-radius: 3px;
-		margin: 10px 0 0 0;
-		cursor: move !important;
-		background: #f9f9f9;
+		margin: 20px 20px 0;
+		cursor: move;
+		background: #fafafa;
+		padding: 10px 0 0 ;
 	}
 	.tab-wrapper fieldset fieldset legend {
-		position: absolute !important;
-		top: 0;
-		left: 0;
-		width: 80%;
-		padding: 30px;
-	}
-	.tab-wrapper fieldset fieldset legend span {
 		position: absolute;
-		top: 6px;
+		top: 10px;
 		left: 10px;
-		font-weight: bold;
-		width: 100%;
+		padding: 0;
 	}
 		.field-group fieldset:hover {
-			background-color: #fafafa;
-			border-color: #ccc;
+			border-color: #999;
 		}
 		fieldset div.field-wrapper {
-			padding: 40px 10px 10px;
+			padding: 25px 10px 10px;
 		}
 	fieldset.radio div div label,
 	fieldset.checkbox div label {
@@ -154,7 +137,7 @@
 	.field-group div.actions {
 		float: none;
 		border-top: 1px solid #ddd;
-		margin: 20px 0 0;
+		margin: 10px 0 0;
 		padding-top: 10px;
 	}
 	.field-group div.actions a,
@@ -165,12 +148,21 @@
 	.field-group fieldset:hover div.actions {
 		display: block;
 	}
+
+	.bp-options-box .ui-sortable-placeholder,
+	#field-group-tabs .ui-sortable-placeholder,
 	.field-group fieldset.ui-sortable-placeholder {
 		border: 1px dashed #999;
-		background-color: #eee;
+		background-color: #fff;
 		visibility: visible !important;
 	}
 
+	#field-group-tabs .ui-sortable-placeholder {
+		background: transparent;
+		border-bottom: none;
+		margin: -1px 6px -1px 0;
+	}
+
 	ul.forTab {
 		list-style: none;
 		padding: 0;
@@ -179,7 +171,6 @@
 		ul.forTab li {
 			margin: 0 0 1em 0;
 		}
-
 			ul.forTab li label {
 				display: block;
 			}
@@ -203,11 +194,6 @@
 		color: #555;
 	}
 
-	select.multi-select {
-		width:90%;
-		height:10em !important;
-	}
-
 ul.multi-checkbox {
 	margin: 0 5px 0 0;
 	padding: .5em .9em;
@@ -223,20 +209,38 @@ ul.multi-checkbox li {
 	margin: 0;
 }
 
-div.options-box {
-	margin-left: 20px !important;
-	margin-right: 10px !important;
-	border-left: 4px solid #EAF3FA;
-	padding-left: 15px;
+div.bp-option {
+	background: #fafafa;
+	border: 1px solid #dfdfdf;
+	margin: 10px 0;
+	padding: 10px 5px;
+}
+
+div.bp-option:hover {
+	border: 1px solid #999;
+}
+
+.bp-option-icon {
+	font: normal 20px/1 'dashicons';
+	speak: none;
+	display: inline-block;
+	padding: 0 0 0 2px;
+	top: 5px;
+	position: relative;
+	vertical-align: top;
+	-webkit-font-smoothing: antialiased;
+	-moz-osx-font-smoothing: grayscale;
+	text-decoration: none !important;
+	color: #888;
+}
+
+div.bp-option .grabber:before {
+	content: "\f329";
 }
 
 th a {
 	background: #fff;
 	padding: 2px 5px;
-	-moz-border-radius: 3px;
-	-khtml-border-radius: 3px;
-	-webkit-border-radius: 3px;
-	border-radius: 3px;
 	top: -2px;
 }
 
@@ -245,4 +249,3 @@ textarea#group_description {
 	border: 1px solid #ddd;
 	width: 100%;
 }
-
diff --git a/wp-content/plugins/buddypress/bp-xprofile/admin/css/admin.min.css b/wp-content/plugins/buddypress/bp-xprofile/admin/css/admin.min.css
index 51d81e254..716777cd5 100644
--- a/wp-content/plugins/buddypress/bp-xprofile/admin/css/admin.min.css
+++ b/wp-content/plugins/buddypress/bp-xprofile/admin/css/admin.min.css
@@ -1 +1,2 @@
-#tabs-bottom{background:#f9f9f9;height:32px;border:1px solid #dfdfdf;border-radius:0 0 3px 3px}#tabs{position:relative}p.nofields{margin-top:20px}ul#field-group-tabs{float:left;padding:0 0 0 15px;margin:0;display:none}ul#field-group-tabs li{float:left;margin-bottom:-1px;background-color:transparent;margin-right:8px}ul#field-group-tabs li.ui-state-hover a{background-color:#fafafa}ul#field-group-tabs li.ui-state-hover a.ui-tab{border-color:#dfdfdf #dfdfdf #f9f9f9 #dfdfdf;color:#d54e21}ul#field-group-tabs li.ui-state-acceptable a.ui-tab{border-color:#5a5 #5a5 #ccc #5a5;color:#8a8;background-color:#efe}ul#field-group-tabs li.ui-state-active.ui-state-acceptable a.ui-tab{background-color:#f9f9f9}ul#field-group-tabs li.drop-candidate a.ui-tab{background-color:#ffc;border-color:#aa5 #aa5 #ccc #aa5;color:#aa8}ul#field-group-tabs li a.ui-tab{font-size:14px;display:block;margin-top:3px;padding:5px 10px 5px;border:1px solid #dfdfdf;border-bottom:0;border-radius:3px 3px 0 0;text-decoration:none;color:#aaa}ul#field-group-tabs li.ui-state-active a.ui-tab{background-color:#f9f9f9;margin-top:-1px;padding:7px 10px 7px;border:1px solid #dfdfdf;border-bottom:1px solid transparent;color:#000}.tab-toolbar{background:#f9f9f9;border-width:1px 1px 0;border-radius:3px 3px 0 0;margin:-20px -21px 20px -21px;clear:left;padding:10px;border:1px solid #dfdfdf}.field-wrapper a.deletion,.tab-toolbar a.deletion{color:red;border-bottom:1px solid red;font-size:12px;text-decoration:none;padding:0;margin:-2px 0 0 5px}div.tab-toolbar a.button-primary{color:#fff !important}div.tab-wrapper{background-color:#fff;clear:left;padding:20px;border-left:1px solid #ccc;border-right:1px solid #ccc;border-radius:3px 3px 0 0}.tab-wrapper fieldset{position:relative;cursor:default !important;background:inherit}.tab-wrapper fieldset legend{padding-bottom:15px;font-weight:bold}.tab-wrapper .xprofile-field{position:relative}.tab-wrapper fieldset fieldset{position:relative;border:1px solid #ddd;border-radius:3px;margin:10px 0 0 0;cursor:move !important;background:#f9f9f9}.tab-wrapper fieldset fieldset legend{position:absolute !important;top:0;left:0;width:80%;padding:30px}.tab-wrapper fieldset fieldset legend span{position:absolute;top:6px;left:10px;font-weight:bold;width:100%}.field-group fieldset:hover{background-color:#fafafa;border-color:#ccc}fieldset div.field-wrapper{padding:40px 10px 10px}fieldset.radio div div label,fieldset.checkbox div label{margin-right:20px}fieldset.clear-value{margin-left:10px}.field-group div.actions{float:none;border-top:1px solid #ddd;margin:20px 0 0;padding-top:10px}.field-group div.actions a,.field-group div.actions button,.field-group div.actions input{float:none}.field-group fieldset:hover div.actions{display:block}.field-group fieldset.ui-sortable-placeholder{border:1px dashed #999;background-color:#eee;visibility:visible !important}ul.forTab{list-style:none;padding:0;margin:0 0 0 1em}ul.forTab li{margin:0 0 1em 0}ul.forTab li label{display:block}ul.forTab li input{font-size:1.4em}p.success{background:green}p.err{border-top:2px solid red;border-bottom:2px solid red;color:red;padding:5px 0;width:40%}span.desc,span.signup-description{display:block;font-size:11px;color:#555}select.multi-select{width:90%;height:10em !important}ul.multi-checkbox{margin:0 5px 0 0;padding:.5em .9em;height:10em;overflow:auto;list-style:none;border:solid 1px #ccc;width:90%}ul.multi-checkbox li{padding:0;margin:0}div.options-box{margin-left:20px !important;margin-right:10px !important;border-left:4px solid #eaf3fa;padding-left:15px}th a{background:#fff;padding:2px 5px;-moz-border-radius:3px;-khtml-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;top:-2px}textarea#description,textarea#group_description{border:1px solid #ddd;width:100%}
\ No newline at end of file
+/*! buddypress - v2.1.0 - 2014-10-06 9:39:09 PM UTC - https://wordpress.org/plugins/buddypress/ */
+#tabs-bottom{background:#f5f5f5;height:32px;border:1px solid #dedede}#tabs{position:relative}p.nofields{margin:20px 20px 0}ul#field-group-tabs{float:left;padding:0 0 0 15px;margin:0;display:none}ul#field-group-tabs li{float:left;margin-right:8px;margin-bottom:-1px}ul#field-group-tabs li.ui-state-hover a{background-color:#fafafa}ul#field-group-tabs li.ui-state-hover a.ui-tab{border-color:#dedede #dedede #f5f5f5;color:#d54e21}ul#field-group-tabs li.ui-state-acceptable a.ui-tab{border-color:#5a5 #5a5 #ccc;color:#8a8;background-color:#efe}ul#field-group-tabs li.drop-candidate a.ui-tab{background-color:#ffc;border-color:#aa5 #aa5 #ccc;color:#aa8}ul#field-group-tabs li a.ui-tab{font-size:14px;display:block;margin-top:3px;padding:5px 10px;border:1px solid #dedede;border-bottom:none;background-color:#f5f5f5;text-decoration:none;color:#000;outline:0}ul#field-group-tabs li.ui-state-active a.ui-tab{background-color:#f5f5f5;margin-top:-1px;padding:7px 10px;border:1px solid #dedede;border-bottom:1px solid transparent;color:#000}.tab-toolbar{background:#f5f5f5;border-width:0 0 1px;border-color:#dedede;border-style:solid;padding:10px}.bp-option a.delete,.field-wrapper a.deletion,.tab-toolbar a.deletion{color:red;border-bottom:1px solid red;text-decoration:none;padding:0}div.delete-button{float:right;line-height:28px;margin:0 10px 0 0}div.tab-wrapper{background-color:#fff;border:1px solid #dedede;border-bottom:none;clear:left;padding-bottom:20px}.tab-wrapper fieldset{position:relative;cursor:default}.tab-wrapper fieldset legend{font-weight:700}.tab-wrapper .xprofile-field{position:relative}.tab-wrapper fieldset fieldset{position:relative;border:1px solid #ddd;margin:20px 20px 0;cursor:move;background:#fafafa;padding:10px 0 0}.tab-wrapper fieldset fieldset legend{position:absolute;top:10px;left:10px;padding:0}.field-group fieldset:hover{border-color:#999}fieldset div.field-wrapper{padding:25px 10px 10px}fieldset.checkbox div label,fieldset.radio div div label{margin-right:20px}fieldset.clear-value{margin-left:10px}.field-group div.actions{float:none;border-top:1px solid #ddd;margin:10px 0 0;padding-top:10px}.field-group div.actions a,.field-group div.actions button,.field-group div.actions input{float:none}.field-group fieldset:hover div.actions{display:block}#field-group-tabs .ui-sortable-placeholder,.bp-options-box .ui-sortable-placeholder,.field-group fieldset.ui-sortable-placeholder{border:1px dashed #999;background-color:#fff;visibility:visible!important}#field-group-tabs .ui-sortable-placeholder{background:0 0;border-bottom:none;margin:-1px 6px -1px 0}ul.forTab{list-style:none;padding:0;margin:0 0 0 1em}ul.forTab li{margin:0 0 1em}ul.forTab li label{display:block}ul.forTab li input{font-size:1.4em}p.success{background:green}p.err{border-top:2px solid red;border-bottom:2px solid red;color:red;padding:5px 0;width:40%}span.desc,span.signup-description{display:block;font-size:11px;color:#555}ul.multi-checkbox{margin:0 5px 0 0;padding:.5em .9em;height:10em;overflow:auto;list-style:none;border:1px solid #ccc;width:90%}ul.multi-checkbox li{padding:0;margin:0}div.bp-option{background:#fafafa;border:1px solid #dfdfdf;margin:10px 0;padding:10px 5px}div.bp-option:hover{border:1px solid #999}.bp-option-icon{font:400 20px/1 dashicons;speak:none;display:inline-block;padding:0 0 0 2px;top:5px;position:relative;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important;color:#888}div.bp-option .grabber:before{content:"\f329"}th a{background:#fff;padding:2px 5px;top:-2px}textarea#description,textarea#group_description{border:1px solid #ddd;width:100%}
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-xprofile/admin/js/admin.js b/wp-content/plugins/buddypress/bp-xprofile/admin/js/admin.js
index 436bd19cc..c92248c08 100644
--- a/wp-content/plugins/buddypress/bp-xprofile/admin/js/admin.js
+++ b/wp-content/plugins/buddypress/bp-xprofile/admin/js/admin.js
@@ -1,24 +1,35 @@
+/* exported add_option, show_options, hide, fixHelper */
+/* jshint scripturl: true */
+/* global XProfileAdmin */
+
+/**
+ * Add option for the forWhat type.
+ *
+ * @param {string} forWhat Value of the field to show options for
+ */
 function add_option(forWhat) {
-	var holder    = document.getElementById(forWhat + "_more");
-	var theId     = document.getElementById(forWhat + '_option_number').value;
-	var newDiv    = document.createElement('p');
-	var newOption = document.createElement('input');
-	var span      = document.createElement( 'span' );
-	var txt       = document.createTextNode( "\u00A0\u039E\u00A0" );
-	var isDefault = document.createElement( 'input' );
-	var span1     = document.createElement( 'span' );
-	var txt1      = document.createTextNode( " Default Value " );
+	var holder       = document.getElementById(forWhat + '_more'),
+		theId        = document.getElementById(forWhat + '_option_number').value,
+		newDiv       = document.createElement( 'div' ),
+		grabber      = document.createElement( 'span' ),
+		newOption    = document.createElement( 'input' ),
+		label        = document.createElement( 'label' ),
+		isDefault    = document.createElement( 'input' ),
+		txt1         = document.createTextNode( 'Default Value' ),
+		toDeleteText = document.createTextNode( 'Delete' ),
+		toDeleteWrap = document.createElement( 'div' ),
+		toDelete     = document.createElement( 'a' );
 
 	newDiv.setAttribute('id', forWhat + '_div' + theId);
-	newDiv.setAttribute('class', 'sortable');
+	newDiv.setAttribute('class', 'bp-option sortable');
+
+	grabber.setAttribute( 'class', 'bp-option-icon grabber');
 
 	newOption.setAttribute( 'type', 'text' );
 	newOption.setAttribute( 'name', forWhat + '_option[' + theId + ']' );
 	newOption.setAttribute( 'id', forWhat + '_option' + theId );
 
-	span.appendChild( txt );
-
-	if ( forWhat == 'checkbox' || forWhat == 'multiselectbox' ) {
+	if ( forWhat === 'checkbox' || forWhat === 'multiselectbox' ) {
 		isDefault.setAttribute( 'type', 'checkbox' );
 		isDefault.setAttribute( 'name', 'isDefault_' + forWhat + '_option[' + theId + ']' );
 	} else {
@@ -28,59 +39,60 @@ function add_option(forWhat) {
 
 	isDefault.setAttribute( 'value', theId );
 
-	span1.appendChild( txt1 );
-
-	var toDelete     = document.createElement( 'a' );
-	var toDeleteText = document.createTextNode( '[x]' );
-
-	toDelete.setAttribute( 'href', "javascript:hide('" + forWhat + '_div' + theId + "')" );
+	toDelete.setAttribute( 'href', 'javascript:hide("' + forWhat + '_div' + theId + '")' );
 	toDelete.setAttribute( 'class', 'delete' );
 	toDelete.appendChild( toDeleteText );
 
-	newDiv.appendChild( span );
+	toDeleteWrap.setAttribute( 'class', 'delete-button' );
+	toDeleteWrap.appendChild( toDelete );
+
+	label.appendChild( document.createTextNode( ' ' ) );
+	label.appendChild( isDefault );
+	label.appendChild( document.createTextNode( ' ' ) );
+	label.appendChild( txt1 );
+	label.appendChild( document.createTextNode( ' ' ) );
+
+	newDiv.appendChild( grabber );
+	newDiv.appendChild( document.createTextNode( ' ' ) );
 	newDiv.appendChild( newOption );
-	newDiv.appendChild( document.createTextNode( " " ) );
-	newDiv.appendChild( isDefault );
-	newDiv.appendChild( span1 );
-	newDiv.appendChild( toDelete );
+	newDiv.appendChild( label );
+	newDiv.appendChild( toDeleteWrap );
 	holder.appendChild( newDiv );
 
 	// re-initialize the sorable ui
 	enableSortableFieldOptions( forWhat );
 
 	// set focus on newly created element
-	document.getElementById(forWhat + "_option" + theId).focus();
+	document.getElementById(forWhat + '_option' + theId).focus();
 
 	theId++;
 
-	document.getElementById(forWhat + "_option_number").value = theId;
+	document.getElementById(forWhat + '_option_number').value = theId;
 }
 
-function show_options(forWhat) {
-	document.getElementById( 'radio'          ).style.display = 'none';
-	document.getElementById( 'selectbox'      ).style.display = 'none';
-	document.getElementById( 'multiselectbox' ).style.display = 'none';
-	document.getElementById( 'checkbox'       ).style.display = 'none';
-
-	if ( forWhat == 'radio' )
-		document.getElementById( 'radio' ).style.display = "";
-
-	if ( forWhat == 'selectbox' )
-		document.getElementById( 'selectbox' ).style.display = "";
-
-	if ( forWhat == 'multiselectbox' )
-		document.getElementById( 'multiselectbox' ).style.display = "";
+/**
+ * Hide all "options" sections, and show the options section for the forWhat type.
+ *
+ * @param {string} forWhat Value of the field to show options for
+ */
+function show_options( forWhat ) {
+	for ( var i = 0; i < XProfileAdmin.supports_options_field_types.length; i++ ) {
+		document.getElementById( XProfileAdmin.supports_options_field_types[i] ).style.display = 'none';
+	}
 
-	if ( forWhat == 'checkbox' )
-		document.getElementById( 'checkbox' ).style.display = "";
+	if ( XProfileAdmin.supports_options_field_types.indexOf( forWhat ) >= 0 ) {
+		document.getElementById( forWhat ).style.display = '';
+	}
 }
 
 function hide( id ) {
-	if ( !document.getElementById( id ) ) return false;
+	if ( !document.getElementById( id ) ) {
+		return false;
+	}
 
-	document.getElementById( id ).style.display = "none";
+	document.getElementById( id ).style.display = 'none';
 	// the field id is [fieldtype]option[iterator] and not [fieldtype]div[iterator]
-	field_id = id.replace( 'div', 'option' ); 
+	var field_id = id.replace( 'div', 'option' );
 	document.getElementById( field_id ).value = '';
 }
 
@@ -91,22 +103,20 @@ var fixHelper = function(e, ui) {
 	return ui;
 };
 
-function enableSortableFieldOptions( forWhat ) {
-	if ( jQuery( '#' + forWhat + ' p.sortable' ).length > 1 ) {
-		jQuery( '.bp-options-box' ).sortable( {
-			items: 'p.sortable',
-			tolerance: 'pointer',
-			axis: 'y',
-			handle: 'span'
-		});
+function enableSortableFieldOptions() {
+	jQuery( '.bp-options-box' ).sortable( {
+		cursor: 'move',
+		items: 'div.sortable',
+		tolerance: 'intersect',
+		axis: 'y'
+	});
 
-		jQuery( '.sortable span' ).css( 'cursor', 'move' );
-	}
+	jQuery( '.sortable, .sortable span' ).css( 'cursor', 'move' );
 }
 
 function destroySortableFieldOptions() {
 	jQuery( '.bp-options-box' ).sortable( 'destroy' );
-	jQuery( '.sortable span' ).css( 'cursor', 'default' );
+	jQuery( '.sortable, .sortable span' ).css( 'cursor', 'default' );
 }
 
 jQuery( document ).ready( function() {
@@ -125,12 +135,12 @@ jQuery( document ).ready( function() {
 			'_wpnonce': jQuery('input#_wpnonce').val(),
 			'option_id': theId
 		},
-		function( response ) {} );
+		function() {} );
 	} );
 
-	//
+	// Set up the sort order change actions
 	jQuery( '[id^="sort_order_"]' ).change(function() {
-		if ( jQuery( this ).val() != 'custom' ) {
+		if ( jQuery( this ).val() !== 'custom' ) {
 			destroySortableFieldOptions();
 		} else {
 			enableSortableFieldOptions( jQuery('#fieldtype :selected').val() );
@@ -144,9 +154,9 @@ jQuery( document ).ready( function() {
 	jQuery( 'ul#field-group-tabs' ).sortable( {
 		cursor: 'move',
 		axis: 'x',
-		opacity: 0.6,
+		opacity: 1,
 		items: 'li',
-		tolerance: 'pointer',
+		tolerance: 'intersect',
 
 		update: function() {
 			jQuery.post( ajaxurl, {
@@ -155,16 +165,16 @@ jQuery( document ).ready( function() {
 				'_wpnonce_reorder_groups': jQuery( 'input#_wpnonce_reorder_groups' ).val(),
 				'group_order': jQuery( this ).sortable( 'serialize' )
 			},
-			function( response ) {} );
+			function() {} );
 		}
 	}).disableSelection();
 
 	// Allow reordering of fields within groups
 	jQuery( 'fieldset.field-group' ).sortable({
 		cursor: 'move',
-		opacity: 0.3,
+		opacity: 1,
 		items: 'fieldset',
-		tolerance: 'pointer',
+		tolerance: 'ponter',
 
 		update: function() {
 			jQuery.post( ajaxurl, {
@@ -174,7 +184,7 @@ jQuery( document ).ready( function() {
 				'field_order': jQuery(this).sortable( 'serialize' ),
 				'field_group_id': jQuery(this).attr( 'id' )
 			},
-			function( response ) {} );
+			function() {} );
 		}
 	})
 
@@ -188,8 +198,9 @@ jQuery( document ).ready( function() {
 	enableSortableFieldOptions( jQuery('#fieldtype :selected').val() );
 
 	// tabs init with a custom tab template and an "add" callback filling in the content
-	var $tab_items;
-	var $tabs = jQuery( '#tabs' ).tabs();
+	var $tab_items,
+		$tabs = jQuery( '#tabs' ).tabs();
+
 	set_tab_items( $tabs );
 
 	function set_tab_items( $tabs ) {
@@ -202,11 +213,8 @@ jQuery( document ).ready( function() {
 
 			// When field is dropped on tab
 			drop: function( ev, ui ) {
-				// The tab
-				var $item = jQuery(this);
-
-				// The tab body
-				var $list = jQuery( $item.find( 'a' ).attr( 'href' ) ).find( '.connectedSortable' );
+				var $item = jQuery(this), // The tab
+					$list = jQuery( $item.find( 'a' ).attr( 'href' ) ).find( '.connectedSortable' ); // The tab body
 
 				// Remove helper class
 				jQuery($item).removeClass( 'drop-candidate' );
@@ -218,7 +226,7 @@ jQuery( document ).ready( function() {
 					$tabs.tabs( 'option', 'active', $tab_items.index( $item ) );
 
 					// Show new placement
-					jQuery(this).appendTo($list).show( 'slow' ).animate( {opacity: "1"}, 500 );
+					jQuery(this).appendTo($list).show( 'slow' ).animate( {opacity: '1'}, 500 );
 
 					// Refresh $list variable
 					$list = jQuery( $item.find( 'a' ).attr( 'href' ) ).find( '.connectedSortable' );
@@ -228,17 +236,17 @@ jQuery( document ).ready( function() {
 					jQuery.post( ajaxurl, {
 						action: 'xprofile_reorder_fields',
 						'cookie': encodeURIComponent(document.cookie),
-						'_wpnonce_reorder_fields': jQuery( "input#_wpnonce_reorder_fields" ).val(),
+						'_wpnonce_reorder_fields': jQuery( 'input#_wpnonce_reorder_fields' ).val(),
 						'field_order': jQuery( $list ).sortable( 'serialize' ),
 						'field_group_id': jQuery( $list ).attr( 'id' )
 					},
-					function( response ) {} );
+					function() {} );
 				});
 			},
-			over: function( event, ui ) {
+			over: function() {
 				jQuery(this).addClass( 'drop-candidate' );
 			},
-			out: function( event, ui ) {
+			out: function() {
 				jQuery(this).removeClass( 'drop-candidate' );
 			}
 		});
diff --git a/wp-content/plugins/buddypress/bp-xprofile/admin/js/admin.min.js b/wp-content/plugins/buddypress/bp-xprofile/admin/js/admin.min.js
index 17a825f49..56750e181 100644
--- a/wp-content/plugins/buddypress/bp-xprofile/admin/js/admin.min.js
+++ b/wp-content/plugins/buddypress/bp-xprofile/admin/js/admin.min.js
@@ -1 +1,2 @@
-function add_option(g){var j=document.getElementById(g+"_more");var l=document.getElementById(g+"_option_number").value;var a=document.createElement("p");var h=document.createElement("input");var k=document.createElement("span");var e=document.createTextNode("\u00A0\u039E\u00A0");var b=document.createElement("input");var f=document.createElement("span");var d=document.createTextNode(" Default Value ");a.setAttribute("id",g+"_div"+l);a.setAttribute("class","sortable");h.setAttribute("type","text");h.setAttribute("name",g+"_option["+l+"]");h.setAttribute("id",g+"_option"+l);k.appendChild(e);if(g=="checkbox"||g=="multiselectbox"){b.setAttribute("type","checkbox");b.setAttribute("name","isDefault_"+g+"_option["+l+"]")}else{b.setAttribute("type","radio");b.setAttribute("name","isDefault_"+g+"_option")}b.setAttribute("value",l);f.appendChild(d);var c=document.createElement("a");var i=document.createTextNode("[x]");c.setAttribute("href","javascript:hide('"+g+"_div"+l+"')");c.setAttribute("class","delete");c.appendChild(i);a.appendChild(k);a.appendChild(h);a.appendChild(document.createTextNode(" "));a.appendChild(b);a.appendChild(f);a.appendChild(c);j.appendChild(a);enableSortableFieldOptions(g);document.getElementById(g+"_option"+l).focus();l++;document.getElementById(g+"_option_number").value=l}function show_options(a){document.getElementById("radio").style.display="none";document.getElementById("selectbox").style.display="none";document.getElementById("multiselectbox").style.display="none";document.getElementById("checkbox").style.display="none";if(a=="radio"){document.getElementById("radio").style.display=""}if(a=="selectbox"){document.getElementById("selectbox").style.display=""}if(a=="multiselectbox"){document.getElementById("multiselectbox").style.display=""}if(a=="checkbox"){document.getElementById("checkbox").style.display=""}}function hide(a){if(!document.getElementById(a)){return false}document.getElementById(a).style.display="none";field_id=a.replace("div","option");document.getElementById(field_id).value=""}var fixHelper=function(b,a){a.children().each(function(){jQuery(this).width(jQuery(this).width())});return a};function enableSortableFieldOptions(a){if(jQuery("#"+a+" p.sortable").length>1){jQuery(".bp-options-box").sortable({items:"p.sortable",tolerance:"pointer",axis:"y",handle:"span"});jQuery(".sortable span").css("cursor","move")}}function destroySortableFieldOptions(){jQuery(".bp-options-box").sortable("destroy");jQuery(".sortable span").css("cursor","default")}jQuery(document).ready(function(){jQuery("#bp-xprofile-add-field #title").focus();jQuery("a.ajax-option-delete").on("click",function(){var d=this.id.split("-");d=d[1];jQuery.post(ajaxurl,{action:"xprofile_delete_option",cookie:encodeURIComponent(document.cookie),_wpnonce:jQuery("input#_wpnonce").val(),option_id:d},function(e){})});jQuery('[id^="sort_order_"]').change(function(){if(jQuery(this).val()!="custom"){destroySortableFieldOptions()}else{enableSortableFieldOptions(jQuery("#fieldtype :selected").val())}});jQuery("ul#field-group-tabs").show();jQuery("ul#field-group-tabs").sortable({cursor:"move",axis:"x",opacity:0.6,items:"li",tolerance:"pointer",update:function(){jQuery.post(ajaxurl,{action:"xprofile_reorder_groups",cookie:encodeURIComponent(document.cookie),_wpnonce_reorder_groups:jQuery("input#_wpnonce_reorder_groups").val(),group_order:jQuery(this).sortable("serialize")},function(d){})}}).disableSelection();jQuery("fieldset.field-group").sortable({cursor:"move",opacity:0.3,items:"fieldset",tolerance:"pointer",update:function(){jQuery.post(ajaxurl,{action:"xprofile_reorder_fields",cookie:encodeURIComponent(document.cookie),_wpnonce_reorder_fields:jQuery("input#_wpnonce_reorder_fields").val(),field_order:jQuery(this).sortable("serialize"),field_group_id:jQuery(this).attr("id")},function(d){})}}).disableSelection().css("cursor","move");enableSortableFieldOptions(jQuery("#fieldtype :selected").val());var b;var a=jQuery("#tabs").tabs();c(a);function c(d){b=jQuery("ul:first li",d).droppable({accept:".connectedSortable fieldset",hoverClass:"ui-state-hover",activeClass:"ui-state-acceptable",touch:"pointer",tolerance:"pointer",drop:function(g,h){var e=jQuery(this);var f=jQuery(e.find("a").attr("href")).find(".connectedSortable");jQuery(e).removeClass("drop-candidate");h.draggable.hide("slow",function(){d.tabs("option","active",b.index(e));jQuery(this).appendTo(f).show("slow").animate({opacity:"1"},500);f=jQuery(e.find("a").attr("href")).find(".connectedSortable");jQuery(f).find("p.nofields").hide("slow");jQuery.post(ajaxurl,{action:"xprofile_reorder_fields",cookie:encodeURIComponent(document.cookie),_wpnonce_reorder_fields:jQuery("input#_wpnonce_reorder_fields").val(),field_order:jQuery(f).sortable("serialize"),field_group_id:jQuery(f).attr("id")},function(i){})})},over:function(e,f){jQuery(this).addClass("drop-candidate")},out:function(e,f){jQuery(this).removeClass("drop-candidate")}})}});
\ No newline at end of file
+/*! buddypress - v2.1.0 - 2014-10-06 9:39:07 PM UTC - https://wordpress.org/plugins/buddypress/ */
+function add_option(a){var b=document.getElementById(a+"_more"),c=document.getElementById(a+"_option_number").value,d=document.createElement("div"),e=document.createElement("span"),f=document.createElement("input"),g=document.createElement("label"),h=document.createElement("input"),i=document.createTextNode("Default Value"),j=document.createTextNode("Delete"),k=document.createElement("div"),l=document.createElement("a");d.setAttribute("id",a+"_div"+c),d.setAttribute("class","bp-option sortable"),e.setAttribute("class","bp-option-icon grabber"),f.setAttribute("type","text"),f.setAttribute("name",a+"_option["+c+"]"),f.setAttribute("id",a+"_option"+c),"checkbox"===a||"multiselectbox"===a?(h.setAttribute("type","checkbox"),h.setAttribute("name","isDefault_"+a+"_option["+c+"]")):(h.setAttribute("type","radio"),h.setAttribute("name","isDefault_"+a+"_option")),h.setAttribute("value",c),l.setAttribute("href",'javascript:hide("'+a+"_div"+c+'")'),l.setAttribute("class","delete"),l.appendChild(j),k.setAttribute("class","delete-button"),k.appendChild(l),g.appendChild(document.createTextNode(" ")),g.appendChild(h),g.appendChild(document.createTextNode(" ")),g.appendChild(i),g.appendChild(document.createTextNode(" ")),d.appendChild(e),d.appendChild(document.createTextNode(" ")),d.appendChild(f),d.appendChild(g),d.appendChild(k),b.appendChild(d),enableSortableFieldOptions(a),document.getElementById(a+"_option"+c).focus(),c++,document.getElementById(a+"_option_number").value=c}function show_options(a){for(var b=0;b<XProfileAdmin.supports_options_field_types.length;b++)document.getElementById(XProfileAdmin.supports_options_field_types[b]).style.display="none";XProfileAdmin.supports_options_field_types.indexOf(a)>=0&&(document.getElementById(a).style.display="")}function hide(a){if(!document.getElementById(a))return!1;document.getElementById(a).style.display="none";var b=a.replace("div","option");document.getElementById(b).value=""}function enableSortableFieldOptions(){jQuery(".bp-options-box").sortable({cursor:"move",items:"div.sortable",tolerance:"intersect",axis:"y"}),jQuery(".sortable, .sortable span").css("cursor","move")}function destroySortableFieldOptions(){jQuery(".bp-options-box").sortable("destroy"),jQuery(".sortable, .sortable span").css("cursor","default")}var fixHelper=function(a,b){return b.children().each(function(){jQuery(this).width(jQuery(this).width())}),b};jQuery(document).ready(function(){function a(a){b=jQuery("ul:first li",a).droppable({accept:".connectedSortable fieldset",hoverClass:"ui-state-hover",activeClass:"ui-state-acceptable",touch:"pointer",tolerance:"pointer",drop:function(c,d){var e=jQuery(this),f=jQuery(e.find("a").attr("href")).find(".connectedSortable");jQuery(e).removeClass("drop-candidate"),d.draggable.hide("slow",function(){a.tabs("option","active",b.index(e)),jQuery(this).appendTo(f).show("slow").animate({opacity:"1"},500),f=jQuery(e.find("a").attr("href")).find(".connectedSortable"),jQuery(f).find("p.nofields").hide("slow"),jQuery.post(ajaxurl,{action:"xprofile_reorder_fields",cookie:encodeURIComponent(document.cookie),_wpnonce_reorder_fields:jQuery("input#_wpnonce_reorder_fields").val(),field_order:jQuery(f).sortable("serialize"),field_group_id:jQuery(f).attr("id")},function(){})})},over:function(){jQuery(this).addClass("drop-candidate")},out:function(){jQuery(this).removeClass("drop-candidate")}})}jQuery("#bp-xprofile-add-field #title").focus(),jQuery("a.ajax-option-delete").on("click",function(){var a=this.id.split("-");a=a[1],jQuery.post(ajaxurl,{action:"xprofile_delete_option",cookie:encodeURIComponent(document.cookie),_wpnonce:jQuery("input#_wpnonce").val(),option_id:a},function(){})}),jQuery('[id^="sort_order_"]').change(function(){"custom"!==jQuery(this).val()?destroySortableFieldOptions():enableSortableFieldOptions(jQuery("#fieldtype :selected").val())}),jQuery("ul#field-group-tabs").show(),jQuery("ul#field-group-tabs").sortable({cursor:"move",axis:"x",opacity:1,items:"li",tolerance:"intersect",update:function(){jQuery.post(ajaxurl,{action:"xprofile_reorder_groups",cookie:encodeURIComponent(document.cookie),_wpnonce_reorder_groups:jQuery("input#_wpnonce_reorder_groups").val(),group_order:jQuery(this).sortable("serialize")},function(){})}}).disableSelection(),jQuery("fieldset.field-group").sortable({cursor:"move",opacity:1,items:"fieldset",tolerance:"ponter",update:function(){jQuery.post(ajaxurl,{action:"xprofile_reorder_fields",cookie:encodeURIComponent(document.cookie),_wpnonce_reorder_fields:jQuery("input#_wpnonce_reorder_fields").val(),field_order:jQuery(this).sortable("serialize"),field_group_id:jQuery(this).attr("id")},function(){})}}).disableSelection().css("cursor","move"),enableSortableFieldOptions(jQuery("#fieldtype :selected").val());var b,c=jQuery("#tabs").tabs();a(c)});
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-xprofile/bp-xprofile-actions.php b/wp-content/plugins/buddypress/bp-xprofile/bp-xprofile-actions.php
index d4fb12076..d45211e20 100644
--- a/wp-content/plugins/buddypress/bp-xprofile/bp-xprofile-actions.php
+++ b/wp-content/plugins/buddypress/bp-xprofile/bp-xprofile-actions.php
@@ -36,9 +36,9 @@ function xprofile_action_delete_avatar() {
 		return false;
 
 	if ( bp_core_delete_existing_avatar( array( 'item_id' => bp_displayed_user_id() ) ) )
-		bp_core_add_message( __( 'Your avatar was deleted successfully!', 'buddypress' ) );
+		bp_core_add_message( __( 'Your profile photo was deleted successfully!', 'buddypress' ) );
 	else
-		bp_core_add_message( __( 'There was a problem deleting that avatar, please try again.', 'buddypress' ), 'error' );
+		bp_core_add_message( __( 'There was a problem deleting your profile photo; please try again.', 'buddypress' ), 'error' );
 
 	bp_core_redirect( wp_get_referer() );
 }
@@ -85,6 +85,17 @@ function bp_xprofile_action_settings() {
 		// Get the POST'ed field ID's
 		$posted_field_ids = explode( ',', $_POST['field_ids'] );
 
+		// Backward compatibility: a bug in BP 2.0 caused only a single
+		// group's field IDs to be submitted. Look for values submitted
+		// in the POST request that may not appear in 'field_ids', and
+		// add them to the list of IDs to save.
+		foreach ( $_POST as $posted_key => $posted_value ) {
+			preg_match( '/^field_([0-9]+)_visibility$/', $posted_key, $matches );
+			if ( ! empty( $matches[1] ) && ! in_array( $matches[1], $posted_field_ids ) ) {
+				$posted_field_ids[] = $matches[1];
+			}
+		}
+
 		// Save the visibility settings
 		foreach ( $posted_field_ids as $field_id ) {
 
@@ -105,4 +116,4 @@ function bp_xprofile_action_settings() {
 	// Redirect to the root domain
 	bp_core_redirect( bp_displayed_user_domain() . bp_get_settings_slug() . '/profile' );
 }
-add_action( 'bp_actions', 'bp_xprofile_action_settings' );
\ No newline at end of file
+add_action( 'bp_actions', 'bp_xprofile_action_settings' );
diff --git a/wp-content/plugins/buddypress/bp-xprofile/bp-xprofile-activity.php b/wp-content/plugins/buddypress/bp-xprofile/bp-xprofile-activity.php
index 23b9dc27c..82c147a0b 100644
--- a/wp-content/plugins/buddypress/bp-xprofile/bp-xprofile-activity.php
+++ b/wp-content/plugins/buddypress/bp-xprofile/bp-xprofile-activity.php
@@ -3,8 +3,8 @@
 /**
  * BuddyPress XProfile Activity & Notification Functions
  *
- * These functions handle the recording, deleting and formatting of activity items and
- * notifications for the user and for this specific component.
+ * These functions handle the recording, deleting and formatting of activity
+ * items and notifications for the user and for this specific component.
  *
  * @package BuddyPress
  * @subpackage XProfileActivity
@@ -13,32 +13,45 @@
 // Exit if accessed directly
 if ( !defined( 'ABSPATH' ) ) exit;
 
+/**
+ * Register the activity actions for the Extended Profile component
+ *
+ * @since BuddyPress (1.0.0)
+ *
+ * @uses bp_activity_set_action() To setup the individual actions
+ */
 function xprofile_register_activity_actions() {
-	global $bp;
 
 	// Register the activity stream actions for this component
 	bp_activity_set_action(
 		// older avatar activity items use 'profile' for component
 		// see r4273
 		'profile',
-
 		'new_avatar',
 		__( 'Member changed profile picture', 'buddypress' ),
-		'bp_xprofile_format_activity_action_new_avatar'
+		'bp_xprofile_format_activity_action_new_avatar',
+		__( 'Updated Profile Photos', 'buddypress' )
 	);
 
+	// Get the profile component ID
+	$profile_id = buddypress()->profile->id;
+
 	bp_activity_set_action(
-		$bp->profile->id,
+		$profile_id,
 		'new_member',
 		__( 'New member registered', 'buddypress' ),
-		'bp_xprofile_format_activity_action_new_member'
+		'bp_xprofile_format_activity_action_new_member',
+		__( 'New Members', 'buddypress' ),
+		array( 'activity' )
 	);
 
 	bp_activity_set_action(
-		$bp->profile->id,
+		$profile_id,
 		'updated_profile',
 		__( 'Updated Profile', 'buddypress' ),
-		'bp_xprofile_format_activity_action_updated_profile'
+		'bp_xprofile_format_activity_action_updated_profile',
+		__( 'Profile Updates', 'buddypress' ),
+		array( 'activity' )
 	);
 
 	do_action( 'xprofile_register_activity_actions' );
@@ -97,6 +110,7 @@ function bp_xprofile_format_activity_action_new_member( $action, $activity ) {
  * @return string
  */
 function bp_xprofile_format_activity_action_updated_profile( $action, $activity ) {
+
 	// Note for translators: The natural phrasing in English, "Joe updated
 	// his profile", requires that we know Joe's gender, which we don't. If
 	// your language doesn't have this restriction, feel free to use a more
@@ -111,105 +125,107 @@ function bp_xprofile_format_activity_action_updated_profile( $action, $activity
  * Records activity for the logged in user within the profile component so that
  * it will show in the users activity stream (if installed)
  *
+ * @since BuddyPress (1.0.0)
+ *
  * @package BuddyPress
  * @subpackage XProfileActivity
  * @param string $args String containing all variables used after extract() call
- * @global $bp The global BuddyPress settings variable created in bp_core_current_times()
  * @uses bp_activity_add() Adds an entry to the activity component tables for a specific activity
  */
 function xprofile_record_activity( $args = '' ) {
 
-	if ( !bp_is_active( 'activity' ) )
+	// Bail if activity component is not active
+	if ( ! bp_is_active( 'activity' ) ) {
 		return false;
+	}
 
-	global $bp;
-
-	$defaults = array (
+	// Parse the arguments
+	$r = bp_parse_args( $args, array(
 		'user_id'           => bp_loggedin_user_id(),
 		'action'            => '',
 		'content'           => '',
 		'primary_link'      => '',
-		'component'         => $bp->profile->id,
+		'component'         => buddypress()->profile->id,
 		'type'              => false,
 		'item_id'           => false,
 		'secondary_item_id' => false,
 		'recorded_time'     => bp_core_current_time(),
 		'hide_sitewide'     => false
-	);
-
-	$r = wp_parse_args( $args, $defaults );
-	extract( $r, EXTR_SKIP );
-
-	return bp_activity_add( array(
-		'user_id'           => $user_id,
-		'action'            => $action,
-		'content'           => $content,
-		'primary_link'      => $primary_link,
-		'component'         => $component,
-		'type'              => $type,
-		'item_id'           => $item_id,
-		'secondary_item_id' => $secondary_item_id,
-		'recorded_time'     => $recorded_time,
-		'hide_sitewide'     => $hide_sitewide
 	) );
+
+	return bp_activity_add( $r );
 }
 
 /**
- * Deletes activity for a user within the profile component so that
- * it will be removed from the users activity stream and sitewide stream (if installed)
+ * Deletes activity for a user within the profile component so that it will be
+ * removed from the users activity stream and sitewide stream (if installed)
+ *
+ * @since BuddyPress (1.0.0)
  *
  * @package BuddyPress XProfile
  * @param string $args Containing all variables used after extract() call
- * @global BuddyPress $bp The one true BuddyPress instance
- * @uses bp_activity_delete() Deletes an entry to the activity component tables for a specific activity
+ * @uses bp_activity_delete() Deletes an entry to the activity component tables
+ *                            for a specific activity
  */
 function xprofile_delete_activity( $args = '' ) {
 
-	if ( ! bp_is_active( 'activity' ) )
+	// Bail if activity component is not active
+	if ( ! bp_is_active( 'activity' ) ) {
 		return false;
+	}
 
-	global $bp;
-
-	extract( $args );
+	// Parse the arguments
+	$r = bp_parse_args( $args, array(
+		'component' => buddypress()->profile->id
+	), 'xprofile_delete_activity' );
 
-	bp_activity_delete_by_item_id( array(
-		'item_id'           => $item_id,
-		'component'         => $bp->profile->id,
-		'type'              => $type,
-		'user_id'           => $user_id,
-		'secondary_item_id' => $secondary_item_id
-	) );
+	// Delete the activity item
+	bp_activity_delete_by_item_id( $r );
 }
 
+/**
+ * Register an activity action for the Extended Profiles component
+ *
+ * @since BuddyPress (1.0.0)
+ *
+ * @param string $key
+ * @param string $value
+ * @return bool True if success, false on failure
+ */
 function xprofile_register_activity_action( $key, $value ) {
-	global $bp;
 
-	if ( !bp_is_active( 'activity' ) )
+	// Bail if activity component is not active
+	if ( ! bp_is_active( 'activity' ) ) {
 		return false;
+	}
 
-	return apply_filters( 'xprofile_register_activity_action', bp_activity_set_action( $bp->profile->id, $key, $value ), $key, $value );
+	return apply_filters( 'xprofile_register_activity_action', bp_activity_set_action( buddypress()->profile->id, $key, $value ), $key, $value );
 }
 
 /**
  * Adds an activity stream item when a user has uploaded a new avatar.
  *
+ * @since BuddyPress (1.0.0)
+ *
  * @package BuddyPress XProfile
- * @global BuddyPress $bp The one true BuddyPress instance
- * @uses bp_activity_add() Adds an entry to the activity component tables for a specific activity
+ * @uses bp_activity_add() Adds an entry to the activity component tables for a
+ *                         specific activity
  */
 function bp_xprofile_new_avatar_activity() {
 
-	if ( !bp_is_active( 'activity' ) )
+	// Bail if activity component is not active
+	if ( ! bp_is_active( 'activity' ) ) {
 		return false;
+	}
 
+	// Allow user ID to be filtered
 	$user_id = apply_filters( 'bp_xprofile_new_avatar_user_id', bp_displayed_user_id() );
 
-	$userlink = bp_core_get_userlink( $user_id );
-
+	// Add the activity
 	bp_activity_add( array(
-		'user_id' => $user_id,
+		'user_id'   => $user_id,
 		'component' => 'profile',
-		'type' => 'new_avatar'
+		'type'      => 'new_avatar'
 	) );
 }
 add_action( 'xprofile_avatar_uploaded', 'bp_xprofile_new_avatar_activity' );
@@ -229,12 +245,14 @@ add_action( 'xprofile_avatar_uploaded', 'bp_xprofile_new_avatar_activity' );
  *        levels.
  * @return bool True on success, false on failure.
  */
-function bp_xprofile_updated_profile_activity( $user_id, $field_ids, $errors, $old_values = array(), $new_values = array() ) {
+function bp_xprofile_updated_profile_activity( $user_id, $field_ids = array(), $errors = false, $old_values = array(), $new_values = array() ) {
+
 	// If there were errors, don't post
 	if ( ! empty( $errors ) ) {
 		return false;
 	}
 
+	// Bail if activity component is not active
 	if ( ! bp_is_active( 'activity' ) ) {
 		return false;
 	}
@@ -243,12 +261,10 @@ function bp_xprofile_updated_profile_activity( $user_id, $field_ids, $errors, $o
 	// related solely to non-public fields
 	$public_changes = false;
 	foreach ( $new_values as $field_id => $new_value ) {
-		$old_value            = isset( $old_values[ $field_id ] ) ? $old_values[ $field_id ] : '';
-		$old_value_value      = isset( $old_value['value'] ) ? $old_value['value'] : '';
-		$old_value_visibility = isset( $old_value['visibility'] ) ? $old_value['visibility'] : '';
+		$old_value = isset( $old_values[ $field_id ] ) ? $old_values[ $field_id ] : '';
 
 		// Don't register changes to private fields
-		if ( 'public' !== $new_value['visibility'] ) {
+		if ( empty( $new_value['visibility'] ) || ( 'public' !== $new_value['visibility'] ) ) {
 			continue;
 		}
 
@@ -262,13 +278,14 @@ function bp_xprofile_updated_profile_activity( $user_id, $field_ids, $errors, $o
 		break;
 	}
 
-	if ( ! $public_changes ) {
+	// Bail if no public changes
+	if ( empty( $public_changes ) ) {
 		return false;
 	}
 
 	// Throttle to one activity of this type per 2 hours
 	$existing = bp_activity_get( array(
-		'max' => 1,
+		'max'    => 1,
 		'filter' => array(
 			'user_id' => $user_id,
 			'object'  => buddypress()->profile->id,
@@ -276,32 +293,27 @@ function bp_xprofile_updated_profile_activity( $user_id, $field_ids, $errors, $o
 		),
 	) );
 
-	if ( empty( $existing['activities'] ) ) {
-		$throttle = false;
-	} else {
-		// Default throttle time is 2 hours. Filter to change (in seconds)
-		$throttle_period = apply_filters( 'bp_xprofile_updated_profile_activity_throttle_time', 60 * 60 * 2 );
-		$then = strtotime( $existing['activities'][0]->date_recorded );
-		$now  = strtotime( bp_core_current_time() );
+	// Default throttle time is 2 hours. Filter to change (in seconds)
+	if ( ! empty( $existing['activities'] ) ) {
+		$throttle_period = apply_filters( 'bp_xprofile_updated_profile_activity_throttle_time', HOUR_IN_SECONDS * 2 );
+		$then            = strtotime( $existing['activities'][0]->date_recorded );
+		$now             = strtotime( bp_core_current_time() );
 
-		$throttle = ( $now - $then ) < $throttle_period;
-	}
-
-	if ( $throttle ) {
-		return false;
+		// Bail if throttled
+		if ( ( $now - $then ) < $throttle_period ) {
+			return false;
+		}
 	}
 
 	// If we've reached this point, assemble and post the activity item
 	$profile_link = trailingslashit( bp_core_get_user_domain( $user_id ) . buddypress()->profile->slug );
 
-	$retval = xprofile_record_activity( array(
+	return (bool) xprofile_record_activity( array(
 		'user_id'      => $user_id,
 		'primary_link' => $profile_link,
 		'component'    => buddypress()->profile->id,
 		'type'         => 'updated_profile',
 	) );
-
-	return (bool) $retval;
 }
 add_action( 'xprofile_updated_profile', 'bp_xprofile_updated_profile_activity', 10, 5 );
 
@@ -309,6 +321,7 @@ add_action( 'xprofile_updated_profile', 'bp_xprofile_updated_profile_activity',
  * Add filters for xprofile activity types to Show dropdowns.
  *
  * @since BuddyPress (2.0.0)
+ * @todo Mark as deprecated
  */
 function xprofile_activity_filter_options() {
 	?>
@@ -317,4 +330,3 @@ function xprofile_activity_filter_options() {
 
 	<?php
 }
-add_action( 'bp_activity_filter_options', 'xprofile_activity_filter_options' );
diff --git a/wp-content/plugins/buddypress/bp-xprofile/bp-xprofile-admin.php b/wp-content/plugins/buddypress/bp-xprofile/bp-xprofile-admin.php
index 6fc4bc69e..8c907a492 100644
--- a/wp-content/plugins/buddypress/bp-xprofile/bp-xprofile-admin.php
+++ b/wp-content/plugins/buddypress/bp-xprofile/bp-xprofile-admin.php
@@ -24,7 +24,7 @@ function xprofile_add_admin_menu() {
 	if ( !bp_current_user_can( 'bp_moderate' ) )
 		return false;
 
-	add_users_page( __( 'Profile Fields', 'buddypress' ), __( 'Profile Fields', 'buddypress' ), 'manage_options', 'bp-profile-setup', 'xprofile_admin' );
+	add_users_page( _x( 'Profile Fields', 'xProfile admin page title', 'buddypress' ), _x( 'Profile Fields', 'Admin Users menu', 'buddypress' ), 'manage_options', 'bp-profile-setup', 'xprofile_admin' );
 }
 add_action( bp_core_admin_hook(), 'xprofile_add_admin_menu' );
 
@@ -36,7 +36,7 @@ function xprofile_admin( $message = '', $type = 'error' ) {
 
 	$type = preg_replace( '|[^a-z]|i', '', $type );
 
-	$groups = BP_XProfile_Group::get( array(
+	$groups = bp_xprofile_get_groups( array(
 		'fetch_fields' => true
 	) );
 
@@ -68,7 +68,7 @@ function xprofile_admin( $message = '', $type = 'error' ) {
 		<?php screen_icon( 'users' ); ?>
 
 		<h2>
-			<?php _e( 'Profile Fields', 'buddypress'); ?>
+			<?php _ex( 'Profile Fields', 'Settings page header', 'buddypress'); ?>
 			<a id="add_group" class="add-new-h2" href="users.php?page=bp-profile-setup&amp;mode=add_group"><?php _e( 'Add New Field Group', 'buddypress' ); ?></a>
 		</h2>
 
@@ -287,7 +287,7 @@ function xprofile_admin_manage_field( $group_id, $field_id = null ) {
 
 				do_action( 'xprofile_fields_saved_field', $field );
 
-				$groups = BP_XProfile_Group::get();
+				$groups = bp_xprofile_get_groups();
 				xprofile_admin( $message, $type );
 			}
 		} else {
@@ -403,7 +403,9 @@ function xprofile_admin_field( $admin_field, $admin_group, $class = '' ) {
 
 				<?php if ( $field->can_delete ) : ?>
 
-					<a class="confirm submit-delete deletion" href="users.php?page=bp-profile-setup&amp;field_id=<?php echo esc_attr( $field->id ); ?>&amp;mode=delete_field"><?php _e( 'Delete', 'buddypress' ); ?></a>
+					<div class="delete-button">
+						<a class="confirm submit-delete deletion" href="users.php?page=bp-profile-setup&amp;field_id=<?php echo esc_attr( $field->id ); ?>&amp;mode=delete_field"><?php _e( 'Delete', 'buddypress' ); ?></a>
+					</div>
 
 				<?php endif; ?>
 			</div>
@@ -484,12 +486,15 @@ class BP_XProfile_User_Admin {
 	 * @uses buddypress() to get BuddyPress main instance
 	 */
 	public static function register_xprofile_user_admin() {
-		if( ! is_admin() )
+
+		// Bail if not in admin
+		if ( ! is_admin() ) {
 			return;
+		}
 
 		$bp = buddypress();
 
-		if( empty( $bp->profile->admin ) ) {
+		if ( empty( $bp->profile->admin ) ) {
 			$bp->profile->admin = new self;
 		}
 
@@ -514,14 +519,11 @@ class BP_XProfile_User_Admin {
 	 */
 	private function setup_actions() {
 
-		/** Actions ***************************************************/
-
 		// Register the metabox in Member's community admin profile
 		add_action( 'bp_members_admin_xprofile_metabox', array( $this, 'register_metaboxes' ), 10, 3 );
 
 		// Saves the profile actions for user ( avatar, profile fields )
-		add_action( 'bp_members_admin_update_user',      array( $this, 'user_admin_load' ),    10, 4 );
-
+		add_action( 'bp_members_admin_update_user',      array( $this, 'user_admin_load'    ), 10, 4 );
 	}
 
 	/**
@@ -536,32 +538,62 @@ class BP_XProfile_User_Admin {
 	 */
 	public function register_metaboxes( $user_id = 0, $screen_id = '', $stats_metabox = null ) {
 
+		// Set the screen ID if none was passed
 		if ( empty( $screen_id ) ) {
 			$screen_id = buddypress()->members->admin->user_page;
 		}
 
+		// Setup a new metabox class if none was passed
 		if ( empty( $stats_metabox ) ) {
 			$stats_metabox = new StdClass();
 		}
 
 		// Moving the Stats Metabox
-		$stats_metabox->context = 'side';
+		$stats_metabox->context  = 'side';
 		$stats_metabox->priority = 'low';
 
 		// Each Group of fields will have his own metabox
-		if ( false == bp_is_user_spammer( $user_id ) && bp_has_profile( array( 'fetch_fields' => false ) ) ) {
+		$profile_args = array(
+			'fetch_fields' => false,
+			'user_id'      => $user_id,
+		);
+
+		if ( ! bp_is_user_spammer( $user_id ) && bp_has_profile( $profile_args ) ) {
+
+			// Loop through field groups and add a metabox for each one
 			while ( bp_profile_groups() ) : bp_the_profile_group();
-				add_meta_box( 'bp_xprofile_user_admin_fields_' . sanitize_key( bp_get_the_profile_group_slug() ), esc_html( bp_get_the_profile_group_name() ), array( &$this, 'user_admin_profile_metaboxes' ), $screen_id, 'normal', 'core', array( 'profile_group_id' => absint( bp_get_the_profile_group_id() ) ) );
+				add_meta_box(
+					'bp_xprofile_user_admin_fields_' . sanitize_key( bp_get_the_profile_group_slug() ),
+					esc_html( bp_get_the_profile_group_name() ),
+					array( $this, 'user_admin_profile_metaboxes' ),
+					$screen_id,
+					'normal',
+					'core',
+					array( 'profile_group_id' => absint( bp_get_the_profile_group_id() ) )
+				);
 			endwhile;
 
-		// if a user has been mark as a spammer, remove BP data
+		// If member is already a spammer, show a generic metabox
 		} else {
-			add_meta_box( 'bp_xprofile_user_admin_empty_profile', _x( 'User marked as a spammer', 'xprofile user-admin edit screen', 'buddypress' ), array( &$this, 'user_admin_spammer_metabox' ), $screen_id, 'normal', 'core' );
+			add_meta_box(
+				'bp_xprofile_user_admin_empty_profile',
+				_x( 'User marked as a spammer', 'xprofile user-admin edit screen', 'buddypress' ),
+				array( $this, 'user_admin_spammer_metabox' ),
+				$screen_id,
+				'normal',
+				'core'
+			);
 		}
 
 		// Avatar Metabox
-		add_meta_box( 'bp_xprofile_user_admin_avatar',  _x( 'Avatar', 'xprofile user-admin edit screen', 'buddypress' ), array( &$this, 'user_admin_avatar_metabox' ), $screen_id, 'side', 'low' );
-
+		add_meta_box(
+			'bp_xprofile_user_admin_avatar',
+			_x( 'Profile Photo', 'xprofile user-admin edit screen', 'buddypress' ),
+			array( $this, 'user_admin_avatar_metabox' ),
+			$screen_id,
+			'side',
+			'low'
+		);
 	}
 
 	/**
@@ -576,7 +608,7 @@ class BP_XProfile_User_Admin {
 	public function user_admin_load( $doaction = '', $user_id = 0, $request = array(), $redirect_to = '' ) {
 
 		// Eventually delete avatar
-		if ( 'delete_avatar' == $doaction ) {
+		if ( 'delete_avatar' === $doaction ) {
 
 			check_admin_referer( 'delete_avatar' );
 
@@ -591,82 +623,83 @@ class BP_XProfile_User_Admin {
 			bp_core_redirect( $redirect_to );
 
 		// Update profile fields
-		} else {
-			// Check to see if any new information has been submitted
-			if ( isset( $_POST['field_ids'] ) ) {
+		} elseif ( isset( $_POST['field_ids'] ) ) {
 
-				// Check the nonce
-				check_admin_referer( 'edit-bp-profile_' . $user_id );
-
-				// Check we have field ID's
-				if ( empty( $_POST['field_ids'] ) ) {
-					$redirect_to = add_query_arg( 'error', '1', $redirect_to );
-					bp_core_redirect( $redirect_to );
-				}
+			// Check the nonce
+			check_admin_referer( 'edit-bp-profile_' . $user_id );
 
-				/**
-				 * Unlike front-end edit-fields screens, the wp-admin/profile displays all 
-				 * groups of fields on a single page, so the list of field ids is an array 
-				 * gathering for each group of fields a distinct comma separated list of ids. 
-				 * As a result, before using the wp_parse_id_list() function, we must ensure 
-				 * that these ids are "merged" into a single comma separated list.
-				 */
-				$merge_ids = join( ',', $_POST['field_ids'] );
-
-				// Explode the posted field IDs into an array so we know which fields have been submitted
-				$posted_field_ids = wp_parse_id_list( $merge_ids );
-				$is_required      = array();
-
-				// Loop through the posted fields formatting any datebox values then validate the field
-				foreach ( (array) $posted_field_ids as $field_id ) {
-					if ( ! isset( $_POST['field_' . $field_id] ) ) {
-						if ( ! empty( $_POST['field_' . $field_id . '_day'] ) && ! empty( $_POST['field_' . $field_id . '_month'] ) && ! empty( $_POST['field_' . $field_id . '_year'] ) ) {
-							// Concatenate the values
-							$date_value =   $_POST['field_' . $field_id . '_day'] . ' ' . $_POST['field_' . $field_id . '_month'] . ' ' . $_POST['field_' . $field_id . '_year'];
-
-							// Turn the concatenated value into a timestamp
-							$_POST['field_' . $field_id] = date( 'Y-m-d H:i:s', strtotime( $date_value ) );
-						}
-					}
+			// Check we have field ID's
+			if ( empty( $_POST['field_ids'] ) ) {
+				$redirect_to = add_query_arg( 'error', '1', $redirect_to );
+				bp_core_redirect( $redirect_to );
+			}
 
-					$is_required[ $field_id ] = xprofile_check_is_required_field( $field_id );
-					if ( $is_required[ $field_id ] && empty( $_POST['field_' . $field_id] ) ) {
-						$redirect_to = add_query_arg( 'error', '2', $redirect_to );
-						bp_core_redirect( $redirect_to );
+			/**
+			 * Unlike front-end edit-fields screens, the wp-admin/profile
+			 * displays all groups of fields on a single page, so the list of
+			 * field ids is an array gathering for each group of fields a
+			 * distinct comma separated list of ids.
+			 *
+			 * As a result, before using the wp_parse_id_list() function, we
+			 * must ensure that these ids are "merged" into a single comma
+			 * separated list.
+			 */
+			$merge_ids = join( ',', $_POST['field_ids'] );
+
+			// Explode the posted field IDs into an array so we know which fields have been submitted
+			$posted_field_ids = wp_parse_id_list( $merge_ids );
+			$is_required      = array();
+
+			// Loop through the posted fields formatting any datebox values then validate the field
+			foreach ( (array) $posted_field_ids as $field_id ) {
+				if ( ! isset( $_POST['field_' . $field_id ] ) ) {
+					if ( ! empty( $_POST['field_' . $field_id . '_day'] ) && ! empty( $_POST['field_' . $field_id . '_month'] ) && ! empty( $_POST['field_' . $field_id . '_year'] ) ) {
+
+						// Concatenate the values
+						$date_value =   $_POST['field_' . $field_id . '_day'] . ' ' . $_POST['field_' . $field_id . '_month'] . ' ' . $_POST['field_' . $field_id . '_year'];
+
+						// Turn the concatenated value into a timestamp
+						$_POST['field_' . $field_id] = date( 'Y-m-d H:i:s', strtotime( $date_value ) );
 					}
 				}
 
-				// Set the errors var
-				$errors = false;
+				$is_required[ $field_id ] = xprofile_check_is_required_field( $field_id );
+				if ( $is_required[ $field_id ] && empty( $_POST['field_' . $field_id ] ) ) {
+					$redirect_to = add_query_arg( 'error', '2', $redirect_to );
+					bp_core_redirect( $redirect_to );
+				}
+			}
 
-				// Now we've checked for required fields, let's save the values.
-				foreach ( (array) $posted_field_ids as $field_id ) {
+			// Set the errors var
+			$errors = false;
 
-					// Certain types of fields (checkboxes, multiselects) may come through empty. Save them as an empty array so that they don't get overwritten by the default on the next edit.
-					$value = isset( $_POST['field_' . $field_id] ) ? $_POST['field_' . $field_id] : '';
+			// Now we've checked for required fields, let's save the values.
+			foreach ( (array) $posted_field_ids as $field_id ) {
 
-					if ( ! xprofile_set_field_data( $field_id, $user_id, $value, $is_required[ $field_id ] ) ) {
-						$errors = true;
-					} else {
-						do_action( 'xprofile_profile_field_data_updated', $field_id, $value );
-					}
+				// Certain types of fields (checkboxes, multiselects) may come through empty. Save them as an empty array so that they don't get overwritten by the default on the next edit.
+				$value = isset( $_POST['field_' . $field_id] ) ? $_POST['field_' . $field_id] : '';
 
-					// Save the visibility level
-					$visibility_level = ! empty( $_POST['field_' . $field_id . '_visibility'] ) ? $_POST['field_' . $field_id . '_visibility'] : 'public';
-					xprofile_set_field_visibility_level( $field_id, $user_id, $visibility_level );
+				if ( ! xprofile_set_field_data( $field_id, $user_id, $value, $is_required[ $field_id ] ) ) {
+					$errors = true;
+				} else {
+					do_action( 'xprofile_profile_field_data_updated', $field_id, $value );
 				}
 
-				do_action( 'xprofile_updated_profile', $user_id, $posted_field_ids, $errors );
+				// Save the visibility level
+				$visibility_level = ! empty( $_POST['field_' . $field_id . '_visibility'] ) ? $_POST['field_' . $field_id . '_visibility'] : 'public';
+				xprofile_set_field_visibility_level( $field_id, $user_id, $visibility_level );
+			}
 
-				// Set the feedback messages
-				if ( ! empty( $errors ) ) {
-					$redirect_to = add_query_arg( 'error', '3', $redirect_to );
-				} else {
-					$redirect_to = add_query_arg( 'updated', '1', $redirect_to );
-				}
+			do_action( 'xprofile_updated_profile', $user_id, $posted_field_ids, $errors );
 
-				bp_core_redirect( $redirect_to );
+			// Set the feedback messages
+			if ( ! empty( $errors ) ) {
+				$redirect_to = add_query_arg( 'error',   '3', $redirect_to );
+			} else {
+				$redirect_to = add_query_arg( 'updated', '1', $redirect_to );
 			}
+
+			bp_core_redirect( $redirect_to );
 		}
 	}
 
@@ -680,6 +713,7 @@ class BP_XProfile_User_Admin {
 	 */
 	public function user_admin_profile_metaboxes( $user = null, $args = array() ) {
 
+		// Bail if no user ID
 		if ( empty( $user->ID ) ) {
 			return;
 		}
@@ -694,57 +728,73 @@ class BP_XProfile_User_Admin {
 			return;
 		}
 
-		if ( bp_has_profile( $r ) ) :
-			while ( bp_profile_groups() ) : bp_the_profile_group(); ?>
-				<input type="hidden" name="field_ids[]" id="<?php echo esc_attr( 'field_ids_' . bp_get_the_profile_group_slug() ); ?>" value="<?php echo esc_attr( bp_get_the_profile_group_field_ids() ); ?>" />
+		// Bail if no profile fields are available
+		if ( ! bp_has_profile( $r ) ) {
+			return;
+		}
+
+		// Loop through profile groups & fields
+		while ( bp_profile_groups() ) : bp_the_profile_group(); ?>
+
+			<input type="hidden" name="field_ids[]" id="<?php echo esc_attr( 'field_ids_' . bp_get_the_profile_group_slug() ); ?>" value="<?php echo esc_attr( bp_get_the_profile_group_field_ids() ); ?>" />
+
+			<?php if ( bp_get_the_profile_group_description() ) : ?>
+
+				<p class="description"><?php bp_the_profile_group_description(); ?></p>
+
+			<?php endif; ?>
 
-				<?php if ( bp_get_the_profile_group_description() ) : ?>
-					<p class="description"><?php bp_the_profile_group_description(); ?></p>
-				<?php
-				endif;
+			<?php while ( bp_profile_fields() ) : bp_the_profile_field(); ?>
 
-				while ( bp_profile_fields() ) : bp_the_profile_field(); ?>
+				<div<?php bp_field_css_class( 'bp-profile-field' ); ?>>
 
-					<div<?php bp_field_css_class( 'bp-profile-field' ); ?>>
-						<?php
-						$field_type = bp_xprofile_create_field_type( bp_get_the_profile_field_type() );
-						$field_type->edit_field_html( array( 'user_id' => $r['user_id'] ) );
+					<?php
 
-						if ( bp_get_the_profile_field_description() ) : ?>
-							<p class="description"><?php bp_the_profile_field_description(); ?></p>
-						<?php endif;
+					$field_type = bp_xprofile_create_field_type( bp_get_the_profile_field_type() );
+					$field_type->edit_field_html( array( 'user_id' => $r['user_id'] ) );
 
-						do_action( 'bp_custom_profile_edit_fields_pre_visibility' );
-						$can_change_visibility = bp_current_user_can( 'bp_xprofile_change_field_visibility' );
-						?>
+					if ( bp_get_the_profile_field_description() ) : ?>
 
-						<p class="field-visibility-settings-<?php echo $can_change_visibility ? 'toggle' : 'notoggle'; ?>" id="field-visibility-settings-toggle-<?php bp_the_profile_field_id(); ?>">
-							<?php
-							printf( __( 'This field can be seen by: <span class="%s">%s</span>', 'buddypress' ), esc_attr( 'current-visibility-level' ), bp_get_the_profile_field_visibility_level_label() );
+						<p class="description"><?php bp_the_profile_field_description(); ?></p>
 
-							if ( $can_change_visibility ) : ?>
-								 <a href="#" class="button visibility-toggle-link"><?php _e( 'Change', 'buddypress' ); ?></a>
-							<?php endif; ?>
-						</p>
+					<?php endif;
+
+					do_action( 'bp_custom_profile_edit_fields_pre_visibility' );
+
+					$can_change_visibility = bp_current_user_can( 'bp_xprofile_change_field_visibility' ); ?>
+
+					<p class="field-visibility-settings-<?php echo $can_change_visibility ? 'toggle' : 'notoggle'; ?>" id="field-visibility-settings-toggle-<?php bp_the_profile_field_id(); ?>">
+
+						<?php printf( __( 'This field can be seen by: <span class="%s">%s</span>', 'buddypress' ), esc_attr( 'current-visibility-level' ), bp_get_the_profile_field_visibility_level_label() ); ?>
 
 						<?php if ( $can_change_visibility ) : ?>
-							<div class="field-visibility-settings" id="field-visibility-settings-<?php bp_the_profile_field_id() ?>">
-								<fieldset>
-									<legend><?php _e( 'Who can see this field?', 'buddypress' ); ?></legend>
-									<?php bp_profile_visibility_radio_buttons(); ?>
-								</fieldset>
-								<a class="button field-visibility-settings-close" href="#"><?php _e( 'Close', 'buddypress' ); ?></a>
-							</div>
-						<?php endif;
 
-						do_action( 'bp_custom_profile_edit_fields' ); ?>
-					</div>
+							<a href="#" class="button visibility-toggle-link"><?php esc_html_e( 'Change', 'buddypress' ); ?></a>
+
+						<?php endif; ?>
+					</p>
 
-				<?php
-				endwhile; // bp_profile_fields()
+					<?php if ( $can_change_visibility ) : ?>
 
-			endwhile; // bp_profile_groups()
-		endif;
+						<div class="field-visibility-settings" id="field-visibility-settings-<?php bp_the_profile_field_id() ?>">
+							<fieldset>
+								<legend><?php _e( 'Who can see this field?', 'buddypress' ); ?></legend>
+
+								<?php bp_profile_visibility_radio_buttons(); ?>
+
+							</fieldset>
+							<a class="button field-visibility-settings-close" href="#"><?php esc_html_e( 'Close', 'buddypress' ); ?></a>
+						</div>
+
+					<?php endif; ?>
+
+					<?php do_action( 'bp_custom_profile_edit_fields' ); ?>
+
+				</div>
+
+			<?php endwhile; // bp_profile_fields() ?>
+
+		<?php endwhile; // bp_profile_groups
 	}
 
 	/**
@@ -756,9 +806,9 @@ class BP_XProfile_User_Admin {
 	 * @param WP_User $user The WP_User object for the user being edited.
 	 */
 	public function user_admin_spammer_metabox( $user = null ) {
-		?>
+	?>
 		<p><?php printf( __( '%s has been marked as a spammer. All BuddyPress data associated with the user has been removed', 'buddypress' ), esc_html( bp_core_get_user_displayname( $user->ID ) ) ) ;?></p>
-		<?php
+	<?php
 	}
 
 	/**
@@ -773,20 +823,16 @@ class BP_XProfile_User_Admin {
 
 		if ( empty( $user->ID ) ) {
 			return;
-		}
-
-		$args = array(
-			'item_id' => $user->ID,
-			'object'  => 'user',
-			'type'    => 'full',
-			'title'   => $user->display_name
-		);
-
-		?>
+		} ?>
 
 		<div class="avatar">
 
-			<?php echo bp_core_fetch_avatar( $args ); ?>
+			<?php echo bp_core_fetch_avatar( array(
+				'item_id' => $user->ID,
+				'object'  => 'user',
+				'type'    => 'full',
+				'title'   => $user->display_name
+			) ); ?>
 
 			<?php if ( bp_get_user_has_avatar( $user->ID ) ) :
 
@@ -795,13 +841,14 @@ class BP_XProfile_User_Admin {
 					'action'  => 'delete_avatar'
 				);
 
-				if ( ! empty( $_REQUEST['wp_http_referer'] ) )
+				if ( ! empty( $_REQUEST['wp_http_referer'] ) ) {
 					$query_args['wp_http_referer'] = urlencode( wp_unslash( $_REQUEST['wp_http_referer'] ) );
+				}
 
-					$community_url = add_query_arg( $query_args, buddypress()->members->admin->edit_profile_url );
-					$delete_link   = wp_nonce_url( $community_url, 'delete_avatar' ); ?>
+				$community_url = add_query_arg( $query_args, buddypress()->members->admin->edit_profile_url );
+				$delete_link   = wp_nonce_url( $community_url, 'delete_avatar' ); ?>
 
-				<a href="<?php echo esc_url( $delete_link ); ?>" title="<?php esc_attr_e( 'Delete Avatar', 'buddypress' ); ?>" class="bp-xprofile-avatar-user-admin"><?php esc_html_e( 'Delete Avatar', 'buddypress' ); ?></a></li>
+				<a href="<?php echo esc_url( $delete_link ); ?>" title="<?php esc_attr_e( 'Delete Profile Photo', 'buddypress' ); ?>" class="bp-xprofile-avatar-user-admin"><?php esc_html_e( 'Delete Profile Photo', 'buddypress' ); ?></a></li>
 
 			<?php endif; ?>
 
diff --git a/wp-content/plugins/buddypress/bp-xprofile/bp-xprofile-classes.php b/wp-content/plugins/buddypress/bp-xprofile/bp-xprofile-classes.php
index cfde95fa7..9a29173e7 100644
--- a/wp-content/plugins/buddypress/bp-xprofile/bp-xprofile-classes.php
+++ b/wp-content/plugins/buddypress/bp-xprofile/bp-xprofile-classes.php
@@ -108,18 +108,27 @@ class BP_XProfile_Group {
 	 * @global $wpdb WordPress DB access object.
 	 * @global BuddyPress $bp The one true BuddyPress instance
 	 *
-	 * @param array $args Takes an array of parameters:
-	 *		'profile_group_id' - Limit results to a single profile group
-	 *		'user_id' - Required if you want to load a specific user's data
-	 *		'hide_empty_groups' - Hide groups without any fields
-	 *		'hide_empty_fields' - Hide fields where the user has not provided data
-	 *		'fetch_fields' - Load each group's fields
-	 *		'fetch_field_data' - Load each field's data. Requires a user_id
-	 *		'exclude_groups' - Comma-separated list of groups to exclude
-	 *		'exclude_fields' - Comma-separated list of fields to exclude
-	 *		'update_meta_cache' - Whether to pre-fetch xprofilemeta
-	 *		   for all retrieved groups, fields, and data
-	 *
+	 * @param array $args {
+	 *	Array of optional arguments:
+	 *	@type int $profile_group_id Limit results to a single profile
+	 *	      group.
+	 *      @type int $user_id Required if you want to load a specific
+	 *            user's data. Default: displayed user's ID.
+	 *      @type bool $hide_empty_groups True to hide groups that don't
+	 *            have any fields. Default: false.
+	 *	@type bool $hide_empty_fields True to hide fields where the
+	 *	      user has not provided data. Default: false.
+	 *      @type bool $fetch_fields Whether to fetch each group's fields.
+	 *            Default: false.
+	 *      @type bool $fetch_field_data Whether to fetch data for each
+	 *            field. Requires a $user_id. Default: false.
+	 *      @type array $exclude_groups Comma-separated list or array of
+	 *            group IDs to exclude.
+	 *      @type array $exclude_fields Comma-separated list or array of
+	 *            field IDs to exclude.
+	 *      @type bool $update_meta_cache Whether to pre-fetch xprofilemeta
+	 *            for all retrieved groups, fields, and data. Default: true.
+	 * }
 	 * @return array $groups
 	 */
 	public static function get( $args = array() ) {
@@ -150,10 +159,12 @@ class BP_XProfile_Group {
 
 		$where_sql = '';
 
-		if ( !empty( $profile_group_id ) )
+		if ( ! empty( $profile_group_id ) ) {
 			$where_sql = $wpdb->prepare( 'WHERE g.id = %d', $profile_group_id );
-		elseif ( $exclude_groups )
-			$where_sql = $wpdb->prepare( "WHERE g.id NOT IN ({$exclude_groups})");
+		} else if ( $exclude_groups ) {
+			$exclude_groups = join( ',', wp_parse_id_list( $exclude_groups ) );
+			$where_sql = "WHERE g.id NOT IN ({$exclude_groups})";
+		}
 
 		if ( ! empty( $hide_empty_groups ) ) {
 			$group_ids = $wpdb->get_col( "SELECT DISTINCT g.id FROM {$bp->profile->table_name_groups} g INNER JOIN {$bp->profile->table_name_fields} f ON g.id = f.group_id {$where_sql} ORDER BY g.group_order ASC" );
@@ -225,7 +236,10 @@ class BP_XProfile_Group {
 
 					// Empty fields may contain a serialized empty array
 					$maybe_value = maybe_unserialize( $data->value );
-					if ( !empty( $maybe_value ) && false !== $key = array_search( $data->field_id, $field_ids ) ) {
+
+					// Valid field values of 0 or '0' get caught by empty(), so we have an extra check for these. See #BP5731
+					if ( ( ! empty( $maybe_value ) || '0' == $maybe_value ) && false !== $key = array_search( $data->field_id, $field_ids ) ) {
+
 						// Fields that have data get removed from the list
 						unset( $field_ids[$key] );
 					}
@@ -373,8 +387,12 @@ class BP_XProfile_Group {
 	public static function update_position( $field_group_id, $position ) {
 		global $wpdb, $bp;
 
-		if ( !is_numeric( $position ) )
+		if ( !is_numeric( $position ) ) {
 			return false;
+		}
+
+		// purge profile field group cache
+		wp_cache_delete( 'xprofile_groups_inc_empty', 'bp' );
 
 		return $wpdb->query( $wpdb->prepare( "UPDATE {$bp->profile->table_name_groups} SET group_order = %d WHERE id = %d", $position, $field_group_id ) );
 	}
@@ -481,8 +499,8 @@ class BP_XProfile_Group {
 						<div id="post-body-content">
 							<div id="titlediv">
 								<div id="titlewrap">
-									<label class="screen-reader-text" id="title-prompt-text" for=​"title">​<?php _e( 'Field Group Title', 'buddypress') ?></label>
-									<input type="text" name="group_name" id="title" value="<?php echo esc_attr( $this->name ); ?>" placeholder="<?php esc_attr_e( 'Field Group Title', 'buddypress' ); ?>" />
+									<label class="screen-reader-text" id="title-prompt-text" for="title"><?php esc_html_e( 'Field Group Title', 'buddypress') ?></label>
+									<input type="text" name="group_name" autocomplete="off" id="title" value="<?php echo esc_attr( $this->name ); ?>" placeholder="<?php echo esc_attr_x( 'Group Name', 'XProfile admin edit group', 'buddypress' ); ?>" />
 								</div>
 							</div>
 
@@ -497,11 +515,35 @@ class BP_XProfile_Group {
 						</div>
 						<div id="postbox-container-1" class="postbox-container">
 							<div id="side-sortables" class="meta-box-sortables ui-sortable">
+
+								<?php
+								/**
+								 * Fires before XProfile Group submit metabox.
+								 *
+								 * @since BuddyPress (2.1.0)
+								 *
+								 * @param BP_XProfile_Group $this Current XProfile group.
+								 */
+								do_action( 'xprofile_group_before_submitbox', $this );
+								?>
+
 								<div id="submitdiv" class="postbox">
 									<div id="handlediv"><h3 class="hndle"><?php _e( 'Save', 'buddypress' ); ?></h3></div>
 									<div class="inside">
 										<div id="submitcomment" class="submitbox">
 											<div id="major-publishing-actions">
+
+												<?php
+												/**
+												 * Fires at the beginning of the XProfile Group publishing actions section.
+												 *
+												 * @since BuddyPress (2.1.0)
+												 *
+												 * @param BP_XProfile_Group $this Current XProfile group.
+												 */
+												do_action( 'xprofile_group_submitbox_start', $this );
+												?>
+
 												<div id="delete-action">
 													<a href="users.php?page=bp-profile-setup" class="submitdelete deletion"><?php _e( 'Cancel', 'buddypress' ); ?></a>
 												</div>
@@ -514,6 +556,17 @@ class BP_XProfile_Group {
 										</div>
 									</div>
 								</div>
+
+								<?php
+								/**
+								 * Fires after XProfile Group submit metabox.
+								 *
+								 * @since BuddyPress (2.1.0)
+								 *
+								 * @param BP_XProfile_Group $this Current XProfile group.
+								 */
+								do_action( 'xprofile_group_after_submitbox', $this );
+								?>
 							</div>
 						</div>
 					</div>
@@ -633,15 +686,16 @@ class BP_XProfile_Field {
 		$this->is_required = apply_filters( 'xprofile_field_is_required_before_save', $this->is_required, $this->id );
 		$this->order_by	   = apply_filters( 'xprofile_field_order_by_before_save',    $this->order_by,    $this->id );
 		$this->field_order = apply_filters( 'xprofile_field_field_order_before_save', $this->field_order, $this->id );
+		$this->option_order = apply_filters( 'xprofile_field_option_order_before_save', $this->option_order, $this->id );
 		$this->can_delete  = apply_filters( 'xprofile_field_can_delete_before_save',  $this->can_delete,  $this->id );
 		$this->type_obj    = bp_xprofile_create_field_type( $this->type );
 
 		do_action_ref_array( 'xprofile_field_before_save', array( $this ) );
 
 		if ( $this->id != null ) {
-			$sql = $wpdb->prepare( "UPDATE {$bp->profile->table_name_fields} SET group_id = %d, parent_id = 0, type = %s, name = %s, description = %s, is_required = %d, order_by = %s, field_order = %d, can_delete = %d WHERE id = %d", $this->group_id, $this->type, $this->name, $this->description, $this->is_required, $this->order_by, $this->field_order, $this->can_delete, $this->id );
+			$sql = $wpdb->prepare( "UPDATE {$bp->profile->table_name_fields} SET group_id = %d, parent_id = 0, type = %s, name = %s, description = %s, is_required = %d, order_by = %s, field_order = %d, option_order = %d, can_delete = %d WHERE id = %d", $this->group_id, $this->type, $this->name, $this->description, $this->is_required, $this->order_by, $this->field_order, $this->option_order, $this->can_delete, $this->id );
 		} else {
-			$sql = $wpdb->prepare( "INSERT INTO {$bp->profile->table_name_fields} (group_id, parent_id, type, name, description, is_required, order_by, field_order, can_delete ) VALUES (%d, %d, %s, %s, %s, %d, %s, %d, %d )", $this->group_id, $this->parent_id, $this->type, $this->name, $this->description, $this->is_required, $this->order_by, $this->field_order, $this->can_delete );
+			$sql = $wpdb->prepare( "INSERT INTO {$bp->profile->table_name_fields} (group_id, parent_id, type, name, description, is_required, order_by, field_order, option_order, can_delete ) VALUES (%d, %d, %s, %s, %s, %d, %s, %d, %d, %d )", $this->group_id, $this->parent_id, $this->type, $this->name, $this->description, $this->is_required, $this->order_by, $this->field_order, $this->option_order, $this->can_delete );
 		}
 
 		/**
@@ -747,10 +801,9 @@ class BP_XProfile_Field {
 
 		$sql = $wpdb->prepare( "SELECT * FROM {$bp->profile->table_name_fields} WHERE parent_id = %d AND group_id = %d $sort_sql", $parent_id, $this->group_id );
 
-		if ( !$children = $wpdb->get_results( $sql ) )
-			return false;
+		$children = $wpdb->get_results( $sql );
 
-		return apply_filters( 'bp_xprofile_field_get_children', $children );
+		return apply_filters( 'bp_xprofile_field_get_children', $children, $for_editing );
 	}
 
 	public function delete_children() {
@@ -867,7 +920,7 @@ class BP_XProfile_Field {
 					<div id="post-body" class="metabox-holder columns-<?php echo ( 1 == get_current_screen()->get_columns() ) ? '1' : '2'; ?>">
 						<div id="post-body-content">
 							<div id="titlediv">
-								<input type="text" name="title" id="title" value="<?php echo esc_attr( $this->name ); ?>" />
+								<input type="text" name="title" id="title" value="<?php echo esc_attr( $this->name ); ?>" placeholder="<?php echo esc_attr_x( 'Field Name', 'XProfile admin edit field', 'buddypress' ); ?>" />
 							</div>
 							<div class="postbox">
 								<h3><?php _e( 'Field Description', 'buddypress' ); ?></h3>
@@ -878,11 +931,35 @@ class BP_XProfile_Field {
 						</div><!-- #post-body-content -->
 
 						<div id="postbox-container-1" class="postbox-container">
+
+							<?php
+							/**
+							 * Fires before XProfile Field submit metabox.
+							 *
+							 * @since BuddyPress (2.1.0)
+							 *
+							 * @param BP_XProfile_Field $this Current XProfile field.
+							 */
+							do_action( 'xprofile_field_before_submitbox', $this );
+							?>
+
 							<div id="submitdiv" class="postbox">
 								<h3><?php _e( 'Submit', 'buddypress' ); ?></h3>
 								<div class="inside">
 									<div id="submitcomment" class="submitbox">
 										<div id="major-publishing-actions">
+
+											<?php
+											/**
+											 * Fires at the beginning of the XProfile Field publishing actions section.
+											 *
+											 * @since BuddyPress (2.1.0)
+											 *
+											 * @param BP_XProfile_Field $this Current XProfile field.
+											 */
+											do_action( 'xprofile_field_submitbox_start', $this );
+											?>
+
 											<input type="hidden" name="field_order" id="field_order" value="<?php echo esc_attr( $this->field_order ); ?>" />
 											<div id="publishing-action">
 												<input type="submit" value="<?php esc_attr_e( 'Save', 'buddypress' ); ?>" name="saveField" id="saveField" style="font-weight: bold" class="button-primary" />
@@ -897,6 +974,17 @@ class BP_XProfile_Field {
 								</div>
 							</div>
 
+							<?php
+							/**
+							 * Fires after XProfile Field submit metabox.
+							 *
+							 * @since BuddyPress (2.1.0)
+							 *
+							 * @param BP_XProfile_Field $this Current XProfile field.
+							 */
+							do_action( 'xprofile_field_after_submitbox', $this );
+							?>
+
 							<?php /* Field 1 is the fullname field, which cannot have custom visibility */ ?>
 							<?php if ( 1 != $this->id ) : ?>
 
@@ -1001,7 +1089,7 @@ class BP_XProfile_Field {
 			if ( $field_type->supports_options && isset( $_POST[$option_name] ) && empty( $_POST[$option_name][1] ) ) {
 				$message = __( 'This field type require at least one option. Please add options below.', 'buddypress' );
 				return false;
-			} 
+			}
 		}
 
 		return true;
@@ -1092,7 +1180,7 @@ class BP_XProfile_ProfileData {
 
 		$this->user_id      = apply_filters( 'xprofile_data_user_id_before_save',      $this->user_id,         $this->id );
 		$this->field_id     = apply_filters( 'xprofile_data_field_id_before_save',     $this->field_id,        $this->id );
-		$this->value        = apply_filters( 'xprofile_data_value_before_save',        $this->value,           $this->id );
+		$this->value        = apply_filters( 'xprofile_data_value_before_save',        $this->value,           $this->id, true, $this );
 		$this->last_updated = apply_filters( 'xprofile_data_last_updated_before_save', bp_core_current_time(), $this->id );
 
 		do_action_ref_array( 'xprofile_data_before_save', array( $this ) );
@@ -1218,7 +1306,7 @@ class BP_XProfile_ProfileData {
 	public static function get_all_for_user( $user_id ) {
 		global $wpdb, $bp;
 
-		$groups = BP_XProfile_Group::get( array(
+		$groups = bp_xprofile_get_groups( array(
 			'user_id'                => $user_id,
 			'hide_empty_groups'      => true,
 			'hide_empty_fields'      => true,
@@ -1450,6 +1538,8 @@ class BP_XProfile_ProfileData {
 	}
 }
 
+/** Field Types ***************************************************************/
+
 /**
  * Datebox xprofile field type.
  *
@@ -1468,7 +1558,8 @@ class BP_XProfile_Field_Type_Datebox extends BP_XProfile_Field_Type {
 		$this->category = _x( 'Single Fields', 'xprofile field type category', 'buddypress' );
 		$this->name     = _x( 'Date Selector', 'xprofile field type', 'buddypress' );
 
-		$this->set_format( '/^\d{4}-\d{1,2}-\d{1,2} 00:00:00$/', 'replace' );  // "Y-m-d 00:00:00"
+		$this->set_format( '/^\d{4}-\d{1,2}-\d{1,2} 00:00:00$/', 'replace' ); // "Y-m-d 00:00:00"
+
 		do_action( 'bp_xprofile_field_type_datebox', $this );
 	}
 
@@ -1481,53 +1572,55 @@ class BP_XProfile_Field_Type_Datebox extends BP_XProfile_Field_Type {
 	 * @since BuddyPress (2.0.0)
 	 */
 	public function edit_field_html( array $raw_properties = array() ) {
-		$user_id = bp_displayed_user_id();
 
-		// user_id is a special optional parameter that we pass to {@link bp_the_profile_field_options()}.
+		// user_id is a special optional parameter that we pass to
+		// {@link bp_the_profile_field_options()}.
 		if ( isset( $raw_properties['user_id'] ) ) {
 			$user_id = (int) $raw_properties['user_id'];
 			unset( $raw_properties['user_id'] );
+		} else {
+			$user_id = bp_displayed_user_id();
 		}
 
-		$day_html = $this->get_edit_field_html_elements( array_merge(
-			array(
-				'id'   => bp_get_the_profile_field_input_name() . '_day',
-				'name' => bp_get_the_profile_field_input_name() . '_day',
-			),
-			$raw_properties
+		$day_r = bp_parse_args( $raw_properties, array(
+			'id'   => bp_get_the_profile_field_input_name() . '_day',
+			'name' => bp_get_the_profile_field_input_name() . '_day'
 		) );
 
-		$month_html = $this->get_edit_field_html_elements( array_merge(
-			array(
-				'id'   => bp_get_the_profile_field_input_name() . '_month',
-				'name' => bp_get_the_profile_field_input_name() . '_month',
-			),
-			$raw_properties
+		$month_r = bp_parse_args( $raw_properties, array(
+			'id'   => bp_get_the_profile_field_input_name() . '_month',
+			'name' => bp_get_the_profile_field_input_name() . '_month'
 		) );
 
-		$year_html = $this->get_edit_field_html_elements( array_merge(
-			array(
-				'id'   => bp_get_the_profile_field_input_name() . '_year',
-				'name' => bp_get_the_profile_field_input_name() . '_year',
-			),
-			$raw_properties
-		) );
-	?>
+		$year_r = bp_parse_args( $raw_properties, array(
+			'id'   => bp_get_the_profile_field_input_name() . '_year',
+			'name' => bp_get_the_profile_field_input_name() . '_year'
+		) ); ?>
+
 		<div class="datebox">
 
 			<label for="<?php bp_the_profile_field_input_name(); ?>_day"><?php bp_the_profile_field_name(); ?> <?php if ( bp_get_the_profile_field_is_required() ) : ?><?php esc_html_e( '(required)', 'buddypress' ); ?><?php endif; ?></label>
 			<?php do_action( bp_get_the_profile_field_errors_action() ); ?>
 
-			<select <?php echo $day_html; ?>>
-				<?php bp_the_profile_field_options( array( 'type' => 'day', 'user_id' => $user_id ) ); ?>
+			<select <?php echo $this->get_edit_field_html_elements( $day_r ); ?>>
+				<?php bp_the_profile_field_options( array(
+					'type'    => 'day',
+					'user_id' => $user_id
+				) ); ?>
 			</select>
 
-			<select <?php echo $month_html; ?>>
-				<?php bp_the_profile_field_options( array( 'type' => 'month', 'user_id' => $user_id ) ); ?>
+			<select <?php echo $this->get_edit_field_html_elements( $month_r ); ?>>
+				<?php bp_the_profile_field_options( array(
+					'type'    => 'month',
+					'user_id' => $user_id
+				) ); ?>
 			</select>
 
-			<select <?php echo $year_html; ?>>
-				<?php bp_the_profile_field_options( array( 'type' => 'year', 'user_id' => $user_id ) ); ?>
+			<select <?php echo $this->get_edit_field_html_elements( $year_r ); ?>>
+				<?php bp_the_profile_field_options( array(
+					'type'    => 'year',
+					'user_id' => $user_id
+				) ); ?>
 			</select>
 
 		</div>
@@ -1549,15 +1642,14 @@ class BP_XProfile_Field_Type_Datebox extends BP_XProfile_Field_Type {
 	 * @since BuddyPress (2.0.0)
 	 */
 	public function edit_field_options_html( array $args = array() ) {
-		$options    = $this->field_obj->get_children();
+
 		$date       = BP_XProfile_ProfileData::get_value_byid( $this->field_obj->id, $args['user_id'] );
+		$day        = 0;
+		$month      = 0;
+		$year       = 0;
+		$html       = '';
 		$eng_months = array( 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' );
 
-		$day   = 0;
-		$month = 0;
-		$year  = 0;
-		$html  = '';
-
 		// Set day, month, year defaults
 		if ( ! empty( $date ) ) {
 
@@ -1575,7 +1667,8 @@ class BP_XProfile_Field_Type_Datebox extends BP_XProfile_Field_Type {
 			}
 		}
 
-		// Check for updated posted values, and errors preventing them from being saved first time.
+		// Check for updated posted values, and errors preventing them from
+		// being saved first time.
 		if ( ! empty( $_POST['field_' . $this->field_obj->id . '_day'] ) ) {
 			$new_day = (int) $_POST['field_' . $this->field_obj->id . '_day'];
 			$day     = ( $day != $new_day ) ? $new_day : $day;
@@ -1608,18 +1701,18 @@ class BP_XProfile_Field_Type_Datebox extends BP_XProfile_Field_Type {
 
 			case 'month':
 				$months = array(
-					__( 'January', 'buddypress' ),
-					__( 'February', 'buddypress' ),
-					__( 'March', 'buddypress' ),
-					__( 'April', 'buddypress' ),
-					__( 'May', 'buddypress' ),
-					__( 'June', 'buddypress' ),
-					__( 'July', 'buddypress' ),
-					__( 'August', 'buddypress' ),
+					__( 'January',   'buddypress' ),
+					__( 'February',  'buddypress' ),
+					__( 'March',     'buddypress' ),
+					__( 'April',     'buddypress' ),
+					__( 'May',       'buddypress' ),
+					__( 'June',      'buddypress' ),
+					__( 'July',      'buddypress' ),
+					__( 'August',    'buddypress' ),
 					__( 'September', 'buddypress' ),
-					__( 'October', 'buddypress' ),
-					__( 'November', 'buddypress' ),
-					__( 'December', 'buddypress' )
+					__( 'October',   'buddypress' ),
+					__( 'November',  'buddypress' ),
+					__( 'December',  'buddypress' )
 				);
 
 				$html = sprintf( '<option value="" %1$s>%2$s</option>', selected( $month, 0, false ), /* translators: no option picked in select box */ __( '----', 'buddypress' ) );
@@ -1650,41 +1743,34 @@ class BP_XProfile_Field_Type_Datebox extends BP_XProfile_Field_Type {
 	 * @since BuddyPress (2.0.0)
 	 */
 	public function admin_field_html( array $raw_properties = array() ) {
-		$day_html = $this->get_edit_field_html_elements( array_merge(
-			array(
-				'id'   => bp_get_the_profile_field_input_name() . '_day',
-				'name' => bp_get_the_profile_field_input_name() . '_day',
-			),
-			$raw_properties
-		) );
 
-		$month_html = $this->get_edit_field_html_elements( array_merge(
-			array(
-				'id'   => bp_get_the_profile_field_input_name() . '_month',
-				'name' => bp_get_the_profile_field_input_name() . '_month',
-			),
-			$raw_properties
+		$day_r = bp_parse_args( $raw_properties, array(
+			'id'   => bp_get_the_profile_field_input_name() . '_day',
+			'name' => bp_get_the_profile_field_input_name() . '_day'
 		) );
 
-		$year_html = $this->get_edit_field_html_elements( array_merge(
-			array(
-				'id'   => bp_get_the_profile_field_input_name() . '_year',
-				'name' => bp_get_the_profile_field_input_name() . '_year',
-			),
-			$raw_properties
+		$month_r = bp_parse_args( $raw_properties, array(
+			'id'   => bp_get_the_profile_field_input_name() . '_month',
+			'name' => bp_get_the_profile_field_input_name() . '_month'
 		) );
-	?>
-		<select <?php echo $day_html; ?>>
-			<?php bp_the_profile_field_options( 'type=day' ); ?>
+
+		$year_r = bp_parse_args( $raw_properties, array(
+			'id'   => bp_get_the_profile_field_input_name() . '_year',
+			'name' => bp_get_the_profile_field_input_name() . '_year'
+		) ); ?>
+
+		<select <?php echo $this->get_edit_field_html_elements( $day_r ); ?>>
+			<?php bp_the_profile_field_options( array( 'type' => 'day' ) ); ?>
 		</select>
 
-		<select <?php echo $month_html; ?>>
-			<?php bp_the_profile_field_options( 'type=month' ); ?>
+		<select <?php echo $this->get_edit_field_html_elements( $month_r ); ?>>
+			<?php bp_the_profile_field_options( array( 'type' => 'month' ) ); ?>
 		</select>
 
-		<select <?php echo $year_html; ?>>
-			<?php bp_the_profile_field_options( 'type=year' ); ?>
+		<select <?php echo $this->get_edit_field_html_elements( $year_r ); ?>>
+			<?php bp_the_profile_field_options( array( 'type' => 'year' ) ); ?>
 		</select>
+
 	<?php
 	}
 
@@ -1697,6 +1783,25 @@ class BP_XProfile_Field_Type_Datebox extends BP_XProfile_Field_Type {
 	 * @since BuddyPress (2.0.0)
 	 */
 	public function admin_new_field_html( BP_XProfile_Field $current_field, $control_type = '' ) {}
+
+	/**
+	 * Format Date values for display.
+	 *
+	 * @since BuddyPress (2.1.0)
+	 *
+	 * @param string $field_value The date value, as saved in the database.
+	 *        Typically, this is a MySQL-formatted date string (Y-m-d H:i:s).
+	 * @return string Date formatted by bp_format_time().
+	 */
+	public static function display_filter( $field_value ) {
+
+		// If Unix timestamp
+		if ( ! is_numeric( $field_value ) ) {
+			$field_value = strtotime( $field_value );
+		}
+
+		return bp_format_time( $field_value, true, false );
+	}
 }
 
 /**
@@ -1734,21 +1839,32 @@ class BP_XProfile_Field_Type_Checkbox extends BP_XProfile_Field_Type {
 	 * @since BuddyPress (2.0.0)
 	 */
 	public function edit_field_html( array $raw_properties = array() ) {
-		$user_id = bp_displayed_user_id();
 
-		// user_id is a special optional parameter that we pass to {@link bp_the_profile_field_options()}.
+		// user_id is a special optional parameter that we pass to
+		// {@link bp_the_profile_field_options()}.
 		if ( isset( $raw_properties['user_id'] ) ) {
 			$user_id = (int) $raw_properties['user_id'];
 			unset( $raw_properties['user_id'] );
-		}
-	?>
+		} else {
+			$user_id = bp_displayed_user_id();
+		} ?>
+
 		<div class="checkbox">
+			<label for="<?php bp_the_profile_field_input_name(); ?>">
+				<?php bp_the_profile_field_name(); ?>
+				<?php if ( bp_get_the_profile_field_is_required() ) : ?>
+					<?php esc_html_e( '(required)', 'buddypress' ); ?>
+				<?php endif; ?>
+			</label>
 
-			<label for="<?php bp_the_profile_field_input_name(); ?>"><?php bp_the_profile_field_name(); ?> <?php if ( bp_get_the_profile_field_is_required() ) : ?><?php esc_html_e( '(required)', 'buddypress' ); ?><?php endif; ?></label>
 			<?php do_action( bp_get_the_profile_field_errors_action() ); ?>
-			<?php bp_the_profile_field_options( "user_id={$user_id}" ); ?>
+
+			<?php bp_the_profile_field_options( array(
+				'user_id' => $user_id
+			) ); ?>
 
 		</div>
+
 		<?php
 	}
 
@@ -1773,7 +1889,8 @@ class BP_XProfile_Field_Type_Checkbox extends BP_XProfile_Field_Type {
 
 		$html = '';
 
-		// Check for updated posted values, but errors preventing them from being saved first time
+		// Check for updated posted values, but errors preventing them from
+		// being saved first time
 		if ( isset( $_POST['field_' . $this->field_obj->id] ) && $option_values != maybe_serialize( $_POST['field_' . $this->field_obj->id] ) ) {
 			if ( ! empty( $_POST['field_' . $this->field_obj->id] ) ) {
 				$option_values = array_map( 'sanitize_text_field', $_POST['field_' . $this->field_obj->id] );
@@ -1786,7 +1903,8 @@ class BP_XProfile_Field_Type_Checkbox extends BP_XProfile_Field_Type {
 			// First, check to see whether the user's saved values match the option
 			for ( $j = 0, $count_values = count( $option_values ); $j < $count_values; ++$j ) {
 
-				// Run the allowed option name through the before_save filter, so we'll be sure to get a match
+				// Run the allowed option name through the before_save filter,
+				// so we'll be sure to get a match
 				$allowed_options = xprofile_sanitize_data_value_before_save( $options[$k]->name, false, false );
 
 				if ( $option_values[$j] === $allowed_options || in_array( $allowed_options, $option_values ) ) {
@@ -1795,7 +1913,8 @@ class BP_XProfile_Field_Type_Checkbox extends BP_XProfile_Field_Type {
 				}
 			}
 
-			// If the user has not yet supplied a value for this field, check to see whether there is a default value available
+			// If the user has not yet supplied a value for this field, check to
+			// see whether there is a default value available
 			if ( ! is_array( $option_values ) && empty( $option_values ) && empty( $selected ) && ! empty( $options[$k]->is_default_option ) ) {
 				$selected = ' checked="checked"';
 			}
@@ -1872,25 +1991,39 @@ class BP_XProfile_Field_Type_Radiobutton extends BP_XProfile_Field_Type {
 	 * @since BuddyPress (2.0.0)
 	 */
 	public function edit_field_html( array $raw_properties = array() ) {
-		$user_id = bp_displayed_user_id();
 
-		// user_id is a special optional parameter that we pass to {@link bp_the_profile_field_options()}.
+		// user_id is a special optional parameter that we pass to
+		// {@link bp_the_profile_field_options()}.
 		if ( isset( $raw_properties['user_id'] ) ) {
 			$user_id = (int) $raw_properties['user_id'];
 			unset( $raw_properties['user_id'] );
-		}
-	?>
+		} else {
+			$user_id = bp_displayed_user_id();
+		} ?>
+
 		<div class="radio">
 
-			<label for="<?php bp_the_profile_field_input_name(); ?>"><?php bp_the_profile_field_name(); ?> <?php if ( bp_get_the_profile_field_is_required() ) : ?><?php esc_html_e( '(required)', 'buddypress' ); ?><?php endif; ?></label>
+			<label for="<?php bp_the_profile_field_input_name(); ?>">
+				<?php bp_the_profile_field_name(); ?>
+				<?php if ( bp_get_the_profile_field_is_required() ) : ?>
+					<?php esc_html_e( '(required)', 'buddypress' ); ?>
+				<?php endif; ?>
+			</label>
+
 			<?php do_action( bp_get_the_profile_field_errors_action() ); ?>
-			<?php bp_the_profile_field_options( "user_id={$user_id}" );
+
+			<?php bp_the_profile_field_options( array( 'user_id' => $user_id ) );
 
 			if ( ! bp_get_the_profile_field_is_required() ) : ?>
-				<a class="clear-value" href="javascript:clear( '<?php echo esc_js( bp_get_the_profile_field_input_name() ); ?>' );"><?php esc_html_e( 'Clear', 'buddypress' ); ?></a>
+
+				<a class="clear-value" href="javascript:clear( '<?php echo esc_js( bp_get_the_profile_field_input_name() ); ?>' );">
+					<?php esc_html_e( 'Clear', 'buddypress' ); ?>
+				</a>
+
 			<?php endif; ?>
 
 		</div>
+
 		<?php
 	}
 
@@ -1916,14 +2049,16 @@ class BP_XProfile_Field_Type_Radiobutton extends BP_XProfile_Field_Type {
 
 		for ( $k = 0, $count = count( $options ); $k < $count; ++$k ) {
 
-			// Check for updated posted values, but errors preventing them from being saved first time
+			// Check for updated posted values, but errors preventing them from
+			// being saved first time
 			if ( isset( $_POST['field_' . $this->field_obj->id] ) && $option_value != $_POST['field_' . $this->field_obj->id] ) {
 				if ( ! empty( $_POST['field_' . $this->field_obj->id] ) ) {
 					$option_value = sanitize_text_field( $_POST['field_' . $this->field_obj->id] );
 				}
 			}
 
-			// Run the allowed option name through the before_save filter, so we'll be sure to get a match
+			// Run the allowed option name through the before_save filter, so
+			// we'll be sure to get a match
 			$allowed_options = xprofile_sanitize_data_value_before_save( $options[$k]->name, false, false );
 			$selected        = '';
 
@@ -1955,10 +2090,15 @@ class BP_XProfile_Field_Type_Radiobutton extends BP_XProfile_Field_Type {
 	public function admin_field_html( array $raw_properties = array() ) {
 		bp_the_profile_field_options();
 
-		if ( ! bp_get_the_profile_field_is_required() ) : ?>
-			<a class="clear-value" href="javascript:clear( '<?php echo esc_js( bp_get_the_profile_field_input_name() ); ?>' );"><?php esc_html_e( 'Clear', 'buddypress' ); ?></a>
-		<?php endif; ?>
-	<?php
+		if ( bp_get_the_profile_field_is_required() ) {
+			return;
+		} ?>
+
+		<a class="clear-value" href="javascript:clear( '<?php echo esc_js( bp_get_the_profile_field_input_name() ); ?>' );">
+			<?php esc_html_e( 'Clear', 'buddypress' ); ?>
+		</a>
+
+		<?php
 	}
 
 	/**
@@ -2010,31 +2150,38 @@ class BP_XProfile_Field_Type_Multiselectbox extends BP_XProfile_Field_Type {
 	 * @since BuddyPress (2.0.0)
 	 */
 	public function edit_field_html( array $raw_properties = array() ) {
-		$user_id = bp_displayed_user_id();
 
-		// user_id is a special optional parameter that we pass to {@link bp_the_profile_field_options()}.
+		// user_id is a special optional parameter that we pass to
+		// {@link bp_the_profile_field_options()}.
 		if ( isset( $raw_properties['user_id'] ) ) {
 			$user_id = (int) $raw_properties['user_id'];
 			unset( $raw_properties['user_id'] );
+		} else {
+			$user_id = bp_displayed_user_id();
 		}
 
-		$html = $this->get_edit_field_html_elements( array_merge(
-			array(
-				'multiple' => 'multiple',
-				'id'       => bp_get_the_profile_field_input_name() . '[]',
-				'name'     => bp_get_the_profile_field_input_name() . '[]',
-			),
-			$raw_properties
-		) );
-	?>
+		$r = bp_parse_args( $raw_properties, array(
+			'multiple' => 'multiple',
+			'id'       => bp_get_the_profile_field_input_name() . '[]',
+			'name'     => bp_get_the_profile_field_input_name() . '[]',
+		) ); ?>
+
 		<label for="<?php bp_the_profile_field_input_name(); ?>[]"><?php bp_the_profile_field_name(); ?> <?php if ( bp_get_the_profile_field_is_required() ) : ?><?php _e( '(required)', 'buddypress' ); ?><?php endif; ?></label>
+
 		<?php do_action( bp_get_the_profile_field_errors_action() ); ?>
-		<select <?php echo $html; ?>>
-			<?php bp_the_profile_field_options( "user_id={$user_id}" ); ?>
+
+		<select <?php echo $this->get_edit_field_html_elements( $r ); ?>>
+			<?php bp_the_profile_field_options( array(
+				'user_id' => $user_id
+			) ); ?>
 		</select>
 
 		<?php if ( ! bp_get_the_profile_field_is_required() ) : ?>
-			<a class="clear-value" href="javascript:clear( '<?php echo esc_js( bp_get_the_profile_field_input_name() ); ?>[]' );"><?php esc_html_e( 'Clear', 'buddypress' ); ?></a>
+
+			<a class="clear-value" href="javascript:clear( '<?php echo esc_js( bp_get_the_profile_field_input_name() ); ?>[]' );">
+				<?php esc_html_e( 'Clear', 'buddypress' ); ?>
+			</a>
+
 		<?php endif; ?>
 	<?php
 	}
@@ -2067,7 +2214,8 @@ class BP_XProfile_Field_Type_Multiselectbox extends BP_XProfile_Field_Type {
 		for ( $k = 0, $count = count( $options ); $k < $count; ++$k ) {
 			$selected = '';
 
-			// Check for updated posted values, but errors preventing them from being saved first time
+			// Check for updated posted values, but errors preventing them from
+			// being saved first time
 			foreach( $option_values as $i => $option_value ) {
 				if ( isset( $_POST['field_' . $this->field_obj->id] ) && $_POST['field_' . $this->field_obj->id][$i] != $option_value ) {
 					if ( ! empty( $_POST['field_' . $this->field_obj->id][$i] ) ) {
@@ -2076,7 +2224,8 @@ class BP_XProfile_Field_Type_Multiselectbox extends BP_XProfile_Field_Type {
 				}
 			}
 
-			// Run the allowed option name through the before_save filter, so we'll be sure to get a match
+			// Run the allowed option name through the before_save filter, so
+			// we'll be sure to get a match
 			$allowed_options = xprofile_sanitize_data_value_before_save( $options[$k]->name, false, false );
 
 			// First, check to see whether the user-entered value matches
@@ -2104,15 +2253,15 @@ class BP_XProfile_Field_Type_Multiselectbox extends BP_XProfile_Field_Type {
 	 * @since BuddyPress (2.0.0)
 	 */
 	public function admin_field_html( array $raw_properties = array() ) {
-		$html = $this->get_edit_field_html_elements( array_merge(
-			array( 'multiple' => 'multiple' ),
-			$raw_properties
-		) );
-	?>
-		<select <?php echo $html; ?>>
+		$r = bp_parse_args( $raw_properties, array(
+			'multiple' => 'multiple'
+		) ); ?>
+
+		<select <?php echo $this->get_edit_field_html_elements( $r ); ?>>
 			<?php bp_the_profile_field_options(); ?>
 		</select>
-	<?php
+
+		<?php
 	}
 
 	/**
@@ -2162,22 +2311,30 @@ class BP_XProfile_Field_Type_Selectbox extends BP_XProfile_Field_Type {
 	 * @since BuddyPress (2.0.0)
 	 */
 	public function edit_field_html( array $raw_properties = array() ) {
-		$user_id = bp_displayed_user_id();
 
-		// user_id is a special optional parameter that we pass to {@link bp_the_profile_field_options()}.
+		// user_id is a special optional parameter that we pass to
+		// {@link bp_the_profile_field_options()}.
 		if ( isset( $raw_properties['user_id'] ) ) {
 			$user_id = (int) $raw_properties['user_id'];
 			unset( $raw_properties['user_id'] );
-		}
+		} else {
+			$user_id = bp_displayed_user_id();
+		} ?>
+
+		<label for="<?php bp_the_profile_field_input_name(); ?>">
+			<?php bp_the_profile_field_name(); ?>
+			<?php if ( bp_get_the_profile_field_is_required() ) : ?>
+				<?php esc_html_e( '(required)', 'buddypress' ); ?>
+			<?php endif; ?>
+		</label>
 
-		$html = $this->get_edit_field_html_elements( $raw_properties );
-	?>
-		<label for="<?php bp_the_profile_field_input_name(); ?>"><?php bp_the_profile_field_name(); ?> <?php if ( bp_get_the_profile_field_is_required() ) : ?><?php esc_html_e( '(required)', 'buddypress' ); ?><?php endif; ?></label>
 		<?php do_action( bp_get_the_profile_field_errors_action() ); ?>
-		<select <?php echo $html; ?>>
-			<?php bp_the_profile_field_options( "user_id={$user_id}" ); ?>
+
+		<select <?php echo $this->get_edit_field_html_elements( $raw_properties ); ?>>
+			<?php bp_the_profile_field_options( array( 'user_id' => $user_id ) ); ?>
 		</select>
-	<?php
+
+		<?php
 	}
 
 	/**
@@ -2198,7 +2355,7 @@ class BP_XProfile_Field_Type_Selectbox extends BP_XProfile_Field_Type {
 		$original_option_values = maybe_unserialize( BP_XProfile_ProfileData::get_value_byid( $this->field_obj->id, $args['user_id'] ) );
 
 		$options = $this->field_obj->get_children();
-		$html     = '<option value="">' . /* translators: no option picked in select box */ esc_html__( '----', 'buddypress' ) . '</option>';
+		$html    = '<option value="">' . /* translators: no option picked in select box */ esc_html__( '----', 'buddypress' ) . '</option>';
 
 		if ( empty( $original_option_values ) && !empty( $_POST['field_' . $this->field_obj->id] ) ) {
 			$original_option_values = sanitize_text_field(  $_POST['field_' . $this->field_obj->id] );
@@ -2208,7 +2365,8 @@ class BP_XProfile_Field_Type_Selectbox extends BP_XProfile_Field_Type {
 		for ( $k = 0, $count = count( $options ); $k < $count; ++$k ) {
 			$selected = '';
 
-			// Check for updated posted values, but errors preventing them from being saved first time
+			// Check for updated posted values, but errors preventing them from
+			// being saved first time
 			foreach( $option_values as $i => $option_value ) {
 				if ( isset( $_POST['field_' . $this->field_obj->id] ) && $_POST['field_' . $this->field_obj->id] != $option_value ) {
 					if ( ! empty( $_POST['field_' . $this->field_obj->id] ) ) {
@@ -2217,7 +2375,8 @@ class BP_XProfile_Field_Type_Selectbox extends BP_XProfile_Field_Type {
 				}
 			}
 
-			// Run the allowed option name through the before_save filter, so we'll be sure to get a match
+			// Run the allowed option name through the before_save filter, so
+			// we'll be sure to get a match
 			$allowed_options = xprofile_sanitize_data_value_before_save( $options[$k]->name, false, false );
 
 			// First, check to see whether the user-entered value matches
@@ -2245,12 +2404,13 @@ class BP_XProfile_Field_Type_Selectbox extends BP_XProfile_Field_Type {
 	 * @since BuddyPress (2.0.0)
 	 */
 	public function admin_field_html( array $raw_properties = array() ) {
-		$html = $this->get_edit_field_html_elements( $raw_properties );
-	?>
-		<select <?php echo $html; ?>>
+		?>
+
+		<select <?php echo $this->get_edit_field_html_elements( $raw_properties ); ?>>
 			<?php bp_the_profile_field_options(); ?>
 		</select>
-	<?php
+
+		<?php
 	}
 
 	/**
@@ -2299,23 +2459,29 @@ class BP_XProfile_Field_Type_Textarea extends BP_XProfile_Field_Type {
 	 */
 	public function edit_field_html( array $raw_properties = array() ) {
 
-		// user_id is a special optional parameter that certain other fields types pass to {@link bp_the_profile_field_options()}.
+		// user_id is a special optional parameter that certain other fields
+		// types pass to {@link bp_the_profile_field_options()}.
 		if ( isset( $raw_properties['user_id'] ) ) {
 			unset( $raw_properties['user_id'] );
 		}
 
-		$html = $this->get_edit_field_html_elements( array_merge(
-			array(
-				'cols' => 40,
-				'rows' => 5,
-			),
-			$raw_properties
-		) );
-	?>
-		<label for="<?php bp_the_profile_field_input_name(); ?>"><?php bp_the_profile_field_name(); ?> <?php if ( bp_get_the_profile_field_is_required() ) : ?><?php esc_html_e( '(required)', 'buddypress' ); ?><?php endif; ?></label>
+		$r = bp_parse_args( $raw_properties, array(
+			'cols' => 40,
+			'rows' => 5,
+		) ); ?>
+
+		<label for="<?php bp_the_profile_field_input_name(); ?>">
+			<?php bp_the_profile_field_name(); ?>
+			<?php if ( bp_get_the_profile_field_is_required() ) : ?>
+				<?php esc_html_e( '(required)', 'buddypress' ); ?>
+			<?php endif; ?>
+		</label>
+
 		<?php do_action( bp_get_the_profile_field_errors_action() ); ?>
-		<textarea <?php echo $html; ?>><?php bp_the_profile_field_edit_value(); ?></textarea>
-	<?php
+
+		<textarea <?php echo $this->get_edit_field_html_elements( $r ); ?>><?php bp_the_profile_field_edit_value(); ?></textarea>
+
+		<?php
 	}
 
 	/**
@@ -2327,16 +2493,14 @@ class BP_XProfile_Field_Type_Textarea extends BP_XProfile_Field_Type {
 	 * @since BuddyPress (2.0.0)
 	 */
 	public function admin_field_html( array $raw_properties = array() ) {
-		$html = $this->get_edit_field_html_elements( array_merge(
-			array(
-				'cols' => 40,
-				'rows' => 5,
-			),
-			$raw_properties
-		) );
-	?>
-		<textarea <?php echo $html; ?>></textarea>
-	<?php
+		$r = bp_parse_args( $raw_properties, array(
+			'cols' => 40,
+			'rows' => 5,
+		) ); ?>
+
+		<textarea <?php echo $this->get_edit_field_html_elements( $r ); ?>></textarea>
+
+		<?php
 	}
 
 	/**
@@ -2382,23 +2546,29 @@ class BP_XProfile_Field_Type_Textbox extends BP_XProfile_Field_Type {
 	 */
 	public function edit_field_html( array $raw_properties = array() ) {
 
-		// user_id is a special optional parameter that certain other fields types pass to {@link bp_the_profile_field_options()}.
+		// user_id is a special optional parameter that certain other fields
+		// types pass to {@link bp_the_profile_field_options()}.
 		if ( isset( $raw_properties['user_id'] ) ) {
 			unset( $raw_properties['user_id'] );
 		}
 
-		$html = $this->get_edit_field_html_elements( array_merge(
-			array(
-				'type'  => 'text',
-				'value' => bp_get_the_profile_field_edit_value(),
-			),
-			$raw_properties
-		) );
-	?>
-		<label for="<?php bp_the_profile_field_input_name(); ?>"><?php bp_the_profile_field_name(); ?> <?php if ( bp_get_the_profile_field_is_required() ) : ?><?php esc_html_e( '(required)', 'buddypress' ); ?><?php endif; ?></label>
+		$r = bp_parse_args( $raw_properties, array(
+			'type'  => 'text',
+			'value' => bp_get_the_profile_field_edit_value(),
+		) ); ?>
+
+		<label for="<?php bp_the_profile_field_input_name(); ?>">
+			<?php bp_the_profile_field_name(); ?>
+			<?php if ( bp_get_the_profile_field_is_required() ) : ?>
+				<?php esc_html_e( '(required)', 'buddypress' ); ?>
+			<?php endif; ?>
+		</label>
+
 		<?php do_action( bp_get_the_profile_field_errors_action() ); ?>
-		<input <?php echo $html; ?>>
-	<?php
+
+		<input <?php echo $this->get_edit_field_html_elements( $r ); ?>>
+
+		<?php
 	}
 
 	/**
@@ -2410,13 +2580,14 @@ class BP_XProfile_Field_Type_Textbox extends BP_XProfile_Field_Type {
 	 * @since BuddyPress (2.0.0)
 	 */
 	public function admin_field_html( array $raw_properties = array() ) {
-		$html = $this->get_edit_field_html_elements( array_merge(
-			array( 'type' => 'text' ),
-			$raw_properties
-		) );
-	?>
-		<input <?php echo $html; ?>>
-	<?php
+
+		$r = bp_parse_args( $raw_properties, array(
+			'type' => 'text'
+		) ); ?>
+
+		<input <?php echo $this->get_edit_field_html_elements( $r ); ?>>
+
+		<?php
 	}
 
 	/**
@@ -2462,23 +2633,29 @@ class BP_XProfile_Field_Type_Number extends BP_XProfile_Field_Type {
 	 */
 	public function edit_field_html( array $raw_properties = array() ) {
 
-		// user_id is a special optional parameter that certain other fields types pass to {@link bp_the_profile_field_options()}.
+		// user_id is a special optional parameter that certain other fields
+		// types pass to {@link bp_the_profile_field_options()}.
 		if ( isset( $raw_properties['user_id'] ) ) {
 			unset( $raw_properties['user_id'] );
 		}
 
-		$html = $this->get_edit_field_html_elements( array_merge(
-			array(
-				'type'  => 'number',
-				'value' =>  bp_get_the_profile_field_edit_value(),
-			),
-			$raw_properties
-		) );
-	?>
-		<label for="<?php bp_the_profile_field_input_name(); ?>"><?php bp_the_profile_field_name(); ?> <?php if ( bp_get_the_profile_field_is_required() ) : ?><?php esc_html_e( '(required)', 'buddypress' ); ?><?php endif; ?></label>
+		$r = bp_parse_args( $raw_properties, array(
+			'type'  => 'number',
+			'value' =>  bp_get_the_profile_field_edit_value()
+		) ); ?>
+
+		<label for="<?php bp_the_profile_field_input_name(); ?>">
+			<?php bp_the_profile_field_name(); ?>
+			<?php if ( bp_get_the_profile_field_is_required() ) : ?>
+				<?php esc_html_e( '(required)', 'buddypress' ); ?>
+			<?php endif; ?>
+		</label>
+
 		<?php do_action( bp_get_the_profile_field_errors_action() ); ?>
-		<input <?php echo $html; ?>>
-	<?php
+
+		<input <?php echo $this->get_edit_field_html_elements( $r ); ?>>
+
+		<?php
 	}
 
 	/**
@@ -2490,12 +2667,11 @@ class BP_XProfile_Field_Type_Number extends BP_XProfile_Field_Type {
 	 * @since BuddyPress (2.0.0)
 	 */
 	public function admin_field_html( array $raw_properties = array() ) {
-		$html = $this->get_edit_field_html_elements( array_merge(
-			array( 'type' => 'number' ),
-			$raw_properties
-		) );
-	?>
-		<input <?php echo $html; ?>>
+		$r = bp_parse_args( $raw_properties, array(
+			'type' => 'number'
+		) ); ?>
+
+		<input <?php echo $this->get_edit_field_html_elements( $r ); ?>>
 	<?php
 	}
 
@@ -2510,6 +2686,148 @@ class BP_XProfile_Field_Type_Number extends BP_XProfile_Field_Type {
 	public function admin_new_field_html( BP_XProfile_Field $current_field, $control_type = '' ) {}
 }
 
+/**
+ * URL xprofile field type.
+ *
+ * @since BuddyPress (2.1.0)
+ */
+class BP_XProfile_Field_Type_URL extends BP_XProfile_Field_Type {
+
+	/**
+	 * Constructor for the URL field type
+	 *
+	 * @since BuddyPress (2.1.0)
+	 */
+	public function __construct() {
+		parent::__construct();
+
+		$this->category = _x( 'Single Fields', 'xprofile field type category', 'buddypress' );
+		$this->name     = _x( 'URL', 'xprofile field type', 'buddypress' );
+
+		$this->set_format( '_^(?:(?:https?|ftp)://)(?:\S+(?::\S*)?@)?(?:(?!10(?:\.\d{1,3}){3})(?!127(?:\.\d{1,3}){3})(?!169\.254(?:\.\d{1,3}){2})(?!192\.168(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\x{00a1}-\x{ffff}0-9]+-?)*[a-z\x{00a1}-\x{ffff}0-9]+)(?:\.(?:[a-z\x{00a1}-\x{ffff}0-9]+-?)*[a-z\x{00a1}-\x{ffff}0-9]+)*(?:\.(?:[a-z\x{00a1}-\x{ffff}]{2,})))(?::\d{2,5})?(?:/[^\s]*)?$_iuS', 'replace' );
+
+		do_action( 'bp_xprofile_field_type_url', $this );
+	}
+
+	/**
+	 * Output the edit field HTML for this field type.
+	 *
+	 * Must be used inside the {@link bp_profile_fields()} template loop.
+	 *
+	 * @param array $raw_properties Optional key/value array of
+	 *        {@link http://dev.w3.org/html5/markup/input.number.html permitted attributes}
+	 *        that you want to add.
+	 * @since BuddyPress (2.1.0)
+	 */
+	public function edit_field_html( array $raw_properties = array() ) {
+
+		// `user_id` is a special optional parameter that certain other
+		// fields types pass to {@link bp_the_profile_field_options()}.
+		if ( isset( $raw_properties['user_id'] ) ) {
+			unset( $raw_properties['user_id'] );
+		}
+
+		$r = bp_parse_args( $raw_properties, array(
+			'type'      => 'text',
+			'inputmode' => 'url',
+			'value'     => esc_url( bp_get_the_profile_field_edit_value() ),
+		) ); ?>
+
+		<label for="<?php bp_the_profile_field_input_name(); ?>">
+			<?php bp_the_profile_field_name(); ?>
+			<?php if ( bp_get_the_profile_field_is_required() ) : ?>
+				<?php esc_html_e( '(required)', 'buddypress' ); ?>
+			<?php endif; ?>
+		</label>
+
+		<?php do_action( bp_get_the_profile_field_errors_action() ); ?>
+
+		<input <?php echo $this->get_edit_field_html_elements( $r ); ?>>
+
+		<?php
+	}
+
+	/**
+	 * Output HTML for this field type on the wp-admin Profile Fields screen.
+	 *
+	 * Must be used inside the {@link bp_profile_fields()} template loop.
+	 *
+	 * @param array $raw_properties Optional key/value array of permitted
+	 *        attributes that you want to add.
+	 * @since BuddyPress (2.1.0)
+	 */
+	public function admin_field_html( array $raw_properties = array() ) {
+
+		$r = bp_parse_args( $raw_properties, array(
+			'type' => 'url'
+		) ); ?>
+
+		<input <?php echo $this->get_edit_field_html_elements( $r ); ?>>
+
+		<?php
+	}
+
+	/**
+	 * This method usually outputs HTML for this field type's children options
+	 * on the wp-admin Profile Fields "Add Field" and "Edit Field" screens, but
+	 * for this field type, we don't want it, so it's stubbed out.
+	 *
+	 * @param BP_XProfile_Field $current_field The current profile field on the add/edit screen.
+	 * @param string $control_type Optional. HTML input type used to render the current field's child options.
+	 * @since BuddyPress (2.1.0)
+	 */
+	public function admin_new_field_html( BP_XProfile_Field $current_field, $control_type = '' ) {}
+
+	/**
+	 * Modify submitted URL values before validation.
+	 *
+	 * The URL validation regex requires a http(s) protocol, so that all
+	 * values saved in the database are fully-formed URLs. However, we
+	 * still want to allow users to enter URLs without a protocol, for a
+	 * better user experience. So we catch submitted URL values, and if
+	 * the protocol is missing, we prepend 'http://' before passing to
+	 * is_valid().
+	 *
+	 * @since BuddyPress (2.1.0)
+	 *
+	 * @param string $submitted_value Raw value submitted by the user.
+	 * @return string
+	 */
+	public static function pre_validate_filter( $submitted_value = '' ) {
+
+		// Allow empty URL values
+		if ( empty( $submitted_value ) ) {
+			return '';
+		}
+
+		// Run some checks on the submitted value
+		if ( false === strpos( $submitted_value, ':'  )
+		     && substr( $submitted_value, 0, 1 ) !== '/'
+		     && substr( $submitted_value, 0, 1 ) !== '#'
+		     && ! preg_match( '/^[a-z0-9-]+?\.php/i', $submitted_value )
+		) {
+			$submitted_value = 'http://' . $submitted_value;
+		}
+
+		return $submitted_value;
+	}
+
+	/**
+	 * Format URL values for display.
+	 *
+	 * @since BuddyPress (2.1.0)
+	 *
+	 * @param string $field_value The URL value, as saved in the database.
+	 * @return string URL converted to a link.
+	 */
+	public static function display_filter( $field_value ) {
+		$link      = strip_tags( $field_value );
+		$no_scheme = preg_replace( '#^https?://#', '', rtrim( $link, '/' ) );
+		$url_text  = str_replace( $link, $no_scheme, $field_value );
+		return '<a href="' . esc_url( $field_value ) . '" rel="nofollow">' . esc_html( $url_text ) . '</a>';
+	}
+}
+
 /**
  * A placeholder xprofile field type. Doesn't do anything.
  *
@@ -2626,10 +2944,10 @@ abstract class BP_XProfile_Field_Type {
 
 	/**
 	 * Set a regex that profile data will be asserted against.
-	 * 
+	 *
 	 * You can call this method multiple times to set multiple formats. When validation is performed,
 	 * it's successful as long as the new value matches any one of the registered formats.
-	 * 
+	 *
 	 * @param string $format Regex string
 	 * @param string $replace_format Optional; if 'replace', replaces the format instead of adding to it. Defaults to 'add'.
 	 * @return BP_XProfile_Field_Type
@@ -2650,10 +2968,10 @@ abstract class BP_XProfile_Field_Type {
 
 	/**
 	 * Add a value to this type's whitelist that that profile data will be asserted against.
-	 * 
+	 *
 	 * You can call this method multiple times to set multiple formats. When validation is performed,
 	 * it's successful as long as the new value matches any one of the registered formats.
-	 * 
+	 *
 	 * @param string|array $values
 	 * @return BP_XProfile_Field_Type
 	 * @since BuddyPress (2.0.0)
@@ -2694,13 +3012,12 @@ abstract class BP_XProfile_Field_Type {
 		}
 
 		// Handle field types with accepts_null_value set if $values is an empty array
-		if ( ! $validated && is_array( $values ) && empty( $values ) && $this->accepts_null_value ) {
+		if ( ( false === $validated ) && is_array( $values ) && empty( $values ) && $this->accepts_null_value ) {
 			$validated = true;
 		}
 
 		// If there's a whitelist set, also check the $value.
-		if ( $validated && ! empty( $values ) && ! empty( $this->validation_whitelist ) ) {
-
+		if ( ( true === $validated ) && ! empty( $values ) && ! empty( $this->validation_whitelist ) ) {
 			foreach ( (array) $values as $value ) {
 				$validated = in_array( $value, $this->validation_whitelist, true );
 			}
@@ -2782,10 +3099,13 @@ abstract class BP_XProfile_Field_Type {
 				</p>
 
 				<?php
+
+				// Does option have children?
 				$options = $current_field->get_children( true );
 
-				// If no children options exists for this field, check in $_POST for a submitted form (e.g. on the "new field" screen).
-				if ( ! $options ) {
+				// If no children options exists for this field, check in $_POST
+				// for a submitted form (e.g. on the "new field" screen).
+				if ( empty( $options ) ) {
 
 					$options = array();
 					$i       = 1;
@@ -2812,7 +3132,7 @@ abstract class BP_XProfile_Field_Type {
 					}
 
 					// If there are still no children options set, this must be the "new field" screen, so add one new/empty option.
-					if ( ! $options ) {
+					if ( empty( $options ) ) {
 						$options[] = (object) array(
 							'id'                => -1,
 							'is_default_option' => false,
@@ -2834,17 +3154,22 @@ abstract class BP_XProfile_Field_Type {
 						}
 						?>
 
-						<p class="sortable">
-							<span>&nbsp;&Xi;&nbsp;</span>
+						<div id="<?php echo esc_attr( "{$type}_div{$j}" ); ?>" class="bp-option sortable">
+							<span class="bp-option-icon grabber"></span>
 							<input type="text" name="<?php echo esc_attr( "{$type}_option[{$j}]" ); ?>" id="<?php echo esc_attr( "{$type}_option{$j}" ); ?>" value="<?php echo esc_attr( stripslashes( $options[$i]->name ) ); ?>" />
-							<input type="<?php echo esc_attr( $control_type ); ?>" name="<?php echo esc_attr( "isDefault_{$type}_option{$default_name}" ); ?>" <?php checked( $options[$i]->is_default_option, true ); ?> value="<?php echo esc_attr( $j ); ?>" />
-							<span><?php _e( 'Default Value', 'buddypress' ); ?></span>
-
-							<?php if ( 1 <= $i ) : ?>
-								<a href="<?php echo esc_url( 'users.php?page=bp-profile-setup&amp;mode=delete_option&amp;option_id=' . $options[$i]->id ); ?>" class="ajax-option-delete" id="delete-<?php echo esc_attr( $options[$i]->id ); ?>">[x]</a>
-							<?php endif ;?>
-							
-						</p>
+							<label>
+								<input type="<?php echo esc_attr( $control_type ); ?>" name="<?php echo esc_attr( "isDefault_{$type}_option{$default_name}" ); ?>" <?php checked( $options[$i]->is_default_option, true ); ?> value="<?php echo esc_attr( $j ); ?>" />
+								<?php _e( 'Default Value', 'buddypress' ); ?>
+							</label>
+
+							<?php if ( 1 !== $j ) : ?>
+								<div class ="delete-button">
+									<a href='javascript:hide("<?php echo esc_attr( "{$type}_div{$j}" ); ?>")' class="delete"><?php esc_html_e( 'Delete', 'buddypress' ); ?></a>
+								</div>
+							<?php endif; ?>
+
+						</div>
+
 					<?php endfor; ?>
 
 					<input type="hidden" name="<?php echo esc_attr( "{$type}_option_number" ); ?>" id="<?php echo esc_attr( "{$type}_option_number" ); ?>" value="<?php echo esc_attr( $j + 1 ); ?>" />
@@ -2858,10 +3183,47 @@ abstract class BP_XProfile_Field_Type {
 		<?php
 	}
 
+	/**
+	 * Allow field types to modify submitted values before they are validated.
+	 *
+	 * In some cases, it may be appropriate for a field type to catch
+	 * submitted values and modify them before they are passed to the
+	 * is_valid() method. For example, URL validation requires the
+	 * 'http://' scheme (so that the value saved in the database is always
+	 * a fully-formed URL), but in order to allow users to enter a URL
+	 * without this scheme, BP_XProfile_Field_Type_URL prepends 'http://'
+	 * when it's not present.
+	 *
+	 * By default, this is a pass-through method that does nothing. Only
+	 * override in your own field type if you need this kind of pre-
+	 * validation filtering.
+	 *
+	 * @since BuddyPress (2.1.0)
+	 *
+	 * @param mixed $submitted_value Submitted value.
+	 * @return mixed
+	 */
+	public static function pre_validate_filter( $field_value ) {
+		return $field_value;
+	}
 
 	/**
-	 * Internal protected/private helper methods past this point.
+	 * Allow field types to modify the appearance of their values.
+	 *
+	 * By default, this is a pass-through method that does nothing. Only
+	 * override in your own field type if you need to provide custom
+	 * filtering for output values.
+	 *
+	 * @since BuddyPress (2.1.0)
+	 *
+	 * @param mixed $field_value Field value.
+	 * @return mixed
 	 */
+	public static function display_filter( $field_value ) {
+		return $field_value;
+	}
+
+	/** Protected *************************************************************/
 
 	/**
 	 * Get a sanitised and escaped string of the edit field's HTML elements and attributes.
@@ -2875,19 +3237,19 @@ abstract class BP_XProfile_Field_Type {
 	 */
 	protected function get_edit_field_html_elements( array $properties = array() ) {
 
-		$properties = array_merge( array(
+		$r = bp_parse_args( $properties, array(
 			'id'   => bp_get_the_profile_field_input_name(),
 			'name' => bp_get_the_profile_field_input_name(),
-		), $properties );
+		) );
 
 		if ( bp_get_the_profile_field_is_required() ) {
-			$properties['aria-required'] = 'true';
+			$r['aria-required'] = 'true';
 		}
 
-		$html       = '';
-		$properties = (array) apply_filters( 'bp_xprofile_field_edit_html_elements', $properties, get_class( $this ) );
+		$html = '';
+		$r    = (array) apply_filters( 'bp_xprofile_field_edit_html_elements', $r, get_class( $this ) );
 
-		foreach ( $properties as $name => $value ) {
+		foreach ( $r as $name => $value ) {
 			$html .= sprintf( '%s="%s" ', sanitize_key( $name ), esc_attr( $value ) );
 		}
 
diff --git a/wp-content/plugins/buddypress/bp-xprofile/bp-xprofile-cssjs.php b/wp-content/plugins/buddypress/bp-xprofile/bp-xprofile-cssjs.php
index 8fb4f6711..b23d3a9ad 100644
--- a/wp-content/plugins/buddypress/bp-xprofile/bp-xprofile-cssjs.php
+++ b/wp-content/plugins/buddypress/bp-xprofile/bp-xprofile-cssjs.php
@@ -18,7 +18,13 @@ if ( !defined( 'ABSPATH' ) ) exit;
 function xprofile_add_admin_css() {
 	if ( !empty( $_GET['page'] ) && strpos( $_GET['page'], 'bp-profile-setup' ) !== false ) {
 		$min = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
+
 		wp_enqueue_style( 'xprofile-admin-css', buddypress()->plugin_url . "bp-xprofile/admin/css/admin{$min}.css", array(), bp_get_version() );
+
+		wp_style_add_data( 'xprofile-admin-css', 'rtl', true );
+		if ( $min ) {
+			wp_style_add_data( 'xprofile-admin-css', 'suffix', $min );
+		}
 	}
 }
 add_action( 'admin_enqueue_scripts', 'xprofile_add_admin_css' );
@@ -39,6 +45,23 @@ function xprofile_add_admin_js() {
 
 		$min = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
 		wp_enqueue_script( 'xprofile-admin-js', buddypress()->plugin_url . "bp-xprofile/admin/js/admin{$min}.js", array( 'jquery', 'jquery-ui-sortable' ), bp_get_version() );
+
+		// Localize strings.
+		// supports_options_field_types is a dynamic list of field
+		// types that support options, for use in showing/hiding the
+		// "please enter options for this field" section
+		$strings = array(
+			'supports_options_field_types' => array(),
+		);
+
+		foreach ( bp_xprofile_get_field_types() as $field_type => $field_type_class ) {
+			$field = new $field_type_class();
+			if ( $field->supports_options ) {
+				$strings['supports_options_field_types'][] = $field_type;
+			}
+		}
+
+		wp_localize_script( 'xprofile-admin-js', 'XProfileAdmin', $strings );
 	}
 }
 add_action( 'admin_enqueue_scripts', 'xprofile_add_admin_js', 1 );
diff --git a/wp-content/plugins/buddypress/bp-xprofile/bp-xprofile-filters.php b/wp-content/plugins/buddypress/bp-xprofile/bp-xprofile-filters.php
index c0491948b..a11bf124c 100644
--- a/wp-content/plugins/buddypress/bp-xprofile/bp-xprofile-filters.php
+++ b/wp-content/plugins/buddypress/bp-xprofile/bp-xprofile-filters.php
@@ -26,6 +26,9 @@ add_filter( 'bp_get_the_profile_field_value',           'force_balance_tags' );
 add_filter( 'bp_get_the_profile_field_value',           'make_clickable'     );
 add_filter( 'bp_get_the_profile_field_value',           'esc_html',        8 );
 add_filter( 'bp_get_the_profile_field_value',           'convert_smilies', 9 );
+add_filter( 'bp_get_the_profile_field_value',           'xprofile_filter_format_field_value',         1, 2 );
+add_filter( 'bp_get_the_profile_field_value',           'xprofile_filter_format_field_value_by_type', 8, 2 );
+add_filter( 'bp_get_the_profile_field_value',           'xprofile_filter_link_profile_data',          9, 2 );
 
 add_filter( 'bp_get_the_profile_field_edit_value',      'force_balance_tags' );
 add_filter( 'bp_get_the_profile_field_edit_value',      'esc_html'           );
@@ -46,12 +49,10 @@ add_filter( 'xprofile_field_name_before_save',          'force_balance_tags' );
 add_filter( 'xprofile_field_description_before_save',   'force_balance_tags' );
 
 add_filter( 'xprofile_get_field_data',                  'stripslashes' );
+add_filter( 'xprofile_get_field_data',                  'xprofile_filter_format_field_value_by_field_id', 5, 2 );
 
-add_filter( 'bp_get_the_profile_field_value',           'xprofile_filter_format_field_value', 1, 2 );
-add_filter( 'bp_get_the_site_member_profile_data',      'xprofile_filter_format_field_value', 1, 2 );
-add_filter( 'bp_get_the_profile_field_value',           'xprofile_filter_link_profile_data',  9, 2 );
-
-add_filter( 'xprofile_data_value_before_save',          'xprofile_sanitize_data_value_before_save', 1, 2 );
+add_filter( 'bp_xprofile_set_field_data_pre_validate',  'xprofile_filter_pre_validate_value_by_field_type', 10, 3 );
+add_filter( 'xprofile_data_value_before_save',          'xprofile_sanitize_data_value_before_save', 1, 4 );
 add_filter( 'xprofile_filtered_data_value_before_save', 'trim', 2 );
 
 /**
@@ -60,15 +61,16 @@ add_filter( 'xprofile_filtered_data_value_before_save', 'trim', 2 );
  * Run profile field values through kses with filterable allowed tags.
  *
  * @param string $content
+ * @param object $data_obj The BP_XProfile_ProfileData object
  * @return string $content
  */
-function xprofile_filter_kses( $content ) {
+function xprofile_filter_kses( $content, $data_obj = null ) {
 	global $allowedtags;
 
 	$xprofile_allowedtags             = $allowedtags;
 	$xprofile_allowedtags['a']['rel'] = array();
 
-	$xprofile_allowedtags = apply_filters( 'xprofile_allowed_tags', $xprofile_allowedtags );
+	$xprofile_allowedtags = apply_filters( 'xprofile_allowed_tags', $xprofile_allowedtags, $data_obj );
 	return wp_kses( $content, $xprofile_allowedtags );
 }
 
@@ -78,9 +80,10 @@ function xprofile_filter_kses( $content ) {
  * @param string $field_value
  * @param int $field_id
  * @param bool $reserialize Whether to reserialize arrays before returning. Defaults to true
+ * @param object $data_obj The BP_XProfile_ProfileData object
  * @return string
  */
-function xprofile_sanitize_data_value_before_save ( $field_value, $field_id, $reserialize = true ) {
+function xprofile_sanitize_data_value_before_save( $field_value, $field_id = 0, $reserialize = true, $data_obj = null ) {
 
 	// Return if empty
 	if ( empty( $field_value ) ) {
@@ -92,72 +95,132 @@ function xprofile_sanitize_data_value_before_save ( $field_value, $field_id, $re
 
 	// Filter single value
 	if ( !is_array( $field_value ) ) {
-		$kses_field_value     = xprofile_filter_kses( $field_value );
+		$kses_field_value     = xprofile_filter_kses( $field_value, $data_obj );
 		$filtered_field_value = wp_rel_nofollow( force_balance_tags( $kses_field_value ) );
-		$filtered_field_value = apply_filters( 'xprofile_filtered_data_value_before_save', $filtered_field_value, $field_value );
+		$filtered_field_value = apply_filters( 'xprofile_filtered_data_value_before_save', $filtered_field_value, $field_value, $data_obj );
 
 	// Filter each array item independently
 	} else {
 		$filtered_values = array();
 		foreach ( (array) $field_value as $value ) {
-			$kses_field_value       = xprofile_filter_kses( $value );
+			$kses_field_value       = xprofile_filter_kses( $value, $data_obj );
 			$filtered_value 	= wp_rel_nofollow( force_balance_tags( $kses_field_value ) );
-			$filtered_values[] = apply_filters( 'xprofile_filtered_data_value_before_save', $filtered_value, $value );
+			$filtered_values[] = apply_filters( 'xprofile_filtered_data_value_before_save', $filtered_value, $value, $data_obj );
 
 		}
 
-		if ( !empty( $reserialize ) )
+		if ( !empty( $reserialize ) ) {
 			$filtered_field_value = serialize( $filtered_values );
-		else
+		} else {
 			$filtered_field_value = $filtered_values;
+		}
 	}
 
 	return $filtered_field_value;
 }
 
 /**
- * xprofile_filter_format_field_value()
+ * Runs stripslashes on XProfile fields.
  *
- * Runs stripslashes on XProfile fields. If is field_type is 'datebox'
- * then the date will be formatted by bp_format_time().
- *
- * @since BuddyPress (1.0)
+ * @since BuddyPress (1.0.0)
  *
  * @param string $field_value XProfile field_value to be filtered.
  * @param string $field_type XProfile field_type to be filtered.
- *
- * @uses bp_format_time()
- *
  * @return string $field_value Filtered XProfile field_value. False on failure.
  */
 function xprofile_filter_format_field_value( $field_value, $field_type = '' ) {
-	if ( !isset( $field_value ) || empty( $field_value ) )
+
+	// Valid field values of 0 or '0' get caught by empty(), so we have an extra check for these. See #BP5731
+ 	if ( ! isset( $field_value ) || empty( $field_value ) && ( '0' !== $field_value ) ) {
 		return false;
+	}
 
-	if ( 'datebox' == $field_type ) {
+	if ( 'datebox' !== $field_type ) {
+		$field_value = str_replace( ']]>', ']]&gt;', $field_value );
+	}
 
-		// If Unix timestamp
-		if ( is_numeric( $field_value ) ) {
-			$field_value = bp_format_time( $field_value, true, false );
+	return stripslashes( $field_value );
+}
 
-		// If MySQL timestamp
-		} else {
-			$field_value = bp_format_time( strtotime( $field_value ), true, false );
+/**
+ * Apply display_filter() filters as defined by the BP_XProfile_Field_Type classes, when fetched inside a bp_has_profile() loop.
+ *
+ * @since BuddyPress (2.1.0)
+ *
+ * @param mixed $field_value Field value.
+ * @param string $field_type Field type.
+ * @return mixed
+ */
+function xprofile_filter_format_field_value_by_type( $field_value, $field_type = '' ) {
+	foreach ( bp_xprofile_get_field_types() as $type => $class ) {
+		if ( $type !== $field_type ) {
+			continue;
 		}
 
-	} else {
-		$field_value = str_replace(']]>', ']]&gt;', $field_value );
+		if ( method_exists( $class, 'display_filter' ) ) {
+			$field_value = call_user_func( array( $class, 'display_filter' ), $field_value );
+		}
 	}
 
-	return stripslashes( $field_value );
+	return $field_value;
 }
 
+/**
+ * Apply display_filter() filters as defined by the BP_XProfile_Field_Type classes, when fetched by xprofile_get_field_data().
+ *
+ * @since BuddyPress (2.1.0)
+ *
+ * @param mixed $field_value Field value.
+ * @param int $field_id Field type.
+ */
+function xprofile_filter_format_field_value_by_field_id( $field_value, $field_id ) {
+	$field = new BP_XProfile_Field( $field_id );
+	return xprofile_filter_format_field_value_by_type( $field_value, $field->type );
+}
+
+/**
+ * Apply pre_validate_filter() filters as defined by the BP_XProfile_Field_Type classes before validating.
+ *
+ * @since BuddyPress (2.1.0)
+ *
+ * @param mixed $value Value passed to the bp_xprofile_set_field_data_pre_validate
+ *        filter.
+ * @param BP_XProfile_Field $field Field object.
+ * @param BP_XProfile_Field_Type Field type object.
+ * @return mixed
+ */
+function xprofile_filter_pre_validate_value_by_field_type( $value, $field, $field_type_obj ) {
+	if ( method_exists( $field_type_obj, 'pre_validate_filter' ) ) {
+		$value = call_user_func( array( $field_type_obj, 'pre_validate_filter' ), $value );
+	}
+
+	return $value;
+}
+
+/**
+ * Filter an Extended Profile field value, and attempt to make clickable links
+ * to members search results out of them.
+ * 
+ * - Not run on datebox field types
+ * - Not run on values without commas with less than 5 words
+ * - URL's are made clickable
+ * - To disable: remove_filter( 'bp_get_the_profile_field_value', 'xprofile_filter_link_profile_data', 9, 2 );
+ *
+ * @since BuddyPress (1.1)
+ *
+ * @param string $field_value
+ * @param string  $field_type
+ * @return string
+ */
 function xprofile_filter_link_profile_data( $field_value, $field_type = 'textbox' ) {
-	if ( 'datebox' == $field_type )
+
+	if ( 'datebox' === $field_type ) {
 		return $field_value;
+	}
 
-	if ( !strpos( $field_value, ',' ) && ( count( explode( ' ', $field_value ) ) > 5 ) )
+	if ( !strpos( $field_value, ',' ) && ( count( explode( ' ', $field_value ) ) > 5 ) ) {
 		return $field_value;
+	}
 
 	$values = explode( ',', $field_value );
 
@@ -179,7 +242,7 @@ function xprofile_filter_link_profile_data( $field_value, $field_type = 'textbox
 				// Less than 5 spaces
 				} else {
 					$search_url   = add_query_arg( array( 's' => urlencode( $value ) ), bp_get_members_directory_permalink() );
-					$new_values[] = '<a href="' . $search_url . '" rel="nofollow">' . $value . '</a>';
+					$new_values[] = '<a href="' . esc_url( $search_url ) . '" rel="nofollow">' . $value . '</a>';
 				}
 			}
 		}
@@ -200,7 +263,8 @@ function xprofile_filter_link_profile_data( $field_value, $field_type = 'textbox
  * @param int $post_id
  * @return array $comments
  */
-function xprofile_filter_comments( $comments, $post_id ) {
+function xprofile_filter_comments( $comments, $post_id = 0 ) {
+
 	// Locate comment authors with WP accounts
 	foreach( (array) $comments as $comment ) {
 		if ( $comment->user_id ) {
@@ -238,13 +302,10 @@ add_filter( 'comments_array', 'xprofile_filter_comments', 10, 2 );
  *
  * @since BuddyPress (1.7)
  *
- * @global BuddyPress $bp
- * @global WPDB $wpdb
  * @param BP_User_Query $user_query
  * @param string $user_ids_sql
  */
-function bp_xprofile_filter_user_query_populate_extras( BP_User_Query $user_query, $user_ids_sql ) {
-	global $bp, $wpdb;
+function bp_xprofile_filter_user_query_populate_extras( BP_User_Query $user_query, $user_ids_sql = '' ) {
 
 	if ( ! bp_is_active( 'xprofile' ) ) {
 		return;
diff --git a/wp-content/plugins/buddypress/bp-xprofile/bp-xprofile-functions.php b/wp-content/plugins/buddypress/bp-xprofile/bp-xprofile-functions.php
index a165405bc..f6f2deedb 100644
--- a/wp-content/plugins/buddypress/bp-xprofile/bp-xprofile-functions.php
+++ b/wp-content/plugins/buddypress/bp-xprofile/bp-xprofile-functions.php
@@ -17,43 +17,110 @@ if ( !defined( 'ABSPATH' ) ) exit;
 
 /*** Field Group Management **************************************************/
 
+/**
+ * Fetch a set of field groups, populated with fields and field data.
+ *
+ * Procedural wrapper for BP_XProfile_Group::get() method.
+ *
+ * @since BuddyPress (2.1.0)
+ *
+ * @param array $args See {@link BP_XProfile_Group::get()} for description of
+ *        arguments.
+ * @return array $groups
+ */
+function bp_xprofile_get_groups( $args = array() ) {
+
+	$groups = BP_XProfile_Group::get( $args );
+
+	return apply_filters( 'bp_xprofile_get_groups', $groups, $args );
+}
+
+/**
+ * Insert a new profile field group
+ *
+ * @since BuddyPress (1.0.0)
+ *
+ * @param type $args
+ * @return boolean
+ */
 function xprofile_insert_field_group( $args = '' ) {
-	$defaults = array(
+
+	// Parse the arguments
+	$r = bp_parse_args( $args, array(
 		'field_group_id' => false,
 		'name'           => false,
 		'description'    => '',
 		'can_delete'     => true
-	);
-
-	$r = wp_parse_args( $args, $defaults );
-	extract( $r, EXTR_SKIP );
+	), 'xprofile_insert_field_group' );
 
-	if ( empty( $name ) )
+	// Bail if no group name
+	if ( empty( $r['name'] ) ) {
 		return false;
+	}
 
-	$field_group              = new BP_XProfile_Group( $field_group_id );
-	$field_group->name        = $name;
-	$field_group->description = $description;
-	$field_group->can_delete  = $can_delete;
+	// Create new field group object, maybe using an existing ID
+	$field_group              = new BP_XProfile_Group( $r['field_group_id'] );
+	$field_group->name        = $r['name'];
+	$field_group->description = $r['description'];
+	$field_group->can_delete  = $r['can_delete'];
 
 	return $field_group->save();
 }
 
-function xprofile_get_field_group( $field_group_id ) {
+/**
+ * Get a specific profile field group
+ *
+ * @since BuddyPress (1.0.0)
+ *
+ * @param int $field_group_id
+ * @return boolean|BP_XProfile_Group
+ */
+function xprofile_get_field_group( $field_group_id = 0 ) {
+
+	// Try to get a specific field group by ID
 	$field_group = new BP_XProfile_Group( $field_group_id );
 
-	if ( empty( $field_group->id ) )
+	// Bail if group was not found
+	if ( empty( $field_group->id ) ) {
 		return false;
+	}
 
+	// Return field group
 	return $field_group;
 }
 
-function xprofile_delete_field_group( $field_group_id ) {
-	$field_group = new BP_XProfile_Group( $field_group_id );
+/**
+ * Delete a specific profile field group
+ *
+ * @since BuddyPress (1.0.0)
+ *
+ * @param int $field_group_id
+ * @return boolean
+ */
+function xprofile_delete_field_group( $field_group_id = 0 ) {
+
+	// Try to get a specific field group by ID
+	$field_group = xprofile_get_field_group( $field_group_id );
+
+	// Bail if group was not found
+	if ( false === $field_group ) {
+		return false;
+	}
+
+	// Return the results of trying to delete the field group
 	return $field_group->delete();
 }
 
-function xprofile_update_field_group_position( $field_group_id, $position ) {
+/**
+ * Update the position of a specific profile field group
+ *
+ * @since BuddyPress (1.0.0)
+ *
+ * @param int $field_group_id
+ * @param int $position
+ * @return bool
+ */
+function xprofile_update_field_group_position( $field_group_id = 0, $position = 0 ) {
 	return BP_XProfile_Group::update_position( $field_group_id, $position );
 }
 
@@ -72,6 +139,7 @@ function bp_xprofile_get_field_types() {
 		'datebox'        => 'BP_XProfile_Field_Type_Datebox',
 		'multiselectbox' => 'BP_XProfile_Field_Type_Multiselectbox',
 		'number'         => 'BP_XProfile_Field_Type_Number',
+		'url'            => 'BP_XProfile_Field_Type_URL',
 		'radio'          => 'BP_XProfile_Field_Type_Radiobutton',
 		'selectbox'      => 'BP_XProfile_Field_Type_Selectbox',
 		'textarea'       => 'BP_XProfile_Field_Type_Textarea',
@@ -104,72 +172,109 @@ function bp_xprofile_create_field_type( $type ) {
 	}
 }
 
+/**
+ * Insert an xprofile field.
+ *
+ * @param array $args {
+ *     Array of arguments.
+ *     @type int $field_id Optional. Pass the ID of an existing field to edit
+ *           that field.
+ *     @type int $field_group_id ID of the associated field group.
+ *     @type int $parent_id Optional. ID of the parent field.
+ *     @type string $type Field type. Checked against a field_types whitelist.
+ *     @type string $name Name of the new field.
+ *     @type string $description Optional. Descriptive text for the field.
+ *     @type bool $is_required Optional. Whether users must provide a value for
+ *           the field. Default: false.
+ *     @type bool $can_delete Optional. Whether admins can delete this field in
+ *           the Dashboard interface. Generally this is true only for the Name
+ *           field, which is required throughout BP. Default: true.
+ *     @type string $order_by Optional. For field types that support options
+ *           (such as 'radio'), this flag determines whether the sort order of
+ *           the options will be 'default' (order created) or 'custom'.
+ *     @type bool $is_default_option Optional. For the 'option' field type,
+ *           setting this value to true means that it'll be the default value
+ *           for the parent field when the user has not yet overridden.
+ *     @type int $option_order Optional. For the 'option' field type, this
+ *           determines the order in which the options appear.
+ * }
+ * @return bool|int False on failure, ID of new field on success.
+ */
 function xprofile_insert_field( $args = '' ) {
 	global $bp;
 
-	extract( $args );
-
-	/**
-	 * Possible parameters (pass as assoc array):
-	 *	'field_id'
-	 *	'field_group_id'
-	 *	'parent_id'
-	 *	'type'
-	 *	'name'
-	 *	'description'
-	 *	'is_required'
-	 *	'can_delete'
-	 *	'field_order'
-	 *	'order_by'
-	 *	'is_default_option'
-	 *	'option_order'
-	 */
+	$r = wp_parse_args( $args, array(
+		'field_id' => null,
+		'field_group_id' => null,
+		'parent_id' => null,
+		'type' => '',
+		'name' => '',
+		'description' => '',
+		'is_required' => false,
+		'can_delete' => true,
+		'order_by' => '',
+		'is_default_option' => false,
+		'option_order' => null,
+	) );
 
-	// Check we have the minimum details
-	if ( empty( $field_group_id ) )
+	// field_group_id is required
+	if ( empty( $r['field_group_id'] ) ) {
 		return false;
+	}
 
 	// Check this is a valid field type
-	if ( !in_array( $type, (array) $bp->profile->field_types ) )
+	if ( ! in_array( $r['type'], (array) $bp->profile->field_types ) ) {
 		return false;
+	}
 
 	// Instantiate a new field object
-	if ( !empty( $field_id ) )
-		$field = new BP_XProfile_Field( $field_id );
-	else
+	if ( ! empty( $r['field_id'] ) ) {
+		$field = new BP_XProfile_Field( $r['field_id'] );
+	} else {
 		$field = new BP_XProfile_Field;
+	}
 
-	$field->group_id = $field_group_id;
+	$field->group_id = $r['field_group_id'];
 
-	if ( !empty( $parent_id ) )
-		$field->parent_id = $parent_id;
+	if ( ! empty( $r['parent_id'] ) ) {
+		$field->parent_id = $r['parent_id'];
+	}
 
-	if ( !empty( $type ) )
-		$field->type = $type;
+	if ( ! empty( $r['type'] ) ) {
+		$field->type = $r['type'];
+	}
 
-	if ( !empty( $name ) )
-		$field->name = $name;
+	if ( ! empty( $r['name'] ) ) {
+		$field->name = $r['name'];
+	}
 
-	if ( !empty( $description ) )
-		$field->description = $description;
+	if ( ! empty( $r['description'] ) ) {
+		$field->description = $r['description'];
+	}
 
-	if ( !empty( $is_required ) )
-		$field->is_required = $is_required;
+	if ( ! empty( $r['is_required'] ) ) {
+		$field->is_required = $r['is_required'];
+	}
 
-	if ( !empty( $can_delete ) )
-		$field->can_delete = $can_delete;
+	if ( ! empty( $r['can_delete'] ) ) {
+		$field->can_delete = $r['can_delete'];
+	}
 
-	if ( !empty( $field_order ) )
-		$field->field_order = $field_order;
+	if ( ! empty( $r['field_order'] ) ) {
+		$field->field_order = $r['field_order'];
+	}
 
-	if ( !empty( $order_by ) )
-		$field->order_by = $order_by;
+	if ( ! empty( $r['order_by'] ) ) {
+		$field->order_by = $r['order_by'];
+	}
 
-	if ( !empty( $is_default_option ) )
-		$field->is_default_option = $is_default_option;
+	if ( ! empty( $r['is_default_option'] ) ) {
+		$field->is_default_option = $r['is_default_option'];
+	}
 
-	if ( !empty( $option_order ) )
-		$field->option_order = $option_order;
+	if ( ! empty( $r['option_order'] ) ) {
+		$field->option_order = $r['option_order'];
+	}
 
 	return $field->save();
 }
@@ -189,32 +294,36 @@ function xprofile_delete_field( $field_id ) {
 /**
  * Fetches profile data for a specific field for the user.
  *
- * When the field value is serialized, this function unserializes and filters each item in the array
- * that results.
+ * When the field value is serialized, this function unserializes and filters
+ * each item in the array.
  *
  * @package BuddyPress Core
- * @param mixed $field The ID of the field, or the $name of the field.
- * @param int $user_id The ID of the user
+ * @param mixed $field         The ID of the field, or the $name of the field.
+ * @param int $user_id         The ID of the user
  * @param string $multi_format How should array data be returned? 'comma' if you want a
- *   comma-separated string; 'array' if you want an array
+ *                             comma-separated string; 'array' if you want an array
  * @uses BP_XProfile_ProfileData::get_value_byid() Fetches the value based on the params passed.
  * @return mixed The profile field data.
  */
 function xprofile_get_field_data( $field, $user_id = 0, $multi_format = 'array' ) {
 
-	if ( empty( $user_id ) )
+	if ( empty( $user_id ) ) {
 		$user_id = bp_displayed_user_id();
+	}
 
-	if ( empty( $user_id ) )
+	if ( empty( $user_id ) ) {
 		return false;
+	}
 
-	if ( is_numeric( $field ) )
+	if ( is_numeric( $field ) ) {
 		$field_id = $field;
-	else
+	} else {
 		$field_id = xprofile_get_field_id_from_name( $field );
+	}
 
-	if ( empty( $field_id ) )
+	if ( empty( $field_id ) ) {
 		return false;
+	}
 
 	$values = maybe_unserialize( BP_XProfile_ProfileData::get_value_byid( $field_id, $user_id ) );
 
@@ -239,24 +348,21 @@ function xprofile_get_field_data( $field, $user_id = 0, $multi_format = 'array'
  *
  * @package BuddyPress Core
  * @param int|string $field The ID of the field, or the $name of the field.
- * @param int|$user_id The ID of the user
- * @param mixed The value for the field you want to set for the user.
- * @global BuddyPress $bp The one true BuddyPress instance
+ * @param int|$user_id      The ID of the user
+ * @param mixed $value      The value for the field you want to set for the user.
+ * @param $is_required      Whether or not the field is required
  * @uses xprofile_get_field_id_from_name() Gets the ID for the field based on the name.
  * @return bool True on success, false on failure.
  */
 function xprofile_set_field_data( $field, $user_id, $value, $is_required = false ) {
 
-	if ( is_numeric( $field ) )
+	if ( is_numeric( $field ) ) {
 		$field_id = $field;
-	else
+	} else {
 		$field_id = xprofile_get_field_id_from_name( $field );
+	}
 
-	if ( empty( $field_id ) )
-		return false;
-
-	// Special-case support for integer 0 for the number field type
-	if ( $is_required && ! is_integer( $value ) && $value !== '0' && ( empty( $value ) || ! is_array( $value ) && ! strlen( trim( $value ) ) ) ) {
+	if ( empty( $field_id ) ) {
 		return false;
 	}
 
@@ -264,6 +370,25 @@ function xprofile_set_field_data( $field, $user_id, $value, $is_required = false
 	$field_type     = BP_XProfile_Field::get_type( $field_id );
 	$field_type_obj = bp_xprofile_create_field_type( $field_type );
 
+	/**
+	 * Filter the raw submitted profile field value.
+	 *
+	 * Use this filter to modify the values submitted by users before
+	 * doing field-type-specific validation.
+	 *
+	 * @since BuddyPress (2.1.0)
+	 *
+	 * @param mixed $value Value passed to xprofile_set_field_data()
+	 * @param BP_XProfile_Field $field Field object.
+	 * @param BP_XProfile_Field_Type $field_type_obj Field type object.
+	 */
+	$value = apply_filters( 'bp_xprofile_set_field_data_pre_validate', $value, $field, $field_type_obj );
+
+	// Special-case support for integer 0 for the number field type
+	if ( $is_required && ! is_integer( $value ) && $value !== '0' && ( empty( $value ) || ! is_array( $value ) && ! strlen( trim( $value ) ) ) ) {
+		return false;
+	}
+
 	/**
 	 * Certain types of fields (checkboxes, multiselects) may come through empty.
 	 * Save as empty array so this isn't overwritten by the default on next edit.
@@ -363,16 +488,24 @@ function xprofile_get_field_visibility_level( $field_id = 0, $user_id = 0 ) {
 	return $current_level;
 }
 
-function xprofile_delete_field_data( $field, $user_id ) {
-	if ( is_numeric( $field ) )
-		$field_id = $field;
-	else
+function xprofile_delete_field_data( $field = '', $user_id = 0 ) {
+
+	// Get the field ID
+	if ( is_numeric( $field ) ) {
+		$field_id = (int) $field;
+	} else {
 		$field_id = xprofile_get_field_id_from_name( $field );
+	}
 
-	if ( empty( $field_id ) || empty( $user_id ) )
+	// Bail if field or user ID are empty
+	if ( empty( $field_id ) || empty( $user_id ) ) {
 		return false;
+	}
 
+	// Get the profile field data to delete
 	$field = new BP_XProfile_ProfileData( $field_id, $user_id );
+
+	// Delete the field data
 	return $field->delete();
 }
 
@@ -383,12 +516,13 @@ function xprofile_check_is_required_field( $field_id ) {
 	$retval = false;
 
 	// Super admins can skip required check
-	if ( bp_current_user_can( 'bp_moderate' ) && !is_admin() )
+	if ( bp_current_user_can( 'bp_moderate' ) && ! is_admin() ) {
 		$retval = false;
 
 	// All other users will use the field's setting
-	elseif ( isset( $field->is_required ) )
+	} elseif ( isset( $field->is_required ) ) {
 		$retval = $field->is_required;
+	}
 
 	return (bool) $retval;
 }
@@ -419,13 +553,15 @@ function xprofile_get_field_id_from_name( $field_name ) {
 function xprofile_get_random_profile_data( $user_id, $exclude_fullname = true ) {
 	$field_data = BP_XProfile_ProfileData::get_random( $user_id, $exclude_fullname );
 
-	if ( empty( $field_data ) )
+	if ( empty( $field_data ) ) {
 		return false;
+	}
 
 	$field_data[0]->value = xprofile_format_profile_field( $field_data[0]->type, $field_data[0]->value );
 
-	if ( empty( $field_data[0]->value ) )
+	if ( empty( $field_data[0]->value ) ) {
 		return false;
+	}
 
 	return apply_filters( 'xprofile_get_random_profile_data', $field_data );
 }
@@ -436,54 +572,91 @@ function xprofile_get_random_profile_data( $user_id, $exclude_fullname = true )
  * @package BuddyPress Core
  * @param string $field_type The type of field: datebox, selectbox, textbox etc
  * @param string $field_value The actual value
- * @uses bp_format_time() Formats a time value based on the WordPress date format setting
  * @return string|bool The formatted value, or false if value is empty
  */
 function xprofile_format_profile_field( $field_type, $field_value ) {
-	if ( !isset( $field_value ) || empty( $field_value ) )
+
+	if ( empty( $field_value ) ) {
 		return false;
+	}
 
 	$field_value = bp_unserialize_profile_field( $field_value );
 
-	if ( 'datebox' == $field_type ) {
-		$field_value = bp_format_time( $field_value, true );
-	} else {
+	if ( 'datebox' != $field_type ) {
 		$content = $field_value;
 		$field_value = str_replace( ']]>', ']]&gt;', $content );
 	}
 
-	return stripslashes_deep( $field_value );
+	return xprofile_filter_format_field_value_by_type( stripslashes_deep( $field_value ), $field_type );
 }
 
 function xprofile_update_field_position( $field_id, $position, $field_group_id ) {
 	return BP_XProfile_Field::update_position( $field_id, $position, $field_group_id );
 }
 
+/**
+ * Replace the displayed and logged-in userss fullnames with the xprofile name, if required.
+ *
+ * The Members component uses the logged-in user's display_name to set the
+ * value of buddypress()->loggedin_user->fullname. However, in cases where
+ * profile sync is disabled, display_name may diverge from the xprofile
+ * fullname field value, and the xprofile field should take precedence.
+ *
+ * Runs at bp_setup_globals:100 to ensure that all components have loaded their
+ * globals before attempting any overrides.
+ *
+ * @since BuddyPress (2.0.0)
+ */
+function xprofile_override_user_fullnames() {
+	// If sync is enabled, the two names will match. No need to continue.
+	if ( ! bp_disable_profile_sync() ) {
+		return;
+	}
+
+	if ( bp_loggedin_user_id() ) {
+		buddypress()->loggedin_user->fullname = bp_core_get_user_displayname( bp_loggedin_user_id() );
+	}
+
+	if ( bp_displayed_user_id() ) {
+		buddypress()->displayed_user->fullname = bp_core_get_user_displayname( bp_displayed_user_id() );
+	}
+}
+add_action( 'bp_setup_globals', 'xprofile_override_user_fullnames', 100 );
+
 /**
  * Setup the avatar upload directory for a user.
  *
+ * @since BuddyPress (1.0.0)
+ *
  * @package BuddyPress Core
+ *
  * @param string $directory The root directory name. Optional.
- * @param int $user_id The user ID. Optional.
- * @return array() containing the path and URL plus some other settings.
+ * @param int    $user_id   The user ID. Optional.
+ *
+ * @return array() Array containing the path, URL, and other helpful settings.
  */
-function xprofile_avatar_upload_dir( $directory = false, $user_id = 0 ) {
+function xprofile_avatar_upload_dir( $directory = 'avatars', $user_id = 0 ) {
 
-	if ( empty( $user_id ) )
+	// Use displayed user if no user ID was passed
+	if ( empty( $user_id ) ) {
 		$user_id = bp_displayed_user_id();
+	}
 
-	if ( empty( $directory ) )
+	// Failsafe against accidentally nooped $directory parameter
+	if ( empty( $directory ) ) {
 		$directory = 'avatars';
+	}
 
-	$path    = bp_core_avatar_upload_path() . '/avatars/' . $user_id;
+	$path    = bp_core_avatar_upload_path() . '/' . $directory. '/' . $user_id;
 	$newbdir = $path;
 
-	if ( !file_exists( $path ) )
+	if ( ! file_exists( $path ) ) {
 		@wp_mkdir_p( $path );
+	}
 
-	$newurl    = bp_core_avatar_url() . '/avatars/' . $user_id;
+	$newurl    = bp_core_avatar_url() . '/' . $directory. '/' . $user_id;
 	$newburl   = $newurl;
-	$newsubdir = '/avatars/' . $user_id;
+	$newsubdir = '/' . $directory. '/' . $user_id;
 
 	return apply_filters( 'xprofile_avatar_upload_dir', array(
 		'path'    => $path,
@@ -512,14 +685,29 @@ function bp_xprofile_bp_user_query_search( $sql, BP_User_Query $query ) {
 
 	$bp = buddypress();
 
-	$search_terms_clean = esc_sql( esc_sql( $query->query_vars['search_terms'] ) );
+	$search_terms_clean = bp_esc_like( wp_kses_normalize_entities( $query->query_vars['search_terms'] ) );
+
+	if ( $query->query_vars['search_wildcard'] === 'left' ) {
+		$search_terms_nospace = '%' . $search_terms_clean;
+		$search_terms_space   = '%' . $search_terms_clean . ' %';
+	} elseif ( $query->query_vars['search_wildcard'] === 'right' ) {
+		$search_terms_nospace =        $search_terms_clean . '%';
+		$search_terms_space   = '% ' . $search_terms_clean . '%';
+	} else {
+		$search_terms_nospace = '%' . $search_terms_clean . '%';
+		$search_terms_space   = '%' . $search_terms_clean . '%';
+	}
 
 	// Combine the core search (against wp_users) into a single OR clause
 	// with the xprofile_data search
+	$search_xprofile = $wpdb->prepare(
+		"u.{$query->uid_name} IN ( SELECT user_id FROM {$bp->profile->table_name_data} WHERE value LIKE %s OR value LIKE %s )",
+		$search_terms_nospace,
+		$search_terms_space
+	);
+
 	$search_core     = $sql['where']['search'];
-	$search_xprofile = "u.{$query->uid_name} IN ( SELECT user_id FROM {$bp->profile->table_name_data} WHERE value LIKE '%{$search_terms_clean}%' )";
 	$search_combined = "( {$search_xprofile} OR {$search_core} )";
-
 	$sql['where']['search'] = $search_combined;
 
 	return $sql;
@@ -533,16 +721,18 @@ add_action( 'bp_user_query_uid_clauses', 'bp_xprofile_bp_user_query_search', 10,
  */
 function xprofile_sync_wp_profile( $user_id = 0 ) {
 
-	$bp = buddypress();
-
-	if ( !empty( $bp->site_options['bp-disable-profile-sync'] ) && (int) $bp->site_options['bp-disable-profile-sync'] )
+	// Bail if profile syncing is disabled
+	if ( bp_disable_profile_sync() ) {
 		return true;
+	}
 
-	if ( empty( $user_id ) )
+	if ( empty( $user_id ) ) {
 		$user_id = bp_loggedin_user_id();
+	}
 
-	if ( empty( $user_id ) )
+	if ( empty( $user_id ) ) {
 		return false;
+	}
 
 	$fullname = xprofile_get_field_data( bp_xprofile_fullname_field_id(), $user_id );
 	$space    = strpos( $fullname, ' ' );
@@ -575,10 +765,11 @@ add_action( 'bp_core_activated_user',   'xprofile_sync_wp_profile' );
  * @package BuddyPress Core
  */
 function xprofile_sync_bp_profile( &$errors, $update, &$user ) {
-	global $bp;
 
-	if ( ( !empty( $bp->site_options['bp-disable-profile-sync'] ) && (int) $bp->site_options['bp-disable-profile-sync'] ) || !$update || $errors->get_error_codes() )
+	// Bail if profile syncing is disabled
+	if ( bp_disable_profile_sync() || ! $update || $errors->get_error_codes() ) {
 		return;
+	}
 
 	xprofile_set_field_data( bp_xprofile_fullname_field_id(), $user->ID, $user->display_name );
 }
@@ -714,7 +905,7 @@ function bp_xprofile_update_meta( $object_id, $object_type, $meta_key, $meta_val
  * @param string $object_type Type of object. 'group', 'field', or 'data'.
  * @param string $meta_key Metadata key.
  * @param mixed $meta_value Metadata value.
- * @param bool $unique. Optional. Whether to enforce a single metadata value
+ * @param bool $unique Optional. Whether to enforce a single metadata value
  *        for the given key. If true, and the object already has a value for
  *        the key, no change will be made. Default: false.
  * @return int|bool The meta ID on successful update, false on failure.
diff --git a/wp-content/plugins/buddypress/bp-xprofile/bp-xprofile-loader.php b/wp-content/plugins/buddypress/bp-xprofile/bp-xprofile-loader.php
index 71d84e30c..4e9fd6780 100644
--- a/wp-content/plugins/buddypress/bp-xprofile/bp-xprofile-loader.php
+++ b/wp-content/plugins/buddypress/bp-xprofile/bp-xprofile-loader.php
@@ -38,7 +38,7 @@ class BP_XProfile_Component extends BP_Component {
 	public function __construct() {
 		parent::start(
 			'xprofile',
-			__( 'Extended Profiles', 'buddypress' ),
+			_x( 'Extended Profiles', 'Component page <title>', 'buddypress' ),
 			buddypress()->plugin_dir,
 			array(
 				'adminbar_myaccount_order' => 20
@@ -63,7 +63,6 @@ class BP_XProfile_Component extends BP_Component {
 			'filters',
 			'settings',
 			'template',
-			'buddybar',
 			'functions',
 		);
 
@@ -102,26 +101,31 @@ class BP_XProfile_Component extends BP_Component {
 		// Set the support field type ids
 		$this->field_types = apply_filters( 'xprofile_field_types', array_keys( bp_xprofile_get_field_types() ) );
 
+		// 'option' is a special case. It is not a top-level field, so
+		// does not have an associated BP_XProfile_Field_Type class,
+		// but it must be whitelisted
+		$this->field_types[] = 'option';
+
 		// Register the visibility levels. See bp_xprofile_get_visibility_levels() to filter
 		$this->visibility_levels = array(
 			'public' => array(
 				'id'	  => 'public',
-				'label' => __( 'Everyone', 'buddypress' )
+				'label' => _x( 'Everyone', 'Visibility level setting', 'buddypress' )
 			),
 			'adminsonly' => array(
 				'id'	  => 'adminsonly',
-				'label' => __( 'Only Me', 'buddypress' )
+				'label' => _x( 'Only Me', 'Visibility level setting', 'buddypress' )
 			),
 			'loggedin' => array(
 				'id'	  => 'loggedin',
-				'label' => __( 'All Members', 'buddypress' )
+				'label' => _x( 'All Members', 'Visibility level setting', 'buddypress' )
 			)
 		);
 
 		if ( bp_is_active( 'friends' ) ) {
 			$this->visibility_levels['friends'] = array(
 				'id'	=> 'friends',
-				'label'	=> __( 'My Friends', 'buddypress' )
+				'label'	=> _x( 'My Friends', 'Visibility level setting', 'buddypress' )
 			);
 		}
 
@@ -151,7 +155,7 @@ class BP_XProfile_Component extends BP_Component {
 	}
 
 	/**
-	 * Setup BuddyBar navigation
+	 * Set up navigation.
 	 *
 	 * @global BuddyPress $bp The one true BuddyPress instance
 	 */
@@ -161,7 +165,7 @@ class BP_XProfile_Component extends BP_Component {
 
 		// Add 'Profile' to the main navigation
 		$main_nav = array(
-			'name'                => __( 'Profile', 'buddypress' ),
+			'name'                => _x( 'Profile', 'Profile header menu', 'buddypress' ),
 			'slug'                => $this->slug,
 			'position'            => 20,
 			'screen_function'     => 'xprofile_screen_display_profile',
@@ -182,7 +186,7 @@ class BP_XProfile_Component extends BP_Component {
 
 		// Add the subnav items to the profile
 		$sub_nav[] = array(
-			'name'            => __( 'View', 'buddypress' ),
+			'name'            => _x( 'View', 'Profile header sub menu', 'buddypress' ),
 			'slug'            => 'public',
 			'parent_url'      => $profile_link,
 			'parent_slug'     => $this->slug,
@@ -192,7 +196,7 @@ class BP_XProfile_Component extends BP_Component {
 
 		// Edit Profile
 		$sub_nav[] = array(
-			'name'            => __( 'Edit', 'buddypress' ),
+			'name'            => _x( 'Edit','Profile header sub menu', 'buddypress' ),
 			'slug'            => 'edit',
 			'parent_url'      => $profile_link,
 			'parent_slug'     => $this->slug,
@@ -204,7 +208,7 @@ class BP_XProfile_Component extends BP_Component {
 		// Change Avatar
 		if ( buddypress()->avatar->show_avatars ) {
 			$sub_nav[] = array(
-				'name'            => __( 'Change Avatar', 'buddypress' ),
+				'name'            => _x( 'Change Profile Photo', 'Profile header sub menu', 'buddypress' ),
 				'slug'            => 'change-avatar',
 				'parent_url'      => $profile_link,
 				'parent_slug'     => $this->slug,
@@ -214,25 +218,47 @@ class BP_XProfile_Component extends BP_Component {
 			);
 		}
 
-		// Privacy Settings
-		if ( bp_is_active( 'settings' ) ) {
+		// The Settings > Profile nav item can only be set up after
+		// the Settings component has run its own nav routine
+		add_action( 'bp_settings_setup_nav', array( $this, 'setup_settings_nav' ) );
 
-			// Get the settings slug
-			$settings_slug = bp_get_settings_slug();
+		parent::setup_nav( $main_nav, $sub_nav );
+	}
 
-			// Add the sub-navigation
-			$sub_nav[] = array(
-				'name'            => __( 'Profile', 'buddypress' ),
-				'slug'            => 'profile',
-				'parent_url'      => trailingslashit( $user_domain . $settings_slug ),
-				'parent_slug'     => $settings_slug,
-				'screen_function' => 'bp_xprofile_screen_settings',
-				'position'        => 30,
-				'user_has_access' => bp_core_can_edit_settings()
-			);
+	/**
+	 * Set up the Settings > Profile nav item.
+	 *
+	 * Loaded in a separate method because the Settings component may not
+	 * be loaded in time for BP_XProfile_Component::setup_nav().
+	 *
+	 * @since BuddyPress (2.1.0)
+	 */
+	public function setup_settings_nav() {
+		if ( ! bp_is_active( 'settings' ) ) {
+			return;
 		}
 
-		parent::setup_nav( $main_nav, $sub_nav );
+		// Determine user to use
+		if ( bp_displayed_user_domain() ) {
+			$user_domain = bp_displayed_user_domain();
+		} elseif ( bp_loggedin_user_domain() ) {
+			$user_domain = bp_loggedin_user_domain();
+		} else {
+			return;
+		}
+
+		// Get the settings slug
+		$settings_slug = bp_get_settings_slug();
+
+		bp_core_new_subnav_item( array(
+			'name'            => _x( 'Profile', 'Profile settings  sub nav', 'buddypress' ),
+			'slug'            => 'profile',
+			'parent_url'      => trailingslashit( $user_domain . $settings_slug ),
+			'parent_slug'     => $settings_slug,
+			'screen_function' => 'bp_xprofile_screen_settings',
+			'position'        => 30,
+			'user_has_access' => bp_core_can_edit_settings()
+		) );
 	}
 
 	/**
@@ -254,7 +280,7 @@ class BP_XProfile_Component extends BP_Component {
 			$wp_admin_nav[] = array(
 				'parent' => $bp->my_account_menu_id,
 				'id'     => 'my-account-' . $this->id,
-				'title'  => __( 'Profile', 'buddypress' ),
+				'title'  => _x( 'Profile', 'My Account Profile', 'buddypress' ),
 				'href'   => trailingslashit( $profile_link )
 			);
 
@@ -262,7 +288,7 @@ class BP_XProfile_Component extends BP_Component {
 			$wp_admin_nav[] = array(
 				'parent' => 'my-account-' . $this->id,
 				'id'     => 'my-account-' . $this->id . '-public',
-				'title'  => __( 'View', 'buddypress' ),
+				'title'  => _x( 'View', 'My Account Profile sub nav', 'buddypress' ),
 				'href'   => trailingslashit( $profile_link . 'public' )
 			);
 
@@ -270,7 +296,7 @@ class BP_XProfile_Component extends BP_Component {
 			$wp_admin_nav[] = array(
 				'parent' => 'my-account-' . $this->id,
 				'id'     => 'my-account-' . $this->id . '-edit',
-				'title'  => __( 'Edit', 'buddypress' ),
+				'title'  => _x( 'Edit', 'My Account Profile sub nav', 'buddypress' ),
 				'href'   => trailingslashit( $profile_link . 'edit' )
 			);
 
@@ -279,7 +305,7 @@ class BP_XProfile_Component extends BP_Component {
 				$wp_admin_nav[] = array(
 					'parent' => 'my-account-' . $this->id,
 					'id'     => 'my-account-' . $this->id . '-change-avatar',
-					'title'  => __( 'Change Avatar', 'buddypress' ),
+					'title'  => _x( 'Change Profile Photo', 'My Account Profile sub nav', 'buddypress' ),
 					'href'   => trailingslashit( $profile_link . 'change-avatar' )
 				);
 			}
@@ -306,12 +332,12 @@ class BP_XProfile_Component extends BP_Component {
 
 		if ( bp_is_profile_component() ) {
 			if ( bp_is_my_profile() ) {
-				$bp->bp_options_title = __( 'My Profile', 'buddypress' );
+				$bp->bp_options_title = _x( 'My Profile', 'Page title', 'buddypress' );
 			} else {
 				$bp->bp_options_avatar = bp_core_fetch_avatar( array(
 					'item_id' => bp_displayed_user_id(),
 					'type'    => 'thumb',
-					'alt'	  => sprintf( __( 'Profile picture of %s', 'buddypress' ), bp_get_displayed_user_fullname() )
+					'alt'	  => sprintf( _x( 'Profile picture of %s', 'Avatar alt', 'buddypress' ), bp_get_displayed_user_fullname() )
 				) );
 				$bp->bp_options_title = bp_get_displayed_user_fullname();
 			}
@@ -336,7 +362,7 @@ class BP_XProfile_Component extends BP_Component {
 		$wp_admin_nav[] = array(
 			'parent' => 'my-account-' . buddypress()->settings->id,
 			'id'     => 'my-account-' . buddypress()->settings->id . '-profile',
-			'title'  => __( 'Profile', 'buddypress' ),
+			'title'  => _x( 'Profile', 'My Account Settings sub nav', 'buddypress' ),
 			'href'   => trailingslashit( $settings_link . 'profile' )
 		);
 
@@ -350,4 +376,4 @@ function bp_setup_xprofile() {
 	if ( !isset( $bp->profile->id ) )
 		$bp->profile = new BP_XProfile_Component();
 }
-add_action( 'bp_setup_components', 'bp_setup_xprofile', 6 );
+add_action( 'bp_setup_components', 'bp_setup_xprofile', 2 );
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/bp-xprofile/bp-xprofile-screens.php b/wp-content/plugins/buddypress/bp-xprofile/bp-xprofile-screens.php
index cd0fa3389..2b9412e2c 100644
--- a/wp-content/plugins/buddypress/bp-xprofile/bp-xprofile-screens.php
+++ b/wp-content/plugins/buddypress/bp-xprofile/bp-xprofile-screens.php
@@ -117,26 +117,29 @@ function xprofile_screen_edit_profile() {
 					'value'      => xprofile_get_field_data( $field_id, bp_displayed_user_id() ),
 					'visibility' => xprofile_get_field_visibility_level( $field_id, bp_displayed_user_id() ),
 				);
+
+				// Update the field data and visibility level
+				xprofile_set_field_visibility_level( $field_id, bp_displayed_user_id(), $visibility_level );
+				$field_updated = xprofile_set_field_data( $field_id, bp_displayed_user_id(), $value, $is_required[ $field_id ] );
+				$value         = xprofile_get_field_data( $field_id, bp_displayed_user_id() );
+
 				$new_values[ $field_id ] = array(
 					'value'      => $value,
-					'visibility' => $visibility_level,
+					'visibility' => xprofile_get_field_visibility_level( $field_id, bp_displayed_user_id() ),
 				);
 
-				if ( !xprofile_set_field_data( $field_id, bp_displayed_user_id(), $value, $is_required[$field_id] ) ) {
+				if ( ! $field_updated ) {
 					$errors = true;
 				} else {
 					do_action( 'xprofile_profile_field_data_updated', $field_id, $value );
 				}
-
-				// Save the visibility level
-				xprofile_set_field_visibility_level( $field_id, bp_displayed_user_id(), $visibility_level );
 			}
 
 			do_action( 'xprofile_updated_profile', bp_displayed_user_id(), $posted_field_ids, $errors, $old_values, $new_values );
 
 			// Set the feedback messages
 			if ( !empty( $errors ) ) {
-				bp_core_add_message( __( 'There was a problem updating some of your profile information, please try again.', 'buddypress' ), 'error' );
+				bp_core_add_message( __( 'There was a problem updating some of your profile information; please try again.', 'buddypress' ), 'error' );
 			} else {
 				bp_core_add_message( __( 'Changes saved.', 'buddypress' ) );
 			}
@@ -206,11 +209,11 @@ function xprofile_screen_change_avatar() {
 		);
 
 		if ( ! bp_core_avatar_handle_crop( $args ) ) {
-			bp_core_add_message( __( 'There was a problem cropping your avatar.', 'buddypress' ), 'error' );
+			bp_core_add_message( __( 'There was a problem cropping your profile photo.', 'buddypress' ), 'error' );
 		} else {
 			do_action( 'xprofile_avatar_uploaded' );
-			bp_core_add_message( __( 'Your new avatar was uploaded successfully.', 'buddypress' ) );
-			bp_core_redirect( bp_loggedin_user_domain() );
+			bp_core_add_message( __( 'Your new profile photo was uploaded successfully.', 'buddypress' ) );
+			bp_core_redirect( bp_displayed_user_domain() );
 		}
 	}
 
diff --git a/wp-content/plugins/buddypress/bp-xprofile/bp-xprofile-template.php b/wp-content/plugins/buddypress/bp-xprofile/bp-xprofile-template.php
index d27c79b99..5c9e53fc2 100644
--- a/wp-content/plugins/buddypress/bp-xprofile/bp-xprofile-template.php
+++ b/wp-content/plugins/buddypress/bp-xprofile/bp-xprofile-template.php
@@ -25,7 +25,7 @@ class BP_XProfile_Data_Template {
 	var $user_id;
 
 	function __construct( $user_id, $profile_group_id, $hide_empty_groups = false, $fetch_fields = false, $fetch_field_data = false, $exclude_groups = false, $exclude_fields = false, $hide_empty_fields = false, $fetch_visibility_level = false, $update_meta_cache = true ) {
-		$this->groups = BP_XProfile_Group::get( array(
+		$this->groups = bp_xprofile_get_groups( array(
 			'profile_group_id'    => $profile_group_id,
 			'user_id'             => $user_id,
 			'hide_empty_groups'   => $hide_empty_groups,
@@ -142,9 +142,14 @@ class BP_XProfile_Data_Template {
 
 		$field = $this->next_field();
 
-		$value = !empty( $field->data ) && !empty( $field->data->value ) ? maybe_unserialize( $field->data->value ) : false;
+		// Valid field values of 0 or '0' get caught by empty(), so we have an extra check for these. See #BP5731
+		if ( ! empty( $field->data ) && ( ! empty( $field->data->value ) || '0' == $field->data->value ) ) {
+			$value = maybe_unserialize( $field->data->value );
+		} else {
+			$value = false;
+		}
 
-		if ( !empty( $value ) ) {
+		if ( ! empty( $value ) || '0' == $value ) {
 			$this->field_has_data = true;
 		} else {
 			$this->field_has_data = false;
@@ -218,6 +223,16 @@ function bp_field_css_class( $class = false ) {
 		// Set a class with the field name (sanitized)
 		$css_classes[] = 'field_' . sanitize_title( $profile_template->field->name );
 
+		// Set a class indicating whether the field is required or optional
+		if ( ! empty( $profile_template->field->is_required ) ) {
+			$css_classes[] = 'required-field';
+		} else {
+			$css_classes[] = 'optional-field';
+		}
+
+		// Add the field visibility level
+		$css_classes[] = 'visibility-' . esc_attr( bp_get_the_profile_field_visibility_level() );
+
 		if ( $profile_template->current_field % 2 == 1 )
 			$css_classes[] = 'alt';
 
@@ -299,6 +314,36 @@ function bp_the_profile_group_field_ids() {
 		return substr( $field_ids, 0, -1 );
 	}
 
+/**
+ * Output a comma-separated list of field IDs that are to be submitted on profile edit.
+ *
+ * @since BuddyPress (2.1.0)
+ */
+function bp_the_profile_field_ids() {
+	echo bp_get_the_profile_field_ids();
+}
+	/**
+	 * Generate a comma-separated list of field IDs that are to be submitted on profile edit.
+	 *
+	 * @since BuddyPress (2.1.0)
+	 *
+	 * @return string
+	 */
+	function bp_get_the_profile_field_ids() {
+		global $profile_template;
+
+		$field_ids = array();
+		foreach ( $profile_template->groups as $group ) {
+			if ( ! empty( $group->fields ) ) {
+				$field_ids = array_merge( $field_ids, wp_list_pluck( $group->fields, 'id' ) );
+			}
+		}
+
+		$field_ids = implode( ',', wp_parse_id_list( $field_ids ) );
+
+		return apply_filters( 'bp_get_the_profile_field_ids', $field_ids );
+	}
+
 function bp_profile_fields() {
 	global $profile_template;
 	return $profile_template->profile_fields();
@@ -574,14 +619,46 @@ function bp_profile_field_data( $args = '' ) {
 		return apply_filters( 'bp_get_profile_field_data', xprofile_get_field_data( $field, $user_id ) );
 	}
 
-function bp_profile_group_tabs() {
-	global $bp, $group_name;
+/**
+ * Get all profile field groups.
+ *
+ * @since  BuddyPress (2.1.0)
+ *
+ * @return object $groups
+ */
+function bp_profile_get_field_groups() {
+	$groups = wp_cache_get( 'xprofile_groups_inc_empty', 'bp' );
 
-	if ( !$groups = wp_cache_get( 'xprofile_groups_inc_empty', 'bp' ) ) {
-		$groups = BP_XProfile_Group::get( array( 'fetch_fields' => true ) );
+	if ( empty( $groups ) ) {
+		$groups = bp_xprofile_get_groups( array( 'fetch_fields' => true ) );
 		wp_cache_set( 'xprofile_groups_inc_empty', $groups, 'bp' );
 	}
 
+	return apply_filters( 'bp_profile_get_field_groups', $groups );
+}
+
+/**
+ * Check if there is more than one group of fields for the profile being edited.
+ *
+ * @since  BuddyPress (2.1.0)
+ *
+ * @return bool True if there is more than one profile field group.
+ */
+function bp_profile_has_multiple_groups() {
+	$has_multiple_groups = count( (array) bp_profile_get_field_groups() ) > 1;
+	return (bool) apply_filters( 'bp_profile_has_multiple_groups', $has_multiple_groups );
+}
+
+/**
+ * Output the tabs to switch between profile field groups.
+ *
+ * @return string Field group tabs markup.
+ */
+function bp_profile_group_tabs() {
+	global $bp, $group_name;
+
+	$groups = bp_profile_get_field_groups();
+
 	if ( empty( $group_name ) )
 		$group_name = bp_profile_group_name(false);
 
@@ -627,15 +704,6 @@ function bp_profile_group_name( $deprecated = true ) {
 		return apply_filters( 'bp_get_profile_group_name', $group->name );
 	}
 
-function bp_avatar_upload_form() {
-	global $bp;
-
-	if ( !(int) $bp->site_options['bp-disable-avatar-uploads'] )
-		bp_core_avatar_admin( null, bp_loggedin_user_domain() . $bp->profile->slug . '/change-avatar/', bp_loggedin_user_domain() . $bp->profile->slug . '/delete-avatar/' );
-	else
-		_e( 'Avatar uploads are currently disabled. Why not use a <a href="http://gravatar.com" target="_blank">gravatar</a> instead?', 'buddypress' );
-}
-
 function bp_profile_last_updated() {
 
 	$last_updated = bp_get_profile_last_updated();
@@ -708,7 +776,7 @@ function bp_profile_visibility_radio_buttons( $args = '' ) {
 			'field_id'     => bp_get_the_profile_field_id(),
 			'before'       => '<ul class="radio">',
 			'after'        => '</ul>',
-			'before_radio' => '<li>',
+			'before_radio' => '<li class="%s">',
 			'after_radio'  => '</li>',
 			'class'        => 'bp-xprofile-visibility'
 		), 'xprofile_visibility_radio_buttons' );
@@ -729,7 +797,7 @@ function bp_profile_visibility_radio_buttons( $args = '' ) {
 
 				<?php foreach( bp_xprofile_get_visibility_levels() as $level ) : ?>
 
-					<?php echo $r['before_radio']; ?>
+					<?php printf( $r['before_radio'], esc_attr( $level['id'] ) ); ?>
 
 					<label for="<?php echo esc_attr( 'see-field_' . $r['field_id'] . '_' . $level['id'] ); ?>">
 						<input type="radio" id="<?php echo esc_attr( 'see-field_' . $r['field_id'] . '_' . $level['id'] ); ?>" name="<?php echo esc_attr( 'field_' . $r['field_id'] . '_visibility' ); ?>" value="<?php echo esc_attr( $level['id'] ); ?>" <?php checked( $level['id'], bp_get_the_profile_field_visibility_level() ); ?> />
diff --git a/wp-content/plugins/buddypress/buddypress.pot b/wp-content/plugins/buddypress/buddypress.pot
new file mode 100644
index 000000000..248956828
--- /dev/null
+++ b/wp-content/plugins/buddypress/buddypress.pot
@@ -0,0 +1,7385 @@
+# Copyright (C) 2014 The BuddyPress Community
+# This file is distributed under the GPLv2 or later (license.txt).
+msgid ""
+msgstr ""
+"Project-Id-Version: BuddyPress 2.1.1\n"
+"Report-Msgid-Bugs-To: https://buddypress.trac.wordpress.org\n"
+"POT-Creation-Date: 2014-10-06 21:39:12+00:00\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"PO-Revision-Date: 2014-MO-DA HO:MI+ZONE\n"
+"Last-Translator: JOHN JAMES JACOBY <jjj@buddypress.org>\n"
+"Language-Team: ENGLISH <jjj@buddypress.org>\n"
+"X-Generator: grunt-wp-i18n 0.4.8\n"
+
+#: bp-activity/bp-activity-actions.php:157
+msgid "Activity deleted successfully"
+msgstr ""
+
+#: bp-activity/bp-activity-actions.php:159
+msgid "There was an error when deleting that activity"
+msgstr ""
+
+#: bp-activity/bp-activity-actions.php:214
+msgid "The activity item has been marked as spam and is no longer visible."
+msgstr ""
+
+#: bp-activity/bp-activity-actions.php:269
+#: bp-templates/bp-legacy/buddypress-functions.php:711
+msgid "Please enter some content to post."
+msgstr ""
+
+#: bp-activity/bp-activity-actions.php:290
+msgid "Update Posted!"
+msgstr ""
+
+#: bp-activity/bp-activity-actions.php:292
+msgid "There was an error when posting your update, please try again."
+msgstr ""
+
+#: bp-activity/bp-activity-actions.php:329
+#: bp-templates/bp-legacy/buddypress-functions.php:772
+msgid "Please do not leave the comment area blank."
+msgstr ""
+
+#: bp-activity/bp-activity-actions.php:340
+msgid "Reply Posted!"
+msgstr ""
+
+#: bp-activity/bp-activity-actions.php:342
+#: bp-templates/bp-legacy/buddypress-functions.php:775
+#: bp-templates/bp-legacy/buddypress-functions.php:784
+msgid "There was an error posting that reply, please try again."
+msgstr ""
+
+#: bp-activity/bp-activity-actions.php:374
+msgid "Activity marked as favorite."
+msgstr ""
+
+#: bp-activity/bp-activity-actions.php:376
+msgid "There was an error marking that activity as a favorite, please try again."
+msgstr ""
+
+#: bp-activity/bp-activity-actions.php:408
+msgid "Activity removed as favorite."
+msgstr ""
+
+#: bp-activity/bp-activity-actions.php:410
+msgid "There was an error removing that activity as a favorite, please try again."
+msgstr ""
+
+#: bp-activity/bp-activity-actions.php:440
+#. translators: Sitewide activity RSS title - "[Site Name] | Site Wide
+#. Activity"
+msgid "%s | Site-Wide Activity"
+msgstr ""
+
+#: bp-activity/bp-activity-actions.php:443
+msgid "Activity feed for the entire site."
+msgstr ""
+
+#: bp-activity/bp-activity-actions.php:470 bp-groups/bp-groups-actions.php:473
+#. translators: Personal activity RSS title - "[Site Name] | [User Display
+#. Name] | Activity"
+#. translators: Group activity RSS title - "[Site Name] | [Group Name] |
+#. Activity"
+msgid "%1$s | %2$s | Activity"
+msgstr ""
+
+#: bp-activity/bp-activity-actions.php:473
+msgid "Activity feed for %s."
+msgstr ""
+
+#: bp-activity/bp-activity-actions.php:503
+#. translators: Friends activity RSS title - "[Site Name] | [User Display Name]
+#. | Friends Activity"
+msgid "%1$s | %2$s | Friends Activity"
+msgstr ""
+
+#: bp-activity/bp-activity-actions.php:506
+msgid "Activity feed for %s's friends."
+msgstr ""
+
+#: bp-activity/bp-activity-actions.php:540
+#. translators: Member groups activity RSS title - "[Site Name] | [User Display
+#. Name] | Groups Activity"
+msgid "%1$s | %2$s | Group Activity"
+msgstr ""
+
+#: bp-activity/bp-activity-actions.php:543
+msgid "Public group activity feed of which %s is a member."
+msgstr ""
+
+#: bp-activity/bp-activity-actions.php:579
+#. translators: User mentions activity RSS title - "[Site Name] | [User Display
+#. Name] | Mentions"
+msgid "%1$s | %2$s | Mentions"
+msgstr ""
+
+#: bp-activity/bp-activity-actions.php:582
+msgid "Activity feed mentioning %s."
+msgstr ""
+
+#: bp-activity/bp-activity-actions.php:616
+#. translators: User activity favorites RSS title - "[Site Name] | [User
+#. Display Name] | Favorites"
+msgid "%1$s | %2$s | Favorites"
+msgstr ""
+
+#: bp-activity/bp-activity-actions.php:619
+msgid "Activity feed of %s's favorites."
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:88
+msgid "ERROR: Please type a reply."
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:93
+msgid ""
+"ERROR: The item you are trying to reply to cannot be found, or it has been "
+"deleted."
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:211 bp-activity/bp-activity-admin.php:258
+#: bp-core/admin/bp-core-functions.php:445
+#: bp-core/admin/bp-core-functions.php:463
+#: bp-core/admin/bp-core-functions.php:482
+#: bp-core/admin/bp-core-functions.php:501 bp-groups/bp-groups-admin.php:111
+#: bp-groups/bp-groups-admin.php:146 bp-members/bp-members-admin.php:671
+#: bp-members/bp-members-admin.php:1255
+msgid "Overview"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:213
+msgid ""
+"You edit activities made on your site similar to the way you edit a "
+"comment. This is useful if you need to change which page the activity links "
+"to, or when you notice that the author has made a typographical error."
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:214
+msgid ""
+"The two big editing areas for the activity title and content are fixed in "
+"place, but you can reposition all the other boxes using drag and drop, and "
+"can minimize or expand them by clicking the title bar of each box. Use the "
+"Screen Options tab to unhide more boxes (Primary Item/Secondary Item, Link, "
+"Type, Author ID) or to choose a 1- or 2-column layout for this screen."
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:215
+msgid ""
+"You can also moderate the activity from this screen using the Status box, "
+"where you can also change the timestamp of the activity."
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:220
+msgid "Item, Link, Type"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:222
+msgid ""
+"<strong>Primary Item/Secondary Item</strong> - These identify the object "
+"that created the activity. For example, the fields could reference a "
+"comment left on a specific site. Some types of activity may only use one, "
+"or none, of these fields."
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:223
+msgid ""
+"<strong>Link</strong> - Used by some types of activity (e.g blog posts and "
+"comments, and forum topics and replies) to store a link back to the "
+"original content."
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:224
+msgid ""
+"<strong>Type</strong> - Each distinct kind of activity has its own type. "
+"For example, <code>created_group</code> is used when a group is created and "
+"<code>joined_group</code> is used when a user joins a group."
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:225
+msgid ""
+"For information about when and how BuddyPress uses all of these settings, "
+"see the Managing Activity link in the panel to the side."
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:230 bp-activity/bp-activity-admin.php:275
+#: bp-core/admin/bp-core-functions.php:451
+#: bp-core/admin/bp-core-functions.php:469
+#: bp-core/admin/bp-core-functions.php:488
+#: bp-core/admin/bp-core-functions.php:507 bp-groups/bp-groups-admin.php:119
+#: bp-groups/bp-groups-admin.php:162 bp-members/bp-members-admin.php:680
+#: bp-members/bp-members-admin.php:1276
+msgid "For more information:"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:231
+msgid ""
+"<a "
+"href=\"http://codex.buddypress.org/buddypress-site-administration/managing-"
+"activity/\">Managing Activity</a>"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:232 bp-activity/bp-activity-admin.php:276
+#: bp-core/admin/bp-core-functions.php:453
+#: bp-core/admin/bp-core-functions.php:471
+#: bp-core/admin/bp-core-functions.php:490
+#: bp-core/admin/bp-core-functions.php:509 bp-groups/bp-groups-admin.php:163
+#: bp-members/bp-members-admin.php:682 bp-members/bp-members-admin.php:1277
+msgid "<a href=\"http://buddypress.org/support/\">Support Forums</a>"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:260
+msgid ""
+"You can manage activities made on your site similar to the way you manage "
+"comments and other content. This screen is customizable in the same ways as "
+"other management screens, and you can act on activities using the on-hover "
+"action links or the Bulk Actions."
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:261
+msgid ""
+"There are many different types of activities. Some are generated "
+"automatically by BuddyPress and other plugins, and some are entered "
+"directly by a user in the form of status update. To help manage the "
+"different activity types, use the filter dropdown box to switch between "
+"them."
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:267
+msgid "Moderating Activity"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:269
+msgid ""
+"In the <strong>Activity</strong> column, above each activity it says "
+"&#8220;Submitted on,&#8221; followed by the date and time the activity item "
+"was generated on your site. Clicking on the date/time link will take you to "
+"that activity on your live site. Hovering over any activity gives you "
+"options to reply, edit, spam mark, or delete that activity."
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:270
+msgid ""
+"In the <strong>In Response To</strong> column, if the activity was in reply "
+"to another activity, it shows that activity's author's picture and name, "
+"and a link to that activity on your live site. If there is a small bubble, "
+"the number in it shows how many other activities are related to this one; "
+"these are usually comments. Clicking the bubble will filter the activity "
+"screen to show only related activity items."
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:594
+msgid "Editing Activity (ID #%s)"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:605
+msgid "Action"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:612
+msgid "Content"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:637
+msgid "No activity found with this ID. <a href=\"%s\">Go back and try again</a>."
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:660
+msgid "View Activity"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:668
+msgid "Approved"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:669 bp-activity/bp-activity-admin.php:1424
+#: bp-activity/bp-activity-akismet.php:197
+#: bp-activity/bp-activity-akismet.php:226
+#: bp-core/admin/bp-core-functions.php:823
+msgid "Spam"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:675 bp-members/bp-members-admin.php:923
+#: bp-members/bp-members-admin.php:985
+#. translators: Publish box date format, see http:php.net/date
+msgid "M j, Y @ G:i"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:678
+msgid "Submitted on: <strong>%1$s</strong>"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:678 bp-activity/bp-activity-admin.php:1417
+#: bp-forums/bp-forums-template.php:2112 bp-groups/bp-groups-admin.php:1398
+#: bp-xprofile/bp-xprofile-admin.php:402
+msgid "Edit"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:691
+msgid "Update"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:711
+msgid "Link"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:713
+msgid ""
+"Activity generated by posts and comments, forum topics and replies, and "
+"some plugins, uses the link field for a permalink back to the content item."
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:728
+msgid "Author ID"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:797
+msgid ""
+"This activity item has a type (%s) that is not registered using "
+"bp_activity_set_action(), so no label is available."
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:822
+msgid "Primary Item ID"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:826
+msgid "Secondary Item ID"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:829
+msgid ""
+"These identify the object that created this activity. For example, the "
+"fields could reference a pair of site and comment IDs."
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:869
+msgid "%s activity item has been permanently deleted."
+msgid_plural "%s activity items have been permanently deleted."
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-activity/bp-activity-admin.php:873
+msgid "An error occurred when trying to update activity ID #%s."
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:876
+msgid "Errors occurred when trying to update these activity items:"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:882
+#. Translators: This is a bulleted list of item IDs
+msgid "#%s"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:891
+msgid "%s activity item has been successfully spammed."
+msgid_plural "%s activity items have been successfully spammed."
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-activity/bp-activity-admin.php:894
+msgid "%s activity item has been successfully unspammed."
+msgid_plural "%s activity items have been successfully unspammed."
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-activity/bp-activity-admin.php:897
+msgid "The activity item has been updated succesfully."
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:910
+msgid "Activity related to ID #%s"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:916 bp-groups/bp-groups-admin.php:651
+#: bp-members/bp-members-admin.php:1671
+msgid "Search results for &#8220;%s&#8221;"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:929
+msgid "Search all Activity"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:940
+msgid "Reply to Activity"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:944 bp-groups/bp-groups-admin.php:605
+#: bp-members/bp-members-admin.php:1802
+#: bp-templates/bp-legacy/buddypress/activity/entry.php:102
+#: bp-templates/bp-legacy/buddypress/forums/index.php:116
+#: bp-xprofile/bp-xprofile-classes.php:548
+#: bp-xprofile/bp-xprofile-classes.php:968
+msgid "Cancel"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:945 bp-activity/bp-activity-admin.php:1411
+#: bp-templates/bp-legacy/buddypress/activity/comment.php:37
+#: bp-templates/bp-legacy/buddypress/groups/single/forum/edit.php:10
+msgid "Reply"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:1140
+msgid "No activities found."
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:1211 bp-groups/bp-groups-admin.php:1271
+msgid "All"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:1212
+msgid "Spam <span class=\"count\">(%s)</span>"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:1228
+msgid "Mark as Spam"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:1229
+#: bp-activity/bp-activity-admin.php:1422
+#: bp-core/admin/bp-core-functions.php:817
+msgid "Not Spam"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:1230
+#: bp-activity/bp-activity-admin.php:1427 bp-groups/bp-groups-admin.php:604
+msgid "Delete Permanently"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:1295
+msgid "View all actions"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:1320
+msgid "Filter"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:1336
+msgid "Select activity item %1$d"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:1367
+msgid "Unregistered action - %s"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:1413
+msgid "Replies are disabled for this activity item"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:1413
+msgid "Replies disabled"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:1427 bp-core/bp-core-cssjs.php:81
+msgid "Are you sure?"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:1436
+#. translators: 2: activity admin ui date/time
+msgid "Submitted on <a href=\"%1$s\">%2$s at %3$s</a>"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:1468
+msgid "%s related activity"
+msgid_plural "%s related activities"
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-activity/bp-activity-admin.php:1479
+msgid "<a href=\"%1$s\">View Activity</a>"
+msgstr ""
+
+#: bp-activity/bp-activity-akismet.php:86
+msgid "Flagged as spam by Akismet"
+msgstr ""
+
+#: bp-activity/bp-activity-akismet.php:89
+msgid "Cleared by Akismet"
+msgstr ""
+
+#: bp-activity/bp-activity-akismet.php:95
+msgid "Flagged as spam by %s"
+msgstr ""
+
+#: bp-activity/bp-activity-akismet.php:97
+msgid "Un-spammed by %s"
+msgstr ""
+
+#: bp-activity/bp-activity-akismet.php:106
+msgid "History"
+msgstr ""
+
+#: bp-activity/bp-activity-akismet.php:373
+msgid "%s reported this activity as spam"
+msgstr ""
+
+#: bp-activity/bp-activity-akismet.php:390
+msgid "%s reported this activity as not spam"
+msgstr ""
+
+#: bp-activity/bp-activity-akismet.php:414
+msgid "Akismet caught this item as spam"
+msgstr ""
+
+#: bp-activity/bp-activity-akismet.php:419
+msgid "Akismet cleared this item"
+msgstr ""
+
+#: bp-activity/bp-activity-akismet.php:424
+msgid ""
+"Akismet was unable to check this item (response: %s), will automatically "
+"retry again later."
+msgstr ""
+
+#: bp-activity/bp-activity-akismet.php:538
+msgid "Activity History"
+msgstr ""
+
+#: bp-activity/bp-activity-classes.php:286
+#: bp-activity/bp-activity-template.php:147 bp-groups/bp-groups-classes.php:654
+#: bp-groups/bp-groups-functions.php:491 bp-groups/bp-groups-template.php:187
+#: bp-groups/bp-groups-template.php:2629 bp-groups/bp-groups-template.php:3670
+#: bp-groups/bp-groups-template.php:3938
+msgid ""
+"Arguments passed to %1$s should be in an associative array. See the inline "
+"documentation at %2$s for more details."
+msgstr ""
+
+#: bp-activity/bp-activity-classes.php:1506
+msgid "RSS feed 'id' must be defined"
+msgstr ""
+
+#: bp-activity/bp-activity-classes.php:1619
+msgid "In reply to"
+msgstr ""
+
+#: bp-activity/bp-activity-filters.php:383
+msgid "[Read more]"
+msgstr ""
+
+#: bp-activity/bp-activity-filters.php:388
+msgid "&hellip;"
+msgstr ""
+
+#: bp-activity/bp-activity-filters.php:574
+msgid "Load Newest"
+msgstr ""
+
+#: bp-activity/bp-activity-functions.php:902
+msgid "Posted a status update"
+msgstr ""
+
+#: bp-activity/bp-activity-functions.php:904
+msgid "Updates"
+msgstr ""
+
+#: bp-activity/bp-activity-functions.php:911
+msgid "Replied to a status update"
+msgstr ""
+
+#: bp-activity/bp-activity-functions.php:913
+msgid "Activity Comments"
+msgstr ""
+
+#: bp-activity/bp-activity-functions.php:964
+msgid "%s posted an update"
+msgstr ""
+
+#: bp-activity/bp-activity-functions.php:978
+msgid "%s posted a new activity comment"
+msgstr ""
+
+#: bp-activity/bp-activity-functions.php:1780
+msgid "Thumbnail"
+msgstr ""
+
+#: bp-activity/bp-activity-loader.php:30
+#: bp-core/admin/bp-core-components.php:380
+msgid "Activity Streams"
+msgstr ""
+
+#: bp-activity/bp-activity-loader.php:112
+msgid "Search Activity..."
+msgstr ""
+
+#: bp-activity/bp-activity-loader.php:343
+#: bp-activity/bp-activity-template.php:1282
+#: bp-activity/bp-activity-template.php:1432
+#: bp-activity/bp-activity-template.php:1443 bp-blogs/bp-blogs-loader.php:241
+#: bp-core/deprecated/2.1.php:501 bp-forums/bp-forums-loader.php:245
+#: bp-forums/bp-forums-template.php:730 bp-forums/bp-forums-template.php:960
+#: bp-forums/bp-forums-template.php:1990 bp-friends/bp-friends-loader.php:234
+#: bp-groups/bp-groups-loader.php:604 bp-groups/bp-groups-template.php:1344
+#: bp-groups/bp-groups-template.php:1387 bp-groups/bp-groups-template.php:1829
+#: bp-groups/bp-groups-template.php:1845 bp-groups/bp-groups-template.php:1894
+#: bp-groups/bp-groups-template.php:1910 bp-groups/bp-groups-template.php:2848
+#: bp-groups/bp-groups-template.php:2879 bp-groups/bp-groups-template.php:2909
+#: bp-groups/bp-groups-template.php:3829 bp-members/bp-members-loader.php:258
+#: bp-members/bp-members-template.php:724
+#: bp-members/bp-members-template.php:1168
+#: bp-members/bp-members-template.php:1210
+#: bp-messages/bp-messages-loader.php:282
+#: bp-messages/bp-messages-template.php:687
+#: bp-notifications/bp-notifications-loader.php:232
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:185
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:212
+msgid "Profile picture of %s"
+msgstr ""
+
+#: bp-activity/bp-activity-notifications.php:73
+msgid "%s mentioned you in an update"
+msgstr ""
+
+#: bp-activity/bp-activity-notifications.php:76 bp-core/deprecated/1.5.php:354
+msgid ""
+"%1$s mentioned you in the group \"%2$s\":\n"
+"\n"
+"\"%3$s\"\n"
+"\n"
+"To view and respond to the message, log in and visit: %4$s\n"
+"\n"
+"---------------------\n"
+msgstr ""
+
+#: bp-activity/bp-activity-notifications.php:86
+msgid ""
+"%1$s mentioned you in an update:\n"
+"\n"
+"\"%2$s\"\n"
+"\n"
+"To view and respond to the message, log in and visit: %3$s\n"
+"\n"
+"---------------------\n"
+msgstr ""
+
+#: bp-activity/bp-activity-notifications.php:99
+#: bp-activity/bp-activity-notifications.php:177
+#: bp-activity/bp-activity-notifications.php:226 bp-core/deprecated/1.5.php:364
+#: bp-friends/bp-friends-notifications.php:56
+#: bp-friends/bp-friends-notifications.php:105
+#: bp-groups/bp-groups-notifications.php:55
+#: bp-groups/bp-groups-notifications.php:133
+#: bp-groups/bp-groups-notifications.php:211
+#: bp-groups/bp-groups-notifications.php:280
+#: bp-groups/bp-groups-notifications.php:358
+msgid "To disable these notifications please log in and go to: %s"
+msgstr ""
+
+#: bp-activity/bp-activity-notifications.php:164
+msgid "%s replied to one of your updates"
+msgstr ""
+
+#: bp-activity/bp-activity-notifications.php:165
+msgid ""
+"%1$s replied to one of your updates:\n"
+"\n"
+"\"%2$s\"\n"
+"\n"
+"To view your original update and all comments, log in and visit: %3$s\n"
+"\n"
+"---------------------\n"
+msgstr ""
+
+#: bp-activity/bp-activity-notifications.php:209
+msgid "%s replied to one of your comments"
+msgstr ""
+
+#: bp-activity/bp-activity-notifications.php:214
+msgid ""
+"%1$s replied to one of your comments:\n"
+"\n"
+"\"%2$s\"\n"
+"\n"
+"To view the original activity, your comment and all replies, log in and "
+"visit: %3$s\n"
+"\n"
+"---------------------\n"
+msgstr ""
+
+#: bp-activity/bp-activity-notifications.php:280
+msgid "@%s Mentions"
+msgstr ""
+
+#: bp-activity/bp-activity-notifications.php:283
+msgid "You have %1$d new mentions"
+msgstr ""
+
+#: bp-activity/bp-activity-notifications.php:287
+msgid "%1$s mentioned you"
+msgstr ""
+
+#: bp-activity/bp-activity-screens.php:231
+msgid "You do not have access to this activity."
+msgstr ""
+
+#: bp-activity/bp-activity-screens.php:270
+#: bp-activity/bp-activity-screens.php:437
+msgid "Activity"
+msgstr ""
+
+#: bp-activity/bp-activity-screens.php:271 bp-blogs/bp-blogs-template.php:1052
+#: bp-friends/bp-friends-screens.php:86 bp-groups/bp-groups-screens.php:973
+#: bp-messages/bp-messages-screens.php:199
+#: bp-templates/bp-legacy/buddypress/members/register.php:149
+msgid "Yes"
+msgstr ""
+
+#: bp-activity/bp-activity-screens.php:272 bp-blogs/bp-blogs-template.php:1056
+#: bp-friends/bp-friends-screens.php:87 bp-groups/bp-groups-screens.php:974
+#: bp-messages/bp-messages-screens.php:200
+#: bp-templates/bp-legacy/buddypress/members/register.php:150
+msgid "No"
+msgstr ""
+
+#: bp-activity/bp-activity-screens.php:280
+msgid "A member mentions you in an update using \"@%s\""
+msgstr ""
+
+#: bp-activity/bp-activity-screens.php:288
+msgid "A member replies to an update or comment you've posted"
+msgstr ""
+
+#: bp-activity/bp-activity-template.php:775
+msgid "Viewing 1 item"
+msgid_plural "Viewing %1$s - %2$s of %3$s items"
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-activity/bp-activity-template.php:1282
+msgid "Profile picture"
+msgstr ""
+
+#: bp-activity/bp-activity-template.php:1408
+msgid "Group logo"
+msgstr ""
+
+#: bp-activity/bp-activity-template.php:1411 bp-groups/bp-groups-admin.php:1418
+#: bp-groups/bp-groups-template.php:787
+msgid "Group logo of %s"
+msgstr ""
+
+#: bp-activity/bp-activity-template.php:1422
+msgid "Profile picture of the author of the site %s"
+msgstr ""
+
+#: bp-activity/bp-activity-template.php:1652
+msgid "View Discussion"
+msgstr ""
+
+#: bp-activity/bp-activity-template.php:2201
+msgid ""
+"%1$s no longer accepts arguments. See the inline documentation at %2$s for "
+"more details."
+msgstr ""
+
+#: bp-activity/bp-activity-template.php:2582
+#: bp-forums/bp-forums-template.php:2113 bp-groups/bp-groups-admin.php:1290
+#: bp-groups/bp-groups-admin.php:1401 bp-groups/bp-groups-template.php:2094
+#: bp-members/admin/bp-members-classes.php:146
+#: bp-members/admin/bp-members-classes.php:277
+#: bp-members/admin/bp-members-classes.php:474
+#: bp-members/admin/bp-members-classes.php:600
+#: bp-notifications/bp-notifications-template.php:876
+#: bp-templates/bp-legacy/buddypress/activity/comment.php:43
+#: bp-templates/bp-legacy/buddypress/members/single/messages/messages-loop.php:51
+#: bp-templates/bp-legacy/buddypress/members/single/messages/single.php:24
+#: bp-xprofile/bp-xprofile-admin.php:407
+#: bp-xprofile/bp-xprofile-classes.php:3167
+msgid "Delete"
+msgstr ""
+
+#: bp-activity/bp-activity-template.php:2674
+#: bp-core/admin/bp-core-functions.php:829 bp-core/admin/bp-core-slugs.php:109
+#: bp-core/admin/bp-core-slugs.php:172 bp-groups/bp-groups-admin.php:1404
+#: bp-members/bp-members-template.php:892
+#: bp-templates/bp-legacy/buddypress-functions.php:250
+msgid "View"
+msgstr ""
+
+#: bp-activity/bp-activity-template.php:2772
+msgid "Clear Filter"
+msgstr ""
+
+#: bp-activity/bp-activity-template.php:3050
+msgid "a user"
+msgstr ""
+
+#: bp-activity/bp-activity-template.php:3106
+msgid "Send a public message on your activity stream."
+msgstr ""
+
+#: bp-activity/bp-activity-template.php:3107
+msgid "Public Message"
+msgstr ""
+
+#: bp-activity/bp-activity-template.php:3629
+msgid "Site Wide Activity RSS Feed"
+msgstr ""
+
+#: bp-blogs/bp-blogs-activity.php:34
+msgid "New site created"
+msgstr ""
+
+#: bp-blogs/bp-blogs-activity.php:36
+msgid "New Sites"
+msgstr ""
+
+#: bp-blogs/bp-blogs-activity.php:43
+msgid "New post published"
+msgstr ""
+
+#: bp-blogs/bp-blogs-activity.php:45
+#: bp-templates/bp-legacy/buddypress/forums/forums-loop.php:40
+msgid "Posts"
+msgstr ""
+
+#: bp-blogs/bp-blogs-activity.php:52
+msgid "New post comment posted"
+msgstr ""
+
+#: bp-blogs/bp-blogs-activity.php:54
+msgid "Comments"
+msgstr ""
+
+#: bp-blogs/bp-blogs-activity.php:74
+msgid "%s created the site %s"
+msgstr ""
+
+#: bp-blogs/bp-blogs-activity.php:133 bp-blogs/bp-blogs-functions.php:505
+msgid "%1$s wrote a new post, %2$s, on the site %3$s"
+msgstr ""
+
+#: bp-blogs/bp-blogs-activity.php:135 bp-blogs/bp-blogs-functions.php:507
+msgid "%1$s wrote a new post, %2$s"
+msgstr ""
+
+#: bp-blogs/bp-blogs-activity.php:200
+msgid "%1$s commented on the post, %2$s, on the site %3$s"
+msgstr ""
+
+#: bp-blogs/bp-blogs-activity.php:202
+msgid "%1$s commented on the post, %2$s"
+msgstr ""
+
+#: bp-blogs/bp-blogs-loader.php:27
+msgid "Site Directory"
+msgstr ""
+
+#: bp-blogs/bp-blogs-loader.php:70
+msgid "Search sites..."
+msgstr ""
+
+#: bp-blogs/bp-blogs-loader.php:133
+msgid "Sites <span>%d</span>"
+msgstr ""
+
+#: bp-blogs/bp-blogs-loader.php:153 bp-blogs/bp-blogs-loader.php:204
+#: bp-blogs/bp-blogs-loader.php:232 bp-core/deprecated/2.1.php:118
+msgid "My Sites"
+msgstr ""
+
+#: bp-blogs/bp-blogs-loader.php:196 bp-blogs/bp-blogs-screens.php:144
+#: bp-blogs/bp-blogs-screens.php:204 bp-blogs/bp-blogs-screens.php:206
+msgid "Sites"
+msgstr ""
+
+#: bp-blogs/bp-blogs-loader.php:213 bp-blogs/bp-blogs-screens.php:204
+#: bp-blogs/bp-blogs-template.php:1148 bp-blogs/bp-blogs-template.php:1216
+#: bp-blogs/bp-blogs-template.php:1217 bp-core/bp-core-filters.php:499
+msgid "Create a Site"
+msgstr ""
+
+#: bp-blogs/bp-blogs-template.php:429
+msgid "Viewing 1 site"
+msgid_plural "Viewing %1$s - %2$s of %3$s sites"
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-blogs/bp-blogs-template.php:501
+msgid "Profile picture of site author %s"
+msgstr ""
+
+#: bp-blogs/bp-blogs-template.php:670 bp-core/bp-core-classes.php:838
+#: bp-groups/bp-groups-template.php:4046 bp-groups/bp-groups-widgets.php:94
+#: bp-groups/bp-groups-widgets.php:206 bp-members/bp-members-template.php:834
+#: bp-members/bp-members-template.php:1263
+#: bp-templates/bp-legacy/buddypress/groups/groups-loop.php:47
+#: bp-templates/bp-legacy/buddypress/groups/single/group-header.php:42
+msgid "active %s"
+msgstr ""
+
+#: bp-blogs/bp-blogs-template.php:683 bp-members/bp-members-template.php:847
+msgid "Never active"
+msgstr ""
+
+#: bp-blogs/bp-blogs-template.php:719
+msgid "Latest Post: %s"
+msgstr ""
+
+#: bp-blogs/bp-blogs-template.php:970
+msgid "There was a problem; please correct the form below and try again."
+msgstr ""
+
+#: bp-blogs/bp-blogs-template.php:973
+msgid ""
+"By filling out the form below, you can <strong>add a site to your "
+"account</strong>. There is no limit to the number of sites that you can "
+"have, so create to your heart's content, but blog responsibly!"
+msgstr ""
+
+#: bp-blogs/bp-blogs-template.php:975
+msgid ""
+"If you&#8217;re not going to use a great domain, leave it for a new user. "
+"Now have at it!"
+msgstr ""
+
+#: bp-blogs/bp-blogs-template.php:984
+msgid "Create Site"
+msgstr ""
+
+#: bp-blogs/bp-blogs-template.php:1006
+msgid "Site Name:"
+msgstr ""
+
+#: bp-blogs/bp-blogs-template.php:1008
+msgid "Site Domain:"
+msgstr ""
+
+#: bp-blogs/bp-blogs-template.php:1022
+msgid "Your address will be "
+msgstr ""
+
+#: bp-blogs/bp-blogs-template.php:1025
+msgid "blogname"
+msgstr ""
+
+#: bp-blogs/bp-blogs-template.php:1027
+msgid "domain."
+msgstr ""
+
+#: bp-blogs/bp-blogs-template.php:1030
+msgid ""
+"Must be at least 4 characters, letters and numbers only. It cannot be "
+"changed so choose carefully!)"
+msgstr ""
+
+#: bp-blogs/bp-blogs-template.php:1036
+msgid "Site Title:"
+msgstr ""
+
+#: bp-blogs/bp-blogs-template.php:1047
+msgid "Privacy:"
+msgstr ""
+
+#: bp-blogs/bp-blogs-template.php:1048
+#: bp-templates/bp-legacy/buddypress/members/register.php:146
+msgid ""
+"I would like my site to appear in search engines, and in public listings "
+"around this network."
+msgstr ""
+
+#: bp-blogs/bp-blogs-template.php:1134
+msgid "Congratulations! You have successfully registered a new site."
+msgstr ""
+
+#: bp-blogs/bp-blogs-template.php:1136
+msgid ""
+"<a href=\"%1$s\">%2$s</a> is your new site.  <a href=\"%3$s\">Login</a> as "
+"\"%4$s\" using your existing password."
+msgstr ""
+
+#: bp-blogs/bp-blogs-template.php:1165
+msgid "%s's Sites"
+msgstr ""
+
+#: bp-blogs/bp-blogs-template.php:1166
+msgid "%s's Recent Posts"
+msgstr ""
+
+#: bp-blogs/bp-blogs-template.php:1167
+msgid "%s's Recent Comments"
+msgstr ""
+
+#: bp-blogs/bp-blogs-template.php:1183 bp-core/deprecated/1.5.php:417
+#: bp-forums/bp-forums-template.php:2196 bp-groups/bp-groups-template.php:3450
+#: bp-members/bp-members-template.php:1031
+#: bp-messages/bp-messages-template.php:768
+msgid "Search"
+msgstr ""
+
+#: bp-blogs/bp-blogs-template.php:1266 bp-blogs/bp-blogs-template.php:1267
+msgid "Visit Site"
+msgstr ""
+
+#: bp-blogs/bp-blogs-template.php:1322
+msgid "%s site"
+msgid_plural "%s sites"
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-blogs/bp-blogs-widgets.php:34
+msgid "A list of recently published posts from across your network."
+msgstr ""
+
+#: bp-blogs/bp-blogs-widgets.php:50 bp-blogs/bp-blogs-widgets.php:122
+msgid "Recent Networkwide Posts"
+msgstr ""
+
+#: bp-blogs/bp-blogs-widgets.php:91
+msgid "Sorry, there were no posts found. Why not write one?"
+msgstr ""
+
+#: bp-blogs/bp-blogs-widgets.php:134
+msgid "Link widget title to Blogs directory"
+msgstr ""
+
+#: bp-blogs/bp-blogs-widgets.php:135
+msgid "Max posts to show:"
+msgstr ""
+
+#: bp-core/admin/bp-core-components.php:26
+#: bp-core/admin/bp-core-functions.php:383
+msgid "Components"
+msgstr ""
+
+#: bp-core/admin/bp-core-components.php:32
+#: bp-core/admin/bp-core-settings.php:252 bp-core/admin/bp-core-slugs.php:32
+#: bp-templates/bp-legacy/buddypress/members/single/settings/profile.php:42
+msgid "Save Settings"
+msgstr ""
+
+#: bp-core/admin/bp-core-components.php:59
+#: bp-core/admin/bp-core-components.php:364
+msgid "Extended Profiles"
+msgstr ""
+
+#: bp-core/admin/bp-core-components.php:60
+#: bp-core/admin/bp-core-components.php:365
+msgid ""
+"Customize your community with fully editable profile fields that allow your "
+"users to describe themselves."
+msgstr ""
+
+#: bp-core/admin/bp-core-components.php:63
+#: bp-core/admin/bp-core-components.php:368
+msgid "Account Settings"
+msgstr ""
+
+#: bp-core/admin/bp-core-components.php:64
+#: bp-core/admin/bp-core-components.php:369
+msgid ""
+"Allow your users to modify their account and notification settings directly "
+"from within their profiles."
+msgstr ""
+
+#: bp-core/admin/bp-core-components.php:67
+#: bp-core/admin/bp-core-components.php:384 bp-core/deprecated/2.1.php:570
+#: bp-notifications/bp-notifications-loader.php:227
+msgid "Notifications"
+msgstr ""
+
+#: bp-core/admin/bp-core-components.php:68
+#: bp-core/admin/bp-core-components.php:385
+msgid ""
+"Notify members of relevant activity with a toolbar bubble and/or via email, "
+"and allow them to customize their notification settings."
+msgstr ""
+
+#: bp-core/admin/bp-core-components.php:145
+msgid "Active <span class=\"count\">(%s)</span>"
+msgid_plural "Active <span class=\"count\">(%s)</span>"
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-core/admin/bp-core-components.php:146
+msgid "Inactive <span class=\"count\">(%s)</span>"
+msgid_plural "Inactive <span class=\"count\">(%s)</span>"
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-core/admin/bp-core-components.php:147
+msgid "Must-Use <span class=\"count\">(%s)</span>"
+msgid_plural "Must-Use <span class=\"count\">(%s)</span>"
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-core/admin/bp-core-components.php:148
+msgid "Retired <span class=\"count\">(%s)</span>"
+msgid_plural "Retired <span class=\"count\">(%s)</span>"
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-core/admin/bp-core-components.php:155
+#: bp-core/admin/bp-core-components.php:163
+msgid "Component"
+msgstr ""
+
+#: bp-core/admin/bp-core-components.php:156
+#: bp-core/admin/bp-core-components.php:164
+msgid "Description"
+msgstr ""
+
+#: bp-core/admin/bp-core-components.php:189
+#: bp-members/admin/bp-members-classes.php:224
+#: bp-members/admin/bp-members-classes.php:547
+msgid "Select %s"
+msgstr ""
+
+#: bp-core/admin/bp-core-components.php:214
+msgid "No components found."
+msgstr ""
+
+#: bp-core/admin/bp-core-components.php:344 bp-core/bp-core-loader.php:27
+msgid "BuddyPress Core"
+msgstr ""
+
+#: bp-core/admin/bp-core-components.php:345
+msgid "It&#8216;s what makes <del>time travel</del> BuddyPress possible!"
+msgstr ""
+
+#: bp-core/admin/bp-core-components.php:348
+msgid "Community Members"
+msgstr ""
+
+#: bp-core/admin/bp-core-components.php:349
+msgid "Everything in a BuddyPress community revolves around its members."
+msgstr ""
+
+#: bp-core/admin/bp-core-components.php:356
+#: bp-templates/bp-legacy/buddypress/groups/create.php:108
+msgid "Group Forums"
+msgstr ""
+
+#: bp-core/admin/bp-core-components.php:357
+msgid "BuddyPress Forums are retired. Use %s."
+msgstr ""
+
+#: bp-core/admin/bp-core-components.php:372
+msgid "Friend Connections"
+msgstr ""
+
+#: bp-core/admin/bp-core-components.php:373
+msgid ""
+"Let your users make connections so they can track the activity of others "
+"and focus on the people they care about the most."
+msgstr ""
+
+#: bp-core/admin/bp-core-components.php:376
+msgid "Private Messaging"
+msgstr ""
+
+#: bp-core/admin/bp-core-components.php:377
+msgid ""
+"Allow your users to talk to each other directly and in private. Not just "
+"limited to one-on-one discussions, messages can be sent between any number "
+"of members."
+msgstr ""
+
+#: bp-core/admin/bp-core-components.php:381
+msgid ""
+"Global, personal, and group activity streams with threaded commenting, "
+"direct posting, favoriting, and @mentions, all with full RSS feed and email "
+"notification support."
+msgstr ""
+
+#: bp-core/admin/bp-core-components.php:388
+msgid "User Groups"
+msgstr ""
+
+#: bp-core/admin/bp-core-components.php:389
+msgid ""
+"Groups allow your users to organize themselves into specific public, "
+"private or hidden sections with separate activity streams and member "
+"listings."
+msgstr ""
+
+#: bp-core/admin/bp-core-components.php:392
+msgid "Group Forums (Legacy)"
+msgstr ""
+
+#: bp-core/admin/bp-core-components.php:393
+msgid "Group forums allow for focused, bulletin-board style conversations."
+msgstr ""
+
+#: bp-core/admin/bp-core-components.php:396
+msgid "Site Tracking"
+msgstr ""
+
+#: bp-core/admin/bp-core-components.php:397
+msgid "Record activity for new posts and comments from your site."
+msgstr ""
+
+#: bp-core/admin/bp-core-components.php:404
+msgid "Record activity for new sites, posts, and comments across your network."
+msgstr ""
+
+#: bp-core/admin/bp-core-functions.php:104
+msgid "Why have all my BuddyPress menus disappeared?"
+msgstr ""
+
+#: bp-core/admin/bp-core-functions.php:106
+msgid ""
+"Don't worry! We've moved the BuddyPress options into more convenient and "
+"easier to find locations. You're seeing this page because you are running a "
+"legacy BuddyPress plugin which has not been updated."
+msgstr ""
+
+#: bp-core/admin/bp-core-functions.php:107
+msgid ""
+"Components, Pages, Settings, and Forums, have been moved to <a "
+"href=\"%s\">Settings &gt; BuddyPress</a>. Profile Fields has been moved "
+"into the <a href=\"%s\">Users</a> menu."
+msgstr ""
+
+#: bp-core/admin/bp-core-functions.php:241
+msgid ""
+"<strong>BuddyPress is almost ready</strong>. You must <a href=\"%s\">update "
+"your permalink structure</a> to something other than the default for it to "
+"work."
+msgstr ""
+
+#: bp-core/admin/bp-core-functions.php:268 bp-core/admin/bp-core-slugs.php:135
+#: bp-members/admin/bp-members-classes.php:269
+#: bp-members/admin/bp-members-classes.php:273
+#: bp-members/admin/bp-members-classes.php:592
+#: bp-members/admin/bp-members-classes.php:596
+#: bp-messages/bp-messages-template.php:1046
+#: bp-templates/bp-legacy/buddypress/members/activate.php:29
+msgid "Activate"
+msgstr ""
+
+#: bp-core/admin/bp-core-functions.php:273 bp-core/admin/bp-core-slugs.php:134
+#: bp-members/bp-members-adminbar.php:61
+msgid "Register"
+msgstr ""
+
+#: bp-core/admin/bp-core-functions.php:299
+msgid ""
+"The following active BuddyPress Components do not have associated WordPress "
+"Pages: %2$s. <a href=\"%1$s\">Repair</a>"
+msgstr ""
+
+#: bp-core/admin/bp-core-functions.php:321
+msgid ""
+"Each BuddyPress Component needs its own WordPress page. The following "
+"WordPress Pages have more than one component associated with them: %2$s. <a "
+"href=\"%1$s\">Repair</a>"
+msgstr ""
+
+#: bp-core/admin/bp-core-functions.php:387 bp-core/admin/bp-core-slugs.php:26
+msgid "Pages"
+msgstr ""
+
+#: bp-core/admin/bp-core-functions.php:391
+#: bp-core/admin/bp-core-settings.php:243 bp-core/bp-core-admin.php:439
+#: bp-groups/bp-groups-template.php:2076 bp-settings/bp-settings-loader.php:23
+#: bp-settings/bp-settings-loader.php:73 bp-settings/bp-settings-loader.php:163
+msgid "Settings"
+msgstr ""
+
+#: bp-core/admin/bp-core-functions.php:404 bp-forums/bp-forums-loader.php:132
+#: bp-forums/bp-forums-loader.php:199 bp-forums/bp-forums-loader.php:240
+#: bp-forums/bp-forums-screens.php:208 bp-forums/bp-forums-screens.php:210
+#: bp-forums/deprecated/1.6.php:42 bp-forums/deprecated/1.7.php:25
+#: bp-forums/deprecated/1.7.php:102
+msgid "Forums"
+msgstr ""
+
+#: bp-core/admin/bp-core-functions.php:452
+msgid ""
+"<a "
+"href=\"http://codex.buddypress.org/getting-started/configure-buddypress-"
+"components/#settings-buddypress-components\">Managing Components</a>"
+msgstr ""
+
+#: bp-core/admin/bp-core-functions.php:470
+msgid ""
+"<a "
+"href=\"http://codex.buddypress.org/getting-started/configure-buddypress-"
+"components/#settings-buddypress-pages\">Managing Pages</a>"
+msgstr ""
+
+#: bp-core/admin/bp-core-functions.php:489
+msgid ""
+"<a "
+"href=\"http://codex.buddypress.org/getting-started/configure-buddypress-"
+"components/#settings-buddypress-settings\">Managing Settings</a>"
+msgstr ""
+
+#: bp-core/admin/bp-core-functions.php:508
+msgid ""
+"<a "
+"href=\"http://codex.buddypress.org/getting-started/configure-buddypress-"
+"components/#users-profile-fields\">Managing Profile Fields</a>"
+msgstr ""
+
+#: bp-core/admin/bp-core-functions.php:526
+msgid ""
+"By default, all but four of the BuddyPress components are enabled. You can "
+"selectively enable or disable any of the components by using the form "
+"below. Your BuddyPress installation will continue to function. However, the "
+"features of the disabled components will no longer be accessible to anyone "
+"using the site."
+msgstr ""
+
+#: bp-core/admin/bp-core-functions.php:530
+msgid ""
+"BuddyPress Components use WordPress Pages for their root directory/archive "
+"pages. You can change the page associations for each active component by "
+"using the form below."
+msgstr ""
+
+#: bp-core/admin/bp-core-functions.php:534
+msgid ""
+"Extra configuration settings are provided and activated. You can "
+"selectively enable or disable any setting by using the form on this screen."
+msgstr ""
+
+#: bp-core/admin/bp-core-functions.php:538
+msgid ""
+"Your users will distinguish themselves through their profile page. Create "
+"relevant profile fields that will show on each users "
+"profile.</br></br>Note: Any fields in the first group will appear on the "
+"signup page."
+msgstr ""
+
+#. Plugin Name of the plugin/theme
+msgid "BuddyPress"
+msgstr ""
+
+#: bp-core/admin/bp-core-functions.php:720
+#: bp-core/admin/bp-core-functions.php:729
+msgid "Logged-In"
+msgstr ""
+
+#: bp-core/admin/bp-core-functions.php:723
+#: bp-core/admin/bp-core-functions.php:738
+msgid "Logged-Out"
+msgstr ""
+
+#: bp-core/admin/bp-core-functions.php:730
+msgid ""
+"<em>Logged-In</em> links are relative to the current user, and are not "
+"visible to visitors who are not logged in."
+msgstr ""
+
+#: bp-core/admin/bp-core-functions.php:739
+msgid "<em>Logged-Out</em> links are not visible to users who are logged in."
+msgstr ""
+
+#: bp-core/admin/bp-core-functions.php:749
+msgid "Add to Menu"
+msgstr ""
+
+#: bp-core/admin/bp-core-functions.php:881 bp-members/bp-members-actions.php:54
+#: bp-members/bp-members-admin.php:293
+msgid "User marked as spammer. Spam users are visible only to site admins."
+msgstr ""
+
+#: bp-core/admin/bp-core-functions.php:883
+msgid "User removed from spam."
+msgstr ""
+
+#: bp-core/admin/bp-core-settings.php:31
+msgid "Show the Toolbar for logged out users"
+msgstr ""
+
+#: bp-core/admin/bp-core-settings.php:47
+msgid "Allow registered members to delete their own accounts"
+msgstr ""
+
+#: bp-core/admin/bp-core-settings.php:72
+msgid "Allow Akismet to scan for activity stream spam"
+msgstr ""
+
+#: bp-core/admin/bp-core-settings.php:86
+msgid "Allow activity stream commenting on blog and forum posts"
+msgstr ""
+
+#: bp-core/admin/bp-core-settings.php:100
+msgid "Automatically check for new items while viewing the activity stream"
+msgstr ""
+
+#: bp-core/admin/bp-core-settings.php:138
+msgid "Enable BuddyPress to WordPress profile syncing"
+msgstr ""
+
+#: bp-core/admin/bp-core-settings.php:154
+msgid "Allow registered members to upload avatars"
+msgstr ""
+
+#: bp-core/admin/bp-core-settings.php:179
+msgid "Enable group creation for all users"
+msgstr ""
+
+#: bp-core/admin/bp-core-settings.php:180
+msgid "Administrators can always create groups, regardless of this setting."
+msgstr ""
+
+#: bp-core/admin/bp-core-settings.php:211
+msgid "Attempt to save a new config file."
+msgstr ""
+
+#: bp-core/admin/bp-core-settings.php:211 bp-core/admin/bp-core-tools.php:34
+msgid "Repair"
+msgstr ""
+
+#: bp-core/admin/bp-core-settings.php:212
+msgid "File does not exist"
+msgstr ""
+
+#: bp-core/admin/bp-core-settings.php:216
+msgid "Absolute path to your bbPress configuration file."
+msgstr ""
+
+#: bp-core/admin/bp-core-slugs.php:79
+msgid "Directories"
+msgstr ""
+
+#: bp-core/admin/bp-core-slugs.php:81
+msgid "Associate a WordPress Page with each BuddyPress component directory."
+msgstr ""
+
+#: bp-core/admin/bp-core-slugs.php:100 bp-core/admin/bp-core-slugs.php:163
+msgid "- None -"
+msgstr ""
+
+#: bp-core/admin/bp-core-slugs.php:104 bp-core/admin/bp-core-slugs.php:167
+msgid "New Page"
+msgstr ""
+
+#: bp-core/admin/bp-core-slugs.php:105 bp-core/admin/bp-core-slugs.php:168
+#: bp-templates/bp-legacy/buddypress/members/single/settings/capabilities.php:13
+#: bp-xprofile/bp-xprofile-classes.php:531
+#: bp-xprofile/bp-xprofile-classes.php:965
+msgid "Save"
+msgstr ""
+
+#: bp-core/admin/bp-core-slugs.php:142
+msgid "Registration"
+msgstr ""
+
+#: bp-core/admin/bp-core-slugs.php:144
+msgid "Associate WordPress Pages with the following BuddyPress Registration pages."
+msgstr ""
+
+#: bp-core/admin/bp-core-tools.php:19 bp-core/admin/bp-core-tools.php:383
+#: bp-core/admin/bp-core-tools.php:386 bp-core/bp-core-admin.php:289
+msgid "BuddyPress Tools"
+msgstr ""
+
+#: bp-core/admin/bp-core-tools.php:22 bp-core/admin/bp-core-tools.php:385
+msgid ""
+"BuddyPress keeps track of various relationships between users, groups, and "
+"activity items. Occasionally these relationships become out of sync, most "
+"often after an import, update, or migration."
+msgstr ""
+
+#: bp-core/admin/bp-core-tools.php:23
+msgid "Use the tools below to manually recalculate these relationships."
+msgstr ""
+
+#: bp-core/admin/bp-core-tools.php:25
+msgid ""
+"Some of these tools create substantial database overhead. Avoid running "
+"more than one repair job at a time."
+msgstr ""
+
+#: bp-core/admin/bp-core-tools.php:31
+msgid "Data to Repair:"
+msgstr ""
+
+#: bp-core/admin/bp-core-tools.php:49
+msgid "Repair Items"
+msgstr ""
+
+#: bp-core/admin/bp-core-tools.php:105
+msgid "Count total members"
+msgstr ""
+
+#: bp-core/admin/bp-core-tools.php:111
+msgid "Repair user \"last activity\" data"
+msgstr ""
+
+#: bp-core/admin/bp-core-tools.php:120
+msgid "Count friends for each user"
+msgstr ""
+
+#: bp-core/admin/bp-core-tools.php:130
+msgid "Count groups for each user"
+msgstr ""
+
+#: bp-core/admin/bp-core-tools.php:140
+msgid "Repopulate blogs records"
+msgstr ""
+
+#: bp-core/admin/bp-core-tools.php:164
+msgid "Counting the number of friends for each user&hellip; %s"
+msgstr ""
+
+#: bp-core/admin/bp-core-tools.php:165 bp-core/admin/bp-core-tools.php:221
+#: bp-core/admin/bp-core-tools.php:264
+msgid "Failed!"
+msgstr ""
+
+#: bp-core/admin/bp-core-tools.php:203 bp-core/admin/bp-core-tools.php:248
+#: bp-core/admin/bp-core-tools.php:276 bp-core/admin/bp-core-tools.php:292
+#: bp-core/admin/bp-core-tools.php:305
+msgid "Complete!"
+msgstr ""
+
+#: bp-core/admin/bp-core-tools.php:220
+msgid "Counting the number of groups for each user&hellip; %s"
+msgstr ""
+
+#: bp-core/admin/bp-core-tools.php:261
+msgid "Repopulating Blogs records&hellip; %s"
+msgstr ""
+
+#: bp-core/admin/bp-core-tools.php:289
+msgid "Counting the number of active members on the site&hellip; %s"
+msgstr ""
+
+#: bp-core/admin/bp-core-tools.php:303
+msgid "Determining last activity dates for each user&hellip; %s"
+msgstr ""
+
+#: bp-core/admin/bp-core-tools.php:361 bp-core/bp-core-admin.php:266
+#: bp-core/bp-core-admin.php:267
+msgid "Tools"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:195 bp-core/bp-core-admin.php:196
+#: bp-core/bp-core-admin.php:204 bp-core/bp-core-admin.php:205
+msgid "Welcome to BuddyPress"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:225
+msgid "BuddyPress Help"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:226
+msgid "Help"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:235
+msgid "BuddyPress Components"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:244 bp-core/bp-core-admin.php:245
+msgid "BuddyPress Pages"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:253 bp-core/bp-core-admin.php:254
+msgid "BuddyPress Settings"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:277 bp-core/bp-core-admin.php:278
+msgid "Available Tools"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:316
+msgid "Main Settings"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:319 bp-core/bp-core-admin.php:324
+msgid "Toolbar"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:329
+msgid "Account Deletion"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:342
+msgid "Profile Syncing"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:351
+msgid "Groups Settings"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:357
+msgid "Group Creation"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:366
+msgid "Legacy Group Forums"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:369
+msgid "bbPress Configuration"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:378
+msgid "Activity Settings"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:381
+msgid "Blog &amp; Forum Comments"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:385
+msgid "Activity auto-refresh"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:390
+msgid "Akismet"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:399
+msgid "Profile Photo Uploads"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:416
+msgid "About BuddyPress"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:440
+msgid "About"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:496 bp-core/bp-core-admin.php:677
+msgid "Welcome to BuddyPress %s"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:499 bp-core/bp-core-admin.php:680
+msgid ""
+"Thank you for installing BuddyPress! BuddyPress %s is our most streamlined "
+"and easy-to-use release to date, and we think you&#8217;re going to love it."
+msgstr ""
+
+#: bp-core/bp-core-admin.php:501 bp-core/bp-core-admin.php:682
+msgid ""
+"Howdy. BuddyPress %s is our most streamlined and easy-to-use release to "
+"date, and we think you&#8217;re going to love it."
+msgstr ""
+
+#: bp-core/bp-core-admin.php:509 bp-core/bp-core-admin.php:690
+msgid "What&#8217;s New"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:511 bp-core/bp-core-admin.php:692
+msgid "Credits"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:519
+msgid "Getting Started with BuddyPress"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:522
+msgid "Configure Buddypress"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:525
+msgid "Set Up Components"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:528
+msgid "Assign Components to Pages"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:531
+msgid "Customize Settings"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:534
+msgid "Get Started"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:537
+msgid "Administration Tools"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:540
+msgid "Add User Profile Fields"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:542
+msgid "Manage User Signups"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:544
+msgid "Moderate Activity Streams"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:547
+msgid "Manage Groups"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:549
+msgid "Repair Data"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:554
+msgid "Community and Support"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:555
+msgid ""
+"Looking for help? The <a href=\"http://codex.buddypress.org/\">BuddyPress "
+"Codex</a> has you covered."
+msgstr ""
+
+#: bp-core/bp-core-admin.php:556
+msgid ""
+"Can&#8217;t find what you need? Stop by <a "
+"href=\"http://buddypress.org/support/\">our support forums</a>, where "
+"active BuddyPress users and developers are waiting to share tips and more."
+msgstr ""
+
+#: bp-core/bp-core-admin.php:567
+msgid "Revamped @mentions Interface"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:568
+msgid ""
+"Forget the old days of trying to remember someone&#8217;s username when you "
+"want to @mention them in a conversation! With BuddyPress 2.1, type a "
+"<code>@</code> when leaving a status update or commenting on an activity "
+"item or blog post, and the new suggestions panel will open."
+msgstr ""
+
+#: bp-core/bp-core-admin.php:569
+msgid "Demo of at-mentions feature"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:575
+msgid "Continuous Improvement"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:579
+msgid "New Profile Field Type: URL"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:580
+msgid ""
+"Built to hold the address of another website, this new field type "
+"automatically creates a link to that site."
+msgstr ""
+
+#: bp-core/bp-core-admin.php:584
+msgid "Awesome Translations"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:585
+msgid ""
+"BuddyPress supports high-quality translations that are automatically "
+"fetched by WordPress. Many thanks to our translation volunteers for making "
+"this possible."
+msgstr ""
+
+#: bp-core/bp-core-admin.php:589
+msgid "Performance Improvements"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:590
+msgid ""
+"Like we do with every release, we&#8217ve made further optimizations to "
+"increase BuddyPress&#8217 performance and reduce its query overhead."
+msgstr ""
+
+#: bp-core/bp-core-admin.php:598
+msgid "Enhancements for Plugin &amp; Theme Developers"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:601
+msgid ""
+"If you&#8217re a plugin developer, or make custom themes, or want to "
+"contribute back to the BuddyPress project, here&#8217s what you should know "
+"about this release:"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:602
+msgid ""
+"If you&#8217ve used BuddyPress for a very long time, you might remember the "
+"<em>BuddyBar</em>; it was our toolbar before WordPress had its own toolbar. "
+"We started to deprecate it in BuddyPress 1.6. It is now formally "
+"deprecated, which means you should not use it for new sites."
+msgstr ""
+
+#: bp-core/bp-core-admin.php:605
+msgid ""
+"The classic <a href=\"%s\">BP Default theme has moved to Github</a>. We "
+"moved it because BuddyPress development is now focused on our <a "
+"href=\"%s\">theme compatibility</a> templates, which were introduced in "
+"BuddyPress 1.7. Don&#8217t worry, BP-Default is still bundled with "
+"BuddyPress releases."
+msgstr ""
+
+#: bp-core/bp-core-admin.php:613
+#. translators: don't translate the insides of the <code> block
+msgid ""
+"In BuddyPress 2.0, we added a new <code>BP_XProfile_Field_Type</code> API "
+"for managing profile field types. In this release, we&#8217ve added a new "
+"<code>bp_core_get_suggestions</code> API which powers our new @mentions "
+"interface. Both are cool, and are worth checking out."
+msgstr ""
+
+#: bp-core/bp-core-admin.php:619
+msgid "Other interesting changes:"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:625
+#. translators: don't translate the insides of the <code> block
+msgid ""
+"In <code>BP_Group_Extension</code>, the <code>visibility</code> and "
+"<code>enable_nav_item</code> properties have been phased out in favor of "
+"new <code>access</code> and <code>show_tab</code> parameters."
+msgstr ""
+
+#: bp-core/bp-core-admin.php:631
+#. translators: don't translate the insides of the <code> block
+msgid ""
+"A new <code>group_activity</code> sort order has been added for Groups "
+"queries, to let you query for recently active members."
+msgstr ""
+
+#: bp-core/bp-core-admin.php:637
+#. translators: don't translate the insides of the <code> block
+msgid ""
+"Extra CSS classes have been added to Profile Field visibility field "
+"elements, allowing greater CSS customization."
+msgstr ""
+
+#: bp-core/bp-core-admin.php:643
+#. translators: don't translate the insides of the <code> block
+msgid ""
+"A <code>no_access_url</code> parameter has been added to "
+"<code>bp_core_new_subnav_item()</code>. This allows you to set the URL that "
+"users are redirected to when they do not have permission to access a "
+"sub-navigation item."
+msgstr ""
+
+#: bp-core/bp-core-admin.php:649
+#. translators: don't translate the insides of the <code> block
+msgid ""
+"When making searches with <code>BP_User_Query</code>, a new "
+"<code>search_wildcard</code> parameter gives you finer control over how the "
+"search SQL is constructed."
+msgstr ""
+
+#: bp-core/bp-core-admin.php:654
+msgid "<a href=\"%s\">&hellip;and lots more!</a>"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:696
+msgid "BuddyPress is created by a worldwide network of friendly folks."
+msgstr ""
+
+#: bp-core/bp-core-admin.php:698
+msgid "Project Leaders"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:703
+msgid "Project Lead"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:708 bp-core/bp-core-admin.php:713
+msgid "Lead Developer"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:717
+msgid "Core Team"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:722 bp-core/bp-core-admin.php:727
+msgid "Core Developer"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:732
+msgid "Navigator"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:736
+msgid "Recent Rockstars"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:760
+msgid "Contributors to BuddyPress %s"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:807
+msgid "External Libraries"
+msgstr ""
+
+#: bp-core/bp-core-admin.php:835
+msgid "Maintenance Release"
+msgid_plural "Maintenance Releases"
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-core/bp-core-admin.php:836
+msgid "Security Release"
+msgid_plural "Security Releases"
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-core/bp-core-admin.php:837
+msgid "Maintenance and Security Release"
+msgid_plural "Maintenance and Security Releases"
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-core/bp-core-admin.php:840
+#. translators: 1: WordPress version number.
+msgid "<strong>Version %1$s</strong> addressed a security issue."
+msgid_plural "<strong>Version %1$s</strong> addressed some security issues."
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-core/bp-core-admin.php:845
+#. translators: 1: WordPress version number, 2: plural number of bugs.
+msgid "<strong>Version %1$s</strong> addressed %2$s bug."
+msgid_plural "<strong>Version %1$s</strong> addressed %2$s bugs."
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-core/bp-core-admin.php:850
+#. translators: 1: WordPress version number, 2: plural number of bugs. Singular
+#. security issue.
+msgid "<strong>Version %1$s</strong> addressed a security issue and fixed %2$s bug."
+msgid_plural ""
+"<strong>Version %1$s</strong> addressed a security issue and fixed %2$s "
+"bugs."
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-core/bp-core-admin.php:855
+#. translators: 1: WordPress version number, 2: plural number of bugs. More
+#. than one security issue.
+msgid ""
+"<strong>Version %1$s</strong> addressed some security issues and fixed %2$s "
+"bug."
+msgid_plural ""
+"<strong>Version %1$s</strong> addressed some security issues and fixed %2$s "
+"bugs."
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-core/bp-core-admin.php:859
+msgid "For more information, see <a href=\"%s\">the release notes</a>."
+msgstr ""
+
+#: bp-core/bp-core-adminbar.php:36 bp-core/deprecated/2.1.php:264
+msgid "My Account"
+msgstr ""
+
+#: bp-core/bp-core-adminbar.php:79
+msgid ""
+"The BuddyBar is no longer supported. Please migrate to the WordPress "
+"toolbar as soon as possible."
+msgstr ""
+
+#: bp-core/bp-core-avatars.php:303
+msgid "Profile Photo"
+msgstr ""
+
+#: bp-core/bp-core-avatars.php:578
+msgid "The image was uploaded successfully"
+msgstr ""
+
+#: bp-core/bp-core-avatars.php:579 bp-core/bp-core-avatars.php:580
+msgid "The image exceeds the maximum allowed file size of: "
+msgstr ""
+
+#: bp-core/bp-core-avatars.php:581
+msgid "The uploaded file was only partially uploaded."
+msgstr ""
+
+#: bp-core/bp-core-avatars.php:582
+msgid "The image was not uploaded."
+msgstr ""
+
+#: bp-core/bp-core-avatars.php:583
+msgid "Missing a temporary folder."
+msgstr ""
+
+#: bp-core/bp-core-avatars.php:587
+msgid "Your upload failed, please try again. Error was: %s"
+msgstr ""
+
+#: bp-core/bp-core-avatars.php:592
+msgid "The file you uploaded is too big. Please upload a file under %s"
+msgstr ""
+
+#: bp-core/bp-core-avatars.php:597
+msgid "Please upload only JPG, GIF or PNG photos."
+msgstr ""
+
+#: bp-core/bp-core-avatars.php:614 bp-core/bp-core-avatars.php:651
+msgid "Upload Failed! Error was: %s"
+msgstr ""
+
+#: bp-core/bp-core-avatars.php:669
+msgid "Upload failed! Error was: %s"
+msgstr ""
+
+#: bp-core/bp-core-avatars.php:679
+msgid ""
+"You have selected an image that is smaller than recommended. For best "
+"results, upload a picture larger than %d x %d pixels."
+msgstr ""
+
+#: bp-core/bp-core-avatars.php:856 bp-core/bp-core-classes.php:835
+#: bp-core/bp-core-classes.php:836 bp-core/bp-core-classes.php:837
+#: bp-core/bp-core-template.php:151 bp-core/bp-core-template.php:170
+#: bp-groups/bp-groups-template.php:4040 bp-groups/bp-groups-template.php:4041
+#: bp-groups/bp-groups-template.php:4042
+msgid "Profile photo of %s"
+msgstr ""
+
+#: bp-core/bp-core-buddybar.php:383 bp-core/bp-core-buddybar.php:394
+#: bp-core/bp-core-buddybar.php:414
+msgid "You do not have access to this page."
+msgstr ""
+
+#: bp-core/bp-core-caps.php:283 bp-core/bp-core-caps.php:295
+#: bp-core/bp-core-caps.php:309 bp-core/bp-core-caps.php:319
+msgid "Special community roles no longer exist. Use mapped capabilities instead"
+msgstr ""
+
+#: bp-core/bp-core-catchuri.php:276
+msgid ""
+"This user has been marked as a spammer. Only site admins can view this "
+"profile."
+msgstr ""
+
+#: bp-core/bp-core-catchuri.php:490 bp-core/bp-core-catchuri.php:550
+msgid "You must log in to access the page you requested."
+msgstr ""
+
+#: bp-core/bp-core-classes.php:852 bp-groups/bp-groups-template.php:4050
+msgid "%d group"
+msgid_plural "%d groups"
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-core/bp-core-dependency.php:88
+msgid "The current user is being initialized without using $wp->init()."
+msgstr ""
+
+#: bp-core/bp-core-filters.php:267 bp-core/bp-core-filters.php:298
+msgid "[User Set]"
+msgstr ""
+
+#: bp-core/bp-core-filters.php:327
+msgid ""
+"%1$s,\n"
+"\n"
+"\n"
+"\n"
+"Thanks for registering! To complete the activation of your account and "
+"blog, please click the following link:\n"
+"\n"
+"%2$s\n"
+"\n"
+"\n"
+"\n"
+"After you activate, you can visit your blog here:\n"
+"\n"
+"%3$s"
+msgstr ""
+
+#: bp-core/bp-core-filters.php:328
+msgid "Activate %s"
+msgstr ""
+
+#: bp-core/bp-core-filters.php:392 bp-members/bp-members-functions.php:1949
+msgid ""
+"Thanks for registering! To complete the activation of your account please "
+"click the following link:\n"
+"\n"
+"%1$s\n"
+"\n"
+msgstr ""
+
+#: bp-core/bp-core-filters.php:393 bp-members/bp-members-functions.php:1950
+msgid "Activate Your Account"
+msgstr ""
+
+#: bp-core/bp-core-filters.php:466
+#. translators: "group name | group nav section name"
+msgid "%1$s | %2$s"
+msgstr ""
+
+#: bp-core/bp-core-filters.php:471
+#. translators: "component item name | component nav section name | root
+#. component name"
+msgid "%1$s | %2$s | %3$s"
+msgstr ""
+
+#: bp-core/bp-core-filters.php:487 bp-members/bp-members-screens.php:517
+msgid "Create an Account"
+msgstr ""
+
+#: bp-core/bp-core-filters.php:491 bp-members/bp-members-screens.php:525
+msgid "Activate your Account"
+msgstr ""
+
+#: bp-core/bp-core-filters.php:495 bp-groups/bp-groups-template.php:2513
+#: bp-groups/bp-groups-template.php:2514
+msgid "Create a Group"
+msgstr ""
+
+#: bp-core/bp-core-functions.php:849
+msgid "sometime"
+msgstr ""
+
+#: bp-core/bp-core-functions.php:850
+msgid "right now"
+msgstr ""
+
+#: bp-core/bp-core-functions.php:851
+msgid "%s ago"
+msgstr ""
+
+#: bp-core/bp-core-functions.php:912
+msgid "%s year"
+msgid_plural "%s years"
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-core/bp-core-functions.php:915 bp-core/bp-core-functions.php:949
+msgid "%s month"
+msgid_plural "%s months"
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-core/bp-core-functions.php:918 bp-core/bp-core-functions.php:952
+msgid "%s week"
+msgid_plural "%s weeks"
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-core/bp-core-functions.php:921 bp-core/bp-core-functions.php:955
+msgid "%s day"
+msgid_plural "%s days"
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-core/bp-core-functions.php:924 bp-core/bp-core-functions.php:958
+msgid "%s hour"
+msgid_plural "%s hours"
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-core/bp-core-functions.php:927 bp-core/bp-core-functions.php:961
+msgid "%s minute"
+msgid_plural "%s minutes"
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-core/bp-core-functions.php:930 bp-core/bp-core-functions.php:964
+msgid "%s second"
+msgid_plural "%s seconds"
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-core/bp-core-functions.php:1152
+msgid "Not recently active"
+msgstr ""
+
+#: bp-core/bp-core-functions.php:1850 bp-core/bp-core-widgets.php:72
+#: bp-core/deprecated/1.5.php:307 bp-core/deprecated/2.1.php:306
+#: bp-members/bp-members-template.php:1103
+msgid "Log Out"
+msgstr ""
+
+#: bp-core/bp-core-functions.php:1917 bp-core/bp-core-widgets.php:90
+#: bp-core/deprecated/2.1.php:243
+msgid "Log In"
+msgstr ""
+
+#: bp-core/bp-core-template.php:81
+msgid "Options"
+msgstr ""
+
+#: bp-core/bp-core-template.php:106
+msgid "%s Directory"
+msgstr ""
+
+#: bp-core/bp-core-template.php:302
+msgid "%1$s at %2$s"
+msgstr ""
+
+#: bp-core/bp-core-template.php:443
+msgid "Search anything..."
+msgstr ""
+
+#: bp-core/bp-core-template.php:547
+msgid " [&hellip;]"
+msgstr ""
+
+#: bp-core/bp-core-template.php:771
+msgid "Community"
+msgstr ""
+
+#: bp-core/bp-core-widgets.php:38
+msgid ""
+"Show a Log In form to logged-out visitors, and a Log Out link to those who "
+"are logged in."
+msgstr ""
+
+#: bp-core/bp-core-widgets.php:82 bp-members/admin/bp-members-classes.php:125
+#: bp-members/admin/bp-members-classes.php:453
+#: bp-templates/bp-legacy/buddypress/members/register.php:32
+msgid "Username"
+msgstr ""
+
+#: bp-core/bp-core-widgets.php:85
+msgid "Password"
+msgstr ""
+
+#: bp-core/bp-core-widgets.php:88
+msgid "Remember Me"
+msgstr ""
+
+#: bp-core/bp-core-widgets.php:94
+msgid "<a href=\"%s\" title=\"Register for a new account\">Register</a>"
+msgstr ""
+
+#: bp-core/bp-core-widgets.php:133 bp-core/bp-core-widgets.php:288
+#: bp-core/bp-core-widgets.php:404 bp-core/bp-core-widgets.php:507
+#: bp-groups/bp-groups-widgets.php:146 bp-messages/bp-messages-widgets.php:110
+#: bp-templates/bp-legacy/buddypress/forums/index.php:86
+#: bp-templates/bp-legacy/buddypress/groups/single/forum/edit.php:47
+#: bp-templates/bp-legacy/buddypress/groups/single/forum.php:75
+msgid "Title:"
+msgstr ""
+
+#: bp-core/bp-core-widgets.php:151
+msgid "A dynamic list of recently active, popular, and newest members"
+msgstr ""
+
+#: bp-core/bp-core-widgets.php:199 bp-core/bp-core-widgets.php:297
+#: bp-core/deprecated/1.6.php:129 bp-core/deprecated/1.6.php:152
+#: bp-friends/bp-friends-widgets.php:98 bp-friends/bp-friends-widgets.php:186
+#: bp-groups/bp-groups-template.php:3091 bp-groups/bp-groups-widgets.php:74
+#: bp-groups/bp-groups-widgets.php:155
+#: bp-templates/bp-legacy/buddypress/blogs/index.php:39
+#: bp-templates/bp-legacy/buddypress/members/single/blogs.php:22
+msgid "Newest"
+msgstr ""
+
+#: bp-core/bp-core-widgets.php:200 bp-core/bp-core-widgets.php:298
+#: bp-friends/bp-friends-widgets.php:99 bp-friends/bp-friends-widgets.php:187
+#: bp-groups/bp-groups-widgets.php:75 bp-groups/bp-groups-widgets.php:156
+#: bp-members/bp-members-admin.php:913
+msgid "Active"
+msgstr ""
+
+#: bp-core/bp-core-widgets.php:204 bp-core/bp-core-widgets.php:299
+#: bp-friends/bp-friends-widgets.php:100 bp-friends/bp-friends-widgets.php:188
+#: bp-groups/bp-groups-widgets.php:76 bp-groups/bp-groups-widgets.php:157
+msgid "Popular"
+msgstr ""
+
+#: bp-core/bp-core-widgets.php:241
+msgid "No one has signed up yet!"
+msgstr ""
+
+#: bp-core/bp-core-widgets.php:275 bp-groups/bp-groups-admin.php:784
+#: bp-groups/bp-groups-template.php:2084 bp-members/bp-members-loader.php:23
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:231
+msgid "Members"
+msgstr ""
+
+#: bp-core/bp-core-widgets.php:290 bp-friends/bp-friends-widgets.php:179
+msgid "Link widget title to Members directory"
+msgstr ""
+
+#: bp-core/bp-core-widgets.php:292
+msgid "Max members to show:"
+msgstr ""
+
+#: bp-core/bp-core-widgets.php:295
+msgid "Default members to show:"
+msgstr ""
+
+#: bp-core/bp-core-widgets.php:317
+msgid "Profile photos of online users"
+msgstr ""
+
+#: bp-core/bp-core-widgets.php:364
+msgid "There are no users currently online"
+msgstr ""
+
+#: bp-core/bp-core-widgets.php:395
+msgid "Who's Online"
+msgstr ""
+
+#: bp-core/bp-core-widgets.php:406 bp-core/bp-core-widgets.php:509
+msgid "Max Members to show:"
+msgstr ""
+
+#: bp-core/bp-core-widgets.php:420
+msgid "Profile photos of recently active members"
+msgstr ""
+
+#: bp-core/bp-core-widgets.php:467
+msgid "There are no recently active members"
+msgstr ""
+
+#: bp-core/bp-core-widgets.php:498
+msgid "Recently Active Members"
+msgstr ""
+
+#: bp-core/bp-core-widgets.php:571 bp-friends/bp-friends-widgets.php:252
+msgid "There were no members found, please try another filter."
+msgstr ""
+
+#: bp-core/deprecated/1.5.php:142
+#: bp-templates/bp-legacy/buddypress/activity/post-form.php:45
+#: bp-templates/bp-legacy/buddypress/members/single/profile/profile-wp.php:8
+msgid "My Profile"
+msgstr ""
+
+#: bp-core/deprecated/1.5.php:149 bp-members/admin/bp-members-classes.php:126
+#: bp-members/admin/bp-members-classes.php:454
+#: bp-templates/bp-legacy/buddypress/members/single/profile/profile-wp.php:15
+msgid "Name"
+msgstr ""
+
+#: bp-core/deprecated/1.5.php:158
+#: bp-templates/bp-legacy/buddypress/members/single/profile/profile-wp.php:24
+msgid "About Me"
+msgstr ""
+
+#: bp-core/deprecated/1.5.php:167
+#: bp-templates/bp-legacy/buddypress/members/single/profile/profile-wp.php:33
+msgid "Website"
+msgstr ""
+
+#: bp-core/deprecated/1.5.php:176
+#: bp-templates/bp-legacy/buddypress/members/single/profile/profile-wp.php:42
+msgid "Jabber"
+msgstr ""
+
+#: bp-core/deprecated/1.5.php:185
+#: bp-templates/bp-legacy/buddypress/members/single/profile/profile-wp.php:51
+msgid "AOL Messenger"
+msgstr ""
+
+#: bp-core/deprecated/1.5.php:194
+#: bp-templates/bp-legacy/buddypress/members/single/profile/profile-wp.php:60
+msgid "Yahoo Messenger"
+msgstr ""
+
+#: bp-core/deprecated/1.5.php:352
+msgid "%1$s mentioned you in the group \"%2$s\""
+msgstr ""
+
+#: bp-core/deprecated/1.6.php:128 bp-core/deprecated/1.6.php:149
+#: bp-groups/bp-groups-template.php:3465 bp-groups/bp-groups-template.php:3486
+msgid "Recently Active"
+msgstr ""
+
+#: bp-core/deprecated/1.6.php:130 bp-core/deprecated/1.6.php:155
+#: bp-groups/bp-groups-template.php:3470 bp-groups/bp-groups-template.php:3501
+msgid "Alphabetically"
+msgstr ""
+
+#: bp-core/deprecated/2.1.php:130 bp-core/deprecated/2.1.php:314
+msgid "Dashboard"
+msgstr ""
+
+#: bp-core/deprecated/2.1.php:131 bp-core/deprecated/2.1.php:318
+msgid "New Post"
+msgstr ""
+
+#: bp-core/deprecated/2.1.php:132 bp-core/deprecated/2.1.php:319
+msgid "Manage Posts"
+msgstr ""
+
+#: bp-core/deprecated/2.1.php:133 bp-core/deprecated/2.1.php:320
+msgid "Manage Comments"
+msgstr ""
+
+#: bp-core/deprecated/2.1.php:146
+msgid "Create a Site!"
+msgstr ""
+
+#: bp-core/deprecated/2.1.php:166
+msgid "Switch to WordPress Toolbar"
+msgstr ""
+
+#: bp-core/deprecated/2.1.php:247
+msgid "Sign Up"
+msgstr ""
+
+#: bp-core/deprecated/2.1.php:340
+msgid "Visit"
+msgstr ""
+
+#: bp-core/deprecated/2.1.php:342
+msgid "Random Member"
+msgstr ""
+
+#: bp-core/deprecated/2.1.php:346
+msgid "Random Group"
+msgstr ""
+
+#: bp-core/deprecated/2.1.php:352
+msgid "Random Site"
+msgstr ""
+
+#: bp-core/deprecated/2.1.php:410 bp-core/deprecated/2.1.php:533
+msgid "Admin Options"
+msgstr ""
+
+#: bp-core/deprecated/2.1.php:413 bp-groups/bp-groups-adminbar.php:50
+msgid "Edit Details"
+msgstr ""
+
+#: bp-core/deprecated/2.1.php:415
+msgid "Group Settings"
+msgstr ""
+
+#: bp-core/deprecated/2.1.php:419 bp-groups/bp-groups-loader.php:617
+msgid "Group Profile Photo"
+msgstr ""
+
+#: bp-core/deprecated/2.1.php:425 bp-groups/bp-groups-adminbar.php:77
+msgid "Manage Invitations"
+msgstr ""
+
+#: bp-core/deprecated/2.1.php:429 bp-groups/bp-groups-adminbar.php:86
+msgid "Manage Members"
+msgstr ""
+
+#: bp-core/deprecated/2.1.php:433 bp-groups/bp-groups-adminbar.php:95
+msgid "Membership Requests"
+msgstr ""
+
+#: bp-core/deprecated/2.1.php:437 bp-groups/bp-groups-admin.php:893
+#: bp-groups/bp-groups-adminbar.php:104
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:332
+#: bp-xprofile/bp-xprofile-admin.php:118
+msgid "Delete Group"
+msgstr ""
+
+#: bp-core/deprecated/2.1.php:486
+msgid "Blog Authors"
+msgstr ""
+
+#: bp-core/deprecated/2.1.php:538
+msgid "Edit %s's Profile"
+msgstr ""
+
+#: bp-core/deprecated/2.1.php:542
+msgid "Edit %s's Profile Photo"
+msgstr ""
+
+#: bp-core/deprecated/2.1.php:544 bp-members/bp-members-adminbar.php:121
+msgid "User Capabilities"
+msgstr ""
+
+#: bp-core/deprecated/2.1.php:546
+msgid "Delete %s's Account"
+msgstr ""
+
+#: bp-core/deprecated/2.1.php:591
+msgid "No new notifications."
+msgstr ""
+
+#: bp-forums/bp-forums-loader.php:28
+msgid "Discussion Forums"
+msgstr ""
+
+#: bp-forums/bp-forums-loader.php:70
+msgid "Search Forums..."
+msgstr ""
+
+#: bp-forums/bp-forums-loader.php:154 bp-forums/bp-forums-loader.php:207
+msgid "Topics Started"
+msgstr ""
+
+#: bp-forums/bp-forums-loader.php:165
+msgid "Replied To"
+msgstr ""
+
+#: bp-forums/bp-forums-loader.php:215
+msgid "Replies"
+msgstr ""
+
+#: bp-forums/bp-forums-loader.php:223
+msgid "Favorite Topics"
+msgstr ""
+
+#: bp-forums/bp-forums-screens.php:25 bp-forums/bp-forums-screens.php:182
+msgid "The forums component has not been set up yet."
+msgstr ""
+
+#: bp-forums/bp-forums-screens.php:48 bp-groups/bp-groups-screens.php:381
+msgid "Please provide a title for your forum topic."
+msgstr ""
+
+#: bp-forums/bp-forums-screens.php:50 bp-groups/bp-groups-screens.php:383
+msgid "Forum posts cannot be empty. Please enter some text."
+msgstr ""
+
+#: bp-forums/bp-forums-screens.php:57 bp-groups/bp-groups-screens.php:395
+msgid "There was an error when creating the topic"
+msgstr ""
+
+#: bp-forums/bp-forums-screens.php:60 bp-groups/bp-groups-screens.php:398
+msgid "The topic was created successfully"
+msgstr ""
+
+#: bp-forums/bp-forums-screens.php:68 bp-forums/bp-forums-screens.php:73
+msgid "Please pick the group forum where you would like to post this topic."
+msgstr ""
+
+#: bp-forums/bp-forums-screens.php:208 bp-groups/bp-groups-template.php:2358
+#: bp-groups/bp-groups-template.php:2359
+#: bp-templates/bp-legacy/buddypress/groups/single/forum.php:19
+msgid "New Topic"
+msgstr ""
+
+#: bp-forums/bp-forums-template.php:756 bp-forums/bp-forums-template.php:870
+#: bp-forums/bp-forums-template.php:2014
+#: bp-messages/bp-messages-classes.php:484
+#: bp-messages/bp-messages-template.php:1525
+#: bp-messages/bp-messages-template.php:1717
+msgid "Deleted User"
+msgstr ""
+
+#: bp-forums/bp-forums-template.php:916
+msgid "Group logo for %s"
+msgstr ""
+
+#: bp-forums/bp-forums-template.php:1103 bp-groups/bp-groups-template.php:1648
+msgid "%d post"
+msgstr ""
+
+#: bp-forums/bp-forums-template.php:1105 bp-groups/bp-groups-template.php:1650
+msgid "%d posts"
+msgstr ""
+
+#: bp-forums/bp-forums-template.php:1291
+msgid "Edit Topic"
+msgstr ""
+
+#: bp-forums/bp-forums-template.php:1295
+msgid "Sticky Topic"
+msgstr ""
+
+#: bp-forums/bp-forums-template.php:1297
+msgid "Un-stick Topic"
+msgstr ""
+
+#: bp-forums/bp-forums-template.php:1300
+msgid "Open Topic"
+msgstr ""
+
+#: bp-forums/bp-forums-template.php:1302
+msgid "Close Topic"
+msgstr ""
+
+#: bp-forums/bp-forums-template.php:1304
+msgid "Delete Topic"
+msgstr ""
+
+#: bp-forums/bp-forums-template.php:1525
+msgid " matching tag \"%s\""
+msgstr ""
+
+#: bp-forums/bp-forums-template.php:1527
+msgid "Viewing 1 topic"
+msgid_plural "Viewing %1$s - %2$s of %3$s topics"
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-forums/bp-forums-template.php:2166
+msgid "Viewing 1 post"
+msgid_plural "Viewing %1$s - %2$s of %3$s posts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-forums/deprecated/1.6.php:31 bp-forums/deprecated/1.6.php:133
+msgid "Configure bbPress"
+msgstr ""
+
+#: bp-forums/deprecated/1.6.php:34 bp-forums/deprecated/1.6.php:136
+msgid "Install bbPress"
+msgstr ""
+
+#: bp-forums/deprecated/1.6.php:47
+msgid "Settings Saved."
+msgstr ""
+
+#: bp-forums/deprecated/1.6.php:68
+msgid "(Installed)"
+msgstr ""
+
+#: bp-forums/deprecated/1.6.php:68 bp-forums/deprecated/1.6.php:210
+msgid "Forums for Groups"
+msgstr ""
+
+#: bp-forums/deprecated/1.6.php:70 bp-forums/deprecated/1.6.php:212
+msgid ""
+"Give each individual group its own discussion forum. Choose this if you'd "
+"like to keep your members' conversations separated into distinct areas."
+msgstr ""
+
+#: bp-forums/deprecated/1.6.php:72 bp-forums/deprecated/1.6.php:214
+msgid ""
+"Note: This component is retired and will not be receiving any updates in "
+"the future.  Only use this component if your current site relies on it."
+msgstr ""
+
+#: bp-forums/deprecated/1.6.php:74 bp-forums/deprecated/1.6.php:216
+msgid "Features"
+msgstr ""
+
+#: bp-forums/deprecated/1.6.php:76 bp-forums/deprecated/1.6.php:218
+msgid "Group Integration"
+msgstr ""
+
+#: bp-forums/deprecated/1.6.php:77 bp-forums/deprecated/1.6.php:219
+msgid "Member Profile Integration"
+msgstr ""
+
+#: bp-forums/deprecated/1.6.php:78 bp-forums/deprecated/1.6.php:220
+msgid "Activity Stream Integration"
+msgstr ""
+
+#: bp-forums/deprecated/1.6.php:79 bp-forums/deprecated/1.6.php:221
+msgid "@ Mention Integration"
+msgstr ""
+
+#: bp-forums/deprecated/1.6.php:83
+msgid "Uninstall Group Forums"
+msgstr ""
+
+#: bp-forums/deprecated/1.6.php:88 bp-forums/deprecated/1.6.php:231
+msgid "New! bbPress"
+msgstr ""
+
+#: bp-forums/deprecated/1.6.php:89 bp-forums/deprecated/1.6.php:232
+msgid ""
+"bbPress is a brand-new forum plugin from one of the lead developers of "
+"BuddyPress."
+msgstr ""
+
+#: bp-forums/deprecated/1.6.php:91 bp-forums/deprecated/1.6.php:234
+msgid ""
+"It boasts a bunch of cool features that the BP Legacy Discussion Forums "
+"does not have including:"
+msgstr ""
+
+#: bp-forums/deprecated/1.6.php:94 bp-forums/deprecated/1.6.php:237
+msgid "Non-group specific forum creation"
+msgstr ""
+
+#: bp-forums/deprecated/1.6.php:95 bp-forums/deprecated/1.6.php:238
+msgid "Moderation via the WP admin dashboard"
+msgstr ""
+
+#: bp-forums/deprecated/1.6.php:96 bp-forums/deprecated/1.6.php:239
+msgid "Topic splitting"
+msgstr ""
+
+#: bp-forums/deprecated/1.6.php:97 bp-forums/deprecated/1.6.php:240
+msgid "Revisions"
+msgstr ""
+
+#: bp-forums/deprecated/1.6.php:98 bp-forums/deprecated/1.6.php:241
+msgid "Spam management"
+msgstr ""
+
+#: bp-forums/deprecated/1.6.php:99 bp-forums/deprecated/1.6.php:242
+msgid "Subscriptions"
+msgstr ""
+
+#: bp-forums/deprecated/1.6.php:100 bp-forums/deprecated/1.6.php:243
+msgid "And more!"
+msgstr ""
+
+#: bp-forums/deprecated/1.6.php:103 bp-forums/deprecated/1.6.php:246
+msgid ""
+"If you decide to use bbPress, you will need to deactivate the legacy group "
+"forum component.  For more info, <a href=\"%s\">read this codex article</a>."
+msgstr ""
+
+#: bp-forums/deprecated/1.6.php:143
+msgid "The bb-config.php file was not found at that location, please try again."
+msgstr ""
+
+#: bp-forums/deprecated/1.6.php:146
+msgid "Forums were set up correctly using your existing bbPress install!"
+msgstr ""
+
+#: bp-forums/deprecated/1.6.php:147
+msgid ""
+"BuddyPress will now use its internal copy of bbPress to run the forums on "
+"your site. If you wish, you can remove your old bbPress installation files, "
+"as long as you keep the bb-config.php file in the same location."
+msgstr ""
+
+#: bp-forums/deprecated/1.6.php:152
+msgid "Existing bbPress Installation"
+msgstr ""
+
+#: bp-forums/deprecated/1.6.php:153
+msgid ""
+"BuddyPress can make use of your existing bbPress install. Just provide the "
+"location of your <code>bb-config.php</code> file, and BuddyPress will do "
+"the rest."
+msgstr ""
+
+#: bp-forums/deprecated/1.6.php:155 bp-forums/deprecated/1.6.php:187
+msgid "Complete Installation"
+msgstr ""
+
+#: bp-forums/deprecated/1.6.php:171
+msgid ""
+"<p>All done! Configuration settings have been saved to the file "
+"<code>bb-config.php</code> in the root of your WordPress install.</p>"
+msgstr ""
+
+#: bp-forums/deprecated/1.6.php:175
+msgid ""
+"<p>A configuration file could not be created. No problem, but you will need "
+"to save the text shown below into a file named <code>bb-config.php</code> "
+"in the root directory of your WordPress installation before you can start "
+"using the forum functionality.</p>"
+msgstr ""
+
+#: bp-forums/deprecated/1.6.php:184
+msgid "New bbPress Installation"
+msgstr ""
+
+#: bp-forums/deprecated/1.6.php:185
+msgid ""
+"You've decided to set up a new installation of bbPress for forum management "
+"in BuddyPress. This is very simple and is usually just a one click\n"
+"\t\t\t\tprocess. When you're ready, hit the link below."
+msgstr ""
+
+#: bp-forums/deprecated/1.6.php:197
+msgid ""
+"bbPress files were not found. To install the forums component you must "
+"download a copy of bbPress and make sure it is in the folder: \"%s\""
+msgstr ""
+
+#: bp-forums/deprecated/1.6.php:225
+msgid "Install Group Forums"
+msgstr ""
+
+#: bp-forums/deprecated/1.6.php:226
+msgid "Use Existing Installation"
+msgstr ""
+
+#: bp-friends/bp-friends-actions.php:38
+msgid "Friendship could not be requested."
+msgstr ""
+
+#: bp-friends/bp-friends-actions.php:40
+msgid "Friendship requested"
+msgstr ""
+
+#: bp-friends/bp-friends-actions.php:44
+msgid "You are already friends with this user"
+msgstr ""
+
+#: bp-friends/bp-friends-actions.php:46
+msgid "You already have a pending friendship request with this user"
+msgstr ""
+
+#: bp-friends/bp-friends-actions.php:76
+#: bp-templates/bp-legacy/buddypress-functions.php:1099
+msgid "Friendship could not be canceled."
+msgstr ""
+
+#: bp-friends/bp-friends-actions.php:78
+msgid "Friendship canceled"
+msgstr ""
+
+#: bp-friends/bp-friends-actions.php:82
+msgid "You are not yet friends with this user"
+msgstr ""
+
+#: bp-friends/bp-friends-actions.php:84
+msgid "You have a pending friendship request with this user"
+msgstr ""
+
+#: bp-friends/bp-friends-activity.php:98
+msgid "Friendships accepted"
+msgstr ""
+
+#: bp-friends/bp-friends-activity.php:100
+#: bp-friends/bp-friends-activity.php:109 bp-friends/bp-friends-loader.php:229
+msgid "Friendships"
+msgstr ""
+
+#: bp-friends/bp-friends-activity.php:107
+msgid "New friendships"
+msgstr ""
+
+#: bp-friends/bp-friends-activity.php:114
+msgid "New friendship created"
+msgstr ""
+
+#: bp-friends/bp-friends-activity.php:132
+#: bp-friends/bp-friends-activity.php:158
+msgid "%1$s and %2$s are now friends"
+msgstr ""
+
+#: bp-friends/bp-friends-loader.php:92
+msgid "Search Friends..."
+msgstr ""
+
+#: bp-friends/bp-friends-loader.php:119
+msgid "Friends <span class=\"%s\">%s</span>"
+msgstr ""
+
+#: bp-friends/bp-friends-notifications.php:43
+msgid "New friendship request from %s"
+msgstr ""
+
+#: bp-friends/bp-friends-notifications.php:44
+msgid ""
+"%1$s wants to add you as a friend.\n"
+"\n"
+"To view all of your pending friendship requests: %2$s\n"
+"\n"
+"To view %3$s's profile: %4$s\n"
+"\n"
+"---------------------\n"
+msgstr ""
+
+#: bp-friends/bp-friends-notifications.php:94
+#: bp-friends/bp-friends-notifications.php:144
+msgid "%s accepted your friendship request"
+msgstr ""
+
+#: bp-friends/bp-friends-notifications.php:95
+msgid ""
+"%1$s accepted your friend request.\n"
+"\n"
+"To view %2$s's profile: %3$s\n"
+"\n"
+"---------------------\n"
+msgstr ""
+
+#: bp-friends/bp-friends-notifications.php:141
+msgid "%d friends accepted your friendship requests"
+msgstr ""
+
+#: bp-friends/bp-friends-notifications.php:155
+msgid "You have %d pending friendship requests"
+msgstr ""
+
+#: bp-friends/bp-friends-notifications.php:158
+msgid "You have a friendship request from %s"
+msgstr ""
+
+#: bp-friends/bp-friends-screens.php:36
+msgid "Friendship accepted"
+msgstr ""
+
+#: bp-friends/bp-friends-screens.php:38
+msgid "Friendship could not be accepted"
+msgstr ""
+
+#: bp-friends/bp-friends-screens.php:47
+msgid "Friendship rejected"
+msgstr ""
+
+#: bp-friends/bp-friends-screens.php:49
+msgid "Friendship could not be rejected"
+msgstr ""
+
+#: bp-friends/bp-friends-screens.php:58
+msgid "Friendship request withdrawn"
+msgstr ""
+
+#: bp-friends/bp-friends-screens.php:60
+msgid "Friendship request could not be withdrawn"
+msgstr ""
+
+#: bp-friends/bp-friends-template.php:66
+msgid "My Friends"
+msgstr ""
+
+#: bp-friends/bp-friends-template.php:66
+msgid "%s's Friends"
+msgstr ""
+
+#: bp-friends/bp-friends-template.php:66
+msgid "See All"
+msgstr ""
+
+#: bp-friends/bp-friends-template.php:86
+msgid "You haven't added any friend connections yet."
+msgstr ""
+
+#: bp-friends/bp-friends-template.php:86
+msgid "%s hasn't created any friend connections yet."
+msgstr ""
+
+#: bp-friends/bp-friends-template.php:156
+msgid "There aren't enough site members to show a random sample just yet."
+msgstr ""
+
+#: bp-friends/bp-friends-template.php:173
+msgid "Filter Friends"
+msgstr ""
+
+#: bp-friends/bp-friends-template.php:216
+msgid "%d friend"
+msgstr ""
+
+#: bp-friends/bp-friends-template.php:218
+msgid "%d friends"
+msgstr ""
+
+#: bp-friends/bp-friends-template.php:313
+#: bp-templates/bp-legacy/buddypress-functions.php:1111
+msgid "Cancel Friendship Request"
+msgstr ""
+
+#: bp-friends/bp-friends-template.php:314
+msgid "Cancel Friendship Requested"
+msgstr ""
+
+#: bp-friends/bp-friends-template.php:330
+#: bp-friends/bp-friends-template.php:331
+msgid "Friendship Requested"
+msgstr ""
+
+#: bp-friends/bp-friends-template.php:347
+#: bp-friends/bp-friends-template.php:348
+msgid "Cancel Friendship"
+msgstr ""
+
+#: bp-friends/bp-friends-template.php:364
+#: bp-friends/bp-friends-template.php:365
+#: bp-templates/bp-legacy/buddypress-functions.php:1101
+#: bp-templates/bp-legacy/buddypress-functions.php:1119
+msgid "Add Friend"
+msgstr ""
+
+#: bp-friends/bp-friends-template.php:583
+msgid "%s friend"
+msgid_plural "%s friends"
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-friends/bp-friends-widgets.php:48
+msgid ""
+"A dynamic list of recently active, popular, and newest Friends of the "
+"displayed member.  Widget is only shown when viewing a member profile."
+msgstr ""
+
+#: bp-friends/bp-friends-widgets.php:73
+msgid "%s&#8217;s Friends"
+msgstr ""
+
+#: bp-friends/bp-friends-widgets.php:135
+#: bp-templates/bp-legacy/buddypress/members/members-loop.php:108
+msgid "Sorry, no members were found."
+msgstr ""
+
+#: bp-friends/bp-friends-widgets.php:181
+msgid "Max friends to show:"
+msgstr ""
+
+#: bp-friends/bp-friends-widgets.php:184
+msgid "Default friends to show:"
+msgstr ""
+
+#: bp-groups/bp-groups-actions.php:39
+msgid "You do not have access to this group."
+msgstr ""
+
+#: bp-groups/bp-groups-actions.php:50
+msgid "You are not an admin of this group."
+msgstr ""
+
+#: bp-groups/bp-groups-actions.php:108
+msgid "Sorry, you are not allowed to create groups."
+msgstr ""
+
+#: bp-groups/bp-groups-actions.php:131
+msgid "There was an error saving group details. Please try again."
+msgstr ""
+
+#: bp-groups/bp-groups-actions.php:146
+msgid "Only the group creator may continue editing this group."
+msgstr ""
+
+#: bp-groups/bp-groups-actions.php:159
+msgid "Please fill in all of the required fields"
+msgstr ""
+
+#: bp-groups/bp-groups-actions.php:166 bp-groups/bp-groups-actions.php:190
+msgid "There was an error saving group details, please try again."
+msgstr ""
+
+#: bp-groups/bp-groups-actions.php:274 bp-groups/bp-groups-screens.php:488
+msgid "Invite successfully removed"
+msgstr ""
+
+#: bp-groups/bp-groups-actions.php:278 bp-groups/bp-groups-screens.php:499
+msgid "There was an error removing the invite"
+msgstr ""
+
+#: bp-groups/bp-groups-actions.php:309
+msgid ""
+"There was an error saving the group profile photo, please try uploading "
+"again."
+msgstr ""
+
+#: bp-groups/bp-groups-actions.php:311
+msgid "The group profile photo was uploaded successfully!"
+msgstr ""
+
+#: bp-groups/bp-groups-actions.php:338 bp-groups/bp-groups-actions.php:345
+msgid "There was an error joining the group."
+msgstr ""
+
+#: bp-groups/bp-groups-actions.php:347
+msgid "You joined the group!"
+msgstr ""
+
+#: bp-groups/bp-groups-actions.php:385 bp-groups/bp-groups-screens.php:785
+msgid "This group must have at least one admin"
+msgstr ""
+
+#: bp-groups/bp-groups-actions.php:387
+msgid "There was an error leaving the group."
+msgstr ""
+
+#: bp-groups/bp-groups-actions.php:389 bp-groups/bp-groups-functions.php:370
+msgid "You successfully left the group."
+msgstr ""
+
+#: bp-groups/bp-groups-actions.php:476
+msgid "Activity feed for the group, %s."
+msgstr ""
+
+#: bp-groups/bp-groups-activity.php:31
+msgid "Created a group"
+msgstr ""
+
+#: bp-groups/bp-groups-activity.php:33
+msgid "New Groups"
+msgstr ""
+
+#: bp-groups/bp-groups-activity.php:40
+msgid "Joined a group"
+msgstr ""
+
+#: bp-groups/bp-groups-activity.php:42
+msgid "Group Memberships"
+msgstr ""
+
+#: bp-groups/bp-groups-activity.php:53
+msgid "New group forum topic"
+msgstr ""
+
+#: bp-groups/bp-groups-activity.php:55
+msgid "Forum Topics"
+msgstr ""
+
+#: bp-groups/bp-groups-activity.php:62
+msgid "New group forum post"
+msgstr ""
+
+#: bp-groups/bp-groups-activity.php:64
+msgid "Forum Replies"
+msgstr ""
+
+#: bp-groups/bp-groups-activity.php:91
+msgid "%1$s created the group %2$s"
+msgstr ""
+
+#: bp-groups/bp-groups-activity.php:114 bp-groups/bp-groups-activity.php:284
+msgid "%1$s joined the group %2$s"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:113
+msgid ""
+"This page is a convenient way to edit the details associated with one of "
+"your groups."
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:114
+msgid ""
+"The Name and Description box is fixed in place, but you can reposition all "
+"the other boxes using drag and drop, and can minimize or expand them by "
+"clicking the title bar of each box. Use the Screen Options tab to hide or "
+"unhide, or to choose a 1- or 2-column layout for this screen."
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:120
+msgid "Support Forums"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:148
+msgid ""
+"You can manage groups much like you can manage comments and other content. "
+"This screen is customizable in the same ways as other management screens, "
+"and you can act on groups by using the on-hover action links or the Bulk "
+"Actions."
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:153
+msgid "Group Actions"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:155
+msgid ""
+"Clicking \"Visit\" will take you to the group&#8217;s public page. Use this "
+"link to see what the group looks like on the front end of your site."
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:156
+msgid ""
+"Clicking \"Edit\" will take you to a Dashboard panel where you can manage "
+"various details about the group, such as its name and description, its "
+"members, and other settings."
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:157
+msgid ""
+"If you click \"Delete\" under a specific group, or select a number of "
+"groups and then choose Delete from the Bulk Actions menu, you will be led "
+"to a page where you&#8217;ll be asked to confirm the permanent deletion of "
+"the group(s)."
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:172
+msgid "Start typing a username to add a new member."
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:173
+msgid ""
+"If you leave this page, you will lose any unsaved changes you have made to "
+"the group."
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:454
+msgid "You cannot remove all administrators from a group."
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:458
+msgid "An error occurred when trying to update your group details."
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:460
+msgid "The group has been updated successfully."
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:464
+msgid "The following users could not be added to the group: <em>%s</em>"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:468
+msgid "The following users were successfully added to the group: <em>%s</em>"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:473
+msgid "An error occurred when trying to modify the following members: <em>%s</em>"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:478
+msgid "The following members were successfully modified: <em>%s</em>"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:497 bp-groups/bp-groups-adminbar.php:42
+#: bp-xprofile/bp-xprofile-admin.php:114
+msgid "Edit Group"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:500 bp-groups/bp-groups-admin.php:647
+msgid "Add New"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:519
+msgid "Name and Description"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:523
+msgid "Permalink:"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:523
+msgid "Visit Group"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:550
+msgid "No group found with this ID. <a href=\"%s\">Go back and try again</a>."
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:593
+msgid "Delete Groups"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:594
+msgid "You are about to delete the following groups:"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:602 bp-members/bp-members-admin.php:1797
+msgid "This action cannot be undone."
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:631
+msgid "%s group has been permanently deleted."
+msgid_plural "%s groups have been permanently deleted."
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-groups/bp-groups-admin.php:644 bp-groups/bp-groups-notifications.php:443
+#: bp-groups/bp-groups-notifications.php:479
+#: bp-groups/bp-groups-notifications.php:515
+#: bp-groups/bp-groups-notifications.php:551 bp-groups/bp-groups-widgets.php:53
+#: bp-groups/bp-groups-widgets.php:133
+msgid "Groups"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:664
+msgid "Search all Groups"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:687
+#: bp-templates/bp-legacy/buddypress/groups/create.php:115
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:47
+msgid "Enable discussion forum"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:693
+msgid "Privacy"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:696 bp-groups/bp-groups-admin.php:1456
+#: bp-groups/bp-groups-template.php:1083
+msgid "Public"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:697 bp-groups/bp-groups-admin.php:1459
+#: bp-groups/bp-groups-template.php:1085
+msgid "Private"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:698 bp-groups/bp-groups-admin.php:1462
+msgid "Hidden"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:705
+msgid "Who can invite others to this group?"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:708
+#: bp-templates/bp-legacy/buddypress/groups/create.php:92
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:99
+msgid "All group members"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:709
+#: bp-templates/bp-legacy/buddypress/groups/create.php:97
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:104
+msgid "Group admins and mods only"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:710
+#: bp-templates/bp-legacy/buddypress/groups/create.php:102
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:109
+msgid "Group admins only"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:726
+msgid "Enter a comma-separated list of user logins."
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:782
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:177
+msgid "Administrators"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:783
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:205
+msgid "Moderators"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:785
+msgid "Banned Members"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:821
+msgid "Roles"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:822
+msgid "Administrator"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:823
+msgid "Moderator"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:824 bp-members/bp-members-admin.php:709
+msgid "Member"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:826
+msgid "Banned"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:829 bp-members/bp-members-admin.php:1265
+#: bp-templates/bp-legacy/buddypress/members/single/notifications/notifications-loop.php:7
+msgid "Actions"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:830
+msgid "Remove"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:832
+msgid "Ban"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:868
+msgid "No members of this type"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:897 bp-groups/bp-groups-classes.php:3268
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:32
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:117
+#: bp-templates/bp-legacy/buddypress/groups/single/forum/edit.php:58
+#: bp-templates/bp-legacy/buddypress/groups/single/forum/edit.php:74
+#: bp-templates/bp-legacy/buddypress/members/single/profile/edit.php:63
+#: bp-templates/bp-legacy/buddypress/members/single/settings/general.php:23
+#: bp-templates/bp-legacy/buddypress/members/single/settings/notifications.php:11
+#: bp-xprofile/bp-xprofile-classes.php:478
+msgid "Save Changes"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:946
+msgid "&laquo;"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:947
+msgid "&raquo;"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:953 bp-groups/bp-groups-template.php:3037
+#: bp-members/bp-members-template.php:543
+msgid "Viewing 1 member"
+msgid_plural "Viewing %1$s - %2$s of %3$s members"
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-groups/bp-groups-admin.php:1018
+#. translators: 1: user_login, 2: user_email
+msgid "%1$s (%2$s)"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:1201
+msgid "No groups found."
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:1272
+msgid "Public <span class=\"count\">(%s)</span>"
+msgid_plural "Public <span class=\"count\">(%s)</span>"
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-groups/bp-groups-admin.php:1273
+msgid "Private <span class=\"count\">(%s)</span>"
+msgid_plural "Private <span class=\"count\">(%s)</span>"
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-groups/bp-groups-admin.php:1274
+msgid "Hidden <span class=\"count\">(%s)</span>"
+msgid_plural "Hidden <span class=\"count\">(%s)</span>"
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-groups/bp-groups-admin.php:1349
+msgid "Select group %1$d"
+msgstr ""
+
+#: bp-groups/bp-groups-adminbar.php:58
+msgid "Edit Settings"
+msgstr ""
+
+#: bp-groups/bp-groups-adminbar.php:67 bp-members/bp-members-adminbar.php:109
+msgid "Edit Profile Photo"
+msgstr ""
+
+#: bp-groups/bp-groups-classes.php:2071
+msgid "Group Mod"
+msgstr ""
+
+#: bp-groups/bp-groups-classes.php:2077 bp-groups/bp-groups-functions.php:153
+msgid "Group Admin"
+msgstr ""
+
+#: bp-groups/bp-groups-classes.php:3561
+msgid "You do not have access to this content."
+msgstr ""
+
+#: bp-groups/bp-groups-forums.php:117 bp-groups/bp-groups-forums.php:284
+msgid "%1$s replied to the forum topic %2$s in the group %3$s"
+msgstr ""
+
+#: bp-groups/bp-groups-forums.php:173
+msgid "%1$s started the forum topic %2$s in the group %3$s"
+msgstr ""
+
+#: bp-groups/bp-groups-forums.php:230
+msgid "%1$s edited the forum topic %2$s in the group %3$s"
+msgstr ""
+
+#: bp-groups/bp-groups-functions.php:360
+msgid "As the only admin, you cannot leave the group."
+msgstr ""
+
+#: bp-groups/bp-groups-functions.php:817
+msgid "%1$s posted an update in the group %2$s"
+msgstr ""
+
+#: bp-groups/bp-groups-loader.php:386 bp-groups/bp-groups-loader.php:416
+msgid "Memberships"
+msgstr ""
+
+#: bp-groups/bp-groups-loader.php:397
+msgid "Invitations"
+msgstr ""
+
+#: bp-groups/bp-groups-loader.php:621
+msgid "No Group Profile Photo"
+msgstr ""
+
+#: bp-groups/bp-groups-notifications.php:28
+msgid "Group Details Updated"
+msgstr ""
+
+#: bp-groups/bp-groups-notifications.php:47
+msgid ""
+"Group details for the group \"%1$s\" were updated:\n"
+"\n"
+"To view the group: %2$s\n"
+"\n"
+"---------------------\n"
+msgstr ""
+
+#: bp-groups/bp-groups-notifications.php:116
+msgid "Membership request for group: %s"
+msgstr ""
+
+#: bp-groups/bp-groups-notifications.php:118
+msgid ""
+"%1$s wants to join the group \"%2$s\".\n"
+"\n"
+"Because you are the administrator of this group, you must either accept or "
+"reject the membership request.\n"
+"\n"
+"To view all pending membership requests for this group, please visit:\n"
+"%3$s\n"
+"\n"
+"To view %4$s's profile: %5$s\n"
+"\n"
+"---------------------\n"
+msgstr ""
+
+#: bp-groups/bp-groups-notifications.php:189
+msgid "Membership request for group \"%s\" accepted"
+msgstr ""
+
+#: bp-groups/bp-groups-notifications.php:190
+msgid ""
+"Your membership request for the group \"%1$s\" has been accepted.\n"
+"\n"
+"To view the group please login and visit: %2$s\n"
+"\n"
+"---------------------\n"
+msgstr ""
+
+#: bp-groups/bp-groups-notifications.php:199
+msgid "Membership request for group \"%s\" rejected"
+msgstr ""
+
+#: bp-groups/bp-groups-notifications.php:200
+msgid ""
+"Your membership request for the group \"%1$s\" has been rejected.\n"
+"\n"
+"To submit another request please log in and visit: %2$s\n"
+"\n"
+"---------------------\n"
+msgstr ""
+
+#: bp-groups/bp-groups-notifications.php:239
+msgid "an administrator"
+msgstr ""
+
+#: bp-groups/bp-groups-notifications.php:242
+msgid "a moderator"
+msgstr ""
+
+#: bp-groups/bp-groups-notifications.php:269
+msgid "You have been promoted in the group: \"%s\""
+msgstr ""
+
+#: bp-groups/bp-groups-notifications.php:270
+msgid ""
+"You have been promoted to %1$s for the group: \"%2$s\".\n"
+"\n"
+"To view the group please visit: %3$s\n"
+"\n"
+"---------------------\n"
+msgstr ""
+
+#: bp-groups/bp-groups-notifications.php:343
+msgid "You have an invitation to the group: \"%s\""
+msgstr ""
+
+#: bp-groups/bp-groups-notifications.php:344
+msgid ""
+"One of your friends %1$s has invited you to the group: \"%2$s\".\n"
+"\n"
+"To view your group invites visit: %3$s\n"
+"\n"
+"To view the group visit: %4$s\n"
+"\n"
+"To view %5$s's profile visit: %6$s\n"
+"\n"
+"---------------------\n"
+msgstr ""
+
+#: bp-groups/bp-groups-notifications.php:401
+msgid "%1$d new membership requests for the group \"%2$s\""
+msgstr ""
+
+#: bp-groups/bp-groups-notifications.php:406
+msgid "Group Membership Requests"
+msgstr ""
+
+#: bp-groups/bp-groups-notifications.php:415
+#: bp-groups/bp-groups-notifications.php:420
+msgid "%s requests group membership"
+msgstr ""
+
+#: bp-groups/bp-groups-notifications.php:438
+msgid "%d accepted group membership requests"
+msgstr ""
+
+#: bp-groups/bp-groups-notifications.php:451
+msgid "Membership for group \"%s\" accepted"
+msgstr ""
+
+#: bp-groups/bp-groups-notifications.php:474
+msgid "%d rejected group membership requests"
+msgstr ""
+
+#: bp-groups/bp-groups-notifications.php:487
+msgid "Membership for group \"%s\" rejected"
+msgstr ""
+
+#: bp-groups/bp-groups-notifications.php:510
+msgid "You were promoted to an admin in %d groups"
+msgstr ""
+
+#: bp-groups/bp-groups-notifications.php:523
+msgid "You were promoted to an admin in the group \"%s\""
+msgstr ""
+
+#: bp-groups/bp-groups-notifications.php:546
+msgid "You were promoted to a mod in %d groups"
+msgstr ""
+
+#: bp-groups/bp-groups-notifications.php:559
+msgid "You were promoted to a mod in the group \"%s\""
+msgstr ""
+
+#: bp-groups/bp-groups-notifications.php:583
+msgid "You have %d new group invitations"
+msgstr ""
+
+#: bp-groups/bp-groups-notifications.php:587
+msgid "Group Invites"
+msgstr ""
+
+#: bp-groups/bp-groups-notifications.php:595
+msgid "You have an invitation to the group: %s"
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:53
+msgid "Group invite could not be accepted"
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:55 bp-groups/bp-groups-screens.php:525
+msgid "Group invite accepted"
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:80
+msgid "Group invite could not be rejected"
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:82
+msgid "Group invite rejected"
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:161
+msgid "It looks like you've already said that!"
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:164
+msgid "There was an error when replying to that topic"
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:166
+msgid "Your reply was posted successfully"
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:187
+msgid "There was an error when making that topic a sticky"
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:189
+msgid "The topic was made sticky successfully"
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:202
+msgid "There was an error when unsticking that topic"
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:204
+msgid "The topic was unstuck successfully"
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:217
+msgid "There was an error when closing that topic"
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:219
+msgid "The topic was closed successfully"
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:232
+msgid "There was an error when opening that topic"
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:234
+msgid "The topic was opened successfully"
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:257
+msgid "There was an error deleting the topic"
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:259
+msgid "The topic was deleted successfully"
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:283
+msgid "There was an error when editing that topic"
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:285
+msgid "The topic was edited successfully"
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:310
+msgid "There was an error deleting that post"
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:312
+msgid "The post was deleted successfully"
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:336
+msgid "There was an error when editing that post"
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:338
+msgid "The post was edited successfully"
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:354 bp-groups/bp-groups-screens.php:373
+msgid "You have been banned from this group."
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:387
+msgid "This group does not have a forum setup yet."
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:452
+msgid "Group invites sent."
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:493
+msgid "You are not allowed to send or remove invites"
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:496
+msgid "The member requested to join the group"
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:527
+msgid "There was an error accepting the group invitation; please try again."
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:539
+msgid "There was an error sending your group membership request; please try again."
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:541
+msgid ""
+"Your membership request was sent to the group administrator successfully. "
+"You will be notified when the group administrator responds to your request."
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:599
+msgid "There was an error updating group details; please try again."
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:601
+msgid "Group details were successfully updated."
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:646
+msgid "There was an error updating group settings; please try again."
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:648
+msgid "Group settings were successfully updated."
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:683
+msgid "The group profile photo was deleted successfully!"
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:685
+msgid "There was a problem deleting the group profile photo; please try again."
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:728
+msgid "There was a problem cropping the group profile photo."
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:730
+msgid "The new group profile photo was uploaded successfully."
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:764
+msgid "There was an error when promoting that user, please try again"
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:766
+msgid "User promoted successfully"
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:789
+msgid "There was an error when demoting that user; please try again"
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:791
+msgid "User demoted successfully"
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:807
+msgid "There was an error when banning that user; please try again"
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:809
+msgid "User banned successfully"
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:825
+msgid "There was an error when unbanning that user, please try again"
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:827
+msgid "User ban removed successfully"
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:843
+msgid "There was an error removing that user from the group; please try again"
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:845
+msgid "User removed successfully"
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:885
+msgid "There was an error accepting the membership request; please try again."
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:887
+msgid "Group membership request accepted"
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:896
+msgid "There was an error rejecting the membership request; please try again."
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:898
+msgid "Group membership request rejected"
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:933
+msgid "There was an error deleting the group; please try again."
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:935
+msgid "The group was deleted successfully"
+msgstr ""
+
+#: bp-groups/bp-groups-template.php:708
+msgid "Public Group"
+msgstr ""
+
+#: bp-groups/bp-groups-template.php:710
+msgid "Hidden Group"
+msgstr ""
+
+#: bp-groups/bp-groups-template.php:712
+msgid "Private Group"
+msgstr ""
+
+#: bp-groups/bp-groups-template.php:714
+msgid "Group"
+msgstr ""
+
+#: bp-groups/bp-groups-template.php:895
+msgid "not yet active"
+msgstr ""
+
+#: bp-groups/bp-groups-template.php:1281
+msgid "Group creator profile photo of %s"
+msgstr ""
+
+#: bp-groups/bp-groups-template.php:1349
+msgid "No Admins"
+msgstr ""
+
+#: bp-groups/bp-groups-template.php:1396
+msgid "No Mods"
+msgstr ""
+
+#: bp-groups/bp-groups-template.php:1497
+msgid "Filter Groups"
+msgstr ""
+
+#: bp-groups/bp-groups-template.php:1545
+msgid "Viewing 1"
+msgid_plural "Viewing %1$s - %2$s of %3$s groups"
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-groups/bp-groups-template.php:1573
+msgid "%s member"
+msgstr ""
+
+#: bp-groups/bp-groups-template.php:1575
+msgid "%s members"
+msgstr ""
+
+#: bp-groups/bp-groups-template.php:1614
+msgid "%d topic"
+msgstr ""
+
+#: bp-groups/bp-groups-template.php:1616
+msgid "%d topics"
+msgstr ""
+
+#: bp-groups/bp-groups-template.php:1836 bp-groups/bp-groups-template.php:1901
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:190
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:217
+msgid "Demote to Member"
+msgstr ""
+
+#: bp-groups/bp-groups-template.php:1849 bp-groups/bp-groups-template.php:1914
+#: bp-groups/bp-groups-template.php:2989
+msgid "joined %s"
+msgstr ""
+
+#: bp-groups/bp-groups-template.php:1872
+msgid "This group has no administrators"
+msgstr ""
+
+#: bp-groups/bp-groups-template.php:1900
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:216
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:272
+msgid "Promote to Admin"
+msgstr ""
+
+#: bp-groups/bp-groups-template.php:1934
+msgid "This group has no moderators"
+msgstr ""
+
+#: bp-groups/bp-groups-template.php:2069
+msgid "Details"
+msgstr ""
+
+#: bp-groups/bp-groups-template.php:2080
+msgid "Photo"
+msgstr ""
+
+#: bp-groups/bp-groups-template.php:2088
+msgid "Requests"
+msgstr ""
+
+#: bp-groups/bp-groups-template.php:2398 bp-groups/bp-groups-template.php:2399
+#: bp-templates/bp-legacy/buddypress-functions.php:1197
+#: bp-templates/bp-legacy/buddypress-functions.php:1210
+msgid "Leave Group"
+msgstr ""
+
+#: bp-groups/bp-groups-template.php:2421 bp-groups/bp-groups-template.php:2422
+#: bp-templates/bp-legacy/buddypress-functions.php:1231
+msgid "Join Group"
+msgstr ""
+
+#: bp-groups/bp-groups-template.php:2440 bp-groups/bp-groups-template.php:2441
+msgid "Accept Invitation"
+msgstr ""
+
+#: bp-groups/bp-groups-template.php:2456 bp-groups/bp-groups-template.php:2457
+msgid "Request Sent"
+msgstr ""
+
+#: bp-groups/bp-groups-template.php:2472 bp-groups/bp-groups-template.php:2473
+#: bp-templates/bp-legacy/buddypress-functions.php:1233
+msgid "Request Membership"
+msgstr ""
+
+#: bp-groups/bp-groups-template.php:2540
+msgid ""
+"You must accept your pending invitation before you can access this private "
+"group."
+msgstr ""
+
+#: bp-groups/bp-groups-template.php:2542
+msgid ""
+"This is a private group and you must request group membership in order to "
+"join."
+msgstr ""
+
+#: bp-groups/bp-groups-template.php:2544
+msgid ""
+"This is a private group. To join you must be a registered site member and "
+"request group membership."
+msgstr ""
+
+#: bp-groups/bp-groups-template.php:2548
+msgid ""
+"This is a private group. Your membership request is awaiting approval from "
+"the group administrator."
+msgstr ""
+
+#: bp-groups/bp-groups-template.php:2552
+msgid "This is a hidden group and only invited members can join."
+msgstr ""
+
+#: bp-groups/bp-groups-template.php:3089
+#: bp-notifications/bp-notifications-template.php:1038
+#: bp-templates/bp-legacy/buddypress/blogs/index.php:36
+#: bp-templates/bp-legacy/buddypress/forums/index.php:42
+#: bp-templates/bp-legacy/buddypress/groups/index.php:36
+#: bp-templates/bp-legacy/buddypress/groups/single/forum.php:36
+#: bp-templates/bp-legacy/buddypress/members/index.php:35
+#: bp-templates/bp-legacy/buddypress/members/single/blogs.php:19
+#: bp-templates/bp-legacy/buddypress/members/single/forums.php:18
+#: bp-templates/bp-legacy/buddypress/members/single/friends.php:20
+#: bp-templates/bp-legacy/buddypress/members/single/groups.php:20
+msgid "Order By:"
+msgstr ""
+
+#: bp-groups/bp-groups-template.php:3092
+msgid "Oldest"
+msgstr ""
+
+#: bp-groups/bp-groups-template.php:3095
+msgid "Group Activity"
+msgstr ""
+
+#: bp-groups/bp-groups-template.php:3098
+#: bp-templates/bp-legacy/buddypress/blogs/index.php:40
+#: bp-templates/bp-legacy/buddypress/groups/index.php:42
+#: bp-templates/bp-legacy/buddypress/members/index.php:41
+#: bp-templates/bp-legacy/buddypress/members/single/blogs.php:23
+#: bp-templates/bp-legacy/buddypress/members/single/friends.php:24
+#: bp-templates/bp-legacy/buddypress/members/single/groups.php:25
+msgid "Alphabetical"
+msgstr ""
+
+#: bp-groups/bp-groups-template.php:3324 bp-groups/bp-groups-template.php:3574
+msgid "Group avatar"
+msgstr ""
+
+#: bp-groups/bp-groups-template.php:3466 bp-groups/bp-groups-template.php:3489
+msgid "Recently Joined"
+msgstr ""
+
+#: bp-groups/bp-groups-template.php:3467 bp-groups/bp-groups-template.php:3492
+msgid "Most Popular"
+msgstr ""
+
+#: bp-groups/bp-groups-template.php:3468 bp-groups/bp-groups-template.php:3495
+msgid "Administrator Of"
+msgstr ""
+
+#: bp-groups/bp-groups-template.php:3469 bp-groups/bp-groups-template.php:3498
+msgid "Moderator Of"
+msgstr ""
+
+#: bp-groups/bp-groups-template.php:3862
+msgid "requested %s"
+msgstr ""
+
+#: bp-groups/bp-groups-template.php:3914
+msgid "Viewing 1 request"
+msgid_plural "Viewing %1$s - %2$s of %3$s requests"
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-groups/bp-groups-template.php:4209
+msgid "Viewing 1 invitation"
+msgid_plural "Viewing %1$s - %2$s of %3$s invitations"
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-groups/bp-groups-template.php:4225
+msgid "Group Activity RSS Feed"
+msgstr ""
+
+#: bp-groups/bp-groups-template.php:4436
+msgid "%s group"
+msgid_plural "%s groups"
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-groups/bp-groups-widgets.php:24
+msgid "A dynamic list of recently active, popular, and newest groups"
+msgstr ""
+
+#: bp-groups/bp-groups-widgets.php:92 bp-groups/bp-groups-widgets.php:204
+msgid "created %s"
+msgstr ""
+
+#: bp-groups/bp-groups-widgets.php:111
+msgid "There are no groups to display."
+msgstr ""
+
+#: bp-groups/bp-groups-widgets.php:148
+msgid "Link widget title to Groups directory"
+msgstr ""
+
+#: bp-groups/bp-groups-widgets.php:150
+msgid "Max groups to show:"
+msgstr ""
+
+#: bp-groups/bp-groups-widgets.php:153
+msgid "Default groups to show:"
+msgstr ""
+
+#: bp-groups/bp-groups-widgets.php:222
+msgid "No groups matched the current filter."
+msgstr ""
+
+#: bp-loader.php:164 bp-loader.php:171
+msgid "Cheatin&#8217; huh?"
+msgstr ""
+
+#: bp-loader.php:568
+msgid "BuddyPress Default"
+msgstr ""
+
+#: bp-members/admin/bp-members-classes.php:127
+#: bp-members/admin/bp-members-classes.php:274
+#: bp-members/admin/bp-members-classes.php:455
+#: bp-members/admin/bp-members-classes.php:597
+#: bp-settings/bp-settings-loader.php:106
+#: bp-settings/bp-settings-loader.php:179
+msgid "Email"
+msgstr ""
+
+#: bp-members/admin/bp-members-classes.php:128
+#: bp-members/admin/bp-members-classes.php:456
+msgid "Registered"
+msgstr ""
+
+#: bp-members/admin/bp-members-classes.php:129
+#: bp-members/admin/bp-members-classes.php:457
+msgid "Last Sent"
+msgstr ""
+
+#: bp-members/admin/bp-members-classes.php:130
+#: bp-members/admin/bp-members-classes.php:458
+msgid "Emails Sent"
+msgstr ""
+
+#: bp-members/admin/bp-members-classes.php:162
+#: bp-members/admin/bp-members-classes.php:489
+msgid "No pending accounts found."
+msgstr ""
+
+#: bp-members/admin/bp-members-classes.php:168
+#: bp-members/admin/bp-members-classes.php:170
+#: bp-members/admin/bp-members-classes.php:494
+msgid "Edit settings"
+msgstr ""
+
+#: bp-members/admin/bp-members-classes.php:173
+#: bp-members/admin/bp-members-classes.php:497
+msgid "Registration is disabled. %s"
+msgstr ""
+
+#: bp-members/bp-members-actions.php:56 bp-members/bp-members-admin.php:287
+msgid "User removed as spammer."
+msgstr ""
+
+#: bp-members/bp-members-actions.php:89
+msgid "%s has been deleted from the system."
+msgstr ""
+
+#: bp-members/bp-members-actions.php:91
+msgid "There was an error deleting %s from the system. Please try again."
+msgstr ""
+
+#: bp-members/bp-members-admin.php:281
+msgid "Profile photo was deleted."
+msgstr ""
+
+#: bp-members/bp-members-admin.php:299
+msgid "Profile updated."
+msgstr ""
+
+#: bp-members/bp-members-admin.php:311
+msgid "There was a problem deleting that avatar, please try again."
+msgstr ""
+
+#: bp-members/bp-members-admin.php:317
+msgid "User could not be removed as spammer."
+msgstr ""
+
+#: bp-members/bp-members-admin.php:323
+msgid "User could not be marked as spammer."
+msgstr ""
+
+#: bp-members/bp-members-admin.php:329
+msgid "An error occured while trying to update the profile."
+msgstr ""
+
+#: bp-members/bp-members-admin.php:335 bp-xprofile/bp-xprofile-screens.php:96
+msgid ""
+"Please make sure you fill in all required fields in this profile field "
+"group before saving."
+msgstr ""
+
+#: bp-members/bp-members-admin.php:341
+msgid ""
+"There was a problem updating some of your profile information, please try "
+"again."
+msgstr ""
+
+#: bp-members/bp-members-admin.php:366 bp-members/bp-members-admin.php:367
+#: bp-members/bp-members-admin.php:405 bp-members/bp-members-admin.php:406
+#: bp-members/bp-members-adminbar.php:100
+#: bp-xprofile/bp-xprofile-template.php:756
+#: bp-xprofile/bp-xprofile-template.php:757
+msgid "Edit Profile"
+msgstr ""
+
+#: bp-members/bp-members-admin.php:417 bp-members/bp-members-admin.php:418
+msgid "Manage Signups"
+msgstr ""
+
+#: bp-members/bp-members-admin.php:617 bp-members/bp-members-admin.php:776
+msgid "Profile"
+msgstr ""
+
+#: bp-members/bp-members-admin.php:621
+msgid "Extended Profile"
+msgstr ""
+
+#: bp-members/bp-members-admin.php:644
+msgid "You cannot edit the requested user."
+msgstr ""
+
+#: bp-members/bp-members-admin.php:673
+msgid "This is the admin view of a user&#39;s profile."
+msgstr ""
+
+#: bp-members/bp-members-admin.php:674
+msgid ""
+"In the main column, you can edit the fields of the user&#39;s extended "
+"profile."
+msgstr ""
+
+#: bp-members/bp-members-admin.php:675
+msgid ""
+"In the right-hand column, you can update the user&#39;s status, delete the "
+"user&#39;s avatar, and view recent statistics."
+msgstr ""
+
+#: bp-members/bp-members-admin.php:681
+msgid ""
+"<a "
+"href=\"http://codex.buddypress.org/buddypress-site-administration/managing-"
+"user-profiles/\">Managing Profiles</a>"
+msgstr ""
+
+#: bp-members/bp-members-admin.php:778
+msgid "Edit User"
+msgstr ""
+
+#: bp-members/bp-members-admin.php:800
+msgid "&larr; Back to Users"
+msgstr ""
+
+#: bp-members/bp-members-admin.php:858
+msgid "No user found with this ID. <a href=\"%s\">Go back and try again</a>."
+msgstr ""
+
+#: bp-members/bp-members-admin.php:888
+msgid "User account has not yet been activated"
+msgstr ""
+
+#: bp-members/bp-members-admin.php:914
+msgid "Spammer"
+msgstr ""
+
+#: bp-members/bp-members-admin.php:926
+msgid "Registered on: <strong>%1$s</strong>"
+msgstr ""
+
+#: bp-members/bp-members-admin.php:936
+msgid "View Profile"
+msgstr ""
+
+#: bp-members/bp-members-admin.php:937
+msgid "Update Profile"
+msgstr ""
+
+#: bp-members/bp-members-admin.php:957 bp-xprofile/bp-xprofile-admin.php:810
+msgid ""
+"%s has been marked as a spammer. All BuddyPress data associated with the "
+"user has been removed"
+msgstr ""
+
+#: bp-members/bp-members-admin.php:989
+msgid "Last active: %1$s"
+msgstr ""
+
+#: bp-members/bp-members-admin.php:1035
+msgid "Extended"
+msgstr ""
+
+#: bp-members/bp-members-admin.php:1257
+msgid "This is the admininistration screen for pending accounts on your site."
+msgstr ""
+
+#: bp-members/bp-members-admin.php:1258
+msgid ""
+"From the screen options, you can customize the displayed columns and the "
+"pagination of this screen."
+msgstr ""
+
+#: bp-members/bp-members-admin.php:1259
+msgid ""
+"You can reorder the list of your pending accounts by clicking on the "
+"Username, Email or Registered column headers."
+msgstr ""
+
+#: bp-members/bp-members-admin.php:1260
+msgid ""
+"Using the search form, you can find pending accounts more easily. The "
+"Username and Email fields will be included in the search."
+msgstr ""
+
+#: bp-members/bp-members-admin.php:1267
+msgid ""
+"Hovering over a row in the pending accounts list will display action links "
+"that allow you to manage pending accounts. You can perform the following "
+"actions:"
+msgstr ""
+
+#: bp-members/bp-members-admin.php:1268
+msgid ""
+"\"Email\" takes you to the confirmation screen before being able to send "
+"the activation link to the desired pending account. You can only send the "
+"activation email once per day."
+msgstr ""
+
+#: bp-members/bp-members-admin.php:1269
+msgid ""
+"\"Delete\" allows you to delete a pending account from your site. You will "
+"be asked to confirm this deletion."
+msgstr ""
+
+#: bp-members/bp-members-admin.php:1270
+msgid ""
+"By clicking on a Username you will be able to activate a pending account "
+"from the confirmation screen."
+msgstr ""
+
+#: bp-members/bp-members-admin.php:1271
+msgid "Bulk actions allow you to perform these 3 actions for the selected rows."
+msgstr ""
+
+#: bp-members/bp-members-admin.php:1527
+msgid "There was a problem sending the activation emails, please try again."
+msgstr ""
+
+#: bp-members/bp-members-admin.php:1534
+msgid "There was a problem activating accounts, please try again."
+msgstr ""
+
+#: bp-members/bp-members-admin.php:1541
+msgid "There was a problem deleting sign-ups, please try again."
+msgstr ""
+
+#: bp-members/bp-members-admin.php:1658
+msgid "Users"
+msgstr ""
+
+#: bp-members/bp-members-admin.php:1682
+msgid "Search Pending Users"
+msgstr ""
+
+#: bp-members/bp-members-admin.php:1728
+msgid "Delete Pending Accounts"
+msgstr ""
+
+#: bp-members/bp-members-admin.php:1729
+msgid "You are about to delete the following account:"
+msgid_plural "You are about to delete the following accounts:"
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-members/bp-members-admin.php:1733
+msgid "Activate Pending Accounts"
+msgstr ""
+
+#: bp-members/bp-members-admin.php:1734
+msgid "You are about to activate the following account:"
+msgid_plural "You are about to activate the following accounts:"
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-members/bp-members-admin.php:1738
+msgid "Resend Activation Emails"
+msgstr ""
+
+#: bp-members/bp-members-admin.php:1739
+msgid "You are about to resend an activation email to the following account:"
+msgid_plural "You are about to resend activation emails to the following accounts:"
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-members/bp-members-admin.php:1779
+msgid "Last notified: %s"
+msgstr ""
+
+#: bp-members/bp-members-admin.php:1783
+msgid "(less than 24 hours ago)"
+msgstr ""
+
+#: bp-members/bp-members-admin.php:1801
+msgid "Confirm"
+msgstr ""
+
+#: bp-members/bp-members-adminbar.php:39
+msgid "Edit My Profile"
+msgstr ""
+
+#: bp-members/bp-members-adminbar.php:53
+msgid "Log in"
+msgstr ""
+
+#: bp-members/bp-members-adminbar.php:91
+msgid "Edit Member"
+msgstr ""
+
+#: bp-members/bp-members-adminbar.php:129
+#: bp-settings/bp-settings-loader.php:131
+#: bp-settings/bp-settings-loader.php:188
+#: bp-templates/bp-legacy/buddypress/members/single/settings/delete-account.php:27
+msgid "Delete Account"
+msgstr ""
+
+#: bp-members/bp-members-classes.php:307
+msgid ""
+"<strong>ERROR</strong>: Couldn&#8217;t register you. Please contact the <a "
+"href=\"mailto:%s\">webmaster</a>."
+msgstr ""
+
+#: bp-members/bp-members-classes.php:511 bp-members/bp-members-classes.php:576
+#: bp-members/bp-members-classes.php:631
+msgid "the sign-up has already been activated."
+msgstr ""
+
+#: bp-members/bp-members-functions.php:1005
+msgid ""
+"User last_activity data is no longer stored in usermeta. Use "
+"bp_get_user_last_activity() instead."
+msgstr ""
+
+#: bp-members/bp-members-functions.php:1035
+msgid ""
+"User last_activity data is no longer stored in usermeta. Use "
+"bp_update_user_last_activity() instead."
+msgstr ""
+
+#: bp-members/bp-members-functions.php:1219
+#: bp-members/bp-members-functions.php:2145
+msgid "<strong>ERROR</strong>: Your account has been marked as a spammer."
+msgstr ""
+
+#: bp-members/bp-members-functions.php:1414
+msgid "Please check your email address."
+msgstr ""
+
+#: bp-members/bp-members-functions.php:1418
+#: bp-members/bp-members-functions.php:1422
+msgid "Sorry, that email address is not allowed!"
+msgstr ""
+
+#: bp-members/bp-members-functions.php:1426
+msgid "Sorry, that email address is already used!"
+msgstr ""
+
+#: bp-members/bp-members-functions.php:1458
+msgid "Please enter a username"
+msgstr ""
+
+#: bp-members/bp-members-functions.php:1464
+msgid "That username is not allowed"
+msgstr ""
+
+#: bp-members/bp-members-functions.php:1469
+msgid "Usernames can contain only letters, numbers, ., -, and @"
+msgstr ""
+
+#: bp-members/bp-members-functions.php:1474
+msgid "Username must be at least 4 characters"
+msgstr ""
+
+#: bp-members/bp-members-functions.php:1479
+msgid "Sorry, usernames may not contain the character \"_\"!"
+msgstr ""
+
+#: bp-members/bp-members-functions.php:1486
+msgid "Sorry, usernames must have letters too!"
+msgstr ""
+
+#: bp-members/bp-members-functions.php:1498
+msgid "Sorry, that username already exists!"
+msgstr ""
+
+#: bp-members/bp-members-functions.php:1656
+msgid "Invalid activation key."
+msgstr ""
+
+#: bp-members/bp-members-functions.php:1663
+msgid "The user is already active."
+msgstr ""
+
+#: bp-members/bp-members-functions.php:1665
+msgid "The site is already active."
+msgstr ""
+
+#: bp-members/bp-members-functions.php:1683
+msgid "Invalid activation key"
+msgstr ""
+
+#: bp-members/bp-members-functions.php:1698
+msgid "Could not create user"
+msgstr ""
+
+#: bp-members/bp-members-functions.php:1712
+msgid "That username is already activated."
+msgstr ""
+
+#: bp-members/bp-members-functions.php:2016
+msgid ""
+"If you have not received an email yet, <a href=\"%s\">click here to resend "
+"it</a>."
+msgstr ""
+
+#: bp-members/bp-members-functions.php:2018
+msgid ""
+"<strong>ERROR</strong>: Your account has not been activated. Check your "
+"email for the activation link."
+msgstr ""
+
+#: bp-members/bp-members-functions.php:2049
+msgid "<strong>ERROR</strong>: Your account has already been activated."
+msgstr ""
+
+#: bp-members/bp-members-functions.php:2051
+msgid "Activation email resent! Please check your inbox or spam folder."
+msgstr ""
+
+#: bp-members/bp-members-loader.php:87
+msgid "Search Members..."
+msgstr ""
+
+#: bp-members/bp-members-loader.php:252
+msgid "You"
+msgstr ""
+
+#: bp-members/bp-members-screens.php:83
+msgid "Please make sure you enter your password twice"
+msgstr ""
+
+#: bp-members/bp-members-screens.php:87
+msgid "The passwords you entered do not match."
+msgstr ""
+
+#: bp-members/bp-members-screens.php:110
+msgid "This is a required field"
+msgstr ""
+
+#: bp-members/bp-members-screens.php:255
+msgid "Your account is now active!"
+msgstr ""
+
+#: bp-members/bp-members-screens.php:520
+msgid "Check Your Email To Activate Your Account!"
+msgstr ""
+
+#: bp-members/bp-members-screens.php:528
+msgid "Account Activated"
+msgstr ""
+
+#: bp-members/bp-members-template.php:537
+msgid "Viewing 1 active member"
+msgid_plural "Viewing %1$s - %2$s of %3$s active members"
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-members/bp-members-template.php:539
+msgid "Viewing 1 member with friends"
+msgid_plural "Viewing %1$s - %2$s of %3$s members with friends"
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-members/bp-members-template.php:541
+msgid "Viewing 1 online member"
+msgid_plural "Viewing %1$s - %2$s of %3$s online members"
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-members/bp-members-template.php:1751
+msgid "Your Profile Photo"
+msgstr ""
+
+#: bp-members/bp-members-template.php:1831
+msgid "Activity RSS Feed"
+msgstr ""
+
+#: bp-messages/bp-messages-actions.php:48
+msgid "Your reply was sent successfully"
+msgstr ""
+
+#: bp-messages/bp-messages-actions.php:50
+msgid "There was a problem sending your reply, please try again"
+msgstr ""
+
+#: bp-messages/bp-messages-actions.php:85
+msgid "There was an error deleting that message."
+msgstr ""
+
+#: bp-messages/bp-messages-actions.php:87
+msgid "Message deleted."
+msgstr ""
+
+#: bp-messages/bp-messages-actions.php:115
+msgid "There was an error deleting messages."
+msgstr ""
+
+#: bp-messages/bp-messages-actions.php:117
+#: bp-templates/bp-legacy/buddypress-functions.php:1389
+msgid "Messages deleted."
+msgstr ""
+
+#: bp-messages/bp-messages-classes.php:476
+msgid "%s Recipients"
+msgstr ""
+
+#: bp-messages/bp-messages-functions.php:79
+msgid "Re: %s"
+msgstr ""
+
+#: bp-messages/bp-messages-functions.php:92
+msgid "No Subject"
+msgstr ""
+
+#: bp-messages/bp-messages-loader.php:38
+msgid "Private Messages"
+msgstr ""
+
+#: bp-messages/bp-messages-loader.php:102
+msgid "Search Messages..."
+msgstr ""
+
+#: bp-messages/bp-messages-loader.php:123
+msgid "Messages <span class=\"%s\">%s</span>"
+msgstr ""
+
+#: bp-messages/bp-messages-loader.php:125
+#: bp-messages/bp-messages-loader.php:219
+#: bp-messages/bp-messages-screens.php:198
+msgid "Messages"
+msgstr ""
+
+#: bp-messages/bp-messages-loader.php:153
+#: bp-messages/bp-messages-loader.php:220
+#: bp-messages/bp-messages-notifications.php:127
+msgid "Inbox"
+msgstr ""
+
+#: bp-messages/bp-messages-loader.php:163
+#: bp-messages/bp-messages-loader.php:243
+msgid "Sent"
+msgstr ""
+
+#: bp-messages/bp-messages-loader.php:173
+#: bp-messages/bp-messages-loader.php:251
+msgid "Compose"
+msgstr ""
+
+#: bp-messages/bp-messages-loader.php:184
+msgid "Notices"
+msgstr ""
+
+#: bp-messages/bp-messages-loader.php:216
+msgid "Messages <span class=\"count\">%s</span>"
+msgstr ""
+
+#: bp-messages/bp-messages-loader.php:217
+msgid "Inbox <span class=\"count\">%s</span>"
+msgstr ""
+
+#: bp-messages/bp-messages-loader.php:260
+msgid "All Member Notices"
+msgstr ""
+
+#: bp-messages/bp-messages-loader.php:277
+msgid "My Messages"
+msgstr ""
+
+#: bp-messages/bp-messages-notifications.php:76
+msgid "New message from %s"
+msgstr ""
+
+#: bp-messages/bp-messages-notifications.php:78
+msgid ""
+"%1$s sent you a new message:\n"
+"\n"
+"Subject: %2$s\n"
+"\n"
+"\"%3$s\"\n"
+"\n"
+"To view and read your messages please log in and visit: %4$s\n"
+"\n"
+"---------------------\n"
+msgstr ""
+
+#: bp-messages/bp-messages-notifications.php:92
+msgid "To disable these notifications, please log in and go to: %s"
+msgstr ""
+
+#: bp-messages/bp-messages-notifications.php:131
+msgid "You have %d new messages"
+msgstr ""
+
+#: bp-messages/bp-messages-notifications.php:142
+msgid "%s sent you a new private message"
+msgstr ""
+
+#: bp-messages/bp-messages-notifications.php:144
+msgid "You have %s new private message"
+msgid_plural "You have %s new private messages"
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-messages/bp-messages-screens.php:64
+#: bp-messages/bp-messages-screens.php:91
+msgid "There was an error sending that message, please try again"
+msgstr ""
+
+#: bp-messages/bp-messages-screens.php:69
+msgid "Notice sent successfully!"
+msgstr ""
+
+#: bp-messages/bp-messages-screens.php:72
+msgid "There was an error sending that notice, please try again"
+msgstr ""
+
+#: bp-messages/bp-messages-screens.php:88
+msgid "Message sent successfully!"
+msgstr ""
+
+#: bp-messages/bp-messages-screens.php:124
+msgid "Messages <span>%s</span>"
+msgstr ""
+
+#: bp-messages/bp-messages-screens.php:151
+msgid "There was a problem deactivating that notice."
+msgstr ""
+
+#: bp-messages/bp-messages-screens.php:153
+msgid "Notice deactivated."
+msgstr ""
+
+#: bp-messages/bp-messages-screens.php:157
+msgid "There was a problem activating that notice."
+msgstr ""
+
+#: bp-messages/bp-messages-screens.php:159
+msgid "Notice activated."
+msgstr ""
+
+#: bp-messages/bp-messages-screens.php:163
+msgid "There was a problem deleting that notice."
+msgstr ""
+
+#: bp-messages/bp-messages-screens.php:165
+msgid "Notice deleted."
+msgstr ""
+
+#: bp-messages/bp-messages-screens.php:207
+msgid "A member sends you a new message"
+msgstr ""
+
+#: bp-messages/bp-messages-template.php:753
+msgid "Viewing 1 message"
+msgid_plural "Viewing %1$s - %2$s of %3$s messages"
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-messages/bp-messages-template.php:859
+msgid "Select:"
+msgstr ""
+
+#: bp-messages/bp-messages-template.php:875
+msgid "Delete Selected"
+msgstr ""
+
+#: bp-messages/bp-messages-template.php:920
+msgid "Currently Active"
+msgstr ""
+
+#: bp-messages/bp-messages-template.php:1044
+msgid "Deactivate"
+msgstr ""
+
+#: bp-messages/bp-messages-template.php:1095
+#: bp-templates/bp-legacy/buddypress/members/register.php:90
+#: bp-templates/bp-legacy/buddypress/members/single/profile/edit.php:45
+#: bp-templates/bp-legacy/buddypress-functions.php:239
+#: bp-xprofile/bp-xprofile-admin.php:786
+msgid "Close"
+msgstr ""
+
+#: bp-messages/bp-messages-template.php:1158
+msgid "Send a private message to this user."
+msgstr ""
+
+#: bp-messages/bp-messages-template.php:1159
+msgid "Private Message"
+msgstr ""
+
+#: bp-messages/bp-messages-template.php:1517
+msgid "%d Recipients"
+msgstr ""
+
+#: bp-messages/bp-messages-template.php:1750
+#: bp-templates/bp-legacy/buddypress-functions.php:1298
+msgid "Sent %s"
+msgstr ""
+
+#: bp-messages/bp-messages-widgets.php:34
+msgid "(BuddyPress) Sitewide Notices"
+msgstr ""
+
+#: bp-messages/bp-messages-widgets.php:37
+msgid "Display Sitewide Notices posted by the site administrator"
+msgstr ""
+
+#: bp-notifications/bp-notifications-actions.php:43
+msgid "Notification successfully marked read."
+msgstr ""
+
+#: bp-notifications/bp-notifications-actions.php:45
+#: bp-notifications/bp-notifications-actions.php:81
+msgid "There was a problem marking that notification."
+msgstr ""
+
+#: bp-notifications/bp-notifications-actions.php:79
+msgid "Notification successfully marked unread."
+msgstr ""
+
+#: bp-notifications/bp-notifications-actions.php:115
+msgid "Notification successfully deleted."
+msgstr ""
+
+#: bp-notifications/bp-notifications-actions.php:117
+msgid "There was a problem deleting that notification."
+msgstr ""
+
+#: bp-notifications/bp-notifications-adminbar.php:54
+msgid "No new notifications"
+msgstr ""
+
+#: bp-notifications/bp-notifications-loader.php:82
+msgid "Search Notifications..."
+msgstr ""
+
+#: bp-notifications/bp-notifications-loader.php:208
+#: bp-notifications/bp-notifications-template.php:720
+msgid "Read"
+msgstr ""
+
+#: bp-notifications/bp-notifications-template.php:654
+msgid "Date not found"
+msgstr ""
+
+#: bp-notifications/bp-notifications-template.php:993
+msgid "Viewing 1 notification"
+msgid_plural "Viewing %1$s - %2$s of %3$s notifications"
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-notifications/bp-notifications-template.php:1041
+msgid "Newest First"
+msgstr ""
+
+#: bp-notifications/bp-notifications-template.php:1042
+msgid "Oldest First"
+msgstr ""
+
+#: bp-notifications/bp-notifications-template.php:1046
+msgid "Go"
+msgstr ""
+
+#: bp-settings/bp-settings-actions.php:105
+msgid ""
+"Dear %1$s,\n"
+"\n"
+"You recently changed the email address associated with your account on "
+"%2$s.\n"
+"If this is correct, please click on the following link to complete the "
+"change:\n"
+"%3$s\n"
+"\n"
+"You can safely ignore and delete this email if you do not want to take this "
+"action or if you have received this email in error.\n"
+"\n"
+"This email has been sent to %4$s.\n"
+"\n"
+"Regards,\n"
+"%5$s\n"
+"%6$s"
+msgstr ""
+
+#: bp-settings/bp-settings-actions.php:141
+msgid "[%s] Verify your new email address"
+msgstr ""
+
+#: bp-settings/bp-settings-actions.php:211
+msgid "That email address is invalid. Check the formatting and try again."
+msgstr ""
+
+#: bp-settings/bp-settings-actions.php:214
+msgid "That email address is currently unavailable for use."
+msgstr ""
+
+#: bp-settings/bp-settings-actions.php:217
+msgid "That email address is already taken."
+msgstr ""
+
+#: bp-settings/bp-settings-actions.php:220
+msgid "Email address cannot be empty."
+msgstr ""
+
+#: bp-settings/bp-settings-actions.php:230
+msgid "Your current password is invalid."
+msgstr ""
+
+#: bp-settings/bp-settings-actions.php:233
+msgid "The new password fields did not match."
+msgstr ""
+
+#: bp-settings/bp-settings-actions.php:236
+msgid "One of the password fields was empty."
+msgstr ""
+
+#: bp-settings/bp-settings-actions.php:245
+msgid "Your settings have been saved."
+msgstr ""
+
+#: bp-settings/bp-settings-actions.php:251
+msgid "No changes were made to your account."
+msgstr ""
+
+#: bp-settings/bp-settings-actions.php:253
+msgid "No changes were made to this account."
+msgstr ""
+
+#: bp-settings/bp-settings-actions.php:301
+msgid "Your notification settings have been saved."
+msgstr ""
+
+#: bp-settings/bp-settings-actions.php:303
+msgid "This user's notification settings have been saved."
+msgstr ""
+
+#: bp-settings/bp-settings-actions.php:403
+msgid "%s was successfully deleted."
+msgstr ""
+
+#: bp-settings/bp-settings-actions.php:449
+msgid "You have successfully verified your new email address."
+msgstr ""
+
+#: bp-settings/bp-settings-actions.php:452
+msgid "There was a problem verifying your new email address. Please try again."
+msgstr ""
+
+#: bp-settings/bp-settings-actions.php:461
+msgid "You have successfully dismissed your pending email change."
+msgstr ""
+
+#: bp-settings/bp-settings-loader.php:94 bp-settings/bp-settings-loader.php:171
+msgid "General"
+msgstr ""
+
+#: bp-settings/bp-settings-loader.php:118
+msgid "Capabilities"
+msgstr ""
+
+#: bp-settings/bp-settings-template.php:78
+msgid ""
+"There is a pending change of your email address to <code>%1$s</code>.<br "
+"/>Check your email (<code>%2$s</code>) for the verification link. <a "
+"href=\"%3$s\">Cancel</a>"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/activity/activity-loop.php:20
+msgid "Load More"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/activity/activity-loop.php:34
+msgid "Sorry, there was no activity found. Please try a different filter."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/activity/comment.php:27
+#. translators: 1: user profile link, 2: user name, 3: activity permalink, 4:
+#. activity timestamp
+msgid ""
+"<a href=\"%1$s\">%2$s</a> replied <a href=\"%3$s\" "
+"class=\"activity-time-since\"><span class=\"time-since\">%4$s</span></a>"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/activity/entry.php:50
+msgid "View Conversation"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/activity/entry.php:58
+msgid "Comment <span>%s</span>"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/activity/entry.php:66
+msgid "Mark as Favorite"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/activity/entry.php:66
+#: bp-templates/bp-legacy/buddypress-functions.php:242
+#: bp-templates/bp-legacy/buddypress-functions.php:944
+#: bp-templates/bp-legacy/buddypress-functions.php:961
+msgid "Favorite"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/activity/entry.php:70
+#: bp-templates/bp-legacy/buddypress-functions.php:245
+#: bp-templates/bp-legacy/buddypress-functions.php:942
+#: bp-templates/bp-legacy/buddypress-functions.php:963
+msgid "Remove Favorite"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/activity/entry.php:102
+msgid "Post"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/activity/index.php:19
+msgid "The public activity for everyone on this site."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/activity/index.php:19
+#: bp-templates/bp-legacy/buddypress/members/index.php:19
+msgid "All Members <span>%s</span>"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/activity/index.php:29
+msgid "The activity of my friends only."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/activity/index.php:29
+#: bp-templates/bp-legacy/buddypress/members/index.php:22
+msgid "My Friends <span>%s</span>"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/activity/index.php:41
+msgid "The activity of groups I am a member of."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/activity/index.php:41
+#: bp-templates/bp-legacy/buddypress/groups/index.php:22
+msgid "My Groups <span>%s</span>"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/activity/index.php:51
+msgid "The activity I've marked as a favorite."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/activity/index.php:51
+msgid "My Favorites <span>%s</span>"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/activity/index.php:59
+msgid "Activity that I have been mentioned in."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/activity/index.php:59
+msgid "Mentions"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/activity/index.php:71
+#: bp-templates/bp-legacy/buddypress/groups/single/activity.php:3
+msgid "RSS Feed"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/activity/index.php:71
+#: bp-templates/bp-legacy/buddypress/groups/single/activity.php:3
+msgid "RSS"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/activity/index.php:76
+#: bp-templates/bp-legacy/buddypress/groups/single/activity.php:8
+#: bp-templates/bp-legacy/buddypress/members/single/activity.php:18
+msgid "Show:"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/activity/index.php:78
+#: bp-templates/bp-legacy/buddypress/groups/single/activity.php:10
+#: bp-templates/bp-legacy/buddypress/members/single/activity.php:20
+msgid "&mdash; Everything &mdash;"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/activity/post-form.php:23
+msgid "What's new in %s, %s?"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/activity/post-form.php:25
+msgid "What's new, %s?"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/activity/post-form.php:35
+msgid "Post Update"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/activity/post-form.php:42
+msgid "Post in"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/blogs/blogs-loop.php:90
+msgid "Sorry, there were no sites found."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/blogs/create.php:14
+msgid "Site registration is currently disabled"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/blogs/index.php:16
+msgid "All Sites <span>%s</span>"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/blogs/index.php:20
+msgid "My Sites <span>%s</span>"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/blogs/index.php:38
+#: bp-templates/bp-legacy/buddypress/forums/index.php:44
+#: bp-templates/bp-legacy/buddypress/groups/index.php:39
+#: bp-templates/bp-legacy/buddypress/groups/single/forum.php:38
+#: bp-templates/bp-legacy/buddypress/members/index.php:37
+#: bp-templates/bp-legacy/buddypress/members/single/blogs.php:21
+#: bp-templates/bp-legacy/buddypress/members/single/forums.php:20
+#: bp-templates/bp-legacy/buddypress/members/single/friends.php:22
+#: bp-templates/bp-legacy/buddypress/members/single/groups.php:22
+msgid "Last Active"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/forums/forums-loop.php:39
+msgid "Topic"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/forums/forums-loop.php:41
+msgid "Freshness"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/forums/forums-loop.php:54
+#: bp-templates/bp-legacy/buddypress/groups/single/forum/topic.php:95
+msgid "Permanent link to this post"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/forums/forums-loop.php:61
+#. translators: "started by [poster] in [forum]"
+msgid "Started by %1$s"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/forums/forums-loop.php:72
+#. translators: "started by [poster] in [forum]"
+msgid "in %1$s"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/forums/forums-loop.php:122
+msgid "Sorry, there were no forum topics found."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/forums/index.php:22
+msgid "All Topics <span>%s</span>"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/forums/index.php:26
+msgid "My Topics <span>%s</span>"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/forums/index.php:45
+#: bp-templates/bp-legacy/buddypress/groups/single/forum.php:39
+#: bp-templates/bp-legacy/buddypress/members/single/forums.php:21
+msgid "Most Posts"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/forums/index.php:46
+#: bp-templates/bp-legacy/buddypress/groups/single/forum.php:40
+#: bp-templates/bp-legacy/buddypress/members/single/forums.php:22
+msgid "Unreplied"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/forums/index.php:82
+msgid "Create New Topic:"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/forums/index.php:89
+#: bp-templates/bp-legacy/buddypress/groups/single/forum/edit.php:50
+#: bp-templates/bp-legacy/buddypress/groups/single/forum.php:78
+msgid "Content:"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/forums/index.php:92
+#: bp-templates/bp-legacy/buddypress/groups/single/forum/edit.php:53
+#: bp-templates/bp-legacy/buddypress/groups/single/forum.php:81
+msgid "Tags (comma separated):"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/forums/index.php:95
+msgid "Post In Group Forum:"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/forums/index.php:98
+#: bp-xprofile/bp-xprofile-classes.php:1695
+#: bp-xprofile/bp-xprofile-classes.php:1718
+#: bp-xprofile/bp-xprofile-classes.php:1726
+#: bp-xprofile/bp-xprofile-classes.php:2358
+#. translators: no option picked in select box
+msgid "----"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/forums/index.php:115
+#: bp-templates/bp-legacy/buddypress/groups/single/forum.php:87
+msgid "Post Topic"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/forums/index.php:127
+msgid ""
+"You are not a member of any groups so you don't have any group forums you "
+"can post in. To start posting, first find a group that matches the topic "
+"subject you'd like to start. If this group does not exist, why not <a "
+"href='%s'>create a new group</a>? Once you have joined or created the group "
+"you can post your topic in that group's forum."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/create.php:29
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:16
+msgid "Group Name (required)"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/create.php:34
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:19
+msgid "Group Description (required)"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/create.php:51
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:56
+msgid "Privacy Options"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/create.php:54
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:61
+msgid "This is a public group"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/create.php:56
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:63
+msgid "Any site member can join this group."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/create.php:57
+#: bp-templates/bp-legacy/buddypress/groups/create.php:68
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:64
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:74
+msgid "This group will be listed in the groups directory and in search results."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/create.php:58
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:65
+msgid "Group content and activity will be visible to any site member."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/create.php:64
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:71
+msgid "This is a private group"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/create.php:67
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:73
+msgid "Only users who request membership and are accepted can join the group."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/create.php:69
+#: bp-templates/bp-legacy/buddypress/groups/create.php:80
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:75
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:85
+msgid "Group content and activity will only be visible to members of the group."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/create.php:75
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:81
+msgid "This is a hidden group"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/create.php:78
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:83
+msgid "Only users who are invited can join the group."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/create.php:79
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:84
+msgid "This group will not be listed in the groups directory or search results."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/create.php:85
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:92
+msgid "Group Invitations"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/create.php:87
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:94
+msgid "Which members of this group are allowed to invite others?"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/create.php:112
+msgid "Should this group have a forum?"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/create.php:119
+msgid ""
+"<strong>Attention Site Admin:</strong> Group forums require the <a "
+"href=\"%s\">correct setup and configuration</a> of a bbPress installation."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/create.php:145
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:127
+msgid ""
+"Upload an image to use as a profile photo for this group. The image will be "
+"shown on the main group page, and in search results."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/create.php:149
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:131
+#: bp-templates/bp-legacy/buddypress/members/single/profile/change-avatar.php:18
+msgid "Upload Image"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/create.php:153
+msgid ""
+"To skip the group profile photo upload process, hit the \"Next Step\" "
+"button."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/create.php:160
+msgid "Crop Group Profile Photo"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/create.php:162
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:151
+msgid "Profile photo to crop"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/create.php:165
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:154
+msgid "Profile photo preview"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/create.php:168
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:157
+#: bp-templates/bp-legacy/buddypress/members/single/profile/change-avatar.php:39
+msgid "Crop Image"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/create.php:207
+#: bp-templates/bp-legacy/buddypress/groups/single/invites-loop.php:79
+msgid "Select people to invite from your friends list."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/create.php:225
+#: bp-templates/bp-legacy/buddypress/groups/single/invites-loop.php:51
+#: bp-templates/bp-legacy/buddypress-functions.php:1050
+msgid "Remove Invite"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/create.php:242
+msgid ""
+"Once you have built up friend connections you will be able to invite others "
+"to your group."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/create.php:264
+msgid "Back to Previous Step"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/create.php:271
+msgid "Next Step"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/create.php:278
+msgid "Create Group and Continue"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/create.php:285
+msgid "Finish"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/groups-loop.php:95
+msgid "There were no groups found."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/index.php:19
+msgid "All Groups <span>%s</span>"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/index.php:40
+#: bp-templates/bp-legacy/buddypress/members/single/groups.php:23
+msgid "Most Members"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/index.php:41
+#: bp-templates/bp-legacy/buddypress/members/single/groups.php:24
+msgid "Newly Created"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:26
+msgid "Notify group members of these changes via email"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:137
+msgid ""
+"If you'd like to remove the existing group profile photo but not upload a "
+"new one, please use the delete group profile photo button."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:139
+msgid "Delete Group Profile Photo"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:149
+msgid "Crop Profile Photo"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:260
+msgid "(banned)"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:266
+msgid "Unban this member"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:266
+msgid "Remove Ban"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:270
+msgid "Kick and ban this member"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:270
+msgid "Kick &amp; Ban"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:271
+msgid "Promote to Mod"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:276
+msgid "Remove this member"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:276
+msgid "Remove from group"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:290
+#: bp-templates/bp-legacy/buddypress/groups/single/members.php:79
+msgid "This group has no members."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:324
+msgid ""
+"WARNING: Deleting this group will completely remove ALL content associated "
+"with it. There is no way back, please be careful with this option."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/single/admin.php:327
+msgid "I understand the consequences of deleting this group."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/single/forum/edit.php:16
+#: bp-templates/bp-legacy/buddypress/groups/single/forum/topic.php:17
+#: bp-templates/bp-legacy/buddypress/groups/single/forum.php:27
+msgid "Forum Directory"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/single/forum/edit.php:25
+msgid "Edit:"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/single/forum/edit.php:87
+msgid "This topic does not exist."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/single/forum/topic.php:9
+msgid "New Reply"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/single/forum/topic.php:32
+msgid "Topic tags:"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/single/forum/topic.php:81
+msgid "%1$s said %2$s:"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/single/forum/topic.php:119
+msgid "There are no posts for this topic."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/single/forum/topic.php:134
+msgid "You will auto join this group when you reply to this topic."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/single/forum/topic.php:139
+msgid "Add a reply:"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/single/forum/topic.php:144
+msgid "Post Reply"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/single/forum/topic.php:155
+msgid "This topic is closed, replies are no longer accepted."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/single/forum.php:69
+msgid "You will auto join this group when you start a new topic."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/single/forum.php:73
+msgid "Post a New Topic:"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/single/group-header.php:11
+msgid "Group Admins"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/single/group-header.php:20
+msgid "Group Mods"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/single/invites-loop.php:90
+msgid "Send Invites"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/single/request-membership.php:4
+msgid "You are requesting to become a member of the group '%s'."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/single/request-membership.php:7
+msgid "Comments (optional)"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/single/request-membership.php:12
+msgid "Send Request"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/single/requests-loop.php:31
+#: bp-templates/bp-legacy/buddypress/members/single/friends/requests.php:37
+#: bp-templates/bp-legacy/buddypress/members/single/groups/invites.php:23
+msgid "Accept"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/single/requests-loop.php:33
+#: bp-templates/bp-legacy/buddypress/members/single/friends/requests.php:38
+#: bp-templates/bp-legacy/buddypress/members/single/groups/invites.php:24
+msgid "Reject"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/groups/single/requests-loop.php:62
+msgid "There are no pending membership requests."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/activate.php:14
+msgid ""
+"Your account was activated successfully! Your account details have been "
+"sent to you in a separate email."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/activate.php:16
+msgid ""
+"Your account was activated successfully! You can now <a href=\"%s\">log "
+"in</a> with the username and password you provided when you signed up."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/activate.php:21
+msgid "Please provide a valid activation key."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/activate.php:25
+msgid "Activation Key:"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/index.php:38
+#: bp-templates/bp-legacy/buddypress/members/single/friends.php:23
+msgid "Newest Registered"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/register.php:13
+msgid "User registration is currently not allowed."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/register.php:22
+msgid ""
+"Registering for this site is easy. Just fill in the fields below, and we'll "
+"get a new account set up for you in no time."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/register.php:30
+msgid "Account Details"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/register.php:32
+#: bp-templates/bp-legacy/buddypress/members/register.php:36
+#: bp-templates/bp-legacy/buddypress/members/register.php:40
+#: bp-templates/bp-legacy/buddypress/members/register.php:45
+#: bp-templates/bp-legacy/buddypress/members/register.php:133
+#: bp-templates/bp-legacy/buddypress/members/register.php:142
+#: bp-xprofile/bp-xprofile-classes.php:1602
+#: bp-xprofile/bp-xprofile-classes.php:1856
+#: bp-xprofile/bp-xprofile-classes.php:2009
+#: bp-xprofile/bp-xprofile-classes.php:2169
+#: bp-xprofile/bp-xprofile-classes.php:2327
+#: bp-xprofile/bp-xprofile-classes.php:2476
+#: bp-xprofile/bp-xprofile-classes.php:2563
+#: bp-xprofile/bp-xprofile-classes.php:2650
+#: bp-xprofile/bp-xprofile-classes.php:2739
+msgid "(required)"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/register.php:36
+msgid "Email Address"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/register.php:40
+msgid "Choose a Password"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/register.php:45
+msgid "Confirm Password"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/register.php:63
+msgid "Profile Details"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/register.php:80
+#: bp-templates/bp-legacy/buddypress/members/register.php:95
+#: bp-templates/bp-legacy/buddypress/members/single/profile/edit.php:35
+#: bp-templates/bp-legacy/buddypress/members/single/profile/edit.php:49
+msgid ""
+"This field can be seen by: <span "
+"class=\"current-visibility-level\">%s</span>"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/register.php:85
+#: bp-templates/bp-legacy/buddypress/members/single/profile/edit.php:40
+#: bp-xprofile/bp-xprofile-admin.php:781
+msgid "Who can see this field?"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/register.php:127
+msgid "Blog Details"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/register.php:129
+msgid "Yes, I'd like to create a new site"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/register.php:133
+msgid "Blog URL"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/register.php:142
+msgid "Site Title"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/register.php:165
+msgid "Complete Sign Up"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/register.php:180
+msgid ""
+"You have successfully created your account! To begin using this site you "
+"will need to activate your account via the email we have just sent to your "
+"address."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/register.php:182
+msgid ""
+"You have successfully created your account! Please log in using the "
+"username and password you have just created."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/friends/requests.php:68
+msgid "You have no pending friendship requests."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/groups/invites.php:37
+msgid "You have no outstanding group invites."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/messages/compose.php:5
+msgid "Send To (Username or Friend's Name)"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/messages/compose.php:14
+msgid "This is a notice to all users."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/messages/compose.php:17
+msgid "Subject"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/messages/compose.php:20
+msgid "Message"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/messages/compose.php:28
+msgid "Send Message"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/messages/messages-loop.php:32
+msgid "From:"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/messages/messages-loop.php:37
+msgid "To:"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/messages/messages-loop.php:43
+msgid "View Message"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/messages/messages-loop.php:51
+#: bp-templates/bp-legacy/buddypress/members/single/messages/notices-loop.php:43
+#: bp-templates/bp-legacy/buddypress/members/single/messages/single.php:24
+msgid "Delete Message"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/messages/messages-loop.php:69
+msgid "Sorry, no messages were found."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/messages/notices-loop.php:36
+msgid "Sent:"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/messages/notices-loop.php:54
+msgid "Sorry, no notices were found."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/messages/single.php:14
+msgid "You are alone in this conversation."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/messages/single.php:18
+msgid "Conversation between %s and you."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/messages/single.php:86
+msgid "Send a Reply"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/messages/single.php:102
+msgid "Send Reply"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/notifications/feedback-no-notifications.php:7
+msgid "You have no unread notifications."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/notifications/feedback-no-notifications.php:11
+msgid "This member has no unread notifications."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/notifications/feedback-no-notifications.php:19
+msgid "You have no notifications."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/notifications/feedback-no-notifications.php:23
+msgid "This member has no notifications."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/notifications/notifications-loop.php:5
+msgid "Notification"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/notifications/notifications-loop.php:6
+msgid "Date Received"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/profile/change-avatar.php:1
+msgid "Change Profile Photo"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/profile/change-avatar.php:7
+msgid ""
+"Your profile photo will be used on your profile and throughout the site. If "
+"there is a <a href=\"http://gravatar.com\">Gravatar</a> associated with "
+"your account email we will use that, or you can upload an image from your "
+"computer."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/profile/change-avatar.php:14
+msgid ""
+"Click below to select a JPG, GIF or PNG format photo from your computer and "
+"then click 'Upload Image' to proceed."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/profile/change-avatar.php:23
+msgid ""
+"If you'd like to delete your current profile photo but not upload a new "
+"one, please use the delete profile photo button."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/profile/change-avatar.php:24
+#: bp-xprofile/bp-xprofile-admin.php:851
+msgid "Delete Profile Photo"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/profile/change-avatar.php:24
+msgid "Delete My Profile Photo"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/profile/change-avatar.php:31
+msgid "Crop Your New Profile Photo"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/profile/change-avatar.php:33
+msgid "Profile Photo to crop"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/profile/change-avatar.php:36
+msgid "Profile Photo preview"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/profile/change-avatar.php:55
+msgid ""
+"Your profile photo will be used on your profile and throughout the site. To "
+"change your profile photo, please create an account with <a "
+"href=\"http://gravatar.com\">Gravatar</a> using the same email address as "
+"you used to register with this site."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/profile/edit.php:10
+msgid "Editing '%s' Profile Group"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/profile/edit.php:35
+#: bp-xprofile/bp-xprofile-admin.php:772
+msgid "Change"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/profile/profile-wp.php:8
+msgid "%s's Profile"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/settings/capabilities.php:9
+msgid "This user is a spammer."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/settings/delete-account.php:7
+msgid ""
+"Deleting your account will delete all of the content you have created. It "
+"will be completely irrecoverable."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/settings/delete-account.php:11
+msgid ""
+"Deleting this account will delete all of the content it has created. It "
+"will be completely irrecoverable."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/settings/delete-account.php:23
+msgid "I understand the consequences."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/settings/general.php:7
+msgid ""
+"Current Password <span>(required to update email or change current "
+"password)</span>"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/settings/general.php:8
+msgid "Password Lost and Found"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/settings/general.php:8
+msgid "Lost your password?"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/settings/general.php:12
+msgid "Account Email"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/settings/general.php:15
+msgid "Change Password <span>(leave blank for no change)</span>"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/settings/general.php:16
+msgid "New Password"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/settings/general.php:18
+msgid "Repeat New Password"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/settings/notifications.php:4
+msgid "Send an email notice when:"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/settings/profile.php:15
+msgid "Visibility"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress-functions.php:63
+msgid "BuddyPress Legacy"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress-functions.php:238
+msgid "Accepted"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress-functions.php:240
+msgid "comments"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress-functions.php:241
+msgid "Are you sure you want to leave this group?"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress-functions.php:243
+msgid "My Favorites"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress-functions.php:244
+msgid "Rejected"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress-functions.php:246
+msgid "Show all"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress-functions.php:247
+msgid "Show all comments for this thread"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress-functions.php:248
+msgid "Show all %d comments"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress-functions.php:249
+msgid ""
+"Your profile has unsaved changes. If you leave the page, the changes will "
+"be lost."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress-functions.php:726
+msgid "There was a problem posting your update; please try again."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress-functions.php:844
+#: bp-templates/bp-legacy/buddypress-functions.php:880
+msgid "There was a problem when deleting. Please try again."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress-functions.php:1054
+msgid ""
+"%s has previously requested to join this group. Sending an invitation will "
+"automatically add the member to the group."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress-functions.php:1109
+msgid " Friendship could not be requested."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress-functions.php:1121
+msgid "Friendship request could not be cancelled."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress-functions.php:1126
+msgid "Request Pending"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress-functions.php:1146
+msgid "There was a problem accepting that request. Please try again."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress-functions.php:1165
+msgid "There was a problem rejecting that request. Please try again."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress-functions.php:1195
+msgid "Error joining group"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress-functions.php:1208
+#: bp-templates/bp-legacy/buddypress-functions.php:1218
+msgid "Error requesting membership"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress-functions.php:1220
+msgid "Membership Requested"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress-functions.php:1229
+msgid "Error leaving group"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress-functions.php:1252
+msgid "There was a problem closing the notice."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress-functions.php:1315
+msgid "There was a problem sending that reply. Please try again."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress-functions.php:1333
+msgid "There was a problem marking messages as unread."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress-functions.php:1358
+msgid "There was a problem marking messages as read."
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress-functions.php:1383
+msgid "There was a problem deleting messages."
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-actions.php:39
+msgid "Your profile photo was deleted successfully!"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-actions.php:41
+msgid "There was a problem deleting your profile photo; please try again."
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-activity.php:31
+msgid "Member changed profile picture"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-activity.php:33
+msgid "Updated Profile Photos"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-activity.php:42
+msgid "New member registered"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-activity.php:44
+msgid "New Members"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-activity.php:51
+msgid "Updated Profile"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-activity.php:53
+#: bp-xprofile/bp-xprofile-activity.php:329
+msgid "Profile Updates"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-activity.php:72
+msgid "%s changed their profile picture"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-activity.php:93
+msgid "%s became a registered member"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-activity.php:119
+msgid "%s&#8217;s profile was updated"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-admin.php:72 bp-xprofile/bp-xprofile-classes.php:472
+msgid "Add New Field Group"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-admin.php:75
+msgid "Fields in the \"%s\" group will appear on the signup page."
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-admin.php:98 bp-xprofile/bp-xprofile-admin.php:382
+msgid "(Primary)"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-admin.php:113
+msgid "Add New Field"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-admin.php:152
+msgid "There are no fields in this group."
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-admin.php:161
+msgid "You have no groups."
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-admin.php:162
+msgid "Add New Group"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-admin.php:189
+msgid "There was an error saving the group. Please try again"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-admin.php:192
+msgid "The group was saved successfully."
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-admin.php:221
+msgid "There was an error deleting the group. Please try again"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-admin.php:224
+msgid "The group was deleted successfully."
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-admin.php:265
+msgid "There was an error saving the field. Please try again"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-admin.php:272
+msgid "The field was saved successfully."
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-admin.php:316
+msgid "field"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-admin.php:316
+msgid "option"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-admin.php:320
+msgid "There was an error deleting the %s. Please try again"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-admin.php:323
+msgid "The %s was deleted successfully!"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-admin.php:382
+msgid "(Required)"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-admin.php:768
+msgid "This field can be seen by: <span class=\"%s\">%s</span>"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:380
+msgid "Please make sure you give the group a name."
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:474
+msgid "Create Field Group"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:476
+msgid "Edit Field Group"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:502
+msgid "Field Group Title"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:509
+msgid "Group Description"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:890
+msgid "Add Field"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:902
+msgid "Edit Field"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:926
+msgid "Field Description"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:947
+msgid "Submit"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:992
+msgid "Default Visibility"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:1010
+msgid "Per-Member Visibility"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:1015
+msgid "Let members change this field's visibility"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:1019
+msgid "Enforce the default visibility for all members"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:1034
+msgid "Field Requirement"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:1037
+msgid "Not Required"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:1038
+msgid "Required"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:1044
+msgid "Field Type"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:1082
+msgid "Please make sure you fill out all required fields."
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:1090
+msgid "This field type require at least one option. Please add options below."
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:1704
+msgid "January"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:1705
+msgid "February"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:1706
+msgid "March"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:1707
+msgid "April"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:1708
+msgid "May"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:1709
+msgid "June"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:1710
+msgid "July"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:1711
+msgid "August"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:1712
+msgid "September"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:1713
+msgid "October"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:1714
+msgid "November"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:1715
+msgid "December"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:2020
+#: bp-xprofile/bp-xprofile-classes.php:2098
+#: bp-xprofile/bp-xprofile-classes.php:2182
+msgid "Clear"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:3090
+msgid "Please enter options for this Field:"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:3093
+msgid "Sort Order:"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:3095
+msgid "Custom"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:3096
+msgid "Ascending"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:3097
+msgid "Descending"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:3162
+msgid "Default Value"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:3179
+msgid "Add Another Option"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-screens.php:142
+msgid ""
+"There was a problem updating some of your profile information; please try "
+"again."
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-screens.php:144
+msgid "Changes saved."
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-screens.php:212
+msgid "There was a problem cropping your profile photo."
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-screens.php:215
+msgid "Your new profile photo was uploaded successfully."
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-settings.php:43
+msgid "Your profile settings have been saved."
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-settings.php:47
+msgid "This member's profile settings have been saved."
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-template.php:712
+msgid "Profile not recently updated"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-template.php:722
+msgid "Profile updated %s"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-template.php:872
+msgid "This field's visibility cannot be changed."
+msgstr ""
+
+#. Plugin URI of the plugin/theme
+msgid "http://buddypress.org"
+msgstr ""
+
+#. Description of the plugin/theme
+msgid ""
+"Social networking in a box. Build a social network for your company, "
+"school, sports team or niche community all based on the power and "
+"flexibility of WordPress."
+msgstr ""
+
+#. Author of the plugin/theme
+msgid "The BuddyPress Community"
+msgstr ""
+
+#. Author URI of the plugin/theme
+msgid "http://buddypress.org/community/members/"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:32
+msgctxt "Admin Dashbord SWA page title"
+msgid "Activity"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:33
+msgctxt "Admin Dashbord SWA menu"
+msgid "Activity"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:236
+msgctxt "activity admin edit screen"
+msgid "Status"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:237
+msgctxt "activity admin edit screen"
+msgid "Primary Item/Secondary Item"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:238
+msgctxt "activity admin edit screen"
+msgid "Link"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:239
+msgctxt "activity admin edit screen"
+msgid "Type"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:240
+msgctxt "activity admin edit screen"
+msgid "Author ID"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:253
+msgctxt "Activity items per page (screen options)"
+msgid "Activity"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:912
+msgctxt "Admin SWA page"
+msgid "Activity"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:1247
+msgctxt "Admin SWA column header"
+msgid "Author"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:1248
+msgctxt "Admin SWA column header"
+msgid "Activity"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:1249
+msgctxt "Admin SWA column header"
+msgid "Action"
+msgstr ""
+
+#: bp-activity/bp-activity-admin.php:1250
+msgctxt "Admin SWA column header"
+msgid "In Response To"
+msgstr ""
+
+#: bp-activity/bp-activity-akismet.php:558
+msgctxt "x hours ago - akismet cleared this item"
+msgid "<span>%1$s</span> &mdash; %2$s"
+msgstr ""
+
+#: bp-activity/bp-activity-loader.php:110
+msgctxt "component directory title"
+msgid "Site-Wide Activity"
+msgstr ""
+
+#: bp-core/bp-core-filters.php:480
+msgctxt "component directory title"
+msgid "Directory"
+msgstr ""
+
+#: bp-groups/bp-groups-loader.php:166
+msgctxt "component directory title"
+msgid "Groups"
+msgstr ""
+
+#: bp-members/bp-members-loader.php:86
+msgctxt "component directory title"
+msgid "Members"
+msgstr ""
+
+#: bp-activity/bp-activity-loader.php:140
+msgctxt "Profile activity screen nav"
+msgid "Activity"
+msgstr ""
+
+#: bp-activity/bp-activity-loader.php:166
+msgctxt "Profile activity screen sub nav"
+msgid "Personal"
+msgstr ""
+
+#: bp-activity/bp-activity-loader.php:177
+msgctxt "Profile activity screen sub nav"
+msgid "Mentions"
+msgstr ""
+
+#: bp-activity/bp-activity-loader.php:189
+msgctxt "Profile activity screen sub nav"
+msgid "Favorites"
+msgstr ""
+
+#: bp-activity/bp-activity-loader.php:201
+msgctxt "Profile activity screen sub nav"
+msgid "Friends"
+msgstr ""
+
+#: bp-activity/bp-activity-loader.php:214
+msgctxt "Profile activity screen sub nav"
+msgid "Groups"
+msgstr ""
+
+#: bp-activity/bp-activity-loader.php:259
+msgctxt "Toolbar Mention logged in user"
+msgid "Mentions <span class=\"count\">%s</span>"
+msgstr ""
+
+#: bp-activity/bp-activity-loader.php:261
+msgctxt "Toolbar Mention logged in user"
+msgid "Mentions"
+msgstr ""
+
+#: bp-activity/bp-activity-loader.php:269
+msgctxt "My Account Activity sub nav"
+msgid "Activity"
+msgstr ""
+
+#: bp-activity/bp-activity-loader.php:277
+msgctxt "My Account Activity sub nav"
+msgid "Personal"
+msgstr ""
+
+#: bp-activity/bp-activity-loader.php:295
+msgctxt "My Account Activity sub nav"
+msgid "Favorites"
+msgstr ""
+
+#: bp-activity/bp-activity-loader.php:304
+msgctxt "My Account Activity sub nav"
+msgid "Friends"
+msgstr ""
+
+#: bp-activity/bp-activity-loader.php:314
+msgctxt "My Account Activity sub nav"
+msgid "Groups"
+msgstr ""
+
+#: bp-activity/bp-activity-loader.php:338
+msgctxt "Page and <title>"
+msgid "My Activity"
+msgstr ""
+
+#: bp-activity/bp-activity-template.php:284
+msgctxt "Activity pagination previous text"
+msgid "&larr;"
+msgstr ""
+
+#: bp-activity/bp-activity-template.php:285
+msgctxt "Activity pagination next text"
+msgid "&rarr;"
+msgstr ""
+
+#: bp-blogs/bp-blogs-template.php:225
+msgctxt "Blog pagination previous text"
+msgid "&larr;"
+msgstr ""
+
+#: bp-blogs/bp-blogs-template.php:226
+msgctxt "Blog pagination next text"
+msgid "&rarr;"
+msgstr ""
+
+#: bp-blogs/bp-blogs-widgets.php:37
+msgctxt "widget name"
+msgid "(BuddyPress) Recent Networkwide Posts"
+msgstr ""
+
+#: bp-core/bp-core-widgets.php:154
+msgctxt "widget name"
+msgid "(BuddyPress) Members"
+msgstr ""
+
+#: bp-core/bp-core-widgets.php:320
+msgctxt "widget name"
+msgid "(BuddyPress) Who's Online"
+msgstr ""
+
+#: bp-core/bp-core-widgets.php:423
+msgctxt "widget name"
+msgid "(BuddyPress) Recently Active Members"
+msgstr ""
+
+#: bp-friends/bp-friends-widgets.php:51
+msgctxt "widget name"
+msgid "(BuddyPress) Friends"
+msgstr ""
+
+#: bp-groups/bp-groups-widgets.php:27
+msgctxt "widget name"
+msgid "(BuddyPress) Groups"
+msgstr ""
+
+#: bp-blogs/bp-blogs-widgets.php:133
+msgctxt "Label for the Title field of the Recent Networkwide Posts widget"
+msgid "Title:"
+msgstr ""
+
+#: bp-core/admin/bp-core-components.php:144
+msgctxt "plugins"
+msgid "All <span class=\"count\">(%s)</span>"
+msgid_plural "All <span class=\"count\">(%s)</span>"
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-core/admin/bp-core-schema.php:328
+msgctxt "First field-group name"
+msgid "General"
+msgstr ""
+
+#: bp-core/admin/bp-core-schema.php:332
+msgctxt "Display name field"
+msgid "Display Name"
+msgstr ""
+
+#: bp-core/admin/bp-core-tools.php:386
+msgctxt "buddypress tools intro"
+msgid "Use the %s to repair these relationships."
+msgstr ""
+
+#: bp-core/bp-core-admin.php:337
+msgctxt "BuddyPress setting tab"
+msgid "Profile Settings"
+msgstr ""
+
+#: bp-core/bp-core-filters.php:460
+msgctxt "Construct the page title. 1 = user name, 2 = component name, 3 = seperator"
+msgid "%1$s %3$s %2$s"
+msgstr ""
+
+#: bp-core/bp-core-functions.php:507
+msgctxt "Page title for the Activity directory."
+msgid "Activity"
+msgstr ""
+
+#: bp-core/bp-core-functions.php:508
+msgctxt "Page title for the Groups directory."
+msgid "Groups"
+msgstr ""
+
+#: bp-core/bp-core-functions.php:509
+msgctxt "Page title for the Sites directory."
+msgid "Sites"
+msgstr ""
+
+#: bp-core/bp-core-functions.php:510
+msgctxt "Page title for the Members directory."
+msgid "Members"
+msgstr ""
+
+#: bp-core/bp-core-functions.php:511
+msgctxt "Page title for the user activation screen."
+msgid "Activate"
+msgstr ""
+
+#: bp-core/bp-core-functions.php:512
+msgctxt "Page title for the user registration screen."
+msgid "Register"
+msgstr ""
+
+#: bp-core/bp-core-functions.php:945
+msgctxt "Separator in time since"
+msgid ","
+msgstr ""
+
+#: bp-core/bp-core-loader.php:233
+msgctxt "Main navigation"
+msgid "Profile"
+msgstr ""
+
+#: bp-core/bp-core-loader.php:244
+msgctxt "Profile sub nav"
+msgid "View"
+msgstr ""
+
+#: bp-core/bp-core-template.php:385
+msgctxt "search form"
+msgid "Members"
+msgstr ""
+
+#: bp-core/bp-core-template.php:389
+msgctxt "search form"
+msgid "Groups"
+msgstr ""
+
+#: bp-core/bp-core-template.php:393
+msgctxt "search form"
+msgid "Blogs"
+msgstr ""
+
+#: bp-core/bp-core-template.php:397
+msgctxt "search form"
+msgid "Forums"
+msgstr ""
+
+#: bp-core/bp-core-template.php:400
+msgctxt "search form"
+msgid "Posts"
+msgstr ""
+
+#: bp-core/bp-core-template.php:403
+msgctxt "search form"
+msgid "Search these:"
+msgstr ""
+
+#: bp-core/bp-core-widgets.php:36
+msgctxt "Title of the login widget"
+msgid "(BuddyPress) Log In"
+msgstr ""
+
+#: bp-forums/bp-forums-template.php:296 bp-forums/bp-forums-template.php:568
+msgctxt "Forum topic pagination previous text"
+msgid "&larr;"
+msgstr ""
+
+#: bp-forums/bp-forums-template.php:297 bp-forums/bp-forums-template.php:569
+msgctxt "Forum topic pagination next text"
+msgid "&rarr;"
+msgstr ""
+
+#: bp-forums/bp-forums-template.php:1736
+msgctxt "Forum thread pagination previous text"
+msgid "&larr;"
+msgstr ""
+
+#: bp-forums/bp-forums-template.php:1737
+msgctxt "Forum thread pagination next text"
+msgid "&rarr;"
+msgstr ""
+
+#: bp-friends/bp-friends-loader.php:24
+msgctxt "Friends screen page <title>"
+msgid "Friend Connections"
+msgstr ""
+
+#: bp-friends/bp-friends-loader.php:140
+msgctxt "Friends screen sub nav"
+msgid "Friendships"
+msgstr ""
+
+#: bp-friends/bp-friends-loader.php:150
+msgctxt "Friends screen sub nav"
+msgid "Requests"
+msgstr ""
+
+#: bp-friends/bp-friends-loader.php:185
+msgctxt "My Account Friends menu"
+msgid "Friends <span class=\"count\">%s</span>"
+msgstr ""
+
+#: bp-friends/bp-friends-loader.php:188
+msgctxt "My Account Friends menu"
+msgid "Friends"
+msgstr ""
+
+#: bp-friends/bp-friends-loader.php:186
+msgctxt "My Account Friends menu sub nav"
+msgid "Pending Requests <span class=\"count\">%s</span>"
+msgstr ""
+
+#: bp-friends/bp-friends-loader.php:189
+msgctxt "My Account Friends menu sub nav"
+msgid "No Pending Requests"
+msgstr ""
+
+#: bp-friends/bp-friends-loader.php:204
+msgctxt "My Account Friends menu sub nav"
+msgid "Friendships"
+msgstr ""
+
+#: bp-friends/bp-friends-screens.php:85
+msgctxt "Friend settings on notification settings page"
+msgid "Friends"
+msgstr ""
+
+#: bp-friends/bp-friends-screens.php:94
+msgctxt "Friend settings on notification settings page"
+msgid "A member sends you a friendship request"
+msgstr ""
+
+#: bp-friends/bp-friends-screens.php:100
+msgctxt "Friend settings on notification settings page"
+msgid "A member accepts your friendship request"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:32
+msgctxt "Admin Groups page title"
+msgid "Groups"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:33
+msgctxt "Admin Groups menu"
+msgid "Groups"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:124
+msgctxt "group admin edit screen"
+msgid "Save"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:125
+msgctxt "group admin edit screen"
+msgid "Settings"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:126
+msgctxt "group admin edit screen"
+msgid "Add New Members"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:127
+msgctxt "group admin edit screen"
+msgid "Manage Members"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:141
+msgctxt "Groups per page (screen options)"
+msgid "Groups"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:797
+msgctxt "Group member user_id in group admin"
+msgid "ID"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:798
+msgctxt "Group member name in group admin"
+msgid "Name"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:799
+msgctxt "Group member role in group admin"
+msgid "Group Role"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:1306
+msgctxt "Groups admin Group Name column header"
+msgid "Name"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:1307
+msgctxt "Groups admin Group Description column header"
+msgid "Description"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:1308
+msgctxt "Groups admin Privacy Status column header"
+msgid "Status"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:1309
+msgctxt "Groups admin Members column header"
+msgid "# Members"
+msgstr ""
+
+#: bp-groups/bp-groups-admin.php:1310
+msgctxt "Groups admin Last Active column header"
+msgid "Last Active"
+msgstr ""
+
+#: bp-groups/bp-groups-loader.php:90
+msgctxt "Group screen page <title>"
+msgid "User Groups"
+msgstr ""
+
+#: bp-groups/bp-groups-loader.php:168
+msgctxt "Component directory search"
+msgid "Search Groups..."
+msgstr ""
+
+#: bp-groups/bp-groups-loader.php:263
+msgctxt "Group screen nav"
+msgid "Details"
+msgstr ""
+
+#: bp-groups/bp-groups-loader.php:267
+msgctxt "Group screen nav"
+msgid "Settings"
+msgstr ""
+
+#: bp-groups/bp-groups-loader.php:275
+msgctxt "Group screen nav"
+msgid "Photo"
+msgstr ""
+
+#: bp-groups/bp-groups-loader.php:283
+msgctxt "Group screen nav"
+msgid "Invites"
+msgstr ""
+
+#: bp-groups/bp-groups-loader.php:448
+msgctxt "Group screen nav"
+msgid "Request Membership"
+msgstr ""
+
+#: bp-groups/bp-groups-loader.php:357
+msgctxt "Group screen nav with counter"
+msgid "Groups <span class=\"%s\">%s</span>"
+msgstr ""
+
+#: bp-groups/bp-groups-loader.php:359
+msgctxt "Group screen nav without counter"
+msgid "Groups"
+msgstr ""
+
+#: bp-groups/bp-groups-loader.php:428
+msgctxt "Group screen navigation title"
+msgid "Home"
+msgstr ""
+
+#: bp-groups/bp-groups-loader.php:460
+msgctxt "My Group screen nav"
+msgid "Forum"
+msgstr ""
+
+#: bp-groups/bp-groups-loader.php:472
+msgctxt "My Group screen nav"
+msgid "Members <span>%s</span>"
+msgstr ""
+
+#: bp-groups/bp-groups-loader.php:485
+msgctxt "My Group screen nav"
+msgid "Send Invites"
+msgstr ""
+
+#: bp-groups/bp-groups-loader.php:500
+msgctxt "My Group screen nav"
+msgid "Manage"
+msgstr ""
+
+#: bp-groups/bp-groups-loader.php:543
+msgctxt "My Account Groups"
+msgid "Groups"
+msgstr ""
+
+#: bp-groups/bp-groups-loader.php:544
+msgctxt "My Account Groups sub nav"
+msgid "No Pending Invites"
+msgstr ""
+
+#: bp-groups/bp-groups-loader.php:548
+msgctxt "My Account Groups sub nav"
+msgid "Pending Invites <span class=\"count\">%s</span>"
+msgstr ""
+
+#: bp-groups/bp-groups-loader.php:563
+msgctxt "My Account Groups sub nav"
+msgid "Memberships"
+msgstr ""
+
+#: bp-groups/bp-groups-loader.php:580
+msgctxt "My Account Groups sub nav"
+msgid "Create a Group"
+msgstr ""
+
+#: bp-groups/bp-groups-loader.php:547
+msgctxt "My Account Groups nav"
+msgid "Groups <span class=\"count\">%s</span>"
+msgstr ""
+
+#: bp-groups/bp-groups-loader.php:598
+msgctxt "My Groups page <title>"
+msgid "Memberships"
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:972
+msgctxt "Group settings on notification settings page"
+msgid "Groups"
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:981
+msgctxt "group settings on notification settings page"
+msgid "A member invites you to join a group"
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:987
+msgctxt "group settings on notification settings page"
+msgid "Group information is updated"
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:993
+msgctxt "group settings on notification settings page"
+msgid "You are promoted to a group administrator or moderator"
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:999
+msgctxt "group settings on notification settings page"
+msgid "A member requests to join a private group for which you are an admin"
+msgstr ""
+
+#: bp-groups/bp-groups-screens.php:1160
+msgctxt "Group creation page"
+msgid "Groups"
+msgstr ""
+
+#: bp-groups/bp-groups-template.php:334
+msgctxt "Group pagination previous text"
+msgid "&larr;"
+msgstr ""
+
+#: bp-groups/bp-groups-template.php:335
+msgctxt "Group pagination next text"
+msgid "&rarr;"
+msgstr ""
+
+#: bp-members/admin/bp-members-classes.php:100
+#: bp-members/admin/bp-members-classes.php:440
+#: bp-members/bp-members-admin.php:1188
+msgctxt "signup users"
+msgid "Pending %s"
+msgstr ""
+
+#: bp-members/admin/bp-members-classes.php:141
+#: bp-members/admin/bp-members-classes.php:469
+msgctxt "Pending signup action"
+msgid "Activate"
+msgstr ""
+
+#: bp-members/admin/bp-members-classes.php:142
+#: bp-members/admin/bp-members-classes.php:470
+msgctxt "Pending signup action"
+msgid "Email"
+msgstr ""
+
+#: bp-members/bp-members-admin.php:688
+msgctxt "members user-admin edit screen"
+msgid "Status"
+msgstr ""
+
+#: bp-members/bp-members-admin.php:715
+msgctxt "members user-admin edit screen"
+msgid "%s's Stats"
+msgstr ""
+
+#: bp-members/bp-members-admin.php:816 bp-members/bp-members-admin.php:1662
+msgctxt "user"
+msgid "Add New"
+msgstr ""
+
+#: bp-members/bp-members-admin.php:820 bp-members/bp-members-admin.php:1666
+msgctxt "user"
+msgid "Add Existing"
+msgstr ""
+
+#: bp-members/bp-members-admin.php:1251
+msgctxt "Pending Accounts per page (screen options)"
+msgid "Pending Accounts"
+msgstr ""
+
+#: bp-members/bp-members-admin.php:1425
+msgctxt "signup resent"
+msgid "%s activation email successfully sent! "
+msgid_plural "%s activation emails successfully sent! "
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-members/bp-members-admin.php:1459
+msgctxt "signup resent"
+msgid "%s account successfully activated! "
+msgid_plural "%s accounts successfully activated! "
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-members/bp-members-admin.php:1436
+msgctxt "signup notsent"
+msgid "%s activation email was not sent."
+msgid_plural "%s activation emails were not sent."
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-members/bp-members-admin.php:1470
+msgctxt "signup notsent"
+msgid "%s account was not activated."
+msgid_plural "%s accounts were not activated."
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-members/bp-members-admin.php:1493
+msgctxt "signup deleted"
+msgid "%s sign-up successfully deleted!"
+msgid_plural "%s sign-ups successfully deleted!"
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-members/bp-members-admin.php:1504
+msgctxt "signup notdeleted"
+msgid "%s sign-up was not deleted."
+msgid_plural "%s sign-ups were not deleted."
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-members/bp-members-loader.php:220
+msgctxt "Member profile main navigation"
+msgid "Profile"
+msgstr ""
+
+#: bp-members/bp-members-loader.php:234
+msgctxt "Member profile view"
+msgid "View"
+msgstr ""
+
+#: bp-members/bp-members-template.php:286
+msgctxt "Member pagination previous text"
+msgid "&larr;"
+msgstr ""
+
+#: bp-members/bp-members-template.php:287
+msgctxt "Member pagination next text"
+msgid "&rarr;"
+msgstr ""
+
+#: bp-members/bp-members-template.php:887
+msgctxt "member latest update in member directory"
+msgid "- &quot;%s&quot;"
+msgstr ""
+
+#: bp-members/bp-members-template.php:989
+msgctxt "Records the timestamp that the user registered into the activy stream"
+msgid "registered %s"
+msgstr ""
+
+#: bp-messages/bp-messages-template.php:195
+msgctxt "Message pagination previous text"
+msgid "&larr;"
+msgstr ""
+
+#: bp-messages/bp-messages-template.php:196
+msgctxt "Message pagination next text"
+msgid "&rarr;"
+msgstr ""
+
+#: bp-messages/bp-messages-template.php:863
+msgctxt "Message dropdown filter"
+msgid "Read"
+msgstr ""
+
+#: bp-messages/bp-messages-template.php:864
+msgctxt "Message dropdown filter"
+msgid "Unread"
+msgstr ""
+
+#: bp-messages/bp-messages-template.php:865
+msgctxt "Message dropdown filter"
+msgid "All"
+msgstr ""
+
+#: bp-messages/bp-messages-template.php:870
+msgctxt "Message management markup"
+msgid "Mark as Read"
+msgstr ""
+
+#: bp-messages/bp-messages-template.php:871
+msgctxt "Message management markup"
+msgid "Mark as Unread"
+msgstr ""
+
+#: bp-notifications/bp-notifications-loader.php:26
+msgctxt "Page <title>"
+msgid "Notifications"
+msgstr ""
+
+#: bp-notifications/bp-notifications-loader.php:107
+msgctxt "Profile screen nav"
+msgid "Notifications <span class=\"%s\">%s</span>"
+msgstr ""
+
+#: bp-notifications/bp-notifications-loader.php:109
+msgctxt "Profile screen nav"
+msgid "Notifications"
+msgstr ""
+
+#: bp-notifications/bp-notifications-loader.php:136
+msgctxt "Notification screen nav"
+msgid "Unread"
+msgstr ""
+
+#: bp-notifications/bp-notifications-loader.php:147
+msgctxt "Notification screen nav"
+msgid "Read"
+msgstr ""
+
+#: bp-notifications/bp-notifications-loader.php:181
+msgctxt "My Account Notification pending"
+msgid "Notifications <span class=\"count\">%s</span>"
+msgstr ""
+
+#: bp-notifications/bp-notifications-loader.php:182
+msgctxt "My Account Notification pending"
+msgid "Unread <span class=\"count\">%s</span>"
+msgstr ""
+
+#: bp-notifications/bp-notifications-loader.php:184
+msgctxt "My Account Notification"
+msgid "Notifications"
+msgstr ""
+
+#: bp-notifications/bp-notifications-loader.php:185
+msgctxt "My Account Notification sub nav"
+msgid "Unread"
+msgstr ""
+
+#: bp-notifications/bp-notifications-template.php:309
+msgctxt "Notifications pagination previous text"
+msgid "&larr;"
+msgstr ""
+
+#: bp-notifications/bp-notifications-template.php:310
+msgctxt "Notifications pagination next text"
+msgid "&rarr;"
+msgstr ""
+
+#: bp-notifications/bp-notifications-template.php:785
+msgctxt "Notification screen action"
+msgid "Unread"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/activity/index.php:59
+msgctxt "Number of new activity mentions"
+msgid "%s new"
+msgid_plural "%s new"
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-templates/bp-legacy/buddypress/members/register.php:80
+msgctxt "Change profile field visibility level"
+msgid "Change"
+msgstr ""
+
+#: bp-templates/bp-legacy/buddypress/members/single/groups/invites.php:14
+msgctxt "Group member count"
+msgid "1 member"
+msgid_plural "%d members"
+msgstr[0] ""
+msgstr[1] ""
+
+#: bp-xprofile/bp-xprofile-admin.php:27
+msgctxt "xProfile admin page title"
+msgid "Profile Fields"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-admin.php:27
+msgctxt "Admin Users menu"
+msgid "Profile Fields"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-admin.php:71
+msgctxt "Settings page header"
+msgid "Profile Fields"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-admin.php:438
+msgctxt "xprofile field type category"
+msgid "Other"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:1558
+#: bp-xprofile/bp-xprofile-classes.php:2445
+#: bp-xprofile/bp-xprofile-classes.php:2532
+#: bp-xprofile/bp-xprofile-classes.php:2619
+#: bp-xprofile/bp-xprofile-classes.php:2704
+msgctxt "xprofile field type category"
+msgid "Single Fields"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:1822
+#: bp-xprofile/bp-xprofile-classes.php:1976
+#: bp-xprofile/bp-xprofile-classes.php:2133
+#: bp-xprofile/bp-xprofile-classes.php:2296
+msgctxt "xprofile field type category"
+msgid "Multi Fields"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-admin.php:580
+msgctxt "xprofile user-admin edit screen"
+msgid "User marked as a spammer"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-admin.php:591
+msgctxt "xprofile user-admin edit screen"
+msgid "Profile Photo"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:503
+msgctxt "XProfile admin edit group"
+msgid "Group Name"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:923
+msgctxt "XProfile admin edit field"
+msgid "Field Name"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:1559
+msgctxt "xprofile field type"
+msgid "Date Selector"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:1823
+msgctxt "xprofile field type"
+msgid "Checkboxes"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:1977
+msgctxt "xprofile field type"
+msgid "Radio Buttons"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:2134
+msgctxt "xprofile field type"
+msgid "Multi Select Box"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:2297
+msgctxt "xprofile field type"
+msgid "Drop Down Select Box"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:2446
+msgctxt "xprofile field type"
+msgid "Multi-line Text Area"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:2533
+msgctxt "xprofile field type"
+msgid "Text Box"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:2620
+msgctxt "xprofile field type"
+msgid "Number"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-classes.php:2705
+msgctxt "xprofile field type"
+msgid "URL"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-loader.php:41
+msgctxt "Component page <title>"
+msgid "Extended Profiles"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-loader.php:113
+msgctxt "Visibility level setting"
+msgid "Everyone"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-loader.php:117
+msgctxt "Visibility level setting"
+msgid "Only Me"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-loader.php:121
+msgctxt "Visibility level setting"
+msgid "All Members"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-loader.php:128
+msgctxt "Visibility level setting"
+msgid "My Friends"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-loader.php:168
+msgctxt "Profile header menu"
+msgid "Profile"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-loader.php:189
+msgctxt "Profile header sub menu"
+msgid "View"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-loader.php:199
+msgctxt "Profile header sub menu"
+msgid "Edit"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-loader.php:211
+msgctxt "Profile header sub menu"
+msgid "Change Profile Photo"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-loader.php:254
+msgctxt "Profile settings  sub nav"
+msgid "Profile"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-loader.php:283
+msgctxt "My Account Profile"
+msgid "Profile"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-loader.php:291
+msgctxt "My Account Profile sub nav"
+msgid "View"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-loader.php:299
+msgctxt "My Account Profile sub nav"
+msgid "Edit"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-loader.php:308
+msgctxt "My Account Profile sub nav"
+msgid "Change Profile Photo"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-loader.php:335
+msgctxt "Page title"
+msgid "My Profile"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-loader.php:340
+msgctxt "Avatar alt"
+msgid "Profile picture of %s"
+msgstr ""
+
+#: bp-xprofile/bp-xprofile-loader.php:365
+msgctxt "My Account Settings sub nav"
+msgid "Profile"
+msgstr ""
\ No newline at end of file
diff --git a/wp-content/plugins/buddypress/readme.txt b/wp-content/plugins/buddypress/readme.txt
index a31876e45..327c60e3b 100644
--- a/wp-content/plugins/buddypress/readme.txt
+++ b/wp-content/plugins/buddypress/readme.txt
@@ -1,9 +1,9 @@
 === BuddyPress ===
-Contributors: johnjamesjacoby, DJPaul, boonebgorges, r-a-y
-Tags: social networking, activity, profiles, messaging, friends, groups, forums, notifications, settings, twitter, facebook, social, community, networks, networking, cms
+Contributors: johnjamesjacoby, DJPaul, boonebgorges, r-a-y, imath, mercime
+Tags: social networking, activity, profiles, messaging, friends, groups, forums, notifications, settings, social, community, networks, networking
 Requires at least: 3.6
-Tested up to: 3.9.1
-Stable tag: 2.0.2
+Tested up to: 4.0
+Stable tag: 2.1.1
 License: GPLv2 or later
 License URI: http://www.gnu.org/licenses/gpl-2.0.html
 
@@ -13,13 +13,9 @@ Social networking in a box. Build a social network for your company, school, spo
 
 BuddyPress lets users sign-up and start creating profiles, posting messages, making connections, creating and interacting in groups, and much more. A social network in a box, BuddyPress lets you easily build a community for your company, school, sports team, or other niche community.
 
-<h4>Who's Using BuddyPress?</h4>
-
-Take a look at some of the best sites on the <a href="http://buddypress.org/showcase/">BuddyPress Showcase</a>.
-
 <h4>Plugins: Adding So Much More</h4>
 
-BuddyPress boasts an ever growing array of new features developed by an awesome plugin development community. There are more than 330 BuddyPress plugins available, and the list is growing every day. Check out our list of <a href="http://buddypress.org/extend/recommended-plugins/">popular and recommended plugins</a>; for a full list of plugins, please visit the <a href="http://buddypress.org/extend/plugins/">BuddyPress.org plugins page</a>. You can install any of these plugins automatically, using the plugin installer on your WordPress Dashboard.
+BuddyPress boasts an ever growing array of new features developed by an awesome plugin development community. There are more than 330 BuddyPress plugins available, and the list is growing every day. Check out our list of <a href="http://buddypress.org/extend/recommended-plugins/">popular and recommended plugins</a>, or <a href="http://wordpress.org/plugins/search.php?q=buddypress">search for BuddyPress plugins on WordPress.org</a>. You can install any of these plugins automatically, using the plugin installer on your WordPress Dashboard.
 
 <h4>More Information</h4>
 
@@ -29,7 +25,7 @@ Visit the <a href="http://buddypress.org/">BuddyPress website</a> for more infor
 
 You can download and install BuddyPress using the built in WordPress plugin installer. If you download BuddyPress manually, make sure it is uploaded to "/wp-content/plugins/buddypress/".
 
-Activate BuddyPress in the "Plugins" admin panel using the "Activate" link. If you're using WordPress Multisite, you can optionally activate BuddyPress Network Wide, allowing its toolbar integration to appear on all of your sites, and optionally turning on post and comment aggregation to the Activity Stream too!
+Activate BuddyPress in the "Plugins" admin panel using the "Activate" link. If you're using WordPress Multisite, you can choose to activate BuddyPress network wide for full integration with all of your site.
 
 = Discussion Forums =
 
@@ -47,7 +43,7 @@ Yes! If your WordPress installation has multisite enabled, BuddyPress will suppo
 
 = Where can I get support? =
 
-The support forums can be found at <a href="http://buddypress.org/forums/">http://buddypress.org/forums/</a>.
+The support forums can be found at <a href="http://buddypress.org/support/">http://buddypress.org/support/</a>.
 
 = Where can I find documentation? =
 
@@ -69,14 +65,24 @@ Check out the development trunk of BuddyPress via Subversion, from <a href="http
 4. **Extensible Groups** - Powerful public, private or hidden groups allow your users to break the discussion down into specific topics. Extend groups with your own custom features using the group extension API.
 5. **Friend Connections** - Let your users make connections so they can track the activity of others, or filter to show only those users they care about the most.
 6. **Private Messaging** - Private messaging will allow your users to talk to each other directly and in private. Not just limited to one-on-one discussions, your users can send messages to multiple recipients.
-7. **Blogging Network** - Allow your users to start their own blogs using WordPress's Multisite feature, and track posts and comments from across your blog network in the activity stream.
+7. **Site Tracking** - Track posts and comments in the activity stream, and allow your users to add their own blogs using WordPress' Multisite feature.
+8. **Notifications** - Keep your members up-to-date with relevant activity via toolbar and email notifications.
 
 == Languages ==
 
-BuddyPress is available in more than 20 languages. For more information, check out the <a href="http://codex.buddypress.org/getting-started/translations/">translation page</a> on the BuddyPress Codex.
+BuddyPress is available in many languages. For more information, check out the <a href="http://codex.buddypress.org/translations/">translation page</a> on the BuddyPress Codex.
 
 == Upgrade Notice ==
 
+= 2.1.1 =
+See: http://codex.buddypress.org/releases/version-2-1-1/
+
+= 2.1 =
+See: http://codex.buddypress.org/releases/version-2-1/
+
+= 2.0.3 =
+See: http://codex.buddypress.org/releases/version-2-0-3/
+
 = 2.0.2 =
 See: http://codex.buddypress.org/releases/version-2-0-2/
 
@@ -145,6 +151,15 @@ Fixes over 10 bugs.
 
 == Changelog ==
 
+= 2.1.1 =
+See: http://codex.buddypress.org/releases/version-2-1-1/
+
+= 2.1 =
+See: http://codex.buddypress.org/releases/version-2-1/
+
+= 2.0.3 =
+See: http://codex.buddypress.org/releases/version-2-0-3/
+
 = 2.0.2 =
 See: http://codex.buddypress.org/releases/version-2-0-2/
 
@@ -173,4 +188,4 @@ See: http://codex.buddypress.org/releases/version-1-6/
 See: http://codex.buddypress.org/releases/version-1-5/
 
 = Older =
-See: http://buddypress.org/about/release-history/
+See: http://codex.buddypress.org/releases/
-- 
GitLab