Index: wp-includes/plugin.php
===================================================================
--- wp-includes/plugin.php	(revision 7987)
+++ wp-includes/plugin.php	(working copy)
@@ -434,7 +434,7 @@
 /**
  * plugin_basename() - Gets the basename of a plugin.
  *
- * This method extract the name of a plugin from its filename.
+ * This method extracts the name of a plugin from its filename.
  *
  * @package WordPress
  * @subpackage Plugin
@@ -444,11 +444,14 @@
  *
  * @param string $file The filename of plugin.
  * @return string The name of a plugin.
+ * @uses WP_PLUGIN_DIR
  */
 function plugin_basename($file) {
 	$file = str_replace('\\','/',$file); // sanitize for Win32 installs
 	$file = preg_replace('|/+|','/', $file); // remove any duplicate slash
-	$file = preg_replace('|^.*/' . PLUGINDIR . '/|','',$file); // get relative path from plugins dir
+	$plugin_dir = str_replace('\\','/',WP_PLUGIN_DIR); // sanitize for Win32 installs
+	$plugin_dir = preg_replace('|/+|','/', $plugin_dir); // remove any duplicate slash
+	$file = preg_replace('|^' . preg_quote($plugin_dir, '|') . '/|','',$file); // get relative path from plugins dir
 	return $file;
 }
 
Index: wp-includes/js/tinymce/tiny_mce_config.php
===================================================================
--- wp-includes/js/tinymce/tiny_mce_config.php	(revision 7987)
+++ wp-includes/js/tinymce/tiny_mce_config.php	(working copy)
@@ -206,7 +206,7 @@
 }
 
 // Cache path, this is where the .gz files will be stored
-$cache_path = ABSPATH . 'wp-content/uploads/js_cache'; 
+$cache_path = WP_CONTENT_DIR . '/uploads/js_cache'; 
 if ( $disk_cache && ! is_dir($cache_path) )
 	$disk_cache = wp_mkdir_p($cache_path);
 
Index: wp-includes/theme.php
===================================================================
--- wp-includes/theme.php	(revision 7987)
+++ wp-includes/theme.php	(working copy)
@@ -333,11 +333,11 @@
 }
 
 function get_theme_root() {
-	return apply_filters('theme_root', ABSPATH . "wp-content/themes");
+	return apply_filters('theme_root', WP_CONTENT_DIR . "/themes");
 }
 
 function get_theme_root_uri() {
-	return apply_filters('theme_root_uri', get_option('siteurl') . "/wp-content/themes", get_option('siteurl'));
+	return apply_filters('theme_root_uri', WP_CONTENT_URL . "/themes", get_option('siteurl'));
 }
 
 function get_query_template($type) {
Index: wp-includes/functions.php
===================================================================
--- wp-includes/functions.php	(revision 7987)
+++ wp-includes/functions.php	(working copy)
@@ -1080,7 +1080,7 @@
 	$siteurl = get_option( 'siteurl' );
 	$upload_path = get_option( 'upload_path' );
 	if ( trim($upload_path) === '' )
-		$upload_path = 'wp-content/uploads';
+		$upload_path = WP_CONTENT_DIR . '/uploads';
 	$dir = $upload_path;
 
 	// $dir is absolute, $path is (maybe) relative to ABSPATH
@@ -1558,8 +1558,8 @@
  */
 function require_wp_db() {
 	global $wpdb;
-	if ( file_exists( ABSPATH . 'wp-content/db.php' ) )
-		require_once( ABSPATH . 'wp-content/db.php' );
+	if ( file_exists( WP_CONTENT_DIR . '/db.php' ) )
+		require_once( WP_CONTENT_DIR . '/db.php' );
 	else
 		require_once( ABSPATH . WPINC . '/wp-db.php' );
 }
@@ -1568,8 +1568,8 @@
 	global $wpdb;
 
 	// Load custom DB error template, if present.
-	if ( file_exists( ABSPATH . 'wp-content/db-error.php' ) ) {
-		require_once( ABSPATH . 'wp-content/db-error.php' );
+	if ( file_exists( WP_CONTENT_DIR . '/db-error.php' ) ) {
+		require_once( WP_CONTENT_DIR . '/db-error.php' );
 		die();
 	}
 
Index: wp-includes/l10n.php
===================================================================
--- wp-includes/l10n.php	(revision 7987)
+++ wp-includes/l10n.php	(working copy)
@@ -278,7 +278,7 @@
  *
  * The plugin may place all of the .mo files in another folder and set
  * the $path based on the relative location from ABSPATH constant. The
- * plugin may use the constant PLUGINDIR and/or plugin_basename() to
+ * plugin may use the constant WP_PLUGIN_DIR and/or plugin_basename() to
  * get path of the plugin and then add the folder which holds the .mo
  * files.
  *
@@ -291,9 +291,9 @@
 	$locale = get_locale();
 
 	if ( false === $path )
-		$path = PLUGINDIR;
+		$path = WP_PLUGIN_DIR;
 
-	$mofile = ABSPATH . "$path/$domain-$locale.mo";
+	$mofile = $path . '/'. $domain . '-' . $locale . '.mo';
 	load_textdomain($domain, $mofile);
 }
 
Index: wp-includes/comment-template.php
===================================================================
--- wp-includes/comment-template.php	(revision 7987)
+++ wp-includes/comment-template.php	(working copy)
@@ -665,7 +665,7 @@
 	if ( file_exists( $include ) )
 		require( $include );
 	else
-		require( ABSPATH . 'wp-content/themes/default/comments.php');
+		require( WP_CONTENT_DIR . '/themes/default/comments.php');
 }
 
 /**
Index: wp-includes/general-template.php
===================================================================
--- wp-includes/general-template.php	(revision 7987)
+++ wp-includes/general-template.php	(working copy)
@@ -7,7 +7,7 @@
 	if ( file_exists( TEMPLATEPATH . '/header.php') )
 		load_template( TEMPLATEPATH . '/header.php');
 	else
-		load_template( ABSPATH . 'wp-content/themes/default/header.php');
+		load_template( WP_CONTENT_DIR . '/themes/default/header.php');
 }
 
 
@@ -16,7 +16,7 @@
 	if ( file_exists( TEMPLATEPATH . '/footer.php') )
 		load_template( TEMPLATEPATH . '/footer.php');
 	else
-		load_template( ABSPATH . 'wp-content/themes/default/footer.php');
+		load_template( WP_CONTENT_DIR . '/themes/default/footer.php');
 }
 
 
@@ -27,7 +27,7 @@
 	elseif ( file_exists( TEMPLATEPATH . '/sidebar.php') )
 		load_template( TEMPLATEPATH . '/sidebar.php');
 	else
-		load_template( ABSPATH . 'wp-content/themes/default/sidebar.php');
+		load_template( WP_CONTENT_DIR . '/themes/default/sidebar.php');
 }
 
 
Index: wp-includes/rss.php
===================================================================
--- wp-includes/rss.php	(revision 7987)
+++ wp-includes/rss.php	(working copy)
@@ -651,11 +651,12 @@
 }
 
 class RSSCache {
-	var $BASE_CACHE = 'wp-content/cache';	// where the cache files are stored
+	var $BASE_CACHE;	// where the cache files are stored
 	var $MAX_AGE	= 43200;  		// when are files stale, default twelve hours
 	var $ERROR 		= '';			// accumulate error messages
 
 	function RSSCache ($base='', $age='') {
+		$this->BASE_CACHE = WP_CONTENT_DIR . '/cache';
 		if ( $base ) {
 			$this->BASE_CACHE = $base;
 		}
Index: wp-settings.php
===================================================================
--- wp-settings.php	(revision 7987)
+++ wp-settings.php	(working copy)
@@ -100,7 +100,10 @@
 	die( 'Your server is running PHP version ' . phpversion() . ' but WordPress requires at least 4.3.' );
 }
 
-if ( !extension_loaded('mysql') && !file_exists(ABSPATH . 'wp-content/db.php') )
+if ( !defined('WP_CONTENT_DIR') )
+	define( 'WP_CONTENT_DIR', ABSPATH . 'wp-content' ); // no trailing slash, full paths only - WP_CONTENT_URL is defined further down
+
+if ( !extension_loaded('mysql') && !file_exists(WP_CONTENT_DIR . '/db.php') )
 	die( 'Your PHP installation appears to be missing the MySQL extension which is required by WordPress.' );
 
 /**
@@ -166,7 +169,7 @@
 
 // For an advanced caching plugin to use, static because you would only want one
 if ( defined('WP_CACHE') )
-	@include ABSPATH . 'wp-content/advanced-cache.php';
+	@include WP_CONTENT_DIR . '/advanced-cache.php';
 
 /**
  * Stores the location of the WordPress directory of functions, classes, and core content.
@@ -175,30 +178,28 @@
  */
 define('WPINC', 'wp-includes');
 
-if ( !defined('LANGDIR') ) {
+if ( !defined('WP_LANG_DIR') ) {
 	/**
-	 * Stores the location of the language directory. First looks for language folder in wp-content
+	 * Stores the location of the language directory. First looks for language folder in WP_CONTENT_DIR
 	 * and uses that folder if it exists. Or it uses the "languages" folder in WPINC.
 	 *
 	 * @since 2.1.0
 	 */
-	if ( file_exists(ABSPATH . 'wp-content/languages') && @is_dir(ABSPATH . 'wp-content/languages') )
-		define('LANGDIR', 'wp-content/languages'); // no leading slash, no trailing slash
-	else
-		define('LANGDIR', WPINC . '/languages'); // no leading slash, no trailing slash
+	if ( file_exists(WP_CONTENT_DIR . '/languages') && @is_dir(WP_CONTENT_DIR . '/languages') ) {
+		define('WP_LANG_DIR', WP_CONTENT_DIR . '/languages'); // no leading slash, no trailing slash, full path, not relative to ABSPATH
+		if (!defined('LANGDIR')) {
+			// Old static relative path maintained for limited backwards compatibility - won't work in some cases
+			define('LANGDIR', 'wp-content/languages');
+		}
+	} else {
+		define('WP_LANG_DIR', ABSPATH . WPINC . '/languages'); // no leading slash, no trailing slash, full path, not relative to ABSPATH
+		if (!defined('LANGDIR')) {
+			// Old relative path maintained for backwards compatibility
+			define('LANGDIR', WPINC . '/languages');
+		}
+	}
 }
 
-/**
- * Allows for the plugins directory to be moved from the default location.
- *
- * This isn't used everywhere. Constant is not used in plugin_basename()
- * which might cause conflicts with changing this.
- *
- * @since 2.1
- */
-if ( !defined('PLUGINDIR') )
-	define('PLUGINDIR', 'wp-content/plugins'); // no leading slash, no trailing slash
-
 require (ABSPATH . WPINC . '/compat.php');
 require (ABSPATH . WPINC . '/functions.php');
 require (ABSPATH . WPINC . '/classes.php');
@@ -213,8 +214,8 @@
 if ( is_wp_error($prefix) )
 	wp_die('<strong>ERROR</strong>: <code>$table_prefix</code> in <code>wp-config.php</code> can only contain numbers, letters, and underscores.');
 
-if ( file_exists(ABSPATH . 'wp-content/object-cache.php') )
-	require_once (ABSPATH . 'wp-content/object-cache.php');
+if ( file_exists(WP_CONTENT_DIR . '/object-cache.php') )
+	require_once (WP_CONTENT_DIR . '/object-cache.php');
 else
 	require_once (ABSPATH . WPINC . '/cache.php');
 
@@ -272,6 +273,21 @@
 require (ABSPATH . WPINC . '/shortcodes.php');
 require (ABSPATH . WPINC . '/media.php');
 
+if ( !defined('WP_CONTENT_URL') )
+	define( 'WP_CONTENT_URL', get_option('home') . 'wp-content'); // full url - WP_CONTENT_DIR is defined further up
+
+/**
+ * Allows for the plugins directory to be moved from the default location.
+ *
+ * @since 2.6
+ */
+if ( !defined('WP_PLUGIN_DIR') )
+	define( 'WP_PLUGIN_DIR', WP_CONTENT_DIR . '/plugins' ); // full path, no trailing slash
+if ( !defined('WP_PLUGIN_URL') )
+	define( 'WP_PLUGIN_URL', WP_CONTENT_URL . '/plugins' ); // full url, no trailing slash
+if ( !defined('PLUGINDIR') )
+	define( 'PLUGINDIR', 'wp-content/plugins' ); // Relative to ABSPATH.  For back compat.
+
 if ( ! defined('WP_INSTALLING') ) {
 	// Used to guarantee unique hash cookies
 	$cookiehash = md5(get_option('siteurl'));
@@ -357,8 +373,8 @@
 	$current_plugins = get_option('active_plugins');
 	if ( is_array($current_plugins) ) {
 		foreach ($current_plugins as $plugin) {
-			if ('' != $plugin && file_exists(ABSPATH . PLUGINDIR . '/' . $plugin))
-				include_once(ABSPATH . PLUGINDIR . '/' . $plugin);
+			if ('' != $plugin && file_exists(WP_PLUGIN_DIR . '/' . $plugin))
+				include_once(WP_PLUGIN_DIR . '/' . $plugin);
 		}
 	}
 }
@@ -451,7 +467,7 @@
  * @since 1.5.0
  */
 $locale = get_locale();
-$locale_file = ABSPATH . LANGDIR . "/$locale.php";
+$locale_file = WP_LANG_DIR . "/$locale.php";
 if ( is_readable($locale_file) )
 	require_once($locale_file);
 
Index: wp-admin/menu-header.php
===================================================================
--- wp-admin/menu-header.php	(revision 7987)
+++ wp-admin/menu-header.php	(working copy)
@@ -19,13 +19,13 @@
 	if ( !empty($submenu[$item[2]]) ) {
 		$submenu[$item[2]] = array_values($submenu[$item[2]]);  // Re-index.
 		$menu_hook = get_plugin_page_hook($submenu[$item[2]][0][2], $item[2]);
-		if ( file_exists(ABSPATH . PLUGINDIR . "/{$submenu[$item[2]][0][2]}") || !empty($menu_hook))
+		if ( file_exists(WP_PLUGIN_DIR . "/{$submenu[$item[2]][0][2]}") || !empty($menu_hook))
 			echo "\n\t<li><a href='admin.php?page={$submenu[$item[2]][0][2]}'$class>{$item[0]}</a></li>";
 		else
 			echo "\n\t<li><a href='{$submenu[$item[2]][0][2]}'$class>{$item[0]}</a></li>";
 	} else if ( current_user_can($item[1]) ) {
 		$menu_hook = get_plugin_page_hook($item[2], 'admin.php');
-		if ( file_exists(ABSPATH . PLUGINDIR . "/{$item[2]}") || !empty($menu_hook) )
+		if ( file_exists(WP_PLUGIN_DIR . "/{$item[2]}") || !empty($menu_hook) )
 			echo "\n\t<li><a href='admin.php?page={$item[2]}'$class>{$item[0]}</a></li>";
 		else
 			echo "\n\t<li><a href='{$item[2]}'$class>{$item[0]}</a></li>";
@@ -49,13 +49,13 @@
 	if ( !empty($submenu[$item[2]]) ) {
 		$submenu[$item[2]] = array_values($submenu[$item[2]]);  // Re-index.
 		$menu_hook = get_plugin_page_hook($submenu[$item[2]][0][2], $item[2]);
-		if ( file_exists(ABSPATH . PLUGINDIR . "/{$submenu[$item[2]][0][2]}") || !empty($menu_hook))
+		if ( file_exists(WP_PLUGIN_DIR . "/{$submenu[$item[2]][0][2]}") || !empty($menu_hook))
 			echo "\n\t<li><a href='admin.php?page={$submenu[$item[2]][0][2]}'$class>{$item[0]}</a></li>";
 		else
 			echo "\n\t<li><a href='{$submenu[$item[2]][0][2]}'$class>{$item[0]}</a></li>";
 	} else if ( current_user_can($item[1]) ) {
 		$menu_hook = get_plugin_page_hook($item[2], 'admin.php');
-		if ( file_exists(ABSPATH . PLUGINDIR . "/{$item[2]}") || !empty($menu_hook) )
+		if ( file_exists(WP_PLUGIN_DIR . "/{$item[2]}") || !empty($menu_hook) )
 			echo "\n\t<li><a href='admin.php?page={$item[2]}'$class>{$item[0]}</a></li>";
 		else
 			echo "\n\t<li><a href='{$item[2]}'$class>{$item[0]}</a></li>";
@@ -74,13 +74,13 @@
 	if ( !empty($submenu[$item[2]]) ) {
 		$submenu[$item[2]] = array_values($submenu[$item[2]]);  // Re-index.
 		$menu_hook = get_plugin_page_hook($submenu[$item[2]][0][2], $item[2]);
-		if ( file_exists(ABSPATH . PLUGINDIR . "/{$submenu[$item[2]][0][2]}") || !empty($menu_hook))
+		if ( file_exists(WP_PLUGIN_DIR . "/{$submenu[$item[2]][0][2]}") || !empty($menu_hook))
 			echo "\n\t<li><a href='admin.php?page={$submenu[$item[2]][0][2]}'$class>{$item[0]}</a></li>";
 		else
 			echo "\n\t<li><a href='{$submenu[$item[2]][0][2]}'$class>{$item[0]}</a></li>";
 	} else if ( current_user_can($item[1]) ) {
 		$menu_hook = get_plugin_page_hook($item[2], 'admin.php');
-		if ( file_exists(ABSPATH . PLUGINDIR . "/{$item[2]}") || !empty($menu_hook) )
+		if ( file_exists(WP_PLUGIN_DIR . "/{$item[2]}") || !empty($menu_hook) )
 			echo "\n\t<li><a href='admin.php?page={$item[2]}'$class>{$item[0]}</a></li>";
 		else
 			echo "\n\t<li><a href='{$item[2]}'$class>{$item[0]}</a></li>";
@@ -106,13 +106,13 @@
 	if ( !empty($submenu[$item[2]]) ) {
 		$submenu[$item[2]] = array_values($submenu[$item[2]]);  // Re-index.
 		$menu_hook = get_plugin_page_hook($submenu[$item[2]][0][2], $item[2]);
-		if ( file_exists(ABSPATH . PLUGINDIR . "/{$submenu[$item[2]][0][2]}") || !empty($menu_hook))
+		if ( file_exists(WP_PLUGIN_DIR . "/{$submenu[$item[2]][0][2]}") || !empty($menu_hook))
 			$side_items[] = "\n\t<li><a href='admin.php?page={$submenu[$item[2]][0][2]}'$class>{$item[0]}</a>";
 		else
 			$side_items[] = "\n\t<li><a href='{$submenu[$item[2]][0][2]}'$class>{$item[0]}</a>";
 	} else if ( current_user_can($item[1]) ) {
 		$menu_hook = get_plugin_page_hook($item[2], 'admin.php');
-		if ( file_exists(ABSPATH . PLUGINDIR . "/{$item[2]}") || !empty($menu_hook) )
+		if ( file_exists(WP_PLUGIN_DIR . "/{$item[2]}") || !empty($menu_hook) )
 			$side_items[] = "\n\t<li><a href='admin.php?page={$item[2]}'$class>{$item[0]}</a>";
 		else
 			$side_items[] = "\n\t<li><a href='{$item[2]}'$class>{$item[0]}</a>";
@@ -143,7 +143,7 @@
 
 $menu_hook = get_plugin_page_hook($item[2], $parent_file);
 
-if (file_exists(ABSPATH . PLUGINDIR . "/{$item[2]}") || ! empty($menu_hook)) {
+if (file_exists(WP_PLUGIN_DIR . "/{$item[2]}") || ! empty($menu_hook)) {
  	if ( 'admin.php' == $pagenow )
 		echo "\n\t<li><a href='admin.php?page={$item[2]}'$class>{$item[0]}</a></li>";
 	else
Index: wp-admin/includes/class-wp-filesystem-ftpsockets.php
===================================================================
--- wp-admin/includes/class-wp-filesystem-ftpsockets.php	(revision 7987)
+++ wp-admin/includes/class-wp-filesystem-ftpsockets.php	(working copy)
@@ -86,12 +86,15 @@
 		$this->permission = $perm;
 	}
 
-	function find_base_dir($base = '.',$echo = false, $loop = false) {
+	function find_base_dir($path = false, $base = '.',$echo = false, $loop = false) {
+		if (!$path)
+			$path = ABSPATH;
+		
 		//Sanitize the Windows path formats, This allows easier conparison and aligns it to FTP output.
-		$abspath = str_replace('\\','/',ABSPATH); //windows: Straighten up the paths..
-		if( strpos($abspath, ':') ){ //Windows, Strip out the driveletter
-			if( preg_match("|.{1}\:(.+)|i", $abspath, $mat) )
-				$abspath = $mat[1];
+		$path = str_replace('\\','/',$path); //windows: Straighten up the paths..
+		if( strpos($path, ':') ){ //Windows, Strip out the driveletter
+			if( preg_match("|.{1}\:(.+)|i", $path, $mat) )
+				$path = $mat[1];
 		}
 	
 		//Set up the base directory (Which unless specified, is the current one)
@@ -99,9 +102,9 @@
 		$base = trailingslashit($base);
 
 		//Can we see the Current directory as part of the ABSPATH?
-		$location = strpos($abspath, $base);
+		$location = strpos($path, $base);
 		if( false !== $location ) {
-			$newbase = path_join($base, substr($abspath, $location + strlen($base)));
+			$newbase = path_join($base, substr($path, $location + strlen($base)));
 
 			if( false !== $this->chdir($newbase) ){ //chdir sometimes returns null under certain circumstances, even when its changed correctly, FALSE will be returned if it doesnt change correctly.
 				if($echo) printf( __('Changing to %s') . '<br/>', $newbase );
@@ -118,7 +121,7 @@
 		//Get a list of the files in the current directory, See if we can locate where we are in the folder stucture.
 		$files = $this->dirlist($base);
 		
-		$arrPath = explode('/', $abspath);
+		$arrPath = explode('/', $path);
 		foreach($arrPath as $key){
 			//Working from /home/ to /user/ to /wordpress/ see if that file exists within the current folder, 
 			// If its found, change into it and follow through looking for it. 
@@ -128,7 +131,7 @@
 				//Lets try that folder:
 				$folder = path_join($base, $key);
 				if($echo) printf( __('Changing to %s') . '<br/>', $folder );
-				$ret = $this->find_base_dir( $folder, $echo, $loop);
+				$ret = $this->find_base_dir($path, $folder, $echo, $loop);
 				if( $ret )
 					return $ret;
 			}
@@ -141,14 +144,14 @@
 		if( $loop )
 			return false;//Prevent tihs function looping again.
 		//As an extra last resort, Change back to / if the folder wasnt found. This comes into effect when the CWD is /home/user/ but WP is at /var/www/.... mainly dedicated setups.
-		return $this->find_base_dir('/', $echo, true); 
+		return $this->find_base_dir($path, '/', $echo, true); 
 	}
 
-	function get_base_dir($base = '.', $echo = false){
+	function get_base_dir($path = false, $base = '.', $echo = false){
 		if( defined('FTP_BASE') )
 			$this->wp_base = FTP_BASE;
 		if( empty($this->wp_base) )
-			$this->wp_base = $this->find_base_dir($base, $echo);
+			$this->wp_base = $this->find_base_dir($path, $base, $echo);
 		return $this->wp_base;
 	}
 
Index: wp-admin/includes/plugin.php
===================================================================
--- wp-admin/includes/plugin.php	(revision 7987)
+++ wp-admin/includes/plugin.php	(working copy)
@@ -39,7 +39,7 @@
 	}
 
 	$wp_plugins = array ();
-	$plugin_root = ABSPATH . PLUGINDIR;
+	$plugin_root = WP_PLUGIN_DIR;
 	if( !empty($plugin_folder) )
 		$plugin_root .= $plugin_folder;
 
@@ -104,7 +104,7 @@
 			if ( !empty($redirect) )
 				wp_redirect(add_query_arg('_error_nonce', wp_create_nonce('plugin-activation-error_' . $plugin), $redirect)); // we'll override this later if the plugin can be included without fatal error
 			ob_start();
-			@include(ABSPATH . PLUGINDIR . '/' . $plugin);
+			@include(WP_PLUGIN_DIR . '/' . $plugin);
 			$current[] = $plugin;
 			sort($current);
 			update_option('active_plugins', $current);
@@ -179,7 +179,7 @@
 	// If a plugin file does not exist, remove it from the list of active
 	// plugins.
 	foreach ( $check_plugins as $check_plugin ) {
-		if ( !file_exists(ABSPATH . PLUGINDIR . '/' . $check_plugin) ) {
+		if ( !file_exists(WP_PLUGIN_DIR . '/' . $check_plugin) ) {
 			$current = get_option('active_plugins');
 			$key = array_search($check_plugin, $current);
 			if ( false !== $key && NULL !== $key ) {
@@ -193,7 +193,7 @@
 function validate_plugin($plugin) {
 	if ( validate_file($plugin) )
 		return new WP_Error('plugin_invalid', __('Invalid plugin.'));
-	if ( ! file_exists(ABSPATH . PLUGINDIR . '/' . $plugin) )
+	if ( ! file_exists(WP_PLUGIN_DIR . '/' . $plugin) )
 		return new WP_Error('plugin_not_found', __('Plugin file does not exist.'));
 
 	return 0;
Index: wp-admin/includes/schema.php
===================================================================
--- wp-admin/includes/schema.php	(revision 7987)
+++ wp-admin/includes/schema.php	(working copy)
@@ -226,10 +226,10 @@
 	if ( ini_get('safe_mode') ) {
 		// Safe mode screws up mkdir(), so we must use a flat structure.
 		add_option('uploads_use_yearmonth_folders', 0);
-		add_option('upload_path', 'wp-content');
+		add_option('upload_path', WP_CONTENT_DIR);
 	} else {
 		add_option('uploads_use_yearmonth_folders', 1);
-		add_option('upload_path', 'wp-content/uploads');
+		add_option('upload_path', WP_CONTENT_DIR . '/uploads');
 	}
 
 	// 2.0.3
Index: wp-admin/includes/file.php
===================================================================
--- wp-admin/includes/file.php	(revision 7987)
+++ wp-admin/includes/file.php	(working copy)
@@ -46,7 +46,7 @@
 	if ( defined('WP_TEMP_DIR') )
 		return trailingslashit(WP_TEMP_DIR);
 
-	$temp = ABSPATH . 'wp-content/';
+	$temp = WP_CONTENT_DIR . '/';
 	if ( is_dir($temp) && is_writable($temp) )
 		return $temp;
 
Index: wp-admin/includes/update.php
===================================================================
--- wp-admin/includes/update.php	(revision 7987)
+++ wp-admin/includes/update.php	(working copy)
@@ -159,8 +159,8 @@
 	if ( $wp_filesystem->errors->get_error_code() )
 		return new WP_Error('fs_error', __('Filesystem error'), $wp_filesystem->errors);
 
-	//Get the Base folder
-	$base = $wp_filesystem->get_base_dir();
+	//Get the base plugin folder
+	$base = $wp_filesystem->get_base_dir(WP_PLUGIN_DIR);
 	
 	if ( empty($base) )
 		return new WP_Error('fs_nowordpress', __('Unable to locate WordPress directory.'));
@@ -179,7 +179,7 @@
 	if ( is_wp_error($file) )
 		return new WP_Error('download_failed', __('Download failed.'), $file->get_error_message());
 
-	$working_dir = $base . 'wp-content/upgrade/' . basename($plugin, '.php');
+	$working_dir = $wp_filesystem->get_base_dir(WP_CONTENT_DIR) . '/upgrade/' . basename($plugin, '.php');
 
 	// Clean up working directory
 	if ( $wp_filesystem->is_dir($working_dir) )
@@ -205,14 +205,14 @@
 
 	// Remove the existing plugin.
 	apply_filters('update_feedback', __('Removing the old version of the plugin'));
-	$plugin_dir = dirname($base . PLUGINDIR . "/$plugin");
+	$plugin_dir = dirname($base . "/$plugin");
 	$plugin_dir = trailingslashit($plugin_dir);
 	
 	// If plugin is in its own directory, recursively delete the directory.
-	if ( strpos($plugin, '/') && $plugin_dir != $base . PLUGINDIR . '/' ) //base check on if plugin includes directory seperator AND that its not the root plugin folder
+	if ( strpos($plugin, '/') && $plugin_dir != $base . '/' ) //base check on if plugin includes directory seperator AND that its not the root plugin folder
 		$deleted = $wp_filesystem->delete($plugin_dir, true);
 	else
-		$deleted = $wp_filesystem->delete($base . PLUGINDIR . "/$plugin");
+		$deleted = $wp_filesystem->delete($base . '/' . $plugin);
 
 	if ( !$deleted ) {
 		$wp_filesystem->delete($working_dir, true);
@@ -221,7 +221,7 @@
 
 	apply_filters('update_feedback', __('Installing the latest version'));
 	// Copy new version of plugin into place.
-	if ( !copy_dir($working_dir, $base . PLUGINDIR) ) {
+	if ( !copy_dir($working_dir, $base) ) {
 		//$wp_filesystem->delete($working_dir, true); //TODO: Uncomment? This DOES mean that the new files are available in the upgrade folder if it fails.
 		return new WP_Error('install_failed', __('Installation failed'));
 	}
Index: wp-admin/includes/class-wp-filesystem-ftpext.php
===================================================================
--- wp-admin/includes/class-wp-filesystem-ftpext.php	(revision 7987)
+++ wp-admin/includes/class-wp-filesystem-ftpext.php	(working copy)
@@ -84,12 +84,15 @@
 		$this->permission = $perm;
 	}
 
-	function find_base_dir($base = '.',$echo = false, $loop = false) {
+	function find_base_dir($path = false, $base = '.',$echo = false, $loop = false) {
+		if (!$path)
+			$path = ABSPATH;
+		
 		//Sanitize the Windows path formats, This allows easier conparison and aligns it to FTP output.
-		$abspath = str_replace('\\','/',ABSPATH); //windows: Straighten up the paths..
-		if( strpos($abspath, ':') ){ //Windows, Strip out the driveletter
-			if( preg_match("|.{1}\:(.+)|i", $abspath, $mat) )
-				$abspath = $mat[1];
+		$path = str_replace('\\','/',$path); //windows: Straighten up the paths..
+		if( strpos($path, ':') ){ //Windows, Strip out the driveletter
+			if( preg_match("|.{1}\:(.+)|i", $path, $mat) )
+				$path = $mat[1];
 		}
 	
 		//Set up the base directory (Which unless specified, is the current one)
@@ -97,9 +100,9 @@
 		$base = trailingslashit($base);
 
 		//Can we see the Current directory as part of the ABSPATH?
-		$location = strpos($abspath, $base);
+		$location = strpos($path, $base);
 		if( false !== $location ) {
-			$newbase = path_join($base, substr($abspath, $location + strlen($base)));
+			$newbase = path_join($base, substr($path, $location + strlen($base)));
 
 			if( false !== $this->chdir($newbase) ){ //chdir sometimes returns null under certain circumstances, even when its changed correctly, FALSE will be returned if it doesnt change correctly.
 				if($echo) printf( __('Changing to %s') . '<br/>', $newbase );
@@ -116,7 +119,7 @@
 		//Get a list of the files in the current directory, See if we can locate where we are in the folder stucture.
 		$files = $this->dirlist($base);
 		
-		$arrPath = explode('/', $abspath);
+		$arrPath = explode('/', $path);
 		foreach($arrPath as $key){
 			//Working from /home/ to /user/ to /wordpress/ see if that file exists within the current folder, 
 			// If its found, change into it and follow through looking for it. 
@@ -126,7 +129,7 @@
 				//Lets try that folder:
 				$folder = path_join($base, $key);
 				if($echo) printf( __('Changing to %s') . '<br/>', $folder );
-				$ret = $this->find_base_dir( $folder, $echo, $loop);
+				$ret = $this->find_base_dir( $path, $folder, $echo, $loop);
 				if( $ret )
 					return $ret;
 			}
@@ -139,14 +142,14 @@
 		if( $loop )
 			return false;//Prevent tihs function looping again.
 		//As an extra last resort, Change back to / if the folder wasnt found. This comes into effect when the CWD is /home/user/ but WP is at /var/www/.... mainly dedicated setups.
-		return $this->find_base_dir('/', $echo, true); 
+		return $this->find_base_dir($path, '/', $echo, true); 
 	}
 
-	function get_base_dir($base = '.', $echo = false){
+	function get_base_dir($path = false, $base = '.', $echo = false){
 		if( defined('FTP_BASE') )
 			$this->wp_base = FTP_BASE;
 		if( empty($this->wp_base) )
-			$this->wp_base = $this->find_base_dir($base,$echo);
+			$this->wp_base = $this->find_base_dir($path, $base, $echo);
 		return $this->wp_base;
 	}
 	function get_contents($file,$type='',$resumepos=0){
Index: wp-admin/includes/class-wp-filesystem-direct.php
===================================================================
--- wp-admin/includes/class-wp-filesystem-direct.php	(revision 7987)
+++ wp-admin/includes/class-wp-filesystem-direct.php	(working copy)
@@ -13,10 +13,12 @@
 	function setDefaultPermissions($perm){
 		$this->permission = $perm;
 	}
-	function find_base_dir($base = '.', $echo = false){
-		return str_replace('\\','/',ABSPATH);
+	function find_base_dir($path = false, $base = '.', $echo = false){
+		if (!$path)
+			$path = ABSPATH;
+		return str_replace('\\','/',$path);
 	}
-	function get_base_dir($base = '.', $echo = false){
+	function get_base_dir($path = false, $base = '.', $echo = false){
 		return $this->find_base_dir($base, $echo);
 	}
 	function get_contents($file){
Index: wp-admin/includes/upgrade.php
===================================================================
--- wp-admin/includes/upgrade.php	(revision 7987)
+++ wp-admin/includes/upgrade.php	(working copy)
@@ -1,7 +1,7 @@
 <?php
 
-if ( file_exists(ABSPATH . 'wp-content/install.php') )
-	require (ABSPATH . 'wp-content/install.php');
+if ( file_exists(WP_CONTENT_DIR . '/install.php') )
+	require (WP_CONTENT_DIR . '/install.php');
 require_once(ABSPATH . 'wp-admin/includes/admin.php');
 require_once(ABSPATH . 'wp-admin/includes/schema.php');
 
@@ -1086,7 +1086,7 @@
 
 function make_site_theme_from_oldschool($theme_name, $template) {
 	$home_path = get_home_path();
-	$site_dir = ABSPATH . "wp-content/themes/$template";
+	$site_dir = WP_CONTENT_DIR . "/themes/$template";
 
 	if (! file_exists("$home_path/index.php"))
 		return false;
@@ -1105,7 +1105,7 @@
 		if ($oldfile == 'index.php') { // Check to make sure it's not a new index
 			$index = implode('', file("$oldpath/$oldfile"));
 			if (strpos($index, 'WP_USE_THEMES') !== false) {
-				if (! @copy(ABSPATH . 'wp-content/themes/default/index.php', "$site_dir/$newfile"))
+				if (! @copy(WP_CONTENT_DIR . '/themes/default/index.php', "$site_dir/$newfile"))
 					return false;
 				continue; // Don't copy anything
 				}
@@ -1153,8 +1153,8 @@
 }
 
 function make_site_theme_from_default($theme_name, $template) {
-	$site_dir = ABSPATH . "wp-content/themes/$template";
-	$default_dir = ABSPATH . 'wp-content/themes/default';
+	$site_dir = WP_CONTENT_DIR . "/themes/$template";
+	$default_dir = WP_CONTENT_DIR . '/themes/default';
 
 	// Copy files from the default theme to the site theme.
 	//$files = array('index.php', 'comments.php', 'comments-popup.php', 'footer.php', 'header.php', 'sidebar.php', 'style.css');
@@ -1211,7 +1211,7 @@
 	// Name the theme after the blog.
 	$theme_name = __get_option('blogname');
 	$template = sanitize_title($theme_name);
-	$site_dir = ABSPATH . "wp-content/themes/$template";
+	$site_dir = WP_CONTENT_DIR . "/themes/$template";
 
 	// If the theme already exists, nothing to do.
 	if ( is_dir($site_dir)) {
@@ -1219,7 +1219,7 @@
 	}
 
 	// We must be able to write to the themes dir.
-	if (! is_writable(ABSPATH . "wp-content/themes")) {
+	if (! is_writable(WP_CONTENT_DIR . "/themes")) {
 		return false;
 	}
 
Index: wp-admin/update.php
===================================================================
--- wp-admin/update.php	(revision 7987)
+++ wp-admin/update.php	(working copy)
@@ -117,7 +117,7 @@
 	if ( is_wp_error($result) ) {
 		show_message($result);
 	} else {
-		//Result is the new plugin file relative to PLUGINDIR
+		//Result is the new plugin file relative to WP_PLUGIN_DIR
 		show_message(__('Plugin upgraded successfully'));	
 		if( $result && $was_activated ){
 			show_message(__('Attempting reactivation of the plugin'));
@@ -164,7 +164,7 @@
 			echo '<p>' . __('Plugin failed to reactivate due to a fatal error.') . '</p>';
 			error_reporting( E_ALL ^ E_NOTICE );
 			@ini_set('display_errors', true); //Ensure that Fatal errors are displayed.
-			include(ABSPATH . PLUGINDIR . '/' . $plugin);
+			include(WP_PLUGIN_DIR . '/' . $plugin);
 		}
 		echo "</body></html>";
 	}
Index: wp-admin/admin.php
===================================================================
--- wp-admin/admin.php	(revision 7987)
+++ wp-admin/admin.php	(working copy)
@@ -58,7 +58,7 @@
 			wp_die(__('Invalid plugin page'));
 		}
 
-		if (! ( file_exists(ABSPATH . PLUGINDIR . "/$plugin_page") && is_file( ABSPATH . PLUGINDIR . "/$plugin_page") ) )
+		if (! ( file_exists(WP_PLUGIN_DIR . "/$plugin_page") && is_file(WP_PLUGIN_DIR . "/$plugin_page") ) )
 			wp_die(sprintf(__('Cannot load %s.'), htmlentities($plugin_page)));
 
 		do_action('load-' . $plugin_page);
@@ -66,7 +66,7 @@
 		if (! isset($_GET['noheader']))
 			require_once(ABSPATH . 'wp-admin/admin-header.php');
 
-		include(ABSPATH . PLUGINDIR . "/$plugin_page");
+		include(WP_PLUGIN_DIR . "/$plugin_page");
 	}
 
 	include(ABSPATH . 'wp-admin/admin-footer.php');
Index: wp-admin/import/mt.php
===================================================================
--- wp-admin/import/mt.php	(revision 7987)
+++ wp-admin/import/mt.php	(working copy)
@@ -179,7 +179,7 @@
 
 	function select_authors() {
 		if ( $_POST['upload_type'] === 'ftp' ) {
-			$file['file'] = ABSPATH . 'wp-content/mt-export.txt';
+			$file['file'] = WP_CONTENT_DIR . '/mt-export.txt';
 			if ( !file_exists($file['file']) )
 				$file['error'] = __('<code>mt-export.txt</code> does not exist');
 		} else {
@@ -426,7 +426,7 @@
 	function import() {
 		$this->id = (int) $_GET['id'];
 		if ( $this->id == 0 )
-			$this->file = ABSPATH . 'wp-content/mt-export.txt';
+			$this->file = WP_CONTENT_DIR . '/mt-export.txt';
 		else
 			$this->file = get_attached_file($this->id);
 		$this->get_authors_from_post();
Index: wp-admin/plugins.php
===================================================================
--- wp-admin/plugins.php	(revision 7987)
+++ wp-admin/plugins.php	(working copy)
@@ -18,7 +18,7 @@
 			wp_die($valid);
 		error_reporting( E_ALL ^ E_NOTICE );
 		@ini_set('display_errors', true); //Ensure that Fatal errors are displayed.
-		include(ABSPATH . PLUGINDIR . '/' . $plugin);
+		include(WP_PLUGIN_DIR . '/' . $plugin);
 	} elseif ( 'deactivate' == $_GET['action'] ) {
 		check_admin_referer('deactivate-plugin_' . $_GET['plugin']);
 		deactivate_plugins($_GET['plugin']);
@@ -123,7 +123,7 @@
 		} else {
 			$action_links[] = "<a href='" . wp_nonce_url("plugins.php?action=activate&amp;plugin=$plugin_file", 'activate-plugin_' . $plugin_file) . "' title='".__('Activate this plugin')."' class='edit'>".__('Activate')."</a>";
 		}
-		if ( current_user_can('edit_plugins') && is_writable(ABSPATH . PLUGINDIR . '/' . $plugin_file) )
+		if ( current_user_can('edit_plugins') && is_writable(WP_PLUGIN_DIR . '/' . $plugin_file) )
 			$action_links[] = "<a href='plugin-editor.php?file=$plugin_file' title='".__('Open this file in the Plugin Editor')."' class='edit'>".__('Edit')."</a>";
 
 		$plugins_allowedtags = array('a' => array('href' => array(),'title' => array()),'abbr' => array('title' => array()),'acronym' => array('title' => array()),'code' => array(),'em' => array(),'strong' => array());
@@ -166,11 +166,11 @@
 }
 ?>
 
-<p><?php printf(__('If something goes wrong with a plugin and you can&#8217;t use WordPress, delete or rename that file in the <code>%s</code> directory and it will be automatically deactivated.'), PLUGINDIR); ?></p>
+<p><?php printf(__('If something goes wrong with a plugin and you can&#8217;t use WordPress, delete or rename that file in the <code>%s</code> directory and it will be automatically deactivated.'), WP_PLUGIN_DIR); ?></p>
 
 <h2><?php _e('Get More Plugins'); ?></h2>
 <p><?php _e('You can find additional plugins for your site in the <a href="http://wordpress.org/extend/plugins/">WordPress plugin directory</a>.'); ?></p>
-<p><?php printf(__('To install a plugin you generally just need to upload the plugin file into your <code>%s</code> directory. Once a plugin is uploaded, you may activate it here.'), PLUGINDIR); ?></p>
+<p><?php printf(__('To install a plugin you generally just need to upload the plugin file into your <code>%s</code> directory. Once a plugin is uploaded, you may activate it here.'), WP_PLUGIN_DIR); ?></p>
 
 </div>
 
Index: wp-admin/plugin-editor.php
===================================================================
--- wp-admin/plugin-editor.php	(revision 7987)
+++ wp-admin/plugin-editor.php	(working copy)
@@ -15,7 +15,7 @@
 	$file = $plugin_files[0];
 
 $file = validate_file_to_edit($file, $plugin_files);
-$real_file = get_real_file_to_edit( PLUGINDIR . "/$file");
+$real_file = WP_PLUGIN_DIR . '/' . $file;
 
 switch($action) {
 
@@ -68,7 +68,7 @@
 
 	require_once('admin-header.php');
 
-	update_recently_edited(PLUGINDIR . "/$file");
+	update_recently_edited(WP_PLUGIN_DIR . '/' . $file);
 
 	if ( ! is_file($real_file) )
 		$error = 1;

