diff --git a/v14/automation/clients/jobs_helper.py b/v14/automation/clients/jobs_helper.py
index cd2cbb8..a9a82d2 100755
--- a/v14/automation/clients/jobs_helper.py
+++ b/v14/automation/clients/jobs_helper.py
@@ -98,7 +98,8 @@
 def GetP4BenchmarksDirCommand(p4_snapshot=""):
   p4_port = "perforce2:2666"
   p4_paths = []
-  p4_paths.append(("//depot2/third_party/android_bench/v2_0/...", "gcctools/chromeos/v14/third_party/android_bench/v2_0/..."))
+  p4_paths.append(("//depot2/third_party/android_bench/v2_0/...",
+                   "third_party/android_bench/v2_0/..."))
   p4_revision = 1
   command = GetP4Command(p4_port, p4_paths, p4_revision, p4_checkout_dir, p4_snapshot)
   return command
diff --git a/v14/build_benchmarks.py b/v14/build_benchmarks.py
index 3171160..2d78cec 100755
--- a/v14/build_benchmarks.py
+++ b/v14/build_benchmarks.py
@@ -47,10 +47,10 @@
 
 # Commands to build CPU benchmarks.
 
-CPU_BUILDCMD_CLEAN = "cd /usr/local/toolchain_root/v14/third_party/android_bench/v2_0/CLOSED_SOURCE/%s;\
+CPU_BUILDCMD_CLEAN = "cd /usr/local/toolchain_root/third_party/android_bench/v2_0/CLOSED_SOURCE/%s;\
 python ../../scripts/bench.py --toolchain=/usr/bin --action=clean;"
 
-CPU_BUILDCMD_BUILD = "cd /usr/local/toolchain_root/v14/third_party/android_bench/v2_0/CLOSED_SOURCE/%s;\
+CPU_BUILDCMD_BUILD = "cd /usr/local/toolchain_root/third_party/android_bench/v2_0/CLOSED_SOURCE/%s;\
 python ../../scripts/bench.py --toolchain=/usr/bin --add_cflags=%s --add_ldflags=%s --makeopts=%s --action=build"
 
 
@@ -104,7 +104,9 @@
   parser.add_option("-c", "--chromeos_root", dest="chromeos_root",
                     help="Target directory for ChromeOS installation.")
   parser.add_option("-t", "--toolchain_root", dest="toolchain_root",
-                    help="The gcctools directory of your P4 checkout.")
+                    help="This is obsolete. Do not use.")
+  parser.add_option("-r", "--third_party", dest="third_party",
+                    help="The third_party dir containing android benchmarks.")
   parser.add_option("-C", "--clean", dest="clean", action="store_true",
                     default=False, help="Clean up build."),
   parser.add_option("-B", "--build", dest="build", action="store_true",
@@ -141,12 +143,15 @@
   if options.chromeos_root is None:
     Usage(parser, "--chromeos_root must be set")
 
-  if options.toolchain_root is None:
-    Usage(parser, "--toolchain_root must be set")
-
   if options.board is None:
     Usage(parser, "--board must be set")
 
+  if options.toolchain_root:
+    logger.GetLogger().LogWarning("--toolchain_root should not be set")
+
+  options.chromeos_root = os.path.expanduser(options.chromeos_root)
+  options.workdir = os.path.expanduser(options.workdir)
+
   found_err = 0
   retval = 0
   version_dir = utils.GetRoot(argv[0])[0]
@@ -155,14 +160,21 @@
     if re.match('chromeos/cpu', arg):
       comps = re.split('/', arg)
       benchname = comps[2]
+
+      tec_options = []
+      if options.third_party:
+        tec_options.append("--third_party=%s" % options.third_party)
       if options.clean:
-        retval = build_chromeos.ExecuteCommandInChroot(options.chromeos_root, options.toolchain_root,
-                                              CPU_BUILDCMD_CLEAN % benchname)
+        retval = build_chromeos.ExecuteCommandInChroot(options.chromeos_root,
+                                              CPU_BUILDCMD_CLEAN % benchname,
+                                              tec_options=tec_options
+                                              )
         utils.AssertError(retval == 0, "clean of benchmark %s failed." % arg)
       if options.build:
-        retval = build_chromeos.ExecuteCommandInChroot(options.chromeos_root, options.toolchain_root,
+        retval = build_chromeos.ExecuteCommandInChroot(options.chromeos_root,
                                               CPU_BUILDCMD_BUILD % (benchname, options.cflags,
-                                              options.ldflags, options.makeopts))
+                                              options.ldflags, options.makeopts),
+                                              tec_options=tec_options)
         utils.AssertError(retval == 0, "Build of benchmark %s failed." % arg)
       if retval == 0 and (options.build or options.only_copy):
         benchdir = ('%s/third_party/android_bench/v2_0/CLOSED_SOURCE/%s' %
diff --git a/v14/build_chrome_browser.py b/v14/build_chrome_browser.py
index 267a182..df6a4a1 100755
--- a/v14/build_chrome_browser.py
+++ b/v14/build_chrome_browser.py
@@ -11,6 +11,7 @@
 __author__ = "raymes@google.com (Raymes Khoury)"
 
 import optparse
+import os
 import sys
 from utils import command_executer
 from utils import logger
@@ -26,7 +27,7 @@
   sys.exit(0)
 
 
-def Main():
+def Main(argv):
   """Build Chrome browser."""
   # Common initializations
   global cmd_executer
@@ -47,8 +48,10 @@
                     help="LDFLAGS for the ChromeOS packages")
   parser.add_option("--board", dest="board",
                     help="ChromeOS target board, e.g. x86-generic")
+  parser.add_option("--label", dest="label",
+                    help="Optional label to apply to the ChromeOS image.")
 
-  options = parser.parse_args()[0]
+  options = parser.parse_args(argv)[0]
 
   if options.chromeos_root is None:
     Usage(parser, "--chromeos_root must be set")
@@ -65,7 +68,7 @@
 
   # Emerge the browser
   ret = (build_chromeos.
-         ExecuteCommandInChroot(options.chromeos_root, None,
+         ExecuteCommandInChroot(options.chromeos_root,
                                 "CHROME_ORIGIN=SERVER_SOURCE %s "
                                 "CFLAGS=\"$(portageq-%s envvar CFLAGS) %s\" "
                                 "LDFLAGS=\"$(portageq-%s envvar LDFLAGS) %s\" "
@@ -79,17 +82,45 @@
 
   # Build image
   ret = (build_chromeos.
-         ExecuteCommandInChroot(options.chromeos_root, None,
+         ExecuteCommandInChroot(options.chromeos_root,
                                 utils.GetBuildImageCommand(options.board)))
 
   utils.AssertTrue(ret == 0, "build_image failed")
 
   # Mod image for test
   ret = (build_chromeos.
-         ExecuteCommandInChroot(options.chromeos_root, None,
+         ExecuteCommandInChroot(options.chromeos_root,
            utils.GetModImageForTestCommand(options.board)))
 
   utils.AssertTrue(ret == 0, "mod_image_for_test failed")
 
+  flags_file_name = "chrome_flags.txt"
+  flags_file_path = ("%s/src/build/images/%s/latest/%s" %
+                     (options.chromeos_root,
+                      options.board,
+                      flags_file_name))
+  flags_file = open(flags_file_path, "wb")
+  flags_file.write("CFLAGS=%s\n" % options.cflags)
+  flags_file.write("CXXFLAGS=%s\n" % options.cxxflags)
+  flags_file.write("LDFLAGS=%s\n" % options.ldflags)
+  flags_file.close()
+
+
+  if options.label:
+    image_dir_path = ("%s/src/build/images/%s/latest" %
+                  (options.chromeos_root,
+                   options.board))
+    real_image_dir_path = os.path.realpath(image_dir_path)
+    command = ("ln -sf -T %s %s/%s" %
+               (os.path.basename(real_image_dir_path),
+                os.path.dirname(real_image_dir_path),
+                options.label))
+
+    ret = cmd_executer.RunCommand(command)
+    utils.AssertExit(ret == 0,
+                     "Failed to apply symlink label %s" % options.label)
+
+  return ret
+
 if __name__ == "__main__":
-  Main()
+  Main(sys.argv)
diff --git a/v14/build_chromeos.py b/v14/build_chromeos.py
index 4dd57df..1443bdf 100755
--- a/v14/build_chromeos.py
+++ b/v14/build_chromeos.py
@@ -25,34 +25,24 @@
   sys.exit(0)
 
 #TODO(raymes): move this to a common utils file.
-def ExecuteCommandInChroot(chromeos_root, toolchain_root, command,
-                           return_output=False, full_mount=False):
+def ExecuteCommandInChroot(chromeos_root, command, toolchain_root=None,
+                           return_output=False, full_mount=False,
+                           tec_options=[]):
   """Executes a command in the chroot."""
   global cmd_executer
   cmd_executer = command_executer.GetCommandExecuter()
   chromeos_root = os.path.expanduser(chromeos_root)
 
-  if toolchain_root is None:
-    cmd_file = "enter_chroot.cmd"
-    cmd_file_path = chromeos_root + "/src/scripts/" + cmd_file
-    f = open(cmd_file_path, "w")
-    f.write(command)
-    logger.GetLogger().LogCmd(command)
-    f.close()
-    retval = cmd_executer.RunCommand("chmod +x " + cmd_file_path)
-    utils.AssertTrue(retval == 0, "chmod +x failed!")
-    return cmd_executer.RunCommand(chromeos_root +
-                                   "/src/scripts/enter_chroot.sh -- ./%s"
-                                      % cmd_file)
-  else:
+  argv = [os.path.dirname(os.path.abspath(__file__)) + "/tc_enter_chroot.py",
+          "--chromeos_root=" + chromeos_root,
+          command]
+  if toolchain_root:
     toolchain_root = os.path.expanduser(toolchain_root)
-    argv = [os.path.dirname(os.path.abspath(__file__)) + "/tc_enter_chroot.py",
-            "--chromeos_root=" + chromeos_root,
-            "--toolchain_root=" + toolchain_root,
-            "\n" + command]
-    if not full_mount:
-      argv.append("-s")
-    return tc_enter_chroot.Main(argv, return_output)
+    argv.append("--toolchain_root=" + toolchain_root)
+  if not full_mount:
+    argv.append("-s")
+  argv += tec_options
+  return tc_enter_chroot.Main(argv, return_output)
 
 
 def MakeChroot(chromeos_root, clobber_chroot=False):
@@ -97,6 +87,8 @@
                     help="LDFLAGS for the ChromeOS packages")
   parser.add_option("--board", dest="board",
                     help="ChromeOS target board, e.g. x86-generic")
+  parser.add_option("--label", dest="label",
+                    help="Optional label symlink to point to build dir.")
   parser.add_option("--vanilla", dest="vanilla",
                     default=False,
                     action="store_true",
@@ -129,7 +121,7 @@
     command += "; " + build_packages_env + " " + build_packages_command
     command += "&& " + build_image_command
     command += "&& " + mod_image_command
-    ret = ExecuteCommandInChroot(options.chromeos_root, None, command)
+    ret = ExecuteCommandInChroot(options.chromeos_root, command)
     return ret
 
   # Setup board
@@ -138,7 +130,7 @@
     # Run build_tc.py from binary package
     rootdir = utils.GetRoot(argv[0])[0]
     version_number = utils.GetRoot(rootdir)[1]
-    ret = ExecuteCommandInChroot(options.chromeos_root, None,
+    ret = ExecuteCommandInChroot(options.chromeos_root,
                                  utils.GetSetupBoardCommand(options.board,
                                    gcc_version="9999",
                                    binutils_version="9999",
@@ -149,7 +141,7 @@
                                  "because it already exists")
 
   # Build packages
-  ret = ExecuteCommandInChroot(options.chromeos_root, None,
+  ret = ExecuteCommandInChroot(options.chromeos_root,
                                "CFLAGS=\"$(portageq-%s envvar CFLAGS) %s\" "
                                "LDFLAGS=\"$(portageq-%s envvar LDFLAGS) %s\" "
                                "CXXFLAGS=\"$(portageq-%s envvar CXXFLAGS) %s\" "
@@ -165,17 +157,43 @@
   utils.AssertTrue(ret == 0, "build_packages failed")
 
   # Build image
-  ret = ExecuteCommandInChroot(options.chromeos_root, None,
+  ret = ExecuteCommandInChroot(options.chromeos_root,
                                build_image_command)
 
   utils.AssertTrue(ret == 0, "build_image failed")
 
   # Mod image for test
-  ret = ExecuteCommandInChroot(options.chromeos_root, None,
+  ret = ExecuteCommandInChroot(options.chromeos_root,
                                mod_image_command)
 
   utils.AssertTrue(ret == 0, "mod_image_for_test failed")
-  return 0
+
+  flags_file_name = "flags.txt"
+  flags_file_path = ("%s/src/build/images/%s/latest/%s" %
+                     (options.chromeos_root,
+                      options.board,
+                      flags_file_name))
+  flags_file = open(flags_file_path, "wb")
+  flags_file.write("CFLAGS=%s\n" % options.cflags)
+  flags_file.write("CXXFLAGS=%s\n" % options.cxxflags)
+  flags_file.write("LDFLAGS=%s\n" % options.ldflags)
+  flags_file.close()
+
+  if options.label:
+    image_dir_path = ("%s/src/build/images/%s/latest" %
+                  (options.chromeos_root,
+                   options.board))
+    real_image_dir_path = os.path.realpath(image_dir_path)
+    command = ("ln -sf -T %s %s/%s" %
+               (os.path.basename(real_image_dir_path),
+                os.path.dirname(real_image_dir_path),
+                options.label))
+
+    ret = cmd_executer.RunCommand(command)
+    utils.AssertExit(ret == 0,
+                     "Failed to apply symlink label %s" % options.label)
+
+  return ret
 
 if __name__ == "__main__":
   Main(sys.argv)
diff --git a/v14/build_tc.py b/v14/build_tc.py
index 60a03b7..ef48f36 100755
--- a/v14/build_tc.py
+++ b/v14/build_tc.py
@@ -111,7 +111,7 @@
 
   build_chromeos.MakeChroot(options.chromeos_root)
 
-  portage_flags = ""
+  portage_flags = "--oneshot"
   if options.binary == True:
     # FIXME(asharif): This should be using --usepkg but that was not working.
     portage_flags = "--usepkgonly"
@@ -215,10 +215,10 @@
   command = " -- sudo " + env
 
   if uninstall == True:
-    command += " crossdev " + tflag + target
+    command += "yes | crossdev " + tflag + target
     retval = build_chromeos.ExecuteCommandInChroot(chromeos_root,
-                                                         toolchain_root,
-                                                         command)
+                                                   command,
+                                                   toolchain_root)
     return retval
 
   if incremental_component == "binutils":
diff --git a/v14/image_chromeos.py b/v14/image_chromeos.py
index 0888386..522c897 100755
--- a/v14/image_chromeos.py
+++ b/v14/image_chromeos.py
@@ -29,7 +29,7 @@
   parser.print_help()
   sys.exit(0)
 
-def ImageChromeOS(argv):
+def Main(argv):
   """Build ChromeOS."""
   # Common initializations
   cmd_executer = command_executer.GetCommandExecuter()
diff --git a/v14/run_benchmarks.py b/v14/run_benchmarks.py
index 810e8a2..5928a1a 100755
--- a/v14/run_benchmarks.py
+++ b/v14/run_benchmarks.py
@@ -203,7 +203,7 @@
                     benchname + "/chromiumos_image.bin"
                    ]
       logger.GetLogger().LogOutput("Reimaging machine %s" % options.machine)
-      image_chromeos.ImageChromeOS(image_args)
+      image_chromeos.Main(image_args)
 
       logger.GetLogger().LogOutput("Running %s" % arg)
       retval = RunStartupBenchmark(options.chromeos_root,
@@ -221,7 +221,7 @@
                     benchname + "/chromiumos_image.bin"
                    ]
       logger.GetLogger().LogOutput("Reimaging machine %s" % options.machine)
-      image_chromeos.ImageChromeOS(image_args)
+      image_chromeos.Main(image_args)
 
       logger.GetLogger().LogOutput("Running %s" % arg)
       retval = RunBrowserBenchmark(options.chromeos_root, 
diff --git a/v14/run_dejagnu.py b/v14/run_dejagnu.py
index b124e42..9099733 100755
--- a/v14/run_dejagnu.py
+++ b/v14/run_dejagnu.py
@@ -67,14 +67,16 @@
   # Emerge DejaGNU
   # Remove the dev-tcltk manifest which is currently incorrect
   ret = (build_chromeos.
-         ExecuteCommandInChroot(options.chromeos_root, options.toolchain_root,
+         ExecuteCommandInChroot(options.chromeos_root,
                                 "rm -f ~/trunk/src/third_party/portage/"
-                                "dev-tcltk/expect/Manifest"))
+                                "dev-tcltk/expect/Manifest"),
+                                options.toolchain_root)
   utils.AssertExit(ret == 0, "Failed to remove incorrect manifest")
 
   ret = (build_chromeos.
-         ExecuteCommandInChroot(options.chromeos_root, options.toolchain_root,
-                                "sudo emerge -u dejagnu"))
+         ExecuteCommandInChroot(options.chromeos_root,
+                                "sudo emerge -u dejagnu"),
+                                options.toolchain_root)
   utils.AssertExit(ret == 0, "Failed to emerge dejagnu")
 
   # Find the toolchain objects directory
@@ -110,21 +112,23 @@
 
   # Run DejaGNU
   ret = (build_chromeos.
-         ExecuteCommandInChroot(options.chromeos_root, options.toolchain_root,
+         ExecuteCommandInChroot(options.chromeos_root,
                                 "%s ; %s ; %s && cd %s && %s ; %s" %
                                 (common, cleanup, init, gcc_build_dir,
-                                 dejagnu_run, cleanup), full_mount=True))
+                                 dejagnu_run, cleanup), full_mount=True),
+                                options.toolchain_root)
   utils.AssertWarning(ret == 0, "Failed to run DejaGNU tests successfully")
 
   # Copy results to a not-so-deep location
   results_dir = "%s/gcc/testsuite/" % gcc_build_dir
   new_results_dir = "/usr/local/toolchain_root/output/dejagnu/"
   ret = (build_chromeos.
-         ExecuteCommandInChroot(options.chromeos_root, options.toolchain_root,
+         ExecuteCommandInChroot(options.chromeos_root,
                                 "mkdir -p %s ; cp %s/g++/g++.log %s ; "
                                 "cp %s/gcc/gcc.log %s" %
                                 (new_results_dir, results_dir, new_results_dir,
-                                 results_dir, new_results_dir)))
+                                 results_dir, new_results_dir),
+                                options.toolchain_root))
 
   utils.AssertWarning(ret == 0, "Failed to copy results to final destination.")
 
diff --git a/v14/run_tests.py b/v14/run_tests.py
index 67ee643..77e8c8f 100755
--- a/v14/run_tests.py
+++ b/v14/run_tests.py
@@ -16,7 +16,7 @@
 from utils import command_executer
 
 
-def Main():
+def Main(argv):
   """The main function."""
   parser = optparse.OptionParser()
   parser.add_option("-c", "--chromeos_root", dest="chromeos_root",
@@ -28,7 +28,7 @@
 
   tests = "bvt"
 
-  (options, args) = parser.parse_args()
+  (options, args) = parser.parse_args(argv)
 
   if options.board is None or options.remote is None:
     parser.print_help()
@@ -58,4 +58,4 @@
   return retval
 
 if __name__ == "__main__":
-  Main()
+  Main(sys.argv)
diff --git a/v14/tc_enter_chroot.py b/v14/tc_enter_chroot.py
index a3aea0f..798af72 100755
--- a/v14/tc_enter_chroot.py
+++ b/v14/tc_enter_chroot.py
@@ -81,6 +81,8 @@
                     help="Toolchain root directory.")
   parser.add_option("-o", "--output", dest="output",
                     help="Toolchain output directory")
+  parser.add_option("-r", "--third_party", dest="third_party",
+                    help="The third_party directory to mount.")
   parser.add_option("-m", "--other_mounts", dest="other_mounts",
                     help="Other mount points in the form: " +
                          "dir:mounted_dir:options")
@@ -101,21 +103,20 @@
 
   chromeos_root = os.path.abspath(chromeos_root)
 
+  tc_dirs = []
   if options.toolchain_root is None:
-    logger.GetLogger().LogError("--toolchain_root not specified")
-    parser.print_help()
-    sys.exit(1)
+    m = "toolchain_root not specified. Will not mount toolchain dirs."
+    logger.GetLogger().LogWarning(m)
+  else:
+    tc_dirs = [options.toolchain_root + "/google_vendor_src_branch/gcc",
+               options.toolchain_root + "/google_vendor_src_branch/binutils"]
 
-  tc_dirs = [options.toolchain_root + "/google_vendor_src_branch/gcc",
-             options.toolchain_root + "/google_vendor_src_branch/binutils"]
-
-  if options.mount_scripts_only == False:
-    for tc_dir in tc_dirs:
-      if not os.path.exists(tc_dir):
-        logger.GetLogger().LogError("toolchain path " +
-                                   tc_dir + " does not exist!")
-        parser.print_help()
-        sys.exit(1)
+  for tc_dir in tc_dirs:
+    if not os.path.exists(tc_dir):
+      logger.GetLogger().LogError("toolchain path " +
+                                 tc_dir + " does not exist!")
+      parser.print_help()
+      sys.exit(1)
 
   if not os.path.exists(chromeos_root):
     logger.GetLogger().LogError("chromeos_root " + options.chromeos_root +
@@ -130,7 +131,7 @@
     parser.print_help()
     sys.exit(1)
 
-  rootdir = utils.GetRoot(sys.argv[0])[0]
+  rootdir = utils.GetRoot(__file__)[0]
   version_dir = rootdir
 
   mounted_tc_root = "/usr/local/toolchain_root"
@@ -138,22 +139,43 @@
   full_mounted_tc_root = os.path.abspath(full_mounted_tc_root)
 
   mount_points = []
-  if options.mount_scripts_only == False:
-    for tc_dir in tc_dirs:
-      last_dir = utils.GetRoot(tc_dir)[1]
-      mount_point = MountPoint(tc_dir, full_mounted_tc_root + "/" + last_dir,
-                               getpass.getuser(), "ro")
-      mount_points.append(mount_point)
+  for tc_dir in tc_dirs:
+    last_dir = utils.GetRoot(tc_dir)[1]
+    mount_point = MountPoint(tc_dir, full_mounted_tc_root + "/" + last_dir,
+                             getpass.getuser(), "ro")
+    mount_points.append(mount_point)
 
+  # Add the third_party mount point if it exists
+  if options.third_party:
+    third_party_dir = options.third_party
+    utils.AssertExit(os.path.isdir(third_party_dir),
+                     "--third_party option is not a valid dir.")
+  else:
+    third_party_dir = os.path.abspath("%s/../../../third_party" %
+                                      os.path.dirname(__file__))
+
+  if os.path.isdir(third_party_dir):
+    mount_point = MountPoint(third_party_dir,
+                             ("%s/%s" %
+                              (full_mounted_tc_root,
+                               os.path.basename(third_party_dir))),
+                               getpass.getuser())
+    mount_points.append(mount_point)
+            
   output = options.output
-  if output is None:
+  if output is None and options.toolchain_root:
     output = options.toolchain_root + "/output"
-  mount_points.append(MountPoint(output, full_mounted_tc_root + "/output",
-                                 getpass.getuser()))
+    # Mount the output directory at /usr/local/toolchain_root/output
+    mount_points.append(MountPoint(output, full_mounted_tc_root + "/output",
+                                   getpass.getuser()))
+
+  # Mount the other mount points
   mount_points += CreateMountPointsFromString(options.other_mounts,
                                               chromeos_root + "/chroot/")
 
   last_dir = utils.GetRoot(version_dir)[1]
+
+  # Mount the version dir (v14) at /usr/local/toolchain_root/v14
   mount_point = MountPoint(version_dir, full_mounted_tc_root + "/" + last_dir,
                            getpass.getuser())
   mount_points.append(mount_point)
