Index: wp-includes/class.wp-dependencies.php
===================================================================
--- wp-includes/class.wp-dependencies.php	(revision 10216)
+++ wp-includes/class.wp-dependencies.php	(working copy)
@@ -22,6 +22,7 @@
 	var $to_do = array();
 	var $done = array();
 	var $args = array();
+	var $in_footer = array();
 
 	function WP_Dependencies() {
 		$args = func_get_args();
@@ -43,19 +44,43 @@
 		$handles = false === $handles ? $this->queue : (array) $handles;
 		$this->all_deps( $handles );
 
-		foreach( $this->to_do as $handle ) {
+		foreach( $this->to_do as $key => $handle ) {
 			if ( !in_array($handle, $this->done) && isset($this->registered[$handle]) ) {
-				if ( $this->registered[$handle]->src ) { // Else it defines a group.
+
+				if ( ! $this->registered[$handle]->src ) { // Defines a group.
+					$this->done[] = $handle;
+					continue;
+				}
+				
+				if ( $this->registered[$handle]->in_footer ) {
+					$this->in_footer[] = $handle;
+				} else {
 					$this->do_item( $handle );
+					$this->done[] = $handle;
 				}
-				$this->done[] = $handle;
+
+				unset($this->to_do[$key]);
 			}
 		}
 
-		$this->to_do = array();
 		return $this->done;
 	}
+	
+	function do_footer_items() {
 
+		if ( !empty($this->in_footer) ) {
+			foreach( $this->in_footer as $key => $handle ) {
+				if ( !in_array($handle, $this->done) && isset($this->registered[$handle]) ) {
+					$this->do_item( $handle );
+					$this->done[] = $handle;
+					unset($this->in_footer[$key]);
+				}
+			}
+		}
+
+		return $this->done;
+	}
+
 	function do_item( $handle ) {
 		return isset($this->registered[$handle]);
 	}
@@ -116,10 +141,10 @@
 	 * @param string ver (optional) Script version (used for cache busting)
 	 * @return array Hierarchical array of dependencies
 	 */
-	function add( $handle, $src, $deps = array(), $ver = false, $args = null ) {
+	function add( $handle, $src, $deps = array(), $ver = false, $args = null, $in_footer = false ) {
 		if ( isset($this->registered[$handle]) )
 			return false;
-		$this->registered[$handle] = new _WP_Dependency( $handle, $src, $deps, $ver, $args );
+		$this->registered[$handle] = new _WP_Dependency( $handle, $src, $deps, $ver, $args, $in_footer );
 		return true;
 	}
 
@@ -189,11 +214,12 @@
 	var $deps = array();
 	var $ver = false;
 	var $args = null;
+	var $in_footer = false;
 
 	var $extra = array();
 
 	function _WP_Dependency() {
-		@list($this->handle, $this->src, $this->deps, $this->ver, $this->args) = func_get_args();
+		@list($this->handle, $this->src, $this->deps, $this->ver, $this->args, $this->in_footer) = func_get_args();
 		if ( !is_array($this->deps) )
 			$this->deps = array();
 		if ( !$this->ver )
Index: wp-includes/default-filters.php
===================================================================
--- wp-includes/default-filters.php	(revision 10216)
+++ wp-includes/default-filters.php	(working copy)
@@ -183,6 +183,7 @@
 add_action('sanitize_comment_cookies', 'sanitize_comment_cookies');
 add_action('admin_print_scripts', 'wp_print_scripts', 20);
 add_action('admin_print_styles', 'wp_print_styles', 20);
+add_action('admin_footer', 'wp_print_footer_scripts', 20);
 add_action('init', 'smilies_init', 5);
 add_action( 'plugins_loaded', 'wp_maybe_load_widgets', 0 );
 add_action( 'shutdown', 'wp_ob_end_flush_all', 1);
Index: wp-includes/functions.wp-scripts.php
===================================================================
--- wp-includes/functions.wp-scripts.php	(revision 10216)
+++ wp-includes/functions.wp-scripts.php	(working copy)
@@ -34,6 +34,15 @@
 	return $wp_scripts->do_items( $handles );
 }
 
+function wp_print_footer_scripts() {
+	global $wp_scripts;
+	
+	if ( !is_a($wp_scripts, 'WP_Scripts') )
+		return array(); // No need to run if not instantiated.
+
+	return $wp_scripts->do_footer_items();
+}
+
 /**
  * Register new JavaScript file.
  *

