Index: wp-includes/functions.wp-scripts.php
===================================================================
--- wp-includes/functions.wp-scripts.php	(revision 18560)
+++ wp-includes/functions.wp-scripts.php	(working copy)
@@ -24,7 +24,11 @@
 		$handles = false;
 
 	global $wp_scripts;
-	if ( !is_a($wp_scripts, 'WP_Scripts') ) {
+	if ( ! is_a( $wp_scripts, 'WP_Scripts' ) ) {
+		if ( ! did_action( 'init' ) )
+			_doing_it_wrong( __FUNCTION__, sprintf( __( 'Scripts and styles should not be registered or enqueued until the %1$s, %2$s, or %3$s hooks.' ),
+				'<code>wp_enqueue_scripts</code>', '<code>admin_enqueue_scripts</code>', '<code>init</code>' ), '3.3' );
+
 		if ( !$handles )
 			return array(); // No need to instantiate if nothing is there.
 		else
@@ -47,9 +51,13 @@
  */
 function wp_register_script( $handle, $src, $deps = array(), $ver = false, $in_footer = false ) {
 	global $wp_scripts;
+	if ( ! is_a( $wp_scripts, 'WP_Scripts' ) ) {
+		if ( ! did_action( 'init' ) )
+			_doing_it_wrong( __FUNCTION__, sprintf( __( 'Scripts and styles should not be registered or enqueued until the %1$s, %2$s, or %3$s hooks.' ),
+				'<code>wp_enqueue_scripts</code>', '<code>admin_enqueue_scripts</code>', '<code>init</code>' ), '3.3' );
+		$wp_scripts = new WP_Scripts();
+	}
 
-	wp_scripts_init();
-
 	$wp_scripts->add( $handle, $src, $deps, $ver );
 	if ( $in_footer )
 		$wp_scripts->add_data( $handle, 'group', 1 );
@@ -75,9 +83,13 @@
  */
 function wp_localize_script( $handle, $name, $data ) {
 	global $wp_scripts;
+	if ( ! is_a( $wp_scripts, 'WP_Scripts' ) ) {
+		if ( ! did_action( 'init' ) )
+			_doing_it_wrong( __FUNCTION__, sprintf( __( 'Scripts and styles should not be registered or enqueued until the %1$s, %2$s, or %3$s hooks.' ),
+				'<code>wp_enqueue_scripts</code>', '<code>admin_enqueue_scripts</code>', '<code>init</code>' ), '3.3' );
+		return false;
+	}
 
-	wp_scripts_init();
-
 	return $wp_scripts->add_script_data( $handle, $name, $data );
 }
 
@@ -89,9 +101,13 @@
  */
 function wp_deregister_script( $handle ) {
 	global $wp_scripts;
+	if ( ! is_a( $wp_scripts, 'WP_Scripts' ) ) {
+		if ( ! did_action( 'init' ) )
+			_doing_it_wrong( __FUNCTION__, sprintf( __( 'Scripts and styles should not be registered or enqueued until the %1$s, %2$s, or %3$s hooks.' ),
+				'<code>wp_enqueue_scripts</code>', '<code>admin_enqueue_scripts</code>', '<code>init</code>' ), '3.3' );
+		$wp_scripts = new WP_Scripts();
+	}
 
-	wp_scripts_init();
-
 	$wp_scripts->remove( $handle );
 }
 
@@ -105,9 +121,13 @@
  */
 function wp_enqueue_script( $handle, $src = false, $deps = array(), $ver = false, $in_footer = false ) {
 	global $wp_scripts;
+	if ( ! is_a( $wp_scripts, 'WP_Scripts' ) ) {
+		if ( ! did_action( 'init' ) )
+			_doing_it_wrong( __FUNCTION__, sprintf( __( 'Scripts and styles should not be registered or enqueued until the %1$s, %2$s, or %3$s hooks.' ),
+				'<code>wp_enqueue_scripts</code>', '<code>admin_enqueue_scripts</code>', '<code>init</code>' ), '3.3' );
+		$wp_scripts = new WP_Scripts();
+	}
 
-	wp_scripts_init();
-
 	if ( $src ) {
 		$_handle = explode('?', $handle);
 		$wp_scripts->add( $_handle[0], $src, $deps, $ver );
@@ -125,9 +145,13 @@
  */
 function wp_dequeue_script( $handle ) {
 	global $wp_scripts;
+	if ( ! is_a( $wp_scripts, 'WP_Scripts' ) ) {
+		if ( ! did_action( 'init' ) )
+			_doing_it_wrong( __FUNCTION__, sprintf( __( 'Scripts and styles should not be registered or enqueued until the %1$s, %2$s, or %3$s hooks.' ),
+				'<code>wp_enqueue_scripts</code>', '<code>admin_enqueue_scripts</code>', '<code>init</code>' ), '3.3' );
+		$wp_scripts = new WP_Scripts();
+	}
 
-	wp_scripts_init();
-
 	$wp_scripts->dequeue( $handle );
 }
 
@@ -145,9 +169,13 @@
  */
 function wp_script_is( $handle, $list = 'queue' ) {
 	global $wp_scripts;
+	if ( ! is_a( $wp_scripts, 'WP_Scripts' ) ) {
+		if ( ! did_action( 'init' ) )
+			_doing_it_wrong( __FUNCTION__, sprintf( __( 'Scripts and styles should not be registered or enqueued until the %1$s, %2$s, or %3$s hooks.' ),
+				'<code>wp_enqueue_scripts</code>', '<code>admin_enqueue_scripts</code>', '<code>init</code>' ), '3.3' );
+		$wp_scripts = new WP_Scripts();
+	}
 
-	wp_scripts_init();
-
 	$query = $wp_scripts->query( $handle, $list );
 
 	if ( is_object( $query ) )
@@ -155,22 +183,3 @@
 
 	return $query;
 }
-
-/**
- * Initializes $wp_scripts global (if it hasn't already been initialized by a faulty plugin or theme).
- *
- * @since 3.3
- */
-function wp_scripts_init() {
-	global $wp_scripts;
-	static $done = false;
-
-	if ( !$done && !is_a($wp_scripts, 'WP_Scripts') ) {
-		if ( !did_action('after_setup_theme') ) // last action before init
-			_doing_it_wrong( __FUNCTION__, __( '$wp_scripts should not be accessed before the "init" hook.' ), '3.3' );
-
-		$wp_scripts = new WP_Scripts();
-		$done = true;
-	}
-}
-
Index: wp-includes/functions.wp-styles.php
===================================================================
--- wp-includes/functions.wp-styles.php	(revision 18560)
+++ wp-includes/functions.wp-styles.php	(working copy)
@@ -23,7 +23,11 @@
 		$handles = false;
 
 	global $wp_styles;
-	if ( !is_a($wp_styles, 'WP_Styles') ) {
+	if ( ! is_a( $wp_styles, 'WP_Styles' ) ) {
+		if ( ! did_action( 'init' ) )
+			_doing_it_wrong( __FUNCTION__, sprintf( __( 'Scripts and styles should not be registered or enqueued until the %1$s, %2$s, or %3$s hooks.' ),
+				'<code>wp_enqueue_scripts</code>', '<code>admin_enqueue_scripts</code>', '<code>init</code>' ), '3.3' );
+
 		if ( !$handles )
 			return array(); // No need to instantiate if nothing is there.
 		else
@@ -46,8 +50,12 @@
  */
 function wp_add_inline_style( $handle, $data ) {
 	global $wp_styles;
-	if ( !is_a($wp_styles, 'WP_Styles') )
-		return false;
+	if ( ! is_a( $wp_styles, 'WP_Styles' ) ) {
+		if ( ! did_action( 'init' ) )
+			_doing_it_wrong( __FUNCTION__, sprintf( __( 'Scripts and styles should not be registered or enqueued until the %1$s, %2$s, or %3$s hooks.' ),
+				'<code>wp_enqueue_scripts</code>', '<code>admin_enqueue_scripts</code>', '<code>init</code>' ), '3.3' );
+		$wp_styles = new WP_Styles();
+	}
 
 	return $wp_styles->add_inline_style( $handle, $data );
 }
@@ -70,9 +78,13 @@
  */
 function wp_register_style( $handle, $src, $deps = array(), $ver = false, $media = 'all' ) {
 	global $wp_styles;
+	if ( ! is_a( $wp_styles, 'WP_Styles' ) ) {
+		if ( ! did_action( 'init' ) )
+			_doing_it_wrong( __FUNCTION__, sprintf( __( 'Scripts and styles should not be registered or enqueued until the %1$s, %2$s, or %3$s hooks.' ),
+				'<code>wp_enqueue_scripts</code>', '<code>admin_enqueue_scripts</code>', '<code>init</code>' ), '3.3' );
+		$wp_styles = new WP_Styles();
+	}
 
-	wp_styles_init();
-
 	$wp_styles->add( $handle, $src, $deps, $ver, $media );
 }
 
@@ -87,9 +99,13 @@
  */
 function wp_deregister_style( $handle ) {
 	global $wp_styles;
+	if ( ! is_a( $wp_styles, 'WP_Styles' ) ) {
+		if ( ! did_action( 'init' ) )
+			_doing_it_wrong( __FUNCTION__, sprintf( __( 'Scripts and styles should not be registered or enqueued until the %1$s, %2$s, or %3$s hooks.' ),
+				'<code>wp_enqueue_scripts</code>', '<code>admin_enqueue_scripts</code>', '<code>init</code>' ), '3.3' );
+		$wp_styles = new WP_Styles();
+	}
 
-	wp_styles_init();
-
 	$wp_styles->remove( $handle );
 }
 
@@ -114,9 +130,13 @@
  */
 function wp_enqueue_style( $handle, $src = false, $deps = array(), $ver = false, $media = 'all' ) {
 	global $wp_styles;
+	if ( ! is_a( $wp_styles, 'WP_Styles' ) ) {
+		if ( ! did_action( 'init' ) )
+			_doing_it_wrong( __FUNCTION__, sprintf( __( 'Scripts and styles should not be registered or enqueued until the %1$s, %2$s, or %3$s hooks.' ),
+				'<code>wp_enqueue_scripts</code>', '<code>admin_enqueue_scripts</code>', '<code>init</code>' ), '3.3' );
+		$wp_styles = new WP_Styles();
+	}
 
-	wp_styles_init();
-
 	if ( $src ) {
 		$_handle = explode('?', $handle);
 		$wp_styles->add( $_handle[0], $src, $deps, $ver, $media );
@@ -132,9 +152,13 @@
  */
 function wp_dequeue_style( $handle ) {
 	global $wp_styles;
+	if ( ! is_a( $wp_styles, 'WP_Styles' ) ) {
+		if ( ! did_action( 'init' ) )
+			_doing_it_wrong( __FUNCTION__, sprintf( __( 'Scripts and styles should not be registered or enqueued until the %1$s, %2$s, or %3$s hooks.' ),
+				'<code>wp_enqueue_scripts</code>', '<code>admin_enqueue_scripts</code>', '<code>init</code>' ), '3.3' );
+		$wp_styles = new WP_Styles();
+	}
 
-	wp_styles_init();
-
 	$wp_styles->dequeue( $handle );
 }
 
@@ -152,9 +176,13 @@
  */
 function wp_style_is( $handle, $list = 'queue' ) {
 	global $wp_styles;
+	if ( ! is_a( $wp_styles, 'WP_Styles' ) ) {
+		if ( ! did_action( 'init' ) )
+			_doing_it_wrong( __FUNCTION__, sprintf( __( 'Scripts and styles should not be registered or enqueued until the %1$s, %2$s, or %3$s hooks.' ),
+				'<code>wp_enqueue_scripts</code>', '<code>admin_enqueue_scripts</code>', '<code>init</code>' ), '3.3' );
+		$wp_styles = new WP_Styles();
+	}
 
-	wp_styles_init();
-
 	$query = $wp_styles->query( $handle, $list );
 
 	if ( is_object( $query ) )
@@ -162,22 +190,3 @@
 
 	return $query;
 }
-
-/**
- * Initializes $wp_styles global (if it hasn't already been initialized by a faulty plugin or theme).
- *
- * @since 3.3
- */
-function wp_styles_init() {
-	global $wp_styles;
-	static $done = false;
-
-	if ( !$done && !is_a($wp_styles, 'WP_Styles') ) {
-		if ( !did_action('after_setup_theme') )
-			_doing_it_wrong( __FUNCTION__, __( '$wp_styles should not be accessed before the "init" hook.' ), '3.3' );
-
-		$wp_styles = new WP_Styles();
-		$done = true;
-	}
-}
-
