diff --git src/bp-core/bp-core-avatars.php src/bp-core/bp-core-avatars.php
index 786c09f..e347992 100644
--- src/bp-core/bp-core-avatars.php
+++ src/bp-core/bp-core-avatars.php
@@ -671,7 +671,7 @@ function bp_core_fetch_avatar( $args = '' ) {
 		 * @param string $value  Default avatar for non-gravatar requests.
 		 * @param array  $params Array of parameters for the avatar request.
 		 */
-		$gravatar = apply_filters( 'bp_core_default_avatar_' . $params['object'], bp_core_avatar_default( 'local' ), $params );
+		$gravatar = apply_filters( 'bp_core_default_avatar_' . $params['object'], bp_core_avatar_default( 'local', $params ), $params );
 	}
 
 	if ( true === $params['html'] ) {
@@ -1845,13 +1845,15 @@ function bp_core_avatar_original_max_filesize() {
  * Get the URL of the 'full' default avatar.
  *
  * @since 1.5.0
+ * @since 2.6.0 Introduced `$params` and `$object_type` parameters.
  *
- * @param string $type 'local' if the fallback should be the locally-hosted version
- *                     of the mystery-person, 'gravatar' if the fallback should be
- *                     Gravatar's version. Default: 'gravatar'.
+ * @param string $type   'local' if the fallback should be the locally-hosted version
+ *                       of the mystery person, 'gravatar' if the fallback should be
+ *                       Gravatar's version. Default: 'gravatar'.
+ * @param array  $params Parameters passed to bp_core_fetch_avatar().
  * @return string The URL of the default avatar.
  */
-function bp_core_avatar_default( $type = 'gravatar' ) {
+function bp_core_avatar_default( $type = 'gravatar', $params = array() ) {
 	// Local override.
 	if ( defined( 'BP_AVATAR_DEFAULT' ) ) {
 		$avatar = BP_AVATAR_DEFAULT;
@@ -1869,10 +1871,12 @@ function bp_core_avatar_default( $type = 'gravatar' ) {
 	 * Filters the URL of the 'full' default avatar.
 	 *
 	 * @since 1.5.0
+	 * @since 2.6.0 Added `$type` and `$params`.
 	 *
 	 * @param string $avatar URL of the default avatar.
+	 * @param array  $params Params provided to bp_core_fetch_avatar().
 	 */
-	return apply_filters( 'bp_core_avatar_default', $avatar );
+	return apply_filters( 'bp_core_avatar_default', $avatar, $params );
 }
 
 /**
@@ -1882,13 +1886,15 @@ function bp_core_avatar_default( $type = 'gravatar' ) {
  * defined.
  *
  * @since 1.5.0
+ * @since 2.6.0 Introduced `$object_type` parameter.
  *
- * @param string $type 'local' if the fallback should be the locally-hosted version
- *                     of the mystery-person, 'gravatar' if the fallback should be
- *                     Gravatar's version. Default: 'gravatar'.
+ * @param string $type   'local' if the fallback should be the locally-hosted version
+ *                       of the mystery person, 'gravatar' if the fallback should be
+ *                       Gravatar's version. Default: 'gravatar'.
+ * @param array  $params Parameters passed to bp_core_fetch_avatar().
  * @return string The URL of the default avatar thumb.
  */
-function bp_core_avatar_default_thumb( $type = 'gravatar' ) {
+function bp_core_avatar_default_thumb( $type = 'gravatar', $params = array() ) {
 	// Local override.
 	if ( defined( 'BP_AVATAR_DEFAULT_THUMB' ) ) {
 		$avatar = BP_AVATAR_DEFAULT_THUMB;
@@ -1906,10 +1912,13 @@ function bp_core_avatar_default_thumb( $type = 'gravatar' ) {
 	 * Filters the URL of the 'thumb' default avatar.
 	 *
 	 * @since 1.5.0
+	 * @since 2.6.0 Added `$type` and `$params`.
 	 *
 	 * @param string $avatar URL of the default avatar.
+	 * @param string $type   'local' or 'gravatar'.
+	 * @param string $params Params provided to bp_core_fetch_avatar().
 	 */
-	return apply_filters( 'bp_core_avatar_thumb', $avatar );
+	return apply_filters( 'bp_core_avatar_thumb', $avatar, $params );
 }
 
 /**
diff --git src/bp-core/images/mystery-group-50.png src/bp-core/images/mystery-group-50.png
new file mode 100644
index 0000000..17f6dcf
Binary files /dev/null and src/bp-core/images/mystery-group-50.png differ
diff --git src/bp-core/images/mystery-group.png src/bp-core/images/mystery-group.png
new file mode 100644
index 0000000..e6bcd7f
Binary files /dev/null and src/bp-core/images/mystery-group.png differ
diff --git src/bp-groups/bp-groups-filters.php src/bp-groups/bp-groups-filters.php
index d1bf7f9..0ef075f 100644
--- src/bp-groups/bp-groups-filters.php
+++ src/bp-groups/bp-groups-filters.php
@@ -73,6 +73,10 @@ add_filter( 'bp_get_total_group_count_for_user', 'bp_core_number_format' );
 // Activity component integration.
 add_filter( 'bp_activity_at_name_do_notifications', 'bp_groups_disable_at_mention_notification_for_non_public_groups', 10, 4 );
 
+// Default group avatar.
+add_filter( 'bp_core_avatar_default',       'bp_groups_default_avatar', 10, 3 );
+add_filter( 'bp_core_avatar_default_thumb', 'bp_groups_default_avatar', 10, 3 );
+
 /**
  * Filter output of Group Description through WordPress's KSES API.
  *
@@ -319,3 +323,26 @@ function bp_groups_disable_at_mention_notification_for_non_public_groups( $send,
 
 	return $send;
 }
+
+/**
+ * Use the mystery group avatar for groups.
+ *
+ * @since 2.6.0
+ *
+ * @param string $avatar Current avatar src.
+ * @param array  $params Avatar params.
+ * @return string
+ */
+function bp_groups_default_avatar( $avatar, $params ) {
+	if ( isset( $params['object'] ) && 'group' === $params['object'] ) {
+		if ( isset( $params['type'] ) && 'thumb' === $params['type'] ) {
+			$file = 'mystery-group-50.png';
+		} else {
+			$file = 'mystery-group.png';
+		}
+
+		$avatar = buddypress()->plugin_url . "bp-core/images/$file";
+	}
+
+	return $avatar;
+}
diff --git src/bp-groups/bp-groups-template.php src/bp-groups/bp-groups-template.php
index dd454eb..fbfac50 100644
--- src/bp-groups/bp-groups-template.php
+++ src/bp-groups/bp-groups-template.php
@@ -599,7 +599,8 @@ function bp_group_avatar( $args = '' ) {
 			'css_id'     => $r['id'],
 			'class'      => $r['class'],
 			'width'      => $r['width'],
-			'height'     => $r['height']
+			'height'     => $r['height'],
+			'no_grav'    => true,
 		) );
 
 		// If No avatar found, provide some backwards compatibility.
@@ -4705,7 +4706,6 @@ function bp_new_group_avatar( $args = '' ) {
 			'class'   => 'avatar',
 			'id'      => 'avatar-crop-preview',
 			'alt'     => __( 'Group photo', 'buddypress' ),
-			'no_grav' => false
 		), 'get_new_group_avatar' );
 
 		// Merge parsed arguments with object specific data.
@@ -5148,14 +5148,16 @@ function bp_get_group_has_avatar( $group_id = false ) {
 		$group_id = bp_get_current_group_id();
 	}
 
-	$group_avatar = bp_core_fetch_avatar( array(
+	$avatar_args = array(
 		'item_id' => $group_id,
 		'object'  => 'group',
 		'no_grav' => true,
 		'html'    => false,
-	) );
+	);
+
+	$group_avatar = bp_core_fetch_avatar( $avatar_args );
 
-	if ( bp_core_avatar_default( 'local' ) === $group_avatar ) {
+	if ( bp_core_avatar_default( 'local', $avatar_args ) === $group_avatar ) {
 		return false;
 	}
 
