diff --git a/README.md b/README.md
index 7d63271..380548d 100644
--- a/README.md
+++ b/README.md
@@ -5,16 +5,15 @@
 
 Mozc is a Japanese Input Method Editor (IME) designed for multi-platform such as
 Android OS, Apple OS X, Chromium OS, GNU/Linux and Microsoft Windows.  This
-open-source project originates from
+OpenSource project originates from
 [Google Japanese Input](http://www.google.com/intl/ja/ime/).
 
 Build Status
 ------------
 
-|         |Android |Windows |OS X |Linux |NaCl |
-|---------|:------:|:------:|:---:|:----:|:---:|
-|**Build**|N/A     |[![Build status](https://ci.appveyor.com/api/projects/status/qm7q355lenq5ogp6/branch/master?svg=true)](https://ci.appveyor.com/project/google/mozc/branch/master) |[![Build Status](https://travis-ci.org/google/mozc.svg?branch=master)](https://travis-ci.org/google/mozc) |N/A |N/A |
-
+|Android |Windows |OS X |Linux |NaCl |
+|:------:|:------:|:---:|:----:|:---:|
+|N/A     |[![Build status](https://ci.appveyor.com/api/projects/status/qm7q355lenq5ogp6/branch/master?svg=true)](https://ci.appveyor.com/project/google/mozc/branch/master) |[![Build Status](https://travis-ci.org/google/mozc.svg?branch=master)](https://travis-ci.org/google/mozc) |N/A |N/A |
 
 What's Mozc?
 ------------
@@ -27,6 +26,31 @@
 
 In this repository, *Mozc* means the second definition unless otherwise noted.
 
+Detailed differences between Google Japanese Input and Mozc are described in [About Branding](doc/about_branding.md).
+
+Build Instructions
+------------------
+
+* [How to build Mozc in Docker](doc/build_mozc_in_docker.md): Android, NaCl, and Linux desktop builds.
+* [How to build Mozc in OS X](doc/build_mozc_in_osx.md): OS X build.
+* [How to build Mozc in Windows](doc/build_mozc_in_windows.md): Windows build.
+
+Release Plan
+------------
+
+tl;dr. **There is no stable version.**
+
+As described in [About Branding](doc/about_branding.md) page, Google does
+not promise any official QA for OSS Mozc project.  Because of this,
+Mozc does not have a concept of *Stable Release*.  Instead we change version
+number every time when we introduce non-trivial change.  If you are
+interested in packaging Mozc source code, or developing your own products
+based on Mozc, feel free to pick up any version.  They should be equally
+stable (or equally unstable) in terms of no official QA process.
+
+[Release History](doc/release_history.md) page may have additional
+information and useful links about recent changes.
+
 License
 -------
 
diff --git a/doc/about_branding.md b/doc/about_branding.md
new file mode 100644
index 0000000..675ad95
--- /dev/null
+++ b/doc/about_branding.md
@@ -0,0 +1,25 @@
+About Branding
+==============
+
+# Differences between Google Japanese Input and Mozc
+
+| Product Name | Google Japanese Input Stable Version                                 | Google Japanese Input Development Version                                 | Mozc |
+|:-------------|:---------------------------------------------------------------------|:--------------------------------------------------------------------------|:-----|
+| Branding     | Google Japanese Input (Google 日本語入力)                            | Google Japanese Input (Google 日本語入力)                                 | Mozc |
+| Release Form | Binary Installer                                                     | Binary Installer                                                          | Source code |
+| License Agreement | Available on the installation page                              | Available on the installation page                                        | 3-Clause BSD License (except for third-party code) |
+| Target Platform | Microsoft Windows Apple OS X Android Google Chrome OS             | Microsoft Windows, Apple OS X                                             | Android OS, Microsoft Windows, Apple OS X, GNU/Linux, Chromium OS |
+| Version String | GoogleJapaneseInput-1.x.yyyy.0 (Windows), GoogleJapaneseInput-1.x.yyyy.1 (OS X), GoogleJapaneseInput-1.x.yyyy.3 (Android), GoogleJapaneseInput-1.x.yyyy.4 (Chrome OS) | GoogleJapaneseInput-1.x.yyyy.100 (Windows), GoogleJapaneseInput-1.x.yyyy.101 (OS X) | Mozc-1.x.yyyy.102 |
+| Logo         | Colorful                                                             | Colorful                                                                  | Orange |
+| Code Location | Google internal                                                     | Google internal                                                           | [GitHub](https://github.com/google/mozc) |
+| System Dictionary | Google internal                                                 | Google internal                                                           | [Mozc dictionary](../src/data/dictionary_oss/README.txt) |
+| Usage Dictionary | [Japanese Usage Dictionary](https://github.com/hiroyuki-komatsu/japanese-usage-dictionary) | [Japanese Usage Dictionary](https://github.com/hiroyuki-komatsu/japanese-usage-dictionary) | [Japanese Usage Dictionary](https://github.com/hiroyuki-komatsu/japanese-usage-dictionary) |
+| Collocation Data | Google internal                                                  | Google internal                                                           | [Only examples are available](../src/data/dictionary_oss/collocation.txt) |
+| Reading Correction Data | Google internal                                           | Google internal                                                           | [Only an example is available](../src/data/dictionary_oss/reading_correction.tsv) |
+| Suggestion Filter | Google internal                                                 | Google internal                                                           | [Only an example is available](../src/data/dictionary_oss/suggestion_filter.txt) |
+| Japanese ZIP Code Dictionary | Included                                             | Included                                                                  | Not included. [You can add it by yourself](../src/data/dictionary_oss/README.txt) |
+| Quality Assurance | New releases are tested by Google before sending to users       | Basically the same to Stable but some additional QA tests are skipped before sending to users | No official QA by Google |
+| Crash Reporting | Chrome OS: Integrated into the OS settings Other platforms: No by default. You can turn it on | Yes                                           | No   |
+| User Metrics Reporting | Chrome OS: No  Other platforms: No by default. You can turn it on    | Yes                                                             | No   |
+| Google Update | Android : No Other platforms: Yes                                   | Yes                                                                       | No   |
+| Other Online Features | Not supported yet                                           | Cloud Handwriting                                                         | Nothing |
diff --git a/doc/build_mozc_in_docker.md b/doc/build_mozc_in_docker.md
new file mode 100644
index 0000000..953d7d4
--- /dev/null
+++ b/doc/build_mozc_in_docker.md
@@ -0,0 +1,130 @@
+How to build Mozc in Docker
+===========================
+
+# Introduction
+Docker containers are available to build Mozc binaries for Android, NaCl, and Linux desktop.
+
+# System Requirements
+Currently, only Ubuntu 14.04 is tested to host the Docker container to build Mozc. See [official document](http://docs.docker.com/installation/ubuntulinux/#ubuntu-trusty-1404-lts-64-bit) to set up Docker for Ubuntu 14.04.
+
+## Set up Ubuntu 14.04 Docker container
+
+```
+mkdir ubuntu14.04 && cd ubuntu14.04
+curl -O https://raw.githubusercontent.com/google/mozc/master/src/docker/ubuntu14.04/Dockerfile
+sudo docker build --rm -t $USER/mozc_ubuntu14.04 .
+sudo docker run --interactive --tty --rm $USER/mozc_ubuntu14.04
+```
+
+## Set up Fedora 21 Docker container
+Fedora 21 container is also provided just for your reference.
+
+```
+mkdir fedora21 && cd fedora21
+curl -O https://raw.githubusercontent.com/google/mozc/master/src/docker/fedora21/Dockerfile
+sudo docker build --rm -t $USER/mozc_fedora21 .
+sudo docker run --interactive --tty --rm $USER/mozc_fedora21
+```
+
+### Hint
+Don't forget to rebuild Docker container when Dockerfile is updated.
+
+### Update the source tree
+If Dockerfile is not updated but GitHub Mozc repository is updated, you can fetch the latest source code as follows.
+
+```
+cd ../
+gclient sync
+cd src/
+```
+
+# Build in the container
+Before explaining detailed build configurations and options, let's walk through the simplest cases to see how it looks like.
+
+### Build Mozc for Android:
+
+```
+python build_mozc.py gyp --target_platform=Android
+python build_mozc.py build -c Debug android/android.gyp:apk
+```
+
+### Build Mozc for NaCl:
+
+```
+python build_mozc.py gyp --target_platform=NaCl --nacl_sdk_root=$NACL_SDK_ROOT
+python build_mozc.py build -c Release chrome/nacl/nacl_extension.gyp:nacl_mozc
+```
+
+### Build Mozc for Linux Desktop:
+
+```
+python build_mozc.py gyp --target_platform=Linux
+python build_mozc.py build -c Release unix/ibus/ibus.gyp:ibus_mozc unix/emacs/emacs.gyp:mozc_emacs_helper server/server.gyp:mozc_server gui/gui.gyp:mozc_tool renderer/renderer.gyp:mozc_renderer
+```
+
+You can also run unittests as follows.
+
+```
+python build_mozc.py runtests -c Debug
+```
+
+## Build configurations
+In `python build_mozc.py gyp` step, there are two different styles to customize configurations.  One is `GYP_DEFINES` environment variable and the other is commandline option.
+
+```
+[GYP_DEFINES="..."] python build_mozc.py gyp [options]
+```
+
+### GYP_DEFINES
+You can specify `GYP_DEFINES` environment variable to change variables in GYP files, which you can find many directories in Mozc's source tree.  [common.gypi](../src/gyp/common.gypi) is an example.
+Here are examples of GYP variables that you may want to change for Linux desktop build.
+
+  * `document_dir`: Directory path where Mozc's license file is placed
+  * `ibus_mozc_path`: ibus-mozc executable path
+  * `ibus_mozc_icon_path`: ibus-mozc icon path
+  * `zinnia_model_file`: Zinnia's model data path
+
+Note that you can specify multiple GYP variables as follows.
+
+```
+GYP_DEFINES="ibus_mozc_path=/usr/lib/ibus-mozc/ibus-engine-mozc ibus_mozc_icon_path=/usr/share/ibus-mozc/product_icon.png document_dir=/usr/share/doc/mozc zinnia_model_file=/usr/share/zinnia/model/tomoe/handwriting-ja.model" python build_mozc.py gyp
+```
+
+### command line options
+You can find many command line options as follows.  
+```
+python build_mozc.py gyp --help
+```
+Here we show some notable options.
+
+#### --target_platform
+You can use `--target_platform` option to specify the target OS on which Mozc will run.  Following options are available.
+
+  * `Android`
+  * `NaCl`
+  * `Linux` (default)
+
+If you don't specify this option, `--target_platform=Linux` will be used implicitly.
+
+#### --noqt (Linux desktop target only)
+You can use `--noqt` option to build Mozc without depending on Qt 4 library.
+
+#### --server_dir (Linux desktop target only)
+You can use `--server_dir` option to specify the directory name where `mozc_server` will be installed.
+
+## Compile options
+In `build_mozc.py build` step, you can specify build types (`Release`` or `Debug`) and one or more build targets.  Please find each GYP file to see what build targets are defined.
+
+```
+python build_mozc.py build -c {Release, Debug} [gyp_path_1.gyp:gyp_target_name1] [gyp_path_2.gyp:gyp_target_name2] 
+```
+
+## Android specific topics
+
+### Aplication package name
+
+**CAUTION**: Currently the application package is fixed (org.mozc.android.inputmethod.japanese). Don't publish the built package. If you want to publish, specify `--android_application_id` to `build_mozc.py gyp` command and manually update related files.
+
+### zipalign
+
+Android version of Mozc may not run if the APK file is not aligned with [zipalign](https://developer.android.com/tools/help/zipalign.html) command.
diff --git a/doc/build_mozc_in_osx.md b/doc/build_mozc_in_osx.md
new file mode 100644
index 0000000..0dc34aa
--- /dev/null
+++ b/doc/build_mozc_in_osx.md
@@ -0,0 +1,80 @@
+How to build Mozc on OS X
+=========================
+
+# System Requirements
+
+We only support OS X 10.7 or later intel only.
+
+# Software Requirements
+
+Building on Mac requires the following software.
+  * Xcode
+
+If you don't need to run gui tools like about dialog, config dialog, or dictionary tool, you can omit installing Qt.  Candidate window still shows without Qt.  See below for the detailed information.
+
+# Get the Code
+
+First, you'll need to download the gclient depot tool, and add depot\_tools to your PATH.
+
+```
+cd ~/
+git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
+export PATH=`pwd`/depot_tools:"$PATH"
+```
+
+Then, download the Mozc code from its SVN repository with the gclient command:
+
+```
+mkdir -p ~/work/mozc
+cd ~/work/mozc
+gclient config https://github.com/google/mozc.git --name=. --deps-file=src/DEPS
+gclient sync
+```
+
+This will also download source code of other programs such as googletest and Protocol Buffers.
+Update to the latest revision
+
+Execute the following command to update to the latest revision.
+
+```
+gclient sync
+```
+
+Updating the tree sometimes causes a mysterious build error. Try "build\_mozc.py clean" if it occurs.
+
+# Compilation
+
+First, you'll need to generate Xcode project using a tool called GYP, which is automatically downloaded by "gclient sync":
+
+```
+cd ~/work/mozc/src
+GYP_DEFINES="mac_sdk=10.7 mac_deployment_target=10.7" python build_mozc.py gyp --noqt
+```
+
+You can customize the SDK version and target OS version here. Then, build Mozc.app and necessary files:
+
+```
+python build_mozc.py build -c Release mac/mac.gyp:GoogleJapaneseInput mac/mac.gyp:gen_launchd_confs
+```
+
+# Executables
+
+Executables are written in `~/wok/mozc/src/out_mac/Release` for Release builds, and `~/work/mozc/src/out_mac/Debug` for Debug builds. For instance, you'll have `~/work/mozc/src/out_mac/Release/Mozc.app` once the build finishes successfully in the Release mode.
+
+# Clean up the Tree
+
+To clean up the tree, execute the following. This will remove executables and intermediate files like object files, generated source files, project files, etc.
+
+```
+python build_mozc.py clean
+```
+
+# Install built packages
+
+Mozc doesn't have installer mpkg files.  You can just place the created Mozc.app into `/Library/Input Methods`, and `out_mac/DerivedSources/Release/mac/org.mozc.inputmethod.Japanese.Converter.plist` and `org.mozc.inputmethod.Japanese.Renderer.plist` into `/Library/LaunchAgents`, and then log in again.  Then it works well.
+
+```
+sudo cp -r out_mac/Release/Mozc.app /Library/Input\ Methods/
+sudo cp out_mac/DerivedSources/Release/mac/org.mozc.inputmethod.Japanese.Converter.plist /Library/LaunchAgents
+sudo cp out_mac/DerivedSources/Release/mac/org.mozc.inputmethod.Japanese.Renderer.plist /Library/LaunchAgents
+```
diff --git a/doc/build_mozc_in_windows.md b/doc/build_mozc_in_windows.md
new file mode 100644
index 0000000..b8e25ec
--- /dev/null
+++ b/doc/build_mozc_in_windows.md
@@ -0,0 +1,249 @@
+How to build Mozc in Windows
+============================
+
+# System Requirements
+
+64-bit Windows is required to build Mozc for Windows. Mozc itself is expected to work on Windows Vista SP2 and later, including 32-bit Windows.
+
+# Software Requirements
+
+Building Mozc on Windows requires the following software.
+
+  * [Visual Studio 2013 Community Edition](http://visualstudio.com/free), or any greater edition.
+  * (optinal) [Qt libraries](http://download.qt.io/archive/qt/)
+    * Commercial version and LGPL version are available.
+
+# Get the Code
+
+First, you'll need to download the gclient [depot\_tools](http://dev.chromium.org/developers/how-tos/install-depot-tools), and add ```depot_tools``` to your ```PATH```.
+
+```
+set PATH=%PATH%;c:\work\depot_tools
+```
+
+Then download the code:
+
+```
+mkdir c:\work\mozc
+cd c:\work\mozc
+gclient config https://github.com/google/mozc.git --name=. --deps-file=src/DEPS
+gclient sync
+```
+
+## Update to the latest revision
+
+Execute the following command to update to the latest revision.
+
+```
+gclient sync
+```
+
+Updating the tree sometimes causes a mysterious build error. Try ```build_mozc.py clean``` if it occurs.
+
+# Compilation
+
+First, you'll need to generate Visual C++ project files using a tool called GYP, which is automatically downloaded by ```gclient sync```:
+
+```
+cd c:\work\mozc\src
+python build_mozc.py gyp --qtdir=c:\Qt\4.8.0
+```
+
+The directory of Qt (`C:\Qt\4.8.0` in this example) differs based on Qt version. If you specify `--noqt` option instead of `--qtdir=<dir to Qt>`, mozc\_tool will be built as a mock version, which does nothing.
+
+You can also specify `--branding=GoogleJapaneseInput` option and `--wix_dir=<dir to WiX binaries>` option here to reproduce official Google Japanese Input binaries and installers.
+
+Then, build Mozc binaries:
+
+```
+python build_mozc.py build -c Release package
+```
+
+If you need debug information, you can build debug version of Mozc as follows.
+
+```
+python build_mozc.py build -c Debug package
+```
+
+# Executables
+
+You have release build binaries in `c:\work\mozc\src\out\Release` and  `c:\work\mozc\src\out\Release_x64`.
+
+# Clean up the Tree
+
+To clean up the tree, execute the following. This will remove executables and intermediate files like object files, generated source files, project files, etc.
+
+```
+python build_mozc.py clean
+```
+
+# Installation and Uninstallation
+
+Although the code repository covers source files of the official Google Japanese Input installer (see `win32/custom_action` and `win32/installer`), building Windows Installer package for OSS Mozc is not supported yet. You need to manually copy Mozc binaries and run a command as follows.
+
+Note that Mozc now supports two input method APIs called IMM32 and TSF (Text Services Framework). Although you can register Mozc for both APIs at the same time, IMM32 is not recommended on Windows 8 and later.
+
+
+---
+
+## Install Mozc (32-bit)
+
+Following files must be placed under %ProgramFiles%\Mozc.
+
+  * `C:\work\mozc\src\out\Release\mozc_broker32.exe`
+  * `C:\work\mozc\src\out\Release\mozc_cache_service.exe`
+  * `C:\work\mozc\src\out\Release\mozc_renderer.exe`
+  * `C:\work\mozc\src\out\Release\mozc_server.exe`
+  * `C:\work\mozc\src\out\Release\mozc_tool.exe` (if you specified `--noqt` option)
+  * `C:\work\mozc\src\out\ReleaseDynamic\mozc_tool.exe` (if you didn't specify `--noqt` option)
+  * `C:\work\mozc\src\out\ReleaseDynamic\QtCore4.dll` (not required if you specified `--noqt` option)
+  * `C:\work\mozc\src\out\ReleaseDynamic\QtGui4.dll` (not required if you specified `--noqt` option)
+
+`QtCore4.dll` and `QtGui4.dll` are not required if you specified `--noqt` option into the gyp command.
+
+### Register Mozc for IMM32 into 32-bit environment
+
+Following files must be placed under `%windir%\System32`.
+
+  * `C:\work\mozc\src\out\Release\mozc_ja.ime`
+
+Finally, you must run `mozc_broker32.exe` with administrator privilege to register IME module as follows.
+
+```
+"%ProgramFiles%\Mozc\mozc_broker32.exe" --mode=register_ime
+```
+
+### Register Mozc for TSF into 32-bit environment
+
+Following file must be placed under `%ProgramFiles%\Mozc`.
+
+  * `C:\work\mozc\src\out\Release\mozc_ja_tip32.dll`
+
+Finally, you must run `regsvr32` with administrator privilege to register IME module as follows.
+
+```
+regsvr32 "%ProgramFiles%\Mozc\mozc_ja_tip32.dll"
+```
+
+---
+
+## Uninstall Mozc (32-bit)
+
+### Unregister Mozc for IMM32 from 32-bit environment
+
+Run `mozc_broker32.exe` with administrator privilege to unregister IME module as follows.
+
+```
+"%ProgramFiles%\Mozc\mozc_broker32.exe" --mode=unregister_ime
+```
+
+Then delete the following file.
+
+  * `%windir%\System32\mozc_ja.ime`
+
+### Unregister Mozc for TSF from 32-bit environment
+
+Run `regsvr32` with administrator privilege to unregister IME module as follows.
+
+```
+regsvr32 /u "%ProgramFiles%\Mozc\mozc_ja_tip32.dll"
+```
+
+### Uninstall common files of Mozc from 32-bit environment
+
+Delete following directory and files after unregistering Mozc from IMM32/TSF.
+
+  * `%ProgramFiles%\Mozc\`
+
+---
+
+## Install Mozc (64-bit)
+
+Following files must be placed under %ProgramFiles(x86)%\Mozc.
+
+  * `C:\work\mozc\src\out\Release\mozc_broker32.exe`
+  * `C:\work\mozc\src\out\Release\mozc_cache_service.exe`
+  * `C:\work\mozc\src\out\Release\mozc_renderer.exe`
+  * `C:\work\mozc\src\out\Release\mozc_server.exe`
+  * `C:\work\mozc\src\out\Release\mozc_tool.exe` (if you specified `--noqt` option)
+  * `C:\work\mozc\src\out\ReleaseDynamic\mozc\_tool.exe` (if you didn't specify `--noqt` option)
+  * `C:\work\mozc\src\out\ReleaseDynamic\QtCore4.dll` (not required if you specified `--noqt` option)
+  * `C:\work\mozc\src\out\ReleaseDynamic\QtGui4.dll` (not required if you specified `--noqt` option)
+  * `C:\work\mozc\src\out\Release_x64\mozc_broker64.exe`
+
+### Register Mozc for IMM32 into 64-bit environment
+
+Following files must be placed under `%windir%\System32`.
+
+  * `C:\work\mozc\src\out\Release_x64\mozc_ja.ime`
+
+Following files must be placed under `%windir%\SysWOW64`.
+
+  * `C:\work\mozc\src\out\Release\mozc_ja.ime`
+
+Finally, you must run `mozc_broker64.exe` with administrator privilege to register IME module as follows.
+
+```
+"%ProgramFiles(x86)%\Mozc\mozc_broker64.exe" --mode=register_ime
+```
+
+### Register Mozc for TSF into 64-bit environment
+
+Following file must be placed under `%ProgramFiles(x86)%\Mozc`.
+
+  * `C:\work\mozc\src\out\Release\mozc_ja_tip32.dll`
+  * `C:\work\mozc\src\out\Release_x64\mozc_ja_tip64.dll`
+
+Finally, you must run `regsvr32` with administrator privilege to register IME module as follows.
+
+```
+regsvr32 "%ProgramFiles(x86)%\Mozc\mozc_ja_tip32.dll"
+regsvr32 "%ProgramFiles(x86)%\Mozc\mozc_ja_tip64.dll"
+```
+
+---
+
+## Uninstall Mozc (64-bit)
+
+### Unregister Mozc for IMM32 from 64-bit environment
+
+Run `mozc_broker64.exe` with administrator privilege to unregister IME module as follows.
+
+```
+"%ProgramFiles(x86)%\Mozc\mozc_broker64.exe" --mode=unregister_ime
+```
+
+Then delete the following files.
+
+  * `%windir%\System32\mozc_ja.ime`
+  * `%windir%\SysWOW64\mozc_ja.ime`
+
+### Unregister Mozc for TSF from 64-bit environment
+
+Run `regsvr32` with administrator privilege to unregister IME module as follows.
+
+```
+regsvr32 /u "%ProgramFiles(x86)%\Mozc\mozc_ja_tip32.dll"
+regsvr32 /u "%ProgramFiles(x86)%\Mozc\mozc_ja_tip64.dll"
+```
+
+### Uninstall common files of Mozc from 64-bit environment
+
+Delete following directory and files after unregistering Mozc from IMM32/TSF.
+
+  * `%ProgramFiles(x86)%\Mozc\`
+
+---
+
+
+# Run unit tests
+
+You can run unit tests as follows.
+
+```
+cd c:\work\mozc\src
+python build_mozc.py gyp --noqt
+python build_mozc.py runtests -c Release
+```
+
+Note that you can specify `--qtdir=` option instead of `--noqt' in GYP phase, currently there is no unit test that depends on Qt.
diff --git a/doc/design_doc/data_protection.md b/doc/design_doc/data_protection.md
new file mode 100644
index 0000000..5d228cb
--- /dev/null
+++ b/doc/design_doc/data_protection.md
@@ -0,0 +1,46 @@
+# Data Encryption and Password Management
+
+This document describes how Mozc obfuscates user data and how it works, in each platform.
+
+## Background
+
+Input methods stores some internal data in the local storage.  Most are stored in plain text, but Mozc applies AES256 CBC to obfuscate some data that are considered to be important for user privacy.
+
+## Overview
+
+As is described above, most of data are stored in plain text.  Only the following data are obfuscated with AES256 CBC:
+
+  * User history: stores some of users input text, which is used to suggest text from the users history.
+  * client ID: the ID to be marked for usage stats.  Not used if the user does not opt-in the "sending usage stats" configuration.
+
+## Detailed Design
+
+We have three policies for obfuscation:
+
+  * We do not use a product-wide "master key".  Instead, each key of data encryption is different on each machine.  We want to prevent "casual" leaks such like uploading/publishing on the web, so "no product-wide common keys".
+  * We trusts processes which runs with the user ID.  That is, if some malicious cracker succeeds to inject a virus on the machine and it knows Mozc quite well, the data encryption framework can't help.
+  * Again, we want to prevent only "casual" leaks.  If you really want to protect your data, you should enable file-system encryption at OS-level.
+
+Then, we take the following process:
+
+  * Mozc firstly created a "password file", which stores the key and salt of AES256 CBC.
+  * Then apply AES256 CBC for the data to be obfuscated.
+
+Then, how to protect the "password file"?  It's up to the platform.
+
+  * Windows: Uses [CryptProtectData](http://msdn.microsoft.com/en-us/library/windows/desktop/aa380261.aspx) and [CryptUnprotectData](http://msdn.microsoft.com/en-us/library/windows/desktop/aa380882.aspx) APIs, which guarantee the data is encrypted with keys of user credential and the machine id.  It means, the password file has to be differently encrypted if the user id is different and/or the machine is different.
+  * Mac: The password file itself is also obfuscated with AES256 CBC, where the key and salt is generated from the machine's serial number and the user's ID in a predictable way, which means that anyone who knows the machine's serial number and the user's ID can read the password file.
+  * Linux: no protection.  The key and salt are stored as plain data. Anyone who has the OS-level permission to reed the password file can read it.
+  * ChromeOS: same as Linux.  But no protection does not cause a serious issue because the OS encrypts the local disk and no normal processes run in ChromeOS.
+  * Android: Same as Linux.  But no protection does not cause a serious issue because other applications do not have the OS-level permission to read the Mozc's file.
+
+## Code Location
+
+  * [src/base/encryptor.cc](../../src/base/encryptor.cc): consists of two code logic of this obfuscation mechanism. One is the platform-neutral AES256 CBC logic and the other is platform-dependent protection logic for the password file.
+  * [src/base/password_manager.cc](../../src/base/password_manager.cc): the password management (dealing with the password file). The actual data protection logic for the password file is delegated to encruptor.cc.
+  * [src/base/unverified_aes256.cc](../../src/base/unverified_aes256.cc): the AES256 CBC implementation. Our implementation hasn't been verified with any authority such as FIPS.  Please do not use this implementation for any security/privacy critical purpose.
+  * [src/base/unverified_sha1.cc](../../src/base/unverified_sha1.cc): the SHA1 implementation. Our implementation hasn't been verified with any authority such as FIPS.  Please do not use this implementation for any security/privacy critical purpose.
+
+## Guide to port Mozc to a new platform
+
+Before starting your work, you have to understand the privacy concern described in this document.  You also need to find out the best way to store password, for your platform.  For example, gnome-keyrings might be a choice for Linux implementation.
diff --git a/doc/design_doc/input_scope.md b/doc/design_doc/input_scope.md
new file mode 100644
index 0000000..3f6e951
--- /dev/null
+++ b/doc/design_doc/input_scope.md
@@ -0,0 +1,167 @@
+Input Scope Support in Mozc
+===========================
+
+Objective
+---------
+
+Make Windows Mozc client aware of InputScope feature on Windows.
+
+Starting with Windows 8, InputScope is the recommended way to set the conversion mode of Japanese IME and ImmSetConversionStatus API is virtually deprecated in per user input mode.
+
+> Thus, Japanese Microsoft IME ignores the change of conversion modes made by calling
+> ImmSetConversionStatus when used in per user mode. This API is used in the IME mode
+> property of .NET framework. InputScope is recommended in order to set the IME mode
+> under per user mode in Windows 8. - "[Switch text input changed from per-thread to per-user](http://msdn.microsoft.com/en-us/library/windows/desktop/hh994466.aspx)"
+
+Microsoft IME shipped with Windows Vista and later actually behaves like this. As for Mozc, Mozc client’s should behave like Microsoft IME 2012 in terms of open/close mode and conversion mode for each InputScope.
+This is the first step to support such context-awareness. As future work, Mozc should be able to behave more appropriately and adoptively based on each input context.
+
+Design Highlights
+-----------------
+
+When an input field is focused and it has InputScope, Mozc should change its on/off mode and conversion mode as follows.
+
+| InputScope | Expected Input Mode |
+|:-----------|:--------------------|
+| `IS_URL`, `IS_EMAIL_USERNAME`, `IS_EMAIL_SMTPEMAILADDRESS`, `IS_DIGITS`, `IS_NUMBER`, `IS_PASSWORD`, `IS_TELEPHONE_FULLTELEPHONENUMBER`, `IS_TELEPHONE_COUNTRYCODE`, `IS_TELEPHONE_AREACODE`, `IS_TELEPHONE_LOCALNUMBER`, `IS_TIME_FULLTIME`, `IS_TIME_HOUR`, `IS_TIME_MINORSEC` | Direct Mode (IME Off) |
+| `IS_HIRAGANA` | Hiragana Mode (IME On) |
+| `IS_ALPHANUMERIC_HALFWIDTH` | Halfwidth Alphanumeric Mode (IME On) |
+| `IS_NUMBER_FULLWIDTH`, `IS_ALPHANUMERIC_FULLWIDTH` | Fullwidth Alphanumeric Mode (IME On) |
+| `IS_KATAKANA_HALFWIDTH` | Halfwidth Katakana Mode (IME On) |
+| `IS_KATAKANA_FULLWIDTH` | Fullwidth Katakana Mode (IME On) |
+
+From usability perspectives, user experience offered by InputScope should be consistent with that in password field. It means that the change caused by InputScope should be temporal and volatile. This requires two different mode sets 1) mode visible from Mozc client and 2) mode visible from TSF should be managed.
+
+Here is an example of mode transitions.
+
+| Action | Mozc On/Off | Mozc Mode | TSF On/Off | TSF Mode |
+|:-----------|:----------------|:--------------|:---------------|:-------------|
+| Turn IME on | On              | Hiragana      | On             | Hiragana     |
+| ↓        |                 |               |                |              |
+| Enter email field | Off             | Hiragana      | On             | Hiragana     |
+| ↓        |                 |               |                |              |
+| Enter search field | On              | Hiragana      | On             | Hiragana     |
+| ↓        |                 |               |                |              |
+| Turn IME off | Off             | Hiragana      | Off            | Hiragana     |
+| ↓        |                 |               |                |              |
+| Enter Halfwidth Katakan field | On              | Halfwidth Katakana | Off            | Hiragana     |
+
+When on/off mode and/or conversion mode that are visible from Mozc is changed by InputScope, Mode Indicator will be popped up near the caret location so that a user can immediately get to know the new input mode.
+
+Scope
+-----
+
+InputScope has been supported in the following frameworks and environment:
+
+  * Windows Presentation Foundation (WPF)
+  * Microsoft Internet Explorer 10 on Windows 8+
+  * Chromium 26+ on Windows Vista and later
+  * Firefox 23+ on Windows Vista and later
+
+Here is the mapping table from HTML5 input types to InputScope on Windows.
+
+| HTML5 Forms Input Type | Internet Explorer 10 | Chromium 26 | Firefox 23 |
+|:-----------------------|:---------------------|:------------|:-----------|
+| text                   | `IS_DEFAULT`         | `IS_DEFAULT` | `IS_DEFAULT` |
+| number                 | `IS_NUMBER`          | `IS_NUMBER` | `IS_NUMBER` |
+| email                  | `IS_EMAIL_SMTPEMAILADDRESS` | `IS_EMAIL_SMTPEMAILADDRESS` | `IS_EMAIL_SMTPEMAILADDRESS` |
+| password               | `IS_PASSWORD`        | `IS_PASSWORD` | `IS_PASSWORD` |
+| color                  | `IS_DEFAULT`         | `IS_DEFAULT` | `IS_DEFAULT` |
+| date                   | `IS_DEFAULT`         | `IS_DEFAULT` | `IS_DATE_FULLDATE` |
+| datetime               | `IS_DEFAULT`         | `IS_DEFAULT` | `IS_DATE_FULLDATE` |
+| datetime-local         | `IS_DEFAULT`         | `IS_DEFAULT` | `IS_DATE_FULLDATE` |
+| month                  | `IS_DEFAULT`         | `IS_DEFAULT` | `IS_DATE_FULLDATE` |
+| search                 | `IS_SEARCH`          | `IS_SEARCH`  | `IS_SEARCH` |
+| tel                    | `IS_TELEPHONE_FULLTELEPHONENUMBER` | `IS_TELEPHONE_FULLTELEPHONENUMBER` | `IS_TELEPHONE_FULLTELEPHONENUMBER`,  `IS_TELEPHONE_LOCALNUMBER` |
+| time                   | `IS_DEFAULT`         | `IS_DEFAULT` | `IS_TIME_FULLTIME` |
+| url                    | `IS_URL`             | `IS_URL`    | `IS_URL`    |
+| week                   | `IS_DEFAULT`         | `IS_DEFAULT` | `IS_DATE_FULLDATE` |
+| range                  | `IS_DEFAULT`         | `IS_DEFAULT` | `IS_DEFAULT` |
+| range                  | `IS_DEFAULT`         | `IS_DEFAULT` | `IS_DEFAULT` |
+
+Chromium OS might want to follow this mapping in future if the feedback to this project is positive. To achieve this, we need to add Chromium version of InputScope into [chrome.input.ime](http://developer.chrome.com/extensions/input.ime.html) API.
+
+Risk
+----
+
+Some user may dislike this kind of automatic mode changing and want a configuration option to disable it, while it is not configurable yet.
+
+Production Impact
+-----------------
+
+Available only for users who are using Mozc in TSF Mode. This means that only Windows 8+ user will be able to use this feature with Mozc. No impact to all other platforms.
+
+Release History
+---------------
+
+  * Initial release: 1.11.1490.10x dev on Windows
+
+Reference
+---------
+
+  * [Input Scopes - TSF Aware](http://blogs.msdn.com/tsfaware/archive/2007/07/10/input-scopes.aspx)
+  * [Improving Recognition Results - Improving Recognition Results](http://msdn.microsoft.com/en-us/library/ms698133.aspx)
+  * [Input modalities - 4.10.19 Attributes common to form controls - HTML Standard - WhatWG](http://www.whatwg.org/specs/web-apps/current-work/multipage/association-of-controls-and-forms.html#input-modalities:-the-inputmode-attribute)
+
+Full list of InputScope (as of Windows 8)
+
+```
+IS_DEFAULT = 0
+IS_URL = 1
+IS_FILE_FULLFILEPATH = 2
+IS_FILE_FILENAME = 3
+IS_EMAIL_USERNAME = 4
+IS_EMAIL_SMTPEMAILADDRESS = 5
+IS_LOGINNAME = 6
+IS_PERSONALNAME_FULLNAME = 7
+IS_PERSONALNAME_PREFIX = 8
+IS_PERSONALNAME_GIVENNAME = 9
+IS_PERSONALNAME_MIDDLENAME = 10
+IS_PERSONALNAME_SURNAME = 11
+IS_PERSONALNAME_SUFFIX = 12
+IS_ADDRESS_FULLPOSTALADDRESS = 13
+IS_ADDRESS_POSTALCODE = 14
+IS_ADDRESS_STREET = 15
+IS_ADDRESS_STATEORPROVINCE = 16
+IS_ADDRESS_CITY = 17
+IS_ADDRESS_COUNTRYNAME = 18
+IS_ADDRESS_COUNTRYSHORTNAME = 19
+IS_CURRENCY_AMOUNTANDSYMBOL = 20
+IS_CURRENCY_AMOUNT = 21
+IS_DATE_FULLDATE = 22
+IS_DATE_MONTH = 23
+IS_DATE_DAY = 24
+IS_DATE_YEAR = 25
+IS_DATE_MONTHNAME = 26
+IS_DATE_DAYNAME = 27
+IS_DIGITS = 28
+IS_NUMBER = 29
+IS_ONECHAR = 30
+IS_PASSWORD = 31
+IS_TELEPHONE_FULLTELEPHONENUMBER = 32
+IS_TELEPHONE_COUNTRYCODE = 33
+IS_TELEPHONE_AREACODE = 34
+IS_TELEPHONE_LOCALNUMBER = 35
+IS_TIME_FULLTIME = 36
+IS_TIME_HOUR = 37
+IS_TIME_MINORSEC = 38
+IS_NUMBER_FULLWIDTH = 39
+IS_ALPHANUMERIC_HALFWIDTH = 40
+IS_ALPHANUMERIC_FULLWIDTH = 41
+IS_CURRENCY_CHINESE = 42
+IS_BOPOMOFO = 43
+IS_HIRAGANA = 44
+IS_KATAKANA_HALFWIDTH = 45
+IS_KATAKANA_FULLWIDTH = 46
+IS_HANJA = 47
+IS_HANGUL_HALFWIDTH = 48
+IS_HANGUL_FULLWIDTH = 49
+IS_SEARCH = 50
+IS_FORMULA = 51
+IS_SEARCH_INCREMENTAL = 52
+IS_CHINESE_HALFWIDTH = 53
+IS_CHINESE_FULLWIDTH = 54
+IS_NATIVE_SCRIPT = 55
+```
+
+See [InputScope enumeration](http://msdn.microsoft.com/en-us/library/windows/desktop/ms538181.aspx) for details.
diff --git a/doc/design_doc/mozc_ipc.md b/doc/design_doc/mozc_ipc.md
new file mode 100644
index 0000000..12680c9
--- /dev/null
+++ b/doc/design_doc/mozc_ipc.md
@@ -0,0 +1,34 @@
+# Mozc IPC
+
+## Abstract
+
+This document describes why IPC is necessary to run Mozc, and how each
+implementation should be.
+
+## Background
+
+Mozc is an input method product and it consits with multiple processes
+to achieve text input.  We have "converter" process to maintain
+conversions and "renderer" process to render the candidates of input.
+
+## Implementation requirements
+
+Mozc IPC call happens for EVERY key events.  Thus we need to care the
+privacy/security.  Currently we adopt following policy:
+
+  * the IPC name has to be private to the user: processes which run with another user's auth must not access to the IPC.
+  * the IPC name has to be safe to squatters.  For example, using random IPC name will reduce the danger of squatters.
+
+In addition, Mozc IPC call is "one-shot".  It doesn't require any
+"connections".  When a key event arrives to Mozc, it creates an
+IPCClient instance, calls Call() method to send the command to the
+server, gets its response, and then destroy IPCClient object.
+
+So you don't need to care the maintenance of connections, but you need
+to care the performance a bit.  If one of a step during this is very
+slow, it will damage the performance of Mozc.
+
+Note that IPC calls happen only when a user presses a key or clicks
+mouses.  So if performance of an implementation is not the best, it
+might not be a problem.  Please think about the balance of
+implementation and security.
diff --git a/doc/design_doc/surrounding_text.md b/doc/design_doc/surrounding_text.md
new file mode 100644
index 0000000..76cc3b1
--- /dev/null
+++ b/doc/design_doc/surrounding_text.md
@@ -0,0 +1,90 @@
+Surrounding Text Support in Mozc
+================================
+
+Objective
+---------
+
+Utilize surrounding text information to achieve more efficient and intelligent text input experience.
+
+Design Highlights
+-----------------
+
+### Temporary history invalidation
+
+Mozc converter internally maintains history segments mainly for users who input Japanese sentence with segments in fragments segments. Imagine that a user input an example sentence “今日は良い天気です” as 3 segments as follows.
+
+  1. kyouha (今日は) -> convert -> commit
+  1. yoi (良い) -> convert -> commit
+  1. tennkidesu (天気です) -> convert -> commit
+
+At the step 3, Mozc converter takes the result of 1 and 2 into consideration when "tennkidesu" is converted. However, this approach may not work well when the caret position is moved but the Mozc converter cannot notice it. In order to work around this situation, Mozc converter can read the preceding text and check if the internal history information is consistent with the preceding text. If they are inconsistent, history segments should be invalidated.
+
+### History reconstruction
+
+In order to improve the conversion quality when preceding text and history segment are mismatched, it would be nice if we can reconstruct (or emulate) history segments from the preceding text.
+
+In this project, reconstruct segments that consists of only number or alphabet as a first step. Reconstructing more variety of tokens will be future work.
+
+Following table describe the mappings from a preceding text to key/value and POS (Part-of-speech) ID.
+
+| Preceding Text     | Key     | Value     | POS     |
+|:-------------------|:--------|:----------|:--------|
+| "10"               | "10"    | "10"      | Number  |
+| "10 "              | "10"    | "10"      | Number  |
+| "1 10 "            | "10"    | "10"      | Number  |
+| "C60"              | "60"    | "60"      | Number  |
+| "abc"              | "abc"   | "abc"     | UniqueNoun |
+| "this is"          | "is"    | "is"      | UniqueNoun |
+| "あ"              | N/A     | N/A       | N/A     |
+
+Scope
+-----
+
+Here is the list of typical cases when preceding text and history segment are mismatched.
+
+  * Multiple users are writing the same document. (e.g. Google Document)
+  * A user prefers to turn IME off when he/she input alphanumeric characters. e.g. He/she inputs "今日は Andy に会う" as following steps:
+    1. Turn IME on
+    1. Type "kyouha" then convert it to "今日は"
+    1. Turn IME off
+    1. Type " Andy "
+    1. Turn IME on
+    1. Type "niau" then convert it to "に会う"
+  * Caret position is moved by mouse.
+
+Surrounding text has been available in the following OSes and frameworks:
+  * Windows OS
+    * Microsoft Internet Explorer
+    * Google Chrome 17+
+    * Mozilla Firefox
+    * Microsoft Office
+    * Windows Presentation Foundation (WPF)
+  * Apple OS X
+  * Android OS
+  * Chromium OS
+
+Here is the list of other possible usages of surrounding text in future projects.
+
+  * Language detection.
+  * Character width (narrow/wide) adjustment.
+  * Personal name recognition (e.g., SNS screen names)
+
+Risk
+----
+
+Some buggy applications that wrongly handle surrounding text event may become unstable. Basically there should be no privacy risk because applications are expected to hide sensitive text such as password from IME.
+
+Production Impact
+-----------------
+
+Available on Windows, Apple OS X, Chromium OS and Linux desktop.  No impact for Android platform.
+
+Release History
+---------------
+
+  * Initial release: 1.11.1490.10x
+
+Reference
+---------
+
+  * [chrome.input.ime](http://developer.chrome.com/extensions/input.ime.html)
diff --git a/doc/release_history.md b/doc/release_history.md
new file mode 100644
index 0000000..8586086
--- /dev/null
+++ b/doc/release_history.md
@@ -0,0 +1,204 @@
+Release History
+===============
+
+2.17.2073.102 - 2.17.2095.102 / *2015-04-11* - *2015-05-10*
+--------------------------------------------------
+You can check out Mozc [2.17.2095.102](https://github.com/google/mozc/commit/321e0656b0f2e233ab1c164bd86c58568c9e92f2) as follows.
+
+```
+gclient sync --revision=321e0656b0f2e233ab1c164bd86c58568c9e92f2
+```
+
+Summary of changes between [2.17.2073.102](https://github.com/google/mozc/commit/0556a8bd57014f05583bc001d57b4b64aac00a47) and [2.17.2095.102](https://github.com/google/mozc/commit/321e0656b0f2e233ab1c164bd86c58568c9e92f2).
+
+  * DEPS changes:
+    * GYP repository is switched from code.google.com to chromium.googlesource.com.
+    * ZLib repository is switched from src.chromium.org to github.com/madler/zlib.
+  * Build related changes:
+    * Reference build Docker image is switched from Ubuntu 14.04.1 to Ubuntu 14.04.2.
+    * Fix build breakage in Android since [2.16.2072.102](https://github.com/google/mozc/commit/20c1c08d7d4e89530e3e42db3476d682981c2b68).
+    * Add Dockerfile based on Fedora 21 to build Mozc for Android, NaCl, and Linux desktop.
+    * Continuous build is available for OS X and Windows.
+      * OS X: [Travis CI](https://travis-ci.org/google/mozc/)
+      * Windows: [AppVeyor](https://ci.appveyor.com/project/google/mozc)
+  * Major changes:
+    * Update system dictionary.
+    * Support rule-based zero query suggestion in [2.16.2080.102](https://github.com/google/mozc/commit/988392a0c821494fee2d90090cdca4c3c98bcf83).
+  * Known issues:
+    * [#263](https://github.com/google/mozc/issues/263): Voiced sound marks on the key pad is not placed at correct position in Android
+    * [#273](https://github.com/google/mozc/issues/273): Compilation errors in Android arm64 and mips64 build
+  * Fixed issues:
+    * none
+  * Total commits:
+    * [28 commits](https://github.com/google/mozc/compare/20c1c08d7d4e89530e3e42db3476d682981c2b68...321e0656b0f2e233ab1c164bd86c58568c9e92f2).
+
+
+2.16.2038.102 - 2.16.2072.102 / *2015-01-31* - *2015-03-15*
+--------------------------------------------------
+You can check out Mozc [2.16.2072.102](https://github.com/google/mozc/commit/20c1c08d7d4e89530e3e42db3476d682981c2b68) as follows.
+
+```
+gclient sync --revision=20c1c08d7d4e89530e3e42db3476d682981c2b68
+```
+
+Summary of changes between [2.16.2038.102](https://github.com/google/mozc/commit/6895df10f02dafb86150da8a3cc65f051f70e054) and [2.16.2072.102](https://github.com/google/mozc/commit/20c1c08d7d4e89530e3e42db3476d682981c2b68).
+
+  * DEPS changes:
+    * none
+  * Build related changes:
+    * [#286](https://github.com/google/mozc/issues/286): Clang 3.4 on Ubuntu 14.04 is used when building host binaries Mozc in Android, NaCl, and Linux desktop builds.  See [#286](https://github.com/google/mozc/issues/286) about why we have switched back to Clang 3.4 from Clang 3.5 on Ubuntu 14.04.
+    * Pepper 40 SDK is required to build Mozc for NaCl.
+    * Android 5.1 Lollipop SDK (or higher) is required to build Mozc for Android.
+  * Major changes:
+    * Target API level of Android binaries are incremented to 22, that is, `Build.VERSION_CODES.LOLLIPOP_MR1` a.k.a. Android 5.1.
+    * LOUDS Trie engine was rewritten for better performance and maintainability.
+    * `python build_mozc.py runtests` is now supported in Windows.
+  * Known issues:
+    * [#263](https://github.com/google/mozc/issues/263): Voiced sound marks on the key pad is not placed at correct position in Android
+    * [#273](https://github.com/google/mozc/issues/273): Compilation errors in Android arm64 and mips64 build
+  * Fixed issues:
+    * [#286](https://github.com/google/mozc/issues/286): FIX: Build fails if clang-3.5 package is used in Ubuntu 14.04
+  * Total commits:
+    * [33 commits](https://github.com/google/mozc/compare/091dc3bafa1645432dd9b8ba1ba0f77645d39c1a...20c1c08d7d4e89530e3e42db3476d682981c2b68).
+
+
+2.16.2021.102 - 2.16.2037.102 / *2015-01-24* - *2015-01-25*
+--------------------------------------------------
+You can check out Mozc [2.16.2037.102](https://github.com/google/mozc/commit/091dc3bafa1645432dd9b8ba1ba0f77645d39c1a) as follows.
+
+```
+gclient sync --revision=091dc3bafa1645432dd9b8ba1ba0f77645d39c1a
+```
+
+Summary of changes between [2.16.2021.102](https://github.com/google/mozc/commit/f78dad8d2c16d77f20577f04c2fa95ed85c386cb) and [2.16.2037.102](https://github.com/google/mozc/commit/091dc3bafa1645432dd9b8ba1ba0f77645d39c1a).
+
+  * DEPS changes:
+    * none
+  * Build related changes:
+    * libc++ is used by default to build Android target binaries.
+    * [#276](https://github.com/google/mozc/issues/276): Clang 3.5 is now required to build Mozc for Android, NaCl, and Linux.
+    * Visual C++ 2013 is required to build Mozc for Windows.
+  * Major changes:
+    * [#277](https://github.com/google/mozc/issues/277): Mozc for Windows now requires Windows Vista SP2 and later. Mozc [2.16.2034.102](https://github.com/google/mozc/commit/389932c227827de7fcd17a217de96c5b5a838672) is the last version that can run on Windows XP and Windows 2003 Server.
+  * Known issues:
+    * [#263](https://github.com/google/mozc/issues/263): Voiced sound marks on the key pad is not placed at correct position in Android
+    * [#273](https://github.com/google/mozc/issues/273): Compilation errors in Android arm64 and mips64 build
+  * Fixed issues:
+    * [#274](https://github.com/google/mozc/issues/274): FIX: Inconsistency between suggestion candidates and conversion candidates
+    * [#275](https://github.com/google/mozc/issues/275): FIX: Learning algorithm is sometimes too aggressive when punctuation is committed
+    * [#276](https://github.com/google/mozc/issues/276): FIX: Require Clang to build Linux host binaries
+    * [#277](https://github.com/google/mozc/issues/277): FIX: Discontinue the support of Windows XP/2003 Server
+  * Total commits:
+    * [17 commits](https://github.com/google/mozc/compare/5c96a77a0454f5877153d18d8a7ca5a5ddfb964b...091dc3bafa1645432dd9b8ba1ba0f77645d39c1a).
+
+
+2.16.2008.102 - 2.16.2020.102 / *2015-01-01* - *2015-01-18*
+--------------------------------------------------
+You can check out Mozc [2.16.2020.102](https://github.com/google/mozc/commit/5c96a77a0454f5877153d18d8a7ca5a5ddfb964b) as follows.
+
+```
+gclient sync --revision=5c96a77a0454f5877153d18d8a7ca5a5ddfb964b
+```
+
+Summary of changes between [2.16.2008.102](https://github.com/google/mozc/commit/60de3075dde2ff1903aa820a7f9110455e3091c7) and [2.16.2020.102](https://github.com/google/mozc/commit/5c96a77a0454f5877153d18d8a7ca5a5ddfb964b).
+
+  * DEPS changes:
+    * protobuf: [bba83652e1be610bdb7ee1566ad18346d98b843c -> 172019c40bf548908ab09bfd276074c929d48415](https://github.com/google/protobuf/compare/172019c40bf548908ab09bfd276074c929d48415...bba83652e1be610bdb7ee1566ad18346d98b843c) (downgrading)
+  * Build related changes:
+    * Ubuntu 14.04 is used as the reference build/test environment for Android, `NaCl`, and Linux.  Hereafter we will not make sure that Mozc can be built on Ubuntu 12.04.
+  * Known issues:
+    * [#263](https://github.com/google/mozc/issues/263): Voiced sound marks on the key pad is not placed at correct position in Android
+    * [#273](https://github.com/google/mozc/issues/273): Compilation errors in Android arm64 and mips64 build
+  * Fixed issues:
+    * [#265](https://github.com/google/mozc/issues/265): FIX: All resources are not released in Service.onDestory
+    * [#266](https://github.com/google/mozc/issues/266): FIX: Many emojis are suggested from space
+    * [#267](https://github.com/google/mozc/issues/267): FIX: Noisy candidate "itsumo" due to language aware conversion
+    * [#269](https://github.com/google/mozc/issues/269): FIX: BuildInDocker fails when building for Android
+    * [#271](https://github.com/google/mozc/issues/271): FIX: Runtime CHECK failure on Windows: protobuf/src/google/protobuf/descriptor.cc:1018
+    * [#272](https://github.com/google/mozc/issues/272): FIX: `AssertionError` in `gen_zip_code_seed.py`
+  * Total commits:
+    * [13 commits](https://github.com/google/mozc/compare/1ffe8c9b56798baf6cac68a6dd6d539e0ccaad82...5c96a77a0454f5877153d18d8a7ca5a5ddfb964b).
+
+
+2.16.2004.102 - 2.16.2007.102 / *2014-12-22* - *2014-12-24*
+--------------------------------------------------
+You can check out Mozc [2.16.2007.102](https://github.com/google/mozc/commit/1ffe8c9b56798baf6cac68a6dd6d539e0ccaad82) as follows.
+
+```
+gclient sync --revision=1ffe8c9b56798baf6cac68a6dd6d539e0ccaad82
+```
+
+Summary of changes between [2.16.2004.102](https://github.com/google/mozc/commit/70aa0ddaf4a1e57daccb10797d3afee433f174f6) and [2.16.2007.102](https://github.com/google/mozc/commit/1ffe8c9b56798baf6cac68a6dd6d539e0ccaad82).
+
+  * DEPS changes:
+    * fontTools: initial import as of [5ba7d98a4153fad57258fca23b0bcb238717aec3](https://github.com/googlei18n/fonttools/compare/a8f3feacb0e197c00f3f1c236777748a4dc6cf64...5ba7d98a4153fad57258fca23b0bcb238717aec3)
+  * Build related changes:
+    * Android build requires Android-21 SDK
+  * Major changes:
+    * Enable Material Theme on Android
+    * Support floating window and floating mode indicator on Android 5.0 and later when physical keyboard is attached
+    * Improve accessibility support on Android
+  * Known issues:
+    * [#263](https://github.com/google/mozc/issues/263): Voiced sound marks on the key pad is not placed at correct position in Android
+  * Total commits:
+    * [4 commits](https://github.com/google/mozc/compare/fe635d73050960cdfdb31a11dc3d08f636e14d49...1ffe8c9b56798baf6cac68a6dd6d539e0ccaad82).
+
+
+2.16.1918.102 - 2.16.2003.102 / *2014-11-09* - *2014-12-21*
+--------------------------------------------------
+You can check out Mozc [2.16.2003.102](https://github.com/google/mozc/commit/fe635d73050960cdfdb31a11dc3d08f636e14d49) as follows.
+
+```
+gclient sync --revision=fe635d73050960cdfdb31a11dc3d08f636e14d49
+```
+
+Summary of changes between [2.16.1918.102](https://github.com/google/mozc/commit/b729086960878ccca5f2229a4fc9701e84093583) and [2.16.2003.102](https://github.com/google/mozc/commit/fe635d73050960cdfdb31a11dc3d08f636e14d49).
+
+  * DEPS changes:
+    * gtest: [r692 -> r700](https://code.google.com/p/googletest/source/list?start=700&num=9)
+    * gmock: [r485 -> r501](https://code.google.com/p/googlemock/source/list?start=501&num=17)
+    * gyp: [r1987 -> r2012](https://code.google.com/p/gyp/source/list?start=2012&num=26)
+    * protobuf: [172019c40bf548908ab09bfd276074c929d48415 -> bba83652e1be610bdb7ee1566ad18346d98b843c](https://github.com/google/protobuf/compare/172019c40bf548908ab09bfd276074c929d48415...bba83652e1be610bdb7ee1566ad18346d98b843c)
+  * Build related changes:
+    * Android build requires NDK r10d
+    * [#259](https://github.com/google/mozc/issues/259): Android build supports arm64/mips64/x86-64
+    * [#260](https://github.com/google/mozc/issues/260): Android build supports Clang 3.5 and libc++
+    * Versioning scheme for Android is changed. See r439 (on Google Code) for details.
+    * Build time dependency on libzinnia-dev is removed from Android and NaCl builds
+  * Major changes:
+    * Android 2.1 - Android 3.2 are no longer supported
+    * armeabi-v7a is always enabled in arm 32-bit build for Android
+    * Updated main dictionary, Emoji dictionary, emoticon dictionary, and single kanji dictionary
+  * Fixed issues:
+    * [#248](https://github.com/google/mozc/issues/248): FIX: IME crashes when using US International hardware keyboard
+    * [#255](https://github.com/google/mozc/issues/255): FIX: ibus-mozc + XIM: preedit text is not cleared after preedit commit triggered by focus change
+    * [#257](https://github.com/google/mozc/issues/257): FIX: Entering symbol view causes NPE when "Switch Access" accessibility mode is enabled
+    * [#261](https://github.com/google/mozc/issues/261): FIX: An empty word can be suggested in the candidate list
+  * Total commits:
+    * [87 commits](https://github.com/google/mozc/compare/026d814598ba223e3becc638b01c79935ea98ee2...fe635d73050960cdfdb31a11dc3d08f636e14d49).
+
+---
+
+Release History of Mozc 1.X
+---------------------------
+
+##1.0.558.102 - 1.15.1917.102 / *2010-12-09* - *2014-11-03*
+
+**TODO: Import previous release notes here.**
+
+Summary of changes between [1.0.558.102](https://github.com/google/mozc/commit/664029b064d23e0520309ec09d89ea5013783ce6) and [1.15.1917.102](https://github.com/google/mozc/commit/026d814598ba223e3becc638b01c79935ea98ee2).
+  * Total commits:
+    * [161 commits](https://github.com/google/mozc/compare/cae073cc74bc31625a659eb91e95d557cb2a6428...026d814598ba223e3becc638b01c79935ea98ee2).
+
+---
+
+Release History of Mozc 0.X
+---------------------------
+
+##0.11.347.100 - 0.13.523.102 / *2010-05-10* - *2010-11-02*
+
+**TODO: Import previous release notes here.**
+
+Summary of changes between [0.11.347.100](https://github.com/google/mozc/commit/0fdb7a7b04bdbbc640058e1856b278e668a69b1e) and [0.13.523.102](https://github.com/google/mozc/commit/cae073cc74bc31625a659eb91e95d557cb2a6428).
+  * Total commits:
+    * [17 commits](https://github.com/google/mozc/compare/1d6e951d92680d30e1a41c16e8fa74eed4039098...cae073cc74bc31625a659eb91e95d557cb2a6428).
