Index: wp-admin/admin-ajax.php
===================================================================
--- wp-admin/admin-ajax.php	(revision 18757)
+++ wp-admin/admin-ajax.php	(working copy)
@@ -1549,6 +1549,21 @@
 	echo json_encode( array( 'message' => $message, 'last_edited' => $last_edited ) );
 	die();
 	break;
+case 'dismiss-wp-pointer' :
+	$pointer = sanitize_key( $_POST['pointer'] );
+//	check_ajax_referer( 'dismiss-pointer_' . $pointer );
+
+	$dismissed = (array) get_user_meta( get_current_user_id(), 'dismissed_wp_pointers', true );
+	if ( in_array( $pointer, $dismissed ) )
+		die( '0' );
+
+	$dismissed[] = $pointer;
+	$dismissed = array_values( $dismissed );
+
+	// TODO Pointer registration including whether pointer should be global.
+	update_user_meta( get_current_user_id(), 'dismissed_wp_pointers', $dismissed );
+	die( '1' );
+	break;
 default :
 	do_action( 'wp_ajax_' . $_POST['action'] );
 	die('0');
Index: wp-admin/includes/template.php
===================================================================
--- wp-admin/includes/template.php	(revision 18757)
+++ wp-admin/includes/template.php	(working copy)
@@ -2232,8 +2232,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 ) ) {
+	// Easy there: There will be an API here soon enough.
+	$dismissed = (array) get_user_meta( get_current_user_id(), 'dismissed_wp_pointers', true );
+
+	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' );
 	}
@@ -2257,13 +2259,18 @@
 jQuery(document).ready( function($) {
 	$('#wpadminbar').pointer({
 		content: '<?php echo $pointer_content; ?>',
+		// Easy there: There will be an API here soon enough.
 		position: {
 			my: 'left top',
 			at: 'center bottom',
 			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');
 });
