Index: wp-includes/default-filters.php
===================================================================
--- wp-includes/default-filters.php	(revision 3644)
+++ wp-includes/default-filters.php	(working copy)
@@ -92,4 +92,5 @@
 add_action('do_feed_rss', 'do_feed_rss', 10, 1);
 add_action('do_feed_rss2', 'do_feed_rss2', 10, 1);
 add_action('do_feed_atom', 'do_feed_atom', 10, 1);
+add_action('do_pings', 'do_all_pings', 10, 1);
 ?>
Index: wp-includes/functions-post.php
===================================================================
--- wp-includes/functions-post.php	(revision 3644)
+++ wp-includes/functions-post.php	(working copy)
@@ -199,7 +199,7 @@
 				(post_id,meta_key,meta_value) 
 				VALUES ('$post_ID','_encloseme','1')
 			");
-			spawn_pinger();
+			wp_schedule_single_event(time(), 'do_pings');
 		}
 	} else if ($post_type == 'page') {
 		wp_cache_delete('all_page_ids', 'pages');
@@ -1002,4 +1002,30 @@
 	return array('file' => $new_file, 'url' => $url, 'error' => false);
 }
 
+function do_all_pings() {
+	global $wpdb;
+
+	// Do pingbacks
+	while ($ping = $wpdb->get_row("SELECT * FROM {$wpdb->posts}, {$wpdb->postmeta} WHERE {$wpdb->posts}.ID = {$wpdb->postmeta}.post_id AND {$wpdb->postmeta}.meta_key = '_pingme' LIMIT 1")) {
+		$wpdb->query("DELETE FROM {$wpdb->postmeta} WHERE post_id = {$ping->ID} AND meta_key = '_pingme';");
+		pingback($ping->post_content, $ping->ID);
+	}
+	
+	// Do Enclosures
+	while ($enclosure = $wpdb->get_row("SELECT * FROM {$wpdb->posts}, {$wpdb->postmeta} WHERE {$wpdb->posts}.ID = {$wpdb->postmeta}.post_id AND {$wpdb->postmeta}.meta_key = '_encloseme' LIMIT 1")) {
+		$wpdb->query("DELETE FROM {$wpdb->postmeta} WHERE post_id = {$enclosure->ID} AND meta_key = '_encloseme';");
+		do_enclose($enclosure->post_content, $enclosure->ID);
+	}
+
+	// Do Trackbacks
+	$trackbacks = $wpdb->get_results("SELECT ID FROM $wpdb->posts WHERE CHAR_LENGTH(TRIM(to_ping)) > 7 AND post_status = 'publish'");
+	if ( is_array($trackbacks) ) {
+		foreach ( $trackbacks as $trackback ) {
+			do_trackbacks($trackback->ID);
+		}
+	}
+
+	//Do Update Services/Generic Pings
+	generic_ping();
+}
 ?>
Index: wp-includes/functions.php
===================================================================
--- wp-includes/functions.php	(revision 3644)
+++ wp-includes/functions.php	(working copy)
@@ -1118,27 +1118,6 @@
 	}
 }
 
-function spawn_pinger() {
-	global $wpdb;
-	$doping = false;
-	if ( $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE TRIM(to_ping) != '' LIMIT 1") )
-		$doping = true;
-
-	if ( $wpdb->get_var("SELECT post_id FROM $wpdb->postmeta WHERE meta_key = '_pingme' OR meta_key = '_encloseme' LIMIT 1") )
-		$doping = true;
-
-	if ( substr(php_sapi_name(), 0, 3) == 'cgi' )
-		return $doping;
-
-	if ( $doping ) {
-		$ping_url = get_settings('siteurl') .'/wp-admin/execute-pings.php';
-		$parts = parse_url($ping_url);
-		$argyle = @ fsockopen($parts['host'], $_SERVER['SERVER_PORT'], $errno, $errstr, 0.01);
-		if ( $argyle )
-			fputs($argyle, "GET {$parts['path']}?time=".time()." HTTP/1.0\r\nHost: {$_SERVER['HTTP_HOST']}\r\n\r\n");
-       }
-}
-
 function do_enclose( $content, $post_ID ) {
 	global $wp_version, $wpdb;
 	include_once (ABSPATH . WPINC . '/class-IXR.php');
Index: wp-admin/execute-pings.php
===================================================================
--- wp-admin/execute-pings.php	(revision 3644)
+++ wp-admin/execute-pings.php	(working copy)
@@ -1,27 +0,0 @@
-<?php
-
-require_once('../wp-config.php');
-
-// Do pingbacks
-while ($ping = $wpdb->get_row("SELECT * FROM {$wpdb->posts}, {$wpdb->postmeta} WHERE {$wpdb->posts}.ID = {$wpdb->postmeta}.post_id AND {$wpdb->postmeta}.meta_key = '_pingme' LIMIT 1")) {
-	$wpdb->query("DELETE FROM {$wpdb->postmeta} WHERE post_id = {$ping->ID} AND meta_key = '_pingme';");
-	pingback($ping->post_content, $ping->ID);
-}
-
-// Do Enclosures
-while ($enclosure = $wpdb->get_row("SELECT * FROM {$wpdb->posts}, {$wpdb->postmeta} WHERE {$wpdb->posts}.ID = {$wpdb->postmeta}.post_id AND {$wpdb->postmeta}.meta_key = '_encloseme' LIMIT 1")) {
-	$wpdb->query("DELETE FROM {$wpdb->postmeta} WHERE post_id = {$enclosure->ID} AND meta_key = '_encloseme';");
-	do_enclose($enclosure->post_content, $enclosure->ID);
-}
-
-// Do Trackbacks
-$trackbacks = $wpdb->get_results("SELECT ID FROM $wpdb->posts WHERE CHAR_LENGTH(TRIM(to_ping)) > 7 AND post_status = 'publish'");
-if ( is_array($trackbacks) ) {
-	foreach ( $trackbacks as $trackback ) {
-		do_trackbacks($trackback->ID);
-	}
-}
-
-generic_ping();
-
-?>
Index: wp-admin/admin-footer.php
===================================================================
--- wp-admin/admin-footer.php	(revision 3644)
+++ wp-admin/admin-footer.php	(working copy)
@@ -9,11 +9,5 @@
 <?php do_action('admin_footer', ''); ?>
 <script type="text/javascript">if(typeof wpOnload=='function')wpOnload();</script>
 
-<?php
-if ( (substr(php_sapi_name(), 0, 3) == 'cgi') && spawn_pinger() ) {
-	echo '<iframe id="pingcheck" src="' . get_settings('siteurl') .'/wp-admin/execute-pings.php?time=' . time() . '" style="border:none;width:1px;height:1px;"></iframe>';
-}
-?>
-
 </body>
 </html>

