diff --git a/bp-core/bp-core-cache.php b/bp-core/bp-core-cache.php
index 0c30cb1..640b109 100644
--- a/bp-core/bp-core-cache.php
+++ b/bp-core/bp-core-cache.php
@@ -48,4 +48,83 @@ function bp_core_clear_user_object_cache( $user_id ) {
 add_action( 'wp_login',              'bp_core_clear_cache' );
 add_action( 'bp_core_render_notice', 'bp_core_clear_cache' );
 
+/**
+ * Update the metadata cache for the specified objects.
+ *
+ * @since 1.6
+ * @uses $wpdb WordPress database object for queries.
+ * @uses $bp BuddyPress global object.
+ *
+ * @param string $meta_type Type of object metadata is for (e.g., comment, post, or user)
+ * @param int|array $object_ids array or comma delimited list of object IDs to update cache for
+ * @return mixed Metadata cache for the specified objects, or false on failure.
+ */
+function bp_update_meta_cache( $args = array() ) {
+	global $bp, $wpdb;
+	
+	$defaults = array(
+		'object_ids' 	   => array(),
+		'object_type' 	   => '',
+		'meta_table' 	   => '',
+		'object_column'    => '',
+		'cache_key_prefix' => ''
+	);
+	$r = wp_parse_args( $args, $defaults );
+	extract( $r );
+		
+	if ( empty( $object_ids ) || empty( $object_type ) || empty( $meta_table ) ) {
+		return false;
+	}
+	
+	if ( empty( $cache_key_prefix ) ) {
+		$cache_key_prefix = $meta_table;
+	}
+	
+	if ( empty( $object_column ) ) {
+		$object_column = $object_type . '_id';
+	}
+
+	if ( !is_array( $object_ids ) ) {
+		$object_ids = preg_replace( '|[^0-9,]|', '', $object_ids );
+		$object_ids = explode( ',', $object_ids );
+	}
+
+	$object_ids = array_map( 'intval', $object_ids );
+
+	$cache = array();
+	
+	// Get meta info
+	$id_list   = join( ',', $object_ids );
+	$meta_list = $wpdb->get_results( $wpdb->prepare( "SELECT $object_column, meta_key, meta_value FROM $meta_table WHERE group_id IN ($id_list)" ), ARRAY_A );
+
+	if ( !empty( $meta_list ) ) {
+		foreach ( $meta_list as $metarow ) {
+			$mpid = intval( $metarow[$object_column] );
+			$mkey = $metarow['meta_key'];
+			$mval = $metarow['meta_value'];
+
+			// Force subkeys to be array type:
+			if ( !isset( $cache[$mpid] ) || !is_array( $cache[$mpid] ) )
+				$cache[$mpid] = array();
+			if ( !isset( $cache[$mpid][$mkey] ) || !is_array( $cache[$mpid][$mkey] ) )
+				$cache[$mpid][$mkey] = array();
+
+			// Add a value to the current pid/key:
+			$cache[$mpid][$mkey][] = $mval;
+		}
+	}
+	
+	foreach ( $object_ids as $id ) {
+		if ( ! isset($cache[$id]) )
+			$cache[$id] = array();
+	
+		foreach( $cache[$id] as $meta_key => $meta_value ) {
+			//var_dump( $cache_key_prefix . '_' . $id . '_' . $meta_key );
+			wp_cache_set( $cache_key_prefix . '_' . $id . '_' . $meta_key, $meta_value, 'bp' );
+		}
+	}
+
+	return $cache;
+}
+
 ?>
\ No newline at end of file
diff --git a/bp-groups/bp-groups-cache.php b/bp-groups/bp-groups-cache.php
index 908df53..1d8fcef 100644
--- a/bp-groups/bp-groups-cache.php
+++ b/bp-groups/bp-groups-cache.php
@@ -12,6 +12,20 @@
 // Exit if accessed directly
 if ( !defined( 'ABSPATH' ) ) exit;
 
+function bp_groups_update_meta_cache( $group_ids = false ) {
+	global $bp;
+	
+	$cache_args = array(
+		'object_ids' 	   => $group_ids,
+		'object_type' 	   => $bp->groups->id,
+		'object_column'    => 'group_id',
+		'meta_table' 	   => $bp->groups->table_name_groupmeta,
+		'cache_key_prefix' => 'bp_groups_groupmeta'
+	);
+	
+	bp_update_meta_cache( $cache_args );
+}
+
 function groups_clear_group_object_cache( $group_id ) {
 	wp_cache_delete( 'bp_total_group_count', 'bp' );
 }
diff --git a/bp-groups/bp-groups-classes.php b/bp-groups/bp-groups-classes.php
index 41128a9..2d9a91a 100644
--- a/bp-groups/bp-groups-classes.php
+++ b/bp-groups/bp-groups-classes.php
@@ -30,7 +30,9 @@ Class BP_Groups_Group {
 	function populate() {
 		global $wpdb, $bp;
 
-		if ( $group = $wpdb->get_row( $wpdb->prepare( "SELECT g.*, gm.meta_value as last_activity, gm2.meta_value as total_member_count FROM {$bp->groups->table_name} g, {$bp->groups->table_name_groupmeta} gm, {$bp->groups->table_name_groupmeta} gm2 WHERE g.id = gm.group_id AND g.id = gm2.group_id AND gm.meta_key = 'last_activity' AND gm2.meta_key = 'total_member_count' AND g.id = %d", $this->id ) ) ) {
+		if ( $group = $wpdb->get_row( $wpdb->prepare( "SELECT g.* FROM {$bp->groups->table_name} g WHERE g.id = %d", $this->id ) ) ) {			
+			bp_groups_update_meta_cache( $this->id );
+						
 			$this->id                 = $group->id;
 			$this->creator_id         = $group->creator_id;
 			$this->name               = stripslashes($group->name);
@@ -39,8 +41,8 @@ Class BP_Groups_Group {
 			$this->status             = $group->status;
 			$this->enable_forum       = $group->enable_forum;
 			$this->date_created       = $group->date_created;
-			$this->last_activity      = $group->last_activity;
-			$this->total_member_count = $group->total_member_count;
+			$this->last_activity      = groups_get_groupmeta( $this->id, 'last_activity' );
+			$this->total_member_count = groups_get_groupmeta( $this->id, 'total_member_count' );
 			$this->is_member          = BP_Groups_Member::check_is_member( bp_loggedin_user_id(), $this->id );
 
 			// Get group admins and mods
diff --git a/bp-groups/bp-groups-functions.php b/bp-groups/bp-groups-functions.php
index 522adbe..fbb1911 100644
--- a/bp-groups/bp-groups-functions.php
+++ b/bp-groups/bp-groups-functions.php
@@ -46,7 +46,7 @@ function groups_get_group( $args = '' ) {
 	
 	if ( !$group = wp_cache_get( $cache_key, 'bp' ) ) {
 		$group = new BP_Groups_Group( $group_id, true, $load_users );
-		wp_cache_set( $cache_key, $group, 'bp' );
+		wp_cache_set( $cache_key, $group, 'bp' );	
 	}
 
 	return apply_filters( 'groups_get_group', $group );
@@ -918,7 +918,7 @@ function groups_get_groupmeta( $group_id, $meta_key = '') {
 	if ( !empty($meta_key) ) {
 		$meta_key = preg_replace( '|[^a-z0-9_]|i', '', $meta_key );
 
-		$metas = wp_cache_get( 'bp_groups_groupmeta_' . $group_id . '_' . $meta_key, 'bp' );		
+		$metas = wp_cache_get( 'bp_groups_groupmeta_' . $group_id . '_' . $meta_key, 'bp' );
 		if ( false === $metas ) {
 			$metas = $wpdb->get_col( $wpdb->prepare("SELECT meta_value FROM " . $bp->groups->table_name_groupmeta . " WHERE group_id = %d AND meta_key = %s", $group_id, $meta_key) );
 			wp_cache_set( 'bp_groups_groupmeta_' . $group_id . '_' . $meta_key, $metas, 'bp' );
diff --git a/bp-groups/bp-groups-loader.php b/bp-groups/bp-groups-loader.php
index da31457..cd61481 100644
--- a/bp-groups/bp-groups-loader.php
+++ b/bp-groups/bp-groups-loader.php
@@ -14,6 +14,7 @@
 if ( !defined( 'ABSPATH' ) ) exit;
 
 class BP_Groups_Component extends BP_Component {
+	var $cached_meta = array();
 
 	/**
 	 * Start the groups component creation process
