diff --git Gruntfile.js Gruntfile.js
index 0dc8b7f..9a3e4a2 100644
--- Gruntfile.js
+++ Gruntfile.js
@@ -12,6 +12,10 @@ module.exports = function(grunt) {
  		BANNER_TEXT = '/*! This file is auto-generated */',
 		autoprefixer = require( 'autoprefixer' ),
 		phpUnitWatchGroup = grunt.option( 'group' ),
+		themeFiles = [
+			'wp-content/themes/index.php',
+			'wp-content/themes/twenty*/**'
+		],
 		buildFiles = [
 			'*.php',
 			'*.txt',
@@ -19,12 +23,10 @@ module.exports = function(grunt) {
 			'wp-includes/**', // Include everything in wp-includes.
 			'wp-admin/**', // Include everything in wp-admin.
 			'wp-content/index.php',
-			'wp-content/themes/index.php',
-			'wp-content/themes/twenty*/**',
 			'wp-content/plugins/index.php',
 			'wp-content/plugins/hello.php',
 			'wp-content/plugins/akismet/**'
-		],
+		].concat( themeFiles ),
 		cleanFiles = [];
 
 	buildFiles.forEach( function( buildFile ) {
@@ -124,6 +126,41 @@ module.exports = function(grunt) {
 				]
 			}
 		},
+		symlink: {
+			expanded: {
+				files: [
+				  {
+				    expand: true,
+				    overwrite: true,
+				    cwd: SOURCE_DIR,
+				    src: [
+							'wp-admin/*',
+							'wp-content/uploads/',
+							'wp-content/index.php',
+							'wp-content/plugins/*',
+							'wp-includes/*',
+							'*.php',
+							'*.txt',
+							'*.html',
+							'!wp-admin/css',
+							'!wp-content/themes',
+							'!wp-includes/css',
+							'!wp-includes/version.php', // Exclude version.php
+							'!wp-includes/formatting.php', // Exclude formatting.php
+							'!wp-includes/embed.php', // Exclude formatting.php
+							'!index.php', '!wp-admin/index.php',
+							'!_index.php', '!wp-admin/_index.php'
+						],
+				    dest: BUILD_DIR
+				  },
+					{
+						'build/wp-config-sample.php': ['wp-config-sample.php'],
+						'build/index.php': ['src/_index.php'],
+						'build/wp-admin/index.php': ['src/wp-admin/_index.php']
+					}
+				]
+			}
+		},
 		copy: {
 			files: {
 				files: [
@@ -135,6 +172,8 @@ module.exports = function(grunt) {
 							'!js/**', // JavaScript is extracted into separate copy tasks.
 							'!.{svn,git}', // Exclude version control folders.
 							'!wp-includes/version.php', // Exclude version.php
+							'!wp-admin/css/**/*', // Exclude the CSS
+							'!wp-includes/css/**/*', // Exclude the CSS
 							'!index.php', '!wp-admin/index.php',
 							'!_index.php', '!wp-admin/_index.php'
 						] ),
@@ -150,6 +189,23 @@ module.exports = function(grunt) {
 					}
 				]
 			},
+			css: {
+				dot: true,
+				expand: true,
+				cwd: SOURCE_DIR,
+				src: [
+					'wp-admin/**/*.css',
+					'wp-includes/**/*.css'
+				],
+				dest: BUILD_DIR
+			},
+			themes: {
+				dot: true,
+				expand: true,
+				cwd: SOURCE_DIR,
+				src: themeFiles,
+				dest: BUILD_DIR
+			},
 			'npm-packages': {
 				files: {
 					'build/wp-includes/js/backbone.js': ['./node_modules/backbone/backbone.js'],
@@ -338,6 +394,12 @@ module.exports = function(grunt) {
 				src: SOURCE_DIR + 'wp-includes/version.php',
 				dest: BUILD_DIR + 'wp-includes/version.php'
 			},
+			'php-buildFiles': {
+				files: {
+					'build/wp-includes/formatting.php': ['src/wp-includes/formatting.php'],
+					'build/wp-includes/embed.php': ['src/wp-includes/embed.php'],
+				}
+			},
 			dynamic: {
 				dot: true,
 				expand: true,
@@ -1153,7 +1215,7 @@ module.exports = function(grunt) {
 
 	grunt.registerTask( 'watch', function() {
 		if ( ! this.args.length || this.args.indexOf( 'webpack' ) > -1 ) {
-			grunt.task.run( 'build' );
+			grunt.task.run( 'build:dev' );
 		}
 
 		if ( 'watch:phpunit' === grunt.cli.tasks[ 0 ] || 'undefined' !== typeof grunt.option( 'phpunit' ) ) {
@@ -1281,6 +1343,13 @@ module.exports = function(grunt) {
 		}
 	} );
 
+	grunt.registerTask( 'uglify:all', [
+		'uglify:core',
+		'uglify:embed',
+		'uglify:jqueryui',
+		'uglify:imgareaselect'
+	] );
+
 	grunt.registerTask( 'copy:js', [
 		'copy:npm-packages',
 		'copy:vendor-js',
@@ -1288,11 +1357,20 @@ module.exports = function(grunt) {
 		'copy:includes-js'
 	] );
 
-	grunt.registerTask( 'uglify:all', [
-		'uglify:core',
-		'uglify:embed',
-		'uglify:jqueryui',
-		'uglify:imgareaselect'
+	grunt.registerTask( 'copyOrSymlink', function() {
+		var task = grunt.option( 'symlink' ) === true ? 'symlink:expanded' : 'copy:files';
+		grunt.task.run( task );
+	} );
+
+	grunt.registerTask( 'copy:all', [
+		'copyOrSymlink',
+		'copy:php-buildFiles',
+		'copy:css',
+		'copy:themes',
+		'copy:wp-admin-css-compat-rtl',
+		'copy:wp-admin-css-compat-min',
+		'copy:version',
+		'copy:js'
 	] );
 
 	grunt.registerTask( 'build:tinymce', [
@@ -1312,16 +1390,26 @@ module.exports = function(grunt) {
 		'jsvalidate:build'
 	] );
 
-	grunt.registerTask( 'copy:all', [
-		'copy:files',
-		'copy:wp-admin-css-compat-rtl',
-		'copy:wp-admin-css-compat-min',
-		'copy:version',
-		'copy:js'
-	] );
+	grunt.registerTask( 'clean-all', function() {
+		if ( grunt.option( 'symlink' ) === true ) {
+			// clean all symlinks
+			try {
+				var delSymlinks = require('del-symlinks');
+
+				var result = delSymlinks.sync(['./build/**']);
+				grunt.log.writeln( '>> ' + result.length + ' symlinks cleaned.' );
+			} catch ( e ) {
+				grunt.verbose.error( 'Error:', e.message );
+				grunt.fail.warn( "Failed to delete symlinks. If you're on Windows, " +
+												 "running as administrator could resolve this issue.");
+			}
+		}
+
+		grunt.task.run( 'clean:all' );
+	} );
 
-	grunt.registerTask( 'build', [
-		'clean:all',
+	grunt.registerTask( 'build:all', [
+		'clean-all',
 		'webpack:dev',
 		'copy:all',
 		'file_append',
@@ -1339,6 +1427,27 @@ module.exports = function(grunt) {
 		'jsvalidate:build'
 	] );
 
+	grunt.registerTask( 'build', function() {
+		grunt.task.run( 'build:all' );
+	} );
+
+	grunt.registerTask( 'build:dev', function() {
+		try {
+			// Try creating a symlink.
+			fs.symlinkSync( './symlink', './symlinktest');
+			grunt.option( 'symlink', true );
+			// If succeeded, remove it again.
+			fs.unlinkSync( './symlinktest' );
+		} catch( e ) {
+			grunt.verbose.error( 'Error:', e.message );
+			grunt.log.error( "Failed to delete symlinks. Falling back to copying " +
+											 "files instead. If you're on Windows, " +
+											 "running as administrator could resolve this issue.");
+		} finally {
+			grunt.task.run( 'build:all' );
+		}
+	} );
+
 	grunt.registerTask( 'prerelease', [
 		'precommit:php',
 		'precommit:js',
diff --git package-lock.json package-lock.json
index 3f81fc7..3cbb62c 100644
--- package-lock.json
+++ package-lock.json
@@ -653,7 +653,6 @@
 			"version": "1.0.2",
 			"resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
 			"integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
-			"dev": true,
 			"requires": {
 				"array-uniq": "^1.0.1"
 			}
@@ -661,8 +660,7 @@
 		"array-uniq": {
 			"version": "1.0.3",
 			"resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
-			"integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
-			"dev": true
+			"integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY="
 		},
 		"array-unique": {
 			"version": "0.2.1",
@@ -788,8 +786,7 @@
 		"balanced-match": {
 			"version": "1.0.0",
 			"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
-			"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
-			"dev": true
+			"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
 		},
 		"base": {
 			"version": "0.11.2",
@@ -1040,7 +1037,6 @@
 			"version": "1.1.11",
 			"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
 			"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-			"dev": true,
 			"requires": {
 				"balanced-match": "^1.0.0",
 				"concat-map": "0.0.1"
@@ -1825,8 +1821,7 @@
 		"concat-map": {
 			"version": "0.0.1",
 			"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-			"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
-			"dev": true
+			"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
 		},
 		"concat-stream": {
 			"version": "1.6.1",
@@ -2368,6 +2363,17 @@
 				}
 			}
 		},
+		"del-symlinks": {
+			"version": "0.1.2",
+			"resolved": "https://registry.npmjs.org/del-symlinks/-/del-symlinks-0.1.2.tgz",
+			"integrity": "sha1-rE/ePWow7Xk23QMH8APLtTUkP2U=",
+			"requires": {
+				"get-symlinks": "^1.0.0",
+				"object-assign": "^4.1.0",
+				"pify": "^2.3.0",
+				"pinkie-promise": "^2.0.1"
+			}
+		},
 		"delayed-stream": {
 			"version": "1.0.0",
 			"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
@@ -3497,8 +3503,7 @@
 		"fs.realpath": {
 			"version": "1.0.0",
 			"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
-			"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
-			"dev": true
+			"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
 		},
 		"fsevents": {
 			"version": "1.1.3",
@@ -4505,6 +4510,17 @@
 			"integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
 			"dev": true
 		},
+		"get-symlinks": {
+			"version": "1.0.2",
+			"resolved": "https://registry.npmjs.org/get-symlinks/-/get-symlinks-1.0.2.tgz",
+			"integrity": "sha1-sOYpxRHeGYGd08dskruNLi9CPGM=",
+			"requires": {
+				"globby": "^6.0.0",
+				"is-symbolic-link": "^1.0.3",
+				"object-assign": "^4.1.0",
+				"pinkie-promise": "^2.0.1"
+			}
+		},
 		"get-value": {
 			"version": "2.0.6",
 			"resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
@@ -4642,7 +4658,6 @@
 			"version": "6.1.0",
 			"resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
 			"integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
-			"dev": true,
 			"requires": {
 				"array-union": "^1.0.1",
 				"glob": "^7.0.3",
@@ -4655,7 +4670,6 @@
 					"version": "7.1.2",
 					"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
 					"integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
-					"dev": true,
 					"requires": {
 						"fs.realpath": "^1.0.0",
 						"inflight": "^1.0.4",
@@ -4669,7 +4683,6 @@
 					"version": "3.0.4",
 					"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
 					"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
-					"dev": true,
 					"requires": {
 						"brace-expansion": "^1.1.7"
 					}
@@ -4976,6 +4989,12 @@
 				"grunt-lib-phantomjs": "^1.0.0"
 			}
 		},
+		"grunt-contrib-symlink": {
+			"version": "1.0.0",
+			"resolved": "https://registry.npmjs.org/grunt-contrib-symlink/-/grunt-contrib-symlink-1.0.0.tgz",
+			"integrity": "sha1-yDYWwDVxGmwAYqKBDPHHf/xr7Ss=",
+			"dev": true
+		},
 		"grunt-contrib-uglify": {
 			"version": "2.0.0",
 			"resolved": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-2.0.0.tgz",
@@ -5883,7 +5902,6 @@
 			"version": "1.0.6",
 			"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
 			"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
-			"dev": true,
 			"requires": {
 				"once": "^1.3.0",
 				"wrappy": "1"
@@ -5892,8 +5910,7 @@
 		"inherits": {
 			"version": "2.0.3",
 			"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
-			"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
-			"dev": true
+			"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
 		},
 		"ini": {
 			"version": "1.3.5",
@@ -6414,6 +6431,14 @@
 			"integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=",
 			"dev": true
 		},
+		"is-symbolic-link": {
+			"version": "1.0.3",
+			"resolved": "https://registry.npmjs.org/is-symbolic-link/-/is-symbolic-link-1.0.3.tgz",
+			"integrity": "sha1-e9PWyeX+lONCpHRQRIcW8MJUOIM=",
+			"requires": {
+				"pinkie-promise": "^2.0.1"
+			}
+		},
 		"is-tar": {
 			"version": "1.0.0",
 			"resolved": "https://registry.npmjs.org/is-tar/-/is-tar-1.0.0.tgz",
@@ -7989,8 +8014,7 @@
 		"object-assign": {
 			"version": "4.1.1",
 			"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
-			"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
-			"dev": true
+			"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
 		},
 		"object-copy": {
 			"version": "0.1.0",
@@ -8144,7 +8168,6 @@
 			"version": "1.4.0",
 			"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
 			"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
-			"dev": true,
 			"requires": {
 				"wrappy": "1"
 			}
@@ -8406,8 +8429,7 @@
 		"path-is-absolute": {
 			"version": "1.0.1",
 			"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
-			"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
-			"dev": true
+			"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
 		},
 		"path-is-inside": {
 			"version": "1.0.2",
@@ -8502,20 +8524,17 @@
 		"pify": {
 			"version": "2.3.0",
 			"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
-			"integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
-			"dev": true
+			"integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
 		},
 		"pinkie": {
 			"version": "2.0.4",
 			"resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
-			"integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
-			"dev": true
+			"integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA="
 		},
 		"pinkie-promise": {
 			"version": "2.0.1",
 			"resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
 			"integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
-			"dev": true,
 			"requires": {
 				"pinkie": "^2.0.0"
 			}
@@ -11721,8 +11740,7 @@
 		"wrappy": {
 			"version": "1.0.2",
 			"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-			"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
-			"dev": true
+			"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
 		},
 		"xmlbuilder": {
 			"version": "8.2.2",
diff --git package.json package.json
index 06a5a5e..c91331c 100644
--- package.json
+++ package.json
@@ -15,6 +15,7 @@
 	"devDependencies": {
 		"autoprefixer": "^6.5.1",
 		"check-node-version": "3.2.0",
+		"del-symlinks": "0.1.2",
 		"grunt": "1.0.2",
 		"grunt-banner": "^0.6.0",
 		"grunt-contrib-clean": "~1.0.0",
@@ -25,6 +26,7 @@
 		"grunt-contrib-imagemin": "~1.0.0",
 		"grunt-contrib-jshint": "~1.0.0",
 		"grunt-contrib-qunit": "^1.2.0",
+		"grunt-contrib-symlink": "1.0.0",
 		"grunt-contrib-uglify": "~2.0.0",
 		"grunt-contrib-watch": "~1.0.0",
 		"grunt-file-append": "0.0.7",
