Index: src/wp-admin/about.php
===================================================================
--- src/wp-admin/about.php	(revision 38454)
+++ src/wp-admin/about.php	(working copy)
@@ -42,7 +42,7 @@
 
 $title = __( 'About' );
 
-list( $display_version ) = explode( '-', $wp_version );
+list( $display_version ) = explode( '-', WP::get( 'wp_version' ) );
 
 include( ABSPATH . 'wp-admin/admin-header.php' );
 ?>
Index: src/wp-admin/admin-header.php
===================================================================
--- src/wp-admin/admin-header.php	(revision 38454)
+++ src/wp-admin/admin-header.php	(working copy)
@@ -18,12 +18,11 @@
  * @global WP_Screen $current_screen
  * @global WP_Locale $wp_locale
  * @global string    $pagenow
- * @global string    $wp_version
  * @global string    $update_title
  * @global int       $total_update_count
  * @global string    $parent_file
  */
-global $title, $hook_suffix, $current_screen, $wp_locale, $pagenow, $wp_version,
+global $title, $hook_suffix, $current_screen, $wp_locale, $pagenow,
 	$update_title, $total_update_count, $parent_file;
 
 // Catch plugins that include admin-header.php before admin.php completes.
@@ -154,6 +153,8 @@
 if ( $current_screen->taxonomy )
 	$admin_body_class .= ' taxonomy-' . $current_screen->taxonomy;
 
+$wp_version = WP::get( 'wp_version' );
+
 $admin_body_class .= ' branch-' . str_replace( array( '.', ',' ), '-', floatval( $wp_version ) );
 $admin_body_class .= ' version-' . str_replace( '.', '-', preg_replace( '/^([.0-9]+).*/', '$1', $wp_version ) );
 $admin_body_class .= ' admin-color-' . sanitize_html_class( get_user_option( 'admin_color' ), 'fresh' );
Index: src/wp-admin/credits.php
===================================================================
--- src/wp-admin/credits.php	(revision 38454)
+++ src/wp-admin/credits.php	(working copy)
@@ -12,7 +12,7 @@
 
 $title = __( 'Credits' );
 
-list( $display_version ) = explode( '-', $wp_version );
+list( $display_version ) = explode( '-', WP::get( 'wp_version' ) );
 
 include( ABSPATH . 'wp-admin/admin-header.php' );
 ?>
Index: src/wp-admin/freedoms.php
===================================================================
--- src/wp-admin/freedoms.php	(revision 38454)
+++ src/wp-admin/freedoms.php	(working copy)
@@ -11,7 +11,7 @@
 
 $title = __( 'Freedoms' );
 
-list( $display_version ) = explode( '-', $wp_version );
+list( $display_version ) = explode( '-', WP::get( 'wp_version' ) );
 
 include( ABSPATH . 'wp-admin/admin-header.php' );
 ?>
Index: src/wp-admin/includes/class-core-upgrader.php
===================================================================
--- src/wp-admin/includes/class-core-upgrader.php	(revision 38454)
+++ src/wp-admin/includes/class-core-upgrader.php	(working copy)
@@ -65,6 +65,8 @@
 
 		include( ABSPATH . WPINC . '/version.php' ); // $wp_version;
 
+		$wp_version = WP::get( 'wp_version' );
+
 		$start_time = time();
 
 		$defaults = array(
@@ -238,6 +240,8 @@
 	public static function should_update_to_version( $offered_ver ) {
 		include( ABSPATH . WPINC . '/version.php' ); // $wp_version; // x.y.z
 
+		$wp_version = WP::get( 'wp_version' );
+
 		$current_branch = implode( '.', array_slice( preg_split( '/[.-]/', $wp_version  ), 0, 2 ) ); // x.y
 		$new_branch     = implode( '.', array_slice( preg_split( '/[.-]/', $offered_ver ), 0, 2 ) ); // x.y
 		$current_is_development_version = (bool) strpos( $wp_version, '-' );
@@ -339,15 +343,14 @@
 	 * @since 3.7.0
 	 * @access public
 	 *
-	 * @global string $wp_version
 	 * @global string $wp_local_package
 	 *
 	 * @return bool True if the checksums match, otherwise false.
 	 */
 	public function check_files() {
-		global $wp_version, $wp_local_package;
+		global $wp_local_package;
 
-		$checksums = get_core_checksums( $wp_version, isset( $wp_local_package ) ? $wp_local_package : 'en_US' );
+		$checksums = get_core_checksums( WP::get( 'wp_version' ), isset( $wp_local_package ) ? $wp_local_package : 'en_US' );
 
 		if ( ! is_array( $checksums ) )
 			return false;
Index: src/wp-admin/includes/class-wp-automatic-updater.php
===================================================================
--- src/wp-admin/includes/class-wp-automatic-updater.php	(revision 38454)
+++ src/wp-admin/includes/class-wp-automatic-updater.php	(working copy)
@@ -373,10 +373,9 @@
 	 * @access public
 	 *
 	 * @global wpdb   $wpdb
-	 * @global string $wp_version
 	 */
 	public function run() {
-		global $wpdb, $wp_version;
+		global $wpdb;
 
 		if ( $this->is_disabled() )
 			return;
@@ -457,7 +456,7 @@
 
 		// Send debugging email to all development installs.
 		if ( ! empty( $this->update_results ) ) {
-			$development_version = false !== strpos( $wp_version, '-' );
+			$development_version = false !== strpos( WP::get( 'wp_version' ), '-' );
 
 			/**
 			 * Filters whether to send a debugging email for each automatic background update.
@@ -494,13 +493,10 @@
 	 * @since Unknown
 	 * @access protected
 	 *
-	 * @global string $wp_version
-	 *
 	 * @param object $update_result The result of the core update. Includes the update offer and result.
 	 */
 	protected function after_core_update( $update_result ) {
-		global $wp_version;
-
+		$wp_version  = WP::get( 'wp_version' );
 		$core_update = $update_result->item;
 		$result      = $update_result->result;
 
@@ -584,8 +580,6 @@
 	 * @since 3.7.0
 	 * @access protected
 	 *
-	 * @global string $wp_version
-	 *
 	 * @param string $type        The type of email to send. Can be one of 'success', 'fail', 'manual', 'critical'.
 	 * @param object $core_update The update offer that was attempted.
 	 * @param mixed  $result      Optional. The result for the core update. Can be WP_Error.
@@ -722,7 +716,7 @@
 
 		if ( 'critical' == $type && is_wp_error( $result ) ) {
 			$body .= "\n***\n\n";
-			$body .= sprintf( __( 'Your site was running version %s.' ), $GLOBALS['wp_version'] );
+			$body .= sprintf( __( 'Your site was running version %s.' ), WP::get( 'wp_version' ) );
 			$body .= ' ' . __( 'We have some data that describes the error your site encountered.' );
 			$body .= ' ' . __( 'Your hosting company, support forum volunteers, or a friendly developer may be able to use this information to help you:' );
 
Index: src/wp-admin/includes/class-wp-plugin-install-list-table.php
===================================================================
--- src/wp-admin/includes/class-wp-plugin-install-list-table.php	(revision 38454)
+++ src/wp-admin/includes/class-wp-plugin-install-list-table.php	(working copy)
@@ -69,7 +69,6 @@
 	 * @global int    $paged
 	 * @global string $type
 	 * @global string $term
-	 * @global string $wp_version
 	 */
 	public function prepare_items() {
 		include( ABSPATH . 'wp-admin/includes/plugin-install.php' );
@@ -88,7 +87,7 @@
 		if ( 'search' === $tab ) {
 			$tabs['search'] = __( 'Search Results' );
 		}
-		if ( $tab === 'beta' || false !== strpos( $GLOBALS['wp_version'], '-' ) ) {
+		if ( $tab === 'beta' || false !== strpos( WP::get( 'wp_version' ), '-' ) ) {
 			$tabs['beta'] = _x( 'Beta Testing', 'Plugin Installer' );
 		}
 		$tabs['featured']    = _x( 'Featured', 'Plugin Installer' );
@@ -391,10 +390,9 @@
 		}
 	}
 
-	/**
-	 * @global string $wp_version
-	 */
 	public function display_rows() {
+		$wp_version = WP::get( 'wp_version' );
+
 		$plugins_allowedtags = array(
 			'a' => array( 'href' => array(),'title' => array(), 'target' => array() ),
 			'abbr' => array( 'title' => array() ),'acronym' => array( 'title' => array() ),
@@ -574,9 +572,9 @@
 				</div>
 				<div class="column-compatibility">
 					<?php
-					if ( ! empty( $plugin['tested'] ) && version_compare( substr( $GLOBALS['wp_version'], 0, strlen( $plugin['tested'] ) ), $plugin['tested'], '>' ) ) {
+					if ( ! empty( $plugin['tested'] ) && version_compare( substr( $wp_version, 0, strlen( $plugin['tested'] ) ), $plugin['tested'], '>' ) ) {
 						echo '<span class="compatibility-untested">' . __( 'Untested with your version of WordPress' ) . '</span>';
-					} elseif ( ! empty( $plugin['requires'] ) && version_compare( substr( $GLOBALS['wp_version'], 0, strlen( $plugin['requires'] ) ), $plugin['requires'], '<' ) ) {
+					} elseif ( ! empty( $plugin['requires'] ) && version_compare( substr( $wp_version, 0, strlen( $plugin['requires'] ) ), $plugin['requires'], '<' ) ) {
 						echo '<span class="compatibility-incompatible">' . __( '<strong>Incompatible</strong> with your version of WordPress' ) . '</span>';
 					} else {
 						echo '<span class="compatibility-compatible">' . __( '<strong>Compatible</strong> with your version of WordPress' ) . '</span>';
Index: src/wp-admin/includes/class-wp-press-this.php
===================================================================
--- src/wp-admin/includes/class-wp-press-this.php	(revision 38454)
+++ src/wp-admin/includes/class-wp-press-this.php	(working copy)
@@ -267,8 +267,6 @@
 	 * @return string Source's HTML sanitized markup
 	 */
 	public function fetch_source_html( $url ) {
-		global $wp_version;
-
 		if ( empty( $url ) ) {
 			return new WP_Error( 'invalid-url', __( 'A valid URL was not provided.' ) );
 		}
@@ -276,7 +274,7 @@
 		$remote_url = wp_safe_remote_get( $url, array(
 			'timeout' => 30,
 			// Use an explicit user-agent for Press This
-			'user-agent' => 'Press This (WordPress/' . $wp_version . '); ' . get_bloginfo( 'url' )
+			'user-agent' => 'Press This (WordPress/' . WP::get( 'wp_version' ) . '); ' . get_bloginfo( 'url' )
 		) );
 
 		if ( is_wp_error( $remote_url ) ) {
@@ -1189,11 +1187,10 @@
 	 * @access public
 	 *
 	 * @global WP_Locale $wp_locale
-	 * @global string    $wp_version
 	 * @global bool      $is_IE
 	 */
 	public function html() {
-		global $wp_locale, $wp_version;
+		global $wp_locale;
 
 		// Get data, new (POST) and old (GET).
 		$data = $this->merge_or_fetch_data();
@@ -1307,6 +1304,7 @@
 	?>
 </head>
 <?php
+	$wp_version = WP::get( 'wp_version' );
 
 	$admin_body_class  = 'press-this';
 	$admin_body_class .= ( is_rtl() ) ? ' rtl' : '';
Index: src/wp-admin/includes/credits.php
===================================================================
--- src/wp-admin/includes/credits.php	(revision 38454)
+++ src/wp-admin/includes/credits.php	(working copy)
@@ -10,14 +10,12 @@
 /**
  * Retrieve the contributor credits.
  *
- * @global string $wp_version The current WordPress version.
- *
  * @since 3.2.0
  *
  * @return array|false A list of all of the contributors, or false on error.
  */
 function wp_credits() {
-	global $wp_version;
+	$wp_version = WP::get( 'wp_version' );
 	$locale = get_locale();
 
 	$results = get_site_transient( 'wordpress_credits_' . $locale );
Index: src/wp-admin/includes/dashboard.php
===================================================================
--- src/wp-admin/includes/dashboard.php	(revision 38454)
+++ src/wp-admin/includes/dashboard.php	(working copy)
@@ -1393,8 +1393,6 @@
  *
  * @since 3.2.0
  *
- * @global string $wp_version
- *
  * @return array|bool False on failure, array of browser data on success.
  */
 function wp_check_browser_version() {
@@ -1404,11 +1402,9 @@
 	$key = md5( $_SERVER['HTTP_USER_AGENT'] );
 
 	if ( false === ($response = get_site_transient('browser_' . $key) ) ) {
-		global $wp_version;
-
 		$options = array(
 			'body'			=> array( 'useragent' => $_SERVER['HTTP_USER_AGENT'] ),
-			'user-agent'	=> 'WordPress/' . $wp_version . '; ' . home_url()
+			'user-agent'	=> 'WordPress/' . WP::get( 'wp_version' ) . '; ' . home_url()
 		);
 
 		$response = wp_remote_post( 'http://api.wordpress.org/core/browse-happy/1.1/', $options );
Index: src/wp-admin/includes/import.php
===================================================================
--- src/wp-admin/includes/import.php	(revision 38454)
+++ src/wp-admin/includes/import.php	(working copy)
@@ -125,6 +125,7 @@
 function wp_get_popular_importers() {
 	include( ABSPATH . WPINC . '/version.php' ); // include an unmodified $wp_version
 
+	$wp_version = WP::get( 'wp_version' );
 	$locale = get_locale();
 	$cache_key = 'popular_importers_' . md5( $locale . $wp_version );
 	$popular_importers = get_site_transient( $cache_key );
Index: src/wp-admin/includes/plugin-install.php
===================================================================
--- src/wp-admin/includes/plugin-install.php	(revision 38454)
+++ src/wp-admin/includes/plugin-install.php	(working copy)
@@ -423,7 +423,6 @@
  * @since 2.7.0
  *
  * @global string $tab
- * @global string $wp_version
  */
 function install_plugin_information() {
 	global $tab;
@@ -432,6 +431,8 @@
 		return;
 	}
 
+	$wp_version = WP::get( 'wp_version' );
+
 	$api = plugins_api( 'plugin_information', array(
 		'slug' => wp_unslash( $_REQUEST['plugin'] ),
 		'is_ssl' => is_ssl(),
@@ -630,9 +631,9 @@
 	</div>
 	<div id="section-holder" class="wrap">
 	<?php
-	if ( ! empty( $api->tested ) && version_compare( substr( $GLOBALS['wp_version'], 0, strlen( $api->tested ) ), $api->tested, '>' ) ) {
+	if ( ! empty( $api->tested ) && version_compare( substr( $wp_version, 0, strlen( $api->tested ) ), $api->tested, '>' ) ) {
 		echo '<div class="notice notice-warning notice-alt"><p>' . __( '<strong>Warning:</strong> This plugin has <strong>not been tested</strong> with your current version of WordPress.' ) . '</p></div>';
-	} elseif ( ! empty( $api->requires ) && version_compare( substr( $GLOBALS['wp_version'], 0, strlen( $api->requires ) ), $api->requires, '<' ) ) {
+	} elseif ( ! empty( $api->requires ) && version_compare( substr( $wp_version, 0, strlen( $api->requires ) ), $api->requires, '<' ) ) {
 		echo '<div class="notice notice-warning notice-alt"><p>' . __( '<strong>Warning:</strong> This plugin has <strong>not been marked as compatible</strong> with your version of WordPress.' ) . '</p></div>';
 	}
 
Index: src/wp-admin/includes/translation-install.php
===================================================================
--- src/wp-admin/includes/translation-install.php	(revision 38454)
+++ src/wp-admin/includes/translation-install.php	(working copy)
@@ -43,7 +43,7 @@
 		$options = array(
 			'timeout' => 3,
 			'body' => array(
-				'wp_version' => $wp_version,
+				'wp_version' => WP::get( 'wp_version' ),
 				'locale'     => get_locale(),
 				'version'    => $args['version'], // Version of plugin, theme or core
 			),
@@ -100,7 +100,7 @@
 
 	include( ABSPATH . WPINC . '/version.php' ); // include an unmodified $wp_version
 
-	$api = translations_api( 'core', array( 'version' => $wp_version ) );
+	$api = translations_api( 'core', array( 'version' => WP::get( 'wp_version' ) ) );
 
 	if ( is_wp_error( $api ) || empty( $api['translations'] ) ) {
 		return array();
Index: src/wp-admin/includes/update-core.php
===================================================================
--- src/wp-admin/includes/update-core.php	(revision 38454)
+++ src/wp-admin/includes/update-core.php	(working copy)
@@ -796,7 +796,6 @@
  * @global array              $_old_files
  * @global array              $_new_bundled_files
  * @global wpdb               $wpdb
- * @global string             $wp_version
  * @global string             $required_php_version
  * @global string             $required_mysql_version
  *
@@ -844,14 +843,13 @@
 
 
 	/**
-	 * Import $wp_version, $required_php_version, and $required_mysql_version from the new version
+	 * Import $required_php_version, and $required_mysql_version from the new version
 	 * $wp_filesystem->wp_content_dir() returned unslashed pre-2.8
 	 *
-	 * @global string $wp_version
 	 * @global string $required_php_version
 	 * @global string $required_mysql_version
 	 */
-	global $wp_version, $required_php_version, $required_mysql_version;
+	global $required_php_version, $required_mysql_version;
 
 	$versions_file = trailingslashit( $wp_filesystem->wp_content_dir() ) . 'upgrade/version-current.php';
 	if ( ! $wp_filesystem->copy( $from . $distro . 'wp-includes/version.php', $versions_file ) ) {
@@ -863,6 +861,7 @@
 	require( WP_CONTENT_DIR . '/upgrade/version-current.php' );
 	$wp_filesystem->delete( $versions_file );
 
+	$wp_version = WP::get( 'wp_version' );
 	$php_version    = phpversion();
 	$mysql_version  = $wpdb->db_version();
 	$old_wp_version = $wp_version; // The version of WordPress we're updating from
@@ -1200,7 +1199,6 @@
  *
  * @since 3.3.0
  *
- * @global string $wp_version
  * @global string $pagenow
  * @global string $action
  *
@@ -1207,9 +1205,9 @@
  * @param string $new_version
  */
 function _redirect_to_about_wordpress( $new_version ) {
-	global $wp_version, $pagenow, $action;
+	global $pagenow, $action;
 
-	if ( version_compare( $wp_version, '3.4-RC1', '>=' ) )
+	if ( version_compare( WP::get( 'wp_version' ), '3.4-RC1', '>=' ) )
 		return;
 
 	// Ensure we only run this on the update-core.php page. The Core_Upgrader may be used in other contexts.
Index: src/wp-admin/includes/update.php
===================================================================
--- src/wp-admin/includes/update.php	(revision 38454)
+++ src/wp-admin/includes/update.php	(working copy)
@@ -595,7 +595,7 @@
 		 * This flag is cleared whenever a successful update occurs using Core_Upgrader.
 		 */
 		$comparison = ! empty( $failed['critical'] ) ? '>=' : '>';
-		if ( version_compare( $failed['attempted'], $wp_version, $comparison ) )
+		if ( version_compare( $failed['attempted'], WP::get( 'wp_version' ), $comparison ) )
 			$nag = true;
 	}
 
Index: src/wp-admin/install.php
===================================================================
--- src/wp-admin/install.php	(revision 38454)
+++ src/wp-admin/install.php	(working copy)
@@ -217,13 +217,13 @@
 }
 
 /**
- * @global string $wp_version
  * @global string $required_php_version
  * @global string $required_mysql_version
  * @global wpdb   $wpdb
  */
-global $wp_version, $required_php_version, $required_mysql_version;
+global $required_php_version, $required_mysql_version;
 
+$wp_version     = WP::get( 'wp_version' );
 $php_version    = phpversion();
 $mysql_version  = $wpdb->db_version();
 $php_compat     = version_compare( $php_version, $required_php_version, '>=' );
Index: src/wp-admin/load-scripts.php
===================================================================
--- src/wp-admin/load-scripts.php	(revision 38454)
+++ src/wp-admin/load-scripts.php	(working copy)
@@ -37,6 +37,8 @@
 $wp_scripts = new WP_Scripts();
 wp_default_scripts($wp_scripts);
 
+$wp_version = WP::get( 'wp_version' );
+
 if ( isset( $_SERVER['HTTP_IF_NONE_MATCH'] ) && stripslashes( $_SERVER['HTTP_IF_NONE_MATCH'] ) === $wp_version ) {
 	$protocol = $_SERVER['SERVER_PROTOCOL'];
 	if ( ! in_array( $protocol, array( 'HTTP/1.1', 'HTTP/2', 'HTTP/2.0' ) ) ) {
Index: src/wp-admin/load-styles.php
===================================================================
--- src/wp-admin/load-styles.php	(revision 38454)
+++ src/wp-admin/load-styles.php	(working copy)
@@ -38,6 +38,8 @@
 $wp_styles = new WP_Styles();
 wp_default_styles($wp_styles);
 
+$wp_version = WP::get( 'wp_version' );
+
 if ( isset( $_SERVER['HTTP_IF_NONE_MATCH'] ) && stripslashes( $_SERVER['HTTP_IF_NONE_MATCH'] ) === $wp_version ) {
 	$protocol = $_SERVER['SERVER_PROTOCOL'];
 	if ( ! in_array( $protocol, array( 'HTTP/1.1', 'HTTP/2', 'HTTP/2.0' ) ) ) {
Index: src/wp-admin/plugin-editor.php
===================================================================
--- src/wp-admin/plugin-editor.php	(revision 38454)
+++ src/wp-admin/plugin-editor.php	(working copy)
@@ -260,7 +260,7 @@
 		<input type="hidden" name="scrollto" id="scrollto" value="<?php echo $scrollto; ?>" />
 		</div>
 		<?php if ( !empty( $docs_select ) ) : ?>
-		<div id="documentation" class="hide-if-no-js"><label for="docs-list"><?php _e('Documentation:') ?></label> <?php echo $docs_select ?> <input type="button" class="button" value="<?php esc_attr_e( 'Look Up' ) ?> " onclick="if ( '' != jQuery('#docs-list').val() ) { window.open( 'https://api.wordpress.org/core/handbook/1.0/?function=' + escape( jQuery( '#docs-list' ).val() ) + '&amp;locale=<?php echo urlencode( get_locale() ) ?>&amp;version=<?php echo urlencode( $wp_version ) ?>&amp;redirect=true'); }" /></div>
+		<div id="documentation" class="hide-if-no-js"><label for="docs-list"><?php _e('Documentation:') ?></label> <?php echo $docs_select ?> <input type="button" class="button" value="<?php esc_attr_e( 'Look Up' ) ?> " onclick="if ( '' != jQuery('#docs-list').val() ) { window.open( 'https://api.wordpress.org/core/handbook/1.0/?function=' + escape( jQuery( '#docs-list' ).val() ) + '&amp;locale=<?php echo urlencode( get_locale() ) ?>&amp;version=<?php echo urlencode( WP::get( 'wp_version' ) ) ?>&amp;redirect=true'); }" /></div>
 		<?php endif; ?>
 <?php if ( is_writeable($real_file) ) : ?>
 	<?php if ( in_array( $file, (array) get_option( 'active_plugins', array() ) ) ) { ?>
Index: src/wp-admin/theme-editor.php
===================================================================
--- src/wp-admin/theme-editor.php	(revision 38454)
+++ src/wp-admin/theme-editor.php	(working copy)
@@ -263,7 +263,7 @@
 		<div id="documentation" class="hide-if-no-js">
 		<label for="docs-list"><?php _e('Documentation:') ?></label>
 		<?php echo $docs_select; ?>
-		<input type="button" class="button" value="<?php esc_attr_e( 'Look Up' ); ?>" onclick="if ( '' != jQuery('#docs-list').val() ) { window.open( 'https://api.wordpress.org/core/handbook/1.0/?function=' + escape( jQuery( '#docs-list' ).val() ) + '&amp;locale=<?php echo urlencode( get_locale() ) ?>&amp;version=<?php echo urlencode( $wp_version ) ?>&amp;redirect=true'); }" />
+		<input type="button" class="button" value="<?php esc_attr_e( 'Look Up' ); ?>" onclick="if ( '' != jQuery('#docs-list').val() ) { window.open( 'https://api.wordpress.org/core/handbook/1.0/?function=' + escape( jQuery( '#docs-list' ).val() ) + '&amp;locale=<?php echo urlencode( get_locale() ) ?>&amp;version=<?php echo urlencode( WP::get( 'wp_version' ) ) ?>&amp;redirect=true'); }" />
 		</div>
 	<?php endif; ?>
 
Index: src/wp-admin/update-core.php
===================================================================
--- src/wp-admin/update-core.php	(revision 38454)
+++ src/wp-admin/update-core.php	(working copy)
@@ -26,7 +26,6 @@
  *
  * @global string $wp_local_package
  * @global wpdb   $wpdb
- * @global string $wp_version
  *
  * @staticvar bool $first_pass
  *
@@ -33,17 +32,19 @@
  * @param object $update
  */
 function list_core_update( $update ) {
- 	global $wp_local_package, $wpdb, $wp_version;
+ 	global $wp_local_package, $wpdb;
   	static $first_pass = true;
 
- 	if ( 'en_US' == $update->locale && 'en_US' == get_locale() )
+	$wp_version = WP::get( 'wp_version' );
+
+ 	if ( 'en_US' == $update->locale && 'en_US' == get_locale() ) {
  		$version_string = $update->current;
  	// If the only available update is a partial builds, it doesn't need a language-specific version string.
- 	elseif ( 'en_US' == $update->locale && $update->packages->partial && $wp_version == $update->partial_version && ( $updates = get_core_updates() ) && 1 == count( $updates ) )
+	} elseif ( 'en_US' == $update->locale && $update->packages->partial && $wp_version == $update->partial_version && ( $updates = get_core_updates() ) && 1 == count( $updates ) ) {
  		$version_string = $update->current;
- 	else
+	} else {
  		$version_string = sprintf( "%s&ndash;<strong>%s</strong>", $update->current, $update->locale );
-
+	}
 	$current = false;
 	if ( !isset($update->response) || 'latest' == $update->response )
 		$current = true;
@@ -149,15 +150,16 @@
  *
  * @since 2.7.0
  *
- * @global string $wp_version
  * @global string $required_php_version
  * @global string $required_mysql_version
  */
 function core_upgrade_preamble() {
-	global $wp_version, $required_php_version, $required_mysql_version;
+	global $required_php_version, $required_mysql_version;
 
 	$updates = get_core_updates();
 
+	$wp_version = WP::get( 'wp_version' );
+
 	if ( !isset($updates[0]->response) || 'latest' == $updates[0]->response ) {
 		echo '<h2>';
 		_e('You have the latest version of WordPress.');
@@ -211,15 +213,9 @@
 	dismissed_updates();
 }
 
-/**
- *
- * @global string $wp_version
- */
 function list_plugin_updates() {
-	global $wp_version;
+	$cur_wp_version = preg_replace('/-.*$/', '', WP::get( 'wp_version' ) );
 
-	$cur_wp_version = preg_replace('/-.*$/', '', $wp_version);
-
 	require_once(ABSPATH . 'wp-admin/includes/plugin-install.php');
 	$plugins = get_plugin_updates();
 	if ( empty( $plugins ) ) {
Index: src/wp-admin/upgrade.php
===================================================================
--- src/wp-admin/upgrade.php	(revision 38454)
+++ src/wp-admin/upgrade.php	(working copy)
@@ -36,13 +36,14 @@
 }
 
 /**
- * @global string $wp_version
  * @global string $required_php_version
  * @global string $required_mysql_version
  * @global wpdb   $wpdb
  */
-global $wp_version, $required_php_version, $required_mysql_version;
+global $required_php_version, $required_mysql_version;
 
+$wp_version = WP::get( 'wp_version' );
+
 $step = (int) $step;
 
 $php_version    = phpversion();
Index: src/wp-includes/class-http.php
===================================================================
--- src/wp-includes/class-http.php	(revision 38454)
+++ src/wp-includes/class-http.php	(working copy)
@@ -101,8 +101,6 @@
 	 * @access public
 	 * @since 2.7.0
 	 *
-	 * @global string $wp_version
-	 *
 	 * @param string       $url  The request URL.
 	 * @param string|array $args {
 	 *     Optional. Array or string of HTTP request arguments.
@@ -148,8 +146,6 @@
 	 *                        A WP_Error instance upon error.
 	 */
 	public function request( $url, $args = array() ) {
-		global $wp_version;
-
 		$defaults = array(
 			'method' => 'GET',
 			/**
@@ -185,7 +181,7 @@
 			 *
 			 * @param string $user_agent WordPress user agent string.
 			 */
-			'user-agent' => apply_filters( 'http_headers_useragent', 'WordPress/' . $wp_version . '; ' . get_bloginfo( 'url' ) ),
+			'user-agent' => apply_filters( 'http_headers_useragent', 'WordPress/' . WP::get( 'wp_version' ) . '; ' . get_bloginfo( 'url' ) ),
 			/**
 			 * Filters whether to pass URLs through wp_http_validate_url() in an HTTP request.
 			 *
Index: src/wp-includes/class-wp-container.php
===================================================================
--- src/wp-includes/class-wp-container.php	(nonexistent)
+++ src/wp-includes/class-wp-container.php	(working copy)
@@ -0,0 +1,71 @@
+<?php
+
+class WP_Container {
+	private $data = array();
+	private static $instance;
+
+	public static function instance() {
+		if ( ! self::$instance ) {
+			self::$instance = new self;
+		}
+		return self::$instance;
+	}
+
+	public function reset() {
+		foreach ( $this->data as $name => $opts ) {
+			if ( ! $opts['global'] ) {
+				continue;
+			}
+
+			unset( $GLOBALS[ $name ] );
+		}
+
+		$this->data = array();
+	}
+
+	public function get( $name ) {
+		if ( ! $this->has( $name ) ) {
+			return;
+		}
+
+		$data = $this->data[ $name ];
+		if ( is_callable( $data['value'] ) ) {
+			return call_user_func_array( $data['value'], $data['args'] );
+		}
+		return $data['value'];
+	}
+
+	public function has( $name ) {
+		return array_key_exists( $name, $this->data );
+	}
+
+	public function set( $name, $value, $opts = array() ) {
+		$defaults = array(
+			'global' => false,
+			'mutable' => true,
+			'args' => array()
+		);
+
+		foreach ( $defaults as $key => $val ) {
+			if ( array_key_exists( $key, $opts ) ) {
+				continue;
+			}
+
+			$opts[ $key ] = $val;
+		}
+
+		$opts['value'] = $value;
+
+		if ( $this->has( $name ) ) {
+			$data = $this->data[ $name ];
+			if ( ! $data['mutable'] ) {
+				return;
+			}
+		}
+
+		$this->data[ $name ] = $opts;
+		if ( $opts['global'] ) {
+			$GLOBALS[ $name ] = $value;
+		}
+	}
+}
Index: src/wp-includes/class-wp-editor.php
===================================================================
--- src/wp-includes/class-wp-editor.php	(revision 38454)
+++ src/wp-includes/class-wp-editor.php	(working copy)
@@ -296,7 +296,6 @@
 	/**
 	 * @static
 	 *
-	 * @global string $wp_version
 	 * @global string $tinymce_version
 	 *
 	 * @param string $editor_id
@@ -303,7 +302,7 @@
 	 * @param array  $set
 	 */
 	public static function editor_settings($editor_id, $set) {
-		global $wp_version, $tinymce_version;
+		global $tinymce_version;
 
 		if ( empty(self::$first_init) ) {
 			if ( is_admin() ) {
@@ -559,7 +558,7 @@
 				}
 
 				$suffix = SCRIPT_DEBUG ? '' : '.min';
-				$version = 'ver=' . $wp_version;
+				$version = 'ver=' . WP::get( 'wp_version' );
 				$dashicons = includes_url( "css/dashicons$suffix.css?$version" );
 
 				// WordPress default stylesheet and dashicons
@@ -1131,13 +1130,12 @@
 	/**
 	 *
 	 * @static
-	 * @global string $wp_version
 	 * @global string $tinymce_version
 	 * @global bool   $concatenate_scripts
 	 * @global bool   $compress_scripts
 	 */
 	public static function editor_js() {
-		global $wp_version, $tinymce_version, $concatenate_scripts, $compress_scripts;
+		global $tinymce_version, $concatenate_scripts, $compress_scripts;
 
 		/**
 		 * Filters "tiny_mce_version" is deprecated
@@ -1215,7 +1213,7 @@
 
 		$baseurl = self::$baseurl;
 		// Load tinymce.js when running from /src, else load wp-tinymce.js.gz (production) or tinymce.min.js (SCRIPT_DEBUG)
-		$mce_suffix = false !== strpos( $wp_version, '-src' ) ? '' : '.min';
+		$mce_suffix = false !== strpos( WP::get( 'wp_version' ), '-src' ) ? '' : '.min';
 
 		if ( $tmce_on ) {
 			if ( $compressed ) {
Index: src/wp-includes/class-wp-locale.php
===================================================================
--- src/wp-includes/class-wp-locale.php	(revision 38454)
+++ src/wp-includes/class-wp-locale.php	(working copy)
@@ -125,7 +125,6 @@
 	 * @access private
 	 *
 	 * @global string $text_direction
-	 * @global string $wp_version
 	 */
 	public function init() {
 		// The Weekdays
@@ -231,7 +230,7 @@
 		elseif ( 'rtl' == _x( 'ltr', 'text direction' ) )
 			$this->text_direction = 'rtl';
 
-		if ( 'rtl' === $this->text_direction && strpos( $GLOBALS['wp_version'], '-src' ) ) {
+		if ( 'rtl' === $this->text_direction && strpos( WP::get( 'wp_version' ), '-src' ) ) {
 			$this->text_direction = 'ltr';
 			add_action( 'all_admin_notices', array( $this, 'rtl_src_admin_notice' ) );
 		}
Index: src/wp-includes/class-wp-xmlrpc-server.php
===================================================================
--- src/wp-includes/class-wp-xmlrpc-server.php	(revision 38454)
+++ src/wp-includes/class-wp-xmlrpc-server.php	(working copy)
@@ -413,12 +413,8 @@
 	 * Passes property through {@see 'xmlrpc_blog_options'} filter.
 	 *
 	 * @since 2.6.0
-	 *
-	 * @global string $wp_version
 	 */
 	public function initialise_blog_option_info() {
-		global $wp_version;
-
 		$this->blog_options = array(
 			// Read only options
 			'software_name'     => array(
@@ -429,7 +425,7 @@
 			'software_version'  => array(
 				'desc'          => __( 'Software Version' ),
 				'readonly'      => true,
-				'value'         => $wp_version
+				'value'         => WP::get( 'wp_version' )
 			),
 			'blog_url'          => array(
 				'desc'          => __( 'WordPress Address (URL)' ),
@@ -6186,8 +6182,6 @@
 	 *
 	 * @since 1.5.0
 	 *
-	 * @global string $wp_version
-	 *
 	 * @param array  $args {
 	 *     Method arguments. Note: arguments must be ordered as documented.
 	 *
@@ -6197,8 +6191,6 @@
 	 * @return string|IXR_Error
 	 */
 	public function pingback_ping( $args ) {
-		global $wp_version;
-
 		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
 		do_action( 'xmlrpc_call', 'pingback.ping' );
 
@@ -6285,7 +6277,7 @@
 		$remote_ip = preg_replace( '/[^0-9a-fA-F:., ]/', '', $_SERVER['REMOTE_ADDR'] );
 
 		/** This filter is documented in wp-includes/class-http.php */
-		$user_agent = apply_filters( 'http_headers_useragent', 'WordPress/' . $wp_version . '; ' . get_bloginfo( 'url' ) );
+		$user_agent = apply_filters( 'http_headers_useragent', 'WordPress/' . WP::get( 'wp_version' ) . '; ' . get_bloginfo( 'url' ) );
 
 		// Let's check the remote site
 		$http_api_args = array(
Index: src/wp-includes/class-wp.php
===================================================================
--- src/wp-includes/class-wp.php	(revision 38454)
+++ src/wp-includes/class-wp.php	(working copy)
@@ -737,4 +737,12 @@
 		 */
 		do_action_ref_array( 'wp', array( &$this ) );
 	}
+
+	public static function get( $name ) {
+		return WP_Container::instance()->get( $name );
+	}
+
+	public static function set( $name, $value, $opts = array() ) {
+		return WP_Container::instance()->set( $name, $value, $opts );
+	}
 }
Index: src/wp-includes/comment.php
===================================================================
--- src/wp-includes/comment.php	(revision 38454)
+++ src/wp-includes/comment.php	(working copy)
@@ -2362,14 +2362,10 @@
  *
  * @since 0.71
  *
- * @global string $wp_version
- *
  * @param string $content Post content to check for links.
  * @param int $post_ID Post ID.
  */
 function pingback($content, $post_ID) {
-	global $wp_version;
-
 	// original code by Mort (http://mort.mine.nu:8080)
 	$post_links = array();
 
@@ -2435,7 +2431,7 @@
 			 * @param string $pagelinkedto        URL of page linked to.
 			 * @param string $pagelinkedfrom      URL of page linked from.
 			 */
-			$client->useragent = apply_filters( 'pingback_useragent', $client->useragent . ' -- WordPress/' . $wp_version, $client->useragent, $pingback_server_url, $pagelinkedto, $pagelinkedfrom );
+			$client->useragent = apply_filters( 'pingback_useragent', $client->useragent . ' -- WordPress/' . WP::get( 'wp_version' ), $client->useragent, $pingback_server_url, $pagelinkedto, $pagelinkedfrom );
 			// when set to true, this outputs debug messages by itself
 			$client->debug = false;
 
@@ -2504,18 +2500,14 @@
  *
  * @since 1.2.0
  *
- * @global string $wp_version
- *
  * @param string $server Host of blog to connect to.
  * @param string $path Path to send the ping.
  */
 function weblog_ping($server = '', $path = '') {
-	global $wp_version;
-
 	// using a timeout of 3 seconds should be enough to cover slow servers
 	$client = new WP_HTTP_IXR_Client($server, ((!strlen(trim($path)) || ('/' == $path)) ? false : $path));
 	$client->timeout = 3;
-	$client->useragent .= ' -- WordPress/'.$wp_version;
+	$client->useragent .= ' -- WordPress/' . WP::get( 'wp_version' );
 
 	// when set to true, this outputs debug messages by itself
 	$client->debug = false;
Index: src/wp-includes/formatting.php
===================================================================
--- src/wp-includes/formatting.php	(revision 38454)
+++ src/wp-includes/formatting.php	(working copy)
@@ -4927,12 +4927,8 @@
  * @ignore
  * @since 4.6.0
  * @access private
- *
- * @global string $wp_version WordPress version string.
  */
 function _print_emoji_detection_script() {
-	global $wp_version;
-
 	$settings = array(
 		/**
 		 * Filters the URL where emoji png images are hosted.
@@ -4971,7 +4967,7 @@
 		'svgExt' => apply_filters( 'emoji_svg_ext', '.svg' ),
 	);
 
-	$version = 'ver=' . $wp_version;
+	$version = 'ver=' . WP::get( 'wp_version' );
 
 	if ( SCRIPT_DEBUG ) {
 		$settings['source'] = array(
Index: src/wp-includes/general-template.php
===================================================================
--- src/wp-includes/general-template.php	(revision 38454)
+++ src/wp-includes/general-template.php	(working copy)
@@ -637,8 +637,6 @@
  *
  * @since 0.71
  *
- * @global string $wp_version
- *
  * @param string $show   Optional. Site info to retrieve. Default empty (site name).
  * @param string $filter Optional. How to filter what is retrieved. Default 'raw'.
  * @return string Mostly string values, might be empty.
@@ -705,8 +703,7 @@
 			$output = get_option('html_type');
 			break;
 		case 'version':
-			global $wp_version;
-			$output = $wp_version;
+			$output = WP::get( 'wp_version' );
 			break;
 		case 'language':
 			/* translators: Translate this to the correct language tag for your locale,
@@ -3344,8 +3341,6 @@
  * Registers the default Admin color schemes
  *
  * @since 3.0.0
- *
- * @global string $wp_version
  */
 function register_admin_color_schemes() {
 	$suffix = is_rtl() ? '-rtl' : '';
@@ -3358,7 +3353,7 @@
 	);
 
 	// Other color schemes are not available when running out of src
-	if ( false !== strpos( $GLOBALS['wp_version'], '-src' ) )
+	if ( false !== strpos( WP::get( 'wp_version' ), '-src' ) )
 		return;
 
 	wp_admin_css_color( 'light', _x( 'Light', 'admin color scheme' ),
Index: src/wp-includes/link-template.php
===================================================================
--- src/wp-includes/link-template.php	(revision 38454)
+++ src/wp-includes/link-template.php	(working copy)
@@ -2898,16 +2898,12 @@
  * @since 2.6.0
  *
  * @global bool   $is_IE      Whether the browser matches an Internet Explorer user agent.
- * @global string $wp_version WP version.
- *
- * @global bool          $is_IE
- * @global string        $wp_version
  * @global WP_Press_This $wp_press_this
  *
  * @return string The Press This bookmarklet link URL.
  */
 function get_shortcut_link() {
-	global $is_IE, $wp_version;
+	global $is_IE;
 
 	$GLOBALS['wp_press_this'] = new WP_Press_This();
 	$bookmarklet_version = $GLOBALS['wp_press_this']->version;
Index: src/wp-includes/load.php
===================================================================
--- src/wp-includes/load.php	(revision 38454)
+++ src/wp-includes/load.php	(working copy)
@@ -118,10 +118,9 @@
  * @access private
  *
  * @global string $required_php_version The required PHP version string.
- * @global string $wp_version           The WordPress version string.
  */
 function wp_check_php_mysql_versions() {
-	global $required_php_version, $wp_version;
+	global $required_php_version;
 	$php_version = phpversion();
 
 	if ( version_compare( $required_php_version, $php_version, '>' ) ) {
@@ -130,7 +129,7 @@
 		$protocol = wp_get_server_protocol();
 		header( sprintf( '%s 500 Internal Server Error', $protocol ), true, 500 );
 		header( 'Content-Type: text/html; charset=utf-8' );
-		die( sprintf( __( 'Your server is running PHP version %1$s but WordPress %2$s requires at least %3$s.' ), $php_version, $wp_version, $required_php_version ) );
+		die( sprintf( __( 'Your server is running PHP version %1$s but WordPress %2$s requires at least %3$s.' ), $php_version, WP::get( 'wp_version' ), $required_php_version ) );
 	}
 
 	if ( ! extension_loaded( 'mysql' ) && ! extension_loaded( 'mysqli' ) && ! extension_loaded( 'mysqlnd' ) && ! file_exists( WP_CONTENT_DIR . '/db.php' ) ) {
Index: src/wp-includes/media.php
===================================================================
--- src/wp-includes/media.php	(revision 38454)
+++ src/wp-includes/media.php	(working copy)
@@ -3810,12 +3810,10 @@
  *
  * @since 4.0.0
  *
- * @global string $wp_version
- *
  * @return array The relevant CSS file URLs.
  */
 function wpview_media_sandbox_styles() {
- 	$version = 'ver=' . $GLOBALS['wp_version'];
+ 	$version = 'ver=' . WP::get( 'wp_version' );
  	$mediaelement = includes_url( "js/mediaelement/mediaelementplayer.min.css?$version" );
  	$wpmediaelement = includes_url( "js/mediaelement/wp-mediaelement.css?$version" );
 
Index: src/wp-includes/script-loader.php
===================================================================
--- src/wp-includes/script-loader.php	(revision 38454)
+++ src/wp-includes/script-loader.php	(working copy)
@@ -36,6 +36,8 @@
 function wp_default_scripts( &$scripts ) {
 	include( ABSPATH . WPINC . '/version.php' ); // include an unmodified $wp_version
 
+	$wp_version = WP::get( 'wp_version' );
+
 	$develop_src = false !== strpos( $wp_version, '-src' );
 
 	if ( ! defined( 'SCRIPT_DEBUG' ) ) {
@@ -746,11 +748,15 @@
 function wp_default_styles( &$styles ) {
 	include( ABSPATH . WPINC . '/version.php' ); // include an unmodified $wp_version
 
-	if ( ! defined( 'SCRIPT_DEBUG' ) )
+	$wp_version = WP::get( 'wp_version' );
+
+	if ( ! defined( 'SCRIPT_DEBUG' ) ) {
 		define( 'SCRIPT_DEBUG', false !== strpos( $wp_version, '-src' ) );
+	}
 
-	if ( ! $guessurl = site_url() )
+	if ( ! $guessurl = site_url() ) {
 		$guessurl = wp_guess_url();
+	}
 
 	$styles->base_url = $guessurl;
 	$styles->content_url = defined('WP_CONTENT_URL')? WP_CONTENT_URL : '';
Index: src/wp-includes/update.php
===================================================================
--- src/wp-includes/update.php	(revision 38454)
+++ src/wp-includes/update.php	(working copy)
@@ -14,7 +14,6 @@
  * isn't installing.
  *
  * @since 2.3.0
- * @global string $wp_version Used to check against the newest WordPress version.
  * @global wpdb   $wpdb
  * @global string $wp_local_package
  *
@@ -29,6 +28,9 @@
 	global $wpdb, $wp_local_package;
 	// include an unmodified $wp_version
 	include( ABSPATH . WPINC . '/version.php' );
+
+	$wp_version = WP::get( 'wp_version' );
+
 	$php_version = phpversion();
 
 	$current = get_site_transient( 'update_core' );
@@ -183,7 +185,6 @@
  * api.wordpress.org. Will only check if WordPress isn't installing.
  *
  * @since 2.3.0
- * @global string $wp_version Used to notify the WordPress version.
  *
  * @param array $extra_stats Extra statistics to report to the WordPress.org API.
  */
@@ -195,6 +196,8 @@
 	// include an unmodified $wp_version
 	include( ABSPATH . WPINC . '/version.php' );
 
+	$wp_version = WP::get( 'wp_version' );
+
 	// If running blog-side, bail unless we've not checked in the last 12 hours
 	if ( !function_exists( 'get_plugins' ) )
 		require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
@@ -360,6 +363,8 @@
 	// include an unmodified $wp_version
 	include( ABSPATH . WPINC . '/version.php' );
 
+	$wp_version = WP::get( 'wp_version' );
+
 	$installed_themes = wp_get_themes();
 	$translations = wp_get_installed_translations( 'themes' );
 
@@ -597,13 +602,13 @@
  * Determines whether core should be updated.
  *
  * @since 2.8.0
- *
- * @global string $wp_version
  */
 function _maybe_update_core() {
 	// include an unmodified $wp_version
 	include( ABSPATH . WPINC . '/version.php' );
 
+	$wp_version = WP::get( 'wp_version' );
+
 	$current = get_site_transient( 'update_core' );
 
 	if ( isset( $current->last_checked, $current->version_checked ) &&
Index: src/wp-includes/version.php
===================================================================
--- src/wp-includes/version.php	(revision 38454)
+++ src/wp-includes/version.php	(working copy)
@@ -5,7 +5,7 @@
  * @global string $wp_version
  */
 $wp_version = '4.7-alpha-38178-src';
-
+WP::set( 'wp_version', $wp_version, array( 'global' => true ) );
 /**
  * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.
  *
Index: src/wp-includes/wp-db.php
===================================================================
--- src/wp-includes/wp-db.php	(revision 38454)
+++ src/wp-includes/wp-db.php	(working copy)
@@ -616,8 +616,6 @@
 	 * @link https://core.trac.wordpress.org/ticket/3354
 	 * @since 2.0.8
 	 *
-	 * @global string $wp_version
-	 *
 	 * @param string $dbuser     MySQL database user
 	 * @param string $dbpassword MySQL database password
 	 * @param string $dbname     MySQL database name
@@ -640,7 +638,7 @@
 				$this->use_mysqli = ! WP_USE_EXT_MYSQL;
 			} elseif ( version_compare( phpversion(), '5.5', '>=' ) || ! function_exists( 'mysql_connect' ) ) {
 				$this->use_mysqli = true;
-			} elseif ( false !== strpos( $GLOBALS['wp_version'], '-' ) ) {
+			} elseif ( false !== strpos( WP::get( 'wp_version' ), '-' ) ) {
 				$this->use_mysqli = true;
 			}
 		}
@@ -3196,16 +3194,15 @@
 	 *
 	 * @since 2.5.0
 	 *
-	 * @global string $wp_version
 	 * @global string $required_mysql_version
 	 *
 	 * @return WP_Error|void
 	 */
 	public function check_database_version() {
-		global $wp_version, $required_mysql_version;
+		global $required_mysql_version;
 		// Make sure the server has the required MySQL version
 		if ( version_compare($this->db_version(), $required_mysql_version, '<') )
-			return new WP_Error('database_version', sprintf( __( '<strong>ERROR</strong>: WordPress %1$s requires MySQL %2$s or higher' ), $wp_version, $required_mysql_version ));
+			return new WP_Error('database_version', sprintf( __( '<strong>ERROR</strong>: WordPress %1$s requires MySQL %2$s or higher' ), WP::get( 'wp_version' ), $required_mysql_version ));
 	}
 
 	/**
Index: src/wp-vendor/autoload_52.php
===================================================================
--- src/wp-vendor/autoload_52.php	(revision 38454)
+++ src/wp-vendor/autoload_52.php	(working copy)
@@ -4,4 +4,4 @@
 
 require_once dirname(__FILE__) . '/composer'.'/autoload_real_52.php';
 
-return ComposerAutoloaderInit1dd196791ebd0cfea0668c22edc062f9::getLoader();
+return ComposerAutoloaderInit2f31acae96c6d487f86d469e989d96d5::getLoader();
Index: src/wp-vendor/composer/autoload_classmap.php
===================================================================
--- src/wp-vendor/composer/autoload_classmap.php	(revision 38454)
+++ src/wp-vendor/composer/autoload_classmap.php	(working copy)
@@ -44,6 +44,7 @@
     'WP_Comment' => $baseDir . '/wp-includes/class-wp-comment.php',
     'WP_Comment_Query' => $baseDir . '/wp-includes/class-wp-comment-query.php',
     'WP_Comments_List_Table' => $baseDir . '/wp-admin/includes/class-wp-comments-list-table.php',
+    'WP_Container' => $baseDir . '/wp-includes/class-wp-container.php',
     'WP_Customize_Background_Image_Control' => $baseDir . '/wp-includes/customize/class-wp-customize-background-image-control.php',
     'WP_Customize_Background_Image_Setting' => $baseDir . '/wp-includes/customize/class-wp-customize-background-image-setting.php',
     'WP_Customize_Color_Control' => $baseDir . '/wp-includes/customize/class-wp-customize-color-control.php',
Index: src/wp-vendor/composer/autoload_real_52.php
===================================================================
--- src/wp-vendor/composer/autoload_real_52.php	(revision 38454)
+++ src/wp-vendor/composer/autoload_real_52.php	(working copy)
@@ -2,7 +2,7 @@
 
 // autoload_real_52.php generated by xrstf/composer-php52
 
-class ComposerAutoloaderInit1dd196791ebd0cfea0668c22edc062f9 {
+class ComposerAutoloaderInit2f31acae96c6d487f86d469e989d96d5 {
 	private static $loader;
 
 	public static function loadClassLoader($class) {
@@ -19,9 +19,9 @@
 			return self::$loader;
 		}
 
-		spl_autoload_register(array('ComposerAutoloaderInit1dd196791ebd0cfea0668c22edc062f9', 'loadClassLoader'), true /*, true */);
+		spl_autoload_register(array('ComposerAutoloaderInit2f31acae96c6d487f86d469e989d96d5', 'loadClassLoader'), true /*, true */);
 		self::$loader = $loader = new xrstf_Composer52_ClassLoader();
-		spl_autoload_unregister(array('ComposerAutoloaderInit1dd196791ebd0cfea0668c22edc062f9', 'loadClassLoader'));
+		spl_autoload_unregister(array('ComposerAutoloaderInit2f31acae96c6d487f86d469e989d96d5', 'loadClassLoader'));
 
 		$vendorDir = dirname(dirname(__FILE__));
 		$baseDir   = dirname($vendorDir);
Index: tests/phpunit/tests/container.php
===================================================================
--- tests/phpunit/tests/container.php	(nonexistent)
+++ tests/phpunit/tests/container.php	(working copy)
@@ -0,0 +1,53 @@
+<?php
+/**
+ * @group container
+ */
+class Tests_WP_Container extends WP_UnitTestCase {
+	public function setUp() {
+		parent::setUp();
+
+		WP_Container::instance()->reset();
+	}
+
+	public function test_get_unset() {
+		$this->assertEmpty( WP::get( 'taco' )  );
+	}
+
+	public function test_set_mutable_global() {
+		WP::set( 'taco', 'carnitas', array(
+			'global' => true,
+		) );
+
+		$this->assertArrayHasKey( 'taco', $GLOBALS );
+		$this->assertEquals( 'carnitas', $GLOBALS['taco'] );
+		$this->assertEquals( 'carnitas', WP::get( 'taco' ) );
+
+		WP::set( 'taco', 'pollo', array(
+			'global' => true,
+		) );
+
+		$this->assertEquals( 'pollo', $GLOBALS['taco'] );
+		$this->assertEquals( 'pollo', WP::get( 'taco' ) );
+
+		WP::set( 'taco', 'bistec' );
+
+		$this->assertEquals( 'pollo', $GLOBALS['taco'] );
+		$this->assertEquals( 'bistec', WP::get( 'taco' ) );
+	}
+
+	public function test_set_immutable_global() {
+		WP::set( 'taco', 'carnitas', array(
+			'global' => true,
+			'mutable' => false
+		) );
+
+		$this->assertArrayHasKey( 'taco', $GLOBALS );
+		$this->assertEquals( 'carnitas', $GLOBALS['taco'] );
+		$this->assertEquals( 'carnitas', WP::get( 'taco' ) );
+
+		WP::set( 'taco', 'pollo' );
+
+		$this->assertEquals( 'carnitas', $GLOBALS['taco'] );
+		$this->assertEquals( 'carnitas', WP::get( 'taco' ) );
+	}
+}
\ No newline at end of file
