diff --git bp-blogs/bp-blogs-classes.php bp-blogs/bp-blogs-classes.php
index f41afea..05470f6 100644
--- bp-blogs/bp-blogs-classes.php
+++ bp-blogs/bp-blogs-classes.php
@@ -103,30 +103,60 @@ class BP_Blogs_Blog {
 
 	/**
 	 * Retrieve a set of blog-user associations.
-	 *
-	 * @param string $type The order in which results should be returned.
-	 *        'active', 'alphabetical', 'newest', or 'random'.
-	 * @param int|bool $limit Optional. The maximum records to return.
-	 *        Default: false.
-	 * @param int|bool $page Optional. The page of records to return.
-	 *        Default: false (unlimited results).
-	 * @param int $user_id Optional. ID of the user whose blogs are being
-	 *        retrieved. Default: 0.
-	 * @param string|bool $search_terms Optional. Search by text stored in
-	 *        blogmeta (such as the blog name). Default: false.
-	 * @return array Multidimensional results array, structured as follows:
-	 *           'blogs' - Array of located blog objects
-	 *           'total' - A count of the total blogs matching the filter params
+	 * @param array $args {
+	 *     An array of arguments. All items are optional.
+	 *     @type string $type The order in which results should be returned.
+	 *            'active', 'alphabetical', 'newest', or 'random'.
+	 *     @type int|bool $limit Optional. The maximum records to return.
+	 *            Default: false.
+	 *     @type int|bool $page Optional. The page of records to return.
+	 *            Default: false (unlimited results).
+	 *     @type int $user_id Optional. ID of the user whose blogs are being
+	 *            retrieved. Default: 0.
+	 *     @type string|bool $search_terms Optional. Search by text stored in
+	 *            blogmeta (such as the blog name). Default: false.
+	 * }
+	 * @return array {
+	 *     Multidimensional results array, structured as follows:
+	 *     @var array $blogs Array of located blog objects.
+	 *     @var int $total A count of the total blogs matching the filter params.
+	 * }
 	 */
-	public static function get( $type, $limit = false, $page = false, $user_id = 0, $search_terms = false ) {
+	public static function get( $args = array() ) {
 		global $bp, $wpdb;
 
+		// Backward compatibility with old method of passing arguments
+		if ( !is_array( $args ) || func_num_args() > 1 ) {
+			_deprecated_argument( __METHOD__, '2.0.0', sprintf( __( 'Arguments passed to %1$s should be in an associative array. See the inline documentation at %2$s for more details.', 'buddypress' ), __METHOD__, __FILE__ ) );
+			$old_args_keys = array(
+				0 => 'type',
+				1 => 'per_page',
+				2 => 'page',
+				3 => 'user_id',
+				4 => 'search_terms',
+			);
+
+			$func_args = func_get_args();
+			$args = bp_core_parse_args_array( $old_args_keys, $func_args );
+		}
+
+		$defaults = array(
+			'type'         => 'active',
+			'per_page'     => false,
+			'page'         => false,
+			'user_id'      => 0,
+			'search_terms' => false,
+		);
+
+		$r = wp_parse_args( $args, $defaults );
+		extract( $r );
+
 		if ( !is_user_logged_in() || ( !bp_current_user_can( 'bp_moderate' ) && ( $user_id != bp_loggedin_user_id() ) ) )
 			$hidden_sql = "AND wb.public = 1";
 		else
 			$hidden_sql = '';
 
-		$pag_sql = ( $limit && $page ) ? $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $limit), intval( $limit ) ) : '';
+		$pag_sql = ( $per_page && $page ) ? $wpdb->prepare( " LIMIT %d, %d", intval( ( $page - 1 ) * $per_page ), intval( $per_page ) ) : '';
 
 		$user_sql = !empty( $user_id ) ? $wpdb->prepare( " AND b.user_id = %d", $user_id ) : '';
 
diff --git bp-blogs/bp-blogs-functions.php bp-blogs/bp-blogs-functions.php
index d032cfb..cdfed2d 100644
--- bp-blogs/bp-blogs-functions.php
+++ bp-blogs/bp-blogs-functions.php
@@ -53,7 +53,15 @@ function bp_blogs_get_blogs( $args = '' ) {
 	$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 ), $params );
+	$args_n = array(
+		'type'         => $type,
+		'per_page'     => $per_page,
+		'page'         => $page,
+		'user_id'      => $user_id,
+		'search_terms' => $search_terms,
+	);
+
+	return apply_filters( 'bp_blogs_get_blogs', BP_Blogs_Blog::get( $args_n ), $params );
 }
 
 /**
diff --git bp-blogs/bp-blogs-template.php bp-blogs/bp-blogs-template.php
index cf1acdf..e5cf6c5 100644
--- bp-blogs/bp-blogs-template.php
+++ bp-blogs/bp-blogs-template.php
@@ -161,24 +161,63 @@ class BP_Blogs_Template {
 	 *
 	 * @see BP_Blogs_Blog::get() for a description of parameters.
 	 *
-	 * @param string $type See {@link BP_Blogs_Blog::get()}.
-	 * @param string $page See {@link BP_Blogs_Blog::get()}.
-	 * @param string $per_page See {@link BP_Blogs_Blog::get()}.
-	 * @param string $max See {@link BP_Blogs_Blog::get()}.
-	 * @param string $user_id See {@link BP_Blogs_Blog::get()}.
-	 * @param string $search_terms See {@link BP_Blogs_Blog::get()}.
-	 * @param string $page_arg The string used as a query parameter in
-	 *        pagination links. Default: 'bpage'.
+	 * @param array $args {
+	 *     An array of arguments. All items are optional.
+	 *     @param string $type See {@link BP_Blogs_Blog::get()}.
+	 *     @param string $page See {@link BP_Blogs_Blog::get()}.
+	 *     @param string $per_page See {@link BP_Blogs_Blog::get()}.
+	 *     @param string $max See {@link BP_Blogs_Blog::get()}.
+	 *     @param string $user_id See {@link BP_Blogs_Blog::get()}.
+	 *     @param string $search_terms See {@link BP_Blogs_Blog::get()}.
+	 *     @param string $page_arg The string used as a query parameter in
+	 *            pagination links. Default: 'bpage'.
+	 * }
 	 */
-	function __construct( $type, $page, $per_page, $max, $user_id, $search_terms, $page_arg = 'bpage' ) {
+	function __construct( $args = array() ) {
+		// Backward compatibility with old method of passing arguments
+		if ( !is_array( $args ) || func_num_args() > 1 ) {
+			_deprecated_argument( __METHOD__, '2.0', sprintf( __( 'Arguments passed to %1$s should be in an associative array. See the inline documentation at %2$s for more details.', 'buddypress' ), __METHOD__, __FILE__ ) );
+
+			$old_args_keys = array(
+				0 => 'type',
+				1 => 'page',
+				2 => 'per_page',
+				3 => 'max',
+				4 => 'user_id',
+				5 => 'search_terms',
+				6 => 'page_arg',
+			);
+
+			$func_args = func_get_args();
+			$args = bp_core_parse_args_array( $old_args_keys, $func_args );
+		}
+
+		$defaults = array(
+			'type'         => 'active',
+			'page'         => 1,
+			'per_page'     => 20,
+			'max'          => false,
+			'user_id'      => '0',
+			'search_terms' => false, // Pass search terms to filter on the blog title or description.
+			'page_arg'     => 'bpage', // See https://buddypress.trac.wordpress.org/ticket/3679
+		);
+		$r = wp_parse_args( $args, $defaults );
+		extract( $r );
 
-		$this->pag_page = isset( $_REQUEST[$page_arg] ) ? intval( $_REQUEST[$page_arg] ) : $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'] )
+		if ( isset( $_REQUEST['letter'] ) && '' != $_REQUEST['letter'] ) {
 			$this->blogs = BP_Blogs_Blog::get_by_letter( $_REQUEST['letter'], $this->pag_num, $this->pag_page );
-		else
-			$this->blogs = bp_blogs_get_blogs( array( 'type' => $type, 'per_page' => $this->pag_num, 'page' => $this->pag_page, 'user_id' => $user_id, 'search_terms' => $search_terms ) );
+		} else {
+			$this->blogs = bp_blogs_get_blogs( array(
+				'type'         => $type,
+				'per_page'     => $this->pag_num,
+				'page'         => $this->pag_page,
+				'user_id'      => $user_id,
+				'search_terms' => $search_terms,
+			) );
+		}
 
 		if ( !$max || $max >= (int) $this->blogs['total'] )
 			$this->total_blog_count = (int) $this->blogs['total'];
@@ -378,7 +417,16 @@ function bp_has_blogs( $args = '' ) {
 		}
 	}
 
-	$blogs_template = new BP_Blogs_Template( $type, $page, $per_page, $max, $user_id, $search_terms, $page_arg );
+	$blogs_template = new BP_Blogs_Template( array(
+		'type'         => $type,
+		'page'         => $page,
+		'per_page'     => $per_page,
+		'max'          => $max,
+		'user_id'      => $user_id,
+		'search_terms' => $search_terms,
+		'page_arg'     => $page_arg,
+	) );
+
 	return apply_filters( 'bp_has_blogs', $blogs_template->has_blogs(), $blogs_template );
 }
 
