diff --git a/make_factory_package.sh b/make_factory_package.sh
deleted file mode 120000
index 6cdb3d5..0000000
--- a/make_factory_package.sh
+++ /dev/null
@@ -1 +0,0 @@
-../platform/factory/setup/make_factory_package.sh
\ No newline at end of file
diff --git a/make_factory_toolkit.sh b/make_factory_toolkit.sh
index 5fafd3b..df027c8 100755
--- a/make_factory_toolkit.sh
+++ b/make_factory_toolkit.sh
@@ -3,106 +3,8 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-# make_factory_toolkit.sh --board=[board]
-#
-# This script builds a factory toolkit, which is a self-extracting shellball,
-# and can be installed onto a device running test image.
+echo 'This script is deprecated and will be removed soon.'
+echo 'To get toolkit, run "emerge-$BOARD chromeos-factory"'
+echo ' or "cd ../platform/factory; make toolkit BOARD=$BOARD".'
+echo 'Read go/cros-factory-make for more details.'
 
-SCRIPT_ROOT=$(dirname "$(readlink -f "$0")")
-. "${SCRIPT_ROOT}/common.sh" || exit 1
-
-# Script must be run inside the chroot.
-restart_in_chroot_if_needed "$@"
-
-DEFINE_string board "${DEFAULT_BOARD}" \
-  "The board to build a factory toolkit for."
-DEFINE_string output_dir "" "Path to the folder to store the factory toolkit."
-DEFINE_string version "" \
-  "The version tag to be included in the identification string."
-
-cleanup() {
-  sudo rm -rf "${temp_pack_root}"
-}
-
-main() {
-  # Parse command line.
-  FLAGS "$@" || exit 1
-  eval set -- "${FLAGS_ARGV}"
-
-  switch_to_strict_mode
-
-  trap cleanup EXIT
-
-  # Must specify a board
-  if [[ -z "${FLAGS_board}" ]]; then
-    die "No board specified. Use the --board option."
-  fi
-
-  local default_dir="${CHROOT_TRUNK_DIR}/src/build/images/${FLAGS_board}/latest"
-  if [[ -n "${FLAGS_output_dir}" ]]; then
-    local output_dir="${FLAGS_output_dir}"
-  else
-    local output_dir="${default_dir}"
-  fi
-
-  echo "Building into directory ${output_dir}"
-  if [[ ! -d "${output_dir}" ]]; then
-    die \
-      "Output directory '${output_dir}' does not exist." \
-      "Check the --board or --output_dir options and that the image is built."
-  fi
-  cd "${output_dir}"
-
-  temp_pack_root="$(mktemp -d toolkit_XXXXXX)"
-  if [[ ! -d "${temp_pack_root}" ]]; then
-    die "Failed to create temporary directory."
-  fi
-
-  export INSTALL_MASK="${FACTORY_TEST_INSTALL_MASK}"
-  emerge-${FLAGS_board} --root="${temp_pack_root}" --nodeps --usepkgonly -v \
-    chromeos-factory chromeos-factory-board autotest-factory-install \
-    memento_softwareupdate
-
-  sudo USE="static" INSTALL_MASK="/usr/bin/ghost" \
-    emerge --root="${temp_pack_root}" --nodeps -v chromeos-factory-overlord
-
-  # /var/cache is not part of installed files but generated by emerge itself.
-  # Since chromeos-factory-overlord is emerge with root permission, we need
-  # to remove this to avoid error.
-  sudo rm -rf "${temp_pack_root}"/var/cache
-
-  local factory_repo="${CHROOT_TRUNK_DIR}/src/platform/factory"
-  local repo_status_script="${factory_repo}/py/toolkit/print_repo_status.py"
-  if [[ -x "${repo_status_script}" ]]; then
-    "${repo_status_script}" -b "${FLAGS_board}" >"${temp_pack_root}/REPO_STATUS"
-  fi
-
-  # Include 'makeself' in the toolkit
-  local makeself_path="$(readlink -f $(which makeself))"
-  local makeself_header_path="$(dirname "${makeself_path}")/makeself-header.sh"
-  cp -L "${makeself_path}" "${makeself_header_path}" "${temp_pack_root}"
-
-  # Include a VERSION tag in the toolkit
-  if [[ -n "${FLAGS_version}" ]]; then
-    local id_str="${FLAGS_board} Factory Toolkit ${FLAGS_version}"
-  else
-    local timestamp="$(date "+%Y-%m-%dT%H:%M:%S")"
-    local builder="$(whoami)@$(hostname)"
-    local id_str="${FLAGS_board} Factory Toolkit ${timestamp} ${builder}"
-  fi
-
-  # create factory-mini.par
-  local temp_factory_root="$(readlink -f "${temp_pack_root}")/usr/local/factory"
-  sudo "${temp_factory_root}/bin/make_par" --output \
-    "${temp_factory_root}/factory.par"
-
-  local version_tag="usr/local/factory/TOOLKIT_VERSION"
-  echo "${id_str}" | sudo_clobber "${temp_pack_root}/${version_tag}"
-  ln -s "${version_tag}" "${temp_pack_root}/VERSION"
-
-  local output_toolkit="${output_dir}/install_factory_toolkit.run"
-  "${temp_pack_root}/usr/local/factory/py/toolkit/installer.py" \
-    --pack-into "${output_toolkit}"
-}
-
-main "$@"
diff --git a/serve_factory_packages.py b/serve_factory_packages.py
deleted file mode 100644
index 158ccec..0000000
--- a/serve_factory_packages.py
+++ /dev/null
@@ -1,182 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-This script runs inside chroot environment. It signs and build factory packages.
-Then serves them using devserver. All paths should be specified relative to the
-chroot environment.
-
-E.g.: cros_sdk -- serve_factory_packages.py --board <board>
-
-Always precede the call to the script with 'cros_sdk -- ".
-"""
-
-import gflags
-import os
-import shlex
-import signal
-import subprocess
-import sys
-
-
-CWD = os.getcwd()
-USER = os.environ['USER']
-HOME_DIR = '/home/%s/trunk/src' % USER
-SCRIPTS_DIR = HOME_DIR + '/scripts'
-DEVSERVER_DIR = HOME_DIR + '/platform/dev'
-
-# Paths to image signing directory and dev key.
-VBOOT_REF_DIR = HOME_DIR + '/platform/vboot_reference'
-IMG_SIGN_DIR = VBOOT_REF_DIR + '/scripts/image_signing'
-DEVKEYS = VBOOT_REF_DIR + '/tests/devkeys'
-
-FLAGS = gflags.FLAGS
-
-gflags.DEFINE_string('board', None, 'Platform to build.')
-gflags.DEFINE_string('base_image', None, 'Path to base image.')
-gflags.DEFINE_string('firmware_updater', None, 'Path to firmware updater.')
-gflags.DEFINE_boolean('start_devserver', False, 'Start devserver.')
-
-class KillableProcess():
-  """A killable process.
-  """
-
-  running_process = None
-
-  def __init__(self, cmd, timeout=60, cwd=CWD):
-    """Initialize process
-
-    Args:
-      cmd: command to run.
-    """
-    self.cmd = shlex.split(cmd)
-    self.cmd_timeout = timeout
-    self.cmd_cwd = cwd
-
-  def start(self, wait=True):
-    """Start the process.
-
-    Args:
-      wait: wait for command to complete.
-    """
-    self.running_process = subprocess.Popen(self.cmd,
-                                            cwd=self.cmd_cwd)
-    if wait:
-      self.running_process.wait()
-
-  def stop(self):
-    """Stop the process.
-
-       This will only work for commands that do not exit.
-    """
-    self.running_process.send_signal(signal.SIGINT)
-    self.running_process.wait()
-
-
-def start_devserver():
-  """Starts devserver."""
-  cmd = 'python devserver.py --factory_config miniomaha.conf'
-  print 'Running command: %s' % cmd
-  devserver_process = KillableProcess(cmd, cwd=DEVSERVER_DIR)
-  devserver_process.start(wait=False)
-
-
-def assert_is_file(path, message):
-  """Assert file exists.
-
-  Args:
-    path: path to file.
-    message: message to print if file does not exist.
-  """
-  if not os.path.isfile(path):
-    error_message = '%s: %s is not a file!' % (message, path)
-    print error_message
-    sys.exit(1)
-
-
-def setup_board(board):
-  """Setup the board inside chroot.
-  """
-  cmd = './setup_board --board %s' % board
-  print 'Setting up board: %s' % board
-  setup_board_process = KillableProcess(cmd, cwd=SCRIPTS_DIR)
-  setup_board_process.start()
-
-
-def sign_build(image, output):
-  """Make an SSD signed build.
-
-  Args:
-    image: image to sign.
-    output: destination path for signed image.
-  """
-  assert_is_file(image, 'Asserting base image exists')
-  cmd = ('sudo ./sign_official_build.sh ssd %s %s %s'
-         % (image, DEVKEYS, output))
-  print 'IMG_SIGN_DIR: %s' % IMG_SIGN_DIR
-  print 'Signing image: %s' % cmd
-  sign_process = KillableProcess(cmd, cwd=IMG_SIGN_DIR)
-  sign_process.start()
-
-
-def build_factory_packages(signed_image, base_image, fw_updater, folder, board):
-  """Build factory packages and modify mini omaha config.
-
-  Args:
-    signed_image: signed image
-    base_image: base image
-    fw_updater: firmware updater
-    folder: destination folder to write packages
-    board: platform to build
-  """
-  cmd = ('./make_factory_package.sh --release %s --factory %s'
-         ' --subfolder %s --board %s'
-         % (signed_image, base_image, folder, board))
-  if fw_updater:
-    cmd = '%s --firmware_updater %s' % (cmd, fw_updater)
-  else:
-    print ('No --firmware_updater specified. Not including firmware shellball.')
-
-  print 'Building factory packages: %s' % cmd
-  build_packages_process = KillableProcess(cmd, cwd=SCRIPTS_DIR)
-  build_packages_process.start()
-
-
-def exit(message):
-  print message
-  sys.exit(1)
-
-
-def main(argv):
-  try:
-    argv = FLAGS(argv)
-  except gflags.FlagsError, e:
-    print '%s\nUsage: %s ARGS\n%s' % (e, sys.argv[0], FLAGS)
-    sys.exit(1)
-
-  if not FLAGS.base_image:
-    exit('No --base_image specified.')
-
-  if FLAGS.firmware_updater:
-    assert_is_file(FLAGS.firmware_updater,
-                   'Invalid or missing firmware updater.')
-
-  assert_is_file(FLAGS.base_image, 'Invalid or missing base image.')
-
-  signed_image = os.path.join(os.path.dirname(FLAGS.base_image),
-                              '%s_ssd_signed.bin' % FLAGS.board)
-
-  setup_board(FLAGS.board)
-  sign_build(FLAGS.base_image, signed_image)
-  build_factory_packages(signed_image, FLAGS.base_image,
-                         FLAGS.firmware_updater,
-                         folder=FLAGS.board, board=FLAGS.board)
-
-  if FLAGS.start_devserver:
-    start_devserver()
-
-
-if __name__ == '__main__':
-  main(sys.argv)
