Index: wp-login.php
===================================================================
--- wp-login.php	(revision 14037)
+++ wp-login.php	(working copy)
@@ -165,7 +165,7 @@
 	$user_login = $user_data->user_login;
 	$user_email = $user_data->user_email;
 
-	do_action('retreive_password', $user_login);  // Misspelled and deprecated
+	do_action('retreive_password', $user_login, array( '0.0', 'retrieve_password') );  // Misspelled and deprecated
 	do_action('retrieve_password', $user_login);
 
 	$allow = apply_filters('allow_password_reset', true, $user_data->ID);
Index: wp-includes/plugin.php
===================================================================
--- wp-includes/plugin.php	(revision 14037)
+++ wp-includes/plugin.php	(working copy)
@@ -346,10 +346,13 @@
  * @global array $wp_actions Increments the amount of times action was triggered.
  *
  * @param string $tag The name of the action to be executed.
- * @param mixed $arg,... Optional additional arguments which are passed on to the functions hooked to the action.
+ * @param mixed $arg,... Optional additional arguments which are passed on to the
+ * functions hooked to the action.
+ * @param array $deprecated Optional: If the tag is deprecated, this should be an
+ * array containing ($since_version, $replacement)
  * @return null Will return null if $tag does not exist in $wp_filter array
  */
-function do_action($tag, $arg = '') {
+function do_action($tag, $arg = '', $deprecated = false) {
 	global $wp_filter, $wp_actions, $merged_filters, $wp_current_filter;
 
 	if ( ! isset($wp_actions) )
@@ -390,9 +393,15 @@
 	reset( $wp_filter[ $tag ] );
 
 	do {
-		foreach ( (array) current($wp_filter[$tag]) as $the_ )
+		foreach ( (array) current($wp_filter[$tag]) as $the_ ) {
+			// If $tag is deprecated, report its use
+			if( $deprecated && is_array( $deprecated ) ) {
+				_deprecated_action( $tag, $deprecated[0], $deprecated[1] );
+			}
+
 			if ( !is_null($the_['function']) )
 				call_user_func_array($the_['function'], array_slice($args, 0, (int) $the_['accepted_args']));
+		}
 
 	} while ( next($wp_filter[$tag]) !== false );
 
@@ -433,9 +442,11 @@
  *
  * @param string $tag The name of the action to be executed.
  * @param array $args The arguments supplied to the functions hooked to <tt>$tag</tt>
+ * @param array $deprecated Optional: If the tag is deprecated, this should be an
+ * array containing ($since_version, $replacement)
  * @return null Will return null if $tag does not exist in $wp_filter array
  */
-function do_action_ref_array($tag, $args) {
+function do_action_ref_array($tag, $args, $deprecated = false) {
 	global $wp_filter, $wp_actions, $merged_filters, $wp_current_filter;
 
 	if ( ! isset($wp_actions) )
@@ -469,6 +480,10 @@
 
 	do {
 		foreach( (array) current($wp_filter[$tag]) as $the_ )
+			// If $tag is deprecated, report its use
+			if( $deprecated && is_array( $deprecated ) ) {
+				_deprecated_action( $tag, $deprecated[0], $deprecated[1] );
+			}
 			if ( !is_null($the_['function']) )
 				call_user_func_array($the_['function'], array_slice($args, 0, (int) $the_['accepted_args']));
 
Index: wp-includes/functions.php
===================================================================
--- wp-includes/functions.php	(revision 14037)
+++ wp-includes/functions.php	(working copy)
@@ -3210,6 +3210,24 @@
 	}
 }
 
+function _deprecated_action( $tag, $version, $replacement ) {
+	_deprecated_filter( $tag, $version, $replacement, 'action ');
+}
+
+function _deprecated_filter( $tag, $version, $replacement, $type='filter' ) {
+	error_log('deprecated filter called!');
+	do_action( 'deprecated_filter_run', $tag, $replacement, $version, $type );
+
+	// Allow plugin to filter the output error trigger
+	if ( WP_DEBUG && apply_filters( 'deprecated_filter_trigger_error', true ) ) {
+		if ( ! is_null( $replacement ) )
+			trigger_error( sprintf( __( 'The %1$s "%2$s" is <strong>deprecated</strong> since version %3$s! Use %4$s instead.' ), $type, $tag, $version, $replacement ) );
+		else
+			trigger_error( sprintf( __( 'The %1$s "%2$s" is <strong>deprecated</strong> since version %3$s with no alternative available.' ), $type, $tag, $version ) );
+	}
+}
+
+
 /**
  * Is the server running earlier than 1.5.0 version of lighttpd
  *
