Index: wordpress/wp-includes/capabilities.php
===================================================================
--- wordpress/wp-includes/capabilities.php	(revision 6510)
+++ wordpress/wp-includes/capabilities.php	(working copy)
@@ -1,48 +1,22 @@
 <?php
 
 class WP_Roles {
-	var $roles;
 
 	var $role_objects = array();
 	var $role_names = array();
-	var $role_key;
-	var $use_db = true;
 
 	function WP_Roles() {
 		$this->_init();
 	}
 
 	function _init () {
-		global $wpdb;
-		global $wp_user_roles;
-		$this->role_key = $wpdb->prefix . 'user_roles';
-		if ( ! empty($wp_user_roles) ) {
-			$this->roles = $wp_user_roles;
-			$this->use_db = false;
-		} else {
-			$this->roles = get_option($this->role_key);
-		}
-
-		if ( empty($this->roles) )
-			return;
-
-		$this->role_objects = array();
-		$this->role_names =  array();
-		foreach ($this->roles as $role => $data) {
-			$this->role_objects[$role] = new WP_Role($role, $this->roles[$role]['capabilities']);
-			$this->role_names[$role] = $this->roles[$role]['name'];
-		}
+		do_action_ref_array('init_roles', array(&$this));
 	}
 
 	function add_role($role, $display_name, $capabilities = '') {
 		if ( isset($this->roles[$role]) )
 			return;
 
-		$this->roles[$role] = array(
-			'name' => $display_name,
-			'capabilities' => $capabilities);
-		if ( $this->use_db )
-			update_option($this->role_key, $this->roles);
 		$this->role_objects[$role] = new WP_Role($role, $capabilities);
 		$this->role_names[$role] = $display_name;
 		return $this->role_objects[$role];
@@ -54,22 +28,16 @@
 
 		unset($this->role_objects[$role]);
 		unset($this->role_names[$role]);
-		unset($this->roles[$role]);
-
-		if ( $this->use_db )
-			update_option($this->role_key, $this->roles);
 	}
 
 	function add_cap($role, $cap, $grant = true) {
-		$this->roles[$role]['capabilities'][$cap] = $grant;
-		if ( $this->use_db )
-			update_option($this->role_key, $this->roles);
+		if (isset($this->role_objects[$role]))
+			$this->role_objects[$role]->add_cap($cap, $grant);
 	}
 
 	function remove_cap($role, $cap) {
-		unset($this->roles[$role]['capabilities'][$cap]);
-		if ( $this->use_db )
-			update_option($this->role_key, $this->roles);
+		if (isset($this->role_objects[$role]))
+			$this->role_objects[$role]->remove_cap($cap, $grant);
 	}
 
 	function &get_role($role) {
@@ -99,31 +67,17 @@
 	}
 
 	function add_cap($cap, $grant = true) {
-		global $wp_roles;
-
-		if ( ! isset($wp_roles) )
-			$wp_roles = new WP_Roles();
-
 		$this->capabilities[$cap] = $grant;
-		$wp_roles->add_cap($this->name, $cap, $grant);
 	}
 
 	function remove_cap($cap) {
-		global $wp_roles;
-
-		if ( ! isset($wp_roles) )
-			$wp_roles = new WP_Roles();
-
 		unset($this->capabilities[$cap]);
-		$wp_roles->remove_cap($this->name, $cap);
 	}
 
 	function has_cap($cap) {
 		$capabilities = apply_filters('role_has_cap', $this->capabilities, $cap, $this->name);
-		if ( !empty($capabilities[$cap]) )
-			return $capabilities[$cap];
-		else
-			return false;
+		$grant = !empty( $capabilities[$cap] );
+		return apply_filters("{$this->name}_has_cap", $grant);
 	}
 
 }
@@ -280,6 +234,126 @@
 
 }
 
+// Populate standard role definitions
+function populate_roles(&$roles) {
+
+	$roles->add_role('administrator', _c('Administrator|User role'), array(
+		'switch_themes' => true,
+		'edit_themes' => true,
+		'activate_plugins' => true,
+		'edit_plugins' => true,
+		'edit_users' => true,
+		'edit_files' => true,
+		'manage_options' => true,
+		'moderate_comments' => true,
+		'manage_categories' => true,
+		'manage_links' => true,
+		'upload_files' => true,
+		'import' => true,
+		'unfiltered_html' => true,
+		'edit_posts' => true,
+		'edit_others_posts' => true,
+		'edit_published_posts' => true,
+		'publish_posts' => true,
+		'edit_pages' => true,
+		'read' => true,
+		'level_10' => true,
+		'level_9' => true,
+		'level_8' => true,
+		'level_7' => true,
+		'level_6' => true,
+		'level_5' => true,
+		'level_4' => true,
+		'level_3' => true,
+		'level_2' => true,
+		'level_1' => true,
+		'level_0' => true,
+		'edit_others_pages' => true,
+		'edit_published_pages' => true,
+		'publish_pages' => true,
+		'delete_pages' => true,
+		'delete_others_pages' => true,
+		'delete_published_pages' => true,
+		'delete_posts' => true,
+		'delete_others_posts' => true,
+		'delete_published_posts' => true,
+		'delete_private_posts' => true,
+		'edit_private_posts' => true,
+		'read_private_posts' => true,
+		'delete_private_pages' => true,
+		'edit_private_pages' => true,
+		'read_private_pages' => true,
+		'delete_users' => true,
+		'create_users' => true,
+		'unfiltered_upload' => true,
+	));
+	
+	$roles->add_role('editor', _c('Editor|User role'), array(
+		'moderate_comments' => true,
+		'manage_categories' => true,
+		'manage_links' => true,
+		'upload_files' => true,
+		'unfiltered_html' => true,
+		'edit_posts' => true,
+		'edit_others_posts' => true,
+		'edit_published_posts' => true,
+		'publish_posts' => true,
+		'edit_pages' => true,
+		'read' => true,
+		'level_7' => true,
+		'level_6' => true,
+		'level_5' => true,
+		'level_4' => true,
+		'level_3' => true,
+		'level_2' => true,
+		'level_1' => true,
+		'level_0' => true,
+		'edit_others_pages' => true,
+		'edit_published_pages' => true,
+		'publish_pages' => true,
+		'delete_pages' => true,
+		'delete_others_pages' => true,
+		'delete_published_pages' => true,
+		'delete_posts' => true,
+		'delete_others_posts' => true,
+		'delete_published_posts' => true,
+		'delete_private_posts' => true,
+		'edit_private_posts' => true,
+		'read_private_posts' => true,
+		'delete_private_pages' => true,
+		'edit_private_pages' => true,
+		'read_private_pages' => true,
+	));
+	
+	$roles->add_role( 'author', _c('Author|User role'), array(
+		'upload_files' => true,
+		'edit_posts' => true,
+		'edit_published_posts' => true,
+		'publish_posts' => true,
+		'read' => true,
+		'level_2' => true,
+		'level_1' => true,
+		'level_0' => true,
+		'delete_posts' => true,
+		'delete_published_posts' => true,
+	) );
+	
+	$roles->add_role( 'contributor', _c('Contributor|User role'), array(
+		'edit_posts' => true,
+		'read' => true,
+		'level_1' => true,
+		'level_0' => true,
+		'delete_posts' => true,
+	) );
+	
+	$roles->add_role('subscriber', _c('Editor|User role'), array(
+		'read' => true,
+		'level_0' => true,
+	) );
+}
+
+add_action('init_roles', 'populate_roles');
+
 // Map meta capabilities to primitive capabilities.
 function map_meta_cap($cap, $user_id) {
 	$args = array_slice(func_get_args(), 2);
Index: wordpress/wp-admin/includes/schema.php
===================================================================
--- wordpress/wp-admin/includes/schema.php	(revision 6510)
+++ wordpress/wp-admin/includes/schema.php	(working copy)
@@ -247,147 +247,4 @@
 	endforeach;
 }
 
-function populate_roles() {
-	populate_roles_160();
-	populate_roles_210();
-	populate_roles_230();
-}
-
-function populate_roles_160() {
-	// Add roles
-	add_role('administrator', _c('Administrator|User role'));
-	add_role('editor', _c('Editor|User role'));
-	add_role('author', _c('Author|User role'));
-	add_role('contributor', _c('Contributor|User role'));
-	add_role('subscriber', _c('Subscriber|User role'));
-
-	// Add caps for Administrator role
-	$role = get_role('administrator');
-	$role->add_cap('switch_themes');
-	$role->add_cap('edit_themes');
-	$role->add_cap('activate_plugins');
-	$role->add_cap('edit_plugins');
-	$role->add_cap('edit_users');
-	$role->add_cap('edit_files');
-	$role->add_cap('manage_options');
-	$role->add_cap('moderate_comments');
-	$role->add_cap('manage_categories');
-	$role->add_cap('manage_links');
-	$role->add_cap('upload_files');
-	$role->add_cap('import');
-	$role->add_cap('unfiltered_html');
-	$role->add_cap('edit_posts');
-	$role->add_cap('edit_others_posts');
-	$role->add_cap('edit_published_posts');
-	$role->add_cap('publish_posts');
-	$role->add_cap('edit_pages');
-	$role->add_cap('read');
-	$role->add_cap('level_10');
-	$role->add_cap('level_9');
-	$role->add_cap('level_8');
-	$role->add_cap('level_7');
-	$role->add_cap('level_6');
-	$role->add_cap('level_5');
-	$role->add_cap('level_4');
-	$role->add_cap('level_3');
-	$role->add_cap('level_2');
-	$role->add_cap('level_1');
-	$role->add_cap('level_0');
-
-	// Add caps for Editor role
-	$role = get_role('editor');
-	$role->add_cap('moderate_comments');
-	$role->add_cap('manage_categories');
-	$role->add_cap('manage_links');
-	$role->add_cap('upload_files');
-	$role->add_cap('unfiltered_html');
-	$role->add_cap('edit_posts');
-	$role->add_cap('edit_others_posts');
-	$role->add_cap('edit_published_posts');
-	$role->add_cap('publish_posts');
-	$role->add_cap('edit_pages');
-	$role->add_cap('read');
-	$role->add_cap('level_7');
-	$role->add_cap('level_6');
-	$role->add_cap('level_5');
-	$role->add_cap('level_4');
-	$role->add_cap('level_3');
-	$role->add_cap('level_2');
-	$role->add_cap('level_1');
-	$role->add_cap('level_0');
-
-	// Add caps for Author role
-	$role = get_role('author');
-	$role->add_cap('upload_files');
-	$role->add_cap('edit_posts');
-	$role->add_cap('edit_published_posts');
-	$role->add_cap('publish_posts');
-	$role->add_cap('read');
-	$role->add_cap('level_2');
-	$role->add_cap('level_1');
-	$role->add_cap('level_0');
-
-	// Add caps for Contributor role
-	$role = get_role('contributor');
-	$role->add_cap('edit_posts');
-	$role->add_cap('read');
-	$role->add_cap('level_1');
-	$role->add_cap('level_0');
-
-	// Add caps for Subscriber role
-	$role = get_role('subscriber');
-	$role->add_cap('read');
-	$role->add_cap('level_0');
-}
-
-function populate_roles_210() {
-	$roles = array('administrator', 'editor');
-	foreach ($roles as $role) {
-		$role = get_role($role);
-		if ( empty($role) )
-			continue;
-
-		$role->add_cap('edit_others_pages');
-		$role->add_cap('edit_published_pages');
-		$role->add_cap('publish_pages');
-		$role->add_cap('delete_pages');
-		$role->add_cap('delete_others_pages');
-		$role->add_cap('delete_published_pages');
-		$role->add_cap('delete_posts');
-		$role->add_cap('delete_others_posts');
-		$role->add_cap('delete_published_posts');
-		$role->add_cap('delete_private_posts');
-		$role->add_cap('edit_private_posts');
-		$role->add_cap('read_private_posts');
-		$role->add_cap('delete_private_pages');
-		$role->add_cap('edit_private_pages');
-		$role->add_cap('read_private_pages');
-	}
-
-	$role = get_role('administrator');
-	if ( ! empty($role) ) {
-		$role->add_cap('delete_users');
-		$role->add_cap('create_users');
-	}
-
-	$role = get_role('author');
-	if ( ! empty($role) ) {
-		$role->add_cap('delete_posts');
-		$role->add_cap('delete_published_posts');
-	}
-
-	$role = get_role('contributor');
-	if ( ! empty($role) ) {
-		$role->add_cap('delete_posts');
-	}
-}
-
-function populate_roles_230() {
-	$role = get_role( 'administrator' );
-
-	if ( !empty( $role ) ) {
-		$role->add_cap( 'unfiltered_upload' );
-	}
-}
-
 ?>
Index: wordpress/wp-admin/includes/upgrade.php
===================================================================
--- wordpress/wp-admin/includes/upgrade.php	(revision 6510)
+++ wordpress/wp-admin/includes/upgrade.php	(working copy)
@@ -13,7 +13,6 @@
 	wp_cache_flush();
 	make_db_current_silent();
 	populate_options();
-	populate_roles();
 
 	update_option('blogname', $blog_title);
 	update_option('admin_email', $user_email);
@@ -409,8 +408,6 @@
 function upgrade_160() {
 	global $wpdb, $wp_current_db_version;
 
-	populate_roles_160();
-
 	$users = $wpdb->get_results("SELECT * FROM $wpdb->users");
 	foreach ( $users as $user ) :
 		if ( !empty( $user->user_firstname ) )
@@ -508,10 +505,6 @@
 		}
 	}
 
-	if ( $wp_current_db_version < 3845 ) {
-		populate_roles_210();
-	}
-
 	if ( $wp_current_db_version < 3531 ) {
 		// Give future posts a post_status of future.
 		$now = gmdate('Y-m-d H:i:59');
@@ -527,10 +520,6 @@
 function upgrade_230() {
 	global $wp_current_db_version, $wpdb;
 
-	if ( $wp_current_db_version < 5200 ) {
-		populate_roles_230();
-	}
-
 	// Convert categories to terms.
 	$tt_ids = array();
 	$have_tags = false;
