diff --git wp-includes/functions.wp-scripts.php wp-includes/functions.wp-scripts.php
index a8dac35..cd2943e 100644
--- wp-includes/functions.wp-scripts.php
+++ wp-includes/functions.wp-scripts.php
@@ -23,19 +23,10 @@ function wp_print_scripts( $handles = false ) {
 	if ( '' === $handles ) // for wp_head
 		$handles = 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' );
-
-		if ( !$handles )
-			return array(); // No need to instantiate if nothing is there.
-		else
-			$wp_scripts = new WP_Scripts();
-	}
+	if ( !$handles )
+		return array(); // No need to instantiate if nothing is there.
 
-	return $wp_scripts->do_items( $handles );
+	return wp_scripts()->do_items( $handles );
 }
 
 /**
@@ -50,13 +41,7 @@ function wp_print_scripts( $handles = false ) {
  * @return null
  */
 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 = wp_scripts();
 
 	$wp_scripts->add( $handle, $src, $deps, $ver );
 	if ( $in_footer )
@@ -84,16 +69,7 @@ function wp_register_script( $handle, $src, $deps = array(), $ver = false, $in_f
  * @return bool Whether the localization was added successfully.
  */
 function wp_localize_script( $handle, $object_name, $l10n ) {
-	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;
-	}
-
-	return $wp_scripts->localize( $handle, $object_name, $l10n );
+	return wp_scripts()->localize( $handle, $object_name, $l10n );
 }
 
 /**
@@ -103,15 +79,7 @@ function wp_localize_script( $handle, $object_name, $l10n ) {
  * @see WP_Scripts::remove() For parameter information.
  */
 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->remove( $handle );
+	wp_scripts()->remove( $handle );
 }
 
 /**
@@ -123,13 +91,7 @@ function wp_deregister_script( $handle ) {
  * @see wp_register_script() For parameter information.
  */
 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 = wp_scripts();
 
 	if ( $src ) {
 		$_handle = explode('?', $handle);
@@ -147,15 +109,7 @@ function wp_enqueue_script( $handle, $src = false, $deps = array(), $ver = false
  * @see WP_Scripts::dequeue() For parameter information.
  */
 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->dequeue( $handle );
+	wp_scripts()->dequeue( $handle );
 }
 
 /**
@@ -171,18 +125,33 @@ function wp_dequeue_script( $handle ) {
  * @return bool
  */
 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();
-	}
-
-	$query = $wp_scripts->query( $handle, $list );
+	$query = wp_scripts()->query( $handle, $list );
 
 	if ( is_object( $query ) )
 		return true;
 
 	return $query;
 }
+
+/**
+ * Return the global instance of WP_Scripts
+ *
+ * @since 3.5.0
+ *
+ * @return object WP_Scripts instance
+ */
+function wp_scripts() {
+	global $wp_scripts;
+
+	if ( is_a( $wp_scripts, 'WP_Scripts' ) )
+		return $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;
+
+	return $wp_scripts;
+}
+
