Index: wp-admin/admin-ajax.php
===================================================================
--- wp-admin/admin-ajax.php	(revision 18926)
+++ wp-admin/admin-ajax.php	(working copy)
@@ -172,6 +172,24 @@
 	$return = ( $wp_embed->cache_oembed( $_GET['post'] ) ) ? '1' : '0';
 	die( $return );
 	break;
+case 'dismiss-wp-pointer' :
+	$pointer = $_POST['pointer'];
+	if ( $pointer != sanitize_key( $pointer ) )
+		die( '0' );
+
+//	check_ajax_referer( 'dismiss-pointer_' . $pointer );
+
+	$dismissed = explode( ',', (string) get_user_meta( get_current_user_id(), 'dismissed_wp_pointers', true ) );
+
+	if ( in_array( $pointer, $dismissed ) )
+		die( '0' );
+
+	$dismissed[] = $pointer;
+	$dismissed = implode( ',', $dismissed );
+
+	update_user_meta( get_current_user_id(), 'dismissed_wp_pointers', $dismissed );
+	die( '1' );
+	break;
 default :
 	do_action( 'wp_ajax_' . $_GET['action'] );
 	die('0');
Index: wp-admin/includes/template.php
===================================================================
--- wp-admin/includes/template.php	(revision 18926)
+++ wp-admin/includes/template.php	(working copy)
@@ -1640,8 +1640,10 @@
 function wp_pointer_enqueue( $hook_suffix ) {
 	$enqueue = false;
 
-	$admin_bar = get_user_setting( 'p0', 0 );
-	if ( ! $admin_bar && apply_filters( 'show_wp_pointer_admin_bar', true ) ) {
+	$dismissed = (string) get_user_meta( get_current_user_id(), 'dismissed_wp_pointers', true );
+	$dismissed = array_map( 'sanitize_key', explode( ',', $dismissed ) );
+
+	if ( ! in_array( 'wp330-admin-bar', $dismissed ) && apply_filters( 'show_wp_pointer_admin_bar', true ) ) {
 		$enqueue = true;
 		add_action( 'admin_print_footer_scripts', '_wp_pointer_print_admin_bar' );
 	}
@@ -1671,7 +1673,11 @@
 			offset: '-25 0'
 		},
 		close: function() {
-			setUserSetting( 'p0', '1' );
+			$.post( ajaxurl, {
+					pointer: 'wp330-admin-bar',
+				//	_ajax_nonce: $('#_ajax_nonce').val(),
+					action: 'dismiss-wp-pointer'
+			});
 		}
 	}).pointer('open');
 });
