diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index bf146ea..9c4bb48 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -21,7 +21,7 @@
   <uses-permission xmlns:android="http://schemas.android.com/apk/res/android" android:name="android.permission.VIBRATE"/>
     <application android:label="OpenWnn">
 
-        <service android:name="OpenWnnJAJP" android:label="OpenWnn Japanese"
+        <service android:name="OpenWnnJAJP" android:label="Japanese IME"
 		 android:permission="android.permission.BIND_INPUT_METHOD"
 		 android:id="@+id/openwnn_japanese">
             <intent-filter>
diff --git a/README.txt b/README.txt
index f629b4e..f5e7e8d 100644
--- a/README.txt
+++ b/README.txt
@@ -1,14 +1,14 @@
 -------------------------------------------------------------------------------
-                            OpenWnn for Android README
+                                   OpenWnn README
 
-                             Version 1.21-RC-20090403
+                                   Version 1.3.1
                   
      (C) Copyright OMRON SOFTWARE Co., Ltd. 2008,2009 All Rights Reserved.
 -------------------------------------------------------------------------------
 
-1. About OpenWnn for Android
+1. About OpenWnn
 
-    OpenWnn for Android is a IME(Input Method Editor) package which
+    OpenWnn is a IME(Input Method Editor) package which
     works on Android's IMF(Input Method Framework).  This version
     contains Japanese, Chinese and English IME.
 
@@ -24,7 +24,7 @@
 
     o Building environment
         . Building control file             (XML, makefile, shell script)
-        . IME native library source code    (C language)
+        . IME native library source code    (C)
         . IME resource                      (XML, PNG)
         . IME source code                   (Java)
 
@@ -89,6 +89,8 @@
         drawable/                             |
             *.xml                             |
             *.png                             |
+        drawable-ja/                          |
+            *.png                             |
         layout/                               |
             *.xml                             |
         raw/                                  |
diff --git a/res/drawable/cand_back.xml b/res/drawable/cand_back.xml
new file mode 100644
index 0000000..a06d2b3
--- /dev/null
+++ b/res/drawable/cand_back.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008,2009  OMRON SOFTWARE Co., Ltd.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_pressed="true" 
+          android:drawable="@drawable/cand_back_pressed" />
+    <item android:state_pressed="false"
+          android:drawable="@drawable/cand_back_normal" />
+</selector>
diff --git a/res/drawable/cand_back_normal.9.png b/res/drawable/cand_back_normal.9.png
new file mode 100644
index 0000000..4ed524b
--- /dev/null
+++ b/res/drawable/cand_back_normal.9.png
Binary files differ
diff --git a/res/drawable/cand_back_pressed.9.png b/res/drawable/cand_back_pressed.9.png
new file mode 100644
index 0000000..0571ba7
--- /dev/null
+++ b/res/drawable/cand_back_pressed.9.png
Binary files differ
diff --git a/res/drawable/cand_down.png b/res/drawable/cand_down.png
new file mode 100644
index 0000000..e73aad2
--- /dev/null
+++ b/res/drawable/cand_down.png
Binary files differ
diff --git a/res/drawable/cand_down_press.png b/res/drawable/cand_down_press.png
new file mode 100644
index 0000000..cb72e57
--- /dev/null
+++ b/res/drawable/cand_down_press.png
Binary files differ
diff --git a/res/drawable/cand_up.png b/res/drawable/cand_up.png
new file mode 100644
index 0000000..17b59f4
--- /dev/null
+++ b/res/drawable/cand_up.png
Binary files differ
diff --git a/res/drawable/cand_up_press.png b/res/drawable/cand_up_press.png
new file mode 100644
index 0000000..e89d647
--- /dev/null
+++ b/res/drawable/cand_up_press.png
Binary files differ
diff --git a/res/drawable/candidate.png b/res/drawable/candidate.png
new file mode 100644
index 0000000..e8f8f3f
--- /dev/null
+++ b/res/drawable/candidate.png
Binary files differ
diff --git a/res/drawable/dialog_bubble.9.png b/res/drawable/dialog_bubble.9.png
new file mode 100644
index 0000000..d77f85f
--- /dev/null
+++ b/res/drawable/dialog_bubble.9.png
Binary files differ
diff --git a/res/drawable/dialog_bubble_moji.9.png b/res/drawable/dialog_bubble_moji.9.png
new file mode 100644
index 0000000..80f4a0e
--- /dev/null
+++ b/res/drawable/dialog_bubble_moji.9.png
Binary files differ
diff --git a/res/drawable/dialog_bubble_symbol.9.png b/res/drawable/dialog_bubble_symbol.9.png
new file mode 100644
index 0000000..255653a
--- /dev/null
+++ b/res/drawable/dialog_bubble_symbol.9.png
Binary files differ
diff --git a/res/drawable/dialog_bubble_undo.9.png b/res/drawable/dialog_bubble_undo.9.png
new file mode 100644
index 0000000..58e5cd8
--- /dev/null
+++ b/res/drawable/dialog_bubble_undo.9.png
Binary files differ
diff --git a/res/drawable/key_12key_caps.png b/res/drawable/key_12key_caps.png
new file mode 100644
index 0000000..d0c52c2
--- /dev/null
+++ b/res/drawable/key_12key_caps.png
Binary files differ
diff --git a/res/drawable/key_12key_caps_b.png b/res/drawable/key_12key_caps_b.png
new file mode 100644
index 0000000..19b8d2d
--- /dev/null
+++ b/res/drawable/key_12key_caps_b.png
Binary files differ
diff --git a/res/drawable/key_12key_dakuten.png b/res/drawable/key_12key_dakuten.png
index e40ecfe..8e979cc 100644
--- a/res/drawable/key_12key_dakuten.png
+++ b/res/drawable/key_12key_dakuten.png
Binary files differ
diff --git a/res/drawable/key_12key_dakuten_b.png b/res/drawable/key_12key_dakuten_b.png
index 67622ab..5b850bf 100644
--- a/res/drawable/key_12key_dakuten_b.png
+++ b/res/drawable/key_12key_dakuten_b.png
Binary files differ
diff --git a/res/drawable/key_12key_del.png b/res/drawable/key_12key_del.png
index 1f65116..4aab087 100644
--- a/res/drawable/key_12key_del.png
+++ b/res/drawable/key_12key_del.png
Binary files differ
diff --git a/res/drawable/key_12key_del_b.png b/res/drawable/key_12key_del_b.png
index 8a1811d..ecc2dba 100644
--- a/res/drawable/key_12key_del_b.png
+++ b/res/drawable/key_12key_del_b.png
Binary files differ
diff --git a/res/drawable/key_12key_del_b_landscape.png b/res/drawable/key_12key_del_b_landscape.png
deleted file mode 100644
index bcb9bd5..0000000
--- a/res/drawable/key_12key_del_b_landscape.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/key_12key_del_landscape.png b/res/drawable/key_12key_del_landscape.png
deleted file mode 100644
index 9dab665..0000000
--- a/res/drawable/key_12key_del_landscape.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/key_12key_eisukana.png b/res/drawable/key_12key_eisukana.png
index 18284d3..b28c9cd 100644
--- a/res/drawable/key_12key_eisukana.png
+++ b/res/drawable/key_12key_eisukana.png
Binary files differ
diff --git a/res/drawable/key_12key_enter.png b/res/drawable/key_12key_enter.png
index ccab752..b2e729b 100644
--- a/res/drawable/key_12key_enter.png
+++ b/res/drawable/key_12key_enter.png
Binary files differ
diff --git a/res/drawable/key_12key_enter_b.png b/res/drawable/key_12key_enter_b.png
index cc4a90d..d26baa6 100644
--- a/res/drawable/key_12key_enter_b.png
+++ b/res/drawable/key_12key_enter_b.png
Binary files differ
diff --git a/res/drawable/key_12key_enter_jp.png b/res/drawable/key_12key_enter_jp.png
new file mode 100644
index 0000000..aeb461b
--- /dev/null
+++ b/res/drawable/key_12key_enter_jp.png
Binary files differ
diff --git a/res/drawable/key_12key_enter_jp_b.png b/res/drawable/key_12key_enter_jp_b.png
new file mode 100644
index 0000000..784a7e9
--- /dev/null
+++ b/res/drawable/key_12key_enter_jp_b.png
Binary files differ
diff --git a/res/drawable/key_12key_hiragana0.png b/res/drawable/key_12key_hiragana0.png
index 36e5c8d..6c039d0 100644
--- a/res/drawable/key_12key_hiragana0.png
+++ b/res/drawable/key_12key_hiragana0.png
Binary files differ
diff --git a/res/drawable/key_12key_hiragana1.png b/res/drawable/key_12key_hiragana1.png
index 863bdf1..ff33fd5 100644
--- a/res/drawable/key_12key_hiragana1.png
+++ b/res/drawable/key_12key_hiragana1.png
Binary files differ
diff --git a/res/drawable/key_12key_hiragana2.png b/res/drawable/key_12key_hiragana2.png
index 0d88729..2338b39 100644
--- a/res/drawable/key_12key_hiragana2.png
+++ b/res/drawable/key_12key_hiragana2.png
Binary files differ
diff --git a/res/drawable/key_12key_hiragana3.png b/res/drawable/key_12key_hiragana3.png
index eb0699a..6508763 100644
--- a/res/drawable/key_12key_hiragana3.png
+++ b/res/drawable/key_12key_hiragana3.png
Binary files differ
diff --git a/res/drawable/key_12key_hiragana4.png b/res/drawable/key_12key_hiragana4.png
index ffa9935..79d9a03 100644
--- a/res/drawable/key_12key_hiragana4.png
+++ b/res/drawable/key_12key_hiragana4.png
Binary files differ
diff --git a/res/drawable/key_12key_hiragana5.png b/res/drawable/key_12key_hiragana5.png
index 1d71465..62769a2 100644
--- a/res/drawable/key_12key_hiragana5.png
+++ b/res/drawable/key_12key_hiragana5.png
Binary files differ
diff --git a/res/drawable/key_12key_hiragana6.png b/res/drawable/key_12key_hiragana6.png
index e327e38..a130fb8 100644
--- a/res/drawable/key_12key_hiragana6.png
+++ b/res/drawable/key_12key_hiragana6.png
Binary files differ
diff --git a/res/drawable/key_12key_hiragana7.png b/res/drawable/key_12key_hiragana7.png
index 4414fa1..f74e52a 100644
--- a/res/drawable/key_12key_hiragana7.png
+++ b/res/drawable/key_12key_hiragana7.png
Binary files differ
diff --git a/res/drawable/key_12key_hiragana8.png b/res/drawable/key_12key_hiragana8.png
index abf63f2..f2a3fdb 100644
--- a/res/drawable/key_12key_hiragana8.png
+++ b/res/drawable/key_12key_hiragana8.png
Binary files differ
diff --git a/res/drawable/key_12key_hiragana9.png b/res/drawable/key_12key_hiragana9.png
index 38a54cb..35a2129 100644
--- a/res/drawable/key_12key_hiragana9.png
+++ b/res/drawable/key_12key_hiragana9.png
Binary files differ
diff --git a/res/drawable/key_12key_left.png b/res/drawable/key_12key_left.png
index 39ae53d..d604272 100644
--- a/res/drawable/key_12key_left.png
+++ b/res/drawable/key_12key_left.png
Binary files differ
diff --git a/res/drawable/key_12key_left_b.png b/res/drawable/key_12key_left_b.png
index f44f71a..02fc93b 100644
--- a/res/drawable/key_12key_left_b.png
+++ b/res/drawable/key_12key_left_b.png
Binary files differ
diff --git a/res/drawable/key_12key_mode_full_alpha.png b/res/drawable/key_12key_mode_full_alpha.png
new file mode 100644
index 0000000..fd4f880
--- /dev/null
+++ b/res/drawable/key_12key_mode_full_alpha.png
Binary files differ
diff --git a/res/drawable/key_12key_mode_full_kata.png b/res/drawable/key_12key_mode_full_kata.png
new file mode 100644
index 0000000..81b66e2
--- /dev/null
+++ b/res/drawable/key_12key_mode_full_kata.png
Binary files differ
diff --git a/res/drawable/key_12key_mode_full_num.png b/res/drawable/key_12key_mode_full_num.png
new file mode 100644
index 0000000..dc929a1
--- /dev/null
+++ b/res/drawable/key_12key_mode_full_num.png
Binary files differ
diff --git a/res/drawable/key_12key_mode_half_alpha.png b/res/drawable/key_12key_mode_half_alpha.png
new file mode 100644
index 0000000..4bf6f99
--- /dev/null
+++ b/res/drawable/key_12key_mode_half_alpha.png
Binary files differ
diff --git a/res/drawable/key_12key_mode_half_kata.png b/res/drawable/key_12key_mode_half_kata.png
new file mode 100644
index 0000000..322341a
--- /dev/null
+++ b/res/drawable/key_12key_mode_half_kata.png
Binary files differ
diff --git a/res/drawable/key_12key_mode_half_num.png b/res/drawable/key_12key_mode_half_num.png
new file mode 100644
index 0000000..68a8760
--- /dev/null
+++ b/res/drawable/key_12key_mode_half_num.png
Binary files differ
diff --git a/res/drawable/key_12key_mode_hira.png b/res/drawable/key_12key_mode_hira.png
new file mode 100644
index 0000000..9eb8584
--- /dev/null
+++ b/res/drawable/key_12key_mode_hira.png
Binary files differ
diff --git a/res/drawable/key_12key_period_comma.png b/res/drawable/key_12key_period_comma.png
new file mode 100644
index 0000000..d0fdb93
--- /dev/null
+++ b/res/drawable/key_12key_period_comma.png
Binary files differ
diff --git a/res/drawable/key_12key_period_comma_b.png b/res/drawable/key_12key_period_comma_b.png
new file mode 100644
index 0000000..aa9ad02
--- /dev/null
+++ b/res/drawable/key_12key_period_comma_b.png
Binary files differ
diff --git a/res/drawable/key_12key_pict_sym.png b/res/drawable/key_12key_pict_sym.png
index cef2388..a4845e5 100644
--- a/res/drawable/key_12key_pict_sym.png
+++ b/res/drawable/key_12key_pict_sym.png
Binary files differ
diff --git a/res/drawable/key_12key_pict_sym_b.png b/res/drawable/key_12key_pict_sym_b.png
index 612b08b..43225a8 100644
--- a/res/drawable/key_12key_pict_sym_b.png
+++ b/res/drawable/key_12key_pict_sym_b.png
Binary files differ
diff --git a/res/drawable/key_12key_reverse.png b/res/drawable/key_12key_reverse.png
index 4eb4dc7..dd40bd9 100644
--- a/res/drawable/key_12key_reverse.png
+++ b/res/drawable/key_12key_reverse.png
Binary files differ
diff --git a/res/drawable/key_12key_reverse_b.png b/res/drawable/key_12key_reverse_b.png
index eb990c0..6d96fa3 100644
--- a/res/drawable/key_12key_reverse_b.png
+++ b/res/drawable/key_12key_reverse_b.png
Binary files differ
diff --git a/res/drawable/key_12key_right.png b/res/drawable/key_12key_right.png
index a1db3e9..94a288b 100644
--- a/res/drawable/key_12key_right.png
+++ b/res/drawable/key_12key_right.png
Binary files differ
diff --git a/res/drawable/key_12key_right_b.png b/res/drawable/key_12key_right_b.png
index fc4c5f8..06e21d0 100644
--- a/res/drawable/key_12key_right_b.png
+++ b/res/drawable/key_12key_right_b.png
Binary files differ
diff --git a/res/drawable/key_12key_space.png b/res/drawable/key_12key_space.png
index 41314c4..d67c898 100644
--- a/res/drawable/key_12key_space.png
+++ b/res/drawable/key_12key_space.png
Binary files differ
diff --git a/res/drawable/key_12key_space_b.png b/res/drawable/key_12key_space_b.png
index f6af7c8..35d1b19 100644
--- a/res/drawable/key_12key_space_b.png
+++ b/res/drawable/key_12key_space_b.png
Binary files differ
diff --git a/res/drawable/key_12key_space_jp.png b/res/drawable/key_12key_space_jp.png
new file mode 100644
index 0000000..4735e01
--- /dev/null
+++ b/res/drawable/key_12key_space_jp.png
Binary files differ
diff --git a/res/drawable/key_12key_space_jp_b.png b/res/drawable/key_12key_space_jp_b.png
new file mode 100644
index 0000000..0dc5206
--- /dev/null
+++ b/res/drawable/key_12key_space_jp_b.png
Binary files differ
diff --git a/res/drawable/key_12key_ten.png b/res/drawable/key_12key_ten.png
new file mode 100644
index 0000000..7d93f4f
--- /dev/null
+++ b/res/drawable/key_12key_ten.png
Binary files differ
diff --git a/res/drawable/key_12key_ten_b.png b/res/drawable/key_12key_ten_b.png
new file mode 100644
index 0000000..f65bb2e
--- /dev/null
+++ b/res/drawable/key_12key_ten_b.png
Binary files differ
diff --git a/res/drawable/key_mode_change_b.png b/res/drawable/key_mode_change_b.png
new file mode 100644
index 0000000..58159d9
--- /dev/null
+++ b/res/drawable/key_mode_change_b.png
Binary files differ
diff --git a/res/drawable/key_mode_panel_kbd_12key.png b/res/drawable/key_mode_panel_kbd_12key.png
new file mode 100644
index 0000000..c9a10fd
--- /dev/null
+++ b/res/drawable/key_mode_panel_kbd_12key.png
Binary files differ
diff --git a/res/drawable/key_mode_panel_kbd_12key_b.png b/res/drawable/key_mode_panel_kbd_12key_b.png
new file mode 100644
index 0000000..eda8c03
--- /dev/null
+++ b/res/drawable/key_mode_panel_kbd_12key_b.png
Binary files differ
diff --git a/res/drawable/key_qwerty_del.png b/res/drawable/key_qwerty_del.png
index ad87520..4aab087 100644
--- a/res/drawable/key_qwerty_del.png
+++ b/res/drawable/key_qwerty_del.png
Binary files differ
diff --git a/res/drawable/key_qwerty_del_b.png b/res/drawable/key_qwerty_del_b.png
index 8a1811d..ecc2dba 100644
--- a/res/drawable/key_qwerty_del_b.png
+++ b/res/drawable/key_qwerty_del_b.png
Binary files differ
diff --git a/res/drawable/key_qwerty_del_b_landscape.png b/res/drawable/key_qwerty_del_b_landscape.png
deleted file mode 100644
index bcb9bd5..0000000
--- a/res/drawable/key_qwerty_del_b_landscape.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/key_qwerty_del_landscape.png b/res/drawable/key_qwerty_del_landscape.png
deleted file mode 100644
index 9dab665..0000000
--- a/res/drawable/key_qwerty_del_landscape.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/key_qwerty_enter.png b/res/drawable/key_qwerty_enter.png
index ccab752..35a3fb0 100644
--- a/res/drawable/key_qwerty_enter.png
+++ b/res/drawable/key_qwerty_enter.png
Binary files differ
diff --git a/res/drawable/key_qwerty_enter_b.png b/res/drawable/key_qwerty_enter_b.png
index cc4a90d..1a4cbfd 100644
--- a/res/drawable/key_qwerty_enter_b.png
+++ b/res/drawable/key_qwerty_enter_b.png
Binary files differ
diff --git a/res/drawable/key_qwerty_enter_jp.png b/res/drawable/key_qwerty_enter_jp.png
new file mode 100644
index 0000000..7f002e6
--- /dev/null
+++ b/res/drawable/key_qwerty_enter_jp.png
Binary files differ
diff --git a/res/drawable/key_qwerty_enter_jp_b.png b/res/drawable/key_qwerty_enter_jp_b.png
new file mode 100644
index 0000000..a77c39f
--- /dev/null
+++ b/res/drawable/key_qwerty_enter_jp_b.png
Binary files differ
diff --git a/res/drawable/key_qwerty_mode_full_alpha.png b/res/drawable/key_qwerty_mode_full_alpha.png
new file mode 100644
index 0000000..fd4f880
--- /dev/null
+++ b/res/drawable/key_qwerty_mode_full_alpha.png
Binary files differ
diff --git a/res/drawable/key_qwerty_mode_full_kata.png b/res/drawable/key_qwerty_mode_full_kata.png
new file mode 100644
index 0000000..81b66e2
--- /dev/null
+++ b/res/drawable/key_qwerty_mode_full_kata.png
Binary files differ
diff --git a/res/drawable/key_qwerty_mode_full_num.png b/res/drawable/key_qwerty_mode_full_num.png
new file mode 100644
index 0000000..dc929a1
--- /dev/null
+++ b/res/drawable/key_qwerty_mode_full_num.png
Binary files differ
diff --git a/res/drawable/key_qwerty_mode_half_alpha.png b/res/drawable/key_qwerty_mode_half_alpha.png
new file mode 100644
index 0000000..4bf6f99
--- /dev/null
+++ b/res/drawable/key_qwerty_mode_half_alpha.png
Binary files differ
diff --git a/res/drawable/key_qwerty_mode_half_kata.png b/res/drawable/key_qwerty_mode_half_kata.png
new file mode 100644
index 0000000..322341a
--- /dev/null
+++ b/res/drawable/key_qwerty_mode_half_kata.png
Binary files differ
diff --git a/res/drawable/key_qwerty_mode_half_num.png b/res/drawable/key_qwerty_mode_half_num.png
new file mode 100644
index 0000000..68a8760
--- /dev/null
+++ b/res/drawable/key_qwerty_mode_half_num.png
Binary files differ
diff --git a/res/drawable/key_qwerty_mode_hira.png b/res/drawable/key_qwerty_mode_hira.png
new file mode 100644
index 0000000..9eb8584
--- /dev/null
+++ b/res/drawable/key_qwerty_mode_hira.png
Binary files differ
diff --git a/res/drawable/key_qwerty_pict_sym.png b/res/drawable/key_qwerty_pict_sym.png
index cef2388..ad89c49 100644
--- a/res/drawable/key_qwerty_pict_sym.png
+++ b/res/drawable/key_qwerty_pict_sym.png
Binary files differ
diff --git a/res/drawable/key_qwerty_pict_sym_b.png b/res/drawable/key_qwerty_pict_sym_b.png
index 612b08b..43225a8 100644
--- a/res/drawable/key_qwerty_pict_sym_b.png
+++ b/res/drawable/key_qwerty_pict_sym_b.png
Binary files differ
diff --git a/res/drawable/key_qwerty_space.png b/res/drawable/key_qwerty_space.png
index 41314c4..5ffcab5 100644
--- a/res/drawable/key_qwerty_space.png
+++ b/res/drawable/key_qwerty_space.png
Binary files differ
diff --git a/res/drawable/key_qwerty_space_b.png b/res/drawable/key_qwerty_space_b.png
index f6af7c8..a9390e2 100644
--- a/res/drawable/key_qwerty_space_b.png
+++ b/res/drawable/key_qwerty_space_b.png
Binary files differ
diff --git a/res/drawable/key_qwerty_space_conv.png b/res/drawable/key_qwerty_space_conv.png
index 40b9d91..654bc2d 100644
--- a/res/drawable/key_qwerty_space_conv.png
+++ b/res/drawable/key_qwerty_space_conv.png
Binary files differ
diff --git a/res/drawable/key_qwerty_space_conv_b.png b/res/drawable/key_qwerty_space_conv_b.png
index e87c22b..07bd232 100644
--- a/res/drawable/key_qwerty_space_conv_b.png
+++ b/res/drawable/key_qwerty_space_conv_b.png
Binary files differ
diff --git a/res/drawable/key_qwerty_space_pinyin.png b/res/drawable/key_qwerty_space_pinyin.png
index 265950d..2ea2029 100644
--- a/res/drawable/key_qwerty_space_pinyin.png
+++ b/res/drawable/key_qwerty_space_pinyin.png
Binary files differ
diff --git a/res/drawable/key_qwerty_space_pinyin_b.png b/res/drawable/key_qwerty_space_pinyin_b.png
index 3b085c3..570f881 100644
--- a/res/drawable/key_qwerty_space_pinyin_b.png
+++ b/res/drawable/key_qwerty_space_pinyin_b.png
Binary files differ
diff --git a/res/drawable/keybg_simple.9.png b/res/drawable/keybg_simple.9.png
new file mode 100644
index 0000000..160b0e7
--- /dev/null
+++ b/res/drawable/keybg_simple.9.png
Binary files differ
diff --git a/res/drawable/keybg_simple.png b/res/drawable/keybg_simple.png
deleted file mode 100644
index 274f1dd..0000000
--- a/res/drawable/keybg_simple.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/keybg_simple_p.9.png b/res/drawable/keybg_simple_p.9.png
new file mode 100644
index 0000000..136cab6
--- /dev/null
+++ b/res/drawable/keybg_simple_p.9.png
Binary files differ
diff --git a/res/drawable/keybg_simple_p.png b/res/drawable/keybg_simple_p.png
deleted file mode 100644
index 3ca60bf..0000000
--- a/res/drawable/keybg_simple_p.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/keybg_simple_psftoff.9.png b/res/drawable/keybg_simple_psftoff.9.png
new file mode 100644
index 0000000..fe11c0c
--- /dev/null
+++ b/res/drawable/keybg_simple_psftoff.9.png
Binary files differ
diff --git a/res/drawable/keybg_simple_psftoff.png b/res/drawable/keybg_simple_psftoff.png
deleted file mode 100644
index 65ded80..0000000
--- a/res/drawable/keybg_simple_psftoff.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/keybg_simple_psfton.9.png b/res/drawable/keybg_simple_psfton.9.png
new file mode 100644
index 0000000..a808e61
--- /dev/null
+++ b/res/drawable/keybg_simple_psfton.9.png
Binary files differ
diff --git a/res/drawable/keybg_simple_psfton.png b/res/drawable/keybg_simple_psfton.png
deleted file mode 100644
index c430d64..0000000
--- a/res/drawable/keybg_simple_psfton.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/keybg_simple_sftoff.9.png b/res/drawable/keybg_simple_sftoff.9.png
new file mode 100644
index 0000000..09b40ea
--- /dev/null
+++ b/res/drawable/keybg_simple_sftoff.9.png
Binary files differ
diff --git a/res/drawable/keybg_simple_sftoff.png b/res/drawable/keybg_simple_sftoff.png
deleted file mode 100644
index 406f79f..0000000
--- a/res/drawable/keybg_simple_sftoff.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/keybg_simple_sfton.9.png b/res/drawable/keybg_simple_sfton.9.png
new file mode 100644
index 0000000..03b5c5f
--- /dev/null
+++ b/res/drawable/keybg_simple_sfton.9.png
Binary files differ
diff --git a/res/drawable/keybg_simple_sfton.png b/res/drawable/keybg_simple_sfton.png
deleted file mode 100644
index cc6a3c9..0000000
--- a/res/drawable/keybg_simple_sfton.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/qwerty_bg_b_1.png b/res/drawable/qwerty_bg_b_1.png
deleted file mode 100644
index 92bed97..0000000
--- a/res/drawable/qwerty_bg_b_1.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/qwerty_box_b_1.png b/res/drawable/qwerty_box_b_1.png
deleted file mode 100644
index 1b577ec..0000000
--- a/res/drawable/qwerty_box_b_1.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/qwerty_box_b_2.png b/res/drawable/qwerty_box_b_2.png
deleted file mode 100644
index 0e1f771..0000000
--- a/res/drawable/qwerty_box_b_2.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/qwerty_box_w_1.png b/res/drawable/qwerty_box_w_1.png
deleted file mode 100644
index 92021a7..0000000
--- a/res/drawable/qwerty_box_w_1.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/qwerty_box_w_2.png b/res/drawable/qwerty_box_w_2.png
deleted file mode 100644
index eb991e9..0000000
--- a/res/drawable/qwerty_box_w_2.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/tutorial_12key_enter.png b/res/drawable/tutorial_12key_enter.png
new file mode 100644
index 0000000..61abffc
--- /dev/null
+++ b/res/drawable/tutorial_12key_enter.png
Binary files differ
diff --git a/res/drawable/tutorial_12key_key.png b/res/drawable/tutorial_12key_key.png
new file mode 100644
index 0000000..254eb3c
--- /dev/null
+++ b/res/drawable/tutorial_12key_key.png
Binary files differ
diff --git a/res/drawable/tutorial_12key_left.png b/res/drawable/tutorial_12key_left.png
new file mode 100644
index 0000000..bd96094
--- /dev/null
+++ b/res/drawable/tutorial_12key_left.png
Binary files differ
diff --git a/res/drawable/tutorial_12key_mode.png b/res/drawable/tutorial_12key_mode.png
new file mode 100644
index 0000000..42b939f
--- /dev/null
+++ b/res/drawable/tutorial_12key_mode.png
Binary files differ
diff --git a/res/drawable/tutorial_12key_right.png b/res/drawable/tutorial_12key_right.png
new file mode 100644
index 0000000..92f9f47
--- /dev/null
+++ b/res/drawable/tutorial_12key_right.png
Binary files differ
diff --git a/res/drawable/tutorial_12key_space_jp.png b/res/drawable/tutorial_12key_space_jp.png
new file mode 100644
index 0000000..389efa0
--- /dev/null
+++ b/res/drawable/tutorial_12key_space_jp.png
Binary files differ
diff --git a/res/drawable/tutorial_12key_toggle.png b/res/drawable/tutorial_12key_toggle.png
new file mode 100644
index 0000000..9691e5e
--- /dev/null
+++ b/res/drawable/tutorial_12key_toggle.png
Binary files differ
diff --git a/res/drawable/tutorial_back.png b/res/drawable/tutorial_back.png
new file mode 100644
index 0000000..b775bab
--- /dev/null
+++ b/res/drawable/tutorial_back.png
Binary files differ
diff --git a/res/drawable/word_full_space.png b/res/drawable/word_full_space.png
new file mode 100644
index 0000000..15b9711
--- /dev/null
+++ b/res/drawable/word_full_space.png
Binary files differ
diff --git a/res/drawable/word_half_space.png b/res/drawable/word_half_space.png
new file mode 100644
index 0000000..32d9398
--- /dev/null
+++ b/res/drawable/word_half_space.png
Binary files differ
diff --git a/res/layout/bubble_text.xml b/res/layout/bubble_text.xml
new file mode 100644
index 0000000..d754467
--- /dev/null
+++ b/res/layout/bubble_text.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008,2009  OMRON SOFTWARE Co., Ltd.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!--
+/* 
+**
+** Copyright 2009, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License"); 
+** you may not use this file except in compliance with the License. 
+** You may obtain a copy of the License at 
+**
+**     http://www.apache.org/licenses/LICENSE-2.0 
+**
+** Unless required by applicable law or agreed to in writing, software 
+** distributed under the License is distributed on an "AS IS" BASIS, 
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+** See the License for the specific language governing permissions and 
+** limitations under the License.
+*/
+-->
+
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="wrap_content" 
+    android:layout_height="wrap_content"
+    android:textSize="14sp"
+    android:textColor="?android:attr/textColorPrimary"
+    android:minWidth="32dip"
+    android:gravity="center"
+    android:shadowRadius="2.75"
+    android:shadowColor="#BB000000"
+    />
diff --git a/res/layout/candidate_scale_up.xml b/res/layout/candidate_scale_up.xml
new file mode 100644
index 0000000..506144f
--- /dev/null
+++ b/res/layout/candidate_scale_up.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008,2009  OMRON SOFTWARE Co., Ltd.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- candidate list -->
+<LinearLayout
+   xmlns:android="http://schemas.android.com/apk/res/android"
+   android:orientation="vertical"
+   android:background="@color/candidate_back"
+   android:layout_width="fill_parent"
+   android:layout_height="wrap_content"
+   >
+  <TextView
+     android:id="@+id/candidate_scale_up_text"
+     android:layout_width="fill_parent"
+     android:layout_height="wrap_content"
+     android:background="@color/candidate_back"
+     android:textSize="@dimen/candidate_delete_word_size"
+     android:textColor="@color/candidate_text"
+     android:gravity="center"
+     />
+  <LinearLayout 
+     android:orientation="horizontal"
+     android:layout_width="fill_parent" 
+     android:layout_height="wrap_content"
+     android:gravity="center"
+     >
+    <jp.co.omronsoft.openwnn.CandidateViewButton
+       android:id="@+id/candidate_select"
+       android:layout_height="fill_parent"
+       android:layout_width="wrap_content" 
+       android:text="@string/button_candidate_select"
+       />
+    <jp.co.omronsoft.openwnn.CandidateViewButton
+       android:id="@+id/candidate_delete"
+       android:layout_height="fill_parent"
+       android:layout_width="wrap_content" 
+       android:text="@string/button_candidate_delete"
+       android:visibility="gone"
+       />
+    <jp.co.omronsoft.openwnn.CandidateViewButton
+       android:id="@+id/candidate_cancel"
+       android:layout_height="fill_parent"
+       android:layout_width="wrap_content" 
+       android:text="@string/button_candidate_cancel"
+       />
+  </LinearLayout>
+</LinearLayout>
diff --git a/res/layout/candidates.xml b/res/layout/candidates.xml
index 12637f7..a5b638c 100644
--- a/res/layout/candidates.xml
+++ b/res/layout/candidates.xml
@@ -15,43 +15,59 @@
  limitations under the License.
 -->
 <!-- candidate list -->
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-	      android:orientation="vertical"
-	      android:layout_width="fill_parent"
-	      android:layout_height="wrap_content"
-	      >
-
-  <ScrollView android:id="@+id/candview_scroll"
-	      android:layout_width="fill_parent"
-	      android:layout_height="1px"
-	      android:fadingEdgeLength="0px"
-	      android:scrollbars="vertical"
-	      >
-    <EditText android:id="@+id/text_candidates_view"
-	      android:layout_width="fill_parent" 
-	      android:layout_height="wrap_content"
-	      android:background="@color/candidate_background"
-	      android:textColor="@color/candidate_text"
-	      android:cursorVisible="true"
-	      android:textColorHighlight="@color/candidate_highlight"
-	      android:paddingLeft="10px"
-	      android:paddingRight="10px"
-	      android:paddingTop="10px"
-	      android:shadowColor="@color/candidate_shadow"
-	      android:shadowRadius="0.1"
-	      />
+<FrameLayout
+   xmlns:android="http://schemas.android.com/apk/res/android"
+   android:orientation="vertical"
+   android:layout_width="fill_parent"
+   android:layout_height="wrap_content"
+   >
+  <ScrollView
+     android:id="@+id/candview_scroll"
+     android:layout_width="fill_parent"
+     android:layout_height="wrap_content"
+     android:fadingEdgeLength="0dip"
+     android:scrollbars="vertical"
+     >
+    <LinearLayout 
+       android:id="@+id/candview_base"
+       android:orientation="vertical"
+       android:layout_width="fill_parent" 
+       android:layout_height="wrap_content"
+       android:background="@color/candidate_back"
+       >
+      <!--View
+         android:layout_height="wrap_content" 
+         android:layout_width="fill_parent" 
+         android:background="@drawable/candidate_top"
+         /-->
+      <LinearLayout 
+         android:id="@+id/candidates_1st_view"
+         android:orientation="vertical"
+         android:layout_width="fill_parent" 
+         android:layout_height="wrap_content"
+         android:background="@color/candidate_back"
+         />
+      <RelativeLayout 
+         android:id="@+id/candidates_2nd_view"
+         android:layout_width="fill_parent" 
+         android:layout_height="wrap_content"
+         android:background="@color/candidate_back"
+         />
+    </LinearLayout>
   </ScrollView>
-  <LinearLayout android:id="@+id/read_more"
-                android:layout_width="fill_parent"
-                android:layout_height="fill_parent" 
-                android:fadingEdgeLength="0px"
-                android:gravity="bottom|right"
-                >
-      <TextView android:id="@+id/read_more_text"
-                android:layout_width="fill_parent" 
-                android:layout_height="fill_parent"
-                android:gravity="bottom|right"
-                android:textColor="@color/candidate_text"
-                />
+
+  <LinearLayout
+     android:id="@+id/read_more"
+     android:layout_width="fill_parent"
+     android:layout_height="wrap_content" 
+     android:fadingEdgeLength="0dip"
+     android:orientation="vertical"
+     android:gravity="right"
+     >
+    <ImageView
+       android:id="@+id/read_more_text"
+       android:layout_height="wrap_content"
+       android:layout_width="wrap_content" 
+       />
   </LinearLayout>
 </FrameLayout>
diff --git a/res/layout/keyboard_default_main.xml b/res/layout/keyboard_default_main.xml
index f9acb09..b1cc5c9 100644
--- a/res/layout/keyboard_default_main.xml
+++ b/res/layout/keyboard_default_main.xml
@@ -15,10 +15,10 @@
  limitations under the License.
 -->
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-              android:orientation="vertical"
+          android:orientation="vertical"
               android:layout_width="fill_parent"
-              android:layout_height="wrap_content"
+          android:layout_height="wrap_content"
 	      android:fadingEdge="vertical"
-	      android:fadingEdgeLength="5px"
-              >
+	      android:fadingEdgeLength="5dip"
+          >
 </LinearLayout>
diff --git a/res/layout/keyboard_default_sub.xml b/res/layout/keyboard_default_sub.xml
index 0fe62a5..ab9dec3 100644
--- a/res/layout/keyboard_default_sub.xml
+++ b/res/layout/keyboard_default_sub.xml
@@ -19,23 +19,23 @@
               android:layout_width="fill_parent"
               android:layout_height="wrap_content"
 	      android:background="@color/indicator_textbackground_default"
-	      android:paddingLeft="2px"
-	      android:paddingTop="2px"
-	      android:paddingRight="2px"
-	      android:paddingBottom="2px"
+	      android:paddingLeft="2dip"
+	      android:paddingTop="2dip"
+	      android:paddingRight="2dip"
+	      android:paddingBottom="2dip"
 	      android:gravity="right"
 	      android:fadingEdge="vertical"
-	      android:fadingEdgeLength="2px"
+	      android:fadingEdgeLength="2dip"
               android:orientation="horizontal">
                 
     <TextView android:id="@+id/shift" 
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
-	      android:paddingLeft="5px"
-	      android:paddingTop="0px"
-	      android:paddingRight="5px"
-	      android:paddingBottom="0px"
-	      android:textSize="10px"
+	      android:paddingLeft="5dip"
+	      android:paddingTop="0dip"
+	      android:paddingRight="5dip"
+	      android:paddingBottom="0dip"
+	      android:textSize="10dip"
 	      android:textStyle="bold"
 	      android:fadingEdge="horizontal"
               android:text="@string/indicator_caps"/>
@@ -43,12 +43,12 @@
     <TextView android:id="@+id/alt" 
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
-	      android:layout_marginLeft="2px"
-	      android:paddingLeft="5px"
-	      android:paddingTop="0px"
-	      android:paddingRight="5px"
-	      android:paddingBottom="0px"
-	      android:textSize="10px"
+	      android:layout_marginLeft="2dip"
+	      android:paddingLeft="5dip"
+	      android:paddingTop="0dip"
+	      android:paddingRight="5dip"
+	      android:paddingBottom="0dip"
+	      android:textSize="10dip"
 	      android:textStyle="bold"
 	      android:fadingEdge="horizontal"
               android:text="@string/indicator_alt"/>
diff --git a/res/layout/user_dictionary_tools_list.xml b/res/layout/user_dictionary_tools_list.xml
index 6b87d71..22a99fb 100644
--- a/res/layout/user_dictionary_tools_list.xml
+++ b/res/layout/user_dictionary_tools_list.xml
@@ -15,9 +15,31 @@
  limitations under the License.
 -->
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:orientation="vertical"
-    android:layout_width="fill_parent"
-    android:layout_height="wrap_content">
+              android:orientation="vertical"
+              android:paddingTop="5sp"
+              android:layout_width="fill_parent"
+              android:layout_height="wrap_content">
+    <LinearLayout
+       android:orientation="horizontal"
+       android:gravity="center"
+       android:layout_width="fill_parent"
+       android:layout_height="wrap_content">
+      <Button
+         android:id="@+id/user_dictionary_left_button" 
+         android:text="@string/user_dictionary_prev_button"
+         android:layout_width="wrap_content"
+         android:layout_height="wrap_content"/>
+      <TextView
+         android:id="@+id/user_dictionary_position_indicator" 
+         android:gravity="center"
+         android:layout_width="100sp"
+         android:layout_height="wrap_content"/>
+      <Button
+         android:id="@+id/user_dictionary_right_button" 
+         android:text="@string/user_dictionary_next_button"
+         android:layout_width="wrap_content"
+         android:layout_height="wrap_content"/>
+    </LinearLayout>
     <LinearLayout
         android:orientation="horizontal"
         android:layout_width="fill_parent"
@@ -33,7 +55,7 @@
             android:layout_marginLeft="0dip"
             android:layout_marginBottom="1dip"
             android:text="@string/user_dictionary_title_read"
-            android:textSize="16px"
+            android:textSize="16dip"
             android:textColor="?android:attr/textColorTertiary"
             android:background="#FFFFFF"
             android:focusable="false"/>
@@ -46,7 +68,7 @@
             android:layout_marginLeft="1dip"
             android:layout_marginBottom="1dip"
             android:text="@string/user_dictionary_title_candidate"
-            android:textSize="16px"
+            android:textSize="16dip"
             android:textColor="?android:attr/textColorTertiary"
             android:background="#FFFFFF"
             android:focusable="false"/>
@@ -62,4 +84,4 @@
             android:padding="1dip">
         </TableLayout>
     </ScrollView>
-</LinearLayout>
\ No newline at end of file
+</LinearLayout>
diff --git a/res/values-ja/bools.xml b/res/values-ja/bools.xml
deleted file mode 100644
index d9600c7..0000000
--- a/res/values-ja/bools.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<resources>
-  <!-- If this input method should be used as the default for ja,
-       set im_is_default true. -->
-  <bool name="im_is_default">false</bool>
-</resources>
diff --git a/res/values-ja/string.xml b/res/values-ja/string.xml
index 2f75fe5..ccbbd98 100644
--- a/res/values-ja/string.xml
+++ b/res/values-ja/string.xml
@@ -21,31 +21,35 @@
 
     <string name="preference_key_setting_menu">キーボード設定</string>
 
-    <string name="preference_key_sound_title">キークリック音</string>
-    <string name="preference_key_sound_summary">キー押下時にクリック音を鳴らします。</string>
+    <string name="preference_key_sound_title">キー操作音</string>
+    <string name="preference_key_sound_summary">キーを押した時に音を鳴らす</string>
 
-    <string name="preference_key_vibration_title">キークリックバイブ</string>
-    <string name="preference_key_vibration_summary">キー押下時にバイブレーションさせます。</string>
+    <string name="preference_key_vibration_title">キー操作バイブ</string>
+    <string name="preference_key_vibration_summary">キーを押した時に振動で知らせる</string>
 
     <string name="preference_preview_title">キーポップアップ</string>
-    <string name="preference_preview_summary">キー押下時にキーの刻印をポップアップさせます。</string>
+    <string name="preference_preview_summary">入力時に選択したキーを拡大表示する</string>
 
-    <string name="preference_auto_caps_title">先頭大文字変換</string>
-    <string name="preference_auto_caps_summary">英字入力で文章先頭文字を自動的に大文字にします。</string>
+    <string name="preference_auto_caps_title">自動大文字変換</string>
+    <string name="preference_auto_caps_summary">英字入力で文頭文字を大文字にする</string>
 
-    <string name="preference_keyboard_skin_title">キーボードデザイン</string>
-    <string name="preference_keyboard_skin_summary">キーボードデザインを切り替えます。</string>
+    <string name="preference_keyboard_skin_title">キーボードのデザイン</string>
+    <string name="preference_keyboard_skin_summary">キーボードのデザインを切り替える</string>
+
+    <string name="preference_keyboard_android_default">標準</string>
+    <string name="preference_keyboard_simple">シンプル</string>
+    <string name="preference_keyboard_metal">メタリック</string>
 
     <string name="preference_conversion_menu">変換設定</string>
 
     <string name="preference_prediction_title">予測変換</string>
-    <string name="preference_prediction_summary">予測候補を表示します。</string>
+    <string name="preference_prediction_summary">文字を入力すると変換候補を表示する</string>
 
-    <string name="preference_correct_spell_title">タイプミス補正</string>
-    <string name="preference_correct_spell_summary">タイプミスを補正した候補を表示します。</string>
+    <string name="preference_correct_spell_title">入力ミス補正</string>
+    <string name="preference_correct_spell_summary">入力間違いの修正候補を表示する</string>
 
     <string name="preference_input_learning_title">候補学習</string>
-    <string name="preference_input_learning_summary">確定した候補を学習します。</string>
+    <string name="preference_input_learning_summary">変換で確定した語句を学習する</string>
 
     <string name="preference_aboutime_menu">IMEについて</string>
     
@@ -57,16 +61,16 @@
     <string name="preference_user_dictionary">ユーザー辞書</string>
 
     <string name="preference_user_dictionary_edit_words_title">単語登録/編集/削除</string>
-    <string name="preference_user_dictionary_edit_words_summary">ユーザー辞書の単語を編集します。</string>
-    <string name="preference_user_dictionary_edit_words_summary_ja">日本語ユーザー辞書の単語を編集します。</string>
-    <string name="preference_user_dictionary_edit_words_summary_en">英語ユーザー辞書の単語を編集します。</string>
-    <string name="preference_user_dictionary_edit_words_summary_zhcn">中国語ユーザー辞書の単語を編集します。</string>
+    <string name="preference_user_dictionary_edit_words_summary">ユーザー辞書の単語を編集する</string>
+    <string name="preference_user_dictionary_edit_words_summary_ja">日本語ユーザー辞書の単語を編集する</string>
+    <string name="preference_user_dictionary_edit_words_summary_en">英語ユーザー辞書の単語を編集する</string>
+    <string name="preference_user_dictionary_edit_words_summary_zhcn">中国語ユーザー辞書の単語を編集する</string>
     
-    <string name="preference_user_dictionary_clear_learning_title">学習辞書初期化</string>
-    <string name="preference_user_dictionary_clear_learning_summary">学習辞書の内容をすべて消去します。</string>
+    <string name="preference_user_dictionary_clear_learning_title">学習辞書リセット</string>
+    <string name="preference_user_dictionary_clear_learning_summary">学習辞書の内容をすべて消去する</string>
 
-    <string name="preference_user_dictionary_clear_user_title">ユーザー辞書初期化</string>
-    <string name="preference_user_dictionary_clear_user_summary">ユーザー辞書の内容をすべて消去します。</string>
+    <string name="preference_user_dictionary_clear_user_title">ユーザー辞書全消去</string>
+    <string name="preference_user_dictionary_clear_user_summary">ユーザー辞書の内容をすべて消去する</string>
 
     <!-- Dialog Messages -->
     <string name="dialog_button_ok">OK</string>
@@ -93,24 +97,40 @@
     <string name="user_dictionary_delete_complete">削除しました。</string>
     <string name="user_dictionary_delete_fail">削除に失敗しました。</string>
     <string name="user_dictionary_words_duplication_message">すでに登録されています。</string>
-    <string name="user_dictionary_over_max_text_size_message">登録可能文字列長を超えています。</string>
+    <string name="user_dictionary_over_max_text_size_message">登録できる最大文字数を超えています。</string>
     <string name="user_dictionary_creating_wordlist">生成中</string>
-    <string name="user_dictionary_init">ユーザー辞書初期化</string>
+    <string name="user_dictionary_init">ユーザー辞書全消去</string>
 
   <!-- IME dependency -->
     <!-- OpenWnn English -->
-    <string name="openwnn_english_copyright">Ver.1.21-RC-20090403\nオムロン ソフトウェア(株)</string>
+    <string name="openwnn_english_copyright">Ver.1.3.1\nオムロン ソフトウェア(株)</string>
 
     <!-- OpenWnn Japanese -->
-    <string name="openwnn_japanese_copyright">Ver.1.21-RC-20090403\nオムロン ソフトウェア(株)</string>
+    <string name="openwnn_japanese_copyright">Ver.1.3.1\nオムロン ソフトウェア(株)</string>
 
     <!-- OpenWnn Chinese -->
-    <string name="openwnn_china_copyright">Ver.1.21-RC-20090403\nオムロン ソフトウェア(株)</string>
+    <string name="openwnn_china_copyright">Ver.1.3.1\nオムロン ソフトウェア(株)</string>
 
   <!-- Candidate Delete -->
       <string name="button_candidate_select">選　択</string>
-    <string name="button_candidate_delete">学習削除</string>
+      <string name="button_candidate_delete">学習削除</string>
       <string name="button_candidate_cancel">閉じる</string>
 
+    <!-- Tutorial -->
+    <string name="touch_to_continue">次へ &gt;&gt;</string>
+    <string name="touch_to_try">下のボタンで試してみてください。</string>
+    <string name="touch_to_finish">実際に色々入力を試してみてください。</string>
+    <string name="tip_to_step1"><b>普通の携帯のキーボードのように、○キーを３回押すと「う」\nが入力できます。</b></string>
+    <string name="tip_to_step2_a"><b>例えば「寿司」と入力する場合…\n・○キーを３回押して「す」を入力し、</b></string>
+    <string name="tip_to_step2_b"><b>\n・→キーで右に進み、</b></string>
+    <string name="tip_to_step2_c"><b>\n・○キーを２回押して「し」を入力し、</b></string>
+    <string name="tip_to_step2_d"><b>\n・自動的に表示される候補の中から\n　「寿司」を選ぶか、■キーで変換して\n　表示される「寿司」を↓キーで確定\n　します。</b></string>
+    <string name="tip_to_step3_a"><b>■キーで日本語、英語、数字モードに\n切り替わります。</b></string>
+    <string name="tip_to_step3_b"><b>日本語から英語にかわりました。\n次は数字です。</b></string>
+    <string name="tip_to_step3_c"><b>数字からまた日本語に戻りましょう。</b></string>
+    <string name="tip_to_step4"><b>ほかのモード（カタカナ・全角など)\nやＰＣ風のキーボードが使いたい場合、\n■キーを３秒押すと入力メニューが\n表示されます。</b></string>
+    <string name="tip_to_step5"><b>入力が完了したら、携帯の\n「戻る」キー（←）を押して\nキーボードを閉じます。</b></string>
+    <string name="tip_to_step6"><b>これでチュートリアルは終わりです。</b></string>
+
 </resources>
 
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 3be30d9..66c1d9a 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -15,10 +15,8 @@
  limitations under the License.
 -->
 <resources>
-    <color name="candidate_highlight">#BDFF8800</color>
     <color name="candidate_text">#ff404040</color>
-    <color name="candidate_background">#E0ffffc8</color>
-    <color name="candidate_shadow">#FF000000</color>
+    <color name="candidate_back">#FFEFEBEF</color>
     <color name="indicator_textcolor_default">#0032CD32</color>
     <color name="indicator_textcolor_caps_off">#0032CD32</color>
     <color name="indicator_textcolor_caps_on">#Cd32CD32</color>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 4d58752..2d87471 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -15,8 +15,10 @@
  limitations under the License.
 -->
 <resources>
-    <dimen name="key_height">54px</dimen>
-    <dimen name="key_height_landscape">34px</dimen>
-    <dimen name="candidate_font_size">18sp</dimen>
-    <dimen name="candidate_delete_word_size">32px</dimen>
+    <dimen name="key_height">50dip</dimen>
+    <dimen name="key_height_landscape">34dip</dimen>
+    <dimen name="candidate_font_size">20sp</dimen>
+    <dimen name="candidate_delete_word_size">32dip</dimen>
+    <dimen name="candidate_delete_word_size_landscape">28dip</dimen>
+    <dimen name="bubble_pointer_offset">22dip</dimen>
 </resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 993dad8..59f22ce 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -33,7 +33,7 @@
     <string name="preference_key_vibration_title"> Vibrate on Key Press </string>
     <string name="preference_key_vibration_summary"> Enable key click vibration. </string>
 
-    <string name="preference_preview_title"> Key preview </string>
+    <string name="preference_preview_title"> Key Preview </string>
     <string name="preference_preview_summary"> Enable key preview. </string>
 
     <string name="preference_auto_caps_title"> Auto Capitalization </string>
@@ -42,14 +42,9 @@
     <string name="preference_keyboard_skin_title">Keyboard Image</string>
     <string name="preference_keyboard_skin_summary">Change keyboard image.</string>
 
-    <string name="preference_keyboard_android_default">Default</string>
+    <string name="preference_keyboard_android_default">Standard</string>
     <string name="preference_keyboard_simple">Simple</string>
     <string name="preference_keyboard_metal">Metal</string>
-    <string name="preference_keyboard_light">Light</string>
-    <string name="preference_keyboard_ice">Ice</string>
-    <string name="preference_keyboard_classic">Classic</string>
-    <string name="preference_keyboard_wood">Wood</string>
-    <string name="preference_keyboard_kyoto">Kyoto</string>
 
     <string name="preference_conversion_menu">Conversion</string>
 
@@ -110,25 +105,26 @@
     <string name="user_dictionary_words_duplication_message">Already registered.</string>
     <string name="user_dictionary_over_max_text_size_message">Length of the string exceeds the limit.</string>
     <string name="user_dictionary_creating_wordlist">Loading</string>
-    <string name="user_dictionary_init">initialize?</string>
-    
+    <string name="user_dictionary_init">Initialize?</string>
+    <string name="user_dictionary_prev_button">　≪　</string>
+    <string name="user_dictionary_next_button">　≫　</string>
 
   <!-- IME dependency -->
     <!-- OpenWnn English -->
-    <string name="openwnn_english_copyright">Ver.1.21-RC-20090403\nOMRON SOFTWARE Co., Ltd.</string>
+    <string name="openwnn_english_copyright">Ver.1.3.1\nOMRON SOFTWARE Co., Ltd.</string>
     <string name="openwnn_english">OpenWnn English</string>
     <string name="openwnn_english_system_dictionary">/data/data/jp.co.omronsoft.openwnn/lib/libWnnEngDic.so</string>
     <string name="openwnn_english_writable_dictionary">/data/data/jp.co.omronsoft.openwnn/writableEN.dic</string>
     <string name="en_word_separators">.,;:!?</string>
 
     <!-- OpenWnn Japanese -->
-    <string name="openwnn_japanese_copyright">Ver.1.21-RC-20090403\nOMRON SOFTWARE Co., Ltd.</string>
-    <string name="openwnn_japanese">OpenWnn Japanese</string>
+    <string name="openwnn_japanese_copyright">Ver.1.3.1\nOMRON SOFTWARE Co., Ltd.</string>
+    <string name="openwnn_japanese">Japanese IME</string>
     <string name="openwnn_japanese_system_dictionary">/data/data/jp.co.omronsoft.openwnn/lib/libWnnJpnDic.so</string>
     <string name="openwnn_japanese_writable_dictionary">/data/data/jp.co.omronsoft.openwnn/writableJAJP.dic</string>
 
     <!-- OpenWnn Chinese -->
-    <string name="openwnn_china_copyright">Ver.1.21-RC-20090403\nOMRON SOFTWARE Co., Ltd.</string>
+    <string name="openwnn_china_copyright">Ver.1.3.1\nOMRON SOFTWARE Co., Ltd.</string>
     <string name="openwnn_china">OpenWnn Chinese</string>
     <string name="openwnn_china_system_dictionary">/data/data/jp.co.omronsoft.openwnn/lib/libWnnZHCNDic.so</string>
 <!-- After Config Change -->
@@ -140,7 +136,6 @@
       <string name="button_candidate_delete">Delete learning?</string>
       <string name="button_candidate_cancel">Close</string>
 
-      <string name="read_more">･･･▲</string>
 
   <!-- Key top -->
     <string name="key_left_arrow">↤</string>
@@ -151,7 +146,6 @@
     <string name="key_convert">変換</string>
     <string name="key_switch_keyboard">KBD</string>
 
-    <string name="key_12key_emoji_kigo">絵記顔</string>
     <string name="key_12key_A">゛゜ 大小</string>
     <string name="key_12key_kutoten">、。</string>
     <string name="key_12key_eisuu_kana">英数カナ</string>
@@ -191,7 +185,6 @@
     <string name="key_12key_0">わ 0 -</string>
 
     <string name="key_qwerty_tyouon">ー</string>
-    <string name="key_qwerty_emoji_kigo">絵記顔</string>
     <string name="key_qwerty_full_touten">、</string>
     <string name="key_qwerty_full_kuten">。</string>
     <string name="key_qwerty_full_question">？</string>
@@ -228,6 +221,7 @@
     <string name="key_qwerty_full_dollar_sign">＄</string>
     <string name="key_qwerty_full_yen_sign">￥</string>
     <string name="key_qwerty_full_hat">＾</string>
+    <string name="key_qwerty_full_slash">／</string>
 
     <string name="key_12key_switch_full_hiragana">あ</string>
     <string name="key_12key_switch_full_katakana">カ</string>
@@ -247,5 +241,26 @@
     <string name="indicator_caps">CAPS</string>
     <string name="indicator_alt">ALT</string>
 
+
+    <!-- Tutorial -->
+    <string name="touch_to_continue">Next »</string>
+    <string name="touch_to_try">Try it on the button below.</string>
+    <string name="touch_to_finish">Try typing and using the keyboard yourself!</string>
+    <string name="tip_to_step1"><b>Like a normal mobile keyboard, tapping ○ three times will result\nin *C*.</b></string>
+    <string name="tip_to_step2_a"><b>For example, let\'s type \"hi.\"\n- Tap ○ twice to get \"h\"</b></string>
+    <string name="tip_to_step2_b"><b>\n- Tap → to advance to the right</b></string>
+    <string name="tip_to_step2_c"><b>\n- Tap ○ three times to get \"i\"</b></string>
+    <string name="tip_to_step2_d"><b>\n- Use touch or ↓ to set the word.</b></string>
+    <string name="tip_to_step3_a"><b>The ■ key switches between Japanese, English, and number input.</b></string>
+    <string name="tip_to_step3_b"><b>We\'ve switched from English to numbers. Next is Japanese.</b></string>
+    <string name="tip_to_step3_c"><b>Let\'s return to English now.</b></string>
+    <string name="tip_to_step4"><b>For other input modes (like full width)\nor a PC style keyboard, hold ■\nfor 3 seconds to show the input menu.</b></string>
+    <string name="tip_to_step5"><b>When you\'re done typing, hit the \"back\" key (←) to close the keyboard.</b></string>
+    <string name="tip_to_step6"><b>This is the end of the tutorial.</b></string>
+
+    <string name="tip_en_to_open_keyboard"><b>The keyboard opens any time you touch a text field.</b></string>
+    <string name="tip_en_to_close_keyboard"><b>Press \"back\" (←) to close the keyboard.</b></string>
+    <string name="tip_en_end_of_tutorial"><b>This is the end of the tutorial.</b></string>
+
 </resources>
 
diff --git a/res/xml/default_cn_full_symbols.xml b/res/xml/default_cn_full_symbols.xml
index 5d4dec8..7acb9d3 100644
--- a/res/xml/default_cn_full_symbols.xml
+++ b/res/xml/default_cn_full_symbols.xml
@@ -16,8 +16,8 @@
 -->
 <Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
       android:keyWidth="10%p"
-      android:horizontalGap="0px"
-      android:verticalGap="0px"
+      android:horizontalGap="0dip"
+      android:verticalGap="0dip"
       android:keyHeight="@dimen/key_height"
       >
 
diff --git a/res/xml/default_cn_full_symbols_shift.xml b/res/xml/default_cn_full_symbols_shift.xml
index ebe4bb5..31f0404 100644
--- a/res/xml/default_cn_full_symbols_shift.xml
+++ b/res/xml/default_cn_full_symbols_shift.xml
@@ -16,8 +16,8 @@
 -->
 <Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
       android:keyWidth="10%p"
-      android:horizontalGap="0px"
-      android:verticalGap="0px"
+      android:horizontalGap="0dip"
+      android:verticalGap="0dip"
       android:keyHeight="@dimen/key_height"
       >
 
diff --git a/res/xml/default_cn_half_symbols.xml b/res/xml/default_cn_half_symbols.xml
index dd92e75..ca12eca 100644
--- a/res/xml/default_cn_half_symbols.xml
+++ b/res/xml/default_cn_half_symbols.xml
@@ -16,8 +16,8 @@
 -->
 <Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
 	  android:keyWidth="10%p"
-	  android:horizontalGap="0px"
-	  android:verticalGap="0px"
+	  android:horizontalGap="0dip"
+	  android:verticalGap="0dip"
 	  android:keyHeight="@dimen/key_height"
 	  >
 
diff --git a/res/xml/default_cn_half_symbols_shift.xml b/res/xml/default_cn_half_symbols_shift.xml
index 1660841..cc652d9 100644
--- a/res/xml/default_cn_half_symbols_shift.xml
+++ b/res/xml/default_cn_half_symbols_shift.xml
@@ -16,8 +16,8 @@
 -->
 <Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
 	  android:keyWidth="10%p"
-	  android:horizontalGap="0px"
-	  android:verticalGap="0px"
+	  android:horizontalGap="0dip"
+	  android:verticalGap="0dip"
 	  android:keyHeight="@dimen/key_height"
 	  >
 
diff --git a/res/xml/default_cn_qwerty.xml b/res/xml/default_cn_qwerty.xml
index b6fd93b..c6498c9 100644
--- a/res/xml/default_cn_qwerty.xml
+++ b/res/xml/default_cn_qwerty.xml
@@ -16,8 +16,8 @@
 -->
 <Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
 	  android:keyWidth="10%p"
-	  android:horizontalGap="0px"
-	  android:verticalGap="0px"
+	  android:horizontalGap="0dip"
+	  android:verticalGap="0dip"
 	  android:keyHeight="@dimen/key_height"
 	  >
 
diff --git a/res/xml/default_cn_qwerty_pinyin.xml b/res/xml/default_cn_qwerty_pinyin.xml
index 72e76ef..7d59131 100644
--- a/res/xml/default_cn_qwerty_pinyin.xml
+++ b/res/xml/default_cn_qwerty_pinyin.xml
@@ -16,8 +16,8 @@
 -->
 <Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
 	  android:keyWidth="10%p"
-	  android:horizontalGap="0px"
-	  android:verticalGap="0px"
+	  android:horizontalGap="0dip"
+	  android:verticalGap="0dip"
 	  android:keyHeight="@dimen/key_height"
 	  >
   
diff --git a/res/xml/default_cn_qwerty_pinyin_shift.xml b/res/xml/default_cn_qwerty_pinyin_shift.xml
index 3bd917f..4ed5130 100644
--- a/res/xml/default_cn_qwerty_pinyin_shift.xml
+++ b/res/xml/default_cn_qwerty_pinyin_shift.xml
@@ -16,8 +16,8 @@
 -->
 <Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
 	  android:keyWidth="10%p"
-	  android:horizontalGap="0px"
-	  android:verticalGap="0px"
+	  android:horizontalGap="0dip"
+	  android:verticalGap="0dip"
 	  android:keyHeight="@dimen/key_height"
 	  >
   
diff --git a/res/xml/default_cn_switch_key.xml b/res/xml/default_cn_switch_key.xml
index b5d0495..e30e447 100644
--- a/res/xml/default_cn_switch_key.xml
+++ b/res/xml/default_cn_switch_key.xml
@@ -16,9 +16,9 @@
 -->
 <Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
 	  android:keyWidth="15%p"
-	  android:horizontalGap="0px"
-	  android:verticalGap="0px"
-	  android:keyHeight="50px" >
+	  android:horizontalGap="0dip"
+	  android:verticalGap="0dip"
+	  android:keyHeight="50dip" >
   <Row>
     <Key android:codes="-115" android:keyLabel="@string/key_12key_switch_pinyin"
 	 android:keyEdgeFlags="left"/>
diff --git a/res/xml/default_en_qwerty.xml b/res/xml/default_en_qwerty.xml
index 3a2f736..35068ee 100644
--- a/res/xml/default_en_qwerty.xml
+++ b/res/xml/default_en_qwerty.xml
@@ -16,8 +16,8 @@
 -->
 <Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
 	  android:keyWidth="10%p"
-	  android:horizontalGap="0px"
-	  android:verticalGap="0px"
+	  android:horizontalGap="0dip"
+	  android:verticalGap="0dip"
 	  android:keyHeight="@dimen/key_height"
 	  >
 
diff --git a/res/xml/default_en_switch_key.xml b/res/xml/default_en_switch_key.xml
index 95f5a5e..319546b 100644
--- a/res/xml/default_en_switch_key.xml
+++ b/res/xml/default_en_switch_key.xml
@@ -16,9 +16,9 @@
 -->
 <Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
 	  android:keyWidth="15%p"
-	  android:horizontalGap="0px"
-	  android:verticalGap="0px"
-	  android:keyHeight="50px" >
+	  android:horizontalGap="0dip"
+	  android:verticalGap="0dip"
+	  android:keyHeight="50dip" >
   <Row>
     <Key android:codes="-113" android:keyLabel="@string/key_12key_switch_half_alphabet"
 	 android:keyEdgeFlags="left"/>
diff --git a/res/xml/default_en_symbols.xml b/res/xml/default_en_symbols.xml
index 2c0e1d8..16d5fe1 100644
--- a/res/xml/default_en_symbols.xml
+++ b/res/xml/default_en_symbols.xml
@@ -16,8 +16,8 @@
 -->
 <Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
 	  android:keyWidth="10%p"
-	  android:horizontalGap="0px"
-	  android:verticalGap="0px"
+	  android:horizontalGap="0dip"
+	  android:verticalGap="0dip"
 	  android:keyHeight="@dimen/key_height"
 	  >
 
diff --git a/res/xml/default_en_symbols_shift.xml b/res/xml/default_en_symbols_shift.xml
index a8735be..c2eb67b 100644
--- a/res/xml/default_en_symbols_shift.xml
+++ b/res/xml/default_en_symbols_shift.xml
@@ -16,8 +16,8 @@
 -->
 <Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
 	  android:keyWidth="10%p"
-	  android:horizontalGap="0px"
-	  android:verticalGap="0px"
+	  android:horizontalGap="0dip"
+	  android:verticalGap="0dip"
 	  android:keyHeight="@dimen/key_height"
 	  >
 
diff --git a/res/xml/keyboard_12key_alphabet_input_landscape.xml b/res/xml/keyboard_12key_alphabet_input_landscape.xml
deleted file mode 100644
index ee65750..0000000
--- a/res/xml/keyboard_12key_alphabet_input_landscape.xml
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2008,2009  OMRON SOFTWARE Co., Ltd.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
-    android:keyWidth="20%p"
-    android:horizontalGap="0px"
-    android:verticalGap="0px"
-    android:keyHeight="@dimen/key_height_landscape"
-    >
-    <Row>
-        <Key android:codes="-219" android:keyIcon="@drawable/key_12key_reverse" android:iconPreview="@drawable/key_12key_reverse_b"
-             android:keyEdgeFlags="left"/>
-        <Key android:codes="-201" android:keyLabel="@string/key_12key_alphabet_1"/>
-        <Key android:codes="-202" android:keyLabel="@string/key_12key_alphabet_2"/>
-        <Key android:codes="-203" android:keyLabel="@string/key_12key_alphabet_3"/>
-        <Key android:codes="-214" android:keyIcon="@drawable/key_12key_del_landscape" android:iconPreview="@drawable/key_12key_del_b_landscape" android:isRepeatable="true"
-	     android:keyEdgeFlags="right"/>
-    </Row>
-    
-    <Row>
-        <Key android:codes="-218" android:keyLabel="@string/key_left_arrow" android:isRepeatable="true" android:keyEdgeFlags="left"/>
-        <Key android:codes="-204" android:keyLabel="@string/key_12key_alphabet_4"/>
-        <Key android:codes="-205" android:keyLabel="@string/key_12key_alphabet_5"/>
-        <Key android:codes="-206" android:keyLabel="@string/key_12key_alphabet_6"/>
-        <Key android:codes="-217" android:keyLabel="@string/key_right_arrow" android:isRepeatable="true" android:keyEdgeFlags="right"/>
-    </Row>
-    
-    <Row>
-        <Key android:codes="-222"  android:keyIcon="@drawable/key_12key_pict_sym" android:iconPreview="@drawable/key_12key_pict_sym_b"
-	     android:keyEdgeFlags="left"/>
-        <Key android:codes="-207" android:keyLabel="@string/key_12key_alphabet_7"/>
-        <Key android:codes="-208" android:keyLabel="@string/key_12key_alphabet_8"/>
-        <Key android:codes="-209" android:keyLabel="@string/key_12key_alphabet_9"/>
-        <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space" android:iconPreview="@drawable/key_12key_space_b" android:isRepeatable="true" android:keyEdgeFlags="right" />
-    </Row>
-  
-    <Row android:rowEdgeFlags="bottom">
-        <Key android:codes="-230" android:keyLabel="@string/key_change_mode"
-	     android:popupKeyboard="@xml/keyboard_switch_key" android:keyEdgeFlags="left"/>
-        <Key android:codes="-213" android:keyLabel="@string/key_12key_alphabet_A"/>
-        <Key android:codes="-210" android:keyLabel="@string/key_12key_alphabet_0"/>
-        <Key android:codes="-211" android:keyLabel=", ." />
-        <Key android:codes="-216" android:keyIcon="@drawable/key_12key_enter" android:iconPreview="@drawable/key_12key_enter_b" 
-             android:keyEdgeFlags="right"/>
-    </Row>
-</Keyboard>
diff --git a/res/xml/keyboard_12key_alphabet_landscape.xml b/res/xml/keyboard_12key_alphabet_landscape.xml
deleted file mode 100644
index d85cea5..0000000
--- a/res/xml/keyboard_12key_alphabet_landscape.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2008,2009  OMRON SOFTWARE Co., Ltd.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
-    android:keyWidth="20%p"
-    android:horizontalGap="0px"
-    android:verticalGap="0px"
-    android:keyHeight="@dimen/key_height_landscape"
-    >
-  
-    <Row>
-        <Key android:codes="-219" android:keyIcon="@drawable/key_12key_reverse" android:iconPreview="@drawable/key_12key_reverse_b"
-             android:keyEdgeFlags="left"/>
-        <Key android:codes="-201" android:keyLabel="@string/key_12key_alphabet_1"/>
-        <Key android:codes="-202" android:keyLabel="@string/key_12key_alphabet_2"/>
-        <Key android:codes="-203" android:keyLabel="@string/key_12key_alphabet_3"/>
-        <Key android:codes="-214" android:keyIcon="@drawable/key_12key_del_landscape" android:iconPreview="@drawable/key_12key_del_b_landscape" android:isRepeatable="true"
-	     android:keyEdgeFlags="right"/>
-    </Row>
-    
-    <Row>
-        <Key android:codes="-218" android:keyLabel="@string/key_left_arrow" android:isRepeatable="true" android:keyEdgeFlags="left"/>
-        <Key android:codes="-204" android:keyLabel="@string/key_12key_alphabet_4"/>
-        <Key android:codes="-205" android:keyLabel="@string/key_12key_alphabet_5"/>
-        <Key android:codes="-206" android:keyLabel="@string/key_12key_alphabet_6"/>
-        <Key android:codes="-217" android:keyLabel="@string/key_right_arrow" android:isRepeatable="true" android:keyEdgeFlags="right"/>
-    </Row>
-    
-    <Row>
-        <Key android:codes="-222"  android:keyIcon="@drawable/key_12key_pict_sym" android:iconPreview="@drawable/key_12key_pict_sym_b"
-	     android:keyEdgeFlags="left"/>
-        <Key android:codes="-207" android:keyLabel="@string/key_12key_alphabet_7"/>
-        <Key android:codes="-208" android:keyLabel="@string/key_12key_alphabet_8"/>
-        <Key android:codes="-209" android:keyLabel="@string/key_12key_alphabet_9"/>
-        <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space" android:iconPreview="@drawable/key_12key_space_b" android:isRepeatable="true" android:keyEdgeFlags="right" />
-    </Row>
-    
-    <Row android:rowEdgeFlags="bottom">
-        <Key android:codes="-230" android:keyLabel="@string/key_change_mode"
-	     android:popupKeyboard="@xml/keyboard_switch_key" android:keyEdgeFlags="left"/>
-        <Key android:codes="-213" android:keyLabel="@string/key_12key_alphabet_A"/>
-        <Key android:codes="-210" android:keyLabel="@string/key_12key_alphabet_0"/>
-        <Key android:codes="-211" android:keyLabel=", ." />
-        <Key android:codes="-216" android:keyIcon="@drawable/key_12key_enter" android:iconPreview="@drawable/key_12key_enter_b" 
-             android:keyEdgeFlags="right"/>
-    </Row>
-</Keyboard>
diff --git a/res/xml/keyboard_12key_alphabet.xml b/res/xml/keyboard_12key_full_alphabet.xml
similarity index 64%
rename from res/xml/keyboard_12key_alphabet.xml
rename to res/xml/keyboard_12key_full_alphabet.xml
index 676322e..4637af2 100644
--- a/res/xml/keyboard_12key_alphabet.xml
+++ b/res/xml/keyboard_12key_full_alphabet.xml
@@ -16,45 +16,45 @@
 -->
 <Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
     android:keyWidth="20%p"
-    android:horizontalGap="0px"
-    android:verticalGap="0px"
+    android:horizontalGap="0dip"
+    android:verticalGap="0dip"
     android:keyHeight="@dimen/key_height"
     >
 
     <Row>
         <Key android:codes="-219" android:keyIcon="@drawable/key_12key_reverse" android:iconPreview="@drawable/key_12key_reverse_b"
-             android:keyEdgeFlags="left"/>
-        <Key android:codes="-201" android:keyIcon="@drawable/key_12key_alpha1" android:iconPreview="@drawable/key_12key_alpha1_b"/>
+             android:keyEdgeFlags="left" android:keyWidth="18%"/>
+        <Key android:codes="-201" android:keyIcon="@drawable/key_12key_alpha1" android:iconPreview="@drawable/key_12key_alpha1_b" android:horizontalGap="2%"/>
         <Key android:codes="-202" android:keyIcon="@drawable/key_12key_alpha2" android:iconPreview="@drawable/key_12key_alpha2_b"/>
         <Key android:codes="-203" android:keyIcon="@drawable/key_12key_alpha3" android:iconPreview="@drawable/key_12key_alpha3_b"/>
         <Key android:codes="-214" android:keyIcon="@drawable/key_12key_del" android:iconPreview="@drawable/key_12key_del_b"
-             android:isRepeatable="true" android:keyEdgeFlags="right"/>
+             android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
     </Row>
     
     <Row>
-        <Key android:codes="-218" android:keyLabel="@string/key_left_arrow" android:isRepeatable="true" android:keyEdgeFlags="left"/>
-        <Key android:codes="-204" android:keyIcon="@drawable/key_12key_alpha4" android:iconPreview="@drawable/key_12key_alpha4_b"/>
+        <Key android:codes="-218" android:keyIcon="@drawable/key_12key_left" android:iconPreview="@drawable/key_12key_left_b" android:isRepeatable="true" android:keyEdgeFlags="left" android:keyWidth="18%"/>
+        <Key android:codes="-204" android:keyIcon="@drawable/key_12key_alpha4" android:iconPreview="@drawable/key_12key_alpha4_b" android:horizontalGap="2%"/>
         <Key android:codes="-205" android:keyIcon="@drawable/key_12key_alpha5" android:iconPreview="@drawable/key_12key_alpha5_b"/>
         <Key android:codes="-206" android:keyIcon="@drawable/key_12key_alpha6" android:iconPreview="@drawable/key_12key_alpha6_b"/>
-        <Key android:codes="-217" android:keyLabel="@string/key_right_arrow" android:isRepeatable="true" android:keyEdgeFlags="right"/>
+        <Key android:codes="-217" android:keyIcon="@drawable/key_12key_right" android:iconPreview="@drawable/key_12key_right_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
     </Row>
     
     <Row>
         <Key android:codes="-222" android:keyIcon="@drawable/key_12key_pict_sym" android:iconPreview="@drawable/key_12key_pict_sym_b"
-	     android:keyEdgeFlags="left"/>
-        <Key android:codes="-207" android:keyIcon="@drawable/key_12key_alpha7" android:iconPreview="@drawable/key_12key_alpha7_b"/>
+	     android:keyEdgeFlags="left" android:keyWidth="18%"/>
+        <Key android:codes="-207" android:keyIcon="@drawable/key_12key_alpha7" android:iconPreview="@drawable/key_12key_alpha7_b" android:horizontalGap="2%"/>
         <Key android:codes="-208" android:keyIcon="@drawable/key_12key_alpha8" android:iconPreview="@drawable/key_12key_alpha8_b"/>
         <Key android:codes="-209" android:keyIcon="@drawable/key_12key_alpha9" android:iconPreview="@drawable/key_12key_alpha9_b"/>
-        <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space" android:iconPreview="@drawable/key_12key_space_b" android:isRepeatable="true" android:keyEdgeFlags="right" />
+        <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space" android:iconPreview="@drawable/key_12key_space_b" android:isRepeatable="true" android:keyEdgeFlags="right"  android:horizontalGap="2%" android:keyWidth="18%"/>
     </Row>
     
     <Row android:rowEdgeFlags="bottom">
-        <Key android:codes="-230" android:keyLabel="@string/key_change_mode"
-	     android:popupKeyboard="@xml/keyboard_switch_key" android:keyEdgeFlags="left"/>
-        <Key android:codes="-213" android:keyLabel="@string/key_12key_alphabet_A"/>
+        <Key android:codes="-230" android:keyIcon="@drawable/key_12key_mode_full_alpha" android:iconPreview="@drawable/key_mode_change_b"
+	     android:popupKeyboard="@xml/keyboard_switch_key_jp" android:keyEdgeFlags="left" android:keyWidth="18%"/>
+        <Key android:codes="-213" android:keyIcon="@drawable/key_12key_caps" android:iconPreview="@drawable/key_12key_caps_b" android:horizontalGap="2%"/>
         <Key android:codes="-210" android:keyIcon="@drawable/key_12key_alpha0" android:iconPreview="@drawable/key_12key_alpha0_b"/>
-        <Key android:codes="-211" android:keyLabel=", ." />
-        <Key android:codes="-216" android:keyIcon="@drawable/key_12key_enter" android:iconPreview="@drawable/key_12key_enter_b" 
-             android:keyEdgeFlags="right"/>
+        <Key android:codes="-211" android:keyIcon="@drawable/key_12key_period_comma" android:iconPreview="@drawable/key_12key_period_comma_b" />
+        <Key android:codes="-216" android:keyIcon="@drawable/key_12key_enter_jp" android:iconPreview="@drawable/key_12key_enter_jp_b" 
+             android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
     </Row>
 </Keyboard>
diff --git a/res/xml/keyboard_12key_alphabet_input.xml b/res/xml/keyboard_12key_full_alphabet_input.xml
similarity index 64%
rename from res/xml/keyboard_12key_alphabet_input.xml
rename to res/xml/keyboard_12key_full_alphabet_input.xml
index 8737101..d34007d 100644
--- a/res/xml/keyboard_12key_alphabet_input.xml
+++ b/res/xml/keyboard_12key_full_alphabet_input.xml
@@ -16,45 +16,45 @@
 -->
 <Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
     android:keyWidth="20%p"
-    android:horizontalGap="0px"
-    android:verticalGap="0px"
+    android:horizontalGap="0dip"
+    android:verticalGap="0dip"
     android:keyHeight="@dimen/key_height"
     >
   
     <Row>
         <Key android:codes="-219" android:keyIcon="@drawable/key_12key_reverse" android:iconPreview="@drawable/key_12key_reverse_b"
-             android:keyEdgeFlags="left"/>
-        <Key android:codes="-201" android:keyIcon="@drawable/key_12key_alpha1" android:iconPreview="@drawable/key_12key_alpha1_b"/>
+             android:keyEdgeFlags="left" android:keyWidth="18%"/>
+        <Key android:codes="-201" android:keyIcon="@drawable/key_12key_alpha1" android:iconPreview="@drawable/key_12key_alpha1_b" android:horizontalGap="2%"/>
         <Key android:codes="-202" android:keyIcon="@drawable/key_12key_alpha2" android:iconPreview="@drawable/key_12key_alpha2_b"/>
         <Key android:codes="-203" android:keyIcon="@drawable/key_12key_alpha3" android:iconPreview="@drawable/key_12key_alpha3_b"/>
         <Key android:codes="-214" android:keyIcon="@drawable/key_12key_del" android:iconPreview="@drawable/key_12key_del_b"
-             android:isRepeatable="true" android:keyEdgeFlags="right"/>
+             android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
     </Row>
     
     <Row>
-        <Key android:codes="-218" android:keyLabel="@string/key_left_arrow" android:isRepeatable="true" android:keyEdgeFlags="left"/>
-        <Key android:codes="-204" android:keyIcon="@drawable/key_12key_alpha4" android:iconPreview="@drawable/key_12key_alpha4_b"/>
+        <Key android:codes="-218" android:keyIcon="@drawable/key_12key_left" android:iconPreview="@drawable/key_12key_left_b" android:isRepeatable="true" android:keyEdgeFlags="left" android:keyWidth="18%"/>
+        <Key android:codes="-204" android:keyIcon="@drawable/key_12key_alpha4" android:iconPreview="@drawable/key_12key_alpha4_b" android:horizontalGap="2%"/>
         <Key android:codes="-205" android:keyIcon="@drawable/key_12key_alpha5" android:iconPreview="@drawable/key_12key_alpha5_b"/>
         <Key android:codes="-206" android:keyIcon="@drawable/key_12key_alpha6" android:iconPreview="@drawable/key_12key_alpha6_b"/>
-        <Key android:codes="-217" android:keyLabel="@string/key_right_arrow" android:isRepeatable="true" android:keyEdgeFlags="right"/>
+        <Key android:codes="-217" android:keyIcon="@drawable/key_12key_right" android:iconPreview="@drawable/key_12key_right_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
     </Row>
     
     <Row>
         <Key android:codes="-222"  android:keyIcon="@drawable/key_12key_pict_sym" android:iconPreview="@drawable/key_12key_pict_sym_b"
-	     android:keyEdgeFlags="left"/>
-        <Key android:codes="-207" android:keyIcon="@drawable/key_12key_alpha7" android:iconPreview="@drawable/key_12key_alpha7_b"/>
+	     android:keyEdgeFlags="left" android:keyWidth="18%"/>
+        <Key android:codes="-207" android:keyIcon="@drawable/key_12key_alpha7" android:iconPreview="@drawable/key_12key_alpha7_b" android:horizontalGap="2%"/>
         <Key android:codes="-208" android:keyIcon="@drawable/key_12key_alpha8" android:iconPreview="@drawable/key_12key_alpha8_b"/>
         <Key android:codes="-209" android:keyIcon="@drawable/key_12key_alpha9" android:iconPreview="@drawable/key_12key_alpha9_b"/>
-        <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space" android:iconPreview="@drawable/key_12key_space_b" android:isRepeatable="true" android:keyEdgeFlags="right" />
+        <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space" android:iconPreview="@drawable/key_12key_space_b" android:isRepeatable="true" android:keyEdgeFlags="right"  android:horizontalGap="2%" android:keyWidth="18%"/>
     </Row>
     
     <Row android:rowEdgeFlags="bottom">
-        <Key android:codes="-230" android:keyLabel="@string/key_change_mode"
-	     android:popupKeyboard="@xml/keyboard_switch_key" android:keyEdgeFlags="left"/>
-        <Key android:codes="-213" android:keyLabel="@string/key_12key_alphabet_A"/>
+        <Key android:codes="-230" android:keyIcon="@drawable/key_12key_mode_full_alpha" android:iconPreview="@drawable/key_mode_change_b"
+	     android:popupKeyboard="@xml/keyboard_switch_key_jp" android:keyEdgeFlags="left" android:keyWidth="18%"/>
+        <Key android:codes="-213" android:keyIcon="@drawable/key_12key_caps" android:iconPreview="@drawable/key_12key_caps_b" android:horizontalGap="2%"/>
         <Key android:codes="-210" android:keyIcon="@drawable/key_12key_alpha0" android:iconPreview="@drawable/key_12key_alpha0_b"/>
-        <Key android:codes="-211" android:keyLabel=", ." />
-        <Key android:codes="-216" android:keyIcon="@drawable/key_12key_enter" android:iconPreview="@drawable/key_12key_enter_b" 
-             android:keyEdgeFlags="right"/>
+        <Key android:codes="-211" android:keyIcon="@drawable/key_12key_period_comma" android:iconPreview="@drawable/key_12key_period_comma_b" />
+        <Key android:codes="-216" android:keyIcon="@drawable/key_12key_enter_jp" android:iconPreview="@drawable/key_12key_enter_jp_b" 
+             android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
     </Row>
 </Keyboard>
diff --git a/res/xml/keyboard_12key_katakana.xml b/res/xml/keyboard_12key_full_katakana.xml
similarity index 62%
rename from res/xml/keyboard_12key_katakana.xml
rename to res/xml/keyboard_12key_full_katakana.xml
index 0123e29..aefc90f 100644
--- a/res/xml/keyboard_12key_katakana.xml
+++ b/res/xml/keyboard_12key_full_katakana.xml
@@ -16,45 +16,45 @@
 -->
 <Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
     android:keyWidth="20%p"
-    android:horizontalGap="0px"
-    android:verticalGap="0px"
+    android:horizontalGap="0dip"
+    android:verticalGap="0dip"
     android:keyHeight="@dimen/key_height"
     >
   
     <Row>
         <Key android:codes="-219" android:keyIcon="@drawable/key_12key_reverse" android:iconPreview="@drawable/key_12key_reverse_b"
-             android:keyEdgeFlags="left"/>
-        <Key android:codes="-201" android:keyLabel="@string/key_12key_katakana_1"/>
+             android:keyEdgeFlags="left" android:keyWidth="18%"/>
+        <Key android:codes="-201" android:keyLabel="@string/key_12key_katakana_1" android:horizontalGap="2%"/>
         <Key android:codes="-202" android:keyLabel="@string/key_12key_katakana_2"/>
         <Key android:codes="-203" android:keyLabel="@string/key_12key_katakana_3"/>
         <Key android:codes="-214" android:keyIcon="@drawable/key_12key_del" android:iconPreview="@drawable/key_12key_del_b"
-             android:isRepeatable="true" android:keyEdgeFlags="right"/>
+             android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
     </Row>
     
     <Row>
-        <Key android:codes="-218" android:keyLabel="@string/key_left_arrow" android:isRepeatable="true" android:keyEdgeFlags="left"/>
-        <Key android:codes="-204" android:keyLabel="@string/key_12key_katakana_4"/>
+        <Key android:codes="-218" android:keyIcon="@drawable/key_12key_left" android:iconPreview="@drawable/key_12key_left_b" android:isRepeatable="true" android:keyEdgeFlags="left" android:keyWidth="18%"/>
+        <Key android:codes="-204" android:keyLabel="@string/key_12key_katakana_4" android:horizontalGap="2%"/>
         <Key android:codes="-205" android:keyLabel="@string/key_12key_katakana_5"/>
         <Key android:codes="-206" android:keyLabel="@string/key_12key_katakana_6"/>
-        <Key android:codes="-217" android:keyLabel="@string/key_right_arrow" android:isRepeatable="true" android:keyEdgeFlags="right"/>
+        <Key android:codes="-217" android:keyIcon="@drawable/key_12key_right" android:iconPreview="@drawable/key_12key_right_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
     </Row>
     
     <Row>
         <Key android:codes="-222"  android:keyIcon="@drawable/key_12key_pict_sym" android:iconPreview="@drawable/key_12key_pict_sym_b"
-	     android:keyEdgeFlags="left"/>
-        <Key android:codes="-207" android:keyLabel="@string/key_12key_katakana_7"/>
+	     android:keyEdgeFlags="left" android:keyWidth="18%"/>
+        <Key android:codes="-207" android:keyLabel="@string/key_12key_katakana_7" android:horizontalGap="2%"/>
         <Key android:codes="-208" android:keyLabel="@string/key_12key_katakana_8"/>
         <Key android:codes="-209" android:keyLabel="@string/key_12key_katakana_9"/>
-        <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space" android:iconPreview="@drawable/key_12key_space_b" android:isRepeatable="true" android:keyEdgeFlags="right" />
+        <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space" android:iconPreview="@drawable/key_12key_space_b" android:isRepeatable="true" android:keyEdgeFlags="right"  android:horizontalGap="2%" android:keyWidth="18%"/>
     </Row>
     
     <Row android:rowEdgeFlags="bottom">
-        <Key android:codes="-230" android:keyLabel="@string/key_change_mode"
-	     android:popupKeyboard="@xml/keyboard_switch_key" android:keyEdgeFlags="left"/>
-        <Key android:codes="-213" android:keyIcon="@drawable/key_12key_dakuten" android:iconPreview="@drawable/key_12key_dakuten_b"  />
+        <Key android:codes="-230" android:keyIcon="@drawable/key_12key_mode_full_kata" android:iconPreview="@drawable/key_mode_change_b"
+	     android:popupKeyboard="@xml/keyboard_switch_key_jp" android:keyEdgeFlags="left" android:keyWidth="18%"/>
+        <Key android:codes="-213" android:keyIcon="@drawable/key_12key_dakuten" android:iconPreview="@drawable/key_12key_dakuten_b"   android:horizontalGap="2%"/>
         <Key android:codes="-210" android:keyLabel="@string/key_12key_katakana_0" />
-        <Key android:codes="-211" android:keyLabel="@string/key_12key_kutoten" />
-        <Key android:codes="-216" android:keyIcon="@drawable/key_12key_enter" android:iconPreview="@drawable/key_12key_enter_b" 
-             android:keyEdgeFlags="right"/>
+        <Key android:codes="-211" android:keyIcon="@drawable/key_12key_ten" android:iconPreview="@drawable/key_12key_ten_b" />
+        <Key android:codes="-216" android:keyIcon="@drawable/key_12key_enter_jp" android:iconPreview="@drawable/key_12key_enter_jp_b" 
+             android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
     </Row>
 </Keyboard>
diff --git a/res/xml/keyboard_12key_katakana_input.xml b/res/xml/keyboard_12key_full_katakana_input.xml
similarity index 62%
copy from res/xml/keyboard_12key_katakana_input.xml
copy to res/xml/keyboard_12key_full_katakana_input.xml
index 25acc0b..f17bc81 100644
--- a/res/xml/keyboard_12key_katakana_input.xml
+++ b/res/xml/keyboard_12key_full_katakana_input.xml
@@ -16,45 +16,45 @@
 -->
 <Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
     android:keyWidth="20%p"
-    android:horizontalGap="0px"
-    android:verticalGap="0px"
+    android:horizontalGap="0dip"
+    android:verticalGap="0dip"
     android:keyHeight="@dimen/key_height"
     >
   
    <Row>
         <Key android:codes="-219" android:keyIcon="@drawable/key_12key_reverse" android:iconPreview="@drawable/key_12key_reverse_b"
-             android:keyEdgeFlags="left"/>
-        <Key android:codes="-201" android:keyLabel="@string/key_12key_katakana_1"/>
+             android:keyEdgeFlags="left" android:keyWidth="18%"/>
+        <Key android:codes="-201" android:keyLabel="@string/key_12key_katakana_1" android:horizontalGap="2%"/>
         <Key android:codes="-202" android:keyLabel="@string/key_12key_katakana_2"/>
         <Key android:codes="-203" android:keyLabel="@string/key_12key_katakana_3"/>
         <Key android:codes="-214" android:keyIcon="@drawable/key_12key_del" android:iconPreview="@drawable/key_12key_del_b"
-             android:isRepeatable="true" android:keyEdgeFlags="right"/>
+             android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
     </Row>
     
     <Row>
-        <Key android:codes="-218" android:keyLabel="@string/key_left_arrow" android:isRepeatable="true" android:keyEdgeFlags="left"/>
-        <Key android:codes="-204" android:keyLabel="@string/key_12key_katakana_4"/>
+        <Key android:codes="-218" android:keyIcon="@drawable/key_12key_left" android:iconPreview="@drawable/key_12key_left_b" android:isRepeatable="true" android:keyEdgeFlags="left" android:keyWidth="18%"/>
+        <Key android:codes="-204" android:keyLabel="@string/key_12key_katakana_4" android:horizontalGap="2%"/>
         <Key android:codes="-205" android:keyLabel="@string/key_12key_katakana_5"/>
         <Key android:codes="-206" android:keyLabel="@string/key_12key_katakana_6"/>
-        <Key android:codes="-217" android:keyLabel="@string/key_right_arrow" android:isRepeatable="true" android:keyEdgeFlags="right"/>
+        <Key android:codes="-217" android:keyIcon="@drawable/key_12key_right" android:iconPreview="@drawable/key_12key_right_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
     </Row>
     
     <Row>
         <Key android:codes="-222" android:keyIcon="@drawable/key_12key_pict_sym" android:iconPreview="@drawable/key_12key_pict_sym_b"
-	     android:keyEdgeFlags="left"/>
-        <Key android:codes="-207" android:keyLabel="@string/key_12key_katakana_7"/>
+	     android:keyEdgeFlags="left" android:keyWidth="18%"/>
+        <Key android:codes="-207" android:keyLabel="@string/key_12key_katakana_7" android:horizontalGap="2%"/>
         <Key android:codes="-208" android:keyLabel="@string/key_12key_katakana_8"/>
         <Key android:codes="-209" android:keyLabel="@string/key_12key_katakana_9"/>
-        <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space" android:iconPreview="@drawable/key_12key_space_b" android:isRepeatable="true" android:keyEdgeFlags="right" />
+        <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space" android:iconPreview="@drawable/key_12key_space_b" android:isRepeatable="true" android:keyEdgeFlags="right"  android:horizontalGap="2%" android:keyWidth="18%"/>
     </Row>
      
     <Row android:rowEdgeFlags="bottom">
-        <Key android:codes="-230" android:keyLabel="@string/key_change_mode"
-	     android:popupKeyboard="@xml/keyboard_switch_key" android:keyEdgeFlags="left"/>
-        <Key android:codes="-213" android:keyIcon="@drawable/key_12key_dakuten" android:iconPreview="@drawable/key_12key_dakuten_b"  />
+        <Key android:codes="-230" android:keyIcon="@drawable/key_12key_mode_full_kata" android:iconPreview="@drawable/key_mode_change_b"
+	     android:popupKeyboard="@xml/keyboard_switch_key_jp" android:keyEdgeFlags="left" android:keyWidth="18%"/>
+        <Key android:codes="-213" android:keyIcon="@drawable/key_12key_dakuten" android:iconPreview="@drawable/key_12key_dakuten_b"   android:horizontalGap="2%"/>
         <Key android:codes="-210" android:keyLabel="@string/key_12key_katakana_0" />
-        <Key android:codes="-211" android:keyLabel="@string/key_12key_kutoten" />
-        <Key android:codes="-216" android:keyIcon="@drawable/key_12key_enter" android:iconPreview="@drawable/key_12key_enter_b" 
-             android:keyEdgeFlags="right"/>
+        <Key android:codes="-211" android:keyIcon="@drawable/key_12key_ten" android:iconPreview="@drawable/key_12key_ten_b" />
+        <Key android:codes="-216" android:keyIcon="@drawable/key_12key_enter_jp" android:iconPreview="@drawable/key_12key_enter_jp_b" 
+             android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
     </Row>
 </Keyboard>
diff --git a/res/xml/keyboard_12key_full_num.xml b/res/xml/keyboard_12key_full_num.xml
new file mode 100644
index 0000000..c17d031
--- /dev/null
+++ b/res/xml/keyboard_12key_full_num.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008,2009  OMRON SOFTWARE Co., Ltd.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
+    android:keyWidth="20%p"
+    android:horizontalGap="0dip"
+    android:verticalGap="0dip"
+    android:keyHeight="@dimen/key_height"
+    >
+  
+    <Row>
+        <Key android:codes="-219" android:keyIcon="@drawable/key_12key_reverse" android:iconPreview="@drawable/key_12key_reverse_b"
+             android:keyEdgeFlags="left" android:keyWidth="18%"/>
+        <Key android:codes="-201" android:keyLabel="1" android:horizontalGap="2%"/>
+        <Key android:codes="-202" android:keyLabel="2"/>
+        <Key android:codes="-203" android:keyLabel="3"/>
+        <Key android:codes="-214" android:keyIcon="@drawable/key_12key_del" android:iconPreview="@drawable/key_12key_del_b"
+             android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+    </Row>
+    
+    <Row>
+        <Key android:codes="-218" android:keyIcon="@drawable/key_12key_left" android:iconPreview="@drawable/key_12key_left_b" android:isRepeatable="true" android:keyEdgeFlags="left" android:keyWidth="18%"/>
+        <Key android:codes="-204" android:keyLabel="4" android:horizontalGap="2%"/>
+        <Key android:codes="-205" android:keyLabel="5"/>
+        <Key android:codes="-206" android:keyLabel="6"/>
+        <Key android:codes="-217" android:keyIcon="@drawable/key_12key_right" android:iconPreview="@drawable/key_12key_right_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+    </Row>
+    
+    <Row>
+        <Key android:codes="-222" android:keyIcon="@drawable/key_12key_pict_sym" android:iconPreview="@drawable/key_12key_pict_sym_b"
+	     android:keyEdgeFlags="left" android:keyWidth="18%"/>
+        <Key android:codes="-207" android:keyLabel="7" android:horizontalGap="2%"/>
+        <Key android:codes="-208" android:keyLabel="8"/>
+        <Key android:codes="-209" android:keyLabel="9"/>
+        <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space" android:iconPreview="@drawable/key_12key_space_b" android:isRepeatable="true" android:keyEdgeFlags="right"  android:horizontalGap="2%" android:keyWidth="18%"/>
+    </Row>
+    
+    <Row android:rowEdgeFlags="bottom">
+        <Key android:codes="-230" android:keyIcon="@drawable/key_12key_mode_full_num" android:iconPreview="@drawable/key_mode_change_b"
+	     android:popupKeyboard="@xml/keyboard_switch_key_jp" android:keyEdgeFlags="left" android:keyWidth="18%"/>
+        <Key android:codes="-213" android:keyLabel="*"  android:horizontalGap="2%"/>
+        <Key android:codes="-210" android:keyLabel="0" />
+        <Key android:codes="-211" android:keyLabel="#" />
+        <Key android:codes="-216" android:keyIcon="@drawable/key_12key_enter" android:iconPreview="@drawable/key_12key_enter_b" 
+             android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+    </Row>
+</Keyboard>
diff --git a/res/xml/keyboard_12key_alphabet.xml b/res/xml/keyboard_12key_half_alphabet.xml
similarity index 64%
copy from res/xml/keyboard_12key_alphabet.xml
copy to res/xml/keyboard_12key_half_alphabet.xml
index 676322e..2588c46 100644
--- a/res/xml/keyboard_12key_alphabet.xml
+++ b/res/xml/keyboard_12key_half_alphabet.xml
@@ -16,45 +16,45 @@
 -->
 <Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
     android:keyWidth="20%p"
-    android:horizontalGap="0px"
-    android:verticalGap="0px"
+    android:horizontalGap="0dip"
+    android:verticalGap="0dip"
     android:keyHeight="@dimen/key_height"
     >
 
     <Row>
         <Key android:codes="-219" android:keyIcon="@drawable/key_12key_reverse" android:iconPreview="@drawable/key_12key_reverse_b"
-             android:keyEdgeFlags="left"/>
-        <Key android:codes="-201" android:keyIcon="@drawable/key_12key_alpha1" android:iconPreview="@drawable/key_12key_alpha1_b"/>
+             android:keyEdgeFlags="left" android:keyWidth="18%"/>
+        <Key android:codes="-201" android:keyIcon="@drawable/key_12key_alpha1" android:iconPreview="@drawable/key_12key_alpha1_b" android:horizontalGap="2%"/>
         <Key android:codes="-202" android:keyIcon="@drawable/key_12key_alpha2" android:iconPreview="@drawable/key_12key_alpha2_b"/>
         <Key android:codes="-203" android:keyIcon="@drawable/key_12key_alpha3" android:iconPreview="@drawable/key_12key_alpha3_b"/>
         <Key android:codes="-214" android:keyIcon="@drawable/key_12key_del" android:iconPreview="@drawable/key_12key_del_b"
-             android:isRepeatable="true" android:keyEdgeFlags="right"/>
+             android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
     </Row>
     
     <Row>
-        <Key android:codes="-218" android:keyLabel="@string/key_left_arrow" android:isRepeatable="true" android:keyEdgeFlags="left"/>
-        <Key android:codes="-204" android:keyIcon="@drawable/key_12key_alpha4" android:iconPreview="@drawable/key_12key_alpha4_b"/>
+        <Key android:codes="-218" android:keyIcon="@drawable/key_12key_left" android:iconPreview="@drawable/key_12key_left_b" android:isRepeatable="true" android:keyEdgeFlags="left" android:keyWidth="18%"/>
+        <Key android:codes="-204" android:keyIcon="@drawable/key_12key_alpha4" android:iconPreview="@drawable/key_12key_alpha4_b" android:horizontalGap="2%"/>
         <Key android:codes="-205" android:keyIcon="@drawable/key_12key_alpha5" android:iconPreview="@drawable/key_12key_alpha5_b"/>
         <Key android:codes="-206" android:keyIcon="@drawable/key_12key_alpha6" android:iconPreview="@drawable/key_12key_alpha6_b"/>
-        <Key android:codes="-217" android:keyLabel="@string/key_right_arrow" android:isRepeatable="true" android:keyEdgeFlags="right"/>
+        <Key android:codes="-217" android:keyIcon="@drawable/key_12key_right" android:iconPreview="@drawable/key_12key_right_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
     </Row>
     
     <Row>
         <Key android:codes="-222" android:keyIcon="@drawable/key_12key_pict_sym" android:iconPreview="@drawable/key_12key_pict_sym_b"
-	     android:keyEdgeFlags="left"/>
-        <Key android:codes="-207" android:keyIcon="@drawable/key_12key_alpha7" android:iconPreview="@drawable/key_12key_alpha7_b"/>
+	     android:keyEdgeFlags="left" android:keyWidth="18%"/>
+        <Key android:codes="-207" android:keyIcon="@drawable/key_12key_alpha7" android:iconPreview="@drawable/key_12key_alpha7_b" android:horizontalGap="2%"/>
         <Key android:codes="-208" android:keyIcon="@drawable/key_12key_alpha8" android:iconPreview="@drawable/key_12key_alpha8_b"/>
         <Key android:codes="-209" android:keyIcon="@drawable/key_12key_alpha9" android:iconPreview="@drawable/key_12key_alpha9_b"/>
-        <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space" android:iconPreview="@drawable/key_12key_space_b" android:isRepeatable="true" android:keyEdgeFlags="right" />
+        <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space" android:iconPreview="@drawable/key_12key_space_b" android:isRepeatable="true" android:keyEdgeFlags="right"  android:horizontalGap="2%" android:keyWidth="18%"/>
     </Row>
     
     <Row android:rowEdgeFlags="bottom">
-        <Key android:codes="-230" android:keyLabel="@string/key_change_mode"
-	     android:popupKeyboard="@xml/keyboard_switch_key" android:keyEdgeFlags="left"/>
-        <Key android:codes="-213" android:keyLabel="@string/key_12key_alphabet_A"/>
+        <Key android:codes="-230" android:keyIcon="@drawable/key_12key_mode_half_alpha" android:iconPreview="@drawable/key_mode_change_b"
+	     android:popupKeyboard="@xml/keyboard_switch_key_jp" android:keyEdgeFlags="left" android:keyWidth="18%"/>
+        <Key android:codes="-213" android:keyIcon="@drawable/key_12key_caps" android:iconPreview="@drawable/key_12key_caps_b" android:horizontalGap="2%"/>
         <Key android:codes="-210" android:keyIcon="@drawable/key_12key_alpha0" android:iconPreview="@drawable/key_12key_alpha0_b"/>
-        <Key android:codes="-211" android:keyLabel=", ." />
-        <Key android:codes="-216" android:keyIcon="@drawable/key_12key_enter" android:iconPreview="@drawable/key_12key_enter_b" 
-             android:keyEdgeFlags="right"/>
+        <Key android:codes="-211" android:keyIcon="@drawable/key_12key_period_comma" android:iconPreview="@drawable/key_12key_period_comma_b" />
+        <Key android:codes="-216" android:keyIcon="@drawable/key_12key_enter_jp" android:iconPreview="@drawable/key_12key_enter_jp_b" 
+             android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
     </Row>
 </Keyboard>
diff --git a/res/xml/keyboard_12key_alphabet_input.xml b/res/xml/keyboard_12key_half_alphabet_input.xml
similarity index 64%
copy from res/xml/keyboard_12key_alphabet_input.xml
copy to res/xml/keyboard_12key_half_alphabet_input.xml
index 8737101..a7c6549 100644
--- a/res/xml/keyboard_12key_alphabet_input.xml
+++ b/res/xml/keyboard_12key_half_alphabet_input.xml
@@ -16,45 +16,45 @@
 -->
 <Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
     android:keyWidth="20%p"
-    android:horizontalGap="0px"
-    android:verticalGap="0px"
+    android:horizontalGap="0dip"
+    android:verticalGap="0dip"
     android:keyHeight="@dimen/key_height"
     >
   
     <Row>
         <Key android:codes="-219" android:keyIcon="@drawable/key_12key_reverse" android:iconPreview="@drawable/key_12key_reverse_b"
-             android:keyEdgeFlags="left"/>
-        <Key android:codes="-201" android:keyIcon="@drawable/key_12key_alpha1" android:iconPreview="@drawable/key_12key_alpha1_b"/>
+             android:keyEdgeFlags="left" android:keyWidth="18%"/>
+        <Key android:codes="-201" android:keyIcon="@drawable/key_12key_alpha1" android:iconPreview="@drawable/key_12key_alpha1_b" android:horizontalGap="2%"/>
         <Key android:codes="-202" android:keyIcon="@drawable/key_12key_alpha2" android:iconPreview="@drawable/key_12key_alpha2_b"/>
         <Key android:codes="-203" android:keyIcon="@drawable/key_12key_alpha3" android:iconPreview="@drawable/key_12key_alpha3_b"/>
         <Key android:codes="-214" android:keyIcon="@drawable/key_12key_del" android:iconPreview="@drawable/key_12key_del_b"
-             android:isRepeatable="true" android:keyEdgeFlags="right"/>
+             android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
     </Row>
     
     <Row>
-        <Key android:codes="-218" android:keyLabel="@string/key_left_arrow" android:isRepeatable="true" android:keyEdgeFlags="left"/>
-        <Key android:codes="-204" android:keyIcon="@drawable/key_12key_alpha4" android:iconPreview="@drawable/key_12key_alpha4_b"/>
+        <Key android:codes="-218" android:keyIcon="@drawable/key_12key_left" android:iconPreview="@drawable/key_12key_left_b" android:isRepeatable="true" android:keyEdgeFlags="left" android:keyWidth="18%"/>
+        <Key android:codes="-204" android:keyIcon="@drawable/key_12key_alpha4" android:iconPreview="@drawable/key_12key_alpha4_b" android:horizontalGap="2%"/>
         <Key android:codes="-205" android:keyIcon="@drawable/key_12key_alpha5" android:iconPreview="@drawable/key_12key_alpha5_b"/>
         <Key android:codes="-206" android:keyIcon="@drawable/key_12key_alpha6" android:iconPreview="@drawable/key_12key_alpha6_b"/>
-        <Key android:codes="-217" android:keyLabel="@string/key_right_arrow" android:isRepeatable="true" android:keyEdgeFlags="right"/>
+        <Key android:codes="-217" android:keyIcon="@drawable/key_12key_right" android:iconPreview="@drawable/key_12key_right_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
     </Row>
     
     <Row>
         <Key android:codes="-222"  android:keyIcon="@drawable/key_12key_pict_sym" android:iconPreview="@drawable/key_12key_pict_sym_b"
-	     android:keyEdgeFlags="left"/>
-        <Key android:codes="-207" android:keyIcon="@drawable/key_12key_alpha7" android:iconPreview="@drawable/key_12key_alpha7_b"/>
+	     android:keyEdgeFlags="left" android:keyWidth="18%"/>
+        <Key android:codes="-207" android:keyIcon="@drawable/key_12key_alpha7" android:iconPreview="@drawable/key_12key_alpha7_b" android:horizontalGap="2%"/>
         <Key android:codes="-208" android:keyIcon="@drawable/key_12key_alpha8" android:iconPreview="@drawable/key_12key_alpha8_b"/>
         <Key android:codes="-209" android:keyIcon="@drawable/key_12key_alpha9" android:iconPreview="@drawable/key_12key_alpha9_b"/>
-        <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space" android:iconPreview="@drawable/key_12key_space_b" android:isRepeatable="true" android:keyEdgeFlags="right" />
+        <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space" android:iconPreview="@drawable/key_12key_space_b" android:isRepeatable="true" android:keyEdgeFlags="right"  android:horizontalGap="2%" android:keyWidth="18%"/>
     </Row>
     
     <Row android:rowEdgeFlags="bottom">
-        <Key android:codes="-230" android:keyLabel="@string/key_change_mode"
-	     android:popupKeyboard="@xml/keyboard_switch_key" android:keyEdgeFlags="left"/>
-        <Key android:codes="-213" android:keyLabel="@string/key_12key_alphabet_A"/>
+        <Key android:codes="-230" android:keyIcon="@drawable/key_12key_mode_half_alpha" android:iconPreview="@drawable/key_mode_change_b"
+	     android:popupKeyboard="@xml/keyboard_switch_key_jp" android:keyEdgeFlags="left" android:keyWidth="18%"/>
+        <Key android:codes="-213" android:keyIcon="@drawable/key_12key_caps" android:iconPreview="@drawable/key_12key_caps_b" android:horizontalGap="2%"/>
         <Key android:codes="-210" android:keyIcon="@drawable/key_12key_alpha0" android:iconPreview="@drawable/key_12key_alpha0_b"/>
-        <Key android:codes="-211" android:keyLabel=", ." />
-        <Key android:codes="-216" android:keyIcon="@drawable/key_12key_enter" android:iconPreview="@drawable/key_12key_enter_b" 
-             android:keyEdgeFlags="right"/>
+        <Key android:codes="-211" android:keyIcon="@drawable/key_12key_period_comma" android:iconPreview="@drawable/key_12key_period_comma_b" />
+        <Key android:codes="-216" android:keyIcon="@drawable/key_12key_enter_jp" android:iconPreview="@drawable/key_12key_enter_jp_b" 
+             android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
     </Row>
 </Keyboard>
diff --git a/res/xml/keyboard_12key_katakana.xml b/res/xml/keyboard_12key_half_katakana.xml
similarity index 62%
copy from res/xml/keyboard_12key_katakana.xml
copy to res/xml/keyboard_12key_half_katakana.xml
index 0123e29..6d52364 100644
--- a/res/xml/keyboard_12key_katakana.xml
+++ b/res/xml/keyboard_12key_half_katakana.xml
@@ -16,45 +16,45 @@
 -->
 <Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
     android:keyWidth="20%p"
-    android:horizontalGap="0px"
-    android:verticalGap="0px"
+    android:horizontalGap="0dip"
+    android:verticalGap="0dip"
     android:keyHeight="@dimen/key_height"
     >
   
     <Row>
         <Key android:codes="-219" android:keyIcon="@drawable/key_12key_reverse" android:iconPreview="@drawable/key_12key_reverse_b"
-             android:keyEdgeFlags="left"/>
-        <Key android:codes="-201" android:keyLabel="@string/key_12key_katakana_1"/>
+             android:keyEdgeFlags="left" android:keyWidth="18%"/>
+        <Key android:codes="-201" android:keyLabel="@string/key_12key_katakana_1" android:horizontalGap="2%"/>
         <Key android:codes="-202" android:keyLabel="@string/key_12key_katakana_2"/>
         <Key android:codes="-203" android:keyLabel="@string/key_12key_katakana_3"/>
         <Key android:codes="-214" android:keyIcon="@drawable/key_12key_del" android:iconPreview="@drawable/key_12key_del_b"
-             android:isRepeatable="true" android:keyEdgeFlags="right"/>
+             android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
     </Row>
     
     <Row>
-        <Key android:codes="-218" android:keyLabel="@string/key_left_arrow" android:isRepeatable="true" android:keyEdgeFlags="left"/>
-        <Key android:codes="-204" android:keyLabel="@string/key_12key_katakana_4"/>
+        <Key android:codes="-218" android:keyIcon="@drawable/key_12key_left" android:iconPreview="@drawable/key_12key_left_b" android:isRepeatable="true" android:keyEdgeFlags="left" android:keyWidth="18%"/>
+        <Key android:codes="-204" android:keyLabel="@string/key_12key_katakana_4" android:horizontalGap="2%"/>
         <Key android:codes="-205" android:keyLabel="@string/key_12key_katakana_5"/>
         <Key android:codes="-206" android:keyLabel="@string/key_12key_katakana_6"/>
-        <Key android:codes="-217" android:keyLabel="@string/key_right_arrow" android:isRepeatable="true" android:keyEdgeFlags="right"/>
+        <Key android:codes="-217" android:keyIcon="@drawable/key_12key_right" android:iconPreview="@drawable/key_12key_right_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
     </Row>
     
     <Row>
         <Key android:codes="-222"  android:keyIcon="@drawable/key_12key_pict_sym" android:iconPreview="@drawable/key_12key_pict_sym_b"
-	     android:keyEdgeFlags="left"/>
-        <Key android:codes="-207" android:keyLabel="@string/key_12key_katakana_7"/>
+	     android:keyEdgeFlags="left" android:keyWidth="18%"/>
+        <Key android:codes="-207" android:keyLabel="@string/key_12key_katakana_7" android:horizontalGap="2%"/>
         <Key android:codes="-208" android:keyLabel="@string/key_12key_katakana_8"/>
         <Key android:codes="-209" android:keyLabel="@string/key_12key_katakana_9"/>
-        <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space" android:iconPreview="@drawable/key_12key_space_b" android:isRepeatable="true" android:keyEdgeFlags="right" />
+        <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space" android:iconPreview="@drawable/key_12key_space_b" android:isRepeatable="true" android:keyEdgeFlags="right"  android:horizontalGap="2%" android:keyWidth="18%"/>
     </Row>
     
     <Row android:rowEdgeFlags="bottom">
-        <Key android:codes="-230" android:keyLabel="@string/key_change_mode"
-	     android:popupKeyboard="@xml/keyboard_switch_key" android:keyEdgeFlags="left"/>
-        <Key android:codes="-213" android:keyIcon="@drawable/key_12key_dakuten" android:iconPreview="@drawable/key_12key_dakuten_b"  />
+        <Key android:codes="-230" android:keyIcon="@drawable/key_12key_mode_half_kata" android:iconPreview="@drawable/key_mode_change_b"
+	     android:popupKeyboard="@xml/keyboard_switch_key_jp" android:keyEdgeFlags="left" android:keyWidth="18%"/>
+        <Key android:codes="-213" android:keyIcon="@drawable/key_12key_dakuten" android:iconPreview="@drawable/key_12key_dakuten_b"   android:horizontalGap="2%"/>
         <Key android:codes="-210" android:keyLabel="@string/key_12key_katakana_0" />
-        <Key android:codes="-211" android:keyLabel="@string/key_12key_kutoten" />
-        <Key android:codes="-216" android:keyIcon="@drawable/key_12key_enter" android:iconPreview="@drawable/key_12key_enter_b" 
-             android:keyEdgeFlags="right"/>
+        <Key android:codes="-211" android:keyIcon="@drawable/key_12key_ten" android:iconPreview="@drawable/key_12key_ten_b" />
+        <Key android:codes="-216" android:keyIcon="@drawable/key_12key_enter_jp" android:iconPreview="@drawable/key_12key_enter_jp_b" 
+             android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
     </Row>
 </Keyboard>
diff --git a/res/xml/keyboard_12key_katakana_input.xml b/res/xml/keyboard_12key_half_katakana_input.xml
similarity index 62%
rename from res/xml/keyboard_12key_katakana_input.xml
rename to res/xml/keyboard_12key_half_katakana_input.xml
index 25acc0b..19cd68f 100644
--- a/res/xml/keyboard_12key_katakana_input.xml
+++ b/res/xml/keyboard_12key_half_katakana_input.xml
@@ -16,45 +16,45 @@
 -->
 <Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
     android:keyWidth="20%p"
-    android:horizontalGap="0px"
-    android:verticalGap="0px"
+    android:horizontalGap="0dip"
+    android:verticalGap="0dip"
     android:keyHeight="@dimen/key_height"
     >
   
    <Row>
         <Key android:codes="-219" android:keyIcon="@drawable/key_12key_reverse" android:iconPreview="@drawable/key_12key_reverse_b"
-             android:keyEdgeFlags="left"/>
-        <Key android:codes="-201" android:keyLabel="@string/key_12key_katakana_1"/>
+             android:keyEdgeFlags="left" android:keyWidth="18%"/>
+        <Key android:codes="-201" android:keyLabel="@string/key_12key_katakana_1" android:horizontalGap="2%"/>
         <Key android:codes="-202" android:keyLabel="@string/key_12key_katakana_2"/>
         <Key android:codes="-203" android:keyLabel="@string/key_12key_katakana_3"/>
         <Key android:codes="-214" android:keyIcon="@drawable/key_12key_del" android:iconPreview="@drawable/key_12key_del_b"
-             android:isRepeatable="true" android:keyEdgeFlags="right"/>
+             android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
     </Row>
     
     <Row>
-        <Key android:codes="-218" android:keyLabel="@string/key_left_arrow" android:isRepeatable="true" android:keyEdgeFlags="left"/>
-        <Key android:codes="-204" android:keyLabel="@string/key_12key_katakana_4"/>
+        <Key android:codes="-218" android:keyIcon="@drawable/key_12key_left" android:iconPreview="@drawable/key_12key_left_b" android:isRepeatable="true" android:keyEdgeFlags="left" android:keyWidth="18%"/>
+        <Key android:codes="-204" android:keyLabel="@string/key_12key_katakana_4" android:horizontalGap="2%"/>
         <Key android:codes="-205" android:keyLabel="@string/key_12key_katakana_5"/>
         <Key android:codes="-206" android:keyLabel="@string/key_12key_katakana_6"/>
-        <Key android:codes="-217" android:keyLabel="@string/key_right_arrow" android:isRepeatable="true" android:keyEdgeFlags="right"/>
+        <Key android:codes="-217" android:keyIcon="@drawable/key_12key_right" android:iconPreview="@drawable/key_12key_right_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
     </Row>
     
     <Row>
         <Key android:codes="-222" android:keyIcon="@drawable/key_12key_pict_sym" android:iconPreview="@drawable/key_12key_pict_sym_b"
-	     android:keyEdgeFlags="left"/>
-        <Key android:codes="-207" android:keyLabel="@string/key_12key_katakana_7"/>
+	     android:keyEdgeFlags="left" android:keyWidth="18%"/>
+        <Key android:codes="-207" android:keyLabel="@string/key_12key_katakana_7" android:horizontalGap="2%"/>
         <Key android:codes="-208" android:keyLabel="@string/key_12key_katakana_8"/>
         <Key android:codes="-209" android:keyLabel="@string/key_12key_katakana_9"/>
-        <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space" android:iconPreview="@drawable/key_12key_space_b" android:isRepeatable="true" android:keyEdgeFlags="right" />
+        <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space" android:iconPreview="@drawable/key_12key_space_b" android:isRepeatable="true" android:keyEdgeFlags="right"  android:horizontalGap="2%" android:keyWidth="18%"/>
     </Row>
      
     <Row android:rowEdgeFlags="bottom">
-        <Key android:codes="-230" android:keyLabel="@string/key_change_mode"
-	     android:popupKeyboard="@xml/keyboard_switch_key" android:keyEdgeFlags="left"/>
-        <Key android:codes="-213" android:keyIcon="@drawable/key_12key_dakuten" android:iconPreview="@drawable/key_12key_dakuten_b"  />
+        <Key android:codes="-230" android:keyIcon="@drawable/key_12key_mode_half_kata" android:iconPreview="@drawable/key_mode_change_b"
+	     android:popupKeyboard="@xml/keyboard_switch_key_jp" android:keyEdgeFlags="left" android:keyWidth="18%"/>
+        <Key android:codes="-213" android:keyIcon="@drawable/key_12key_dakuten" android:iconPreview="@drawable/key_12key_dakuten_b"   android:horizontalGap="2%"/>
         <Key android:codes="-210" android:keyLabel="@string/key_12key_katakana_0" />
-        <Key android:codes="-211" android:keyLabel="@string/key_12key_kutoten" />
-        <Key android:codes="-216" android:keyIcon="@drawable/key_12key_enter" android:iconPreview="@drawable/key_12key_enter_b" 
-             android:keyEdgeFlags="right"/>
+        <Key android:codes="-211" android:keyIcon="@drawable/key_12key_ten" android:iconPreview="@drawable/key_12key_ten_b" />
+        <Key android:codes="-216" android:keyIcon="@drawable/key_12key_enter_jp" android:iconPreview="@drawable/key_12key_enter_jp_b" 
+             android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
     </Row>
 </Keyboard>
diff --git a/res/xml/keyboard_12key_half_num.xml b/res/xml/keyboard_12key_half_num.xml
new file mode 100644
index 0000000..49a6562
--- /dev/null
+++ b/res/xml/keyboard_12key_half_num.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2008,2009  OMRON SOFTWARE Co., Ltd.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
+    android:keyWidth="20%p"
+    android:horizontalGap="0dip"
+    android:verticalGap="0dip"
+    android:keyHeight="@dimen/key_height"
+    >
+  
+    <Row>
+        <Key android:codes="-219" android:keyIcon="@drawable/key_12key_reverse" android:iconPreview="@drawable/key_12key_reverse_b"
+             android:keyEdgeFlags="left" android:keyWidth="18%"/>
+        <Key android:codes="-201" android:keyLabel="1" android:horizontalGap="2%"/>
+        <Key android:codes="-202" android:keyLabel="2"/>
+        <Key android:codes="-203" android:keyLabel="3"/>
+        <Key android:codes="-214" android:keyIcon="@drawable/key_12key_del" android:iconPreview="@drawable/key_12key_del_b"
+             android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+    </Row>
+    
+    <Row>
+        <Key android:codes="-218" android:keyIcon="@drawable/key_12key_left" android:iconPreview="@drawable/key_12key_left_b" android:isRepeatable="true" android:keyEdgeFlags="left" android:keyWidth="18%"/>
+        <Key android:codes="-204" android:keyLabel="4" android:horizontalGap="2%"/>
+        <Key android:codes="-205" android:keyLabel="5"/>
+        <Key android:codes="-206" android:keyLabel="6"/>
+        <Key android:codes="-217" android:keyIcon="@drawable/key_12key_right" android:iconPreview="@drawable/key_12key_right_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+    </Row>
+    
+    <Row>
+        <Key android:codes="-222" android:keyIcon="@drawable/key_12key_pict_sym" android:iconPreview="@drawable/key_12key_pict_sym_b"
+	     android:keyEdgeFlags="left" android:keyWidth="18%"/>
+        <Key android:codes="-207" android:keyLabel="7" android:horizontalGap="2%"/>
+        <Key android:codes="-208" android:keyLabel="8"/>
+        <Key android:codes="-209" android:keyLabel="9"/>
+        <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space" android:iconPreview="@drawable/key_12key_space_b" android:isRepeatable="true" android:keyEdgeFlags="right"  android:horizontalGap="2%" android:keyWidth="18%"/>
+    </Row>
+    
+    <Row android:rowEdgeFlags="bottom">
+        <Key android:codes="-230" android:keyIcon="@drawable/key_12key_mode_half_num" android:iconPreview="@drawable/key_mode_change_b"
+	     android:popupKeyboard="@xml/keyboard_switch_key_jp" android:keyEdgeFlags="left" android:keyWidth="18%"/>
+        <Key android:codes="-213" android:keyLabel="*"  android:horizontalGap="2%"/>
+        <Key android:codes="-210" android:keyLabel="0" />
+        <Key android:codes="-211" android:keyLabel="#" />
+        <Key android:codes="-216" android:keyIcon="@drawable/key_12key_enter" android:iconPreview="@drawable/key_12key_enter_b" 
+             android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
+    </Row>
+</Keyboard>
diff --git a/res/xml/keyboard_12key_katakana_input_landscape.xml b/res/xml/keyboard_12key_katakana_input_landscape.xml
deleted file mode 100644
index c10d624..0000000
--- a/res/xml/keyboard_12key_katakana_input_landscape.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2008,2009  OMRON SOFTWARE Co., Ltd.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
-    android:keyWidth="20%p"
-    android:horizontalGap="0px"
-    android:verticalGap="0px"
-    android:keyHeight="@dimen/key_height_landscape"
-    >
-
-    <Row>
-        <Key android:codes="-219" android:keyIcon="@drawable/key_12key_reverse" android:iconPreview="@drawable/key_12key_reverse_b"
-             android:keyEdgeFlags="left"/>
-        <Key android:codes="-201" android:keyLabel="@string/key_12key_katakana_1"/>
-        <Key android:codes="-202" android:keyLabel="@string/key_12key_katakana_2"/>
-        <Key android:codes="-203" android:keyLabel="@string/key_12key_katakana_3"/>
-        <Key android:codes="-214" android:keyIcon="@drawable/key_12key_del_landscape" android:iconPreview="@drawable/key_12key_del_b_landscape" android:isRepeatable="true"
-	     android:keyEdgeFlags="right"/>
-    </Row>
-    
-    <Row>
-        <Key android:codes="-218" android:keyLabel="@string/key_left_arrow" android:isRepeatable="true" android:keyEdgeFlags="left"/>
-        <Key android:codes="-204" android:keyLabel="@string/key_12key_katakana_4"/>
-        <Key android:codes="-205" android:keyLabel="@string/key_12key_katakana_5"/>
-        <Key android:codes="-206" android:keyLabel="@string/key_12key_katakana_6"/>
-        <Key android:codes="-217" android:keyLabel="@string/key_right_arrow" android:isRepeatable="true" android:keyEdgeFlags="right"/>
-    </Row>
-    
-    <Row>
-        <Key android:codes="-222" android:keyIcon="@drawable/key_12key_pict_sym" android:iconPreview="@drawable/key_12key_pict_sym_b"
-	     android:keyEdgeFlags="left"/>
-        <Key android:codes="-207" android:keyLabel="@string/key_12key_katakana_7"/>
-        <Key android:codes="-208" android:keyLabel="@string/key_12key_katakana_8"/>
-        <Key android:codes="-209" android:keyLabel="@string/key_12key_katakana_9"/>
-        <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space" android:iconPreview="@drawable/key_12key_space_b" android:isRepeatable="true" android:keyEdgeFlags="right" />
-    </Row>
-   
-    <Row android:rowEdgeFlags="bottom">
-        <Key android:codes="-230" android:keyLabel="@string/key_change_mode"
-	     android:popupKeyboard="@xml/keyboard_switch_key" android:keyEdgeFlags="left"/>
-        <Key android:codes="-213" android:keyLabel="@string/key_12key_A"/>
-        <Key android:codes="-210" android:keyLabel="@string/key_12key_katakana_0" />
-        <Key android:codes="-211" android:keyLabel="@string/key_12key_kutoten" />
-        <Key android:codes="-216" android:keyIcon="@drawable/key_12key_enter" android:iconPreview="@drawable/key_12key_enter_b" 
-             android:keyEdgeFlags="right"/>
-    </Row>
-</Keyboard>
diff --git a/res/xml/keyboard_12key_katakana_landscape.xml b/res/xml/keyboard_12key_katakana_landscape.xml
deleted file mode 100644
index fe20b37..0000000
--- a/res/xml/keyboard_12key_katakana_landscape.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2008,2009  OMRON SOFTWARE Co., Ltd.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
-    android:keyWidth="20%p"
-    android:horizontalGap="0px"
-    android:verticalGap="0px"
-    android:keyHeight="@dimen/key_height_landscape"
-    >
-  
-    <Row>
-        <Key android:codes="-219" android:keyIcon="@drawable/key_12key_reverse" android:iconPreview="@drawable/key_12key_reverse_b"
-             android:keyEdgeFlags="left"/>
-        <Key android:codes="-201" android:keyLabel="@string/key_12key_katakana_1"/>
-        <Key android:codes="-202" android:keyLabel="@string/key_12key_katakana_2"/>
-        <Key android:codes="-203" android:keyLabel="@string/key_12key_katakana_3"/>
-        <Key android:codes="-214" android:keyIcon="@drawable/key_12key_del_landscape" android:iconPreview="@drawable/key_12key_del_b_landscape" android:isRepeatable="true"
-	     android:keyEdgeFlags="right"/>
-    </Row>
-    
-    <Row>
-        <Key android:codes="-218" android:keyLabel="@string/key_left_arrow" android:isRepeatable="true" android:keyEdgeFlags="left"/>
-        <Key android:codes="-204" android:keyLabel="@string/key_12key_katakana_4"/>
-        <Key android:codes="-205" android:keyLabel="@string/key_12key_katakana_5"/>
-        <Key android:codes="-206" android:keyLabel="@string/key_12key_katakana_6"/>
-        <Key android:codes="-217" android:keyLabel="@string/key_right_arrow" android:isRepeatable="true" android:keyEdgeFlags="right"/>
-    </Row>
-    
-    <Row>
-        <Key android:codes="-222" android:keyIcon="@drawable/key_12key_pict_sym" android:iconPreview="@drawable/key_12key_pict_sym_b"
-	     android:keyEdgeFlags="left"/>
-        <Key android:codes="-207" android:keyLabel="@string/key_12key_katakana_7"/>
-        <Key android:codes="-208" android:keyLabel="@string/key_12key_katakana_8"/>
-        <Key android:codes="-209" android:keyLabel="@string/key_12key_katakana_9"/>
-        <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space" android:iconPreview="@drawable/key_12key_space_b" android:isRepeatable="true" android:keyEdgeFlags="right" />
-    </Row>
-   
-    <Row android:rowEdgeFlags="bottom">
-        <Key android:codes="-230" android:keyLabel="@string/key_change_mode"
-	     android:popupKeyboard="@xml/keyboard_switch_key" android:keyEdgeFlags="left"/>
-        <Key android:codes="-213" android:keyLabel="@string/key_12key_A"/>
-        <Key android:codes="-210" android:keyLabel="@string/key_12key_katakana_0" />
-        <Key android:codes="-211" android:keyLabel="@string/key_12key_kutoten" />
-        <Key android:codes="-216" android:keyIcon="@drawable/key_12key_enter" android:iconPreview="@drawable/key_12key_enter_b" 
-             android:keyEdgeFlags="right"/>
-    </Row>
-</Keyboard>
diff --git a/res/xml/keyboard_12key_num.xml b/res/xml/keyboard_12key_num.xml
deleted file mode 100644
index 60570f7..0000000
--- a/res/xml/keyboard_12key_num.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2008,2009  OMRON SOFTWARE Co., Ltd.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
-    android:keyWidth="20%p"
-    android:horizontalGap="0px"
-    android:verticalGap="0px"
-    android:keyHeight="@dimen/key_height"
-    >
-  
-    <Row>
-        <Key android:codes="-219" android:keyIcon="@drawable/key_12key_reverse" android:iconPreview="@drawable/key_12key_reverse_b"
-             android:keyEdgeFlags="left"/>
-        <Key android:codes="-201" android:keyLabel="1"/>
-        <Key android:codes="-202" android:keyLabel="2"/>
-        <Key android:codes="-203" android:keyLabel="3"/>
-        <Key android:codes="-214" android:keyIcon="@drawable/key_12key_del" android:iconPreview="@drawable/key_12key_del_b"
-             android:isRepeatable="true" android:keyEdgeFlags="right"/>
-    </Row>
-    
-    <Row>
-        <Key android:codes="-218" android:keyLabel="@string/key_left_arrow" android:isRepeatable="true" android:keyEdgeFlags="left"/>
-        <Key android:codes="-204" android:keyLabel="4"/>
-        <Key android:codes="-205" android:keyLabel="5"/>
-        <Key android:codes="-206" android:keyLabel="6"/>
-        <Key android:codes="-217" android:keyLabel="@string/key_right_arrow" android:isRepeatable="true" android:keyEdgeFlags="right"/>
-    </Row>
-    
-    <Row>
-        <Key android:codes="-222" android:keyIcon="@drawable/key_12key_pict_sym" android:iconPreview="@drawable/key_12key_pict_sym_b"
-	     android:keyEdgeFlags="left"/>
-        <Key android:codes="-207" android:keyLabel="7"/>
-        <Key android:codes="-208" android:keyLabel="8"/>
-        <Key android:codes="-209" android:keyLabel="9"/>
-        <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space" android:iconPreview="@drawable/key_12key_space_b" android:isRepeatable="true" android:keyEdgeFlags="right" />
-    </Row>
-    
-    <Row android:rowEdgeFlags="bottom">
-        <Key android:codes="-230" android:keyLabel="@string/key_change_mode"
-	     android:popupKeyboard="@xml/keyboard_switch_key" android:keyEdgeFlags="left"/>
-        <Key android:codes="-213" android:keyLabel="*" />
-        <Key android:codes="-210" android:keyLabel="0" />
-        <Key android:codes="-211" android:keyLabel="#" />
-        <Key android:codes="-216" android:keyIcon="@drawable/key_12key_enter" android:iconPreview="@drawable/key_12key_enter_b" 
-             android:keyEdgeFlags="right"/>
-    </Row>
-</Keyboard>
diff --git a/res/xml/keyboard_12key_num_landscape.xml b/res/xml/keyboard_12key_num_landscape.xml
deleted file mode 100644
index 70da21d..0000000
--- a/res/xml/keyboard_12key_num_landscape.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2008,2009  OMRON SOFTWARE Co., Ltd.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
-    android:keyWidth="20%p"
-    android:horizontalGap="0px"
-    android:verticalGap="0px"
-    android:keyHeight="@dimen/key_height_landscape"
-    >
-  
-    <Row>
-        <Key android:codes="-219" android:keyIcon="@drawable/key_12key_reverse" android:iconPreview="@drawable/key_12key_reverse_b"
-             android:keyEdgeFlags="left"/>
-        <Key android:codes="-201" android:keyLabel="1"/>
-        <Key android:codes="-202" android:keyLabel="2"/>
-        <Key android:codes="-203" android:keyLabel="3"/>
-        <Key android:codes="-214" android:keyIcon="@drawable/key_12key_del_landscape" android:iconPreview="@drawable/key_12key_del_b_landscape" android:isRepeatable="true"
-	     android:keyEdgeFlags="right"/>
-    </Row>
-    
-    <Row>
-        <Key android:codes="-218" android:keyLabel="@string/key_left_arrow" android:isRepeatable="true" android:keyEdgeFlags="left"/>
-        <Key android:codes="-204" android:keyLabel="4"/>
-        <Key android:codes="-205" android:keyLabel="5"/>
-        <Key android:codes="-206" android:keyLabel="6"/>
-        <Key android:codes="-217" android:keyLabel="@string/key_right_arrow" android:isRepeatable="true" android:keyEdgeFlags="right"/>
-    </Row>
-    
-    <Row>
-        <Key android:codes="-222" android:keyIcon="@drawable/key_12key_pict_sym" android:iconPreview="@drawable/key_12key_pict_sym_b"
-	     android:keyEdgeFlags="left"/>
-        <Key android:codes="-207" android:keyLabel="7"/>
-        <Key android:codes="-208" android:keyLabel="8"/>
-        <Key android:codes="-209" android:keyLabel="9"/>
-        <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space" android:iconPreview="@drawable/key_12key_space_b" android:isRepeatable="true" android:keyEdgeFlags="right" />
-    </Row>
-    
-    <Row android:rowEdgeFlags="bottom">
-        <Key android:codes="-230" android:keyLabel="@string/key_change_mode"
-	     android:popupKeyboard="@xml/keyboard_switch_key" android:keyEdgeFlags="left"/>
-        <Key android:codes="-213" android:keyLabel="*" />
-        <Key android:codes="-210" android:keyLabel="0" />
-        <Key android:codes="-211" android:keyLabel="#" />
-        <Key android:codes="-216" android:keyIcon="@drawable/key_12key_enter" android:iconPreview="@drawable/key_12key_enter_b" 
-             android:keyEdgeFlags="right"/>
-    </Row>
-</Keyboard>
diff --git a/res/xml/keyboard_12key_phone.xml b/res/xml/keyboard_12key_phone.xml
index 4ae5d4b..7637058 100644
--- a/res/xml/keyboard_12key_phone.xml
+++ b/res/xml/keyboard_12key_phone.xml
@@ -16,45 +16,45 @@
 -->
 <Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
     android:keyWidth="20%p"
-    android:horizontalGap="0px"
-    android:verticalGap="0px"
+    android:horizontalGap="0dip"
+    android:verticalGap="0dip"
     android:keyHeight="@dimen/key_height"
     >
   
     <Row>
         <Key android:codes="-310" android:keyLabel=""
-             android:keyEdgeFlags="left"/>
-        <Key android:codes="49" android:keyLabel="1"/>
+             android:keyEdgeFlags="left" android:keyWidth="18%"/>
+        <Key android:codes="49" android:keyLabel="1" android:horizontalGap="2%"/>
         <Key android:codes="50" android:keyLabel="2"/>
         <Key android:codes="51" android:keyLabel="3"/>
         <Key android:codes="-214"
 	     android:keyIcon="@drawable/key_12key_del" android:iconPreview="@drawable/key_12key_del_b"
-             android:isRepeatable="true" android:keyEdgeFlags="right"/>
+             android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
     </Row>
     
     <Row>
-        <Key android:codes="-218" android:keyLabel="@string/key_left_arrow" android:isRepeatable="true" android:keyEdgeFlags="left"/>
-        <Key android:codes="52" android:keyLabel="4"/>
+        <Key android:codes="-218" android:keyIcon="@drawable/key_12key_left" android:iconPreview="@drawable/key_12key_left_b" android:isRepeatable="true" android:keyEdgeFlags="left" android:keyWidth="18%"/>
+        <Key android:codes="52" android:keyLabel="4" android:horizontalGap="2%"/>
         <Key android:codes="53" android:keyLabel="5"/>
         <Key android:codes="54" android:keyLabel="6"/>
-        <Key android:codes="-217" android:keyLabel="@string/key_right_arrow" android:isRepeatable="true" android:keyEdgeFlags="right"/>
+        <Key android:codes="-217" android:keyIcon="@drawable/key_12key_right" android:iconPreview="@drawable/key_12key_right_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
     </Row>
     
     <Row>
-        <Key android:codes="45" android:keyLabel="-"/>
-        <Key android:codes="55" android:keyLabel="7"/>
+        <Key android:codes="45" android:keyLabel="-" android:keyWidth="18%"/>
+        <Key android:codes="55" android:keyLabel="7" android:horizontalGap="2%"/>
         <Key android:codes="56" android:keyLabel="8"/>
         <Key android:codes="57" android:keyLabel="9"/>
-        <Key android:codes="43" android:keyLabel="+"/>
+        <Key android:codes="43" android:keyLabel="+" android:horizontalGap="2%" android:keyWidth="18%"/>
     </Row>
     
     <Row android:rowEdgeFlags="bottom">
-        <Key android:codes="-310" android:keyLabel="" android:keyEdgeFlags="left" />
-        <Key android:codes="42" android:keyLabel="*" />
+        <Key android:codes="-310" android:keyLabel="" android:keyEdgeFlags="left"  android:keyWidth="18%"/>
+        <Key android:codes="42" android:keyLabel="*"  android:horizontalGap="2%"/>
         <Key android:codes="48" android:keyLabel="0" />
         <Key android:codes="35" android:keyLabel="#" />
         <Key android:codes="-216" android:keyIcon="@drawable/key_12key_enter"
              android:iconPreview="@drawable/key_12key_enter_b" 
-             android:keyEdgeFlags="right"/>
+             android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
     </Row>
 </Keyboard>
diff --git a/res/xml/keyboard_12key_phone_landscape.xml b/res/xml/keyboard_12key_phone_landscape.xml
deleted file mode 100644
index 159f752..0000000
--- a/res/xml/keyboard_12key_phone_landscape.xml
+++ /dev/null
@@ -1,78 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2008,2009  OMRON SOFTWARE Co., Ltd.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<!--
-    /*
-    ** Copyright 2008, OMRON SOFTWARE Co., Ltd. All Rights Reserved.
-    **
-    ** Licensed under the Apache License, Version 2.0 (the "License"); 
-    ** you may not use this file except in compliance with the License. 
-    ** You may obtain a copy of the License at 
-    **
-    **     http://www.apache.org/licenses/LICENSE-2.0 
-    **
-    ** Unless required by applicable law or agreed to in writing, software 
-    ** distributed under the License is distributed on an "AS IS" BASIS, 
-    ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
-    ** See the License for the specific language governing permissions and 
-    ** limitations under the License.
-    */
-  -->
-
-<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
-    android:keyWidth="20%p"
-    android:horizontalGap="0px"
-    android:verticalGap="0px"
-    android:keyHeight="@dimen/key_height_landscape"
-    >
-  
-    <Row>
-        <Key android:codes="-310" android:keyLabel=""
-             android:keyEdgeFlags="left"/>
-        <Key android:codes="49" android:keyLabel="1"/>
-        <Key android:codes="50" android:keyLabel="2"/>
-        <Key android:codes="51" android:keyLabel="3"/>
-        <Key android:codes="-214" android:keyIcon="@drawable/key_12key_del_landscape" android:iconPreview="@drawable/key_12key_del_b_landscape"
-             android:isRepeatable="true" android:keyEdgeFlags="right"/>
-    </Row>
-    
-    <Row>
-        <Key android:codes="-218" android:keyLabel="@string/key_left_arrow" android:isRepeatable="true" android:keyEdgeFlags="left"/>
-        <Key android:codes="52" android:keyLabel="4"/>
-        <Key android:codes="53" android:keyLabel="5"/>
-        <Key android:codes="54" android:keyLabel="6"/>
-        <Key android:codes="-217" android:keyLabel="@string/key_right_arrow" android:isRepeatable="true" android:keyEdgeFlags="right"/>
-    </Row>
-    
-    <Row>
-        <Key android:codes="45" android:keyLabel="-"/>
-        <Key android:codes="55" android:keyLabel="7"/>
-        <Key android:codes="56" android:keyLabel="8"/>
-        <Key android:codes="57" android:keyLabel="9"/>
-        <Key android:codes="43" android:keyLabel="+"/>
-    </Row>
-    
-    <Row android:rowEdgeFlags="bottom">
-        <Key android:codes="-310" android:keyLabel="" android:keyEdgeFlags="left" />
-        <Key android:codes="42" android:keyLabel="*" />
-        <Key android:codes="48" android:keyLabel="0" />
-        <Key android:codes="35" android:keyLabel="#" />
-        <Key android:codes="-216" android:keyIcon="@drawable/key_12key_enter"
-             android:iconPreview="@drawable/key_12key_enter_b" 
-             android:keyEdgeFlags="right"/>
-    </Row>
-</Keyboard>
-    
diff --git a/res/xml/keyboard_12keyjp.xml b/res/xml/keyboard_12keyjp.xml
index f05c953..b96fc4f 100644
--- a/res/xml/keyboard_12keyjp.xml
+++ b/res/xml/keyboard_12keyjp.xml
@@ -16,45 +16,46 @@
 -->
 <Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
     android:keyWidth="20%p"
-    android:horizontalGap="0px"
-    android:verticalGap="0px"
+    android:horizontalGap="0dip"
+    android:verticalGap="0dip"
     android:keyHeight="@dimen/key_height"
     >
   
     <Row>
         <Key android:codes="-219" android:keyIcon="@drawable/key_12key_reverse" android:iconPreview="@drawable/key_12key_reverse_b"
-             android:keyEdgeFlags="left"/>
-        <Key android:codes="-201" android:keyIcon="@drawable/key_12key_hiragana1" android:iconPreview="@drawable/key_12key_hiragana1_b"/>
+             android:keyEdgeFlags="left" android:keyWidth="18%"/>
+        <Key android:codes="-201" android:keyIcon="@drawable/key_12key_hiragana1" android:iconPreview="@drawable/key_12key_hiragana1_b" android:horizontalGap="2%"/>
         <Key android:codes="-202" android:keyIcon="@drawable/key_12key_hiragana2" android:iconPreview="@drawable/key_12key_hiragana2_b"/>
         <Key android:codes="-203" android:keyIcon="@drawable/key_12key_hiragana3" android:iconPreview="@drawable/key_12key_hiragana3_b"/>
         <Key android:codes="-214" android:keyIcon="@drawable/key_12key_del" android:iconPreview="@drawable/key_12key_del_b"
-             android:isRepeatable="true" android:keyEdgeFlags="right"/>
+             android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
     </Row>
     
     <Row>
-        <Key android:codes="-218" android:keyLabel="@string/key_left_arrow" android:isRepeatable="true" android:keyEdgeFlags="left"/>
-        <Key android:codes="-204" android:keyIcon="@drawable/key_12key_hiragana4" android:iconPreview="@drawable/key_12key_hiragana4_b"/>
+        <Key android:codes="-218" android:keyIcon="@drawable/key_12key_left" android:iconPreview="@drawable/key_12key_left_b" android:isRepeatable="true" android:keyEdgeFlags="left" android:keyWidth="18%"/>
+        <Key android:codes="-204" android:keyIcon="@drawable/key_12key_hiragana4" android:iconPreview="@drawable/key_12key_hiragana4_b" android:horizontalGap="2%"/>
         <Key android:codes="-205" android:keyIcon="@drawable/key_12key_hiragana5" android:iconPreview="@drawable/key_12key_hiragana5_b"/>
         <Key android:codes="-206" android:keyIcon="@drawable/key_12key_hiragana6" android:iconPreview="@drawable/key_12key_hiragana6_b"/>
-        <Key android:codes="-217" android:keyLabel="@string/key_right_arrow" android:isRepeatable="true" android:keyEdgeFlags="right"/>
+        <Key android:codes="-217" android:keyIcon="@drawable/key_12key_right" android:iconPreview="@drawable/key_12key_right_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
     </Row>
     
     <Row>
         <Key android:codes="-222" android:keyIcon="@drawable/key_12key_pict_sym" android:iconPreview="@drawable/key_12key_pict_sym_b"
-	     android:keyEdgeFlags="left"/>
-        <Key android:codes="-207" android:keyIcon="@drawable/key_12key_hiragana7" android:iconPreview="@drawable/key_12key_hiragana7_b"/>
+	     android:keyEdgeFlags="left" android:keyWidth="18%"/>
+        <Key android:codes="-207" android:keyIcon="@drawable/key_12key_hiragana7" android:iconPreview="@drawable/key_12key_hiragana7_b" android:horizontalGap="2%"/>
         <Key android:codes="-208" android:keyIcon="@drawable/key_12key_hiragana8" android:iconPreview="@drawable/key_12key_hiragana8_b"/>
         <Key android:codes="-209" android:keyIcon="@drawable/key_12key_hiragana9" android:iconPreview="@drawable/key_12key_hiragana9_b"/>
-        <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space" android:iconPreview="@drawable/key_12key_space_b" android:isRepeatable="true" android:keyEdgeFlags="right" />
+        <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space_jp" android:iconPreview="@drawable/key_12key_space_jp_b" android:isRepeatable="true" android:keyEdgeFlags="right"  android:horizontalGap="2%" android:keyWidth="18%"/>
     </Row>
     
     <Row android:rowEdgeFlags="bottom">
-        <Key android:codes="-230" android:keyLabel="@string/key_change_mode" android:popupKeyboard="@xml/keyboard_switch_key"
-             android:keyEdgeFlags="left"/>
-        <Key android:codes="-213" android:keyIcon="@drawable/key_12key_dakuten" android:iconPreview="@drawable/key_12key_dakuten_b"  />
+        <Key android:codes="-230" android:keyIcon="@drawable/key_12key_mode_hira" android:iconPreview="@drawable/key_mode_change_b"
+             android:popupKeyboard="@xml/keyboard_switch_key_jp"
+             android:keyEdgeFlags="left" android:keyWidth="18%"/>
+        <Key android:codes="-213" android:keyIcon="@drawable/key_12key_dakuten" android:iconPreview="@drawable/key_12key_dakuten_b"   android:horizontalGap="2%"/>
         <Key android:codes="-210" android:keyIcon="@drawable/key_12key_hiragana0" android:iconPreview="@drawable/key_12key_hiragana0_b"/>
-        <Key android:codes="-211" android:keyLabel="@string/key_12key_kutoten" />
-        <Key android:codes="-216" android:keyIcon="@drawable/key_12key_enter" android:iconPreview="@drawable/key_12key_enter_b" 
-             android:keyEdgeFlags="right"/>
+        <Key android:codes="-211" android:keyIcon="@drawable/key_12key_ten" android:iconPreview="@drawable/key_12key_ten_b" />
+        <Key android:codes="-216" android:keyIcon="@drawable/key_12key_enter_jp" android:iconPreview="@drawable/key_12key_enter_jp_b" 
+             android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
     </Row>
 </Keyboard>
diff --git a/res/xml/keyboard_12keyjp_input.xml b/res/xml/keyboard_12keyjp_input.xml
index 1dc1202..fa86cd5 100644
--- a/res/xml/keyboard_12keyjp_input.xml
+++ b/res/xml/keyboard_12keyjp_input.xml
@@ -16,44 +16,45 @@
 -->
 <Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
     android:keyWidth="20%p"
-    android:horizontalGap="0px"
-    android:verticalGap="0px"
+    android:horizontalGap="0dip"
+    android:verticalGap="0dip"
     android:keyHeight="@dimen/key_height"
     >
   
     <Row>
         <Key android:codes="-219" android:keyIcon="@drawable/key_12key_reverse" android:iconPreview="@drawable/key_12key_reverse_b"
-             android:keyEdgeFlags="left"/>
-        <Key android:codes="-201" android:keyIcon="@drawable/key_12key_hiragana1" android:iconPreview="@drawable/key_12key_hiragana1_b"/>
+             android:keyEdgeFlags="left" android:keyWidth="18%"/>
+        <Key android:codes="-201" android:keyIcon="@drawable/key_12key_hiragana1" android:iconPreview="@drawable/key_12key_hiragana1_b" android:horizontalGap="2%"/>
         <Key android:codes="-202" android:keyIcon="@drawable/key_12key_hiragana2" android:iconPreview="@drawable/key_12key_hiragana2_b"/>
         <Key android:codes="-203" android:keyIcon="@drawable/key_12key_hiragana3" android:iconPreview="@drawable/key_12key_hiragana3_b"/>
         <Key android:codes="-214" android:keyIcon="@drawable/key_12key_del" android:iconPreview="@drawable/key_12key_del_b"
-             android:isRepeatable="true" android:keyEdgeFlags="right"/>
+             android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
     </Row>
     
     <Row>
-        <Key android:codes="-218" android:keyLabel="@string/key_left_arrow" android:isRepeatable="true" android:keyEdgeFlags="left"/>
-        <Key android:codes="-204" android:keyIcon="@drawable/key_12key_hiragana4" android:iconPreview="@drawable/key_12key_hiragana4_b"/>
+        <Key android:codes="-218" android:keyIcon="@drawable/key_12key_left" android:iconPreview="@drawable/key_12key_left_b" android:isRepeatable="true" android:keyEdgeFlags="left" android:keyWidth="18%"/>
+        <Key android:codes="-204" android:keyIcon="@drawable/key_12key_hiragana4" android:iconPreview="@drawable/key_12key_hiragana4_b" android:horizontalGap="2%"/>
         <Key android:codes="-205" android:keyIcon="@drawable/key_12key_hiragana5" android:iconPreview="@drawable/key_12key_hiragana5_b"/>
         <Key android:codes="-206" android:keyIcon="@drawable/key_12key_hiragana6" android:iconPreview="@drawable/key_12key_hiragana6_b"/>
-        <Key android:codes="-217" android:keyLabel="@string/key_right_arrow" android:isRepeatable="true" android:keyEdgeFlags="right"/>
+        <Key android:codes="-217" android:keyIcon="@drawable/key_12key_right" android:iconPreview="@drawable/key_12key_right_b" android:isRepeatable="true" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
     </Row>
     
     <Row>
-        <Key android:codes="-305" android:keyIcon="@drawable/key_12key_eisukana" android:iconPreview="@drawable/key_12key_eisukana_b"/>
-        <Key android:codes="-207" android:keyIcon="@drawable/key_12key_hiragana7" android:iconPreview="@drawable/key_12key_hiragana7_b"/>
+        <Key android:codes="-305" android:keyIcon="@drawable/key_12key_eisukana" android:iconPreview="@drawable/key_12key_eisukana_b" android:keyWidth="18%"/>
+        <Key android:codes="-207" android:keyIcon="@drawable/key_12key_hiragana7" android:iconPreview="@drawable/key_12key_hiragana7_b" android:horizontalGap="2%"/>
         <Key android:codes="-208" android:keyIcon="@drawable/key_12key_hiragana8" android:iconPreview="@drawable/key_12key_hiragana8_b"/>
         <Key android:codes="-209" android:keyIcon="@drawable/key_12key_hiragana9" android:iconPreview="@drawable/key_12key_hiragana9_b"/>
-        <Key android:codes="-215" android:keyLabel="@string/key_convert" android:keyEdgeFlags="right"/>
+        <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space_jp" android:iconPreview="@drawable/key_12key_space_jp_b" android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
     </Row>
     
     <Row android:rowEdgeFlags="bottom">
-        <Key android:codes="-230" android:keyLabel="@string/key_change_mode" android:popupKeyboard="@xml/keyboard_switch_key"
-             android:keyEdgeFlags="left"/>
-        <Key android:codes="-213" android:keyIcon="@drawable/key_12key_dakuten" android:iconPreview="@drawable/key_12key_dakuten_b"  />
+        <Key android:codes="-230" android:keyIcon="@drawable/key_12key_mode_hira" android:iconPreview="@drawable/key_mode_change_b"
+             android:popupKeyboard="@xml/keyboard_switch_key_jp"
+             android:keyEdgeFlags="left" android:keyWidth="18%"/>
+        <Key android:codes="-213" android:keyIcon="@drawable/key_12key_dakuten" android:iconPreview="@drawable/key_12key_dakuten_b"   android:horizontalGap="2%"/>
         <Key android:codes="-210" android:keyIcon="@drawable/key_12key_hiragana0" android:iconPreview="@drawable/key_12key_hiragana0_b"/>
-        <Key android:codes="-211" android:keyLabel="@string/key_12key_kutoten" />
-        <Key android:codes="-216" android:keyIcon="@drawable/key_12key_enter" android:iconPreview="@drawable/key_12key_enter_b" 
-             android:keyEdgeFlags="right"/>
+        <Key android:codes="-211" android:keyIcon="@drawable/key_12key_ten" android:iconPreview="@drawable/key_12key_ten_b" />
+        <Key android:codes="-216" android:keyIcon="@drawable/key_12key_enter_jp" android:iconPreview="@drawable/key_12key_enter_jp_b" 
+             android:keyEdgeFlags="right" android:horizontalGap="2%" android:keyWidth="18%"/>
     </Row>
 </Keyboard>
diff --git a/res/xml/keyboard_12keyjp_input_landscape.xml b/res/xml/keyboard_12keyjp_input_landscape.xml
deleted file mode 100644
index 3d9e80f..0000000
--- a/res/xml/keyboard_12keyjp_input_landscape.xml
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2008,2009  OMRON SOFTWARE Co., Ltd.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
-    android:keyWidth="20%p"
-    android:horizontalGap="0px"
-    android:verticalGap="0px"
-    android:keyHeight="@dimen/key_height_landscape"
-    >
-  
-    <Row>
-        <Key android:codes="-219" android:keyIcon="@drawable/key_12key_reverse" android:iconPreview="@drawable/key_12key_reverse_b"
-             android:keyEdgeFlags="left"/>
-        <Key android:codes="-201" android:keyLabel="@string/key_12key_1"/>
-        <Key android:codes="-202" android:keyLabel="@string/key_12key_2"/>
-        <Key android:codes="-203" android:keyLabel="@string/key_12key_3"/>
-        <Key android:codes="-214" android:keyIcon="@drawable/key_12key_del_landscape" android:iconPreview="@drawable/key_12key_del_b_landscape" android:isRepeatable="true"
-	     android:keyEdgeFlags="right"/>
-    </Row>
-    
-    <Row>
-        <Key android:codes="-218" android:keyLabel="@string/key_left_arrow" android:isRepeatable="true" android:keyEdgeFlags="left"/>
-        <Key android:codes="-204" android:keyLabel="@string/key_12key_4"/>
-        <Key android:codes="-205" android:keyLabel="@string/key_12key_5"/>
-        <Key android:codes="-206" android:keyLabel="@string/key_12key_6"/>
-        <Key android:codes="-217" android:keyLabel="@string/key_right_arrow" android:isRepeatable="true" android:keyEdgeFlags="right"/>
-    </Row>
-    
-    <Row>
-        <Key android:codes="-305" android:keyLabel="@string/key_12key_eisuu_kana" android:keyEdgeFlags="left"/>
-        <Key android:codes="-207" android:keyLabel="@string/key_12key_7"/>
-        <Key android:codes="-208" android:keyLabel="@string/key_12key_8"/>
-        <Key android:codes="-209" android:keyLabel="@string/key_12key_9"/>
-        <Key android:codes="-215" android:keyLabel="@string/key_convert" android:keyEdgeFlags="right"/>
-    </Row>
-    
-    <Row android:rowEdgeFlags="bottom">
-        <Key android:codes="-230" android:keyLabel="@string/key_change_mode"
-	     android:popupKeyboard="@xml/keyboard_switch_key" android:keyEdgeFlags="left"/>
-        <Key android:codes="-213" android:keyLabel="@string/key_12key_A"  />
-        <Key android:codes="-210" android:keyLabel="@string/key_12key_0"/>
-        <Key android:codes="-211" android:keyLabel="@string/key_12key_kutoten" />
-        <Key android:codes="-216" android:keyIcon="@drawable/key_12key_enter" android:iconPreview="@drawable/key_12key_enter_b" 
-             android:keyEdgeFlags="right"/>
-    </Row>
-</Keyboard>
diff --git a/res/xml/keyboard_12keyjp_landscape.xml b/res/xml/keyboard_12keyjp_landscape.xml
deleted file mode 100644
index 816fc05..0000000
--- a/res/xml/keyboard_12keyjp_landscape.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2008,2009  OMRON SOFTWARE Co., Ltd.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
-    android:keyWidth="20%p"
-    android:horizontalGap="0px"
-    android:verticalGap="0px"
-    android:keyHeight="@dimen/key_height_landscape"
-    >
-  
-    <Row>
-        <Key android:codes="-219" android:keyIcon="@drawable/key_12key_reverse" android:iconPreview="@drawable/key_12key_reverse_b"
-             android:keyEdgeFlags="left"/>
-        <Key android:codes="-201" android:keyLabel="@string/key_12key_1"/>
-        <Key android:codes="-202" android:keyLabel="@string/key_12key_2"/>
-        <Key android:codes="-203" android:keyLabel="@string/key_12key_3"/>
-        <Key android:codes="-214" android:keyIcon="@drawable/key_12key_del_landscape" android:iconPreview="@drawable/key_12key_del_b_landscape" android:isRepeatable="true"
-	     android:keyEdgeFlags="right"/>
-    </Row>
-    
-    <Row>
-        <Key android:codes="-218" android:keyLabel="@string/key_left_arrow" android:isRepeatable="true" android:keyEdgeFlags="left"/>
-        <Key android:codes="-204" android:keyLabel="@string/key_12key_4"/>
-        <Key android:codes="-205" android:keyLabel="@string/key_12key_5"/>
-        <Key android:codes="-206" android:keyLabel="@string/key_12key_6"/>
-        <Key android:codes="-217" android:keyLabel="@string/key_right_arrow" android:isRepeatable="true" android:keyEdgeFlags="right"/>
-    </Row>
-    
-    <Row>
-        <Key android:codes="-222" android:keyIcon="@drawable/key_12key_pict_sym" android:iconPreview="@drawable/key_12key_pict_sym_b"
-	     android:keyEdgeFlags="left"/>
-        <Key android:codes="-207" android:keyLabel="@string/key_12key_7"/>
-        <Key android:codes="-208" android:keyLabel="@string/key_12key_8"/>
-        <Key android:codes="-209" android:keyLabel="@string/key_12key_9"/>
-        <Key android:codes="-215" android:keyIcon="@drawable/key_12key_space" android:iconPreview="@drawable/key_12key_space_b" android:isRepeatable="true" android:keyEdgeFlags="right" />
-    </Row>
-    
-    <Row android:rowEdgeFlags="bottom">
-        <Key android:codes="-230" android:keyLabel="@string/key_change_mode"
-	     android:popupKeyboard="@xml/keyboard_switch_key" android:keyEdgeFlags="left"/>
-        <Key android:codes="-213" android:keyLabel="@string/key_12key_A"  />
-        <Key android:codes="-210" android:keyLabel="@string/key_12key_0"/>
-        <Key android:codes="-211" android:keyLabel="@string/key_12key_kutoten" />
-        <Key android:codes="-216" android:keyIcon="@drawable/key_12key_enter" android:iconPreview="@drawable/key_12key_enter_b" 
-             android:keyEdgeFlags="right"/>
-    </Row>
-</Keyboard>
diff --git a/res/xml/keyboard_qwerty_full_alphabet_landscape.xml b/res/xml/keyboard_qwerty_full_alphabet_landscape.xml
deleted file mode 100644
index 841b067..0000000
--- a/res/xml/keyboard_qwerty_full_alphabet_landscape.xml
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2008,2009  OMRON SOFTWARE Co., Ltd.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
-	  android:keyWidth="10%p"
-	  android:horizontalGap="0px"
-	  android:verticalGap="0px"
-	  android:keyHeight="@dimen/key_height_landscape"
-	  >
-  
-  <Row>
-    <Key android:codes="65361" android:keyLabel="q" android:keyEdgeFlags="left"/>
-    <Key android:codes="65367" android:keyLabel="w"/>
-    <Key android:codes="65349" android:keyLabel="e"/>
-    <Key android:codes="65362" android:keyLabel="r"/>
-    <Key android:codes="65364" android:keyLabel="t"/>
-    <Key android:codes="65369" android:keyLabel="y"/>
-    <Key android:codes="65365" android:keyLabel="u"/>
-    <Key android:codes="65353" android:keyLabel="i"/>
-    <Key android:codes="65359" android:keyLabel="o"/>
-    <Key android:codes="65360" android:keyLabel="p" android:keyEdgeFlags="right"/>
-  </Row>
-  
-  <Row>
-    <Key android:codes="65345" android:keyLabel="a" android:keyEdgeFlags="left"/>
-    <Key android:codes="65363" android:keyLabel="s"/>
-    <Key android:codes="65348" android:keyLabel="d"/>
-    <Key android:codes="65350" android:keyLabel="f"/>
-    <Key android:codes="65351" android:keyLabel="g"/>
-    <Key android:codes="65352" android:keyLabel="h"/>
-    <Key android:codes="65354" android:keyLabel="j"/>
-    <Key android:codes="65355" android:keyLabel="k"/>
-    <Key android:codes="65356" android:keyLabel="l"/>
-    <Key android:codes="65311" android:keyLabel="@string/key_qwerty_full_question"
-         android:keyEdgeFlags="right"/>
-  </Row>
-  
-  <Row>
-    <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift" android:iconPreview="@drawable/key_qwerty_shift_b" android:keyWidth="15%p"
-         android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left"/>
-    <Key android:codes="65370" android:keyLabel="z"/>
-    <Key android:codes="65368" android:keyLabel="x"/>
-    <Key android:codes="65347" android:keyLabel="c"/>
-    <Key android:codes="65366" android:keyLabel="v"/>
-    <Key android:codes="65346" android:keyLabel="b"/>
-    <Key android:codes="65358" android:keyLabel="n"/>
-    <Key android:codes="65357" android:keyLabel="m"/>
-    <Key android:codes="-100" android:keyIcon="@drawable/key_qwerty_del_landscape" android:iconPreview="@drawable/key_qwerty_del_b_landscape" android:keyWidth="15%p" 
-         android:keyEdgeFlags="right" android:isRepeatable="true"/>
-  </Row>
-  
-  <Row android:rowEdgeFlags="bottom">
-    <Key android:codes="-230" android:keyLabel="@string/key_change_mode"
-	 android:popupKeyboard="@xml/keyboard_switch_key_qwerty"
-         android:keyWidth="15%p" android:keyEdgeFlags="left"/>
-    <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_qwerty_pict_sym_b"
-         android:keyWidth="15%p"/>
-    <Key android:codes="12288" android:keyIcon="@drawable/key_qwerty_space" android:iconPreview="@drawable/key_qwerty_space_b" 
-         android:keyWidth="30%p" android:isRepeatable="true"/>
-    <Key android:codes="65292" android:keyLabel="@string/key_qwerty_full_comma"
-         android:keyWidth="12.5%p"/>
-    <Key android:codes="65294" android:keyLabel="@string/key_qwerty_full_period"
-         android:keyWidth="12.5%p"/>
-    <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_enter" android:iconPreview="@drawable/key_qwerty_enter_b" 
-         android:keyWidth="15%p" android:keyEdgeFlags="right"/>
-  </Row>
-</Keyboard>
diff --git a/res/xml/keyboard_qwerty_full_alphabet_shift_landscape.xml b/res/xml/keyboard_qwerty_full_alphabet_shift_landscape.xml
deleted file mode 100644
index f8178eb..0000000
--- a/res/xml/keyboard_qwerty_full_alphabet_shift_landscape.xml
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2008,2009  OMRON SOFTWARE Co., Ltd.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
-	  android:keyWidth="10%p"
-	  android:horizontalGap="0px"
-	  android:verticalGap="0px"
-	  android:keyHeight="@dimen/key_height_landscape"
-	  >
-  
-  <Row>
-    <Key android:codes="65329" android:keyLabel="Q" android:keyEdgeFlags="left"/>
-    <Key android:codes="65335" android:keyLabel="W"/>
-    <Key android:codes="65317" android:keyLabel="E"/>
-    <Key android:codes="65330" android:keyLabel="R"/>
-    <Key android:codes="65332" android:keyLabel="T"/>
-    <Key android:codes="65337" android:keyLabel="Y"/>
-    <Key android:codes="65333" android:keyLabel="U"/>
-    <Key android:codes="65321" android:keyLabel="I"/>
-    <Key android:codes="65327" android:keyLabel="O"/>
-    <Key android:codes="65328" android:keyLabel="P" android:keyEdgeFlags="right"/>
-  </Row>
-  
-  <Row>
-    <Key android:codes="65313" android:keyLabel="A" android:keyEdgeFlags="left"/>
-    <Key android:codes="65331" android:keyLabel="S"/>
-    <Key android:codes="65316" android:keyLabel="D"/>
-    <Key android:codes="65318" android:keyLabel="F"/>
-    <Key android:codes="65319" android:keyLabel="G"/>
-    <Key android:codes="65320" android:keyLabel="H"/>
-    <Key android:codes="65322" android:keyLabel="J"/>
-    <Key android:codes="65323" android:keyLabel="K"/>
-    <Key android:codes="65324" android:keyLabel="L"/>
-    <Key android:codes="65311" android:keyLabel="@string/key_qwerty_full_question"
-         android:keyEdgeFlags="right"/>
-  </Row>
-  
-  <Row>
-    <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift" android:iconPreview="@drawable/key_qwerty_shift_b" android:keyWidth="15%p"
-         android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left"/>
-    <Key android:codes="65338" android:keyLabel="Z"/>
-    <Key android:codes="65336" android:keyLabel="X"/>
-    <Key android:codes="65315" android:keyLabel="C"/>
-    <Key android:codes="65334" android:keyLabel="V"/>
-    <Key android:codes="65314" android:keyLabel="B"/>
-    <Key android:codes="65326" android:keyLabel="N"/>
-    <Key android:codes="65325" android:keyLabel="M"/>
-    <Key android:codes="-100" android:keyIcon="@drawable/key_qwerty_del_landscape" android:iconPreview="@drawable/key_qwerty_del_b_landscape" android:keyWidth="15%p" 
-         android:keyEdgeFlags="right" android:isRepeatable="true"/>
-  </Row>
-  
-  <Row android:rowEdgeFlags="bottom">
-    <Key android:codes="-230" android:keyLabel="@string/key_change_mode"
-	 android:popupKeyboard="@xml/keyboard_switch_key_qwerty"
-         android:keyWidth="15%p" android:keyEdgeFlags="left"/>
-    <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_qwerty_pict_sym_b"
-         android:keyWidth="15%p"/>
-    <Key android:codes="12288"  android:keyIcon="@drawable/key_qwerty_space" android:iconPreview="@drawable/key_qwerty_space_b" 
-         android:keyWidth="30%p" android:isRepeatable="true"/>
-    <Key android:codes="65292" android:keyLabel="@string/key_qwerty_full_comma"
-         android:keyWidth="12.5%p"/>
-    <Key android:codes="65294" android:keyLabel="@string/key_qwerty_full_period"
-         android:keyWidth="12.5%p"/>
-    <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_enter" android:iconPreview="@drawable/key_qwerty_enter_b" 
-         android:keyWidth="15%p" android:keyEdgeFlags="right"/>
-  </Row>
-</Keyboard>
diff --git a/res/xml/keyboard_qwerty_full_katakana_landscape.xml b/res/xml/keyboard_qwerty_full_katakana_landscape.xml
deleted file mode 100644
index b68e747..0000000
--- a/res/xml/keyboard_qwerty_full_katakana_landscape.xml
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2008,2009  OMRON SOFTWARE Co., Ltd.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
-	  android:keyWidth="10%p"
-	  android:horizontalGap="0px"
-	  android:verticalGap="0px"
-	  android:keyHeight="@dimen/key_height_landscape"
-	  >
-  
-  <Row>
-    <Key android:codes="113" android:keyLabel="q" android:keyEdgeFlags="left"/>
-    <Key android:codes="119" android:keyLabel="w"/>
-    <Key android:codes="101" android:keyLabel="e"/>
-    <Key android:codes="114" android:keyLabel="r"/>
-    <Key android:codes="116" android:keyLabel="t"/>
-    <Key android:codes="121" android:keyLabel="y"/>
-    <Key android:codes="117" android:keyLabel="u"/>
-    <Key android:codes="105" android:keyLabel="i"/>
-    <Key android:codes="111" android:keyLabel="o"/>
-    <Key android:codes="112" android:keyLabel="p" android:keyEdgeFlags="right"/>
-  </Row>
-  
-  <Row>
-    <Key android:codes="97"  android:keyLabel="a" android:keyEdgeFlags="left"/>
-    <Key android:codes="115" android:keyLabel="s"/>
-    <Key android:codes="100" android:keyLabel="d"/>
-    <Key android:codes="102" android:keyLabel="f"/>
-    <Key android:codes="103" android:keyLabel="g"/>
-    <Key android:codes="104" android:keyLabel="h"/>
-    <Key android:codes="106" android:keyLabel="j"/>
-    <Key android:codes="107" android:keyLabel="k"/>
-    <Key android:codes="108" android:keyLabel="l"/>
-    <Key android:codes="12540" android:keyLabel="@string/key_qwerty_tyouon"
-         android:keyEdgeFlags="right"/>
-  </Row>
-  
-  <Row>
-    <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift" android:iconPreview="@drawable/key_qwerty_shift_b" android:keyWidth="15%p"
-         android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left"/>
-    <Key android:codes="122" android:keyLabel="z"/>
-    <Key android:codes="120" android:keyLabel="x"/>
-    <Key android:codes="99" android:keyLabel="c"/>
-    <Key android:codes="118" android:keyLabel="v"/>
-    <Key android:codes="98" android:keyLabel="b"/>
-    <Key android:codes="110" android:keyLabel="n"/>
-    <Key android:codes="109" android:keyLabel="m"/>
-    <Key android:codes="-100" android:keyIcon="@drawable/key_qwerty_del_landscape" android:iconPreview="@drawable/key_qwerty_del_b_landscape" android:keyWidth="15%p" 
-         android:keyEdgeFlags="right" android:isRepeatable="true"/>
-  </Row>
- 
-  <Row android:rowEdgeFlags="bottom">
-    <Key android:codes="-230" android:keyLabel="@string/key_change_mode"
-	 android:popupKeyboard="@xml/keyboard_switch_key_qwerty"
-         android:keyWidth="15%p" android:keyEdgeFlags="left"/>
-    <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_qwerty_pict_sym_b"
-         android:keyWidth="15%p"/>
-    <Key android:codes="12288" android:keyIcon="@drawable/key_qwerty_space" android:iconPreview="@drawable/key_qwerty_space_b" 
-         android:keyWidth="30%p" android:isRepeatable="true"/>
-    <Key android:codes="12289" android:keyLabel="@string/key_qwerty_full_touten"
-         android:keyWidth="12.5%p"/>
-    <Key android:codes="12290" android:keyLabel="@string/key_qwerty_full_kuten"
-         android:keyWidth="12.5%p"/>
-    <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_enter" android:iconPreview="@drawable/key_qwerty_enter_b" 
-         android:keyWidth="15%p" android:keyEdgeFlags="right"/>
-  </Row>
-</Keyboard>
diff --git a/res/xml/keyboard_qwerty_full_symbols_landscape.xml b/res/xml/keyboard_qwerty_full_symbols_landscape.xml
deleted file mode 100644
index 0091d04..0000000
--- a/res/xml/keyboard_qwerty_full_symbols_landscape.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2008,2009  OMRON SOFTWARE Co., Ltd.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
-    android:keyWidth="10%p"
-    android:horizontalGap="0px"
-    android:verticalGap="0px"
-    android:keyHeight="@dimen/key_height_landscape"
-    >
-
-    <Row>
-        <Key android:codes="65297" android:keyLabel="1" android:keyEdgeFlags="left"/>
-        <Key android:codes="65298" android:keyLabel="2"/>
-        <Key android:codes="65299" android:keyLabel="3"/>
-        <Key android:codes="65300" android:keyLabel="4"/>
-        <Key android:codes="65301" android:keyLabel="5"/>
-        <Key android:codes="65302" android:keyLabel="6"/>
-        <Key android:codes="65303" android:keyLabel="7"/>
-        <Key android:codes="65304" android:keyLabel="8"/>
-        <Key android:codes="65305" android:keyLabel="9"/>
-        <Key android:codes="65296" android:keyLabel="0" android:keyEdgeFlags="right"/>
-    </Row>
-    
-    <Row>
-        <Key android:codes="65312" android:keyLabel="@string/key_qwerty_full_at_sign" android:keyEdgeFlags="left"/>
-        <Key android:codes="65283" android:keyLabel="@string/key_qwerty_full_number_sign" />
-        <Key android:codes="65285" android:keyLabel="@string/key_qwerty_full_percent_sign" />
-        <Key android:codes="65286" android:keyLabel="@string/key_qwerty_full_ampersand" />
-        <Key android:codes="65290" android:keyLabel="@string/key_qwerty_full_asterrisk" />
-	    <Key android:codes="65291" android:keyLabel="@string/key_qwerty_full_plus_sign" />
-        <Key android:codes="65293" android:keyLabel="@string/key_qwerty_full_minus_sign" />
-        <Key android:codes="65309" android:keyLabel="@string/key_qwerty_full_equal_sign" />
-        <Key android:codes="12300" android:keyLabel="@string/key_qwerty_kagi_kakko_left" />
-        <Key android:codes="12301" android:keyLabel="@string/key_qwerty_kagi_kakko_right"  android:keyEdgeFlags="right"/>
-    </Row>
-    
-    <Row>
-        <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift" android:iconPreview="@drawable/key_qwerty_shift_b" android:keyWidth="15%p"
-             android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left"/>
-        <Key android:codes="65281" android:keyLabel="@string/key_qwerty_full_exclamation_mark"  />
-        <Key android:codes="65288" android:keyLabel="@string/key_qwerty_full_left_parenthesis" />
-        <Key android:codes="65289" android:keyLabel="@string/key_qwerty_full_right_parenthesis" />
-        <Key android:codes="65306" android:keyLabel="@string/key_qwerty_full_colon" />
-        <Key android:codes="65307" android:keyLabel="@string/key_qwerty_full_semicolon" />
-        <Key android:codes="12539" android:keyLabel="@string/key_qwerty_full_middot"  />
-        <Key android:codes="65311" android:keyLabel="@string/key_qwerty_full_question" />
-        <Key android:codes="-100" android:keyIcon="@drawable/key_qwerty_del_landscape" android:iconPreview="@drawable/key_qwerty_del_b_landscape" android:keyWidth="15%p" 
-             android:keyEdgeFlags="right" android:isRepeatable="true"/>
-    </Row>
-    
-    <Row  android:rowEdgeFlags="bottom">
-        <Key android:codes="-230" android:keyLabel="@string/key_change_mode"
-	         android:popupKeyboard="@xml/keyboard_switch_key_qwerty"
-             android:keyWidth="15%p" android:keyEdgeFlags="left" />
-        <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_qwerty_pict_sym_b"
-             android:keyWidth="15%p" />
-        <Key android:codes="12288" android:keyIcon="@drawable/key_qwerty_space" android:iconPreview="@drawable/key_qwerty_space_b" 
-             android:keyWidth="30%p" android:isRepeatable="true"/>
-        <Key android:codes="65292" android:keyLabel="@string/key_qwerty_full_comma"  android:keyWidth="12.5%p" />
-        <Key android:codes="65294" android:keyLabel="@string/key_qwerty_full_period"  android:keyWidth="12.5%p" />
-        <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_enter" android:iconPreview="@drawable/key_qwerty_enter_b" 
-             android:keyWidth="15%p" android:keyEdgeFlags="right"/>
-    </Row>
-</Keyboard>
diff --git a/res/xml/keyboard_qwerty_full_symbols_shift_landscape.xml b/res/xml/keyboard_qwerty_full_symbols_shift_landscape.xml
deleted file mode 100644
index 4a7bed8..0000000
--- a/res/xml/keyboard_qwerty_full_symbols_shift_landscape.xml
+++ /dev/null
@@ -1,79 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2008,2009  OMRON SOFTWARE Co., Ltd.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
-	  android:keyWidth="10%p"
-	  android:horizontalGap="0px"
-	  android:verticalGap="0px"
-	  android:keyHeight="@dimen/key_height_landscape"
-	  >
-  
-  <Row>
-    <Key android:codes="65297" android:keyLabel="1" android:keyEdgeFlags="left"/>
-    <Key android:codes="65298" android:keyLabel="2"/>
-    <Key android:codes="65299" android:keyLabel="3"/>
-    <Key android:codes="65300" android:keyLabel="4"/>
-    <Key android:codes="65301" android:keyLabel="5"/>
-    <Key android:codes="65302" android:keyLabel="6"/>
-    <Key android:codes="65303" android:keyLabel="7"/>
-    <Key android:codes="65304" android:keyLabel="8"/>
-    <Key android:codes="65305" android:keyLabel="9"/>
-    <Key android:codes="65296" android:keyLabel="0" android:keyEdgeFlags="right"/>
-  </Row>
-  
-  <Row>
-    <Key android:codes="65374" android:keyLabel="@string/key_qwerty_full_thilde" android:keyEdgeFlags="left"/>
-    <Key android:codes="65342" android:keyLabel="@string/key_qwerty_full_hat"/>
-    <Key android:codes="65509" android:keyLabel="@string/key_qwerty_full_yen_sign"/>
-    <Key android:codes="65284" android:keyLabel="@string/key_qwerty_full_dollar_sign"/>
-    <Key android:codes="8221" android:keyLabel="@string/key_qwerty_full_double_quotation_sign"/>
-    <Key android:codes="177" android:keyLabel="@string/key_qwerty_full_plus_minus_sign" />
-    <Key android:codes="65343" android:keyLabel="@string/key_qwerty_full_underscore"/>
-    <Key android:codes="65309" android:keyLabel="@string/key_qwerty_full_equal_sign"/>
-    <Key android:codes="65371" android:keyLabel="@string/key_qwerty_full_left_curly_blacket"/>
-    <Key android:codes="65373" android:keyLabel="@string/key_qwerty_full_right_curly_blacket" android:keyEdgeFlags="right"/>
-  </Row>
-    
-  <Row>
-    <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift" android:iconPreview="@drawable/key_qwerty_shift_b" android:keyWidth="15%p"
-         android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left"/>
-    <Key android:codes="65372" android:keyLabel="@string/key_qwerty_full_vertical_bar"/>
-    <Key android:codes="65308" android:keyLabel="@string/key_qwerty_full_less_than_sign"/>
-    <Key android:codes="65310" android:keyLabel="@string/key_qwerty_full_greater_than_sign"/>
-    <Key android:codes="8216" android:keyLabel="@string/key_qwerty_full_left_single_quote"/>
-    <Key android:codes="8217" android:keyLabel="@string/key_qwerty_full_right_single_quote"/>
-    <Key android:codes="65340" android:keyLabel="@string/key_qwerty_full_back_slash" />
-    <Key android:codes="65311" android:keyLabel="@string/key_qwerty_full_question"/>
-    <Key android:codes="-100" android:keyIcon="@drawable/key_qwerty_del_landscape" android:iconPreview="@drawable/key_qwerty_del_b_landscape" android:keyWidth="15%p" 
-	     android:keyEdgeFlags="right" android:isRepeatable="true"/>
-  </Row>
-  
-  <Row android:rowEdgeFlags="bottom">
-    <Key android:codes="-230" android:keyLabel="@string/key_change_mode"
-         android:popupKeyboard="@xml/keyboard_switch_key_qwerty"
-         android:keyWidth="15%p" android:keyEdgeFlags="left" />
-    <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_qwerty_pict_sym_b"
-         android:keyWidth="15%p" />
-    <Key android:codes="12288" android:keyIcon="@drawable/key_qwerty_space" android:iconPreview="@drawable/key_qwerty_space_b" 
-         android:keyWidth="30%p" android:isRepeatable="true"/>
-    <Key android:codes="65292" android:keyLabel="@string/key_qwerty_full_comma"
-         android:keyWidth="12.5%p" />
-    <Key android:codes="65294" android:keyLabel="@string/key_qwerty_full_period"
-         android:keyWidth="12.5%p" />
-    <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_enter" android:iconPreview="@drawable/key_qwerty_enter_b" 
-         android:keyWidth="15%p" android:keyEdgeFlags="right"/>
-  </Row>
-</Keyboard>
diff --git a/res/xml/keyboard_qwerty_half_alphabet_landscape.xml b/res/xml/keyboard_qwerty_half_alphabet_landscape.xml
deleted file mode 100644
index c178bcc..0000000
--- a/res/xml/keyboard_qwerty_half_alphabet_landscape.xml
+++ /dev/null
@@ -1,79 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2008,2009  OMRON SOFTWARE Co., Ltd.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
-	  android:keyWidth="10%p"
-	  android:horizontalGap="0px"
-	  android:verticalGap="0px"
-	  android:keyHeight="@dimen/key_height_landscape"
-	  >
-  
-  <Row>
-    <Key android:codes="113" android:keyLabel="q" android:keyEdgeFlags="left"/>
-    <Key android:codes="119" android:keyLabel="w"/>
-    <Key android:codes="101" android:keyLabel="e"/>
-    <Key android:codes="114" android:keyLabel="r"/>
-    <Key android:codes="116" android:keyLabel="t"/>
-    <Key android:codes="121" android:keyLabel="y"/>
-    <Key android:codes="117" android:keyLabel="u"/>
-    <Key android:codes="105" android:keyLabel="i"/>
-    <Key android:codes="111" android:keyLabel="o"/>
-    <Key android:codes="112" android:keyLabel="p" android:keyEdgeFlags="right"/>
-  </Row>
-  
-  <Row>
-    <Key android:codes="97"  android:keyLabel="a" android:keyEdgeFlags="left"/>
-    <Key android:codes="115" android:keyLabel="s"/>
-    <Key android:codes="100" android:keyLabel="d"/>
-    <Key android:codes="102" android:keyLabel="f"/>
-    <Key android:codes="103" android:keyLabel="g"/>
-    <Key android:codes="104" android:keyLabel="h"/>
-    <Key android:codes="106" android:keyLabel="j"/>
-    <Key android:codes="107" android:keyLabel="k"/>
-    <Key android:codes="108" android:keyLabel="l"/>
-    <Key android:codes="63"  android:keyLabel="\?" android:keyEdgeFlags="right"/>
-  </Row>
-  
-  <Row>
-    <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift" android:iconPreview="@drawable/key_qwerty_shift_b" android:keyWidth="15%p"
-         android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left"/>
-    <Key android:codes="122" android:keyLabel="z"/>
-    <Key android:codes="120" android:keyLabel="x"/>
-    <Key android:codes="99" android:keyLabel="c"/>
-    <Key android:codes="118" android:keyLabel="v"/>
-    <Key android:codes="98" android:keyLabel="b"/>
-    <Key android:codes="110" android:keyLabel="n"/>
-    <Key android:codes="109" android:keyLabel="m"/>
-    <Key android:codes="-100" android:keyIcon="@drawable/key_qwerty_del_landscape" android:iconPreview="@drawable/key_qwerty_del_b_landscape" android:keyWidth="15%p" 
-         android:keyEdgeFlags="right" android:isRepeatable="true"/>
-  </Row>
-  
-  <Row android:rowEdgeFlags="bottom">
-    <Key android:codes="-230" android:keyLabel="@string/key_change_mode"
-	     android:popupKeyboard="@xml/keyboard_switch_key_qwerty"
-         android:keyWidth="15%p" android:keyEdgeFlags="left"/>
-    <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_qwerty_pict_sym_b"
-         android:keyWidth="15%p"/>
-    <Key android:codes="32" android:keyIcon="@drawable/key_qwerty_space" android:iconPreview="@drawable/key_qwerty_space_b" 
-         android:keyWidth="30%p" android:isRepeatable="true"/>
-    <Key android:codes="44" android:keyLabel=","
-         android:keyWidth="12.5%p"/>
-    <Key android:codes="46" android:keyLabel="."
-         android:keyWidth="12.5%p"/>
-    <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_enter" android:iconPreview="@drawable/key_qwerty_enter_b" 
-         android:keyWidth="15%p" android:keyEdgeFlags="right"/>
-  </Row>
-</Keyboard>
diff --git a/res/xml/keyboard_qwerty_half_katakana_landscape.xml b/res/xml/keyboard_qwerty_half_katakana_landscape.xml
deleted file mode 100644
index 8050c06..0000000
--- a/res/xml/keyboard_qwerty_half_katakana_landscape.xml
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2008,2009  OMRON SOFTWARE Co., Ltd.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
-	  android:keyWidth="10%p"
-	  android:horizontalGap="0px"
-	  android:verticalGap="0px"
-	  android:keyHeight="@dimen/key_height_landscape"
-	  >
-  
-  <Row>
-    <Key android:codes="113" android:keyLabel="q" android:keyEdgeFlags="left"/>
-    <Key android:codes="119" android:keyLabel="w"/>
-    <Key android:codes="101" android:keyLabel="e"/>
-    <Key android:codes="114" android:keyLabel="r"/>
-    <Key android:codes="116" android:keyLabel="t"/>
-    <Key android:codes="121" android:keyLabel="y"/>
-    <Key android:codes="117" android:keyLabel="u"/>
-    <Key android:codes="105" android:keyLabel="i"/>
-    <Key android:codes="111" android:keyLabel="o"/>
-    <Key android:codes="112" android:keyLabel="p" android:keyEdgeFlags="right"/>
-  </Row>
-  
-  <Row>
-    <Key android:codes="97"  android:keyLabel="a" android:keyEdgeFlags="left"/>
-    <Key android:codes="115" android:keyLabel="s"/>
-    <Key android:codes="100" android:keyLabel="d"/>
-    <Key android:codes="102" android:keyLabel="f"/>
-    <Key android:codes="103" android:keyLabel="g"/>
-    <Key android:codes="104" android:keyLabel="h"/>
-    <Key android:codes="106" android:keyLabel="j"/>
-    <Key android:codes="107" android:keyLabel="k"/>
-    <Key android:codes="108" android:keyLabel="l"/>
-    <Key android:codes="65392" android:keyLabel="@string/key_qwerty_half_tyouon"
-         android:keyEdgeFlags="right"/>
-  </Row>
-  
-  <Row>
-    <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift" android:iconPreview="@drawable/key_qwerty_shift_b" android:keyWidth="15%p"
-         android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left"/>
-    <Key android:codes="122" android:keyLabel="z"/>
-    <Key android:codes="120" android:keyLabel="x"/>
-    <Key android:codes="99" android:keyLabel="c"/>
-    <Key android:codes="118" android:keyLabel="v"/>
-    <Key android:codes="98" android:keyLabel="b"/>
-    <Key android:codes="110" android:keyLabel="n"/>
-    <Key android:codes="109" android:keyLabel="m"/>
-    <Key android:codes="-100" android:keyIcon="@drawable/key_qwerty_del_landscape" android:iconPreview="@drawable/key_qwerty_del_b_landscape" android:keyWidth="15%p" 
-         android:keyEdgeFlags="right" android:isRepeatable="true"/>
-  </Row>
-  
-  <Row android:rowEdgeFlags="bottom">
-    <Key android:codes="-230" android:keyLabel="@string/key_change_mode"
-	 android:popupKeyboard="@xml/keyboard_switch_key_qwerty"
-         android:keyWidth="15%p" android:keyEdgeFlags="left"/>
-    <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_qwerty_pict_sym_b"
-         android:keyWidth="15%p"/>
-    <Key android:codes="32" android:keyIcon="@drawable/key_qwerty_space" android:iconPreview="@drawable/key_qwerty_space_b" 
-         android:keyWidth="30%p" android:isRepeatable="true"/>
-    <Key android:codes="65380" android:keyLabel="@string/key_qwerty_half_comma"
-         android:keyWidth="12.5%p"/>
-    <Key android:codes="65377" android:keyLabel="@string/key_qwerty_half_period"
-         android:keyWidth="12.5%p"/>
-    <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_enter" android:iconPreview="@drawable/key_qwerty_enter_b" 
-         android:keyWidth="15%p" android:keyEdgeFlags="right"/>
-  </Row>
-</Keyboard>
diff --git a/res/xml/keyboard_qwerty_half_symbols_landscape.xml b/res/xml/keyboard_qwerty_half_symbols_landscape.xml
deleted file mode 100644
index f02a85d..0000000
--- a/res/xml/keyboard_qwerty_half_symbols_landscape.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2008,2009  OMRON SOFTWARE Co., Ltd.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
-    android:keyWidth="10%p"
-    android:horizontalGap="0px"
-    android:verticalGap="0px"
-    android:keyHeight="@dimen/key_height_landscape"
-    >
-
-    <Row>
-        <Key android:codes="49" android:keyLabel="1" android:keyEdgeFlags="left"/>
-        <Key android:codes="50" android:keyLabel="2"/>
-        <Key android:codes="51" android:keyLabel="3"/>
-        <Key android:codes="52" android:keyLabel="4"/>
-        <Key android:codes="53" android:keyLabel="5"/>
-        <Key android:codes="54" android:keyLabel="6"/>
-        <Key android:codes="55" android:keyLabel="7"/>
-        <Key android:codes="56" android:keyLabel="8"/>
-        <Key android:codes="57" android:keyLabel="9"/>
-        <Key android:codes="48" android:keyLabel="0" android:keyEdgeFlags="right"/>
-    </Row>
-    
-    <Row>
-        <Key android:codes="64" android:keyLabel="\@" android:keyEdgeFlags="left"/>
-        <Key android:codes="35" android:keyLabel="\#"/>
-        <Key android:codes="37" android:keyLabel="%"/>
-        <Key android:codes="38" android:keyLabel="&amp;"/>
-        <Key android:codes="42" android:keyLabel="*"/>
-	<Key android:codes="43" android:keyLabel="+"/>
-        <Key android:codes="45" android:keyLabel="-"/>
-        <Key android:codes="61" android:keyLabel="="/>
-        <Key android:codes="91" android:keyLabel="["/>
-        <Key android:codes="93" android:keyLabel="]" android:keyEdgeFlags="right"/>
-    </Row>
-    
-    <Row>
-        <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift" android:iconPreview="@drawable/key_qwerty_shift_b" android:keyWidth="15%p"
-             android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left"/>
-        <Key android:codes="33" android:keyLabel="!" />
-        <Key android:codes="40" android:keyLabel="("/>
-        <Key android:codes="41" android:keyLabel=")"/>
-        <Key android:codes="58" android:keyLabel=":"/>
-        <Key android:codes="59" android:keyLabel=";"/>
-        <Key android:codes="47" android:keyLabel="/" />
-        <Key android:codes="63" android:keyLabel="\?"/>
-        <Key android:codes="-100" android:keyIcon="@drawable/key_qwerty_del_landscape" android:iconPreview="@drawable/key_qwerty_del_b_landscape" android:keyWidth="15%p" 
-             android:keyEdgeFlags="right" android:isRepeatable="true"/>
-    </Row>
-    
-    <Row  android:rowEdgeFlags="bottom">
-        <Key android:codes="-230" android:keyLabel="@string/key_change_mode"
-	         android:popupKeyboard="@xml/keyboard_switch_key_qwerty"
-             android:keyWidth="15%p" android:keyEdgeFlags="left" />
-        <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_qwerty_pict_sym_b"
-             android:keyWidth="15%p" />
-        <Key android:codes="32" android:keyIcon="@drawable/key_qwerty_space" android:iconPreview="@drawable/key_qwerty_space_b" 
-             android:keyWidth="30%p" android:isRepeatable="true"/>
-        <Key android:codes="44" android:keyLabel="," android:keyWidth="12.5%p" />
-        <Key android:codes="46" android:keyLabel="." android:keyWidth="12.5%p" />
-        <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_enter" android:iconPreview="@drawable/key_qwerty_enter_b" 
-             android:keyWidth="15%p" android:keyEdgeFlags="right"/>
-    </Row>
-</Keyboard>
diff --git a/res/xml/keyboard_qwerty_half_symbols_shift_landscape.xml b/res/xml/keyboard_qwerty_half_symbols_shift_landscape.xml
deleted file mode 100644
index d9e1f36..0000000
--- a/res/xml/keyboard_qwerty_half_symbols_shift_landscape.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2008,2009  OMRON SOFTWARE Co., Ltd.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
-	  android:keyWidth="10%p"
-	  android:horizontalGap="0px"
-	  android:verticalGap="0px"
-	  android:keyHeight="@dimen/key_height_landscape"
-	  >
-  
-  <Row>
-    <Key android:codes="49" android:keyLabel="1" android:keyEdgeFlags="left"/>
-    <Key android:codes="50" android:keyLabel="2"/>
-    <Key android:codes="51" android:keyLabel="3"/>
-    <Key android:codes="52" android:keyLabel="4"/>
-    <Key android:codes="53" android:keyLabel="5"/>
-    <Key android:codes="54" android:keyLabel="6"/>
-    <Key android:codes="55" android:keyLabel="7"/>
-    <Key android:codes="56" android:keyLabel="8"/>
-    <Key android:codes="57" android:keyLabel="9"/>
-    <Key android:codes="48" android:keyLabel="0" android:keyEdgeFlags="right"/>
-  </Row>
-  
-  <Row>
-    <Key android:codes="126" android:keyLabel="~" android:keyEdgeFlags="left"/>
-    <Key android:codes="94" android:keyLabel="^"/>
-    <Key android:codes="165" android:keyLabel="¥"/>
-    <Key android:codes="36" android:keyLabel="$"/>
-    <Key android:codes="34" android:keyLabel="&quot;"/>
-    <Key android:codes="43" android:keyLabel="+" />
-    <Key android:codes="95" android:keyLabel="_"/>
-    <Key android:codes="61" android:keyLabel="="/>
-    <Key android:codes="123" android:keyLabel="{"/>
-    <Key android:codes="125" android:keyLabel="}" android:keyEdgeFlags="right"/>
-  </Row>
-    
-  <Row>
-    <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift" android:iconPreview="@drawable/key_qwerty_shift_b" android:keyWidth="15%p"
-         android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left"/>
-    <Key android:codes="124" android:keyLabel="|"/>
-    <Key android:codes="60" android:keyLabel="&lt;"/>
-    <Key android:codes="62" android:keyLabel="&gt;"/>
-    <Key android:codes="96" android:keyLabel="`"/>
-    <Key android:codes="180" android:keyLabel="´"/>
-    <Key android:codes="92" android:keyLabel="\\" />
-    <Key android:codes="63" android:keyLabel="\?"/>
-    <Key android:codes="-100" android:keyIcon="@drawable/key_qwerty_del_landscape" android:iconPreview="@drawable/key_qwerty_del_b_landscape" android:keyWidth="15%p" 
-	     android:keyEdgeFlags="right" android:isRepeatable="true"/>
-  </Row>
-  
-  <Row android:rowEdgeFlags="bottom">
-    <Key android:codes="-230" android:keyLabel="@string/key_change_mode"
-         android:popupKeyboard="@xml/keyboard_switch_key_qwerty"
-         android:keyWidth="15%p" android:keyEdgeFlags="left" />
-    <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_qwerty_pict_sym_b"
-         android:keyWidth="15%p" />
-    <Key android:codes="32" android:keyIcon="@drawable/key_qwerty_space" android:iconPreview="@drawable/key_qwerty_space_b" 
-         android:keyWidth="30%p" android:isRepeatable="true"/>
-    <Key android:codes="44" android:keyLabel="," android:keyWidth="12.5%p" />
-    <Key android:codes="46" android:keyLabel="." android:keyWidth="12.5%p" />
-    <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_enter" android:iconPreview="@drawable/key_qwerty_enter_b" 
-         android:keyWidth="15%p" android:keyEdgeFlags="right"/>
-  </Row>
-</Keyboard>
diff --git a/res/xml/keyboard_qwerty.xml b/res/xml/keyboard_qwerty_jp.xml
similarity index 91%
rename from res/xml/keyboard_qwerty.xml
rename to res/xml/keyboard_qwerty_jp.xml
index ed87f0e..ca87e72 100644
--- a/res/xml/keyboard_qwerty.xml
+++ b/res/xml/keyboard_qwerty_jp.xml
@@ -16,8 +16,8 @@
 -->
 <Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
 	  android:keyWidth="10%p"
-	  android:horizontalGap="0px"
-	  android:verticalGap="0px"
+	  android:horizontalGap="0dip"
+	  android:verticalGap="0dip"
 	  android:keyHeight="@dimen/key_height"
 	  >
   
@@ -63,8 +63,8 @@
   </Row>
   
   <Row android:rowEdgeFlags="bottom">
-    <Key android:codes="-230" android:keyLabel="@string/key_change_mode"
-	 android:popupKeyboard="@xml/keyboard_switch_key_qwerty"
+    <Key android:codes="-230" android:keyIcon="@drawable/key_qwerty_mode_hira" android:iconPreview="@drawable/key_mode_change_b"
+	 android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp"
          android:keyWidth="15%p" android:keyEdgeFlags="left"/>
     <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_qwerty_pict_sym_b"
          android:keyWidth="15%p"/>
@@ -74,7 +74,7 @@
          android:keyWidth="12.5%p"/>
     <Key android:codes="46" android:keyLabel="@string/key_qwerty_full_kuten"
          android:keyWidth="12.5%p"/>
-    <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_enter" android:iconPreview="@drawable/key_qwerty_enter_b" 
+    <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_enter_jp" android:iconPreview="@drawable/key_qwerty_enter_jp_b" 
          android:keyWidth="15%p" android:keyEdgeFlags="right"/>
   </Row>
 </Keyboard>
diff --git a/res/xml/keyboard_qwerty_full_alphabet.xml b/res/xml/keyboard_qwerty_jp_full_alphabet.xml
similarity index 91%
rename from res/xml/keyboard_qwerty_full_alphabet.xml
rename to res/xml/keyboard_qwerty_jp_full_alphabet.xml
index ab1ecd6..ea7d72f 100644
--- a/res/xml/keyboard_qwerty_full_alphabet.xml
+++ b/res/xml/keyboard_qwerty_jp_full_alphabet.xml
@@ -16,8 +16,8 @@
 -->
 <Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
 	  android:keyWidth="10%p"
-	  android:horizontalGap="0px"
-	  android:verticalGap="0px"
+	  android:horizontalGap="0dip"
+	  android:verticalGap="0dip"
 	  android:keyHeight="@dimen/key_height"
 	  >
   
@@ -44,7 +44,7 @@
     <Key android:codes="65354" android:keyLabel="j"/>
     <Key android:codes="65355" android:keyLabel="k"/>
     <Key android:codes="65356" android:keyLabel="l"/>
-    <Key android:codes="65311" android:keyLabel="@string/key_qwerty_full_question"
+    <Key android:codes="65312" android:keyLabel="@string/key_qwerty_full_at_sign"
          android:keyEdgeFlags="right"/>
   </Row>
   
@@ -63,8 +63,8 @@
   </Row>
   
   <Row android:rowEdgeFlags="bottom">
-    <Key android:codes="-230" android:keyLabel="@string/key_change_mode"
-	 android:popupKeyboard="@xml/keyboard_switch_key_qwerty"
+    <Key android:codes="-230" android:keyIcon="@drawable/key_qwerty_mode_full_alpha" android:iconPreview="@drawable/key_mode_change_b"
+	 android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp"
          android:keyWidth="15%p" android:keyEdgeFlags="left"/>
     <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_qwerty_pict_sym_b"
          android:keyWidth="15%p"/>
diff --git a/res/xml/keyboard_qwerty_full_alphabet_shift.xml b/res/xml/keyboard_qwerty_jp_full_alphabet_shift.xml
similarity index 89%
rename from res/xml/keyboard_qwerty_full_alphabet_shift.xml
rename to res/xml/keyboard_qwerty_jp_full_alphabet_shift.xml
index 623145a..38005c8 100644
--- a/res/xml/keyboard_qwerty_full_alphabet_shift.xml
+++ b/res/xml/keyboard_qwerty_jp_full_alphabet_shift.xml
@@ -16,8 +16,8 @@
 -->
 <Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
 	  android:keyWidth="10%p"
-	  android:horizontalGap="0px"
-	  android:verticalGap="0px"
+	  android:horizontalGap="0dip"
+	  android:verticalGap="0dip"
 	  android:keyHeight="@dimen/key_height"
 	  >
   
@@ -44,7 +44,7 @@
     <Key android:codes="65322" android:keyLabel="J"/>
     <Key android:codes="65323" android:keyLabel="K"/>
     <Key android:codes="65324" android:keyLabel="L"/>
-    <Key android:codes="65311" android:keyLabel="@string/key_qwerty_full_question"
+    <Key android:codes="65295" android:keyLabel="@string/key_qwerty_full_slash"
          android:keyEdgeFlags="right"/>
   </Row>
   
@@ -63,16 +63,16 @@
   </Row>
   
   <Row android:rowEdgeFlags="bottom">
-    <Key android:codes="-230" android:keyLabel="@string/key_change_mode"
-	 android:popupKeyboard="@xml/keyboard_switch_key_qwerty"
+    <Key android:codes="-230" android:keyIcon="@drawable/key_qwerty_mode_full_alpha" android:iconPreview="@drawable/key_mode_change_b"
+	 android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp"
          android:keyWidth="15%p" android:keyEdgeFlags="left"/>
     <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_qwerty_pict_sym_b"
          android:keyWidth="15%p"/>
     <Key android:codes="12288"  android:keyIcon="@drawable/key_qwerty_space" android:iconPreview="@drawable/key_qwerty_space_b" 
          android:keyWidth="30%p" android:isRepeatable="true"/>
-    <Key android:codes="65292" android:keyLabel="@string/key_qwerty_full_comma"
+    <Key android:codes="65281" android:keyLabel="@string/key_qwerty_full_exclamation_mark"
          android:keyWidth="12.5%p"/>
-    <Key android:codes="65294" android:keyLabel="@string/key_qwerty_full_period"
+    <Key android:codes="65311" android:keyLabel="@string/key_qwerty_full_question"
          android:keyWidth="12.5%p"/>
     <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_enter" android:iconPreview="@drawable/key_qwerty_enter_b" 
          android:keyWidth="15%p" android:keyEdgeFlags="right"/>
diff --git a/res/xml/keyboard_qwerty_full_katakana.xml b/res/xml/keyboard_qwerty_jp_full_katakana.xml
similarity index 91%
rename from res/xml/keyboard_qwerty_full_katakana.xml
rename to res/xml/keyboard_qwerty_jp_full_katakana.xml
index 776b5f8..5e2c0cd 100644
--- a/res/xml/keyboard_qwerty_full_katakana.xml
+++ b/res/xml/keyboard_qwerty_jp_full_katakana.xml
@@ -16,8 +16,8 @@
 -->
 <Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
 	  android:keyWidth="10%p"
-	  android:horizontalGap="0px"
-	  android:verticalGap="0px"
+	  android:horizontalGap="0dip"
+	  android:verticalGap="0dip"
 	  android:keyHeight="@dimen/key_height"
 	  >
   
@@ -63,8 +63,8 @@
   </Row>
   
   <Row android:rowEdgeFlags="bottom">
-    <Key android:codes="-230" android:keyLabel="@string/key_change_mode"
-	 android:popupKeyboard="@xml/keyboard_switch_key_qwerty"
+    <Key android:codes="-230" android:keyIcon="@drawable/key_qwerty_mode_full_kata" android:iconPreview="@drawable/key_mode_change_b"
+	 android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp"
          android:keyWidth="15%p" android:keyEdgeFlags="left"/>
     <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_qwerty_pict_sym_b"
          android:keyWidth="15%p"/>
@@ -74,7 +74,7 @@
          android:keyWidth="12.5%p"/>
     <Key android:codes="12290" android:keyLabel="@string/key_qwerty_full_kuten"
          android:keyWidth="12.5%p"/>
-    <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_enter" android:iconPreview="@drawable/key_qwerty_enter_b" 
+    <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_enter_jp" android:iconPreview="@drawable/key_qwerty_enter_jp_b" 
          android:keyWidth="15%p" android:keyEdgeFlags="right"/>
   </Row>
 </Keyboard>
diff --git a/res/xml/keyboard_qwerty_full_katakana.xml b/res/xml/keyboard_qwerty_jp_full_katakana_shift.xml
similarity index 87%
copy from res/xml/keyboard_qwerty_full_katakana.xml
copy to res/xml/keyboard_qwerty_jp_full_katakana_shift.xml
index 776b5f8..dfee410 100644
--- a/res/xml/keyboard_qwerty_full_katakana.xml
+++ b/res/xml/keyboard_qwerty_jp_full_katakana_shift.xml
@@ -16,8 +16,8 @@
 -->
 <Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
 	  android:keyWidth="10%p"
-	  android:horizontalGap="0px"
-	  android:verticalGap="0px"
+	  android:horizontalGap="0dip"
+	  android:verticalGap="0dip"
 	  android:keyHeight="@dimen/key_height"
 	  >
   
@@ -63,18 +63,18 @@
   </Row>
   
   <Row android:rowEdgeFlags="bottom">
-    <Key android:codes="-230" android:keyLabel="@string/key_change_mode"
-	 android:popupKeyboard="@xml/keyboard_switch_key_qwerty"
+    <Key android:codes="-230" android:keyIcon="@drawable/key_qwerty_mode_full_kata" android:iconPreview="@drawable/key_mode_change_b"
+	 android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp"
          android:keyWidth="15%p" android:keyEdgeFlags="left"/>
     <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_qwerty_pict_sym_b"
          android:keyWidth="15%p"/>
     <Key android:codes="12288" android:keyIcon="@drawable/key_qwerty_space" android:iconPreview="@drawable/key_qwerty_space_b" 
          android:keyWidth="30%p" android:isRepeatable="true"/>
-    <Key android:codes="12289" android:keyLabel="@string/key_qwerty_full_touten"
+    <Key android:codes="65281" android:keyLabel="@string/key_qwerty_full_exclamation_mark"
          android:keyWidth="12.5%p"/>
-    <Key android:codes="12290" android:keyLabel="@string/key_qwerty_full_kuten"
+    <Key android:codes="65311" android:keyLabel="@string/key_qwerty_full_question"
          android:keyWidth="12.5%p"/>
-    <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_enter" android:iconPreview="@drawable/key_qwerty_enter_b" 
+    <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_enter_jp" android:iconPreview="@drawable/key_qwerty_enter_jp_b" 
          android:keyWidth="15%p" android:keyEdgeFlags="right"/>
   </Row>
 </Keyboard>
diff --git a/res/xml/keyboard_qwerty_full_symbols.xml b/res/xml/keyboard_qwerty_jp_full_symbols.xml
similarity index 93%
rename from res/xml/keyboard_qwerty_full_symbols.xml
rename to res/xml/keyboard_qwerty_jp_full_symbols.xml
index cd75aea..1fcf7fa 100644
--- a/res/xml/keyboard_qwerty_full_symbols.xml
+++ b/res/xml/keyboard_qwerty_jp_full_symbols.xml
@@ -16,8 +16,8 @@
 -->
 <Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
     android:keyWidth="10%p"
-    android:horizontalGap="0px"
-    android:verticalGap="0px"
+    android:horizontalGap="0dip"
+    android:verticalGap="0dip"
     android:keyHeight="@dimen/key_height"
     >
 
@@ -50,20 +50,20 @@
     <Row>
         <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift" android:iconPreview="@drawable/key_qwerty_shift_b" android:keyWidth="15%p"
              android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left"/>
-        <Key android:codes="65281" android:keyLabel="@string/key_qwerty_full_exclamation_mark"  />
+        <Key android:codes="65295" android:keyLabel="@string/key_qwerty_full_slash" />
         <Key android:codes="65288" android:keyLabel="@string/key_qwerty_full_left_parenthesis" />
         <Key android:codes="65289" android:keyLabel="@string/key_qwerty_full_right_parenthesis" />
         <Key android:codes="65306" android:keyLabel="@string/key_qwerty_full_colon" />
         <Key android:codes="65307" android:keyLabel="@string/key_qwerty_full_semicolon" />
-        <Key android:codes="12539" android:keyLabel="@string/key_qwerty_full_middot"  />
+        <Key android:codes="65281" android:keyLabel="@string/key_qwerty_full_exclamation_mark"  />
         <Key android:codes="65311" android:keyLabel="@string/key_qwerty_full_question" />
         <Key android:codes="-100" android:keyIcon="@drawable/key_qwerty_del" android:iconPreview="@drawable/key_qwerty_del_b" android:keyWidth="15%p" 
              android:keyEdgeFlags="right" android:isRepeatable="true"/>
     </Row>
     
     <Row  android:rowEdgeFlags="bottom">
-        <Key android:codes="-230" android:keyLabel="@string/key_change_mode"
-	         android:popupKeyboard="@xml/keyboard_switch_key_qwerty"
+        <Key android:codes="-230" android:keyIcon="@drawable/key_qwerty_mode_full_num" android:iconPreview="@drawable/key_mode_change_b"
+	         android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp"
              android:keyWidth="15%p" android:keyEdgeFlags="left" />
         <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_qwerty_pict_sym_b"
              android:keyWidth="15%p" />
diff --git a/res/xml/keyboard_qwerty_full_symbols_shift.xml b/res/xml/keyboard_qwerty_jp_full_symbols_shift.xml
similarity index 89%
rename from res/xml/keyboard_qwerty_full_symbols_shift.xml
rename to res/xml/keyboard_qwerty_jp_full_symbols_shift.xml
index e10565d..26e5cb3 100644
--- a/res/xml/keyboard_qwerty_full_symbols_shift.xml
+++ b/res/xml/keyboard_qwerty_jp_full_symbols_shift.xml
@@ -16,8 +16,8 @@
 -->
 <Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
 	  android:keyWidth="10%p"
-	  android:horizontalGap="0px"
-	  android:verticalGap="0px"
+	  android:horizontalGap="0dip"
+	  android:verticalGap="0dip"
 	  android:keyHeight="@dimen/key_height"
 	  >
   
@@ -42,7 +42,7 @@
     <Key android:codes="8221" android:keyLabel="@string/key_qwerty_full_double_quotation_sign"/>
     <Key android:codes="177" android:keyLabel="@string/key_qwerty_full_plus_minus_sign" />
     <Key android:codes="65343" android:keyLabel="@string/key_qwerty_full_underscore"/>
-    <Key android:codes="65309" android:keyLabel="@string/key_qwerty_full_equal_sign"/>
+    <Key android:codes="65340" android:keyLabel="@string/key_qwerty_full_back_slash"/>
     <Key android:codes="65371" android:keyLabel="@string/key_qwerty_full_left_curly_blacket"/>
     <Key android:codes="65373" android:keyLabel="@string/key_qwerty_full_right_curly_blacket" android:keyEdgeFlags="right"/>
   </Row>
@@ -55,23 +55,23 @@
     <Key android:codes="65310" android:keyLabel="@string/key_qwerty_full_greater_than_sign"/>
     <Key android:codes="8216" android:keyLabel="@string/key_qwerty_full_left_single_quote"/>
     <Key android:codes="8217" android:keyLabel="@string/key_qwerty_full_right_single_quote"/>
-    <Key android:codes="65340" android:keyLabel="@string/key_qwerty_full_back_slash" />
-    <Key android:codes="65311" android:keyLabel="@string/key_qwerty_full_question"/>
+    <Key android:codes="65292" android:keyLabel="@string/key_qwerty_full_comma" />
+    <Key android:codes="65294" android:keyLabel="@string/key_qwerty_full_period" />
     <Key android:codes="-100" android:keyIcon="@drawable/key_qwerty_del" android:iconPreview="@drawable/key_qwerty_del_b" android:keyWidth="15%p" 
 	     android:keyEdgeFlags="right" android:isRepeatable="true"/>
   </Row>
   
   <Row android:rowEdgeFlags="bottom">
-    <Key android:codes="-230" android:keyLabel="@string/key_change_mode"
-         android:popupKeyboard="@xml/keyboard_switch_key_qwerty"
+    <Key android:codes="-230" android:keyIcon="@drawable/key_qwerty_mode_full_num" android:iconPreview="@drawable/key_mode_change_b"
+         android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp"
          android:keyWidth="15%p" android:keyEdgeFlags="left" />
     <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_qwerty_pict_sym_b"
          android:keyWidth="15%p" />
     <Key android:codes="12288"  android:keyIcon="@drawable/key_qwerty_space" android:iconPreview="@drawable/key_qwerty_space_b" 
          android:keyWidth="30%p" android:isRepeatable="true"/>
-    <Key android:codes="65292" android:keyLabel="@string/key_qwerty_full_comma"
+    <Key android:codes="65281" android:keyLabel="@string/key_qwerty_full_exclamation_mark"
          android:keyWidth="12.5%p" />
-    <Key android:codes="65294" android:keyLabel="@string/key_qwerty_full_period"
+    <Key android:codes="12539" android:keyLabel="@string/key_qwerty_full_middot"
          android:keyWidth="12.5%p" />
     <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_enter" android:iconPreview="@drawable/key_qwerty_enter_b" 
          android:keyWidth="15%p" android:keyEdgeFlags="right"/>
diff --git a/res/xml/keyboard_qwerty_half_alphabet.xml b/res/xml/keyboard_qwerty_jp_half_alphabet.xml
similarity index 89%
rename from res/xml/keyboard_qwerty_half_alphabet.xml
rename to res/xml/keyboard_qwerty_jp_half_alphabet.xml
index a83b50c..80b7934 100644
--- a/res/xml/keyboard_qwerty_half_alphabet.xml
+++ b/res/xml/keyboard_qwerty_jp_half_alphabet.xml
@@ -16,8 +16,8 @@
 -->
 <Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
 	  android:keyWidth="10%p"
-	  android:horizontalGap="0px"
-	  android:verticalGap="0px"
+	  android:horizontalGap="0dip"
+	  android:verticalGap="0dip"
 	  android:keyHeight="@dimen/key_height"
 	  >
   
@@ -44,7 +44,7 @@
     <Key android:codes="106" android:keyLabel="j"/>
     <Key android:codes="107" android:keyLabel="k"/>
     <Key android:codes="108" android:keyLabel="l"/>
-    <Key android:codes="63"  android:keyLabel="\?" android:keyEdgeFlags="right"/>
+    <Key android:codes="64"  android:keyLabel="\@" android:keyEdgeFlags="right"/>
   </Row>
   
   <Row>
@@ -62,8 +62,8 @@
   </Row>
   
   <Row android:rowEdgeFlags="bottom">
-    <Key android:codes="-230" android:keyLabel="@string/key_change_mode"
-	     android:popupKeyboard="@xml/keyboard_switch_key_qwerty"
+    <Key android:codes="-230" android:keyIcon="@drawable/key_qwerty_mode_half_alpha" android:iconPreview="@drawable/key_mode_change_b"
+	     android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp"
          android:keyWidth="15%p" android:keyEdgeFlags="left"/>
     <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_qwerty_pict_sym_b"
          android:keyWidth="15%p"/>
@@ -73,7 +73,7 @@
          android:keyWidth="12.5%p"/>
     <Key android:codes="46" android:keyLabel="."
          android:keyWidth="12.5%p"/>
-    <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_enter" android:iconPreview="@drawable/key_qwerty_enter_b" 
+    <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_enter_jp" android:iconPreview="@drawable/key_qwerty_enter_jp_b" 
          android:keyWidth="15%p" android:keyEdgeFlags="right"/>
   </Row>
 </Keyboard>
diff --git a/res/xml/keyboard_qwerty_half_katakana.xml b/res/xml/keyboard_qwerty_jp_half_alphabet_shift.xml
similarity index 86%
copy from res/xml/keyboard_qwerty_half_katakana.xml
copy to res/xml/keyboard_qwerty_jp_half_alphabet_shift.xml
index c5b2086..7dc0869 100644
--- a/res/xml/keyboard_qwerty_half_katakana.xml
+++ b/res/xml/keyboard_qwerty_jp_half_alphabet_shift.xml
@@ -16,8 +16,8 @@
 -->
 <Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
 	  android:keyWidth="10%p"
-	  android:horizontalGap="0px"
-	  android:verticalGap="0px"
+	  android:horizontalGap="0dip"
+	  android:verticalGap="0dip"
 	  android:keyHeight="@dimen/key_height"
 	  >
   
@@ -44,8 +44,7 @@
     <Key android:codes="106" android:keyLabel="j"/>
     <Key android:codes="107" android:keyLabel="k"/>
     <Key android:codes="108" android:keyLabel="l"/>
-    <Key android:codes="65392" android:keyLabel="@string/key_qwerty_half_tyouon"
-         android:keyEdgeFlags="right"/>
+    <Key android:codes="47"  android:keyLabel="/" android:keyEdgeFlags="right"/>
   </Row>
   
   <Row>
@@ -63,18 +62,18 @@
   </Row>
   
   <Row android:rowEdgeFlags="bottom">
-    <Key android:codes="-230" android:keyLabel="@string/key_change_mode"
-	 android:popupKeyboard="@xml/keyboard_switch_key_qwerty"
+    <Key android:codes="-230" android:keyIcon="@drawable/key_qwerty_mode_half_alpha" android:iconPreview="@drawable/key_mode_change_b"
+	     android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp"
          android:keyWidth="15%p" android:keyEdgeFlags="left"/>
     <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_qwerty_pict_sym_b"
          android:keyWidth="15%p"/>
     <Key android:codes="32" android:keyIcon="@drawable/key_qwerty_space" android:iconPreview="@drawable/key_qwerty_space_b" 
          android:keyWidth="30%p" android:isRepeatable="true"/>
-    <Key android:codes="65380" android:keyLabel="@string/key_qwerty_half_comma"
+    <Key android:codes="33" android:keyLabel="!"
          android:keyWidth="12.5%p"/>
-    <Key android:codes="65377" android:keyLabel="@string/key_qwerty_half_period"
+    <Key android:codes="63" android:keyLabel="\?"
          android:keyWidth="12.5%p"/>
-    <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_enter" android:iconPreview="@drawable/key_qwerty_enter_b" 
+    <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_enter_jp" android:iconPreview="@drawable/key_qwerty_enter_jp_b" 
          android:keyWidth="15%p" android:keyEdgeFlags="right"/>
   </Row>
 </Keyboard>
diff --git a/res/xml/keyboard_qwerty_half_katakana.xml b/res/xml/keyboard_qwerty_jp_half_katakana.xml
similarity index 91%
rename from res/xml/keyboard_qwerty_half_katakana.xml
rename to res/xml/keyboard_qwerty_jp_half_katakana.xml
index c5b2086..18d6c4c 100644
--- a/res/xml/keyboard_qwerty_half_katakana.xml
+++ b/res/xml/keyboard_qwerty_jp_half_katakana.xml
@@ -16,8 +16,8 @@
 -->
 <Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
 	  android:keyWidth="10%p"
-	  android:horizontalGap="0px"
-	  android:verticalGap="0px"
+	  android:horizontalGap="0dip"
+	  android:verticalGap="0dip"
 	  android:keyHeight="@dimen/key_height"
 	  >
   
@@ -63,8 +63,8 @@
   </Row>
   
   <Row android:rowEdgeFlags="bottom">
-    <Key android:codes="-230" android:keyLabel="@string/key_change_mode"
-	 android:popupKeyboard="@xml/keyboard_switch_key_qwerty"
+    <Key android:codes="-230" android:keyIcon="@drawable/key_qwerty_mode_half_kata" android:iconPreview="@drawable/key_mode_change_b"
+	 android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp"
          android:keyWidth="15%p" android:keyEdgeFlags="left"/>
     <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_qwerty_pict_sym_b"
          android:keyWidth="15%p"/>
@@ -74,7 +74,7 @@
          android:keyWidth="12.5%p"/>
     <Key android:codes="65377" android:keyLabel="@string/key_qwerty_half_period"
          android:keyWidth="12.5%p"/>
-    <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_enter" android:iconPreview="@drawable/key_qwerty_enter_b" 
+    <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_enter_jp" android:iconPreview="@drawable/key_qwerty_enter_jp_b" 
          android:keyWidth="15%p" android:keyEdgeFlags="right"/>
   </Row>
 </Keyboard>
diff --git a/res/xml/keyboard_qwerty_half_katakana.xml b/res/xml/keyboard_qwerty_jp_half_katakana_shift.xml
similarity index 88%
copy from res/xml/keyboard_qwerty_half_katakana.xml
copy to res/xml/keyboard_qwerty_jp_half_katakana_shift.xml
index c5b2086..c250968 100644
--- a/res/xml/keyboard_qwerty_half_katakana.xml
+++ b/res/xml/keyboard_qwerty_jp_half_katakana_shift.xml
@@ -16,8 +16,8 @@
 -->
 <Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
 	  android:keyWidth="10%p"
-	  android:horizontalGap="0px"
-	  android:verticalGap="0px"
+	  android:horizontalGap="0dip"
+	  android:verticalGap="0dip"
 	  android:keyHeight="@dimen/key_height"
 	  >
   
@@ -63,18 +63,18 @@
   </Row>
   
   <Row android:rowEdgeFlags="bottom">
-    <Key android:codes="-230" android:keyLabel="@string/key_change_mode"
-	 android:popupKeyboard="@xml/keyboard_switch_key_qwerty"
+    <Key android:codes="-230" android:keyIcon="@drawable/key_qwerty_mode_half_kata" android:iconPreview="@drawable/key_mode_change_b"
+	 android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp"
          android:keyWidth="15%p" android:keyEdgeFlags="left"/>
     <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_qwerty_pict_sym_b"
          android:keyWidth="15%p"/>
     <Key android:codes="32" android:keyIcon="@drawable/key_qwerty_space" android:iconPreview="@drawable/key_qwerty_space_b" 
          android:keyWidth="30%p" android:isRepeatable="true"/>
-    <Key android:codes="65380" android:keyLabel="@string/key_qwerty_half_comma"
+    <Key android:codes="33" android:keyLabel="!"
          android:keyWidth="12.5%p"/>
-    <Key android:codes="65377" android:keyLabel="@string/key_qwerty_half_period"
+    <Key android:codes="63" android:keyLabel="\?"
          android:keyWidth="12.5%p"/>
-    <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_enter" android:iconPreview="@drawable/key_qwerty_enter_b" 
+    <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_enter_jp" android:iconPreview="@drawable/key_qwerty_enter_jp_b" 
          android:keyWidth="15%p" android:keyEdgeFlags="right"/>
   </Row>
 </Keyboard>
diff --git a/res/xml/keyboard_qwerty_half_symbols.xml b/res/xml/keyboard_qwerty_jp_half_symbols.xml
similarity index 94%
rename from res/xml/keyboard_qwerty_half_symbols.xml
rename to res/xml/keyboard_qwerty_jp_half_symbols.xml
index 223d675..4621b9e 100644
--- a/res/xml/keyboard_qwerty_half_symbols.xml
+++ b/res/xml/keyboard_qwerty_jp_half_symbols.xml
@@ -16,8 +16,8 @@
 -->
 <Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
     android:keyWidth="10%p"
-    android:horizontalGap="0px"
-    android:verticalGap="0px"
+    android:horizontalGap="0dip"
+    android:verticalGap="0dip"
     android:keyHeight="@dimen/key_height"
     >
 
@@ -50,20 +50,20 @@
     <Row>
         <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift" android:iconPreview="@drawable/key_qwerty_shift_b" android:keyWidth="15%p"
              android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left"/>
-        <Key android:codes="33" android:keyLabel="!" />
+        <Key android:codes="47" android:keyLabel="/" />
         <Key android:codes="40" android:keyLabel="("/>
         <Key android:codes="41" android:keyLabel=")"/>
         <Key android:codes="58" android:keyLabel=":"/>
         <Key android:codes="59" android:keyLabel=";"/>
-        <Key android:codes="47" android:keyLabel="/" />
+        <Key android:codes="33" android:keyLabel="!" />
         <Key android:codes="63" android:keyLabel="\?"/>
         <Key android:codes="-100" android:keyIcon="@drawable/key_qwerty_del" android:iconPreview="@drawable/key_qwerty_del_b" android:keyWidth="15%p" 
              android:keyEdgeFlags="right" android:isRepeatable="true"/>
     </Row>
     
     <Row  android:rowEdgeFlags="bottom">
-        <Key android:codes="-230" android:keyLabel="@string/key_change_mode"
-	         android:popupKeyboard="@xml/keyboard_switch_key_qwerty"
+        <Key android:codes="-230" android:keyIcon="@drawable/key_qwerty_mode_half_num" android:iconPreview="@drawable/key_mode_change_b"
+	         android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp"
              android:keyWidth="15%p" android:keyEdgeFlags="left" />
         <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_qwerty_pict_sym_b"
              android:keyWidth="15%p" />
diff --git a/res/xml/keyboard_qwerty_half_symbols_shift.xml b/res/xml/keyboard_qwerty_jp_half_symbols_shift.xml
similarity index 85%
rename from res/xml/keyboard_qwerty_half_symbols_shift.xml
rename to res/xml/keyboard_qwerty_jp_half_symbols_shift.xml
index edd776b..e7871f1 100644
--- a/res/xml/keyboard_qwerty_half_symbols_shift.xml
+++ b/res/xml/keyboard_qwerty_jp_half_symbols_shift.xml
@@ -16,8 +16,8 @@
 -->
 <Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
 	  android:keyWidth="10%p"
-	  android:horizontalGap="0px"
-	  android:verticalGap="0px"
+	  android:horizontalGap="0dip"
+	  android:verticalGap="0dip"
 	  android:keyHeight="@dimen/key_height"
 	  >
   
@@ -42,7 +42,7 @@
     <Key android:codes="34" android:keyLabel="&quot;"/>
     <Key android:codes="43" android:keyLabel="+" />
     <Key android:codes="95" android:keyLabel="_"/>
-    <Key android:codes="61" android:keyLabel="="/>
+    <Key android:codes="92" android:keyLabel="\\" />
     <Key android:codes="123" android:keyLabel="{"/>
     <Key android:codes="125" android:keyLabel="}" android:keyEdgeFlags="right"/>
   </Row>
@@ -54,23 +54,23 @@
     <Key android:codes="60" android:keyLabel="&lt;"/>
     <Key android:codes="62" android:keyLabel="&gt;"/>
     <Key android:codes="96" android:keyLabel="`"/>
-    <Key android:codes="180" android:keyLabel="´"/>
-    <Key android:codes="92" android:keyLabel="\\" />
-    <Key android:codes="63" android:keyLabel="\?"/>
+    <Key android:codes="39" android:keyLabel="'"/>
+    <Key android:codes="44" android:keyLabel="," />
+    <Key android:codes="46" android:keyLabel="." />
     <Key android:codes="-100" android:keyIcon="@drawable/key_qwerty_del" android:iconPreview="@drawable/key_qwerty_del_b" android:keyWidth="15%p" 
 	     android:keyEdgeFlags="right" android:isRepeatable="true"/>
   </Row>
   
   <Row android:rowEdgeFlags="bottom">
-    <Key android:codes="-230" android:keyLabel="@string/key_change_mode"
-         android:popupKeyboard="@xml/keyboard_switch_key_qwerty"
+    <Key android:codes="-230" android:keyIcon="@drawable/key_qwerty_mode_half_num" android:iconPreview="@drawable/key_mode_change_b"
+         android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp"
          android:keyWidth="15%p" android:keyEdgeFlags="left" />
     <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_qwerty_pict_sym_b"
          android:keyWidth="15%p" />
     <Key android:codes="32" android:keyIcon="@drawable/key_qwerty_space" android:iconPreview="@drawable/key_qwerty_space_b" 
          android:keyWidth="30%p" android:isRepeatable="true"/>
-    <Key android:codes="44" android:keyLabel="," android:keyWidth="12.5%p" />
-    <Key android:codes="46" android:keyLabel="." android:keyWidth="12.5%p" />
+    <Key android:codes="33" android:keyLabel="!" android:keyWidth="12.5%p" />
+    <Key android:codes="63" android:keyLabel="\?" android:keyWidth="12.5%p" />
     <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_enter" android:iconPreview="@drawable/key_qwerty_enter_b" 
          android:keyWidth="15%p" android:keyEdgeFlags="right"/>
   </Row>
diff --git a/res/xml/keyboard_qwerty.xml b/res/xml/keyboard_qwerty_jp_shift.xml
similarity index 87%
copy from res/xml/keyboard_qwerty.xml
copy to res/xml/keyboard_qwerty_jp_shift.xml
index ed87f0e..99b8ea8 100644
--- a/res/xml/keyboard_qwerty.xml
+++ b/res/xml/keyboard_qwerty_jp_shift.xml
@@ -16,8 +16,8 @@
 -->
 <Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
 	  android:keyWidth="10%p"
-	  android:horizontalGap="0px"
-	  android:verticalGap="0px"
+	  android:horizontalGap="0dip"
+	  android:verticalGap="0dip"
 	  android:keyHeight="@dimen/key_height"
 	  >
   
@@ -63,18 +63,18 @@
   </Row>
   
   <Row android:rowEdgeFlags="bottom">
-    <Key android:codes="-230" android:keyLabel="@string/key_change_mode"
-	 android:popupKeyboard="@xml/keyboard_switch_key_qwerty"
+    <Key android:codes="-230" android:keyIcon="@drawable/key_qwerty_mode_hira" android:iconPreview="@drawable/key_mode_change_b"
+	 android:popupKeyboard="@xml/keyboard_switch_key_qwerty_jp"
          android:keyWidth="15%p" android:keyEdgeFlags="left"/>
     <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_qwerty_pict_sym_b"
          android:keyWidth="15%p"/>
     <Key android:codes="12288" android:keyIcon="@drawable/key_qwerty_space_conv" android:iconPreview="@drawable/key_qwerty_space_conv_b" 
          android:keyWidth="30%p" android:isRepeatable="true"/>
-    <Key android:codes="44" android:keyLabel="@string/key_qwerty_full_touten"
+    <Key android:codes="65281" android:keyLabel="@string/key_qwerty_full_exclamation_mark"
          android:keyWidth="12.5%p"/>
-    <Key android:codes="46" android:keyLabel="@string/key_qwerty_full_kuten"
+    <Key android:codes="65311" android:keyLabel="@string/key_qwerty_full_question"
          android:keyWidth="12.5%p"/>
-    <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_enter" android:iconPreview="@drawable/key_qwerty_enter_b" 
+    <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_enter_jp" android:iconPreview="@drawable/key_qwerty_enter_jp_b" 
          android:keyWidth="15%p" android:keyEdgeFlags="right"/>
   </Row>
 </Keyboard>
diff --git a/res/xml/keyboard_qwerty_landscape.xml b/res/xml/keyboard_qwerty_landscape.xml
deleted file mode 100644
index a782827..0000000
--- a/res/xml/keyboard_qwerty_landscape.xml
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2008,2009  OMRON SOFTWARE Co., Ltd.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
-	  android:keyWidth="10%p"
-	  android:horizontalGap="0px"
-	  android:verticalGap="0px"
-	  android:keyHeight="@dimen/key_height_landscape"
-	  >
-  
-  <Row>
-    <Key android:codes="113" android:keyLabel="q" android:keyEdgeFlags="left"/>
-    <Key android:codes="119" android:keyLabel="w"/>
-    <Key android:codes="101" android:keyLabel="e"/>
-    <Key android:codes="114" android:keyLabel="r"/>
-    <Key android:codes="116" android:keyLabel="t"/>
-    <Key android:codes="121" android:keyLabel="y"/>
-    <Key android:codes="117" android:keyLabel="u"/>
-    <Key android:codes="105" android:keyLabel="i"/>
-    <Key android:codes="111" android:keyLabel="o"/>
-    <Key android:codes="112" android:keyLabel="p" android:keyEdgeFlags="right"/>
-  </Row>
-  
-  <Row>
-    <Key android:codes="97"  android:keyLabel="a" android:keyEdgeFlags="left"/>
-    <Key android:codes="115" android:keyLabel="s"/>
-    <Key android:codes="100" android:keyLabel="d"/>
-    <Key android:codes="102" android:keyLabel="f"/>
-    <Key android:codes="103" android:keyLabel="g"/>
-    <Key android:codes="104" android:keyLabel="h"/>
-    <Key android:codes="106" android:keyLabel="j"/>
-    <Key android:codes="107" android:keyLabel="k"/>
-    <Key android:codes="108" android:keyLabel="l"/>
-    <Key android:codes="12540" android:keyLabel="@string/key_qwerty_tyouon"
-         android:keyEdgeFlags="right"/>
-  </Row>
-  
-  <Row>
-    <Key android:codes="-1" android:keyIcon="@drawable/key_qwerty_shift" android:iconPreview="@drawable/key_qwerty_shift_b" android:keyWidth="15%p"
-         android:isModifier="true" android:isSticky="false" android:keyEdgeFlags="left"/>
-    <Key android:codes="122" android:keyLabel="z"/>
-    <Key android:codes="120" android:keyLabel="x"/>
-    <Key android:codes="99" android:keyLabel="c"/>
-    <Key android:codes="118" android:keyLabel="v"/>
-    <Key android:codes="98" android:keyLabel="b"/>
-    <Key android:codes="110" android:keyLabel="n"/>
-    <Key android:codes="109" android:keyLabel="m"/>
-    <Key android:codes="-100" android:keyIcon="@drawable/key_qwerty_del_landscape" android:iconPreview="@drawable/key_qwerty_del_b_landscape" android:keyWidth="15%p"  
-         android:keyEdgeFlags="right" android:isRepeatable="true"/>
-  </Row>
-  
-  <Row android:rowEdgeFlags="bottom">
-    <Key android:codes="-230" android:keyLabel="@string/key_change_mode"
-	 android:popupKeyboard="@xml/keyboard_switch_key_qwerty"
-         android:keyWidth="15%p" android:keyEdgeFlags="left"/>
-    <Key android:codes="-106" android:keyIcon="@drawable/key_qwerty_pict_sym" android:iconPreview="@drawable/key_qwerty_pict_sym_b"
-         android:keyWidth="15%p"/>
-    <Key android:codes="12288" android:keyIcon="@drawable/key_qwerty_space_conv" android:iconPreview="@drawable/key_qwerty_space_conv_b" 
-         android:keyWidth="30%p" android:isRepeatable="true"/>
-    <Key android:codes="44" android:keyLabel="@string/key_qwerty_full_touten"
-         android:keyWidth="12.5%p"/>
-    <Key android:codes="46" android:keyLabel="@string/key_qwerty_full_kuten"
-         android:keyWidth="12.5%p"/>
-    <Key android:codes="-101" android:keyIcon="@drawable/key_qwerty_enter" android:iconPreview="@drawable/key_qwerty_enter_b" 
-         android:keyWidth="15%p" android:keyEdgeFlags="right"/>
-  </Row>
-</Keyboard>
diff --git a/res/xml/keyboard_switch_key.xml b/res/xml/keyboard_switch_key_jp.xml
similarity index 94%
rename from res/xml/keyboard_switch_key.xml
rename to res/xml/keyboard_switch_key_jp.xml
index 4118f14..0ba7976 100644
--- a/res/xml/keyboard_switch_key.xml
+++ b/res/xml/keyboard_switch_key_jp.xml
@@ -16,9 +16,9 @@
 -->
 <Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
 	  android:keyWidth="15%p"
-	  android:horizontalGap="0px"
-	  android:verticalGap="0px"
-	  android:keyHeight="50px"
+	  android:horizontalGap="0dip"
+	  android:verticalGap="0dip"
+	  android:keyHeight="50dip"
 	  >
   <Row>
     <Key android:codes="-301" android:keyLabel="@string/key_12key_switch_full_hiragana"
diff --git a/res/xml/keyboard_switch_key_landscape.xml b/res/xml/keyboard_switch_key_landscape.xml
deleted file mode 100644
index 933607d..0000000
--- a/res/xml/keyboard_switch_key_landscape.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2008,2009  OMRON SOFTWARE Co., Ltd.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
-	  android:keyWidth="15%p"
-	  android:horizontalGap="0px"
-	  android:verticalGap="0px"
-	  android:keyHeight="50px"
-	  >
-  <Row>
-    <Key android:codes="-301" android:keyLabel="@string/key_12key_switch_full_hiragana"
-	 android:keyEdgeFlags="left"/>
-    <Key android:codes="-302" android:keyLabel="@string/key_12key_switch_full_katakana"/>
-    <Key android:codes="-303" android:keyLabel="@string/key_12key_switch_full_alphabet"/>
-    <Key android:codes="-304" android:keyLabel="@string/key_12key_switch_full_number"
-	 android:keyEdgeFlags="right"/>
-  </Row>
-  <Row>
-    <Key android:codes="-221" android:keyLabel="@string/key_switch_keyboard"
-	 android:keyEdgeFlags="left"/>
-    <Key android:codes="-306" android:keyLabel="@string/key_12key_switch_half_katakana"/>
-    <Key android:codes="-307" android:keyLabel="@string/key_12key_switch_half_alphabet"/>
-    <Key android:codes="-308" android:keyLabel="@string/key_12key_switch_half_number"
-	 android:keyEdgeFlags="right"/>
-  </Row>
-</Keyboard>
diff --git a/res/xml/keyboard_switch_key_qwerty.xml b/res/xml/keyboard_switch_key_qwerty_jp.xml
similarity index 90%
rename from res/xml/keyboard_switch_key_qwerty.xml
rename to res/xml/keyboard_switch_key_qwerty_jp.xml
index dbf08e9..3c09b96 100644
--- a/res/xml/keyboard_switch_key_qwerty.xml
+++ b/res/xml/keyboard_switch_key_qwerty_jp.xml
@@ -16,9 +16,9 @@
 -->
 <Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
 	  android:keyWidth="15%p"
-	  android:horizontalGap="0px"
-	  android:verticalGap="0px"
-	  android:keyHeight="50px"
+	  android:horizontalGap="0dip"
+	  android:verticalGap="0dip"
+	  android:keyHeight="50dip"
 	  >
   <Row>
     <Key android:codes="-301" android:keyLabel="@string/key_12key_switch_full_hiragana"
@@ -29,7 +29,7 @@
 	 android:keyEdgeFlags="right"/>
   </Row>
   <Row>
-    <Key android:codes="-104" android:keyIcon="@drawable/key_mode_panel_kbd" android:iconPreview="@drawable/key_mode_panel_kbd_b"
+    <Key android:codes="-104" android:keyIcon="@drawable/key_mode_panel_kbd_12key" android:iconPreview="@drawable/key_mode_panel_kbd_12key_b"
 	 android:keyEdgeFlags="left"/>
     <Key android:codes="-306" android:keyLabel="@string/key_12key_switch_half_katakana"/>
     <Key android:codes="-307" android:keyLabel="@string/key_12key_switch_half_alphabet"/>
diff --git a/res/xml/keyboard_switch_key_qwerty_landscape.xml b/res/xml/keyboard_switch_key_qwerty_landscape.xml
deleted file mode 100644
index 4424a19..0000000
--- a/res/xml/keyboard_switch_key_qwerty_landscape.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2008,2009  OMRON SOFTWARE Co., Ltd.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
-	  android:keyWidth="15%p"
-	  android:horizontalGap="0px"
-	  android:verticalGap="0px"
-	  android:keyHeight="50px"
-	  >
-  <Row>
-    <Key android:codes="-301" android:keyLabel="@string/key_12key_switch_full_hiragana"
-	 android:keyEdgeFlags="left"/>
-    <Key android:codes="-302" android:keyLabel="@string/key_12key_switch_full_katakana"/>
-    <Key android:codes="-303" android:keyLabel="@string/key_12key_switch_full_alphabet"/>
-    <Key android:codes="-304" android:keyLabel="@string/key_12key_switch_full_number"
-	 android:keyEdgeFlags="right"/>
-  </Row>
-  <Row>
-    <Key android:codes="-104" android:keyLabel="@string/key_switch_keyboard"
-	 android:keyEdgeFlags="left"/>
-    <Key android:codes="-306" android:keyLabel="@string/key_12key_switch_half_katakana"/>
-    <Key android:codes="-307" android:keyLabel="@string/key_12key_switch_half_alphabet"/>
-    <Key android:codes="-308" android:keyLabel="@string/key_12key_switch_half_number"
-	 android:keyEdgeFlags="right"/>
-  </Row>
-</Keyboard>
diff --git a/res/xml/openwnn_pref_en.xml b/res/xml/openwnn_pref_en.xml
index eea361c..90c4a4b 100644
--- a/res/xml/openwnn_pref_en.xml
+++ b/res/xml/openwnn_pref_en.xml
@@ -53,7 +53,9 @@
     <CheckBoxPreference android:key="opt_en_spell_correction"
 			android:title="@string/preference_correct_spell_title"
 			android:summary="@string/preference_correct_spell_summary"
-			android:defaultValue="true" />
+			android:defaultValue="true"
+			android:dependency="opt_en_prediction" />
+
   </PreferenceCategory>
     
   <PreferenceCategory android:title="@string/preference_dictionary_menu">
diff --git a/res/xml/openwnn_pref_zhcn.xml b/res/xml/openwnn_pref_zhcn.xml
index f65291b..048e393 100644
--- a/res/xml/openwnn_pref_zhcn.xml
+++ b/res/xml/openwnn_pref_zhcn.xml
@@ -57,7 +57,8 @@
     <CheckBoxPreference android:key="opt_zhcn_spell_correction"
 			android:title="@string/preference_correct_spell_title"
 			android:summary="@string/preference_correct_spell_summary"
-			android:defaultValue="true" />
+			android:defaultValue="true"
+			android:dependency="opt_zhcn_prediction" />
   </PreferenceCategory>
     
   <PreferenceCategory android:title="@string/preference_dictionary_menu">
diff --git a/res/xml/symbols_china_list.xml b/res/xml/symbols_china_list.xml
index 2741930..a9fc71b 100644
--- a/res/xml/symbols_china_list.xml
+++ b/res/xml/symbols_china_list.xml
@@ -14,7 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
-<!--symbols shuāngzìjiéyīqū -->
+<!--symbols -->
 <keystring>
   <string value="、"/>
   <string value="。"/>
@@ -205,6 +205,7 @@
   <string value="－"/>
   <string value="．"/>
   <string value="／"/>
+<!--
   <string value="０"/>
   <string value="１"/>
   <string value="２"/>
@@ -215,6 +216,7 @@
   <string value="７"/>
   <string value="８"/>
   <string value="９"/>
+-->
   <string value="："/>
   <string value="；"/>
   <string value="＜"/>
@@ -222,6 +224,7 @@
   <string value="＞"/>
   <string value="？"/>
   <string value="＠"/>
+<!--
   <string value="Ａ"/>
   <string value="Ｂ"/>
   <string value="Ｃ"/>
@@ -248,12 +251,14 @@
   <string value="Ｘ"/>
   <string value="Ｙ"/>
   <string value="Ｚ"/>
+-->
   <string value="［"/>
   <string value="＼"/>
   <string value="］"/>
   <string value="＾"/>
   <string value="＿"/>
   <string value="｀"/>
+<!--
   <string value="ａ"/>
   <string value="ｂ"/>
   <string value="ｃ"/>
@@ -280,10 +285,12 @@
   <string value="ｘ"/>
   <string value="ｙ"/>
   <string value="ｚ"/>
+-->
   <string value="｛"/>
   <string value="｜"/>
   <string value="｝"/>
   <string value="￣"/>
+<!--
   <string value="А"/>
   <string value="Б"/>
   <string value="В"/>
@@ -375,11 +382,14 @@
   <string value="ǜ"/>
   <string value="ü"/>
   <string value="ê"/>
+-->
 <!--  <string value="ɑ"/> -->
+<!-- no glyph in Droid font
   <string value="\u1e3f"/>
   <string value="ń"/>
   <string value="ň"/>
-<!--  <string value="\u01f9"/> -->
+-->
+<!-- no glyph in Droid font <string value="\u01f9"/> -->
 <!--  <string value="ɡ"/> -->
   <string value="ㄅ"/>
   <string value="ㄆ"/>
@@ -418,6 +428,7 @@
   <string value="ㄧ"/>
   <string value="ㄨ"/>
   <string value="ㄩ"/>
+<!--
   <string value="─"/>
   <string value="━"/>
   <string value="│"/>
@@ -711,7 +722,8 @@
   <string value="χ"/>
   <string value="ψ"/>
   <string value="ω"/>
-<!--
+-->
+<!-- no glyph in Droid font
   <string value="\ue78d"/>
   <string value="\ue78e"/>
   <string value="\ue78f"/>
@@ -720,6 +732,7 @@
   <string value="\ue792"/>
   <string value="\ue793"/>
 -->
+<!--
   <string value="︵"/>
   <string value="︶"/>
   <string value="︹"/>
@@ -732,18 +745,23 @@
   <string value="﹂"/>
   <string value="﹃"/>
   <string value="﹄"/>
-<!--
+-->
+<!-- no glyph in Droid font
   <string value="\ue794"/>
   <string value="\ue795"/>
 -->
+<!--
   <string value="︻"/>
   <string value="︼"/>
   <string value="︷"/>
   <string value="︸"/>
   <string value="︱"/>
-<!--  
+-->
+<!--  no glyph in Droid font
   <string value="\ue796"/>
 -->  
+<!--
   <string value="︳"/>
   <string value="︴"/>  
-</keystring>
\ No newline at end of file
+-->
+</keystring>
diff --git a/res/xml/symbols_japan_emoji_list.xml b/res/xml/symbols_japan_emoji_list.xml
deleted file mode 100644
index ce32546..0000000
--- a/res/xml/symbols_japan_emoji_list.xml
+++ /dev/null
@@ -1,825 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2008,2009  OMRON SOFTWARE Co., Ltd.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<!--symbols -->
-<keystring>
-
-<string value="\udbb8\udc00"/>
-<string value="\udbb8\udc01"/>
-<string value="\udbb8\udc02"/>
-<string value="\udbb8\udc03"/>
-<string value="\udbb8\udc04"/>
-<string value="\udbb8\udc05"/>
-<string value="\udbb8\udc06"/>
-<string value="\udbb8\udc07"/>
-<string value="\udbb8\udc08"/>
-<string value="\udbb8\udc09"/>
-<string value="\udbb8\udc0a"/>
-<string value="\udbb8\udc0b"/>
-<string value="\udbb8\udc0c"/>
-<string value="\udbb8\udc0d"/>
-<string value="\udbb8\udc0e"/>
-<string value="\udbb8\udc0f"/>
-<string value="\udbb8\udc10"/>
-<string value="\udbb8\udc11"/>
-<string value="\udbb8\udc12"/>
-<string value="\udbb8\udc13"/>
-<string value="\udbb8\udc14"/>
-<string value="\udbb8\udc15"/>
-<string value="\udbb8\udc16"/>
-<string value="\udbb8\udc17"/>
-<string value="\udbb8\udc18"/>
-<string value="\udbb8\udc19"/>
-<string value="\udbb8\udc1a"/>
-<string value="\udbb8\udc1b"/>
-<string value="\udbb8\udc1c"/>
-<string value="\udbb8\udc1d"/>
-<string value="\udbb8\udc1e"/>
-<string value="\udbb8\udc1f"/>
-<string value="\udbb8\udc20"/>
-<string value="\udbb8\udc21"/>
-<string value="\udbb8\udc22"/>
-<string value="\udbb8\udc23"/>
-<string value="\udbb8\udc24"/>
-<string value="\udbb8\udc25"/>
-<string value="\udbb8\udc26"/>
-<string value="\udbb8\udc27"/>
-<string value="\udbb8\udc28"/>
-<string value="\udbb8\udc29"/>
-<string value="\udbb8\udc2a"/>
-<string value="\udbb8\udc2b"/>
-<string value="\udbb8\udc2c"/>
-<string value="\udbb8\udc2d"/>
-<string value="\udbb8\udc2e"/>
-<string value="\udbb8\udc2f"/>
-<string value="\udbb8\udc30"/>
-<string value="\udbb8\udc31"/>
-<string value="\udbb8\udc32"/>
-<string value="\udbb8\udc33"/>
-<string value="\udbb8\udc34"/>
-<string value="\udbb8\udc35"/>
-<string value="\udbb8\udc36"/>
-<string value="\udbb8\udc37"/>
-<string value="\udbb8\udc38"/>
-<string value="\udbb8\udc39"/>
-<string value="\udbb8\udc3a"/>
-<string value="\udbb8\udc3b"/>
-<string value="\udbb8\udc3c"/>
-<string value="\udbb8\udc3d"/>
-<string value="\udbb8\udc3e"/>
-<string value="\udbb8\udc3f"/>
-<string value="\udbb8\udc40"/>
-<string value="\udbb8\udc41"/>
-<string value="\udbb8\udc42"/>
-<string value="\udbb8\udc43"/>
-<string value="\udbb8\udc44"/>
-<string value="\udbb8\udc45"/>
-<string value="\udbb8\udc46"/>
-<string value="\udbb8\udc47"/>
-<string value="\udbb8\udc48"/>
-<string value="\udbb8\udc49"/>
-<string value="\udbb8\udc4a"/>
-<string value="\udbb8\udc4b"/>
-<string value="\udbb8\udc4c"/>
-<string value="\udbb8\udc4d"/>
-<string value="\udbb8\udc4e"/>
-<string value="\udbb8\udc4f"/>
-<string value="\udbb8\udc50"/>
-<string value="\udbb8\udc51"/>
-<string value="\udbb8\udc52"/>
-<string value="\udbb8\udc53"/>
-<string value="\udbb8\udc54"/>
-<string value="\udbb8\udc55"/>
-<string value="\udbb8\udc56"/>
-<string value="\udbb8\udc57"/>
-<string value="\udbb8\udc58"/>
-<string value="\udbb8\udc59"/>
-<string value="\udbb8\udc5a"/>
-<string value="\udbb8\udc5b"/>
-<string value="\udbb8\udd90"/>
-<string value="\udbb8\udd91"/>
-<string value="\udbb8\udd92"/>
-<string value="\udbb8\udd93"/>
-<string value="\udbb8\udd94"/>
-<string value="\udbb8\udd95"/>
-<string value="\udbb8\udd96"/>
-<string value="\udbb8\udd97"/>
-<string value="\udbb8\udd98"/>
-<string value="\udbb8\udd99"/>
-<string value="\udbb8\udd9a"/>
-<string value="\udbb8\udd9b"/>
-<string value="\udbb8\udd9c"/>
-<string value="\udbb8\udd9d"/>
-<string value="\udbb8\udd9e"/>
-<string value="\udbb8\udd9f"/>
-<string value="\udbb8\udda0"/>
-<string value="\udbb8\udda1"/>
-<string value="\udbb8\udda2"/>
-<string value="\udbb8\udda3"/>
-<string value="\udbb8\udda4"/>
-<string value="\udbb8\udda5"/>
-<string value="\udbb8\udda6"/>
-<string value="\udbb8\udda7"/>
-<string value="\udbb8\udda8"/>
-<string value="\udbb8\udda9"/>
-<string value="\udbb8\uddaa"/>
-<string value="\udbb8\uddab"/>
-<string value="\udbb8\uddac"/>
-<string value="\udbb8\uddad"/>
-<string value="\udbb8\uddae"/>
-<string value="\udbb8\uddaf"/>
-<string value="\udbb8\uddb0"/>
-<string value="\udbb8\uddb1"/>
-<string value="\udbb8\uddb2"/>
-<string value="\udbb8\uddb3"/>
-<string value="\udbb8\uddb4"/>
-<string value="\udbb8\uddb5"/>
-<string value="\udbb8\uddb6"/>
-<string value="\udbb8\uddb7"/>
-<string value="\udbb8\uddb8"/>
-<string value="\udbb8\uddb9"/>
-<string value="\udbb8\uddba"/>
-<string value="\udbb8\uddbb"/>
-<string value="\udbb8\uddbc"/>
-<string value="\udbb8\uddbd"/>
-<string value="\udbb8\uddbe"/>
-<string value="\udbb8\uddbf"/>
-<string value="\udbb8\uddc0"/>
-<string value="\udbb8\uddc1"/>
-<string value="\udbb8\uddc2"/>
-<string value="\udbb8\uddc3"/>
-<string value="\udbb8\uddc4"/>
-<string value="\udbb8\uddc5"/>
-<string value="\udbb8\uddc6"/>
-<string value="\udbb8\uddc7"/>
-<string value="\udbb8\uddc8"/>
-<string value="\udbb8\uddc9"/>
-<string value="\udbb8\uddca"/>
-<string value="\udbb8\uddcb"/>
-<string value="\udbb8\uddcc"/>
-<string value="\udbb8\uddcd"/>
-<string value="\udbb8\uddce"/>
-<string value="\udbb8\uddcf"/>
-<string value="\udbb8\uddd0"/>
-<string value="\udbb8\uddd1"/>
-<string value="\udbb8\uddd2"/>
-<string value="\udbb8\uddd3"/>
-<string value="\udbb8\uddd4"/>
-<string value="\udbb8\uddd5"/>
-<string value="\udbb8\uddd6"/>
-<string value="\udbb8\uddd7"/>
-<string value="\udbb8\uddd8"/>
-<string value="\udbb8\uddd9"/>
-<string value="\udbb8\uddda"/>
-<string value="\udbb8\udddb"/>
-<string value="\udbb8\udddc"/>
-<string value="\udbb8\udddd"/>
-<string value="\udbb8\uddde"/>
-<string value="\udbb8\udddf"/>
-<string value="\udbb8\udde0"/>
-<string value="\udbb8\udde1"/>
-<string value="\udbb8\udde2"/>
-<string value="\udbb8\udde3"/>
-<string value="\udbb8\udf20"/>
-<string value="\udbb8\udf21"/>
-<string value="\udbb8\udf22"/>
-<string value="\udbb8\udf23"/>
-<string value="\udbb8\udf24"/>
-<string value="\udbb8\udf25"/>
-<string value="\udbb8\udf26"/>
-<string value="\udbb8\udf27"/>
-<string value="\udbb8\udf28"/>
-<string value="\udbb8\udf29"/>
-<string value="\udbb8\udf2a"/>
-<string value="\udbb8\udf2b"/>
-<string value="\udbb8\udf2c"/>
-<string value="\udbb8\udf2d"/>
-<string value="\udbb8\udf2e"/>
-<string value="\udbb8\udf2f"/>
-<string value="\udbb8\udf30"/>
-<string value="\udbb8\udf31"/>
-<string value="\udbb8\udf32"/>
-<string value="\udbb8\udf33"/>
-<string value="\udbb8\udf34"/>
-<string value="\udbb8\udf35"/>
-<string value="\udbb8\udf36"/>
-<string value="\udbb8\udf37"/>
-<string value="\udbb8\udf38"/>
-<string value="\udbb8\udf39"/>
-<string value="\udbb8\udf3a"/>
-<string value="\udbb8\udf3b"/>
-<string value="\udbb8\udf3c"/>
-<string value="\udbb8\udf3d"/>
-<string value="\udbb8\udf3e"/>
-<string value="\udbb8\udf3f"/>
-<string value="\udbb8\udf40"/>
-<string value="\udbb8\udf41"/>
-<string value="\udbb8\udf42"/>
-<string value="\udbb8\udf43"/>
-<string value="\udbb8\udf44"/>
-<string value="\udbb8\udf45"/>
-<string value="\udbb8\udf46"/>
-<string value="\udbb8\udf47"/>
-<string value="\udbb8\udf48"/>
-<string value="\udbb8\udf49"/>
-<string value="\udbb8\udf4a"/>
-<string value="\udbb8\udf4b"/>
-<string value="\udbb8\udf4c"/>
-<string value="\udbb8\udf4d"/>
-<string value="\udbb8\udf4e"/>
-<string value="\udbb8\udf4f"/>
-<string value="\udbb8\udf50"/>
-<string value="\udbb8\udf51"/>
-<string value="\udbb8\udf52"/>
-<string value="\udbb8\udf53"/>
-<string value="\udbb8\udf54"/>
-<string value="\udbb8\udf55"/>
-<string value="\udbb8\udf56"/>
-<string value="\udbb8\udf57"/>
-<string value="\udbb8\udf58"/>
-<string value="\udbb8\udf59"/>
-<string value="\udbb8\udf5a"/>
-<string value="\udbb8\udf5b"/>
-<string value="\udbb8\udf5c"/>
-<string value="\udbb8\udf5d"/>
-<string value="\udbb8\udf5e"/>
-<string value="\udbb8\udf5f"/>
-<string value="\udbb8\udf60"/>
-<string value="\udbb8\udf61"/>
-<string value="\udbb8\udf62"/>
-<string value="\udbb8\udf63"/>
-<string value="\udbb8\udf64"/>
-<string value="\udbb8\udf65"/>
-<string value="\udbb8\udf66"/>
-<string value="\udbb8\udf67"/>
-<string value="\udbb8\udf68"/>
-<string value="\udbb8\udf69"/>
-<string value="\udbb9\udcb0"/>
-<string value="\udbb9\udcb1"/>
-<string value="\udbb9\udcb2"/>
-<string value="\udbb9\udcb3"/>
-<string value="\udbb9\udcb4"/>
-<string value="\udbb9\udcb5"/>
-<string value="\udbb9\udcb6"/>
-<string value="\udbb9\udcb7"/>
-<string value="\udbb9\udcb8"/>
-<string value="\udbb9\udcb9"/>
-<string value="\udbb9\udcba"/>
-<string value="\udbb9\udcbb"/>
-<string value="\udbb9\udcbc"/>
-<string value="\udbb9\udcbd"/>
-<string value="\udbb9\udcbe"/>
-<string value="\udbb9\udcbf"/>
-<string value="\udbb9\udcc0"/>
-<string value="\udbb9\udcc1"/>
-<string value="\udbb9\udcc2"/>
-<string value="\udbb9\udcc3"/>
-<string value="\udbb9\udcc4"/>
-<string value="\udbb9\udcc5"/>
-<string value="\udbb9\udcc6"/>
-<string value="\udbb9\udcc7"/>
-<string value="\udbb9\udcc8"/>
-<string value="\udbb9\udcc9"/>
-<string value="\udbb9\udcca"/>
-<string value="\udbb9\udccb"/>
-<string value="\udbb9\udccc"/>
-<string value="\udbb9\udccd"/>
-<string value="\udbb9\udcce"/>
-<string value="\udbb9\udccf"/>
-<string value="\udbb9\udcd0"/>
-<string value="\udbb9\udcd1"/>
-<string value="\udbb9\udcd2"/>
-<string value="\udbb9\udcd3"/>
-<string value="\udbb9\udcd4"/>
-<string value="\udbb9\udcd5"/>
-<string value="\udbb9\udcd6"/>
-<string value="\udbb9\udcd7"/>
-<string value="\udbb9\udcd8"/>
-<string value="\udbb9\udcd9"/>
-<string value="\udbb9\udcda"/>
-<string value="\udbb9\udcdb"/>
-<string value="\udbb9\udcdc"/>
-<string value="\udbb9\udcdd"/>
-<string value="\udbb9\udcde"/>
-<string value="\udbb9\udcdf"/>
-<string value="\udbb9\udce0"/>
-<string value="\udbb9\udce1"/>
-<string value="\udbb9\udce2"/>
-<string value="\udbb9\udce3"/>
-<string value="\udbb9\udce4"/>
-<string value="\udbb9\udce5"/>
-<string value="\udbb9\udce6"/>
-<string value="\udbb9\udce7"/>
-<string value="\udbb9\udce8"/>
-<string value="\udbb9\udce9"/>
-<string value="\udbb9\udcea"/>
-<string value="\udbb9\udceb"/>
-<string value="\udbb9\udcec"/>
-<string value="\udbb9\udced"/>
-<string value="\udbb9\udcee"/>
-<string value="\udbb9\udcef"/>
-<string value="\udbb9\udcf0"/>
-<string value="\udbb9\udcf1"/>
-<string value="\udbb9\udcf2"/>
-<string value="\udbb9\udcf3"/>
-<string value="\udbb9\udcf4"/>
-<string value="\udbb9\udcf5"/>
-<string value="\udbb9\udcf6"/>
-<string value="\udbb9\udcf7"/>
-<string value="\udbb9\udcf8"/>
-<string value="\udbb9\udcf9"/>
-<string value="\udbb9\udcfa"/>
-<string value="\udbb9\udcfb"/>
-<string value="\udbb9\udcfc"/>
-<string value="\udbb9\udcfd"/>
-<string value="\udbb9\udcfe"/>
-<string value="\udbb9\udcff"/>
-<string value="\udbb9\udd00"/>
-<string value="\udbb9\udd01"/>
-<string value="\udbb9\udd02"/>
-<string value="\udbb9\udd03"/>
-<string value="\udbb9\udd04"/>
-<string value="\udbb9\udd05"/>
-<string value="\udbb9\udd06"/>
-<string value="\udbb9\udd07"/>
-<string value="\udbb9\udd08"/>
-<string value="\udbb9\udd09"/>
-<string value="\udbb9\udd0a"/>
-<string value="\udbb9\udd0b"/>
-<string value="\udbb9\udd0c"/>
-<string value="\udbb9\udd0d"/>
-<string value="\udbb9\udd0e"/>
-<string value="\udbb9\udd0f"/>
-<string value="\udbb9\udd10"/>
-<string value="\udbb9\udd11"/>
-<string value="\udbb9\udd12"/>
-<string value="\udbb9\udd13"/>
-<string value="\udbb9\udd14"/>
-<string value="\udbb9\udd15"/>
-<string value="\udbb9\udd16"/>
-<string value="\udbb9\udd17"/>
-<string value="\udbb9\udd18"/>
-<string value="\udbb9\udd19"/>
-<string value="\udbb9\udd1a"/>
-<string value="\udbb9\udd1b"/>
-<string value="\udbb9\udd1c"/>
-<string value="\udbb9\udd1d"/>
-<string value="\udbb9\udd1e"/>
-<string value="\udbb9\udd1f"/>
-<string value="\udbb9\udd20"/>
-<string value="\udbb9\udd21"/>
-<string value="\udbb9\udd22"/>
-<string value="\udbb9\udd23"/>
-<string value="\udbb9\udd24"/>
-<string value="\udbb9\udd25"/>
-<string value="\udbb9\udd26"/>
-<string value="\udbb9\udd27"/>
-<string value="\udbb9\udd28"/>
-<string value="\udbb9\udd29"/>
-<string value="\udbb9\udd2a"/>
-<string value="\udbb9\udd2b"/>
-<string value="\udbb9\udd2c"/>
-<string value="\udbb9\udd2d"/>
-<string value="\udbb9\udd2e"/>
-<string value="\udbb9\udd2f"/>
-<string value="\udbb9\udd30"/>
-<string value="\udbb9\udd31"/>
-<string value="\udbb9\udd32"/>
-<string value="\udbb9\udd33"/>
-<string value="\udbb9\udd34"/>
-<string value="\udbb9\udd35"/>
-<string value="\udbb9\udd36"/>
-<string value="\udbb9\udd37"/>
-<string value="\udbb9\udd38"/>
-<string value="\udbb9\udd39"/>
-<string value="\udbb9\udd3a"/>
-<string value="\udbb9\udd3b"/>
-<string value="\udbb9\udd3c"/>
-<string value="\udbb9\udd3d"/>
-<string value="\udbb9\udd3e"/>
-<string value="\udbb9\udd3f"/>
-<string value="\udbb9\udd40"/>
-<string value="\udbb9\udd41"/>
-<string value="\udbb9\udd42"/>
-<string value="\udbb9\udd43"/>
-<string value="\udbb9\udd44"/>
-<string value="\udbb9\udd45"/>
-<string value="\udbb9\udd46"/>
-<string value="\udbb9\udd47"/>
-<string value="\udbb9\udd48"/>
-<string value="\udbb9\udd49"/>
-<string value="\udbb9\udd4a"/>
-<string value="\udbb9\udd4b"/>
-<string value="\udbb9\udd4c"/>
-<string value="\udbb9\udd4d"/>
-<string value="\udbb9\udd4e"/>
-<string value="\udbb9\udd4f"/>
-<string value="\udbb9\udd50"/>
-<string value="\udbb9\udd51"/>
-<string value="\udbb9\udd52"/>
-<string value="\udbb9\udd53"/>
-<string value="\udbb9\udfd0"/>
-<string value="\udbb9\udfd1"/>
-<string value="\udbb9\udfd2"/>
-<string value="\udbb9\udfd3"/>
-<string value="\udbb9\udfd4"/>
-<string value="\udbb9\udfd5"/>
-<string value="\udbb9\udfd6"/>
-<string value="\udbb9\udfd7"/>
-<string value="\udbb9\udfd8"/>
-<string value="\udbb9\udfd9"/>
-<string value="\udbb9\udfda"/>
-<string value="\udbb9\udfdb"/>
-<string value="\udbb9\udfdc"/>
-<string value="\udbb9\udfdd"/>
-<string value="\udbb9\udfde"/>
-<string value="\udbb9\udfdf"/>
-<string value="\udbb9\udfe0"/>
-<string value="\udbb9\udfe1"/>
-<string value="\udbb9\udfe2"/>
-<string value="\udbb9\udfe3"/>
-<string value="\udbb9\udfe4"/>
-<string value="\udbb9\udfe5"/>
-<string value="\udbb9\udfe6"/>
-<string value="\udbb9\udfe7"/>
-<string value="\udbb9\udfe8"/>
-<string value="\udbb9\udfe9"/>
-<string value="\udbb9\udfea"/>
-<string value="\udbb9\udfeb"/>
-<string value="\udbb9\udfec"/>
-<string value="\udbb9\udfed"/>
-<string value="\udbb9\udfee"/>
-<string value="\udbb9\udfef"/>
-<string value="\udbb9\udff0"/>
-<string value="\udbb9\udff1"/>
-<string value="\udbb9\udff2"/>
-<string value="\udbb9\udff3"/>
-<string value="\udbb9\udff4"/>
-<string value="\udbb9\udff5"/>
-<string value="\udbb9\udff6"/>
-<string value="\udbb9\udff7"/>
-<string value="\udbb9\udff8"/>
-<string value="\udbb9\udff9"/>
-<string value="\udbb9\udffa"/>
-<string value="\udbb9\udffb"/>
-<string value="\udbb9\udffc"/>
-<string value="\udbb9\udffd"/>
-<string value="\udbb9\udffe"/>
-<string value="\udbb9\udfff"/>
-<string value="\udbba\udc00"/>
-<string value="\udbba\udc01"/>
-<string value="\udbba\udc02"/>
-<string value="\udbba\udc03"/>
-<string value="\udbba\udc04"/>
-<string value="\udbba\udc05"/>
-<string value="\udbba\udc06"/>
-<string value="\udbba\udc07"/>
-<string value="\udbba\udc08"/>
-<string value="\udbba\udc09"/>
-<string value="\udbba\udc0a"/>
-<string value="\udbba\udc0b"/>
-<string value="\udbba\udc0c"/>
-<string value="\udbba\udc0d"/>
-<string value="\udbba\udc0e"/>
-<string value="\udbba\udc0f"/>
-<string value="\udbba\udc10"/>
-<string value="\udbba\udc11"/>
-<string value="\udbba\udc12"/>
-<string value="\udbba\udc13"/>
-<string value="\udbba\udc14"/>
-<string value="\udbba\udc15"/>
-<string value="\udbba\udc16"/>
-<string value="\udbba\udc17"/>
-<string value="\udbba\udc18"/>
-<string value="\udbba\udc19"/>
-<string value="\udbba\udc1a"/>
-<string value="\udbba\udc1b"/>
-<string value="\udbba\udc1c"/>
-<string value="\udbba\udc1d"/>
-<string value="\udbba\udc1e"/>
-<string value="\udbba\udc1f"/>
-<string value="\udbba\udc20"/>
-<string value="\udbba\udc21"/>
-<string value="\udbba\udc22"/>
-<string value="\udbba\udc23"/>
-<string value="\udbba\udc24"/>
-<string value="\udbba\udc25"/>
-<string value="\udbba\udc26"/>
-<string value="\udbba\udc27"/>
-<string value="\udbba\udc28"/>
-<string value="\udbba\udc29"/>
-<string value="\udbba\udc2a"/>
-<string value="\udbba\udc2b"/>
-<string value="\udbba\udc2c"/>
-<string value="\udbba\udc2d"/>
-<string value="\udbba\udc2e"/>
-<string value="\udbba\udc2f"/>
-<string value="\udbba\udc30"/>
-<string value="\udbba\udc31"/>
-<string value="\udbba\udc32"/>
-<string value="\udbba\udc33"/>
-<string value="\udbba\udc34"/>
-<string value="\udbba\udc35"/>
-<string value="\udbba\udc36"/>
-<string value="\udbba\udc37"/>
-<string value="\udbba\udc38"/>
-<string value="\udbba\udc39"/>
-<string value="\udbba\udc3a"/>
-<string value="\udbba\udc3b"/>
-<string value="\udbba\udc3c"/>
-<string value="\udbba\udd60"/>
-<string value="\udbba\udd61"/>
-<string value="\udbba\udd62"/>
-<string value="\udbba\udd63"/>
-<string value="\udbba\udd64"/>
-<string value="\udbba\udd65"/>
-<string value="\udbba\udd66"/>
-<string value="\udbba\udd67"/>
-<string value="\udbba\udd68"/>
-<string value="\udbba\udd69"/>
-<string value="\udbba\udd6a"/>
-<string value="\udbba\udd6b"/>
-<string value="\udbba\udd6c"/>
-<string value="\udbba\udd6d"/>
-<string value="\udbba\udd6e"/>
-<string value="\udbba\udd6f"/>
-<string value="\udbba\udd70"/>
-<string value="\udbba\udd71"/>
-<string value="\udbba\udd72"/>
-<string value="\udbba\udd73"/>
-<string value="\udbba\udd74"/>
-<string value="\udbba\udd75"/>
-<string value="\udbba\udd76"/>
-<string value="\udbba\udd77"/>
-<string value="\udbba\udd78"/>
-<string value="\udbba\udd79"/>
-<string value="\udbba\udd7a"/>
-<string value="\udbba\udd7b"/>
-<string value="\udbba\udd7c"/>
-<string value="\udbba\udd7d"/>
-<string value="\udbba\udd7e"/>
-<string value="\udbba\udd7f"/>
-<string value="\udbba\udd80"/>
-<string value="\udbba\udd81"/>
-<string value="\udbba\udd82"/>
-<string value="\udbba\udd83"/>
-<string value="\udbba\udd84"/>
-<string value="\udbba\udd85"/>
-<string value="\udbba\udd86"/>
-<string value="\udbba\udd87"/>
-<string value="\udbba\udd88"/>
-<string value="\udbba\udef0"/>
-<string value="\udbba\udef1"/>
-<string value="\udbba\udef2"/>
-<string value="\udbba\udef3"/>
-<string value="\udbba\udef4"/>
-<string value="\udbba\udef5"/>
-<string value="\udbba\udef6"/>
-<string value="\udbba\udef7"/>
-<string value="\udbba\udef8"/>
-<string value="\udbba\udef9"/>
-<string value="\udbba\udefa"/>
-<string value="\udbba\udefb"/>
-<string value="\udbba\udefc"/>
-<string value="\udbba\udefd"/>
-<string value="\udbba\udefe"/>
-<string value="\udbba\udeff"/>
-<string value="\udbba\udf00"/>
-<string value="\udbba\udf01"/>
-<string value="\udbba\udf02"/>
-<string value="\udbba\udf03"/>
-<string value="\udbba\udf04"/>
-<string value="\udbba\udf05"/>
-<string value="\udbba\udf06"/>
-<string value="\udbba\udf07"/>
-<string value="\udbba\udf08"/>
-<string value="\udbba\udf09"/>
-<string value="\udbba\udf0a"/>
-<string value="\udbba\udf0b"/>
-<string value="\udbba\udf0c"/>
-<string value="\udbba\udf0d"/>
-<string value="\udbba\udf0e"/>
-<string value="\udbba\udf0f"/>
-<string value="\udbba\udf10"/>
-<string value="\udbba\udf11"/>
-<string value="\udbba\udf12"/>
-<string value="\udbba\udf13"/>
-<string value="\udbba\udf14"/>
-<string value="\udbba\udf15"/>
-<string value="\udbba\udf16"/>
-<string value="\udbba\udf17"/>
-<string value="\udbba\udf18"/>
-<string value="\udbba\udf19"/>
-<string value="\udbba\udf1a"/>
-<string value="\udbba\udf1b"/>
-<string value="\udbba\udf1c"/>
-<string value="\udbba\udf1d"/>
-<string value="\udbba\udf1e"/>
-<string value="\udbba\udf1f"/>
-<string value="\udbba\udf20"/>
-<string value="\udbba\udf21"/>
-<string value="\udbba\udf22"/>
-<string value="\udbba\udf23"/>
-<string value="\udbba\udf24"/>
-<string value="\udbba\udf25"/>
-<string value="\udbba\udf26"/>
-<string value="\udbba\udf27"/>
-<string value="\udbba\udf28"/>
-<string value="\udbba\udf29"/>
-<string value="\udbba\udf2a"/>
-<string value="\udbba\udf2b"/>
-<string value="\udbba\udf2c"/>
-<string value="\udbba\udf2d"/>
-<string value="\udbba\udf2e"/>
-<string value="\udbba\udf2f"/>
-<string value="\udbba\udf30"/>
-<string value="\udbba\udf31"/>
-<string value="\udbba\udf32"/>
-<string value="\udbba\udf33"/>
-<string value="\udbba\udf34"/>
-<string value="\udbba\udf35"/>
-<string value="\udbba\udf36"/>
-<string value="\udbba\udf37"/>
-<string value="\udbba\udf38"/>
-<string value="\udbba\udf39"/>
-<string value="\udbba\udf3a"/>
-<string value="\udbba\udf3b"/>
-<string value="\udbba\udf3c"/>
-<string value="\udbba\udf3d"/>
-<string value="\udbba\udf3e"/>
-<string value="\udbba\udf3f"/>
-<string value="\udbba\udf40"/>
-<string value="\udbba\udf41"/>
-<string value="\udbba\udf42"/>
-<string value="\udbba\udf43"/>
-<string value="\udbba\udf44"/>
-<string value="\udbba\udf45"/>
-<string value="\udbba\udf46"/>
-<string value="\udbba\udf47"/>
-<string value="\udbba\udf48"/>
-<string value="\udbba\udf49"/>
-<string value="\udbba\udf4a"/>
-<string value="\udbba\udf4b"/>
-<string value="\udbba\udf4c"/>
-<string value="\udbba\udf4d"/>
-<string value="\udbba\udf4e"/>
-<string value="\udbba\udf4f"/>
-<string value="\udbba\udf50"/>
-<string value="\udbba\udf51"/>
-<string value="\udbba\udf52"/>
-<string value="\udbba\udf53"/>
-<string value="\udbba\udf54"/>
-<string value="\udbba\udf55"/>
-<string value="\udbba\udf56"/>
-<string value="\udbba\udf57"/>
-<string value="\udbba\udf58"/>
-<string value="\udbba\udf59"/>
-<string value="\udbba\udf5a"/>
-<string value="\udbba\udf5b"/>
-<string value="\udbba\udf5c"/>
-<string value="\udbba\udf5d"/>
-<string value="\udbba\udf5e"/>
-<string value="\udbba\udf5f"/>
-<string value="\udbba\udf60"/>
-<string value="\udbba\udf61"/>
-<string value="\udbba\udf62"/>
-<string value="\udbba\udf63"/>
-<string value="\udbba\udf64"/>
-<string value="\udbba\udf65"/>
-<string value="\udbba\udf66"/>
-<string value="\udbba\udf67"/>
-<string value="\udbba\udf68"/>
-<string value="\udbba\udf69"/>
-<string value="\udbba\udf6a"/>
-<string value="\udbba\udf6b"/>
-<string value="\udbba\udf6c"/>
-<string value="\udbba\udf6d"/>
-<string value="\udbba\udf6e"/>
-<string value="\udbba\udf6f"/>
-<string value="\udbba\udf70"/>
-<string value="\udbba\udf71"/>
-<string value="\udbba\udf72"/>
-<string value="\udbba\udf73"/>
-<string value="\udbba\udf74"/>
-<string value="\udbba\udf75"/>
-<string value="\udbba\udf76"/>
-<string value="\udbba\udf77"/>
-<string value="\udbba\udf78"/>
-<string value="\udbba\udf79"/>
-<string value="\udbba\udf7a"/>
-<string value="\udbba\udf7b"/>
-<string value="\udbba\udf7c"/>
-<string value="\udbba\udf7d"/>
-<string value="\udbba\udf7e"/>
-<string value="\udbba\udf7f"/>
-<string value="\udbba\udf80"/>
-<string value="\udbba\udf81"/>
-<string value="\udbba\udf82"/>
-<string value="\udbba\udf83"/>
-<string value="\udbba\udf84"/>
-<string value="\udbba\udf85"/>
-<string value="\udbba\udf86"/>
-<string value="\udbba\udf87"/>
-<string value="\udbba\udf88"/>
-<string value="\udbba\udf89"/>
-<string value="\udbba\udf8a"/>
-<string value="\udbba\udf8b"/>
-<string value="\udbba\udf8c"/>
-<string value="\udbba\udf8d"/>
-<string value="\udbba\udf8e"/>
-<string value="\udbba\udf8f"/>
-<string value="\udbba\udf90"/>
-<string value="\udbba\udf91"/>
-<string value="\udbba\udf92"/>
-<string value="\udbba\udf93"/>
-<string value="\udbba\udf94"/>
-<string value="\udbba\udf95"/>
-<string value="\udbba\udf96"/>
-<string value="\udbba\udf97"/>
-<string value="\udbba\udf98"/>
-<string value="\udbba\udf99"/>
-<string value="\udbba\udf9a"/>
-<string value="\udbba\udf9b"/>
-<string value="\udbba\udf9c"/>
-<string value="\udbba\udf9d"/>
-<string value="\udbba\udf9e"/>
-<string value="\udbba\udf9f"/>
-<string value="\udbba\udfa0"/>
-<string value="\udbba\udfa1"/>
-<string value="\udbba\udfa2"/>
-<string value="\udbbb\ude10"/>
-<string value="\udbbb\ude11"/>
-<string value="\udbbb\ude12"/>
-<string value="\udbbb\ude13"/>
-<string value="\udbbb\ude14"/>
-<string value="\udbbb\ude15"/>
-<string value="\udbbb\ude16"/>
-<string value="\udbbb\ude17"/>
-<string value="\udbbb\ude18"/>
-<string value="\udbbb\ude19"/>
-<string value="\udbbb\ude1a"/>
-<string value="\udbbb\ude1b"/>
-<string value="\udbbb\ude1c"/>
-<string value="\udbbb\ude1d"/>
-<string value="\udbbb\ude1e"/>
-<string value="\udbbb\ude1f"/>
-<string value="\udbbb\ude20"/>
-<string value="\udbbb\ude21"/>
-<string value="\udbbb\ude22"/>
-<string value="\udbbb\ude23"/>
-<string value="\udbbb\ude24"/>
-<string value="\udbbb\ude25"/>
-<string value="\udbbb\ude26"/>
-<string value="\udbbb\ude27"/>
-<string value="\udbbb\ude28"/>
-<string value="\udbbb\ude29"/>
-<string value="\udbbb\ude2a"/>
-<string value="\udbbb\ude2b"/>
-<string value="\udbbb\ude2c"/>
-<string value="\udbbb\ude2d"/>
-<string value="\udbbb\ude2e"/>
-<string value="\udbbb\ude2f"/>
-<string value="\udbbb\ude30"/>
-<string value="\udbbb\ude31"/>
-<string value="\udbbb\ude32"/>
-<string value="\udbbb\ude33"/>
-<string value="\udbbb\ude40"/>
-<string value="\udbbb\ude41"/>
-<string value="\udbbb\ude42"/>
-<string value="\udbbb\ude43"/>
-<string value="\udbbb\ude44"/>
-<string value="\udbbb\ude45"/>
-<string value="\udbbb\ude46"/>
-<string value="\udbbb\ude47"/>
-<string value="\udbbb\ude48"/>
-<string value="\udbbb\ude49"/>
-<string value="\udbbb\ude4a"/>
-<string value="\udbbb\ude70"/>
-<string value="\udbbb\ude71"/>
-<string value="\udbbb\ude72"/>
-<string value="\udbbb\ude73"/>
-<string value="\udbbb\ude74"/>
-<string value="\udbbb\ude75"/>
-<string value="\udbbb\ude76"/>
-<string value="\udbbb\ude77"/>
-<string value="\udbbb\ude78"/>
-<string value="\udbbb\ude79"/>
-<string value="\udbbb\ude7a"/>
-<string value="\udbbb\ude7b"/>
-<string value="\udbbb\ude7c"/>
-<string value="\udbbb\ude7d"/>
-<string value="\udbbb\udea0"/>
-</keystring>
diff --git a/src/jp/co/omronsoft/openwnn/CandidateFilter.java b/src/jp/co/omronsoft/openwnn/CandidateFilter.java
index f3dd55a..993aef1 100644
--- a/src/jp/co/omronsoft/openwnn/CandidateFilter.java
+++ b/src/jp/co/omronsoft/openwnn/CandidateFilter.java
@@ -16,9 +16,6 @@
 
 package jp.co.omronsoft.openwnn;
 
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
 /**
  * The filter class for candidates.
  * This class is used for filtering candidates by {link WnnEngine}.
@@ -29,42 +26,30 @@
 public class CandidateFilter {
     /** Filtering pattern (No filter) */
     public static final int FILTER_NONE = 0x0;
-    /** Filtering pattern (Emoji filter) */
-    public static final int FILTER_EMOJI = 0x1;
-
-    /** Regular expression pattern for emoji */
-    private static final Pattern PATTERN_EMOJI = Pattern.compile("[\uDBB8\uDBB9\uDBBA\uDBBB]");
+    /** Filtering pattern (Non ASCII) */
+    public static final int FILTER_NON_ASCII = 0x2;
 
     /** Current filter type */
-    private int mFilter = 0;
+    public int filter = 0;
 
     /**
-     * Set specified filter type.
-     * 
-     * @param filter    The filter type
-     * @see jp.co.omronsoft.openwnn.CandidateFilter#FILTER_NONE
-     * @see jp.co.omronsoft.openwnn.CandidateFilter#FILTER_EMOJI
-     */
-    public void setFilter(int filter) {
-        mFilter = filter;
-    }
-    
-    /**
      * Checking whether a specified word is filtered.
      * 
      * @param word      A word
      * @return          {@code true} if the word is allowed; {@code false} if the word is denied.
      */
     public boolean isAllowed(WnnWord word) {
-        if (mFilter == 0) {
+        if (filter == 0) {
             return true;
         }
-        if ((mFilter & FILTER_EMOJI) != 0) {
-            Matcher m = PATTERN_EMOJI.matcher(word.candidate);
-            if (m.matches()) {
-                return false;
+        if ((filter & FILTER_NON_ASCII) != 0) {
+            String str = word.candidate;
+            for (int i = 0; i < str.length(); i++) {
+                if (str.charAt(i) < 0x20 || 0x7E < str.charAt(i)) {
+                    return false;
+                }
             }
-        }       
+        }
         return true;
     }
 }
diff --git a/src/jp/co/omronsoft/openwnn/CandidateViewButton.java b/src/jp/co/omronsoft/openwnn/CandidateViewButton.java
new file mode 100644
index 0000000..7ede44f
--- /dev/null
+++ b/src/jp/co/omronsoft/openwnn/CandidateViewButton.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2008,2009  OMRON SOFTWARE Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package jp.co.omronsoft.openwnn;
+
+import android.widget.Button;
+import android.view.MotionEvent;
+import android.view.View;
+import android.graphics.drawable.Drawable;
+import android.util.AttributeSet;
+import android.content.Context;
+
+/** 
+ * The button for the candidate-view
+ * @author Copyright (C) 2009, OMRON SOFTWARE CO., LTD.  All Rights Reserved.
+ */
+public class CandidateViewButton extends Button {
+
+    /** The state of up */
+    private int[] mUpState;
+
+    /** Constructor */
+    public CandidateViewButton(Context context) {
+        super(context);
+    }
+
+    /** Constructor */
+    public CandidateViewButton(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    /** @see android.view.View#onTouchEvent */
+    public boolean onTouchEvent(MotionEvent me) {
+        /* for changing the button on CandidateView when it is pressed. */
+
+        boolean ret = super.onTouchEvent(me);
+        Drawable d = getBackground();
+
+        switch (me.getAction()) {
+        case MotionEvent.ACTION_DOWN:
+            mUpState = d.getState();
+            d.setState(View.PRESSED_ENABLED_SELECTED_WINDOW_FOCUSED_STATE_SET);
+            break;
+        case MotionEvent.ACTION_UP:
+        default:
+            d.setState(mUpState);
+            break;
+        }
+
+        return ret;
+    }
+}
diff --git a/src/jp/co/omronsoft/openwnn/DefaultSoftKeyboard.java b/src/jp/co/omronsoft/openwnn/DefaultSoftKeyboard.java
index 9b72074..0fa7e31 100644
--- a/src/jp/co/omronsoft/openwnn/DefaultSoftKeyboard.java
+++ b/src/jp/co/omronsoft/openwnn/DefaultSoftKeyboard.java
@@ -20,7 +20,6 @@
 import android.view.ViewGroup;
 import android.view.inputmethod.EditorInfo;
 import android.widget.TextView;
-import android.graphics.Typeface;
 import android.inputmethodservice.Keyboard;
 import android.inputmethodservice.KeyboardView;
 import android.content.SharedPreferences;
@@ -517,7 +516,9 @@
     /** @see jp.co.omronsoft.openwnn.InputViewManager#initView */
     public View initView(OpenWnn parent, int width, int height) {
         mWnn = parent;
-        mDisplayMode = (width == 320)? PORTRAIT : LANDSCAPE;
+        mDisplayMode = 
+            (parent.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE)
+            ? LANDSCAPE : PORTRAIT;
 
         /*
          * create keyboards & the view.
@@ -756,4 +757,20 @@
         mHardKeyboardHidden = hidden;
     }
 
+    /**
+     * Get current keyboard view.
+     */
+    public View getKeyboardView() {
+        return mKeyboardView;
+    }
+
+    /**
+     * Reset the current keyboard
+     */
+    public void resetCurrentKeyboard() {
+        closing();
+        Keyboard keyboard = mCurrentKeyboard;
+        mCurrentKeyboard = null;
+        changeKeyboard(keyboard);
+    }
 }
diff --git a/src/jp/co/omronsoft/openwnn/EN/DefaultSoftKeyboardEN.java b/src/jp/co/omronsoft/openwnn/EN/DefaultSoftKeyboardEN.java
index fd8667d..4cdcc9a 100644
--- a/src/jp/co/omronsoft/openwnn/EN/DefaultSoftKeyboardEN.java
+++ b/src/jp/co/omronsoft/openwnn/EN/DefaultSoftKeyboardEN.java
@@ -22,6 +22,7 @@
 import android.view.KeyEvent;
 import android.view.View;
 import android.view.inputmethod.EditorInfo;
+import android.view.inputmethod.InputConnection;
 
 import android.util.Log;
 
@@ -95,8 +96,13 @@
      * @return 		state ID of the shift key (0:off, 1:on)
      */
     private int getShiftKeyState(EditorInfo editor) {
-        int caps = mWnn.getCurrentInputConnection().getCursorCapsMode(editor.inputType);
-        return (caps == 0) ? 0 : 1;
+        InputConnection connection = mWnn.getCurrentInputConnection();
+        if (connection != null) {
+            int caps = connection.getCursorCapsMode(editor.inputType);
+            return (caps == 0) ? 0 : 1;
+        } else {
+            return 0;
+        }
     }
 	
     /**
@@ -124,7 +130,6 @@
     	mCurrentKeyboardType = KEYBOARD_QWERTY;
     	mShiftOn             = KEYBOARD_SHIFT_OFF;
     	mCurrentKeyMode      = KEYMODE_EN_ALPHABET;
-    	mDisplayMode         = (width == 320)? PORTRAIT : LANDSCAPE;
 
     	Keyboard kbd = mKeyboard[mCurrentLanguage][mDisplayMode][mCurrentKeyboardType][mShiftOn][mCurrentKeyMode][0];
     	if (kbd == null) {
diff --git a/src/jp/co/omronsoft/openwnn/EN/KeyboardListPreferenceEN.java b/src/jp/co/omronsoft/openwnn/EN/KeyboardListPreferenceEN.java
index 35fa70f..4bcadaf 100644
--- a/src/jp/co/omronsoft/openwnn/EN/KeyboardListPreferenceEN.java
+++ b/src/jp/co/omronsoft/openwnn/EN/KeyboardListPreferenceEN.java
@@ -36,7 +36,7 @@
         this(context, null);
     }
 
-    /** see android.preference.DialogPreference#onDialogClosed */
+    /** @see android.preference.DialogPreference#onDialogClosed */
     @Override protected void onDialogClosed(boolean positiveResult) {
     	super.onDialogClosed(positiveResult);
 
diff --git a/src/jp/co/omronsoft/openwnn/EN/OpenWnnEngineEN.java b/src/jp/co/omronsoft/openwnn/EN/OpenWnnEngineEN.java
index 17d6886..4a71690 100644
--- a/src/jp/co/omronsoft/openwnn/EN/OpenWnnEngineEN.java
+++ b/src/jp/co/omronsoft/openwnn/EN/OpenWnnEngineEN.java
@@ -21,7 +21,6 @@
 
 import jp.co.omronsoft.openwnn.*;
 import android.content.SharedPreferences;
-import android.util.Log;
 
 /**
  * The OpenWnn engine class for English IME.
diff --git a/src/jp/co/omronsoft/openwnn/EN/TutorialEN.java b/src/jp/co/omronsoft/openwnn/EN/TutorialEN.java
new file mode 100644
index 0000000..cb2f1d8
--- /dev/null
+++ b/src/jp/co/omronsoft/openwnn/EN/TutorialEN.java
@@ -0,0 +1,304 @@
+/*
+ * Copyright (C) 2008,2009  OMRON SOFTWARE Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * Copyright (C) 2008-2009 Google Inc.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package jp.co.omronsoft.openwnn.EN;
+
+import jp.co.omronsoft.openwnn.*;
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.drawable.Drawable;
+import android.os.Handler;
+import android.os.Message;
+import android.text.Layout;
+import android.text.SpannableStringBuilder;
+import android.text.StaticLayout;
+import android.text.Spanned;
+import android.text.style.ImageSpan;
+import android.text.style.DynamicDrawableSpan;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.View.OnTouchListener;
+import android.widget.PopupWindow;
+import android.widget.TextView;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class TutorialEN implements OnTouchListener {
+    
+    private List<Bubble> mBubbles = new ArrayList<Bubble>();
+    private View mInputView;
+    private OpenWnnEN mIme;
+    private int[] mLocation = new int[2];
+    private static final int MSG_SHOW_BUBBLE = 0;
+    
+    private int mBubbleIndex;
+    private boolean mEnableKeyTouch = false;
+    
+    Handler mHandler = new Handler() {
+        @Override
+        public void handleMessage(Message msg) {
+            switch (msg.what) {
+                case MSG_SHOW_BUBBLE:
+                    Bubble bubba = (Bubble) msg.obj;
+                    bubba.show(mLocation[0], mLocation[1]);
+                    break;
+            }
+        }
+    };
+
+    class Bubble {
+        Drawable bubbleBackground;
+        int x;
+        int y;
+        int width;
+        int gravity;
+        CharSequence text;
+        boolean dismissOnTouch;
+        boolean dismissOnClose;
+        PopupWindow window;
+        TextView textView;
+        View inputView;
+
+        Bubble(Context context, View inputView,
+                int backgroundResource, int bx, int by, int description, int guide) {
+
+            CharSequence text = context.getResources().getText(description);
+            init(context, inputView, backgroundResource, bx, by, text, guide, false);
+        }
+
+        Bubble(Context context, View inputView, int backgroundResource, int bx, int by,
+               CharSequence description, int guide, boolean leftAlign) {
+            init(context, inputView, backgroundResource, bx, by, description, guide, leftAlign);
+        }
+        
+        void init(Context context, View inputView, int backgroundResource,
+                  int bx, int by, CharSequence description, int guide, boolean leftAlign) {
+            bubbleBackground = context.getResources().getDrawable(backgroundResource);
+            x = bx;
+            y = by;
+            width = (int) (inputView.getWidth() * 0.9);
+            this.gravity = Gravity.TOP | Gravity.LEFT;
+            text = new SpannableStringBuilder()
+                .append(description)
+                .append("\n") 
+                .append(context.getResources().getText(guide));
+            this.dismissOnTouch = true;
+            this.dismissOnClose = false;
+            this.inputView = inputView;
+            window = new PopupWindow(context);
+            window.setBackgroundDrawable(null);
+            LayoutInflater inflate =
+                (LayoutInflater) context
+                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+            textView = (TextView) inflate.inflate(R.layout.bubble_text, null);
+            textView.setBackgroundDrawable(bubbleBackground);
+            textView.setText(text);
+            if (leftAlign) {
+                textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
+            }
+            window.setContentView(textView);
+            window.setFocusable(false);
+            window.setTouchable(true);
+            window.setOutsideTouchable(false);
+        }
+
+        private int chooseSize(PopupWindow pop, View parentView, CharSequence text, TextView tv) {
+            int wid = tv.getPaddingLeft() + tv.getPaddingRight();
+            int ht = tv.getPaddingTop() + tv.getPaddingBottom();
+
+            /*
+             * Figure out how big the text would be if we laid it out to the
+             * full width of this view minus the border.
+             */
+            int cap = width - wid;
+
+            Layout l = new StaticLayout(text, tv.getPaint(), cap,
+                                        Layout.Alignment.ALIGN_NORMAL, 1, 0, true);
+            float max = 0;
+            for (int i = 0; i < l.getLineCount(); i++) {
+                max = Math.max(max, l.getLineWidth(i));
+            }
+
+            /*
+             * Now set the popup size to be big enough for the text plus the border.
+             */
+            pop.setWidth(width);
+            pop.setHeight(ht + l.getHeight());
+            return l.getHeight();
+        }
+
+        void show(int offx, int offy) {
+            int textHeight = chooseSize(window, inputView, text, textView);
+            offy -= textView.getPaddingTop() + textHeight;
+            if (inputView.getVisibility() == View.VISIBLE 
+                    && inputView.getWindowVisibility() == View.VISIBLE) {
+                try {
+                    if ((gravity & Gravity.BOTTOM) == Gravity.BOTTOM) offy -= window.getHeight();
+                    if ((gravity & Gravity.RIGHT) == Gravity.RIGHT) offx -= window.getWidth();
+                    textView.setOnTouchListener(new View.OnTouchListener() {
+                        public boolean onTouch(View view, MotionEvent me) {
+                            boolean ret = !mEnableKeyTouch;
+                            switch (me.getAction()) {
+                            case MotionEvent.ACTION_UP:
+                                if (mBubbleIndex >= mBubbles.size()) {
+                                    mInputView.setOnTouchListener(null);
+                                } else {
+                                    TutorialEN.this.next();
+                                }
+                                break;
+                            default:
+                                break;
+                            }
+                            return ret;
+                        }
+                    });
+                    window.showAtLocation(inputView, Gravity.NO_GRAVITY, x + offx, y + offy);
+                } catch (Exception e) {
+                }
+            }
+        }
+        
+        void hide() {
+            if (window.isShowing()) {
+                textView.setOnTouchListener(null);
+                window.dismiss();
+            }
+        }
+        
+        boolean isShowing() {
+            return window.isShowing();
+        }
+    }
+
+    /** Constructor */
+    public TutorialEN(OpenWnnEN ime, View inputView, DefaultSoftKeyboardEN inputManager) {
+        mInputView = inputView;
+        mIme = ime;
+
+        Context context = inputView.getContext();
+        int inputWidth = inputView.getWidth();
+        Resources r = inputView.getContext().getResources();
+        final int x = inputWidth / 20;
+        r.getDimensionPixelOffset(R.dimen.bubble_pointer_offset);
+
+        SpannableStringBuilder spannable = new SpannableStringBuilder();
+        Bubble button;
+
+        spannable.clear();
+        spannable.append(r.getText(R.string.tip_en_to_open_keyboard));
+        button = new Bubble(context, inputView, 
+                R.drawable.dialog_bubble, x, 0, 
+                spannable, R.string.touch_to_continue, false);
+        mBubbles.add(button);
+
+        spannable.clear();
+        spannable.append(r.getText(R.string.tip_en_to_close_keyboard));
+ 
+        setSpan(spannable, "\u2190", R.drawable.tutorial_back);
+ 
+        button = new Bubble(context, inputView, 
+                R.drawable.dialog_bubble, x, 0, 
+                spannable, R.string.touch_to_continue, false);
+        mBubbles.add(button);
+
+        button = new Bubble(context, inputView, 
+                R.drawable.dialog_bubble, x, 0, 
+                R.string.tip_en_end_of_tutorial, R.string.touch_to_finish);
+        mBubbles.add(button);
+    }
+
+    private void setSpan(SpannableStringBuilder spannable, String marker, int imageResourceId) {
+        String text = spannable.toString();
+        int target = text.indexOf(marker);
+        while (0 <= target) {
+            ImageSpan span = new ImageSpan(mIme, imageResourceId,
+                    DynamicDrawableSpan.ALIGN_BOTTOM);
+            spannable.setSpan(span, target, target + 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
+            target = text.indexOf(marker, target + 1);
+        }
+    }
+    
+    public void start() {
+        mInputView.getLocationInWindow(mLocation);
+        mBubbleIndex = -1;
+        mInputView.setOnTouchListener(this);
+        next();
+    }
+
+    boolean next() {
+        if (mBubbleIndex >= 0) {
+            if (!mBubbles.get(mBubbleIndex).isShowing()) {
+                return true;
+            }
+            for (int i = 0; i <= mBubbleIndex; i++) {
+                mBubbles.get(i).hide();
+            }
+        }
+        mBubbleIndex++;
+        if (mBubbleIndex >= mBubbles.size()) {
+            mEnableKeyTouch = true;
+            mIme.sendDownUpKeyEvents(-1);
+            mIme.tutorialDone();
+            return false;
+        }
+
+        mHandler.sendMessageDelayed(
+                mHandler.obtainMessage(MSG_SHOW_BUBBLE, mBubbles.get(mBubbleIndex)), 500);
+        return true;
+    }
+    
+    void hide() {
+        for (int i = 0; i < mBubbles.size(); i++) {
+            mBubbles.get(i).hide();
+        }
+        mInputView.setOnTouchListener(null);
+    }
+
+    public boolean close() {
+        mHandler.removeMessages(MSG_SHOW_BUBBLE);
+        hide();
+        return true;
+    }
+
+    public boolean onTouch(View v, MotionEvent event) {
+        boolean ret = !mEnableKeyTouch;
+        if (event.getAction() == MotionEvent.ACTION_UP) {
+            if (mBubbleIndex >= mBubbles.size()) {
+                mInputView.setOnTouchListener(null);
+            }
+        }
+        return ret;
+    }
+}
diff --git a/src/jp/co/omronsoft/openwnn/EN/UserDictionaryToolsListEN.java b/src/jp/co/omronsoft/openwnn/EN/UserDictionaryToolsListEN.java
index bbcb972..483b25a 100644
--- a/src/jp/co/omronsoft/openwnn/EN/UserDictionaryToolsListEN.java
+++ b/src/jp/co/omronsoft/openwnn/EN/UserDictionaryToolsListEN.java
@@ -17,10 +17,9 @@
 package jp.co.omronsoft.openwnn.EN;
 
 import jp.co.omronsoft.openwnn.*;
-import jp.co.omronsoft.openwnn.UserDictionaryToolsEdit;
-import jp.co.omronsoft.openwnn.UserDictionaryToolsList;
 import android.view.View;
 import android.view.Window;
+import java.util.Comparator;
 
 /**
  * The user dictionary tool class for English IME.
@@ -60,4 +59,16 @@
         }
         return false;
     }
+
+    /** @see jp.co.omronsoft.openwnn.UserDictionaryToolsList#getComparator */
+    @Override protected Comparator<WnnWord> getComparator() {
+    	return new ListComparatorEN();
+    }
+
+    /** Comparator class for sorting the list of English user dictionary */
+    protected class ListComparatorEN implements Comparator<WnnWord>{
+        public int compare(WnnWord word1, WnnWord word2) {
+            return word1.stroke.compareTo(word2.stroke);
+        };
+    }
 }
diff --git a/src/jp/co/omronsoft/openwnn/JAJP/DefaultSoftKeyboardJAJP.java b/src/jp/co/omronsoft/openwnn/JAJP/DefaultSoftKeyboardJAJP.java
index 6941fda..de9f431 100644
--- a/src/jp/co/omronsoft/openwnn/JAJP/DefaultSoftKeyboardJAJP.java
+++ b/src/jp/co/omronsoft/openwnn/JAJP/DefaultSoftKeyboardJAJP.java
@@ -19,19 +19,14 @@
 import jp.co.omronsoft.openwnn.*;
 import android.view.KeyEvent;
 import android.view.inputmethod.EditorInfo;
+import android.view.inputmethod.InputConnection;
 import android.inputmethodservice.Keyboard;
-import android.inputmethodservice.Keyboard.Key;
-import android.inputmethodservice.KeyboardView;
-import android.widget.Toast;
-import android.provider.Settings;
 import android.util.Log;
 import android.view.View;
-import android.content.Context;
 import android.content.SharedPreferences;
-
 import java.util.HashMap;
-import java.util.List;
 import java.util.Locale;
+import java.util.List;
 
 /**
  * The default Software Keyboard class for Japanese IME.
@@ -84,6 +79,9 @@
     /** Definition for {@code mInputType} (commit instantly) */
     private static final int INPUT_TYPE_INSTANT = 2;
 
+    /** Max key number of the 12 key keyboard (depends on the definition of keyboards) */
+    private static final int KEY_NUMBER_12KEY = 20;
+
     /** Toggle cycle table for full-width HIRAGANA */
     private static final String[][] JP_FULL_HIRAGANA_CYCLE_TABLE = {
         {"\u3042", "\u3044", "\u3046", "\u3048", "\u304a", "\u3041", "\u3043", "\u3045", "\u3047", "\u3049"},
@@ -264,6 +262,12 @@
     /** The constant for mFixedKeyMode. It means that input mode is not fixed. */
     private static final int INVALID_KEYMODE = -1;
 
+    /** KeyIndex of "Moji" key on 12 keyboard (depends on the definition of keyboards) */
+    private static final int KEY_INDEX_CHANGE_MODE_12KEY = 15;
+    
+    /** KeyIndex of "Moji" key on QWERTY keyboard (depends on the definition of keyboards) */
+    private static final int KEY_INDEX_CHANGE_MODE_QWERTY = 29;
+
     /** Type of input mode */
     private int mInputType = INPUT_TYPE_TOGGLE;
 
@@ -277,7 +281,7 @@
     private char[] mCurrentInstantTable = null;
 
     /** Input mode that is not able to be changed. If ENABLE_CHANGE_KEYMODE is set, input mode can change. */
-    private int mFixedKeyMode = INVALID_KEYMODE;
+    private int[] mLimitedKeyMode = null;
 
     /** Input mode that is given the first priority. If ENABLE_CHANGE_KEYMODE is set, input mode can change. */
     private int mPreferenceKeyMode = INVALID_KEYMODE;
@@ -288,6 +292,18 @@
     /** Auto caps mode */
     private boolean mEnableAutoCaps = true;
 
+    /** PopupResId of "Moji" key (this is used for canceling long-press) */
+    private int mPopupResId = 0;
+    
+    /** Whether the InputType is null */
+    private boolean mIsInputTypeNull = false;
+    
+    /** {@code SharedPreferences} for save the keyboard type */
+    private SharedPreferences.Editor mPrefEditor = null;
+    
+    /** "Moji" key (this is used for canceling long-press) */
+    private Keyboard.Key mChangeModeKey = null;
+    
 
     /** Default constructor */
     public DefaultSoftKeyboardJAJP() {
@@ -304,7 +320,7 @@
         mKeyboard = new Keyboard[3][2][4][2][8][2];
 
         if (mHardKeyboardHidden) {
-        	/* Create the suitable keyboard object */
+            /* Create the suitable keyboard object */
             if (mDisplayMode == DefaultSoftKeyboard.PORTRAIT) {
                 createKeyboardsPortrait(parent);
             } else {
@@ -325,7 +341,8 @@
     }
 
     /**
-     * Commit the pre-edit string for committing operation that is not explicit (ex. when a candidate is selected)
+     * Commit the pre-edit string for committing operation that is not explicit
+     * (ex. when a candidate is selected)
      */
     private void commitText() {
         if (!mNoInput) {
@@ -339,41 +356,20 @@
      * @param keyMode   The type of input mode
      */
     public void changeKeyMode(int keyMode) {
-        int targetMode = keyMode;
+        int targetMode = filterKeyMode(keyMode);
+        if (targetMode == INVALID_KEYMODE) {
+            return;
+        }
+        
         commitText();
 
         if (mCapsLock) {
-			mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.INPUT_SOFT_KEY,
+            mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.INPUT_SOFT_KEY,
                                           new KeyEvent(KeyEvent.ACTION_UP,
                                                        KeyEvent.KEYCODE_SHIFT_LEFT)));
             mCapsLock = false;
         }
         mShiftOn = KEYBOARD_SHIFT_OFF;
-
-        if (mFixedKeyMode != INVALID_KEYMODE) {
-            targetMode = mFixedKeyMode;
-        }
-
-        if (!mHardKeyboardHidden) {
-            if ((targetMode != KEYMODE_JA_FULL_HIRAGANA)
-                && (targetMode != KEYMODE_JA_HALF_ALPHABET)) {
-
-                Locale locale = Locale.getDefault();
-                int keymode = KEYMODE_JA_HALF_ALPHABET;
-                if (locale.getLanguage().equals(Locale.JAPANESE.getLanguage())) {
-                    switch (targetMode) {
-                    case KEYMODE_JA_FULL_HIRAGANA:
-                    case KEYMODE_JA_FULL_KATAKANA:
-                    case KEYMODE_JA_HALF_KATAKANA:
-                        keymode = KEYMODE_JA_FULL_HIRAGANA;
-                        break;
-                    default:
-                        break;
-                    }
-                }
-                targetMode = keymode;
-            }
-        }
         Keyboard kbd = getModeChangeKeyboard(targetMode);
         mCurrentKeyMode = targetMode;
         mPrevInputKeyCode = 0;
@@ -441,12 +437,35 @@
         return view;
      }
 
+    /** @see jp.co.omronsoft.openwnn.DefaultSoftKeyboard#changeKeyboard */
+    @Override protected boolean changeKeyboard(Keyboard keyboard) {
+        if (keyboard != null) {
+            if (mIsInputTypeNull) {
+                mChangeModeKey.popupResId = mPopupResId;
+            }
+
+            List<Keyboard.Key> keys = keyboard.getKeys();
+            int keyIndex = (KEY_NUMBER_12KEY < keys.size())
+                ? KEY_INDEX_CHANGE_MODE_QWERTY : KEY_INDEX_CHANGE_MODE_12KEY;
+            mChangeModeKey = keys.get(keyIndex);
+
+            if (mIsInputTypeNull) {
+                mPopupResId = mChangeModeKey.popupResId;
+                mChangeModeKey.popupResId = 0;
+            }
+        }
+            
+        return super.changeKeyboard(keyboard);
+    }
+
     /** @see jp.co.omronsoft.openwnn.DefaultSoftKeyboard#changeKeyboardType */
     @Override public void changeKeyboardType(int type) {
         commitText();
         Keyboard kbd = getTypeChangeKeyboard(type);
         if (kbd != null) {
             mCurrentKeyboardType = type;
+            mPrefEditor.putBoolean("opt_enable_qwerty", type == KEYBOARD_QWERTY);
+            mPrefEditor.commit();
             changeKeyboard(kbd);
         }
         if (type == KEYBOARD_12KEY) {
@@ -466,7 +485,9 @@
         switch (primaryCode) {
         case KEYCODE_JP12_TOGGLE_MODE:
         case KEYCODE_QWERTY_TOGGLE_MODE:
-            nextKeyMode();
+            if (!mIsInputTypeNull) {
+                nextKeyMode();
+            }
             break;
 
         case DefaultSoftKeyboard.KEYCODE_QWERTY_BACKSPACE:
@@ -520,18 +541,19 @@
         case KEYCODE_JP12_9:
         case KEYCODE_JP12_0:
         case KEYCODE_JP12_SHARP:
-        	/* Processing to input by ten key */
-        	if (mInputType == INPUT_TYPE_INSTANT) {
-        		/* Send a input character directly if instant input type is selected */
+            /* Processing to input by ten key */
+            if (mInputType == INPUT_TYPE_INSTANT) {
+                /* Send a input character directly if instant input type is selected */
                 commitText();
                 mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.INPUT_CHAR,
                                               mCurrentInstantTable[getTableIndex(primaryCode)]));
             } else {
                 if ((mPrevInputKeyCode != primaryCode)) {
+                    mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.TOUCH_OTHER_KEY));
                     if ((mCurrentKeyMode == KEYMODE_JA_HALF_ALPHABET)
                             && (primaryCode == KEYCODE_JP12_SHARP)) {
-                    	/* Commit text by symbol character (',' '.') when alphabet input mode is selected */
-                    	commitText();
+                        /* Commit text by symbol character (',' '.') when alphabet input mode is selected */
+                        commitText();
                     }
                 }
 
@@ -554,9 +576,9 @@
                 mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.INPUT_CHAR,
                                               mCurrentInstantTable[getTableIndex(primaryCode)]));
             } else {
-            	if (!mNoInput) {
-            		/* Processing to toggle Dakuten, Handakuten, and capital */
-            		HashMap replaceTable = getReplaceTable();
+                if (!mNoInput) {
+                    /* Processing to toggle Dakuten, Handakuten, and capital */
+                    HashMap replaceTable = getReplaceTable();
                     if (replaceTable == null) {
                         Log.e("OpenWnn", "not founds replace table");
                     } else {
@@ -568,38 +590,38 @@
             break;
 
         case KEYCODE_SWITCH_FULL_HIRAGANA:
-        	/* Change mode to Full width hiragana */
-        	changeKeyMode(KEYMODE_JA_FULL_HIRAGANA);
+            /* Change mode to Full width hiragana */
+            changeKeyMode(KEYMODE_JA_FULL_HIRAGANA);
             break;
 
         case KEYCODE_SWITCH_FULL_KATAKANA:
-        	/* Change mode to Full width katakana */
-        	changeKeyMode(KEYMODE_JA_FULL_KATAKANA);
+            /* Change mode to Full width katakana */
+            changeKeyMode(KEYMODE_JA_FULL_KATAKANA);
             break;
 
         case KEYCODE_SWITCH_FULL_ALPHABET:
-        	/* Change mode to Full width alphabet */
-        	changeKeyMode(KEYMODE_JA_FULL_ALPHABET);
+            /* Change mode to Full width alphabet */
+            changeKeyMode(KEYMODE_JA_FULL_ALPHABET);
             break;
 
         case KEYCODE_SWITCH_FULL_NUMBER:
-        	/* Change mode to Full width numeric */
-        	changeKeyMode(KEYMODE_JA_FULL_NUMBER);
+            /* Change mode to Full width numeric */
+            changeKeyMode(KEYMODE_JA_FULL_NUMBER);
             break;
 
         case KEYCODE_SWITCH_HALF_KATAKANA:
-        	/* Change mode to Half width katakana */
-        	changeKeyMode(KEYMODE_JA_HALF_KATAKANA);
+            /* Change mode to Half width katakana */
+            changeKeyMode(KEYMODE_JA_HALF_KATAKANA);
             break;
 
         case KEYCODE_SWITCH_HALF_ALPHABET: 
-        	/* Change mode to Half width alphabet */
-        	changeKeyMode(KEYMODE_JA_HALF_ALPHABET);
+            /* Change mode to Half width alphabet */
+            changeKeyMode(KEYMODE_JA_HALF_ALPHABET);
             break;
 
         case KEYCODE_SWITCH_HALF_NUMBER:
-        	/* Change mode to Half width numeric */
-        	changeKeyMode(KEYMODE_JA_HALF_NUMBER);
+            /* Change mode to Half width numeric */
+            changeKeyMode(KEYMODE_JA_HALF_NUMBER);
             break;
 
 
@@ -661,18 +683,37 @@
 
     /** @see jp.co.omronsoft.openwnn.DefaultSoftKeyboard#setPreferences */
     @Override public void setPreferences(SharedPreferences pref, EditorInfo editor) {
+        mPrefEditor = pref.edit();
+        boolean isQwerty = pref.getBoolean("opt_enable_qwerty", false);
+        if (isQwerty && (mCurrentKeyboardType == KEYBOARD_12KEY)) {
+            changeKeyboardType(KEYBOARD_QWERTY);
+        }
+
         super.setPreferences(pref, editor);
 
         int inputType = editor.inputType;
-        if (inputType == EditorInfo.TYPE_NULL) {
-            return;
+        if (mHardKeyboardHidden) {
+            if (inputType == EditorInfo.TYPE_NULL) {
+                if (!mIsInputTypeNull) {
+                    mIsInputTypeNull = true;
+                    mPopupResId = mChangeModeKey.popupResId;
+                    mChangeModeKey.popupResId = 0;
+                }
+                return;
+            }
+            
+            if (mIsInputTypeNull) {
+                mIsInputTypeNull = false;
+                mChangeModeKey.popupResId = mPopupResId;
+            }
         }
 
         mEnableAutoCaps = pref.getBoolean("auto_caps", true);
-        mFixedKeyMode = INVALID_KEYMODE;
+        mLimitedKeyMode = null;
         mPreferenceKeyMode = INVALID_KEYMODE;
         mNoInput = true;
         mDisableKeyInput = false;
+        mCapsLock = false;
 
         switch (inputType & EditorInfo.TYPE_MASK_CLASS) {
 
@@ -682,17 +723,23 @@
             break;
 
         case EditorInfo.TYPE_CLASS_PHONE:
-            mFixedKeyMode = KEYMODE_JA_HALF_PHONE;
+            if (mHardKeyboardHidden) {
+                mLimitedKeyMode = new int[] {KEYMODE_JA_HALF_PHONE};
+            } else {
+                mLimitedKeyMode = new int[] {KEYMODE_JA_HALF_ALPHABET};
+            }
             break;
 
         case EditorInfo.TYPE_CLASS_TEXT:
             switch (inputType & EditorInfo.TYPE_MASK_VARIATION) {
 
             case EditorInfo.TYPE_TEXT_VARIATION_PASSWORD:
-                mPreferenceKeyMode = KEYMODE_JA_HALF_ALPHABET;
+                mLimitedKeyMode = new int[] {KEYMODE_JA_HALF_ALPHABET, KEYMODE_JA_HALF_NUMBER};
                 break;
 
             case EditorInfo.TYPE_TEXT_VARIATION_EMAIL_ADDRESS:
+                mLimitedKeyMode = new int[] {KEYMODE_JA_HALF_ALPHABET, KEYMODE_JA_HALF_NUMBER};
+                break;
             case EditorInfo.TYPE_TEXT_VARIATION_URI:
                 mPreferenceKeyMode = KEYMODE_JA_HALF_ALPHABET;
                 break;
@@ -711,6 +758,7 @@
             mLastInputType = inputType;
         }
 
+        setStatusIcon();
         setShiftByEditorInfo();
     }
 
@@ -731,6 +779,8 @@
 
         if (mPreferenceKeyMode != INVALID_KEYMODE) {
             keymode = mPreferenceKeyMode;
+        } else if (mLimitedKeyMode != null) {
+            keymode = mLimitedKeyMode[0];
         } else {
             if (!locale.getLanguage().equals(Locale.JAPANESE.getLanguage())) {
                 keymode = KEYMODE_JA_HALF_ALPHABET;
@@ -743,9 +793,9 @@
     /**
      * Change to the next input mode
      */
-    private void nextKeyMode() {
-    	/* Search the current mode in the toggle table */
-    	boolean found = false;
+    public void nextKeyMode() {
+        /* Search the current mode in the toggle table */
+        boolean found = false;
         int index;
         for (index = 0; index < JP_MODE_CYCLE_TABLE.length; index++) {
             if (JP_MODE_CYCLE_TABLE[index] == mCurrentKeyMode) {
@@ -755,15 +805,24 @@
         }
 
         if (!found) {
-        	/* If the current mode not exists, set the default mode */
-        	setDefaultKeyboard();
+            /* If the current mode not exists, set the default mode */
+            setDefaultKeyboard();
         } else {
-        	/* If the current mode exists, set the next input mode */
-        	index++;
-            if (JP_MODE_CYCLE_TABLE.length <= index) {
-                index = 0;
+            /* If the current mode exists, set the next input mode */
+            int size = JP_MODE_CYCLE_TABLE.length;
+            int keyMode = INVALID_KEYMODE;
+            for (int i = 0; i < size; i++) {
+                index = (++index) % size;
+
+                keyMode = filterKeyMode(JP_MODE_CYCLE_TABLE[index]);
+                if (keyMode != INVALID_KEYMODE) {
+                    break;
+                }
             }
-            changeKeyMode(JP_MODE_CYCLE_TABLE[index]);
+
+            if (keyMode != INVALID_KEYMODE) {
+                changeKeyMode(keyMode);
+            }
         }
     }
 
@@ -776,28 +835,24 @@
         Keyboard[][] keyList;
         /* qwerty shift_off (portrait) */
         keyList = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_QWERTY][KEYBOARD_SHIFT_OFF];
-        keyList[KEYMODE_JA_FULL_HIRAGANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty);
-        keyList[KEYMODE_JA_FULL_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_full_alphabet);
-        keyList[KEYMODE_JA_FULL_NUMBER][0]   = new Keyboard(parent, R.xml.keyboard_qwerty_full_symbols);
-        keyList[KEYMODE_JA_FULL_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_full_katakana);
-        keyList[KEYMODE_JA_HALF_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_half_alphabet);
-        keyList[KEYMODE_JA_HALF_NUMBER][0]   = new Keyboard(parent, R.xml.keyboard_qwerty_half_symbols);
-        keyList[KEYMODE_JA_HALF_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_half_katakana);
+        keyList[KEYMODE_JA_FULL_HIRAGANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp);
+        keyList[KEYMODE_JA_FULL_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_alphabet);
+        keyList[KEYMODE_JA_FULL_NUMBER][0]   = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_symbols);
+        keyList[KEYMODE_JA_FULL_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_katakana);
+        keyList[KEYMODE_JA_HALF_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_alphabet);
+        keyList[KEYMODE_JA_HALF_NUMBER][0]   = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_symbols);
+        keyList[KEYMODE_JA_HALF_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_katakana);
         keyList[KEYMODE_JA_HALF_PHONE][0]    = new Keyboard(parent, R.xml.keyboard_12key_phone);
 
         /* qwerty shift_on (portrait) */
         keyList = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_QWERTY][KEYBOARD_SHIFT_ON];
-        keyList[KEYMODE_JA_FULL_HIRAGANA][0] =
-            mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_QWERTY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_FULL_HIRAGANA][0];
-        keyList[KEYMODE_JA_FULL_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_full_alphabet_shift);
-        keyList[KEYMODE_JA_FULL_NUMBER][0]   = new Keyboard(parent, R.xml.keyboard_qwerty_full_symbols_shift);
-        keyList[KEYMODE_JA_FULL_KATAKANA][0] =
-            mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_QWERTY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_FULL_KATAKANA][0];
-        keyList[KEYMODE_JA_HALF_ALPHABET][0] =
-            mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_QWERTY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_ALPHABET][0];
-        keyList[KEYMODE_JA_HALF_NUMBER][0]   = new Keyboard(parent, R.xml.keyboard_qwerty_half_symbols_shift);
-        keyList[KEYMODE_JA_HALF_KATAKANA][0] =
-            mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_QWERTY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_KATAKANA][0];
+        keyList[KEYMODE_JA_FULL_HIRAGANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_shift);
+        keyList[KEYMODE_JA_FULL_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_alphabet_shift);
+        keyList[KEYMODE_JA_FULL_NUMBER][0]   = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_symbols_shift);
+        keyList[KEYMODE_JA_FULL_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_katakana_shift);
+        keyList[KEYMODE_JA_HALF_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_alphabet_shift);
+        keyList[KEYMODE_JA_HALF_NUMBER][0]   = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_symbols_shift);
+        keyList[KEYMODE_JA_HALF_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_katakana_shift);
         keyList[KEYMODE_JA_HALF_PHONE][0] =
             mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_QWERTY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_PHONE][0];
 
@@ -806,16 +861,16 @@
         keyList = mKeyboard[LANG_JA][PORTRAIT][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF];
         keyList[KEYMODE_JA_FULL_HIRAGANA][0] = new Keyboard(parent, R.xml.keyboard_12keyjp);
         keyList[KEYMODE_JA_FULL_HIRAGANA][1] = new Keyboard(parent, R.xml.keyboard_12keyjp_input);
-        keyList[KEYMODE_JA_FULL_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_12key_alphabet);
-        keyList[KEYMODE_JA_FULL_ALPHABET][1] = new Keyboard(parent, R.xml.keyboard_12key_alphabet_input);
-        keyList[KEYMODE_JA_FULL_NUMBER][0]   = new Keyboard(parent, R.xml.keyboard_12key_num);
-        keyList[KEYMODE_JA_FULL_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_12key_katakana);
-        keyList[KEYMODE_JA_FULL_KATAKANA][1] = new Keyboard(parent, R.xml.keyboard_12key_katakana_input);
-        keyList[KEYMODE_JA_HALF_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_12key_alphabet);
-        keyList[KEYMODE_JA_HALF_ALPHABET][1] = new Keyboard(parent, R.xml.keyboard_12key_alphabet_input);
-        keyList[KEYMODE_JA_HALF_NUMBER][0]   = new Keyboard(parent, R.xml.keyboard_12key_num);
-        keyList[KEYMODE_JA_HALF_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_12key_katakana);
-        keyList[KEYMODE_JA_HALF_KATAKANA][1] = new Keyboard(parent, R.xml.keyboard_12key_katakana_input);
+        keyList[KEYMODE_JA_FULL_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_12key_full_alphabet);
+        keyList[KEYMODE_JA_FULL_ALPHABET][1] = new Keyboard(parent, R.xml.keyboard_12key_full_alphabet_input);
+        keyList[KEYMODE_JA_FULL_NUMBER][0]   = new Keyboard(parent, R.xml.keyboard_12key_full_num);
+        keyList[KEYMODE_JA_FULL_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_12key_full_katakana);
+        keyList[KEYMODE_JA_FULL_KATAKANA][1] = new Keyboard(parent, R.xml.keyboard_12key_full_katakana_input);
+        keyList[KEYMODE_JA_HALF_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_12key_half_alphabet);
+        keyList[KEYMODE_JA_HALF_ALPHABET][1] = new Keyboard(parent, R.xml.keyboard_12key_half_alphabet_input);
+        keyList[KEYMODE_JA_HALF_NUMBER][0]   = new Keyboard(parent, R.xml.keyboard_12key_half_num);
+        keyList[KEYMODE_JA_HALF_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_12key_half_katakana);
+        keyList[KEYMODE_JA_HALF_KATAKANA][1] = new Keyboard(parent, R.xml.keyboard_12key_half_katakana_input);
         keyList[KEYMODE_JA_HALF_PHONE][0]    = new Keyboard(parent, R.xml.keyboard_12key_phone);
 
         /* 12-keys shift_on (portrait) */
@@ -845,52 +900,54 @@
      * @param parent  The context
      */
     private void createKeyboardsLandscape(OpenWnn parent) {
+    	/*
         Keyboard[][] keyList;
+        */
         /* qwerty shift_off (landscape) */
-/*        keyList = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_QWERTY][KEYBOARD_SHIFT_OFF];
-        keyList[KEYMODE_JA_FULL_HIRAGANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_landscape);
-        keyList[KEYMODE_JA_FULL_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_full_alphabet_landscape);
-        keyList[KEYMODE_JA_FULL_NUMBER][0]   = new Keyboard(parent, R.xml.keyboard_qwerty_full_symbols_landscape);
-        keyList[KEYMODE_JA_FULL_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_full_katakana_landscape);
-        keyList[KEYMODE_JA_HALF_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_half_alphabet_landscape);
-        keyList[KEYMODE_JA_HALF_NUMBER][0]   = new Keyboard(parent, R.xml.keyboard_qwerty_half_symbols_landscape);
-        keyList[KEYMODE_JA_HALF_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_half_katakana_landscape);
+        /*
+        keyList = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_QWERTY][KEYBOARD_SHIFT_OFF];
+        keyList[KEYMODE_JA_FULL_HIRAGANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_landscape);
+        keyList[KEYMODE_JA_FULL_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_alphabet_landscape);
+        keyList[KEYMODE_JA_FULL_NUMBER][0]   = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_symbols_landscape);
+        keyList[KEYMODE_JA_FULL_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_katakana_landscape);
+        keyList[KEYMODE_JA_HALF_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_alphabet_landscape);
+        keyList[KEYMODE_JA_HALF_NUMBER][0]   = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_symbols_landscape);
+        keyList[KEYMODE_JA_HALF_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_katakana_landscape);
         keyList[KEYMODE_JA_HALF_PHONE][0]    = new Keyboard(parent, R.xml.keyboard_12key_phone_landscape);
-*/
+        */
         /* qwerty shift_on (landscape) */
-/*        keyList = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_QWERTY][KEYBOARD_SHIFT_ON];
-        keyList[KEYMODE_JA_FULL_HIRAGANA][0] =
-            mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_QWERTY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_FULL_HIRAGANA][0];
-        keyList[KEYMODE_JA_FULL_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_full_alphabet_shift_landscape);
-        keyList[KEYMODE_JA_FULL_NUMBER][0]   = new Keyboard(parent, R.xml.keyboard_qwerty_full_symbols_shift_landscape);
-        keyList[KEYMODE_JA_FULL_KATAKANA][0] =
-            mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_QWERTY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_FULL_KATAKANA][0];
-        keyList[KEYMODE_JA_HALF_ALPHABET][0] =
-            mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_QWERTY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_ALPHABET][0];
-        keyList[KEYMODE_JA_HALF_NUMBER][0]   = new Keyboard(parent, R.xml.keyboard_qwerty_half_symbols_shift_landscape);
-        keyList[KEYMODE_JA_HALF_KATAKANA][0] =
-            mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_QWERTY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_KATAKANA][0];
+        /*
+        keyList = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_QWERTY][KEYBOARD_SHIFT_ON];
+        keyList[KEYMODE_JA_FULL_HIRAGANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_shift_landscape);
+        keyList[KEYMODE_JA_FULL_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_alphabet_shift_landscape);
+        keyList[KEYMODE_JA_FULL_NUMBER][0]   = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_symbols_shift_landscape);
+        keyList[KEYMODE_JA_FULL_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_full_katakana_shift_landscape);
+        keyList[KEYMODE_JA_HALF_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_alphabet_shift_landscape);
+        keyList[KEYMODE_JA_HALF_NUMBER][0]   = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_symbols_shift_landscape);
+        keyList[KEYMODE_JA_HALF_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_qwerty_jp_half_katakana_shift_landscape);
         keyList[KEYMODE_JA_HALF_PHONE][0] =
             mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_QWERTY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_PHONE][0];
-*/
+        */
         /* 12-keys shift_off (landscape) */
-/*        keyList = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF];
+        /*
+        keyList = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF];
         keyList[KEYMODE_JA_FULL_HIRAGANA][0] = new Keyboard(parent, R.xml.keyboard_12keyjp_landscape);
         keyList[KEYMODE_JA_FULL_HIRAGANA][1] = new Keyboard(parent, R.xml.keyboard_12keyjp_input_landscape);
-        keyList[KEYMODE_JA_FULL_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_12key_alphabet_landscape);
-        keyList[KEYMODE_JA_FULL_ALPHABET][1] = new Keyboard(parent, R.xml.keyboard_12key_alphabet_input_landscape);
-        keyList[KEYMODE_JA_FULL_NUMBER][0]   = new Keyboard(parent, R.xml.keyboard_12key_num_landscape);
-        keyList[KEYMODE_JA_FULL_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_12key_katakana_landscape);
-        keyList[KEYMODE_JA_FULL_KATAKANA][1] = new Keyboard(parent, R.xml.keyboard_12key_katakana_input_landscape);
-        keyList[KEYMODE_JA_HALF_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_12key_alphabet_landscape);
-        keyList[KEYMODE_JA_HALF_ALPHABET][1] = new Keyboard(parent, R.xml.keyboard_12key_alphabet_input_landscape);
-        keyList[KEYMODE_JA_HALF_NUMBER][0]   = new Keyboard(parent, R.xml.keyboard_12key_num_landscape);
-        keyList[KEYMODE_JA_HALF_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_12key_katakana_landscape);
-        keyList[KEYMODE_JA_HALF_KATAKANA][1] = new Keyboard(parent, R.xml.keyboard_12key_katakana_input_landscape);
+        keyList[KEYMODE_JA_FULL_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_12key_full_alphabet_landscape);
+        keyList[KEYMODE_JA_FULL_ALPHABET][1] = new Keyboard(parent, R.xml.keyboard_12key_full_alphabet_input_landscape);
+        keyList[KEYMODE_JA_FULL_NUMBER][0]   = new Keyboard(parent, R.xml.keyboard_12key_full_num_landscape);
+        keyList[KEYMODE_JA_FULL_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_12key_full_katakana_landscape);
+        keyList[KEYMODE_JA_FULL_KATAKANA][1] = new Keyboard(parent, R.xml.keyboard_12key_full_katakana_input_landscape);
+        keyList[KEYMODE_JA_HALF_ALPHABET][0] = new Keyboard(parent, R.xml.keyboard_12key_half_alphabet_landscape);
+        keyList[KEYMODE_JA_HALF_ALPHABET][1] = new Keyboard(parent, R.xml.keyboard_12key_half_alphabet_input_landscape);
+        keyList[KEYMODE_JA_HALF_NUMBER][0]   = new Keyboard(parent, R.xml.keyboard_12key_half_num_landscape);
+        keyList[KEYMODE_JA_HALF_KATAKANA][0] = new Keyboard(parent, R.xml.keyboard_12key_half_katakana_landscape);
+        keyList[KEYMODE_JA_HALF_KATAKANA][1] = new Keyboard(parent, R.xml.keyboard_12key_half_katakana_input_landscape);
         keyList[KEYMODE_JA_HALF_PHONE][0]    = new Keyboard(parent, R.xml.keyboard_12key_phone_landscape);
-*/
+        */
         /* 12-keys shift_on (landscape) */
-/*        keyList = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_12KEY][KEYBOARD_SHIFT_ON];
+        /*
+        keyList = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_12KEY][KEYBOARD_SHIFT_ON];
         keyList[KEYMODE_JA_FULL_HIRAGANA]
             = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_FULL_HIRAGANA];
         keyList[KEYMODE_JA_FULL_ALPHABET]
@@ -907,7 +964,7 @@
             = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_KATAKANA];
         keyList[KEYMODE_JA_HALF_PHONE]
             = mKeyboard[LANG_JA][LANDSCAPE][KEYBOARD_12KEY][KEYBOARD_SHIFT_OFF][KEYMODE_JA_HALF_PHONE];
-*/
+        */
     }
 
     /**
@@ -957,7 +1014,7 @@
 
         case KEYMODE_JA_FULL_NUMBER:
         case KEYMODE_JA_HALF_NUMBER:
-        	/* Because these modes belong to direct input group, No toggle table exists */ 
+            /* Because these modes belong to direct input group, No toggle table exists */ 
             break;
 
         case KEYMODE_JA_HALF_ALPHABET:
@@ -995,7 +1052,7 @@
 
         case KEYMODE_JA_FULL_NUMBER:
         case KEYMODE_JA_HALF_NUMBER:
-        	/* Because these modes belong to direct input group, No replacing table exists */ 
+            /* Because these modes belong to direct input group, No replacing table exists */ 
             break;
 
         case KEYMODE_JA_HALF_ALPHABET:
@@ -1051,12 +1108,17 @@
     /**
      * Get the shift key state from the editor.
      * <br>
-     * @param editor	The editor information
-     * @return			state ID of the shift key (0:off, 1:on)
+     * @param editor    The editor information
+     * @return          The state id of the shift key (0:off, 1:on)
      */
     protected int getShiftKeyState(EditorInfo editor) {
-        int caps = mWnn.getCurrentInputConnection().getCursorCapsMode(editor.inputType);
-        return (caps == 0) ? 0 : 1;
+        InputConnection connection = mWnn.getCurrentInputConnection();
+        if (connection != null) {
+            int caps = connection.getCursorCapsMode(editor.inputType);
+            return (caps == 0) ? 0 : 1;
+        } else {
+            return 0;
+        }
     }
 
     /**
@@ -1073,13 +1135,85 @@
 
     /** @see jp.co.omronsoft.openwnn.DefaultSoftKeyboard#setHardKeyboardHidden */
     @Override public void setHardKeyboardHidden(boolean hidden) {
-        if ((mWnn != null) && !mHardKeyboardHidden) {
-            mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.CHANGE_MODE,
-            		OpenWnnJAJP.ENGINE_MODE_OPT_TYPE_QWERTY));
+        if (mWnn != null) {
+            if (!hidden) {
+                mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.CHANGE_MODE,
+                                              OpenWnnJAJP.ENGINE_MODE_OPT_TYPE_QWERTY));
+            }
+
+            if (mHardKeyboardHidden != hidden) {
+                if ((mLimitedKeyMode != null)
+                    || ((mCurrentKeyMode != KEYMODE_JA_FULL_HIRAGANA)
+                        && (mCurrentKeyMode != KEYMODE_JA_HALF_ALPHABET))) {
+
+                    mLastInputType = EditorInfo.TYPE_NULL;
+                    if (mWnn.isInputViewShown()) {
+                        setDefaultKeyboard();
+                    }
+                }
+            }
         }
         super.setHardKeyboardHidden(hidden);
     }
+
+    /**
+     * Change the key-mode to the allowed one which is restricted
+     *  by the text input field or the type of the keyboard.
+     * @param keyMode The key-mode
+     * @return the key-mode allowed
+     */
+    private int filterKeyMode(int keyMode) {
+        int targetMode = keyMode;
+        int[] limits = mLimitedKeyMode;
+
+        if (!mHardKeyboardHidden) { /* for hardware keyboard */
+            if ((targetMode != KEYMODE_JA_FULL_HIRAGANA)
+                && (targetMode != KEYMODE_JA_HALF_ALPHABET)) {
+
+                Locale locale = Locale.getDefault();
+                int keymode = KEYMODE_JA_HALF_ALPHABET;
+                if (locale.getLanguage().equals(Locale.JAPANESE.getLanguage())) {
+                    switch (targetMode) {
+                    case KEYMODE_JA_FULL_HIRAGANA:
+                    case KEYMODE_JA_FULL_KATAKANA:
+                    case KEYMODE_JA_HALF_KATAKANA:
+                        keymode = KEYMODE_JA_FULL_HIRAGANA;
+                        break;
+                    default:
+                        /* half-alphabet */
+                        break;
+                    }
+                }
+                targetMode = keymode;
+            }
+        } 
+
+        /* restrict by the type of the text field */
+        if (limits != null) {
+            boolean hasAccepted = false;
+            boolean hasRequiredChange = true;
+            int size = limits.length;
+            int nowMode = mCurrentKeyMode;
+
+            for (int i = 0; i < size; i++) {
+                if (targetMode == limits[i]) {
+                    hasAccepted = true;
+                    break;
+                }
+                if (nowMode == limits[i]) {
+                    hasRequiredChange = false;
+                }
+            }
+
+            if (!hasAccepted) {
+                if (hasRequiredChange) {
+                    targetMode = mLimitedKeyMode[0];
+                } else {
+                    targetMode = INVALID_KEYMODE;
+                }
+            }
+        }
+
+        return targetMode;
+    }
 }
-
-
-
diff --git a/src/jp/co/omronsoft/openwnn/JAJP/KanaConverter.java b/src/jp/co/omronsoft/openwnn/JAJP/KanaConverter.java
index 60e0989..05d1199 100644
--- a/src/jp/co/omronsoft/openwnn/JAJP/KanaConverter.java
+++ b/src/jp/co/omronsoft/openwnn/JAJP/KanaConverter.java
@@ -32,7 +32,8 @@
  */
 public class KanaConverter {
 
-    private static final HashMap<String,String> mHanSuujiMap = new HashMap<String,String>() {{
+	/** Conversion rule for half-width numeric */
+    private static final HashMap<String,String> mHalfNumericMap = new HashMap<String,String>() {{
         put( "\u3042", "1");
         put( "\u3044", "11");
         put( "\u3046", "111");
@@ -92,7 +93,8 @@
         put( "\u30fc", "00000");
     }};
 
-    private static final HashMap<String,String> mZenSuujiMap = new HashMap<String,String>() {{
+    /** Conversion rule for full-width numeric */
+    private static final HashMap<String,String> mFullNumericMap = new HashMap<String,String>() {{
         put( "\u3042", "\uff11");
         put( "\u3044", "\uff11\uff11");
         put( "\u3046", "\uff11\uff11\uff11");
@@ -152,7 +154,8 @@
         put( "\u30fc", "\uff10\uff10\uff10\uff10\uff10");
     }};
 
-    private static final HashMap<String,String> mHanKataMap = new HashMap<String,String>() {{
+    /** Conversion rule for half-width Katakana */
+    private static final HashMap<String,String> mHalfKatakanaMap = new HashMap<String,String>() {{
         put( "\u3042", "\uff71");
         put( "\u3044", "\uff72");
         put( "\u3046", "\uff73");
@@ -242,7 +245,8 @@
         put( "\u30fc", "\uff70");
     }};
 
-    private static final HashMap<String,String> mZenKataMap = new HashMap<String,String>() {{
+    /** Conversion rule for full-width Katakana */
+    private static final HashMap<String,String> mFullKatakanaMap = new HashMap<String,String>() {{
         put( "\u3042", "\u30a2");
         put( "\u3044", "\u30a4");
         put( "\u3046", "\u30a6");
@@ -332,7 +336,8 @@
         put( "\u30fc", "\u30fc");
     }};
 
-    private static final HashMap<String,String> mHanEijiMap = new HashMap<String,String>() {{
+    /** Conversion rule for half-width alphabet */
+    private static final HashMap<String,String> mHalfAlphabetMap = new HashMap<String,String>() {{
         put( "\u3042", ".");
         put( "\u3044", "@");
         put( "\u3046", "-");
@@ -369,7 +374,8 @@
         put( "\u308f", "-");
     }};
 
-    private static final HashMap<String,String> mZenEijiMap = new HashMap<String,String>() {{
+    /** Conversion rule for full-width alphabet */
+    private static final HashMap<String,String> mFullAlphabetMap = new HashMap<String,String>() {{
         put( "\u3042", "\uff0e");
         put( "\u3044", "\uff20");
         put( "\u3046", "\u30fc");
@@ -406,7 +412,8 @@
         put( "\u308f", "\u30fc" );
     }};
 
-    private static final HashMap<String,String> mZenEijiMapQwety = new HashMap<String,String>() {{
+    /** Conversion rule for full-width alphabet (QWERTY mode) */
+    private static final HashMap<String,String> mFullAlphabetMapQwety = new HashMap<String,String>() {{
         put( "a", "\uff41");
         put( "b", "\uff42");
         put( "c", "\uff43");
@@ -462,9 +469,12 @@
         put( "Z", "\uff3a");
     }};
 
+    /** Decimal format using comma */
     private static final DecimalFormat mFormat = new DecimalFormat("###,###");
 
+    /** List of the generated candidates */
     private List<WnnWord> mAddCandidateList;
+    /** Work area for generating string */
     private StringBuffer mStringBuff;
 
     /** part of speech (default) */
@@ -515,10 +525,10 @@
         /* Create pseudo candidates for all keyboard type */
         /* Hiragana(reading) / Full width katakana / Half width katakana */
         list.add(new WnnWord(inputHiragana, inputHiragana));
-        if (createCandidateString(inputHiragana, mZenKataMap, mStringBuff)) {
+        if (createCandidateString(inputHiragana, mFullKatakanaMap, mStringBuff)) {
             list.add(new WnnWord(mStringBuff.toString(), inputHiragana, mPosDefault));
         }
-        if (createCandidateString(inputHiragana, mHanKataMap, mStringBuff)) {
+        if (createCandidateString(inputHiragana, mHalfKatakanaMap, mStringBuff)) {
             list.add(new WnnWord(mStringBuff.toString(), inputHiragana, mPosDefault));
         }
 
@@ -529,7 +539,7 @@
             /* Create pseudo candidates for 12key */
 
         	/* Create pseudo candidates for half width numeric */
-            if (createCandidateString(inputHiragana, mHanSuujiMap, mStringBuff)) {
+            if (createCandidateString(inputHiragana, mHalfNumericMap, mStringBuff)) {
                 String convHanSuuji = mStringBuff.toString();
                 String convNumComma = convertNumber(convHanSuuji);
                 list.add(new WnnWord(convHanSuuji, inputHiragana, mPosNumber));
@@ -539,12 +549,12 @@
             }
 
             /* Create pseudo candidates for full width numeric */
-            if (createCandidateString(inputHiragana, mZenSuujiMap, mStringBuff)) {
+            if (createCandidateString(inputHiragana, mFullNumericMap, mStringBuff)) {
                 list.add(new WnnWord(mStringBuff.toString(), inputHiragana, mPosNumber));
             }
 
             /* Create pseudo candidates for half width alphabet */
-            if (createCandidateString(inputHiragana, mHanEijiMap, mStringBuff)) {
+            if (createCandidateString(inputHiragana, mHalfAlphabetMap, mStringBuff)) {
                 String convHanEiji = mStringBuff.toString();
                 String convHanEijiLower = convHanEiji.toLowerCase();
                 list.add(new WnnWord(convHanEijiLower, inputHiragana, mPosSymbol));
@@ -553,7 +563,7 @@
             }
 
             /* Create pseudo candidates for full width alphabet */
-            if (createCandidateString(inputHiragana, mZenEijiMap, mStringBuff)) {
+            if (createCandidateString(inputHiragana, mFullAlphabetMap, mStringBuff)) {
                 String convZenEiji = mStringBuff.toString();
                 String convZenEijiLower = convZenEiji.toLowerCase(Locale.JAPAN);
                 list.add(new WnnWord(convZenEijiLower, inputHiragana, mPosSymbol));
@@ -581,7 +591,7 @@
         list.add(new WnnWord(inputRomaji.toUpperCase(), inputHiragana, mPosSymbol));
 
         /* Create pseudo candidates for the full width alphabet */
-        if (createCandidateString(inputRomaji, mZenEijiMapQwety, mStringBuff)) {
+        if (createCandidateString(inputRomaji, mFullAlphabetMapQwety, mStringBuff)) {
             String convZenEiji = mStringBuff.toString();
             String convZenEijiLower = convZenEiji.toLowerCase(Locale.JAPAN);
             list.add(new WnnWord(convZenEiji, inputHiragana, mPosSymbol));
diff --git a/src/jp/co/omronsoft/openwnn/JAJP/OpenWnnClauseConverterJAJP.java b/src/jp/co/omronsoft/openwnn/JAJP/OpenWnnClauseConverterJAJP.java
index ce87f97..7114e52 100644
--- a/src/jp/co/omronsoft/openwnn/JAJP/OpenWnnClauseConverterJAJP.java
+++ b/src/jp/co/omronsoft/openwnn/JAJP/OpenWnnClauseConverterJAJP.java
@@ -17,11 +17,8 @@
 package jp.co.omronsoft.openwnn.JAJP;
 
 import jp.co.omronsoft.openwnn.*;
-
 import java.util.*;
 
-import android.util.Log;
-
 /**
  * The penWnn Clause Converter class for Japanese IME.
  * 
@@ -537,7 +534,7 @@
      * and the default part-of-speech tag.
      *
      * @param input    Input string
-     * @return			Default cluase
+     * @return			Default clause
      */
     private WnnClause defaultClause(String input) {
         return (new WnnClause(input, input, mPosDefault, (CLAUSE_COST - 1) * input.length()));
diff --git a/src/jp/co/omronsoft/openwnn/JAJP/RomkanFullKatakana.java b/src/jp/co/omronsoft/openwnn/JAJP/RomkanFullKatakana.java
index 7ecd3ef..d42a3c3 100644
--- a/src/jp/co/omronsoft/openwnn/JAJP/RomkanFullKatakana.java
+++ b/src/jp/co/omronsoft/openwnn/JAJP/RomkanFullKatakana.java
@@ -25,7 +25,7 @@
 import java.util.regex.Matcher;
 
 /**
- * The Romaji to Full Katakana converter class for Japanese IME.
+ * The Romaji to full-width Katakana converter class for Japanese IME.
  *
  * @author Copyright (C) 2009 OMRON SOFTWARE CO., LTD.  All Rights Reserved.
  */
diff --git a/src/jp/co/omronsoft/openwnn/JAJP/TutorialJAJP.java b/src/jp/co/omronsoft/openwnn/JAJP/TutorialJAJP.java
new file mode 100644
index 0000000..edf5ddd
--- /dev/null
+++ b/src/jp/co/omronsoft/openwnn/JAJP/TutorialJAJP.java
@@ -0,0 +1,390 @@
+/*
+ * Copyright (C) 2008,2009  OMRON SOFTWARE Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * Copyright (C) 2008-2009 Google Inc.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package jp.co.omronsoft.openwnn.JAJP;
+
+import jp.co.omronsoft.openwnn.*;
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.drawable.Drawable;
+import android.os.Handler;
+import android.os.Message;
+import android.text.Layout;
+import android.text.SpannableStringBuilder;
+import android.text.StaticLayout;
+import android.text.Spanned;
+import android.text.style.ImageSpan;
+import android.text.style.DynamicDrawableSpan;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.View.OnTouchListener;
+import android.widget.PopupWindow;
+import android.widget.TextView;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class TutorialJAJP implements OnTouchListener {
+    
+    private List<Bubble> mBubbles = new ArrayList<Bubble>();
+    private static final int LONG_PRESS_INDEX = 8;
+    private View mInputView;
+    private OpenWnnJAJP mIme;
+    private int[] mLocation = new int[2];
+    private static final int MSG_SHOW_BUBBLE = 0;
+    
+    private int mBubbleIndex;
+    private DefaultSoftKeyboardJAJP mInputManager;
+    private boolean mEnableKeyTouch = false;
+    
+    Handler mHandler = new Handler() {
+        @Override
+        public void handleMessage(Message msg) {
+            switch (msg.what) {
+                case MSG_SHOW_BUBBLE:
+                    Bubble bubba = (Bubble) msg.obj;
+                    bubba.show(mLocation[0], mLocation[1]);
+                    break;
+            }
+        }
+    };
+
+    class Bubble {
+        Drawable bubbleBackground;
+        int x;
+        int y;
+        int width;
+        int gravity;
+        CharSequence text;
+        boolean dismissOnTouch;
+        boolean dismissOnClose;
+        PopupWindow window;
+        TextView textView;
+        View inputView;
+
+        Bubble(Context context, View inputView,
+                int backgroundResource, int bx, int by, int description, int guide) {
+
+            CharSequence text = context.getResources().getText(description);
+            init(context, inputView, backgroundResource, bx, by, text, guide, false);
+        }
+
+        Bubble(Context context, View inputView, int backgroundResource, int bx, int by,
+               CharSequence description, int guide, boolean leftAlign) {
+            init(context, inputView, backgroundResource, bx, by, description, guide, leftAlign);
+        }
+        
+        void init(Context context, View inputView, int backgroundResource,
+                  int bx, int by, CharSequence description, int guide, boolean leftAlign) {
+            bubbleBackground = context.getResources().getDrawable(backgroundResource);
+            x = bx;
+            y = by;
+            width = (int) (inputView.getWidth() * 0.9);
+            this.gravity = Gravity.TOP | Gravity.LEFT;
+            text = new SpannableStringBuilder()
+                .append(description)
+                .append("\n") 
+                .append(context.getResources().getText(guide));
+            this.dismissOnTouch = true;
+            this.dismissOnClose = false;
+            this.inputView = inputView;
+            window = new PopupWindow(context);
+            window.setBackgroundDrawable(null);
+            LayoutInflater inflate =
+                (LayoutInflater) context
+                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+            textView = (TextView) inflate.inflate(R.layout.bubble_text, null);
+            textView.setBackgroundDrawable(bubbleBackground);
+            textView.setText(text);
+            if (leftAlign) {
+                textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
+            }
+            window.setContentView(textView);
+            window.setFocusable(false);
+            window.setTouchable(true);
+            window.setOutsideTouchable(false);
+        }
+
+        private int chooseSize(PopupWindow pop, View parentView, CharSequence text, TextView tv) {
+            int wid = tv.getPaddingLeft() + tv.getPaddingRight();
+            int ht = tv.getPaddingTop() + tv.getPaddingBottom();
+
+            /*
+             * Figure out how big the text would be if we laid it out to the
+             * full width of this view minus the border.
+             */
+            int cap = width - wid;
+
+            Layout l = new StaticLayout(text, tv.getPaint(), cap,
+                                        Layout.Alignment.ALIGN_NORMAL, 1, 0, true);
+            float max = 0;
+            for (int i = 0; i < l.getLineCount(); i++) {
+                max = Math.max(max, l.getLineWidth(i));
+            }
+
+            /*
+             * Now set the popup size to be big enough for the text plus the border.
+             */
+            pop.setWidth(width);
+            pop.setHeight(ht + l.getHeight());
+            return l.getHeight();
+        }
+
+        void show(int offx, int offy) {
+            int textHeight = chooseSize(window, inputView, text, textView);
+            offy -= textView.getPaddingTop() + textHeight;
+            if (inputView.getVisibility() == View.VISIBLE 
+                    && inputView.getWindowVisibility() == View.VISIBLE) {
+                try {
+                    if ((gravity & Gravity.BOTTOM) == Gravity.BOTTOM) offy -= window.getHeight();
+                    if ((gravity & Gravity.RIGHT) == Gravity.RIGHT) offx -= window.getWidth();
+                    textView.setOnTouchListener(new View.OnTouchListener() {
+                        public boolean onTouch(View view, MotionEvent me) {
+
+                            boolean ret = !mEnableKeyTouch;
+                            switch (me.getAction()) {
+                            case MotionEvent.ACTION_UP:
+                                if (mBubbleIndex >= mBubbles.size()) {
+                                    mInputView.setOnTouchListener(null);
+                                } else {
+                                    TutorialJAJP.this.next();
+                                }
+                                break;
+                            default:
+                                break;
+                            }
+                            return ret;
+                        }
+                    });
+                    window.showAtLocation(inputView, Gravity.NO_GRAVITY, x + offx, y + offy);
+                } catch (Exception e) {
+                }
+            }
+        }
+        
+        void hide() {
+            if (window.isShowing()) {
+                textView.setOnTouchListener(null);
+                window.dismiss();
+            }
+        }
+        
+        boolean isShowing() {
+            return window.isShowing();
+        }
+    }
+
+    /** Constructor */
+    public TutorialJAJP(OpenWnnJAJP ime, View inputView, DefaultSoftKeyboardJAJP inputManager) {
+        mInputManager = inputManager;
+        mInputView = inputView;
+        mIme = ime;
+
+        Context context = inputView.getContext();
+        int inputWidth = inputView.getWidth();
+        Resources r = inputView.getContext().getResources();
+        final int x = inputWidth / 20;
+        r.getDimensionPixelOffset(R.dimen.bubble_pointer_offset);
+
+        SpannableStringBuilder spannable = new SpannableStringBuilder();
+        Bubble button;
+
+        spannable.clear();
+        spannable.append(r.getText(R.string.tip_to_step1));
+
+        setSpan(spannable, "\u25cb", R.drawable.tutorial_12key_key);
+        button = new Bubble(context, inputView, 
+                R.drawable.dialog_bubble, x, 0, 
+                spannable, R.string.touch_to_continue, false);
+        mBubbles.add(button);
+
+        spannable.clear();
+        spannable.append(r.getText(R.string.tip_to_step2_a));
+
+        setSpan(spannable, "\u25cb", R.drawable.tutorial_12key_toggle);
+        button = new Bubble(context, inputView, 
+                R.drawable.dialog_bubble, x, 0, 
+                spannable, R.string.touch_to_continue, true);
+        mBubbles.add(button);
+
+        spannable.append(r.getText(R.string.tip_to_step2_b));
+
+        setSpan(spannable, "\u2192", R.drawable.tutorial_12key_right);
+
+        button = new Bubble(context, inputView, 
+                R.drawable.dialog_bubble, x, 0, 
+                spannable, R.string.touch_to_continue, true);
+        mBubbles.add(button);
+
+        spannable.append(r.getText(R.string.tip_to_step2_c));
+
+        setSpan(spannable, "\u25cb", R.drawable.tutorial_12key_toggle);
+
+        button = new Bubble(context, inputView, 
+                R.drawable.dialog_bubble, x, 0, 
+                spannable, R.string.touch_to_continue, true);
+        mBubbles.add(button);
+
+        spannable.append(r.getText(R.string.tip_to_step2_d));
+
+        setSpan(spannable, "\u25a0", R.drawable.tutorial_12key_space_jp);
+
+        setSpan(spannable, "\u2193", R.drawable.tutorial_12key_enter);
+
+        button = new Bubble(context, inputView, 
+                R.drawable.dialog_bubble, x, 0, 
+                spannable, R.string.touch_to_continue, true);
+        mBubbles.add(button);
+
+        spannable.clear();
+        spannable.append(r.getText(R.string.tip_to_step3_a));
+
+        setSpan(spannable, "\u25a0", R.drawable.tutorial_12key_mode);
+        button = new Bubble(context, inputView, 
+                R.drawable.dialog_bubble_moji, x, 0, 
+                spannable, R.string.touch_to_continue, false);
+        mBubbles.add(button);
+
+        button = new Bubble(context, inputView, 
+                R.drawable.dialog_bubble_moji, x, 0, 
+                R.string.tip_to_step3_b, R.string.touch_to_continue);
+        mBubbles.add(button);
+
+        button = new Bubble(context, inputView, 
+                R.drawable.dialog_bubble_moji, x, 0, 
+                R.string.tip_to_step3_c, R.string.touch_to_continue);
+        mBubbles.add(button);
+
+        spannable.clear();
+        spannable.append(r.getText(R.string.tip_to_step4));
+
+        setSpan(spannable, "\u25a0", R.drawable.tutorial_12key_mode);
+        button = new Bubble(context, inputView, 
+                R.drawable.dialog_bubble_moji, x, 0, 
+                spannable, R.string.touch_to_try, false);
+        mBubbles.add(button);
+
+        spannable.clear();
+        spannable.append(r.getText(R.string.tip_to_step5));
+ 
+        setSpan(spannable, "\u2190", R.drawable.tutorial_back);
+ 
+        button = new Bubble(context, inputView, 
+                R.drawable.dialog_bubble, x, 0, 
+                spannable, R.string.touch_to_continue, false);
+        mBubbles.add(button);
+
+        button = new Bubble(context, inputView, 
+                R.drawable.dialog_bubble, x, 0, 
+                R.string.tip_to_step6, R.string.touch_to_finish);
+        mBubbles.add(button);
+    }
+
+    private void setSpan(SpannableStringBuilder spannable, String marker, int imageResourceId) {
+        String text = spannable.toString();
+        int target = text.indexOf(marker);
+        while (0 <= target) {
+            ImageSpan span = new ImageSpan(mIme, imageResourceId,
+                    DynamicDrawableSpan.ALIGN_BOTTOM);
+            spannable.setSpan(span, target, target + 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
+            target = text.indexOf(marker, target + 1);
+        }
+    }
+    
+    public void start() {
+        mInputView.getLocationInWindow(mLocation);
+        mBubbleIndex = -1;
+        mInputView.setOnTouchListener(this);
+        next();
+    }
+
+    boolean next() {
+        if (mBubbleIndex >= 0) {
+            if (!mBubbles.get(mBubbleIndex).isShowing()) {
+                return true;
+            }
+            for (int i = 0; i <= mBubbleIndex; i++) {
+                mBubbles.get(i).hide();
+            }
+        }
+        mBubbleIndex++;
+        if (mBubbleIndex >= mBubbles.size()) {
+            mEnableKeyTouch = true;
+            mIme.sendDownUpKeyEvents(-1);
+            mIme.tutorialDone();
+            return false;
+        }
+
+        if ((6 <= mBubbleIndex) && (mBubbleIndex <= 8)) {
+            mInputManager.nextKeyMode();
+        }
+
+        if (mBubbleIndex == LONG_PRESS_INDEX) {
+            mEnableKeyTouch = true;
+        } else if (LONG_PRESS_INDEX < mBubbleIndex) {
+            mEnableKeyTouch = false;
+        }
+
+        mHandler.sendMessageDelayed(
+                mHandler.obtainMessage(MSG_SHOW_BUBBLE, mBubbles.get(mBubbleIndex)), 500);
+        return true;
+    }
+    
+    void hide() {
+        for (int i = 0; i < mBubbles.size(); i++) {
+            mBubbles.get(i).hide();
+        }
+        mInputView.setOnTouchListener(null);
+    }
+
+    public boolean close() {
+        mHandler.removeMessages(MSG_SHOW_BUBBLE);
+        hide();
+        return true;
+    }
+
+    public boolean onTouch(View v, MotionEvent event) {
+        boolean ret = !mEnableKeyTouch;
+        if (event.getAction() == MotionEvent.ACTION_UP) {
+            if (mBubbleIndex >= mBubbles.size()) {
+                mInputView.setOnTouchListener(null);
+            } else {
+                if (mBubbleIndex != LONG_PRESS_INDEX) {
+                    next();
+                }
+            }
+        }
+        return ret;
+    }
+}
diff --git a/src/jp/co/omronsoft/openwnn/JAJP/UserDictionaryToolsListJAJP.java b/src/jp/co/omronsoft/openwnn/JAJP/UserDictionaryToolsListJAJP.java
index a9357fe..87d1e4d 100644
--- a/src/jp/co/omronsoft/openwnn/JAJP/UserDictionaryToolsListJAJP.java
+++ b/src/jp/co/omronsoft/openwnn/JAJP/UserDictionaryToolsListJAJP.java
@@ -19,6 +19,8 @@
 import jp.co.omronsoft.openwnn.*;
 import android.view.View;
 import android.view.Window;
+import java.util.Comparator;
+
 /**
  * The user dictionary tool class for Japanese IME.
  *
@@ -55,4 +57,15 @@
         return false;
     }
 
+    /** @see jp.co.omronsoft.openwnn.UserDictionaryToolsList#getComparator */
+    @Override protected Comparator<WnnWord> getComparator() {
+    	return new ListComparatorJAJP();
+    }
+
+    /** Comparator class for sorting the list of Japanese user dictionary */
+    protected class ListComparatorJAJP implements Comparator<WnnWord>{
+        public int compare(WnnWord word1, WnnWord word2) {
+            return word1.stroke.compareTo(word2.stroke);
+        };
+    }
 }
diff --git a/src/jp/co/omronsoft/openwnn/OpenWnn.java b/src/jp/co/omronsoft/openwnn/OpenWnn.java
index 41795f6..a68ef74 100644
--- a/src/jp/co/omronsoft/openwnn/OpenWnn.java
+++ b/src/jp/co/omronsoft/openwnn/OpenWnn.java
@@ -21,7 +21,6 @@
 import android.content.Context;
 import android.view.View;
 import android.view.KeyEvent;
-import android.view.MotionEvent;
 import android.content.SharedPreferences;
 import android.preference.PreferenceManager;
 
@@ -31,6 +30,7 @@
 import android.content.res.Configuration;
 import android.graphics.*;
 import android.graphics.drawable.*;
+import android.view.MotionEvent;
 
 /**
  * The OpenWnn IME's base class.
@@ -113,7 +113,7 @@
     @Override public void onDestroy() {
         super.onDestroy();
 
-        if (mConverter != null) { mConverter.close(); }
+        close();
     }
 
     /** @see android.inputmethodservice.InputMethodService#onKeyDown */
@@ -190,6 +190,11 @@
         mDirectInputMode = true;
         hideStatusIcon();
     }
+    /** @see android.inputmethodservice.InputMethodService#onComputeInsets */
+    @Override public void onComputeInsets(InputMethodService.Insets outInsets) {
+        super.onComputeInsets(outInsets);
+        outInsets.contentTopInsets = outInsets.visibleTopInsets;
+    }
 
 
     /**********************************************************************
@@ -235,4 +240,11 @@
         }
         return null;
     }
+
+    /**
+     * Processing of resource open when IME ends.
+     */
+    protected void close() {
+        if (mConverter != null) { mConverter.close(); }
+    }
 }
diff --git a/src/jp/co/omronsoft/openwnn/OpenWnnDictionaryImpl.java b/src/jp/co/omronsoft/openwnn/OpenWnnDictionaryImpl.java
index 6c8a464..e5b7fe0 100644
--- a/src/jp/co/omronsoft/openwnn/OpenWnnDictionaryImpl.java
+++ b/src/jp/co/omronsoft/openwnn/OpenWnnDictionaryImpl.java
@@ -998,7 +998,6 @@
         if( mDbDic != null ) {
             StringBuilder previousStrokeSQL    = new StringBuilder();
             StringBuilder previousCandidateSQL = new StringBuilder();
-            boolean isConnectLearn = false;
 
             if( previousWord != null &&
                 previousWord.stroke.length()    > 0 && previousWord.stroke.length()    <= MAX_STROKE_LENGTH &&
@@ -1006,7 +1005,6 @@
                 DatabaseUtils.appendEscapedSQLString( previousStrokeSQL, previousWord.stroke );
                 DatabaseUtils.appendEscapedSQLString( previousCandidateSQL, previousWord.candidate );
                 /* If the information of previous word is set, perform the link learning */
-                isConnectLearn = true;
             }
 
             if( word.stroke.length()    > 0 && word.stroke.length()    <= MAX_STROKE_LENGTH &&
@@ -1018,86 +1016,6 @@
 
                 SQLiteCursor cursor;
 
-                /* If the words which have same stroke and same candidate is already learned, move to the tail */
-                cursor = ( SQLiteCursor )mDbDic.query(
-                    TABLE_NAME_DIC,
-                    new String[] { COLUMN_NAME_ID,
-                                   COLUMN_NAME_STROKE,
-                                   COLUMN_NAME_CANDIDATE,
-                                   COLUMN_NAME_POS_LEFT,
-                                   COLUMN_NAME_POS_RIGHT,
-                                   COLUMN_NAME_PREVIOUS_STROKE,
-                                   COLUMN_NAME_PREVIOUS_CANDIDATE,
-                                   COLUMN_NAME_PREVIOUS_POS_LEFT,
-                                   COLUMN_NAME_PREVIOUS_POS_RIGHT },
-                    String.format( "%s=%d and %s=%s and %s=%s",
-                                   COLUMN_NAME_TYPE, TYPE_NAME_LEARN,
-                                   COLUMN_NAME_STROKE, strokeSQL.toString(),
-                                   COLUMN_NAME_CANDIDATE, candidateSQL.toString() ),
-                    null, null, null,
-                    String.format( "%s ASC", COLUMN_NAME_ID ) );
-
-                if( cursor.getCount() > 0 ) {
-                    /* The results are arranged ascending by the ID. In other words, The results are arranged in an old turn. */
-                    cursor.moveToFirst( );
-
-                    ContentValues content = new ContentValues();
-                    int[] idArray = new int[ cursor.getCount() ];
-                    int idIndex = 0;
-
-                    boolean isExistConnectLearnData = false;
-
-                    mDbDic.beginTransaction();
-                    try {
-                        do {
-                            /* Record the ID that is removed later */
-                            idArray[ idIndex++ ] = cursor.getInt( 0 );
-
-                            /* Add the word to tail */
-                            content.clear();
-                            content.put( COLUMN_NAME_TYPE,               TYPE_NAME_LEARN );
-                            content.put( COLUMN_NAME_STROKE,             cursor.getString( 1 ) );
-                            content.put( COLUMN_NAME_CANDIDATE,          cursor.getString( 2 ) );
-                            content.put( COLUMN_NAME_POS_LEFT,           cursor.getInt( 3 ) );
-                            content.put( COLUMN_NAME_POS_RIGHT,          cursor.getInt( 4 ) );
-                            content.put( COLUMN_NAME_PREVIOUS_STROKE,    cursor.getString( 5 ) );
-                            content.put( COLUMN_NAME_PREVIOUS_CANDIDATE, cursor.getString( 6 ) );
-                            content.put( COLUMN_NAME_PREVIOUS_POS_LEFT,  cursor.getInt( 7 ) );
-                            content.put( COLUMN_NAME_PREVIOUS_POS_RIGHT, cursor.getInt( 8 ) );
-                            mDbDic.insert( TABLE_NAME_DIC, null, content );
-
-                            /* If the word that contain same link information exist, need NOT to add link information. */
-                            if( isConnectLearn &&
-                                previousWord.stroke.equals( cursor.getString( 5 ) ) &&
-                                previousWord.candidate.equals( cursor.getString( 6 ) ) ) {
-                                isExistConnectLearnData = true;
-                            }
-                        } while( cursor.moveToNext( ) );
-
-                        /* Delete the recorded words */
-                        while( --idIndex >= 0 ) {
-                            mDbDic.delete( TABLE_NAME_DIC,
-                                String.format( "%s=%d", COLUMN_NAME_ID, idArray[ idIndex ] ),
-                                null );
-                        }
-
-                        mDbDic.setTransactionSuccessful();
-
-                        /* If the link information is not specified or the word that contain same link information exist, */
-                        /* need NOT to add link information. Otherwise, go to next section for adding link information. */
-                        if( !isConnectLearn || isExistConnectLearnData ) {
-                            return 0;
-                        }
-                    } catch( SQLException e ) {
-                        return -1;
-                    } finally {
-                        mDbDic.endTransaction();
-                        cursor.close();
-                    }
-                } else {
-                    cursor.close();
-                }
-
                 /* Count the number of registered words and retrieve that words ascending by the ID */
                 cursor = ( SQLiteCursor )mDbDic.query(
                     TABLE_NAME_DIC,
diff --git a/src/jp/co/omronsoft/openwnn/OpenWnnEN.java b/src/jp/co/omronsoft/openwnn/OpenWnnEN.java
index ab0754d..9801849 100644
--- a/src/jp/co/omronsoft/openwnn/OpenWnnEN.java
+++ b/src/jp/co/omronsoft/openwnn/OpenWnnEN.java
@@ -20,8 +20,7 @@
 import android.content.SharedPreferences;
 import android.content.Context;
 import android.content.res.Configuration;
-import android.inputmethodservice.InputMethodService;
-import android.os.Bundle;
+import android.os.Message;
 import android.os.Handler;
 import android.preference.PreferenceManager;
 import android.text.SpannableStringBuilder;
@@ -29,10 +28,12 @@
 import android.text.method.MetaKeyKeyListener;
 import android.text.style.BackgroundColorSpan;
 import android.text.style.CharacterStyle;
+import android.text.style.ForegroundColorSpan;
 import android.text.style.UnderlineSpan;
 import android.util.Log;
 import android.view.KeyCharacterMap;
 import android.view.KeyEvent;
+import android.view.MotionEvent;
 import android.view.View;
 import android.view.inputmethod.EditorInfo;
 
@@ -51,20 +52,17 @@
     private static final CharacterStyle SPAN_EXACT_BGCOLOR_HL     = new BackgroundColorSpan(0xFF66CDAA);
     /** Highlight color style for the composing text */
     private static final CharacterStyle SPAN_REMAIN_BGCOLOR_HL    = new BackgroundColorSpan(0xFFF0FFFF);
+    /** Highlight text color */
+    private static final CharacterStyle SPAN_TEXTCOLOR  = new ForegroundColorSpan(0xFF000000);
 
     /** A private area code(ALT+SHIFT+X) to be ignore (G1 specific). */
     private static final int PRIVATE_AREA_CODE = 61184;
     /** Never move cursor in to the composing text (adapting to IMF's specification change) */
     private static final boolean FIX_CURSOR_TEXT_END = true;
 
-    /** Whether using Emoji or not */
-    private static final boolean ENABLE_EMOJI_LIMITATION = true;
-    
     /** Spannable string for the composing text */
     protected SpannableStringBuilder mDisplayText;
 
-    /** Handler for drawing the candidates view */
-    private Handler mDelayUpdateHandler;
     /** Characters treated as a separator */
     private String mWordSeparators;
     /** Previous event's code */
@@ -100,12 +98,63 @@
 
     /** Shift lock toggle definition */
     private static final int[] mShiftKeyToggle = {0, MetaKeyKeyListener.META_SHIFT_ON, MetaKeyKeyListener.META_CAP_LOCKED};
-    /** Alt lock toggle definition */
+    /** ALT lock toggle definition */
     private static final int[] mAltKeyToggle = {0, MetaKeyKeyListener.META_ALT_ON, MetaKeyKeyListener.META_ALT_LOCKED};
     /** Auto caps mode */
     private boolean mAutoCaps = false;
     
-    private CandidateFilter mFilter;
+    /** Whether dismissing the keyboard when the enter key is pressed */
+    private boolean mEnableAutoHideKeyboard = true;
+    
+    /** Tutorial */
+    private TutorialEN mTutorial;
+
+    /** Whether tutorial mode or not */
+    private boolean mEnableTutorial;
+
+    /** Message for {@code mHandler} (execute prediction) */
+    private static final int MSG_PREDICTION = 0;
+
+    /** Message for {@code mHandler} (execute tutorial) */
+    private static final int MSG_START_TUTORIAL = 1;
+
+    /** Message for {@code mHandler} (close) */
+    private static final int MSG_CLOSE = 2;
+
+    /** Delay time(msec.) to start prediction after key input when the candidates view is not shown. */
+    private static final int PREDICTION_DELAY_MS_1ST = 200;
+
+    /** Delay time(msec.) to start prediction after key input when the candidates view is shown. */
+    private static final int PREDICTION_DELAY_MS_SHOWING_CANDIDATE = 200;
+    
+    /** {@code Handler} for drawing candidates/displaying tutorial */
+    Handler mHandler = new Handler() {
+            @Override public void handleMessage(Message msg) {
+                switch (msg.what) {
+                case MSG_PREDICTION:
+                    updatePrediction();
+                    break;
+                case MSG_START_TUTORIAL:
+                    if (mTutorial == null) {
+                        if (isInputViewShown()) {
+                            DefaultSoftKeyboardEN inputManager = ((DefaultSoftKeyboardEN) mInputViewManager);
+                            View v = inputManager.getKeyboardView();
+                            mTutorial = new TutorialEN(OpenWnnEN.this, v, inputManager);
+                                                         
+                            mTutorial.start();
+                        } else {
+                            /* Try again soon if the view is not yet showing */
+                            sendMessageDelayed(obtainMessage(MSG_START_TUTORIAL), 100);
+                        }
+                    }
+                    break;
+                case MSG_CLOSE:
+                    if (mConverterEN != null) mConverterEN.close();
+                    if (mSymbolList != null) mSymbolList.close();
+                    break;
+                }
+            }
+        };
 
     /**
      * Constructor
@@ -120,13 +169,11 @@
         mInputViewManager = new DefaultSoftKeyboardEN();
         mConverterEN = new OpenWnnEngineEN("/data/data/jp.co.omronsoft.openwnn/writableEN.dic");
         mConverter = mConverterEN;
-        mFilter = new CandidateFilter();
         mSymbolList = null;
 
         /* etc */
         mDisplayText = new SpannableStringBuilder();
         mAutoHideMode = false;
-        mDelayUpdateHandler = new Handler();
         mSymbolMode = false;
         mOptPrediction = true;
         mOptSpellCorrection = true;
@@ -212,7 +259,7 @@
      */
     private void setSymbolMode(String mode) {
         if (mode != null) {
-            mDelayUpdateHandler.removeCallbacks(updatePredictionRunnable);
+            mHandler.removeMessages(MSG_PREDICTION);
             mSymbolMode = true;
             mSymbolList.setDictionary(mode);
             mConverter = mSymbolList;
@@ -220,7 +267,7 @@
             if (!mSymbolMode) {
                 return;
             }
-            mDelayUpdateHandler.removeCallbacks(updatePredictionRunnable);
+            mHandler.removeMessages(MSG_PREDICTION);
             mSymbolMode = false;
             mConverter = mConverterEN;
         }
@@ -244,8 +291,7 @@
         int hiddenState = getResources().getConfiguration().hardKeyboardHidden;
         boolean hidden = (hiddenState == Configuration.HARDKEYBOARDHIDDEN_YES);
         ((DefaultSoftKeyboardEN) mInputViewManager).setHardKeyboardHidden(hidden);
-        ((TextCandidatesViewManager)
-                mCandidatesViewManager).setHardKeyboardHidden(hidden);
+        mEnableTutorial = hidden;
 
         return super.onCreateInputView();
     }
@@ -274,76 +320,42 @@
         /* display status icon */
         showStatusIcon(R.drawable.immodeic_half_alphabet);
 
-        /* set prediction & spell correction mode */
-        mOptPrediction      = pref.getBoolean("opt_en_prediction", true);
-        mOptSpellCorrection = pref.getBoolean("opt_en_spell_correction", true);
-        mOptLearning        = pref.getBoolean("opt_en_enable_learning", true);
-
-        /* prediction on/off */
-        switch (attribute.inputType & EditorInfo.TYPE_MASK_CLASS) {
-        case EditorInfo.TYPE_CLASS_NUMBER:
-        case EditorInfo.TYPE_CLASS_DATETIME:
-        case EditorInfo.TYPE_CLASS_PHONE:
-            mOptPrediction = false;
-            mOptLearning = false;
-            break;
-
-        case EditorInfo.TYPE_CLASS_TEXT:
-            switch (attribute.inputType & EditorInfo.TYPE_MASK_VARIATION) {
-            case EditorInfo.TYPE_TEXT_VARIATION_PASSWORD:
-            case EditorInfo.TYPE_TEXT_VARIATION_PHONETIC:
-                mOptLearning = false;
-                mOptPrediction = false;
-                break;
-            default:
-                break;
-            }
-        }
-
-        /* set engine's mode */
-        if (mOptSpellCorrection) {
-            mConverterEN.setDictionary(OpenWnnEngineEN.DICT_FOR_CORRECT_MISTYPE);
-        } else {
-            mConverterEN.setDictionary(OpenWnnEngineEN.DICT_DEFAULT);
-        }
-        /* emoji */
-        if (ENABLE_EMOJI_LIMITATION) {
-            Bundle bundle = attribute.extras;
-            if (bundle != null && bundle.getBoolean("allowEmoji")) {
-                mConverterEN.setFilter(null);
-            } else {
-                mFilter.setFilter(CandidateFilter.FILTER_EMOJI);
-                mConverterEN.setFilter(mFilter);
-            }
-        } else {
-            mConverterEN.setFilter(null);
-        }
-
-        /* doesn't learn any word if it is not prediction mode */
-        if (!mOptPrediction) {
-            mOptLearning = false;
-        }
-
         if (mComposingText != null) {
             mComposingText.clear();
         }
         /* initialize the engine's state */
         fitInputType(pref, attribute);
+        
+        ((DefaultSoftKeyboard) mInputViewManager).resetCurrentKeyboard();
     }
 
-    /** @see jp.co.omronsoft.openwnn.OpenWnn#onComputeInsets */
-    @Override public void onComputeInsets(InputMethodService.Insets outInsets) {
-        /* use default value. means;
-         * outInsets.touchableInsets = InputMethodService.Insets.TOUCHABLE_INSETS_VISIBLE;
-         */
+    /** @see jp.co.omronsoft.openwnn.OpenWnn#hideWindow */
+    @Override public void hideWindow() {
+        mComposingText.clear();
+        mInputViewManager.onUpdateState(this);
+        mHandler.removeMessages(MSG_START_TUTORIAL);
+        mInputViewManager.closing();
+        if (mTutorial != null) {
+            mTutorial.close();
+            mTutorial = null;
+        }
+
+        super.hideWindow();
     }
 
     /** @see jp.co.omronsoft.openwnn.OpenWnn#onUpdateSelection */
     @Override public void onUpdateSelection(int oldSelStart, int oldSelEnd,
             int newSelStart, int newSelEnd, int candidatesStart,
             int candidatesEnd) {
-        if (mComposingText.size(1) != 0) {
+
+        boolean isNotComposing = ((candidatesStart < 0) && (candidatesEnd < 0));
+        if (isNotComposing) {
+            mComposingText.clear();
             updateComposingText(1);
+        } else {
+            if (mComposingText.size(1) != 0) {
+                updateComposingText(1);
+            }
         }
     }
 
@@ -354,6 +366,10 @@
             if (mInputConnection != null) {
                 updateComposingText(1);
             }
+            /* Hardware keyboard */
+            int hiddenState = newConfig.hardKeyboardHidden;
+            boolean hidden = (hiddenState == Configuration.HARDKEYBOARDHIDDEN_YES);
+            mEnableTutorial = hidden;
         } catch (Exception ex) {
         }
     }
@@ -415,6 +431,10 @@
         case OpenWnnEvent.CHANGE_MODE:
             return false;
             
+        case OpenWnnEvent.UPDATE_CANDIDATE:
+            updateComposingText(ComposingText.LAYER1);
+            return true;
+
         case OpenWnnEvent.CHANGE_INPUT_VIEW:
             setInputView(onCreateInputView());
             return true;
@@ -446,6 +466,9 @@
         if (ev.code == OpenWnnEvent.LIST_CANDIDATES_FULL) {
             mCandidatesViewManager.setViewType(CandidatesViewManager.VIEW_TYPE_FULL);
             return true;
+        } else if (ev.code == OpenWnnEvent.LIST_CANDIDATES_NORMAL) {
+            mCandidatesViewManager.setViewType(CandidatesViewManager.VIEW_TYPE_NORMAL);
+            return true;
         }
 
         boolean ret = false;
@@ -531,7 +554,7 @@
         }
 
         if (mCandidatesViewManager.getViewType() == CandidatesViewManager.VIEW_TYPE_FULL) {
-            mCandidatesViewManager.setViewType(CandidatesViewManager.VIEW_TYPE_NORMAL);
+        	mCandidatesViewManager.setViewType(CandidatesViewManager.VIEW_TYPE_NORMAL);
         }
 
         return ret;
@@ -680,34 +703,72 @@
             case KeyEvent.KEYCODE_DPAD_CENTER:
                 commitText(1);
                 mComposingText.clear();
+                if (mEnableAutoHideKeyboard) {
+                    mInputViewManager.closing();
+                    requestHideSelf(0);
+                }
                 return true;
 
             default:
                 break;
             }
+        } else {
+            /* if there is no composing string. */
+            if (mCandidatesViewManager.getCurrentView().isShown()) {
+            	if (key == KeyEvent.KEYCODE_BACK) {
+            		if (mCandidatesViewManager.getViewType() == CandidatesViewManager.VIEW_TYPE_FULL) {
+            			mCandidatesViewManager.setViewType(CandidatesViewManager.VIEW_TYPE_NORMAL);
+            		} else {
+            			mCandidatesViewManager.setViewType(CandidatesViewManager.VIEW_TYPE_CLOSE);
+            		}
+            		return true;
+            	}
+            } else {
+                switch (key) {
+                case KeyEvent.KEYCODE_DPAD_CENTER:
+                case KeyEvent.KEYCODE_ENTER:
+                    if (mEnableAutoHideKeyboard) {
+                        mInputViewManager.closing();
+                        requestHideSelf(0);
+                        return true;
+                    }
+                    break;
+                case KeyEvent.KEYCODE_BACK:
+                    /*
+                     * If 'BACK' key is pressed when the SW-keyboard is shown
+                     * and the candidates view is not shown, dismiss the SW-keyboard.
+                     */
+                    if (isInputViewShown()) {
+                        mInputViewManager.closing();
+                        requestHideSelf(0);
+                        return true;
+                    }
+                    break;
+                default:
+                    break;
+                }
+            }
         }
 
         return false;
     }
 
     /**
-     * Runnable for a thread getting and displaying candidates.
+     * Thread for updating the candidates view
      */
-    private final Runnable updatePredictionRunnable = new Runnable() {
-        public void run() {
-            int candidates = 0;
-            if (mConverter != null) {
-                /* normal prediction */
-                candidates = mConverter.predict(mComposingText, 0, -1);
-            }
-            /* update the candidates view */
-            if (candidates > 0) {
-                mCandidatesViewManager.displayCandidates(mConverter);
-            } else {
-                mCandidatesViewManager.clearCandidates();
-            }
+    private void updatePrediction() {
+        int candidates = 0;
+        if (mConverter != null) {
+            /* normal prediction */
+            candidates = mConverter.predict(mComposingText, 0, -1);
         }
-    };
+        /* update the candidates view */
+        if (candidates > 0) {
+            mCandidatesViewManager.displayCandidates(mConverter);
+        } else {
+            mCandidatesViewManager.clearCandidates();
+        }
+    }
 
     /**
      * Update the composing text.
@@ -720,25 +781,27 @@
             commitText(1);
             mComposingText.clear();
             if (mSymbolMode) {
-                mDelayUpdateHandler.removeCallbacks(updatePredictionRunnable);
-                mDelayUpdateHandler.postDelayed(updatePredictionRunnable, 0);         
+                mHandler.removeMessages(MSG_PREDICTION);
+                mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_PREDICTION), 0);
             }
         } else {
             if (mComposingText.size(1) != 0) {
-                mDelayUpdateHandler.removeCallbacks(updatePredictionRunnable);
-                mDelayUpdateHandler.postDelayed(updatePredictionRunnable, 250);
+                mHandler.removeMessages(MSG_PREDICTION);
+                if (mCandidatesViewManager.getCurrentView().isShown()) {
+                    mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_PREDICTION),
+                                                PREDICTION_DELAY_MS_SHOWING_CANDIDATE);
+                } else {
+                    mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_PREDICTION),
+                                                PREDICTION_DELAY_MS_1ST);
+                }
             } else {
-                mDelayUpdateHandler.removeCallbacks(updatePredictionRunnable);
-                mDelayUpdateHandler.postDelayed(updatePredictionRunnable, 0);         
+                mHandler.removeMessages(MSG_PREDICTION);
+                mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_PREDICTION), 0);
             }
 
             /* notice to the input view */
             this.mInputViewManager.onUpdateState(this);
 
-            /* set the candidates view to the normal size */
-            if (mCandidatesViewManager.getViewType() != CandidatesViewManager.VIEW_TYPE_NORMAL) {
-                mCandidatesViewManager.setViewType(CandidatesViewManager.VIEW_TYPE_NORMAL);
-            }
             /* set the text for displaying as the composing text */
             SpannableStringBuilder disp = mDisplayText;
             disp.clear();
@@ -754,6 +817,8 @@
                 if (cursor < disp.length()) {
                     mDisplayText.setSpan(SPAN_REMAIN_BGCOLOR_HL, cursor, disp.length(),
                             Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+                    mDisplayText.setSpan(SPAN_TEXTCOLOR, 0, disp.length(),
+                            Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
                 }
                 
                 disp.setSpan(SPAN_UNDERLINE, 0, disp.length(),
@@ -892,5 +957,94 @@
             mDirectInputMode = true;
             return;
         }
+
+        mEnableAutoHideKeyboard = false;
+        
+        /* set prediction & spell correction mode */
+        mOptPrediction      = preference.getBoolean("opt_en_prediction", true);
+        mOptSpellCorrection = preference.getBoolean("opt_en_spell_correction", true);
+        mOptLearning        = preference.getBoolean("opt_en_enable_learning", true);
+
+        /* prediction on/off */
+        switch (info.inputType & EditorInfo.TYPE_MASK_CLASS) {
+        case EditorInfo.TYPE_CLASS_NUMBER:
+        case EditorInfo.TYPE_CLASS_DATETIME:
+        case EditorInfo.TYPE_CLASS_PHONE:
+            mOptPrediction = false;
+            mOptLearning = false;
+            break;
+
+        case EditorInfo.TYPE_CLASS_TEXT:
+            switch (info.inputType & EditorInfo.TYPE_MASK_VARIATION) {
+            case EditorInfo.TYPE_TEXT_VARIATION_PASSWORD:
+                mEnableAutoHideKeyboard = true;
+                mOptLearning = false;
+                mOptPrediction = false;
+                break;
+
+            case EditorInfo.TYPE_TEXT_VARIATION_PHONETIC:
+                mOptLearning = false;
+                mOptPrediction = false;
+                break;
+            default:
+                break;
+            }
+        }
+
+        /* doesn't learn any word if it is not prediction mode */
+        if (!mOptPrediction) {
+            mOptLearning = false;
+        }
+
+        /* set engine's mode */
+        if (mOptSpellCorrection) {
+            mConverterEN.setDictionary(OpenWnnEngineEN.DICT_FOR_CORRECT_MISTYPE);
+        } else {
+            mConverterEN.setDictionary(OpenWnnEngineEN.DICT_DEFAULT);
+        }
+        checkTutorial(info.privateImeOptions);
+    }
+
+    /**
+     * Check and start the tutorial if it is the tutorial mode.
+     * 
+     * @param privateImeOptions IME's options
+     */
+    private void checkTutorial(String privateImeOptions) {
+        if (privateImeOptions == null) return;
+        if (privateImeOptions.equals("com.android.setupwizard:ShowTutorial")) {
+            if ((mTutorial == null) && mEnableTutorial) startTutorial();
+        } else if (privateImeOptions.equals("com.android.setupwizard:HideTutorial")) {
+            if (mTutorial != null) {
+                if (mTutorial.close()) {
+                    mTutorial = null;
+                }
+            }
+        }
+    }
+
+    /**
+     * Start the tutorial
+     */
+    private void startTutorial() {
+        DefaultSoftKeyboardEN inputManager = ((DefaultSoftKeyboardEN) mInputViewManager);
+        View v = inputManager.getKeyboardView();
+        v.setOnTouchListener(new View.OnTouchListener() {
+				public boolean onTouch(View v, MotionEvent event) {
+					return true;
+				}});
+        mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_START_TUTORIAL), 500);
+    }
+
+    /**
+     * Close the tutorial
+     */
+    public void tutorialDone() {
+        mTutorial = null;
+    }
+
+    /** @see OpenWnn#close */
+    @Override protected void close() {
+        mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_CLOSE), 0);
     }
 }
diff --git a/src/jp/co/omronsoft/openwnn/OpenWnnEvent.java b/src/jp/co/omronsoft/openwnn/OpenWnnEvent.java
index 18b0041..06260e1 100644
--- a/src/jp/co/omronsoft/openwnn/OpenWnnEvent.java
+++ b/src/jp/co/omronsoft/openwnn/OpenWnnEvent.java
@@ -219,6 +219,11 @@
      */
     public static final int KEYUP = 0xF000001F;
 
+    /**
+     * Touch the other key.
+     */
+    public static final int TOUCH_OTHER_KEY = 0xF0000020;
+
     /** Event code */
     public int code = UNDEFINED;
     /** Detail mode of the event */
diff --git a/src/jp/co/omronsoft/openwnn/OpenWnnJAJP.java b/src/jp/co/omronsoft/openwnn/OpenWnnJAJP.java
index 6db1817..91fff14 100644
--- a/src/jp/co/omronsoft/openwnn/OpenWnnJAJP.java
+++ b/src/jp/co/omronsoft/openwnn/OpenWnnJAJP.java
@@ -18,27 +18,23 @@
 
 
 import jp.co.omronsoft.openwnn.EN.OpenWnnEngineEN;
-import jp.co.omronsoft.openwnn.JAJP.DefaultSoftKeyboardJAJP;
-import jp.co.omronsoft.openwnn.JAJP.OpenWnnEngineJAJP;
-import jp.co.omronsoft.openwnn.JAJP.Romkan;
-import jp.co.omronsoft.openwnn.JAJP.RomkanFullKatakana;
-import jp.co.omronsoft.openwnn.JAJP.RomkanHalfKatakana;
-import jp.co.omronsoft.openwnn.StrSegmentClause;
+import jp.co.omronsoft.openwnn.JAJP.*;
 import android.content.SharedPreferences;
 import android.content.Context;
 import android.content.res.Configuration;
-import android.inputmethodservice.InputMethodService;
 import android.os.Handler;
-import android.os.Bundle;
+import android.os.Message;
 import android.preference.PreferenceManager;
 import android.text.SpannableStringBuilder;
 import android.text.Spanned;
 import android.text.style.BackgroundColorSpan;
 import android.text.style.CharacterStyle;
+import android.text.style.ForegroundColorSpan;
 import android.text.style.UnderlineSpan;
 import android.util.Log;
 import android.view.KeyEvent;
 import android.view.inputmethod.EditorInfo;
+import android.view.MotionEvent;
 import android.view.View;
 import android.view.KeyCharacterMap;
 import android.text.method.MetaKeyKeyListener;
@@ -91,9 +87,6 @@
     /** Never move cursor in to the composing text (adapting to IMF's specification change) */
     private static final boolean FIX_CURSOR_TEXT_END = true;
 
-    /** Whether using Emoji or not */
-    private static final boolean ENABLE_EMOJI_LIMITATION = true;
-
     /** Highlight color style for the converted clause */
     private static final CharacterStyle SPAN_CONVERT_BGCOLOR_HL   = new BackgroundColorSpan(0xFF8888FF);
     /** Highlight color style for the selected string  */
@@ -102,6 +95,8 @@
     private static final CharacterStyle SPAN_EISUKANA_BGCOLOR_HL  = new BackgroundColorSpan(0xFF9FB6CD);
     /** Highlight color style for the composing text */
     private static final CharacterStyle SPAN_REMAIN_BGCOLOR_HL    = new BackgroundColorSpan(0xFFF0FFFF);
+    /** Highlight text color */
+    private static final CharacterStyle SPAN_TEXTCOLOR  = new ForegroundColorSpan(0xFF000000);
     /** Underline style for the composing text */
     private static final CharacterStyle SPAN_UNDERLINE            = new UnderlineSpan();
 
@@ -114,8 +109,8 @@
     /** IME's status for {@code mStatus}(all candidates are displayed). */
     private static final int STATUS_CANDIDATE_FULL  = 0x0010;
 
-    /** Alphabet pattern */
-    private static final Pattern ENGLISH_CHARACTER = Pattern.compile(".*[a-zA-Z]$");
+    /** Alphabet-last pattern */
+    private static final Pattern ENGLISH_CHARACTER_LAST = Pattern.compile(".*[a-zA-Z]$");
 
     /**
      *  Private area character code got by {@link KeyEvent#getUnicodeChar()}.
@@ -133,6 +128,21 @@
     /** Bit flag for English auto commit mode (symbol list) */
     private static final int AUTO_COMMIT_ENGLISH_SYMBOL  = 0x0010;
 
+    /** Message for {@code mHandler} (execute prediction) */
+    private static final int MSG_PREDICTION = 0;
+
+    /** Message for {@code mHandler} (execute tutorial) */
+    private static final int MSG_START_TUTORIAL = 1;
+
+    /** Message for {@code mHandler} (close) */
+    private static final int MSG_CLOSE = 2;
+
+    /** Delay time(msec.) to start prediction after key input when the candidates view is not shown. */
+    private static final int PREDICTION_DELAY_MS_1ST = 200;
+
+    /** Delay time(msec.) to start prediction after key input when the candidates view is shown. */
+    private static final int PREDICTION_DELAY_MS_SHOWING_CANDIDATE = 200;
+    
 
     /** Convert engine's state */
     private class EngineState {
@@ -257,9 +267,6 @@
     /** Instance of this service */
     private static OpenWnnJAJP mSelf = null;
 
-    /** Handler for drawing the candidates view */
-    private Handler mDelayUpdateHandler;
-
     /** Backup for switching the converter */
     private WnnEngine mConverterBack;
 
@@ -277,7 +284,7 @@
 
     /** Symbol lists to display when the symbol key is pressed */
     private static final String[] SYMBOL_LISTS = {
-        SymbolList.SYMBOL_JAPANESE_EMOJI, SymbolList.SYMBOL_JAPANESE, SymbolList.SYMBOL_ENGLISH, SymbolList.SYMBOL_JAPANESE_FACE
+    	SymbolList.SYMBOL_JAPANESE_FACE, SymbolList.SYMBOL_JAPANESE, SymbolList.SYMBOL_ENGLISH
     };
 
     /** Current symbol list */
@@ -307,8 +314,8 @@
     /** Whether displaying the symbol list */
     private boolean mEnableSymbolList = true;
 
-    /** Whether being able to use Emoji */
-    private boolean mEnableEmoji = false;
+    /** Whether non ASCII code is enabled */
+    private boolean mEnableSymbolListNonHalf = true;
 
     /** Enable mistyping spell correction or not */
     private boolean mEnableSpellCorrection = true;
@@ -319,14 +326,17 @@
     /** Whether removing a space before a separator or not. (in English mode) */
     private boolean mEnableAutoDeleteSpace = false;
 
-    /** Whether appending a space to a selected word or not (in English mode) */
+    /** Whether auto-spacing is enabled or not. */
     private boolean mEnableAutoInsertSpace = true;
 
+    /** Whether dismissing the keyboard when the enter key is pressed */
+    private boolean mEnableAutoHideKeyboard = true;
+
     /** Number of committed clauses on consecutive clause conversion */
     private int mCommitCount = 0;
 
     /** Target layer of the {@link ComposingText} */
-    private int mTargetLayer = 0;
+    private int mTargetLayer = 1;
 
     /** Current orientation of the display */
     private int mOrientation = Configuration.ORIENTATION_UNDEFINED;
@@ -337,11 +347,8 @@
     /** Regular expression pattern for English separators */
     private  Pattern mEnglishAutoCommitDelimiter = null;
 
-    /** Lenght of committed text */
-    private int mCommitLength = 0;
-
-    /** Last cursor position */
-    private int mLastSelectionEnd = 0;
+    /** Cursor position in the composing text */
+    private int mComposingStartCursor = 0;
 
     /** Cursor position before committing text */
     private int mCommitStartCursor = 0;
@@ -349,8 +356,8 @@
     /** Previous committed text */
     private StringBuffer mPrevCommitText = null;
 
-    /** List of words in the user dictionary */
-    private WnnWord[] mUserDictionaryWords = null;
+    /** Call count of {@code commitText} */
+    private int mPrevCommitCount = 0;
 
     /** Shift lock status of the Hardware keyboard */
     private int mHardShift;
@@ -358,7 +365,7 @@
     /** SHIFT key state (pressing) */
     private boolean mShiftPressing;
 
-    /** Alt lock status of the Hardware keyboard */
+    /** ALT lock status of the Hardware keyboard */
     private int mHardAlt;
 
     /** ALT key state (pressing) */
@@ -367,12 +374,55 @@
     /** Shift lock toggle definition */
     private static final int[] mShiftKeyToggle = {0, MetaKeyKeyListener.META_SHIFT_ON, MetaKeyKeyListener.META_CAP_LOCKED};
 
-    /** Alt lock toggle definition */
+    /** ALT lock toggle definition */
     private static final int[] mAltKeyToggle = {0, MetaKeyKeyListener.META_ALT_ON, MetaKeyKeyListener.META_ALT_LOCKED};
 
     /** Auto caps mode */
     private boolean mAutoCaps = false;
+
+    /** List of words in the user dictionary */
+    private WnnWord[] mUserDictionaryWords = null;
     
+    /** Tutorial */
+    private TutorialJAJP mTutorial;
+
+    /** Whether tutorial mode or not */
+    private boolean mEnableTutorial;
+
+    /** Whether there is a continued predicted candidate */
+    private boolean mHasContinuedPrediction = false;
+
+    /** {@code Handler} for drawing candidates/displaying tutorial */
+    Handler mHandler = new Handler() {
+            @Override
+                public void handleMessage(Message msg) {
+                switch (msg.what) {
+                case MSG_PREDICTION:
+                    updatePrediction();
+                    break;
+                case MSG_START_TUTORIAL:
+                    if (mTutorial == null) {
+                        if (isInputViewShown()) {
+                            DefaultSoftKeyboardJAJP inputManager = ((DefaultSoftKeyboardJAJP) mInputViewManager);
+                            View v = inputManager.getKeyboardView();
+                            mTutorial = new TutorialJAJP(OpenWnnJAJP.this, v, inputManager);
+                                                         
+                            mTutorial.start();
+                        } else {
+                            /* Try again soon if the view is not yet showing */
+                            sendMessageDelayed(obtainMessage(MSG_START_TUTORIAL), 100);
+                        }
+                    }
+                    break;
+                case MSG_CLOSE:
+                    if (mConverterJAJP != null) mConverterJAJP.close();
+                    if (mConverterEN != null) mConverterEN.close();
+                    if (mConverterSymbolEngineBack != null) mConverterSymbolEngineBack.close();
+                    break;
+                }
+            }
+        };
+
     /** The candidate filter */
     private CandidateFilter mFilter;
 
@@ -395,7 +445,6 @@
         mDisplayText = new SpannableStringBuilder();
         mAutoHideMode = false;
 
-        mDelayUpdateHandler = new Handler();
         mPrevCommitText = new StringBuffer();
     }
 
@@ -425,9 +474,7 @@
         int hiddenState = getResources().getConfiguration().hardKeyboardHidden;
         boolean hidden = (hiddenState == Configuration.HARDKEYBOARDHIDDEN_YES);
         ((DefaultSoftKeyboardJAJP) mInputViewManager).setHardKeyboardHidden(hidden);
-        ((TextCandidatesViewManager)
-         mCandidatesViewManager).setHardKeyboardHidden(hidden);
-
+        mEnableTutorial = hidden;
         return super.onCreateInputView();
     }
 
@@ -438,16 +485,13 @@
         state.temporaryMode = EngineState.TEMPORARY_DICTIONARY_MODE_NONE;
         updateEngineState(state);
 
+        mPrevCommitCount = 0;
         clearCommitInfo();
 
-        if (mDirectInputMode) {
-            DefaultSoftKeyboardJAJP inputManager = ((DefaultSoftKeyboardJAJP)mInputViewManager);
-            inputManager.setDefaultKeyboard();
-        }
+        ((DefaultSoftKeyboard) mInputViewManager).resetCurrentKeyboard();
 
         super.onStartInputView(attribute, restarting);
 
-        mEnableAutoDeleteSpace = false;
         /* initialize views */
         mCandidatesViewManager.clearCandidates();
         /* initialize status */
@@ -467,8 +511,7 @@
         ((TextCandidatesViewManager)mCandidatesViewManager).setAutoHide(true);
 
         if (isEnableL2Converter()) {
-            mEnableAutoDeleteSpace = false;
-            mConverter.breakSequence();
+            breakSequence();
         }
     }
 
@@ -477,37 +520,55 @@
         mComposingText.clear();
         mInputViewManager.onUpdateState(this);
         clearCommitInfo();
+        mHandler.removeMessages(MSG_START_TUTORIAL);
         mInputViewManager.closing();
-        super.hideWindow();
-    }
+        if (mTutorial != null) {
+            mTutorial.close();
+            mTutorial = null;
+        }
 
-    /** @see jp.co.omronsoft.openwnn.OpenWnn#onComputeInsets */
-    @Override public void onComputeInsets(InputMethodService.Insets outInsets) {
-        /* use default value. means;
-         * outInsets.touchableInsets = InputMethodService.Insets.TOUCHABLE_INSETS_VISIBLE;
-         */
+        super.hideWindow();
     }
 
     /** @see jp.co.omronsoft.openwnn.OpenWnn#onUpdateSelection */
     @Override public void onUpdateSelection(int oldSelStart, int oldSelEnd, int newSelStart, int newSelEnd, int candidatesStart, int candidatesEnd) {
 
-        mLastSelectionEnd = newSelEnd;
+        mComposingStartCursor = (candidatesStart < 0) ? newSelEnd : candidatesStart;
 
-        if (mComposingText.size(ComposingText.LAYER1) != 0) {
+        if (newSelStart != newSelEnd) {
+            clearCommitInfo();
+        }
+
+        if (mHasContinuedPrediction) {
+            mHasContinuedPrediction = false;
+            if (0 < mPrevCommitCount) {
+                mPrevCommitCount--;
+            }
+            return;
+        }
+
+        boolean isNotComposing = ((candidatesStart < 0) && (candidatesEnd < 0));
+        if ((mComposingText.size(ComposingText.LAYER1) != 0)
+            && !isNotComposing) {
             updateViewStatus(mTargetLayer, false, true);
         } else {
-            int commitEnd = mCommitStartCursor + mCommitLength;
-            if ((mCommitLength != 0)
-                && (commitEnd != newSelEnd)
-                && ((newSelEnd < oldSelEnd) || (commitEnd < newSelEnd))) {
+            if (0 < mPrevCommitCount) {
+                mPrevCommitCount--;
+            } else {
+                int commitEnd = mCommitStartCursor + mPrevCommitText.length();
+                if ((((newSelEnd < oldSelEnd) || (commitEnd < newSelEnd)) && clearCommitInfo())
+                    || isNotComposing) {
+                    if (isEnableL2Converter()) {
+                        breakSequence();
+                    }
 
-                if (isEnableL2Converter()) {
-                    mEnableAutoDeleteSpace = false;
-                    mConverter.breakSequence();
+                    if (mInputConnection != null) {
+                        if (isNotComposing && (mComposingText.size(ComposingText.LAYER1) != 0)) {
+                            mInputConnection.finishComposingText();
+                        }
+                    }
+                    initializeScreen();
                 }
-
-                clearCommitInfo();
-                initializeScreen();
             }
         }
     }
@@ -533,8 +594,7 @@
                 int hiddenState = newConfig.hardKeyboardHidden;
                 boolean hidden = (hiddenState == Configuration.HARDKEYBOARDHIDDEN_YES);
                 ((DefaultSoftKeyboardJAJP) mInputViewManager).setHardKeyboardHidden(hidden);
-                ((TextCandidatesViewManager)
-                 mCandidatesViewManager).setHardKeyboardHidden(hidden);
+                mEnableTutorial = hidden;
             }
         } catch (Exception ex) {
             /* do nothing if an error occurs. */
@@ -592,12 +652,6 @@
             if (!(ev.mode == ENGINE_MODE_SYMBOL || ev.mode == ENGINE_MODE_EISU_KANA)) {
                 initializeScreen();
             }
-            
-            if (ev.mode != ENGINE_MODE_SYMBOL) {
-                state = new EngineState();
-                state.temporaryMode = EngineState.TEMPORARY_DICTIONARY_MODE_NONE;
-                updateEngineState(state);
-            }
             return true;
 
         case OpenWnnEvent.UPDATE_CANDIDATE:
@@ -620,6 +674,10 @@
             ret = ((TextCandidatesViewManager)mCandidatesViewManager).onTouchSync();
             return ret;
 
+        case OpenWnnEvent.TOUCH_OTHER_KEY:
+            mStatus |= STATUS_INPUT_EDIT;
+            return true;
+
         default:
             break;
         }
@@ -661,6 +719,7 @@
                       ||(keyCode == KeyEvent.KEYCODE_SHIFT_RIGHT)
                       ||(keyCode == KeyEvent.KEYCODE_ALT_LEFT)
                       ||(keyCode == KeyEvent.KEYCODE_ALT_RIGHT)
+                      ||(keyCode == KeyEvent.KEYCODE_BACK && mCandidatesViewManager.getViewType() == CandidatesViewManager.VIEW_TYPE_FULL)
                       ||(keyEvent.isAltPressed() && (keyCode == KeyEvent.KEYCODE_SPACE)))))) {
 
             state = new EngineState();
@@ -739,6 +798,15 @@
         case OpenWnnEvent.INPUT_KEY:
             /* update shift/alt state */
             switch (keyCode) {
+            case KeyEvent.KEYCODE_DPAD_DOWN:
+            case KeyEvent.KEYCODE_DPAD_LEFT:
+            case KeyEvent.KEYCODE_DPAD_RIGHT:
+            case KeyEvent.KEYCODE_DPAD_UP:
+                if (mTutorial != null) {
+                    return true;
+                }
+                break;
+            
             case KeyEvent.KEYCODE_ALT_LEFT:
             case KeyEvent.KEYCODE_ALT_RIGHT:
                 if (keyEvent.getRepeatCount() == 0) {
@@ -772,18 +840,15 @@
             break;
 
         case OpenWnnEvent.SELECT_CANDIDATE:
-            boolean hasSetInfo = false;
-            if (isEnableL2Converter()) {
-                setCommitInfo(ev.word.candidate.length());
-                hasSetInfo = true;
-            }
+            initCommitInfoForWatchCursor();
             if (isEnglishPrediction()) {
                 mComposingText.clear();
             }
             mStatus = commitText(ev.word);
-            if (hasSetInfo) {
-                checkCommitInfo();
+            if (isEnglishPrediction() && !mEngineState.isSymbolList() && mEnableAutoInsertSpace) {
+                commitSpaceJustOne();
             }
+            checkCommitInfo();
 
             if (mEngineState.isSymbolList()) {
                 mEnableAutoDeleteSpace = false;
@@ -925,9 +990,7 @@
                 processHardwareKeyboardInputChar(str);
                 return true;
             } else {
-                mEnableAutoInsertSpace = false;
                 commitText(true);
-                mEnableAutoInsertSpace = true;
                 commitText(str.string);
                 initializeScreen();
                 return true;
@@ -940,7 +1003,9 @@
 
         } else if (key == KeyEvent.KEYCODE_SYM) {
             /* display the symbol list */
+            initCommitInfoForWatchCursor();
             mStatus = commitText(true);
+            checkCommitInfo();
             changeEngineMode(ENGINE_MODE_SYMBOL);
             mHardAlt = 0;
             updateMetaKeyStateDisplay();
@@ -957,10 +1022,11 @@
                                              mComposingText.toString(ComposingText.LAYER1).length());
                     mExactMatchMode = false;
                 } else {
-                    mComposingText.delete(ComposingText.LAYER1, false);
-                    if (mComposingText.size(ComposingText.LAYER1) == 0) {
+                    if (mComposingText.size(ComposingText.LAYER1) == 1) {
                         initializeScreen();
                         return true;
+                    } else {
+                        mComposingText.delete(ComposingText.LAYER1, false);
                     }
                 }
                 updateViewStatusForPrediction(true, true);
@@ -998,32 +1064,33 @@
 
             case KeyEvent.KEYCODE_DPAD_RIGHT:
                 if (!isEnableL2Converter()) {
-                    commitText(false);
-                    return false;
+                    if (mEngineState.keyboard == EngineState.KEYBOARD_12KEY) {
+                        commitText(false);
+                    }
                 } else {
                     processRightKeyEvent();
-                    return true;
                 }
+                return true;
 
             case KeyEvent.KEYCODE_DPAD_CENTER:
             case KeyEvent.KEYCODE_ENTER:
-                boolean hasSetInfo = false;
-            	if (isEnableL2Converter()) {
-                    if (isEnglishPrediction()) {
-                        setCommitInfo(mComposingText.toString(mTargetLayer).length());
-                    } else {
-                        int layer = mTargetLayer;
-                        int cursor = mComposingText.getCursor(layer);
-                        if (0 < cursor) {
-                            String tmp = mComposingText.toString(layer, 0, cursor - 1);
-                            setCommitInfo(tmp.length());
-                        }
+                if (!isEnglishPrediction()) {
+                    int cursor = mComposingText.getCursor(ComposingText.LAYER1);
+                    if (cursor < 1) {
+                        return true;
                     }
-                    hasSetInfo = true;
                 }
+                initCommitInfoForWatchCursor();
                 mStatus = commitText(true);
-            	if (hasSetInfo) {
-                    checkCommitInfo();
+                checkCommitInfo();
+
+                if (isEnglishPrediction()) {
+                    initializeScreen();
+                }
+
+                if (mEnableAutoHideKeyboard) {
+                    mInputViewManager.closing();
+                    requestHideSelf(0);
                 }
                 return true;
 
@@ -1059,14 +1126,30 @@
                 default:
                     return processKeyEventNoInputCandidateShown(ev);
                 }
-            } else if (key == KeyEvent.KEYCODE_BACK && isInputViewShown()) {
-                /*
-                 * If 'BACK' key is pressed when the SW-keyboard is shown
-                 * and the candidates view is not shown, dismiss the SW-keyboard.
-                 */
-                mInputViewManager.closing();
-                requestHideSelf(0);
-                return true;
+            } else {
+                switch (key) {
+                case KeyEvent.KEYCODE_DPAD_CENTER:
+                case KeyEvent.KEYCODE_ENTER:
+                    if (mEnableAutoHideKeyboard) {
+                        mInputViewManager.closing();
+                        requestHideSelf(0);
+                        return true;
+                    }
+                    break;
+                case KeyEvent.KEYCODE_BACK:
+                    /*
+                     * If 'BACK' key is pressed when the SW-keyboard is shown
+                     * and the candidates view is not shown, dismiss the SW-keyboard.
+                     */
+                    if (isInputViewShown()) {
+                        mInputViewManager.closing();
+                        requestHideSelf(0);
+                        return true;
+                    }
+                    break;
+                default:
+                    break;
+                }
             }
         }
 
@@ -1086,9 +1169,11 @@
             mHardShift = 0;
             updateMetaKeyStateDisplay();
             if (mEngineState.isEnglish()) {
+                /* English mode to Japanese mode */
                 ((DefaultSoftKeyboardJAJP) mInputViewManager).changeKeyMode(DefaultSoftKeyboard.KEYMODE_JA_FULL_HIRAGANA);
                 mConverter = mConverterJAJP;
             } else {
+                /* Japanese mode to English mode */
                 ((DefaultSoftKeyboardJAJP) mInputViewManager).changeKeyMode(DefaultSoftKeyboard.KEYMODE_JA_HALF_ALPHABET);
                 mConverter = mConverterEN;
             }
@@ -1096,8 +1181,9 @@
 
         } else if(ev.isAltPressed()){
             /* display the symbol list (G1 specific. same as KEYCODE_SYM) */
-            commitAllText();
-
+            if (!mEngineState.isSymbolList()) {
+                commitAllText();
+            }
             changeEngineMode(ENGINE_MODE_SYMBOL);
             mHardAlt = 0;
             updateMetaKeyStateDisplay();
@@ -1107,8 +1193,9 @@
             if (mComposingText.size(0) == 0) {
                 commitText(" ");
                 mCandidatesViewManager.clearCandidates();
+                breakSequence();
             } else {
-                setCommitInfo(mComposingText.toString(mTargetLayer).length());
+                initCommitInfoForWatchCursor();
                 commitText(true);
                 commitSpaceJustOne();
                 checkCommitInfo();
@@ -1120,6 +1207,7 @@
             if (mComposingText.size(0) == 0) {
                 commitText(" ");
                 mCandidatesViewManager.clearCandidates();
+                breakSequence();
             } else {
                 startConvert(EngineState.CONVERT_TYPE_RENBUN);
             }
@@ -1137,9 +1225,7 @@
             if (mPreConverter == null) {
                 Matcher m = mEnglishAutoCommitDelimiter.matcher(str.string);
                 if (m.matches()) {
-                    mEnableAutoInsertSpace = false;
                     commitText(true);
-                    mEnableAutoInsertSpace = true;
                     
                     commit = true;
                 }
@@ -1171,28 +1257,28 @@
     }
 
     /** Thread for updating the candidates view */
-    private final Runnable updatePredictionRunnable = new Runnable() {
-            public void run() {
-                int candidates = 0;
-                int cursor = mComposingText.getCursor(ComposingText.LAYER1);
-                if (isEnableL2Converter() || mEngineState.isSymbolList()) {
-                    if (mExactMatchMode) {
-                        /* exact matching */
-                        candidates = mConverter.predict(mComposingText, 0, cursor);
-                    } else {
-                        /* normal prediction */
-                        candidates = mConverter.predict(mComposingText, 0, -1);
-                    }
-                }
-
-                /* update the candidates view */
-                if (candidates > 0) {
-                    mCandidatesViewManager.displayCandidates(mConverter);
-                } else {
-                    mCandidatesViewManager.clearCandidates();
-                }
+    private void updatePrediction() {
+        int candidates = 0;
+        int cursor = mComposingText.getCursor(ComposingText.LAYER1);
+        if (isEnableL2Converter() || mEngineState.isSymbolList()) {
+            if (mExactMatchMode) {
+                /* exact matching */
+                candidates = mConverter.predict(mComposingText, 0, cursor);
+            } else {
+                /* normal prediction */
+                candidates = mConverter.predict(mComposingText, 0, -1);
             }
-        };
+        }
+
+        /* update the candidates view */
+        if (candidates > 0) {
+            mHasContinuedPrediction = ((mComposingText.size(ComposingText.LAYER1) == 0)
+                                       && !mEngineState.isSymbolList());
+            mCandidatesViewManager.displayCandidates(mConverter);
+        } else {
+            mCandidatesViewManager.clearCandidates();
+        }
+    }
 
     /**
      * Handle a left key event.
@@ -1216,7 +1302,7 @@
             }
         }
 
-        mCommitCount = 0;
+        mCommitCount = 0; /* retry consecutive clause conversion if necessary. */
         mStatus = STATUS_INPUT_EDIT;
         updateViewStatus(mTargetLayer, true, true);
     }
@@ -1226,11 +1312,12 @@
      */
     private void processRightKeyEvent() {
         int layer = mTargetLayer;
+        ComposingText composingText = mComposingText;
         if (mExactMatchMode || (mEngineState.isConvertState())) {
-            int textSize = mComposingText.size(ComposingText.LAYER1);
-            if (mComposingText.getCursor(ComposingText.LAYER1) == textSize) {
+            int textSize = composingText.size(ComposingText.LAYER1);
+            if (composingText.getCursor(ComposingText.LAYER1) == textSize) {
                 mExactMatchMode = false;
-                layer = ComposingText.LAYER1;
+                layer = ComposingText.LAYER1; /* convert -> prediction */
                 EngineState state = new EngineState();
                 state.convertType = EngineState.CONVERT_TYPE_NONE;
                 updateEngineState(state);
@@ -1238,16 +1325,16 @@
                 if (mEngineState.isEisuKana()) {
                     mExactMatchMode = true;
                 }
-                mComposingText.moveCursor(ComposingText.LAYER1, 1);
+                composingText.moveCursor(ComposingText.LAYER1, 1);
             }
         } else {
-            if (mComposingText.getCursor(ComposingText.LAYER1)
-                < mComposingText.size(ComposingText.LAYER1)) {
-                mComposingText.moveCursor(ComposingText.LAYER1, 1);
+            if (composingText.getCursor(ComposingText.LAYER1)
+                    < composingText.size(ComposingText.LAYER1)) {
+                composingText.moveCursor(ComposingText.LAYER1, 1);
             }
         }
 
-        mCommitCount = 0;
+        mCommitCount = 0; /* retry consecutive clause conversion if necessary. */
         mStatus = STATUS_INPUT_EDIT;
 
         updateViewStatus(layer, true, true);
@@ -1278,15 +1365,25 @@
             return false;
             
         case KeyEvent.KEYCODE_DPAD_CENTER:
-        case KeyEvent.KEYCODE_BACK:
             ret = true;
             break;
+
+        case KeyEvent.KEYCODE_BACK:
+            if (mCandidatesViewManager.getViewType() == CandidatesViewManager.VIEW_TYPE_FULL) {
+                mStatus &= ~STATUS_CANDIDATE_FULL;
+                mCandidatesViewManager.setViewType(CandidatesViewManager.VIEW_TYPE_NORMAL);
+                return true;
+            } else {
+                ret = true;
+            }
+            break;
         
         default:
             return true;
         }
 
         if (mConverter != null) {
+            /* initialize the converter */
             mConverter.init();
         }
         updateViewStatusForPrediction(true, true);
@@ -1349,15 +1446,22 @@
                 } else if (layer == ComposingText.LAYER2) {
                     highlightEnd = mComposingText.toString(layer, 0, 0).length();
 
+                    /* highlights the first segment */
                     mDisplayText.setSpan(SPAN_CONVERT_BGCOLOR_HL, 0,
                                          highlightEnd,
                                          Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
                 }
 
                 if (FIX_CURSOR_TEXT_END && (highlightEnd != 0)) {
+                    /* highlights remaining text */
                     mDisplayText.setSpan(SPAN_REMAIN_BGCOLOR_HL, highlightEnd,
                                          mComposingText.toString(layer).length(),
                                          Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+
+                    /* text color in the highlight */
+                    mDisplayText.setSpan(SPAN_TEXTCOLOR, 0,
+                                         mComposingText.toString(layer).length(),
+                                         Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
                 }
             }
 
@@ -1379,25 +1483,32 @@
     private void updateCandidateView() {
         switch (mTargetLayer) {
         case ComposingText.LAYER0:
-        case ComposingText.LAYER1:
+        case ComposingText.LAYER1: /* prediction */
             if (mEnablePrediction || mEngineState.isSymbolList() || mEngineState.isEisuKana()) {
                 /* update the candidates view */
                 if ((mComposingText.size(ComposingText.LAYER1) != 0)
                     && !mEngineState.isConvertState()) {
-                    mDelayUpdateHandler.removeCallbacks(updatePredictionRunnable);
-                    mDelayUpdateHandler.postDelayed(updatePredictionRunnable, 250);
+                    
+                    mHandler.removeMessages(MSG_PREDICTION);
+                    if (mCandidatesViewManager.getCurrentView().isShown()) {
+                        mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_PREDICTION),
+                                                    PREDICTION_DELAY_MS_SHOWING_CANDIDATE);
+                    } else {
+                        mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_PREDICTION),
+                                                    PREDICTION_DELAY_MS_1ST);
+                    }
                 } else {
-                    mDelayUpdateHandler.removeCallbacks(updatePredictionRunnable);
-                    updatePredictionRunnable.run();
+                    mHandler.removeMessages(MSG_PREDICTION);
+                    updatePrediction();
                 }
             } else {
-                mDelayUpdateHandler.removeCallbacks(updatePredictionRunnable);
+                mHandler.removeMessages(MSG_PREDICTION);
                 mCandidatesViewManager.clearCandidates();
             }
             break;
-        case ComposingText.LAYER2:
+        case ComposingText.LAYER2: /* convert */
             if (mCommitCount == 0) {
-                mDelayUpdateHandler.removeCallbacks(updatePredictionRunnable);
+                mHandler.removeMessages(MSG_PREDICTION);
                 mConverter.convert(mComposingText);
             }
 
@@ -1439,7 +1550,7 @@
         if (mConverter != null) {
             if (learn) {
                 if (mEngineState.isRenbun()) {
-                    learnWord(0);
+                    learnWord(0); /* select the top of the clauses */
                 } else {
                     if (mComposingText.size(ComposingText.LAYER1) != 0) {
                         String stroke = mComposingText.toString(ComposingText.LAYER1, 0, mComposingText.getCursor(layer) - 1);
@@ -1449,7 +1560,7 @@
                     }
                 }
             } else {
-                mConverter.breakSequence();
+                breakSequence();
             }
         }
         return commitTextThroughInputConnection(tmp);
@@ -1459,11 +1570,7 @@
      * Commit all uncommitted words.
      */
     private void commitAllText() {
-        boolean hasSetInfo = false;
-        if (isEnableL2Converter()) {
-            setCommitInfo(mComposingText.toString(mTargetLayer).length());
-            hasSetInfo = true;
-        }
+        initCommitInfoForWatchCursor();
         if (mEngineState.isConvertState()) {
             commitConvertingText();
         } else {
@@ -1471,9 +1578,7 @@
                                      mComposingText.size(ComposingText.LAYER1));
             mStatus = commitText(true);
         }
-        if (hasSetInfo) {
-            checkCommitInfo();
-        }
+        checkCommitInfo();
     }
 
     /**
@@ -1497,7 +1602,7 @@
     private void commitText(String str) {
         mInputConnection.commitText(str, (FIX_CURSOR_TEXT_END ? 1 : str.length()));
         mPrevCommitText.append(str);
-        mCommitLength += str.length();
+        mPrevCommitCount++;
         mEnableAutoDeleteSpace = true;
         updateViewStatusForPrediction(false, false);
     }
@@ -1513,6 +1618,7 @@
 
         mInputConnection.commitText(string, (FIX_CURSOR_TEXT_END ? 1 : string.length()));
         mPrevCommitText.append(string);
+        mPrevCommitCount++;
         
         int cursor = mComposingText.getCursor(layer);
         if (cursor > 0) {
@@ -1523,7 +1629,7 @@
         mCommitCount++;
 
         if ((layer == ComposingText.LAYER2) && (mComposingText.size(layer) == 0)) {
-            layer = 1;
+            layer = 1; /* for connected prediction */
         }
 
         boolean commited = autoCommitEnglish();
@@ -1581,7 +1687,7 @@
             if (mEngineState.isEisuKana()) {
                 state.temporaryMode = EngineState.TEMPORARY_DICTIONARY_MODE_NONE;
                 updateEngineState(state);
-                updateViewStatusForPrediction(true, true);
+                updateViewStatusForPrediction(true, true); /* prediction only */
             } else {
                 startConvert(EngineState.CONVERT_TYPE_EISU_KANA);
             }
@@ -1670,6 +1776,7 @@
                 break;
             }
             myState.dictionarySet = state.dictionarySet;
+            breakSequence();
 
             /* update keyboard setting */
             if (state.keyboard == EngineState.INVALID) {
@@ -1716,16 +1823,14 @@
                 if (++mCurrentSymbol >= SYMBOL_LISTS.length) {
                     mCurrentSymbol = 0;
                 }
-                if (!mEnableEmoji) {
-                    if (SYMBOL_LISTS[mCurrentSymbol] == SymbolList.SYMBOL_JAPANESE_EMOJI) {
-                        if (++mCurrentSymbol >= SYMBOL_LISTS.length) {
-                            mCurrentSymbol = 0;
-                        }
-                    }
+                if (mEnableSymbolListNonHalf) {
+                    mConverterSymbolEngineBack.setDictionary(SYMBOL_LISTS[mCurrentSymbol]);
+                } else {
+                    mConverterSymbolEngineBack.setDictionary(SymbolList.SYMBOL_ENGLISH);
                 }
-                mConverterSymbolEngineBack.setDictionary(SYMBOL_LISTS[mCurrentSymbol]);
                 mConverter = mConverterSymbolEngineBack;
                 mDisableAutoCommitEnglishMask |= AUTO_COMMIT_ENGLISH_SYMBOL;
+                breakSequence();
                 break;
 
             default:
@@ -1878,7 +1983,7 @@
         }
 
         ComposingText text = mComposingText;
-        text.insertStrSegment(0, ComposingText.LAYER1, new StrSegment(chars));
+        appendStrSegment(new StrSegment(chars));
 
         if (!isAlphabetLast(text.toString(ComposingText.LAYER1))) {
             /* commit if the input character is not alphabet */
@@ -1908,9 +2013,10 @@
             if (mComposingText.size(0) == 0) {
                 mCandidatesViewManager.clearCandidates();
                 commitText(new String(chars));
+                breakSequence();
             } else {
                 if (isEnglishPrediction()) {
-                    setCommitInfo(mComposingText.toString(mTargetLayer).length());
+                    initCommitInfoForWatchCursor();
                     commitText(true);
                     commitSpaceJustOne();
                     checkCommitInfo();
@@ -1934,9 +2040,7 @@
             }
         
             if (commit) {
-                mEnableAutoInsertSpace = false;
                 commitText(true);
-                mEnableAutoInsertSpace = true;
 
                 appendStrSegment(new StrSegment(chars));
                 commitText(true);
@@ -2016,16 +2120,12 @@
                     CharSequence str = seq.subSequence(1, 2);
                     mInputConnection.commitText(str, 1);
                     mPrevCommitText.append(str);
+                    mPrevCommitCount++;
                 }
 
-                mDelayUpdateHandler.removeCallbacks(updatePredictionRunnable);
-
+                mHandler.removeMessages(MSG_PREDICTION);
                 mCandidatesViewManager.clearCandidates();
                 return true;
-            } else {
-                if (mEnableAutoInsertSpace) {
-                    commitSpaceJustOne();
-                }
             }
         }
         return false;
@@ -2121,6 +2221,7 @@
             mDirectInputMode = true;
             return;
         }
+
         mEnableLearning   = preference.getBoolean("opt_enable_learning", true);
         mEnablePrediction = preference.getBoolean("opt_prediction", true);
         mEnableSpellCorrection = preference.getBoolean("opt_spell_correction", true);
@@ -2128,13 +2229,20 @@
         int preferenceDictionary = EngineState.PREFERENCE_DICTIONARY_NONE;
         mEnableConverter = true;
         mEnableSymbolList = true;
-        mEnableEmoji = false;
+        mEnableSymbolListNonHalf = true;
         mAutoCaps = preference.getBoolean("auto_caps", true);
+        mFilter.filter = 0;
+        mEnableAutoInsertSpace = true;
+        mEnableAutoHideKeyboard = false;
 
         switch (info.inputType & EditorInfo.TYPE_MASK_CLASS) {
         case EditorInfo.TYPE_CLASS_NUMBER:
         case EditorInfo.TYPE_CLASS_DATETIME:
+            mEnableConverter = false;
+            break;
+
         case EditorInfo.TYPE_CLASS_PHONE:
+            mEnableSymbolList = false;
             mEnableConverter = false;
             break;
 
@@ -2148,11 +2256,22 @@
             case EditorInfo.TYPE_TEXT_VARIATION_PASSWORD:
                 mEnableLearning = false;
                 mEnableConverter = false;
+                mEnableSymbolListNonHalf = false;
+                mFilter.filter = CandidateFilter.FILTER_NON_ASCII; 
                 mDisableAutoCommitEnglishMask |= AUTO_COMMIT_ENGLISH_OFF;
+                mEnableAutoHideKeyboard = true;
                 break;
 
             case EditorInfo.TYPE_TEXT_VARIATION_EMAIL_ADDRESS:
+                mFilter.filter = CandidateFilter.FILTER_NON_ASCII; 
+                mEnableSymbolListNonHalf = false;
+                mEnableAutoInsertSpace = false;
+                mDisableAutoCommitEnglishMask |= AUTO_COMMIT_ENGLISH_OFF;
+                preferenceDictionary = EngineState.PREFERENCE_DICTIONARY_EMAIL_ADDRESS_URI;
+                break;
+
             case EditorInfo.TYPE_TEXT_VARIATION_URI:
+                mEnableAutoInsertSpace = false;
                 mDisableAutoCommitEnglishMask |= AUTO_COMMIT_ENGLISH_OFF;
                 preferenceDictionary = EngineState.PREFERENCE_DICTIONARY_EMAIL_ADDRESS_URI;
                 break;
@@ -2176,19 +2295,10 @@
             break;
         }
 
-        if (ENABLE_EMOJI_LIMITATION) {
-            Bundle bundle = info.extras;
-            if (bundle != null) {
-                mEnableEmoji = bundle.getBoolean("allowEmoji");
-            }
-        } else {
-            mEnableEmoji = true;
-        }
-        if (mEnableEmoji) {
+        if (mFilter.filter == 0) {
             mConverterEN.setFilter(null);
             mConverterJAJP.setFilter(null);
         } else {
-            mFilter.setFilter(CandidateFilter.FILTER_EMOJI);
             mConverterEN.setFilter(mFilter);
             mConverterJAJP.setFilter(mFilter);
         }
@@ -2199,6 +2309,8 @@
         state.keyboard = mEngineState.keyboard;
         updateEngineState(state);
         updateMetaKeyStateDisplay();
+
+        checkTutorial(info.privateImeOptions);
     }
     
     /**
@@ -2213,7 +2325,7 @@
         ComposingText composingText = mComposingText;
         
         if (composingText.size(ComposingText.LAYER1) >= LIMIT_INPUT_NUMBER) {
-            return;
+            return; /* do nothing */
         }
         composingText.insertStrSegment(ComposingText.LAYER0, ComposingText.LAYER1, str);
         return;
@@ -2231,6 +2343,8 @@
 
             String text = mComposingText.toString(ComposingText.LAYER2);
             mInputConnection.commitText(text, (FIX_CURSOR_TEXT_END ? 1 : text.length()));
+            mPrevCommitText.append(text);
+            mPrevCommitCount++;
             initializeScreen();
         }
     }
@@ -2239,16 +2353,22 @@
      * Initialize the screen displayed by IME
      */
     private void initializeScreen() {
+        if (mComposingText.size(ComposingText.LAYER0) != 0) {
+            mInputConnection.setComposingText("", 0);
+        }
         mComposingText.clear();
-        mInputConnection.setComposingText("", 0);
         mExactMatchMode = false;       
         mStatus = STATUS_INIT;
-        mDelayUpdateHandler.removeCallbacks(updatePredictionRunnable);
+        mHandler.removeMessages(MSG_PREDICTION);
         View candidateView = mCandidatesViewManager.getCurrentView();
         if ((candidateView != null) && candidateView.isShown()) {
             mCandidatesViewManager.clearCandidates();
         }
         mInputViewManager.onUpdateState(this);
+
+        EngineState state = new EngineState();
+        state.temporaryMode = EngineState.TEMPORARY_DICTIONARY_MODE_NONE;
+        updateEngineState(state);
     }
     
     /**
@@ -2258,7 +2378,7 @@
      * @return          {@code true} if the tail is alphabet; {@code false} if otherwise.
      */
     private boolean isAlphabetLast(String str) {
-        Matcher m = ENGLISH_CHARACTER.matcher(str);
+        Matcher m = ENGLISH_CHARACTER_LAST.matcher(str);
         return m.matches();
     }
 
@@ -2313,42 +2433,102 @@
     }
 
     /**
-     * Remember the commit test's info.
-     * @param length  length of commit text
+     * Initialize the committed text's information.
      */
-    private void setCommitInfo(int length) {
-        if (length == 0) {
+    private void initCommitInfoForWatchCursor() {
+        if (!isEnableL2Converter()) {
             return;
         }
-        mCommitLength = length;
-        mCommitStartCursor = mLastSelectionEnd - mComposingText.size(mTargetLayer);
+
+        mCommitStartCursor = mComposingStartCursor;
         mPrevCommitText.delete(0, mPrevCommitText.length());
     }
     
     /**
      * Clear the commit text's info.
+     * @return {@code true}:cleared, {@code false}:has already cleared.
      */
-    private void clearCommitInfo() {
-        mCommitLength = 0;
-        mCommitStartCursor = 0;
+    private boolean clearCommitInfo() {
+        if (mCommitStartCursor < 0) {
+            return false;
+        }
+
+        mCommitStartCursor = -1;
+        return true;
     }
 
     /**
      * Verify the commit text.
      */
     private void checkCommitInfo() {
-        if (mCommitLength == 0) {
+        if (mCommitStartCursor < 0) {
             return;
         }
 
         int composingLength = mComposingText.toString(mTargetLayer).length();
-        CharSequence seq = mInputConnection.getTextBeforeCursor(mCommitLength + composingLength, 0);
+        CharSequence seq = mInputConnection.getTextBeforeCursor(mPrevCommitText.length() + composingLength, 0);
         seq = seq.subSequence(0, seq.length() - composingLength);
         if (!seq.equals(mPrevCommitText.toString())) {
+            mPrevCommitCount = 0;
             clearCommitInfo();
-    	}
+        }
+    }
+
+    /**
+     * Check and start the tutorial if it is the tutorial mode.
+     * 
+     * @param privateImeOptions IME's options
+     */
+    private void checkTutorial(String privateImeOptions) {
+        if (privateImeOptions == null) return;
+        if (privateImeOptions.equals("com.android.setupwizard:ShowTutorial")) {
+            if ((mTutorial == null) && mEnableTutorial) startTutorial();
+        } else if (privateImeOptions.equals("com.android.setupwizard:HideTutorial")) {
+            if (mTutorial != null) {
+                if (mTutorial.close()) {
+                    mTutorial = null;
+                }
+            }
+        }
+    }
+
+    /**
+     * Start the tutorial
+     */
+    private void startTutorial() {
+        DefaultSoftKeyboardJAJP manager = (DefaultSoftKeyboardJAJP) mInputViewManager;
+        manager.setDefaultKeyboard();
+        if (mEngineState.keyboard == EngineState.KEYBOARD_QWERTY) {
+            manager.changeKeyboardType(DefaultSoftKeyboard.KEYBOARD_12KEY);
+        }
+
+        DefaultSoftKeyboardJAJP inputManager = ((DefaultSoftKeyboardJAJP) mInputViewManager);
+        View v = inputManager.getKeyboardView();
+        v.setOnTouchListener(new View.OnTouchListener() {
+				public boolean onTouch(View v, MotionEvent event) {
+					return true;
+				}});
+        mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_START_TUTORIAL), 500);
+    }
+
+    /**
+     * Close the tutorial
+     */
+    public void tutorialDone() {
+        mTutorial = null;
+    }
+
+    /** @see OpenWnn#close */
+    @Override protected void close() {
+        mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_CLOSE), 0);
+    }
+
+    /**
+     * Break the sequence of words.
+     */
+    private void breakSequence() {
+        mEnableAutoDeleteSpace = false;
+        mConverterJAJP.breakSequence();
+        mConverterEN.breakSequence();
     }
 }
-
-
-
diff --git a/src/jp/co/omronsoft/openwnn/OpenWnnZHCN.java b/src/jp/co/omronsoft/openwnn/OpenWnnZHCN.java
index 043730c..b9f4eac 100644
--- a/src/jp/co/omronsoft/openwnn/OpenWnnZHCN.java
+++ b/src/jp/co/omronsoft/openwnn/OpenWnnZHCN.java
@@ -18,25 +18,25 @@
 
 
 import jp.co.omronsoft.openwnn.EN.OpenWnnEngineEN;
-import jp.co.omronsoft.openwnn.ZH.DefaultSoftKeyboardZH;
-import jp.co.omronsoft.openwnn.ZH.LetterConverterZH;
-import jp.co.omronsoft.openwnn.ZH.CN.OpenWnnEngineZHCN;
+import jp.co.omronsoft.openwnn.ZH.*;
+import jp.co.omronsoft.openwnn.ZH.CN.*;
 import jp.co.omronsoft.openwnn.StrSegmentClause;
 import android.content.SharedPreferences;
 import android.content.Context;
 import android.content.res.Configuration;
-import android.inputmethodservice.InputMethodService;
 import android.os.Handler;
-import android.os.Bundle;
+import android.os.Message;
 import android.preference.PreferenceManager;
 import android.text.SpannableStringBuilder;
 import android.text.Spanned;
 import android.text.style.BackgroundColorSpan;
 import android.text.style.CharacterStyle;
+import android.text.style.ForegroundColorSpan;
 import android.text.style.UnderlineSpan;
 import android.util.Log;
 import android.view.KeyEvent;
 import android.view.inputmethod.EditorInfo;
+import android.view.MotionEvent;
 import android.view.View;
 import android.view.KeyCharacterMap;
 import android.text.method.MetaKeyKeyListener;
@@ -71,15 +71,14 @@
     /** Never move cursor in to the composing text (adapting to IMF's specification change) */
     private static final boolean FIX_CURSOR_TEXT_END = true;
 
-    /** Whether using Emoji or not */
-    private static final boolean ENABLE_EMOJI_LIMITATION = true;
-
     /** Highlight color style for the converted clause */
     private static final CharacterStyle SPAN_CONVERT_BGCOLOR_HL   = new BackgroundColorSpan(0xFF8888FF);
     /** Highlight color style for the selected string  */
     private static final CharacterStyle SPAN_EXACT_BGCOLOR_HL     = new BackgroundColorSpan(0xFF66CDAA);
     /** Highlight color style for the composing text */
     private static final CharacterStyle SPAN_REMAIN_BGCOLOR_HL    = new BackgroundColorSpan(0xFFF0FFFF);
+    /** Highlight text color */
+    private static final CharacterStyle SPAN_TEXTCOLOR  = new ForegroundColorSpan(0xFF000000);
     /** Underline style for the composing text */
     private static final CharacterStyle SPAN_UNDERLINE            = new UnderlineSpan();
 
@@ -92,8 +91,8 @@
     /** IME's status for {@code mStatus}(all candidates are displayed). */
     private static final int STATUS_CANDIDATE_FULL  = 0x0010;
 
-    /** Alphabet pattern */
-    private static final Pattern ENGLISH_CHARACTER = Pattern.compile(".*[a-zA-Z]$");
+    /** Alphabet-last pattern */
+    private static final Pattern ENGLISH_CHARACTER_LAST = Pattern.compile(".*[a-zA-Z]$");
 
     /**
      *  Private area character code got by {@link KeyEvent#getUnicodeChar()}.
@@ -111,6 +110,21 @@
     /** Bit flag for English auto commit mode (symbol list) */
     private static final int AUTO_COMMIT_ENGLISH_SYMBOL  = 0x0010;
 
+    /** Message for {@code mHandler} (execute prediction) */
+    private static final int MSG_PREDICTION = 0;
+
+    /** Message for {@code mHandler} (execute tutorial) */
+    private static final int MSG_START_TUTORIAL = 1;
+
+    /** Message for {@code mHandler} (close) */
+    private static final int MSG_CLOSE = 2;
+
+    /** Delay time(msec.) to start prediction after key input when the candidates view is not shown. */
+    private static final int PREDICTION_DELAY_MS_1ST = 200;
+
+    /** Delay time(msec.) to start prediction after key input when the candidates view is shown. */
+    private static final int PREDICTION_DELAY_MS_SHOWING_CANDIDATE = 200;
+    
 
     /** Convert engine's state */
     private class EngineState {
@@ -223,9 +237,6 @@
     /** Instance of this service */
     private static OpenWnnZHCN mSelf = null;
 
-    /** Handler for drawing the candidates view */
-    private Handler mDelayUpdateHandler;
-
     /** Backup for switching the converter */
     private WnnEngine mConverterBack;
 
@@ -267,8 +278,8 @@
     /** Whether displaying the symbol list */
     private boolean mEnableSymbolList = true;
 
-    /** Whether being able to use Emoji */
-    private boolean mEnableEmoji = false;
+    /** Whether non ASCII code is enabled */
+    private boolean mEnableSymbolListNonHalf = true;
 
     /** Enable mistyping spell correction or not */
     private boolean mEnableSpellCorrection = true;
@@ -279,14 +290,17 @@
     /** Whether removing a space before a separator or not. (in English mode) */
     private boolean mEnableAutoDeleteSpace = false;
 
-    /** Whether appending a space to a selected word or not (in English mode) */
+    /** Whether auto-spacing is enabled or not. */
     private boolean mEnableAutoInsertSpace = true;
 
+    /** Whether dismissing the keyboard when the enter key is pressed */
+    private boolean mEnableAutoHideKeyboard = true;
+
     /** Number of committed clauses on consecutive clause conversion */
     private int mCommitCount = 0;
 
     /** Target layer of the {@link ComposingText} */
-    private int mTargetLayer = 0;
+    private int mTargetLayer = 1;
 
     /** Current orientation of the display */
     private int mOrientation = Configuration.ORIENTATION_UNDEFINED;
@@ -297,11 +311,8 @@
     /** Regular expression pattern for English separators */
     private  Pattern mEnglishAutoCommitDelimiter = null;
 
-    /** Lenght of committed text */
-    private int mCommitLength = 0;
-
-    /** Last cursor position */
-    private int mLastSelectionEnd = 0;
+    /** Cursor position in the composing text */
+    private int mComposingStartCursor = 0;
 
     /** Cursor position before committing text */
     private int mCommitStartCursor = 0;
@@ -309,8 +320,8 @@
     /** Previous committed text */
     private StringBuffer mPrevCommitText = null;
 
-    /** List of words in the user dictionary */
-    private WnnWord[] mUserDictionaryWords = null;
+    /** Call count of {@code commitText} */
+    private int mPrevCommitCount = 0;
 
     /** Shift lock status of the Hardware keyboard */
     private int mHardShift;
@@ -318,21 +329,64 @@
     /** SHIFT key state (pressing) */
     private boolean mShiftPressing;
 
-    /** Alt lock status of the Hardware keyboard */
+    /** ALT lock status of the Hardware keyboard */
     private int mHardAlt;
 
     /** ALT key state (pressing) */
     private boolean mAltPressing;
-    
+
     /** Shift lock toggle definition */
     private static final int[] mShiftKeyToggle = {0, MetaKeyKeyListener.META_SHIFT_ON, MetaKeyKeyListener.META_CAP_LOCKED};
 
-    /** Alt lock toggle definition */
+    /** ALT lock toggle definition */
     private static final int[] mAltKeyToggle = {0, MetaKeyKeyListener.META_ALT_ON, MetaKeyKeyListener.META_ALT_LOCKED};
 
     /** Auto caps mode */
     private boolean mAutoCaps = false;
+
+    /** List of words in the user dictionary */
+    private WnnWord[] mUserDictionaryWords = null;
     
+    /** Tutorial */
+    private TutorialZHCN mTutorial;
+
+    /** Whether tutorial mode or not */
+    private boolean mEnableTutorial;
+
+    /** Whether there is a continued predicted candidate */
+    private boolean mHasContinuedPrediction = false;
+
+    /** {@code Handler} for drawing candidates/displaying tutorial */
+    Handler mHandler = new Handler() {
+            @Override
+                public void handleMessage(Message msg) {
+                switch (msg.what) {
+                case MSG_PREDICTION:
+                    updatePrediction();
+                    break;
+                case MSG_START_TUTORIAL:
+                    if (mTutorial == null) {
+                        if (isInputViewShown()) {
+                            DefaultSoftKeyboardZH inputManager = ((DefaultSoftKeyboardZH) mInputViewManager);
+                            View v = inputManager.getKeyboardView();
+                            mTutorial = new TutorialZHCN(OpenWnnZHCN.this, v, inputManager);
+                                                         
+                            mTutorial.start();
+                        } else {
+                            /* Try again soon if the view is not yet showing */
+                            sendMessageDelayed(obtainMessage(MSG_START_TUTORIAL), 100);
+                        }
+                    }
+                    break;
+                case MSG_CLOSE:
+                    if (mConverterZHCN != null) mConverterZHCN.close();
+                    if (mConverterEN != null) mConverterEN.close();
+                    if (mConverterSymbolEngineBack != null) mConverterSymbolEngineBack.close();
+                    break;
+                }
+            }
+        };
+
     /** The candidate filter */
     private CandidateFilter mFilter;
 
@@ -345,9 +399,7 @@
         mComposingText = new ComposingText();
         mCandidatesViewManager = new TextCandidatesViewManager(-1);
         mInputViewManager  = new DefaultSoftKeyboardZH();
-
-        mConverter = mConverterZHCN = new OpenWnnEngineZHCN(
-                                                            "libWnnZHCNDic.so",
+        mConverter = mConverterZHCN = new OpenWnnEngineZHCN("libWnnZHCNDic.so",
                                                             "/data/data/jp.co.omronsoft.openwnn/writableZHCN.dic");
 
         mConverterEN = new OpenWnnEngineEN("/data/data/jp.co.omronsoft.openwnn/writableEN.dic");
@@ -357,7 +409,6 @@
         mDisplayText = new SpannableStringBuilder();
         mAutoHideMode = false;
 
-        mDelayUpdateHandler = new Handler();
         mPrevCommitText = new StringBuffer();
     }
 
@@ -387,9 +438,7 @@
         int hiddenState = getResources().getConfiguration().hardKeyboardHidden;
         boolean hidden = (hiddenState == Configuration.HARDKEYBOARDHIDDEN_YES);
         ((DefaultSoftKeyboardZH) mInputViewManager).setHardKeyboardHidden(hidden);
-        ((TextCandidatesViewManager)
-         mCandidatesViewManager).setHardKeyboardHidden(hidden);
-
+        mEnableTutorial = hidden;
         return super.onCreateInputView();
     }
 
@@ -400,16 +449,13 @@
         state.temporaryMode = EngineState.TEMPORARY_DICTIONARY_MODE_NONE;
         updateEngineState(state);
 
+        mPrevCommitCount = 0;
         clearCommitInfo();
 
-        if (mDirectInputMode) {
-            DefaultSoftKeyboardZH inputManager = ((DefaultSoftKeyboardZH)mInputViewManager);
-            inputManager.setDefaultKeyboard();
-        }
+        ((DefaultSoftKeyboard) mInputViewManager).resetCurrentKeyboard();
 
         super.onStartInputView(attribute, restarting);
 
-        mEnableAutoDeleteSpace = false;
         /* initialize views */
         mCandidatesViewManager.clearCandidates();
         /* initialize status */
@@ -429,8 +475,7 @@
         ((TextCandidatesViewManager)mCandidatesViewManager).setAutoHide(true);
 
         if (isEnableL2Converter()) {
-            mEnableAutoDeleteSpace = false;
-            mConverter.breakSequence();
+            breakSequence();
         }
     }
 
@@ -439,37 +484,55 @@
         mComposingText.clear();
         mInputViewManager.onUpdateState(this);
         clearCommitInfo();
+        mHandler.removeMessages(MSG_START_TUTORIAL);
         mInputViewManager.closing();
-        super.hideWindow();
-    }
+        if (mTutorial != null) {
+            mTutorial.close();
+            mTutorial = null;
+        }
 
-    /** @see jp.co.omronsoft.openwnn.OpenWnn#onComputeInsets */
-    @Override public void onComputeInsets(InputMethodService.Insets outInsets) {
-        /* use default value. means;
-         * outInsets.touchableInsets = InputMethodService.Insets.TOUCHABLE_INSETS_VISIBLE;
-         */
+        super.hideWindow();
     }
 
     /** @see jp.co.omronsoft.openwnn.OpenWnn#onUpdateSelection */
     @Override public void onUpdateSelection(int oldSelStart, int oldSelEnd, int newSelStart, int newSelEnd, int candidatesStart, int candidatesEnd) {
 
-        mLastSelectionEnd = newSelEnd;
+        mComposingStartCursor = (candidatesStart < 0) ? newSelEnd : candidatesStart;
 
-        if (mComposingText.size(ComposingText.LAYER1) != 0) {
+        if (newSelStart != newSelEnd) {
+            clearCommitInfo();
+        }
+
+        if (mHasContinuedPrediction) {
+            mHasContinuedPrediction = false;
+            if (0 < mPrevCommitCount) {
+                mPrevCommitCount--;
+            }
+            return;
+        }
+
+        boolean isNotComposing = ((candidatesStart < 0) && (candidatesEnd < 0));
+        if ((mComposingText.size(ComposingText.LAYER1) != 0)
+            && !isNotComposing) {
             updateViewStatus(mTargetLayer, false, true);
         } else {
-            int commitEnd = mCommitStartCursor + mCommitLength;
-            if ((mCommitLength != 0)
-                && (commitEnd != newSelEnd)
-                && ((newSelEnd < oldSelEnd) || (commitEnd < newSelEnd))) {
+            if (0 < mPrevCommitCount) {
+                mPrevCommitCount--;
+            } else {
+                int commitEnd = mCommitStartCursor + mPrevCommitText.length();
+                if ((((newSelEnd < oldSelEnd) || (commitEnd < newSelEnd)) && clearCommitInfo())
+                    || isNotComposing) {
+                    if (isEnableL2Converter()) {
+                        breakSequence();
+                    }
 
-                if (isEnableL2Converter()) {
-                    mEnableAutoDeleteSpace = false;
-                    mConverter.breakSequence();
+                    if (mInputConnection != null) {
+                        if (isNotComposing && (mComposingText.size(ComposingText.LAYER1) != 0)) {
+                            mInputConnection.finishComposingText();
+                        }
+                    }
+                    initializeScreen();
                 }
-
-                clearCommitInfo();
-                initializeScreen();
             }
         }
     }
@@ -495,8 +558,7 @@
                 int hiddenState = newConfig.hardKeyboardHidden;
                 boolean hidden = (hiddenState == Configuration.HARDKEYBOARDHIDDEN_YES);
                 ((DefaultSoftKeyboardZH) mInputViewManager).setHardKeyboardHidden(hidden);
-                ((TextCandidatesViewManager)
-                 mCandidatesViewManager).setHardKeyboardHidden(hidden);
+                mEnableTutorial = hidden;
             }
         } catch (Exception ex) {
             /* do nothing if an error occurs. */
@@ -553,9 +615,6 @@
             changeEngineMode(ev.mode);
             if (ev.mode != ENGINE_MODE_SYMBOL) {
                 initializeScreen();
-                state = new EngineState();
-                state.temporaryMode = EngineState.TEMPORARY_DICTIONARY_MODE_NONE;
-                updateEngineState(state);
             }
             return true;
 
@@ -579,6 +638,10 @@
             ret = ((TextCandidatesViewManager)mCandidatesViewManager).onTouchSync();
             return ret;
 
+        case OpenWnnEvent.TOUCH_OTHER_KEY:
+            mStatus |= STATUS_INPUT_EDIT;
+            return true;
+
         default:
             break;
         }
@@ -620,6 +683,7 @@
                       ||(keyCode == KeyEvent.KEYCODE_SHIFT_RIGHT)
                       ||(keyCode == KeyEvent.KEYCODE_ALT_LEFT)
                       ||(keyCode == KeyEvent.KEYCODE_ALT_RIGHT)
+                      ||(keyCode == KeyEvent.KEYCODE_BACK && mCandidatesViewManager.getViewType() == CandidatesViewManager.VIEW_TYPE_FULL)
                       ||(keyEvent.isAltPressed() && (keyCode == KeyEvent.KEYCODE_SPACE)))))) {
 
             state = new EngineState();
@@ -698,6 +762,15 @@
         case OpenWnnEvent.INPUT_KEY:
             /* update shift/alt state */
             switch (keyCode) {
+            case KeyEvent.KEYCODE_DPAD_DOWN:
+            case KeyEvent.KEYCODE_DPAD_LEFT:
+            case KeyEvent.KEYCODE_DPAD_RIGHT:
+            case KeyEvent.KEYCODE_DPAD_UP:
+                if (mTutorial != null) {
+                    return true;
+                }
+                break;
+            
             case KeyEvent.KEYCODE_ALT_LEFT:
             case KeyEvent.KEYCODE_ALT_RIGHT:
                 if (keyEvent.getRepeatCount() == 0) {
@@ -731,18 +804,15 @@
             break;
 
         case OpenWnnEvent.SELECT_CANDIDATE:
-            boolean hasSetInfo = false;
-            if (isEnableL2Converter()) {
-                setCommitInfo(ev.word.candidate.length());
-                hasSetInfo = true;
-            }
+            initCommitInfoForWatchCursor();
             if (isEnglishPrediction()) {
                 mComposingText.clear();
             }
             mStatus = commitText(ev.word);
-            if (hasSetInfo) {
-                checkCommitInfo();
+            if (isEnglishPrediction() && !mEngineState.isSymbolList() && mEnableAutoInsertSpace) {
+                commitSpaceJustOne();
             }
+            checkCommitInfo();
 
             if (mEngineState.isSymbolList()) {
                 mEnableAutoDeleteSpace = false;
@@ -888,9 +958,7 @@
                 processHardwareKeyboardInputChar(str, caps);
                 return true;
             } else {
-                mEnableAutoInsertSpace = false;
                 commitText(true);
-                mEnableAutoInsertSpace = true;
                 commitText(str.string);
                 initializeScreen();
                 return true;
@@ -903,7 +971,9 @@
 
         } else if (key == KeyEvent.KEYCODE_SYM) {
             /* display the symbol list */
+            initCommitInfoForWatchCursor();
             mStatus = commitText(true);
+            checkCommitInfo();
             changeEngineMode(ENGINE_MODE_SYMBOL);
             mHardAlt = 0;
             updateMetaKeyStateDisplay();
@@ -920,10 +990,11 @@
                                              mComposingText.toString(ComposingText.LAYER1).length());
                     mExactMatchMode = false;
                 } else {
-                    mComposingText.delete(ComposingText.LAYER1, false);
-                    if (mComposingText.size(ComposingText.LAYER1) == 0) {
+                    if (mComposingText.size(ComposingText.LAYER1) == 1) {
                         initializeScreen();
                         return true;
+                    } else {
+                        mComposingText.delete(ComposingText.LAYER1, false);
                     }
                 }
                 updateViewStatusForPrediction(true, true);
@@ -962,31 +1033,30 @@
             case KeyEvent.KEYCODE_DPAD_RIGHT:
                 if (!isEnableL2Converter()) {
                     commitText(false);
-                    return false;
                 } else {
                     processRightKeyEvent();
-                    return true;
                 }
+                return true;
 
             case KeyEvent.KEYCODE_DPAD_CENTER:
             case KeyEvent.KEYCODE_ENTER:
-                boolean hasSetInfo = false;
-            	if (isEnableL2Converter()) {
-                    if (isEnglishPrediction()) {
-                        setCommitInfo(mComposingText.toString(mTargetLayer).length());
-                    } else {
-                        int layer = mTargetLayer;
-                        int cursor = mComposingText.getCursor(layer);
-                        if (0 < cursor) {
-                            String tmp = mComposingText.toString(layer, 0, cursor - 1);
-                            setCommitInfo(tmp.length());
-                        }
+                if (!isEnglishPrediction()) {
+                    int cursor = mComposingText.getCursor(ComposingText.LAYER1);
+                    if (cursor < 1) {
+                        return true;
                     }
-                    hasSetInfo = true;
                 }
+                initCommitInfoForWatchCursor();
                 mStatus = commitText(true);
-            	if (hasSetInfo) {
-                    checkCommitInfo();
+                checkCommitInfo();
+
+                if (isEnglishPrediction()) {
+                    initializeScreen();
+                }
+
+                if (mEnableAutoHideKeyboard) {
+                    mInputViewManager.closing();
+                    requestHideSelf(0);
                 }
                 return true;
 
@@ -1022,14 +1092,30 @@
                 default:
                     return processKeyEventNoInputCandidateShown(ev);
                 }
-            } else if (key == KeyEvent.KEYCODE_BACK && isInputViewShown()) {
-                /*
-                 * If 'BACK' key is pressed when the SW-keyboard is shown
-                 * and the candidates view is not shown, dismiss the SW-keyboard.
-                 */
-                mInputViewManager.closing();
-                requestHideSelf(0);
-                return true;
+            } else {
+                switch (key) {
+                case KeyEvent.KEYCODE_DPAD_CENTER:
+                case KeyEvent.KEYCODE_ENTER:
+                    if (mEnableAutoHideKeyboard) {
+                        mInputViewManager.closing();
+                        requestHideSelf(0);
+                        return true;
+                    }
+                    break;
+                case KeyEvent.KEYCODE_BACK:
+                    /*
+                     * If 'BACK' key is pressed when the SW-keyboard is shown
+                     * and the candidates view is not shown, dismiss the SW-keyboard.
+                     */
+                    if (isInputViewShown()) {
+                        mInputViewManager.closing();
+                        requestHideSelf(0);
+                        return true;
+                    }
+                    break;
+                default:
+                    break;
+                }
             }
         }
 
@@ -1059,8 +1145,9 @@
 
         } else if(ev.isAltPressed()){
             /* display the symbol list (G1 specific. same as KEYCODE_SYM) */
-            commitAllText();
-
+            if (!mEngineState.isSymbolList()) {
+                commitAllText();
+            }
             changeEngineMode(ENGINE_MODE_SYMBOL);
             mHardAlt = 0;
             updateMetaKeyStateDisplay();
@@ -1070,8 +1157,9 @@
             if (mComposingText.size(0) == 0) {
                 commitText(" ");
                 mCandidatesViewManager.clearCandidates();
+                breakSequence();
             } else {
-                setCommitInfo(mComposingText.toString(mTargetLayer).length());
+                initCommitInfoForWatchCursor();
                 commitText(true);
                 commitSpaceJustOne();
                 checkCommitInfo();
@@ -1083,6 +1171,7 @@
             if (mComposingText.size(0) == 0) {
                 commitText(" ");
                 mCandidatesViewManager.clearCandidates();
+                breakSequence();
             } else {
                 startConvert(EngineState.CONVERT_TYPE_RENBUN);
             }
@@ -1101,9 +1190,7 @@
             if (mPreConverter == null) {
                 Matcher m = mEnglishAutoCommitDelimiter.matcher(str.string);
                 if (m.matches()) {
-                    mEnableAutoInsertSpace = false;
                     commitText(true);
-                    mEnableAutoInsertSpace = true;
                     
                     commit = true;
                 }
@@ -1135,28 +1222,28 @@
     }
 
     /** Thread for updating the candidates view */
-    private final Runnable updatePredictionRunnable = new Runnable() {
-            public void run() {
-                int candidates = 0;
-                int cursor = mComposingText.getCursor(ComposingText.LAYER1);
-                if (isEnableL2Converter() || mEngineState.isSymbolList()) {
-                    if (mExactMatchMode) {
-                        /* exact matching */
-                        candidates = mConverter.predict(mComposingText, 0, cursor);
-                    } else {
-                        /* normal prediction */
-                        candidates = mConverter.predict(mComposingText, 0, -1);
-                    }
-                }
-
-                /* update the candidates view */
-                if (candidates > 0) {
-                    mCandidatesViewManager.displayCandidates(mConverter);
-                } else {
-                    mCandidatesViewManager.clearCandidates();
-                }
+    private void updatePrediction() {
+        int candidates = 0;
+        int cursor = mComposingText.getCursor(ComposingText.LAYER1);
+        if (isEnableL2Converter() || mEngineState.isSymbolList()) {
+            if (mExactMatchMode) {
+                /* exact matching */
+                candidates = mConverter.predict(mComposingText, 0, cursor);
+            } else {
+                /* normal prediction */
+                candidates = mConverter.predict(mComposingText, 0, -1);
             }
-        };
+        }
+
+        /* update the candidates view */
+        if (candidates > 0) {
+            mHasContinuedPrediction = ((mComposingText.size(ComposingText.LAYER1) == 0)
+                                       && !mEngineState.isSymbolList());
+            mCandidatesViewManager.displayCandidates(mConverter);
+        } else {
+            mCandidatesViewManager.clearCandidates();
+        }
+    }
 
     /**
      * Handle a left key event.
@@ -1176,7 +1263,7 @@
             }
         }
 
-        mCommitCount = 0;
+        mCommitCount = 0; /* retry consecutive clause conversion if necessary. */
         mStatus = STATUS_INPUT_EDIT;
         updateViewStatus(mTargetLayer, true, true);
     }
@@ -1186,25 +1273,26 @@
      */
     private void processRightKeyEvent() {
         int layer = mTargetLayer;
+        ComposingText composingText = mComposingText;
         if (mExactMatchMode || (mEngineState.isConvertState())) {
-            int textSize = mComposingText.size(ComposingText.LAYER1);
-            if (mComposingText.getCursor(ComposingText.LAYER1) == textSize) {
+            int textSize = composingText.size(ComposingText.LAYER1);
+            if (composingText.getCursor(ComposingText.LAYER1) == textSize) {
                 mExactMatchMode = false;
-                layer = ComposingText.LAYER1;
+                layer = ComposingText.LAYER1; /* convert -> prediction */
                 EngineState state = new EngineState();
                 state.convertType = EngineState.CONVERT_TYPE_NONE;
                 updateEngineState(state);
             } else {
-                mComposingText.moveCursor(ComposingText.LAYER1, 1);
+                composingText.moveCursor(ComposingText.LAYER1, 1);
             }
         } else {
-            if (mComposingText.getCursor(ComposingText.LAYER1)
-                < mComposingText.size(ComposingText.LAYER1)) {
-                mComposingText.moveCursor(ComposingText.LAYER1, 1);
+            if (composingText.getCursor(ComposingText.LAYER1)
+                    < composingText.size(ComposingText.LAYER1)) {
+                composingText.moveCursor(ComposingText.LAYER1, 1);
             }
         }
 
-        mCommitCount = 0;
+        mCommitCount = 0; /* retry consecutive clause conversion if necessary. */
         mStatus = STATUS_INPUT_EDIT;
 
         updateViewStatus(layer, true, true);
@@ -1235,15 +1323,25 @@
             return false;
             
         case KeyEvent.KEYCODE_DPAD_CENTER:
-        case KeyEvent.KEYCODE_BACK:
             ret = true;
             break;
+
+        case KeyEvent.KEYCODE_BACK:
+            if (mCandidatesViewManager.getViewType() == CandidatesViewManager.VIEW_TYPE_FULL) {
+                mStatus &= ~STATUS_CANDIDATE_FULL;
+                mCandidatesViewManager.setViewType(CandidatesViewManager.VIEW_TYPE_NORMAL);
+                return true;
+            } else {
+                ret = true;
+            }
+            break;
         
         default:
             return true;
         }
 
         if (mConverter != null) {
+            /* initialize the converter */
             mConverter.init();
         }
         updateViewStatusForPrediction(true, true);
@@ -1301,15 +1399,22 @@
                 } else if (layer == ComposingText.LAYER2) {
                     highlightEnd = mComposingText.toString(layer, 0, 0).length();
 
+                    /* highlights the first segment */
                     mDisplayText.setSpan(SPAN_CONVERT_BGCOLOR_HL, 0,
                                          highlightEnd,
                                          Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
                 }
 
                 if (FIX_CURSOR_TEXT_END && (highlightEnd != 0)) {
+                    /* highlights remaining text */
                     mDisplayText.setSpan(SPAN_REMAIN_BGCOLOR_HL, highlightEnd,
                                          mComposingText.toString(layer).length(),
                                          Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+
+                    /* text color in the highlight */
+                    mDisplayText.setSpan(SPAN_TEXTCOLOR, 0,
+                                         mComposingText.toString(layer).length(),
+                                         Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
                 }
             }
 
@@ -1331,25 +1436,32 @@
     private void updateCandidateView() {
         switch (mTargetLayer) {
         case ComposingText.LAYER0:
-        case ComposingText.LAYER1:
+        case ComposingText.LAYER1: /* prediction */
             if (mEnablePrediction || mEngineState.isSymbolList()) {
                 /* update the candidates view */
                 if ((mComposingText.size(ComposingText.LAYER1) != 0)
                     && !mEngineState.isConvertState()) {
-                    mDelayUpdateHandler.removeCallbacks(updatePredictionRunnable);
-                    mDelayUpdateHandler.postDelayed(updatePredictionRunnable, 250);
+                    
+                    mHandler.removeMessages(MSG_PREDICTION);
+                    if (mCandidatesViewManager.getCurrentView().isShown()) {
+                        mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_PREDICTION),
+                                                    PREDICTION_DELAY_MS_SHOWING_CANDIDATE);
+                    } else {
+                        mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_PREDICTION),
+                                                    PREDICTION_DELAY_MS_1ST);
+                    }
                 } else {
-                    mDelayUpdateHandler.removeCallbacks(updatePredictionRunnable);
-                    updatePredictionRunnable.run();
+                    mHandler.removeMessages(MSG_PREDICTION);
+                    updatePrediction();
                 }
             } else {
-                mDelayUpdateHandler.removeCallbacks(updatePredictionRunnable);
+                mHandler.removeMessages(MSG_PREDICTION);
                 mCandidatesViewManager.clearCandidates();
             }
             break;
-        case ComposingText.LAYER2:
+        case ComposingText.LAYER2: /* convert */
             if (mCommitCount == 0) {
-                mDelayUpdateHandler.removeCallbacks(updatePredictionRunnable);
+                mHandler.removeMessages(MSG_PREDICTION);
                 mConverter.convert(mComposingText);
             }
 
@@ -1391,7 +1503,7 @@
         if (mConverter != null) {
             if (learn) {
                 if (mEngineState.isRenbun()) {
-                    learnWord(0);
+                    learnWord(0); /* select the top of the clauses */
                 } else {
                     if (mComposingText.size(ComposingText.LAYER1) != 0) {
                         String stroke = mComposingText.toString(ComposingText.LAYER1, 0, mComposingText.getCursor(layer) - 1);
@@ -1401,7 +1513,7 @@
                     }
                 }
             } else {
-                mConverter.breakSequence();
+                breakSequence();
             }
         }
         return commitTextThroughInputConnection(tmp);
@@ -1411,11 +1523,7 @@
      * Commit all uncommitted words.
      */
     private void commitAllText() {
-        boolean hasSetInfo = false;
-        if (isEnableL2Converter()) {
-            setCommitInfo(mComposingText.toString(mTargetLayer).length());
-            hasSetInfo = true;
-        }
+        initCommitInfoForWatchCursor();
         if (mEngineState.isConvertState()) {
             commitConvertingText();
         } else {
@@ -1423,9 +1531,7 @@
                                      mComposingText.size(ComposingText.LAYER1));
             mStatus = commitText(true);
         }
-        if (hasSetInfo) {
-            checkCommitInfo();
-        }
+        checkCommitInfo();
     }
 
     /**
@@ -1449,7 +1555,7 @@
     private void commitText(String str) {
         mInputConnection.commitText(str, (FIX_CURSOR_TEXT_END ? 1 : str.length()));
         mPrevCommitText.append(str);
-        mCommitLength += str.length();
+        mPrevCommitCount++;
         mEnableAutoDeleteSpace = true;
         updateViewStatusForPrediction(false, false);
     }
@@ -1457,7 +1563,7 @@
     /**
      * Commit a string through {@link InputConnection}.
      *
-     * @param string    A string to commit
+     * @param string  A string to commit
      * @return                  IME's status after commit
      */
     private int commitTextThroughInputConnection(String string) {
@@ -1465,6 +1571,7 @@
 
         mInputConnection.commitText(string, (FIX_CURSOR_TEXT_END ? 1 : string.length()));
         mPrevCommitText.append(string);
+        mPrevCommitCount++;
         
         int cursor = mComposingText.getCursor(layer);
         if (cursor > 0) {
@@ -1475,7 +1582,7 @@
         mCommitCount++;
 
         if ((layer == ComposingText.LAYER2) && (mComposingText.size(layer) == 0)) {
-            layer = 1;
+            layer = 1; /* for connected prediction */
         }
 
         boolean commited = autoCommitEnglish();
@@ -1508,6 +1615,7 @@
         int layer = mTargetLayer;
         mInputConnection.commitText(string, (FIX_CURSOR_TEXT_END ? 1 : string.length()));
         mPrevCommitText.append(string);
+        mPrevCommitCount++;
 
         int cursor = word.stroke.length();
         int position = mComposingText.getCursor(layer);
@@ -1652,6 +1760,7 @@
                 break;
             }
             myState.dictionarySet = state.dictionarySet;
+            breakSequence();
 
             /* update keyboard setting */
             if (state.keyboard == EngineState.INVALID) {
@@ -1694,16 +1803,14 @@
                 if (++mCurrentSymbol >= SYMBOL_LISTS.length) {
                     mCurrentSymbol = 0;
                 }
-                if (!mEnableEmoji) {
-                    if (SYMBOL_LISTS[mCurrentSymbol] == SymbolList.SYMBOL_JAPANESE_EMOJI) {
-                        if (++mCurrentSymbol >= SYMBOL_LISTS.length) {
-                            mCurrentSymbol = 0;
-                        }
-                    }
+                if (mEnableSymbolListNonHalf) {
+                    mConverterSymbolEngineBack.setDictionary(SYMBOL_LISTS[mCurrentSymbol]);
+                } else {
+                    mConverterSymbolEngineBack.setDictionary(SymbolList.SYMBOL_ENGLISH);
                 }
-                mConverterSymbolEngineBack.setDictionary(SYMBOL_LISTS[mCurrentSymbol]);
                 mConverter = mConverterSymbolEngineBack;
                 mDisableAutoCommitEnglishMask |= AUTO_COMMIT_ENGLISH_SYMBOL;
+                breakSequence();
                 break;
 
             default:
@@ -1856,7 +1963,7 @@
         }
 
         ComposingText text = mComposingText;
-        text.insertStrSegment(0, ComposingText.LAYER1, new StrSegment(chars));
+        appendStrSegment(new StrSegment(chars));
 
         if (!isAlphabetLast(text.toString(ComposingText.LAYER1))) {
             /* commit if the input character is not alphabet */
@@ -1878,9 +1985,10 @@
             if (mComposingText.size(0) == 0) {
                 mCandidatesViewManager.clearCandidates();
                 commitText(new String(chars));
+                breakSequence();
             } else {
                 if (isEnglishPrediction()) {
-                    setCommitInfo(mComposingText.toString(mTargetLayer).length());
+                    initCommitInfoForWatchCursor();
                     commitText(true);
                     commitSpaceJustOne();
                     checkCommitInfo();
@@ -1904,9 +2012,7 @@
             }
         
             if (commit) {
-                mEnableAutoInsertSpace = false;
                 commitText(true);
-                mEnableAutoInsertSpace = true;
 
                 appendStrSegment(new StrSegment(chars));
                 commitText(true);
@@ -1979,16 +2085,12 @@
                     CharSequence str = seq.subSequence(1, 2);
                     mInputConnection.commitText(str, 1);
                     mPrevCommitText.append(str);
+                    mPrevCommitCount++;
                 }
 
-                mDelayUpdateHandler.removeCallbacks(updatePredictionRunnable);
-
+                mHandler.removeMessages(MSG_PREDICTION);
                 mCandidatesViewManager.clearCandidates();
                 return true;
-            } else {
-                if (mEnableAutoInsertSpace) {
-                    commitSpaceJustOne();
-                }
             }
         }
         return false;
@@ -2084,6 +2186,7 @@
             mDirectInputMode = true;
             return;
         }
+
         mEnableLearning   = preference.getBoolean("opt_zhcn_enable_learning", true);
         mEnablePrediction = preference.getBoolean("opt_zhcn_prediction", true);
         mEnableSpellCorrection = preference.getBoolean("opt_zhcn_spell_correction", true);
@@ -2091,13 +2194,20 @@
         int preferenceDictionary = EngineState.PREFERENCE_DICTIONARY_NONE;
         mEnableConverter = true;
         mEnableSymbolList = true;
-        mEnableEmoji = false;
+        mEnableSymbolListNonHalf = true;
         mAutoCaps = preference.getBoolean("auto_caps", true);
+        mFilter.filter = 0;
+        mEnableAutoInsertSpace = true;
+        mEnableAutoHideKeyboard = false;
 
         switch (info.inputType & EditorInfo.TYPE_MASK_CLASS) {
         case EditorInfo.TYPE_CLASS_NUMBER:
         case EditorInfo.TYPE_CLASS_DATETIME:
+            mEnableConverter = false;
+            break;
+
         case EditorInfo.TYPE_CLASS_PHONE:
+            mEnableSymbolList = false;
             mEnableConverter = false;
             break;
 
@@ -2111,11 +2221,22 @@
             case EditorInfo.TYPE_TEXT_VARIATION_PASSWORD:
                 mEnableLearning = false;
                 mEnableConverter = false;
+                mEnableSymbolListNonHalf = false;
+                mFilter.filter = CandidateFilter.FILTER_NON_ASCII; 
                 mDisableAutoCommitEnglishMask |= AUTO_COMMIT_ENGLISH_OFF;
+                mEnableAutoHideKeyboard = true;
                 break;
 
             case EditorInfo.TYPE_TEXT_VARIATION_EMAIL_ADDRESS:
+                mFilter.filter = CandidateFilter.FILTER_NON_ASCII; 
+                mEnableSymbolListNonHalf = false;
+                mEnableAutoInsertSpace = false;
+                mDisableAutoCommitEnglishMask |= AUTO_COMMIT_ENGLISH_OFF;
+                preferenceDictionary = EngineState.PREFERENCE_DICTIONARY_EMAIL_ADDRESS_URI;
+                break;
+
             case EditorInfo.TYPE_TEXT_VARIATION_URI:
+                mEnableAutoInsertSpace = false;
                 mDisableAutoCommitEnglishMask |= AUTO_COMMIT_ENGLISH_OFF;
                 preferenceDictionary = EngineState.PREFERENCE_DICTIONARY_EMAIL_ADDRESS_URI;
                 break;
@@ -2139,19 +2260,10 @@
             break;
         }
 
-        if (ENABLE_EMOJI_LIMITATION) {
-            Bundle bundle = info.extras;
-            if (bundle != null) {
-                mEnableEmoji = bundle.getBoolean("allowEmoji");
-            }
-        } else {
-            mEnableEmoji = true;
-        }
-        if (mEnableEmoji) {
+        if (mFilter.filter == 0) {
             mConverterEN.setFilter(null);
             mConverterZHCN.setFilter(null);
         } else {
-            mFilter.setFilter(CandidateFilter.FILTER_EMOJI);
             mConverterEN.setFilter(mFilter);
             mConverterZHCN.setFilter(mFilter);
         }
@@ -2162,6 +2274,8 @@
         state.keyboard = mEngineState.keyboard;
         updateEngineState(state);
         updateMetaKeyStateDisplay();
+
+        checkTutorial(info.privateImeOptions);
     }
     
     /**
@@ -2176,7 +2290,7 @@
         ComposingText composingText = mComposingText;
         
         if (composingText.size(ComposingText.LAYER1) >= LIMIT_INPUT_NUMBER) {
-            return;
+            return; /* do nothing */
         }
         composingText.insertStrSegment(ComposingText.LAYER0, ComposingText.LAYER1, str);
         return;
@@ -2194,6 +2308,8 @@
 
             String text = mComposingText.toString(ComposingText.LAYER2);
             mInputConnection.commitText(text, (FIX_CURSOR_TEXT_END ? 1 : text.length()));
+            mPrevCommitText.append(text);
+            mPrevCommitCount++;
             initializeScreen();
         }
     }
@@ -2202,16 +2318,22 @@
      * Initialize the screen displayed by IME
      */
     private void initializeScreen() {
+        if (mComposingText.size(ComposingText.LAYER0) != 0) {
+            mInputConnection.setComposingText("", 0);
+        }
         mComposingText.clear();
-        mInputConnection.setComposingText("", 0);
         mExactMatchMode = false;       
         mStatus = STATUS_INIT;
-        mDelayUpdateHandler.removeCallbacks(updatePredictionRunnable);
+        mHandler.removeMessages(MSG_PREDICTION);
         View candidateView = mCandidatesViewManager.getCurrentView();
         if ((candidateView != null) && candidateView.isShown()) {
             mCandidatesViewManager.clearCandidates();
         }
         mInputViewManager.onUpdateState(this);
+
+        EngineState state = new EngineState();
+        state.temporaryMode = EngineState.TEMPORARY_DICTIONARY_MODE_NONE;
+        updateEngineState(state);
     }
     
     /**
@@ -2221,7 +2343,7 @@
      * @return          {@code true} if the tail is alphabet; {@code false} if otherwise.
      */
     private boolean isAlphabetLast(String str) {
-        Matcher m = ENGLISH_CHARACTER.matcher(str);
+        Matcher m = ENGLISH_CHARACTER_LAST.matcher(str);
         return m.matches();
     }
 
@@ -2276,40 +2398,99 @@
     }
 
     /**
-     * Remember the commit test's info.
-     * @param length  length of commit text
+     * Initialize the committed text's information.
      */
-    private void setCommitInfo(int length) {
-        if (length == 0) {
+    private void initCommitInfoForWatchCursor() {
+        if (!isEnableL2Converter()) {
             return;
         }
-        mCommitLength = length;
-        mCommitStartCursor = mLastSelectionEnd - mComposingText.size(mTargetLayer);
+
+        mCommitStartCursor = mComposingStartCursor;
+        mPrevCommitText.delete(0, mPrevCommitText.length());
     }
     
     /**
      * Clear the commit text's info.
+     * @return {@code true}:cleared, {@code false}:has already cleared.
      */
-    private void clearCommitInfo() {
-        mCommitLength = 0;
-        mCommitStartCursor = 0;
+    private boolean clearCommitInfo() {
+        if (mCommitStartCursor < 0) {
+            return false;
+        }
+
+        mCommitStartCursor = -1;
+        return true;
     }
 
     /**
      * Verify the commit text.
      */
     private void checkCommitInfo() {
-        if (mCommitLength == 0) {
+        if (mCommitStartCursor < 0) {
             return;
         }
 
         int composingLength = mComposingText.toString(mTargetLayer).length();
-        CharSequence seq = mInputConnection.getTextBeforeCursor(mCommitLength + composingLength, 0);
+        CharSequence seq = mInputConnection.getTextBeforeCursor(mPrevCommitText.length() + composingLength, 0);
         seq = seq.subSequence(0, seq.length() - composingLength);
         if (!seq.equals(mPrevCommitText.toString())) {
+            mPrevCommitCount = 0;
             clearCommitInfo();
-    	}
+        }
+    }
+
+    /**
+     * Check and start the tutorial if it is the tutorial mode.
+     * 
+     * @param privateImeOptions IME's options
+     */
+    private void checkTutorial(String privateImeOptions) {
+        if (privateImeOptions == null) return;
+        if (privateImeOptions.equals("com.android.setupwizard:ShowTutorial")) {
+            if ((mTutorial == null) && mEnableTutorial) startTutorial();
+        } else if (privateImeOptions.equals("com.android.setupwizard:HideTutorial")) {
+            if (mTutorial != null) {
+                if (mTutorial.close()) {
+                    mTutorial = null;
+                }
+            }
+        }
+    }
+
+    /**
+     * Start the tutorial
+     */
+    private void startTutorial() {
+        DefaultSoftKeyboardZH manager = (DefaultSoftKeyboardZH) mInputViewManager;
+        manager.setDefaultKeyboard();
+
+        DefaultSoftKeyboardZH inputManager = ((DefaultSoftKeyboardZH) mInputViewManager);
+        View v = inputManager.getKeyboardView();
+        v.setOnTouchListener(new View.OnTouchListener() {
+				public boolean onTouch(View v, MotionEvent event) {
+					return true;
+				}});
+        mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_START_TUTORIAL), 500);
+    }
+
+    /**
+     * Close the tutorial
+     */
+    public void tutorialDone() {
+        mTutorial = null;
+    }
+
+    /** @see OpenWnn#close */
+    @Override protected void close() {
+        mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_CLOSE), 0);
+    }
+
+    /**
+     * Break the sequence of words.
+     */
+    private void breakSequence() {
+        mEnableAutoDeleteSpace = false;
+        mConverterZHCN.breakSequence();
+        mConverterEN.breakSequence();
     }
 }
-
-
diff --git a/src/jp/co/omronsoft/openwnn/SymbolList.java b/src/jp/co/omronsoft/openwnn/SymbolList.java
index 7eb6a6f..e41bc4d 100644
--- a/src/jp/co/omronsoft/openwnn/SymbolList.java
+++ b/src/jp/co/omronsoft/openwnn/SymbolList.java
@@ -55,8 +55,6 @@
     /** Key string to get normal symbol list for Chinese */
     public static final String SYMBOL_CHINESE = "c1";
 
-    /** Key string to get EMOJI symbol list for Japanese */
-    public static final String SYMBOL_JAPANESE_EMOJI = "j_emoji";
     /** Key string to get face mark list for Japanese */
     public static final String SYMBOL_JAPANESE_FACE  = "j_face";
 
@@ -103,9 +101,9 @@
             mSymbols.put(SYMBOL_ENGLISH, getXmlfile(R.xml.symbols_latin1_list));
             mSymbols.put(SYMBOL_JAPANESE, getXmlfile(R.xml.symbols_japan_list));
             mSymbols.put(SYMBOL_JAPANESE_FACE, getXmlfile(R.xml.symbols_japan_face_list));
-            mSymbols.put(SYMBOL_JAPANESE_EMOJI, getXmlfile(R.xml.symbols_japan_emoji_list));
             mCurrentList = mSymbols.get(SYMBOL_ENGLISH);
             break;
+
         case LANG_ZHCN: 
             /* symbols for Chinese IME */
             mSymbols.put(SYMBOL_CHINESE, getXmlfile(R.xml.symbols_china_list));
diff --git a/src/jp/co/omronsoft/openwnn/TextCandidatesViewManager.java b/src/jp/co/omronsoft/openwnn/TextCandidatesViewManager.java
index 83bec26..c8291f1 100644
--- a/src/jp/co/omronsoft/openwnn/TextCandidatesViewManager.java
+++ b/src/jp/co/omronsoft/openwnn/TextCandidatesViewManager.java
@@ -19,66 +19,74 @@
 import java.util.ArrayList;
 import android.content.Context;
 import android.content.SharedPreferences;
+import android.content.res.Configuration;
 import android.content.res.Resources;
-import android.graphics.Paint;
-import android.graphics.drawable.Drawable;
 import android.media.MediaPlayer;
 import android.os.Vibrator;
-import android.text.Layout;
-import android.text.Styled;
+import android.text.TextUtils;
+import android.text.TextPaint;
+import android.text.SpannableString;
+import android.text.Spanned;
+import android.text.style.ImageSpan;
+import android.text.style.DynamicDrawableSpan;
 import android.util.Log;
+import android.util.DisplayMetrics;
 import android.view.Gravity;
 import android.view.MotionEvent;
 import android.view.View;
-import android.view.ViewConfiguration;
 import android.view.ViewGroup;
+import android.view.View.OnClickListener;
+import android.view.View.OnLongClickListener;
 import android.view.View.OnTouchListener;
-import android.view.ViewGroup.LayoutParams;
 import android.view.GestureDetector;
+import android.view.LayoutInflater;
 import android.widget.Button;
-import android.widget.FrameLayout;
 import android.widget.LinearLayout;
 import android.widget.ScrollView;
 import android.widget.TextView;
 import android.widget.EditText;
-import android.text.TextPaint;
+import android.widget.RelativeLayout;
+import android.widget.ImageView;
+import android.graphics.drawable.Drawable;
 
 /**
  * The default candidates view manager class using {@link EditText}.
  *
  * @author Copyright (C) 2009 OMRON SOFTWARE CO., LTD.  All Rights Reserved.
  */
-public class TextCandidatesViewManager implements CandidatesViewManager, OnTouchListener,
-                                                         GestureDetector.OnGestureListener {
+public class TextCandidatesViewManager implements CandidatesViewManager, GestureDetector.OnGestureListener {
     /** Height of a line */
-    public static final int LINE_HEIGHT = 48;
+    public static final int LINE_HEIGHT = 34;
     /** Number of lines to display (Portrait) */
     public static final int LINE_NUM_PORTRAIT       = 2;
-    /** Number of lines to full-display (Portrait) */
-    public static final int LINE_NUM_PORTRAIT_FULL  = 5;
     /** Number of lines to display (Landscape) */
     public static final int LINE_NUM_LANDSCAPE      = 1;
-    /** Number of lines to full-display (Landscape) */
-    public static final int LINE_NUM_LANDSCAPE_FULL = 3;
 
-    /** Separator */
-    public static final String CANDIDATE_SEPARATOR = "\u3000 ";
-    
     /** Maximum lines */
     private static final int DISPLAY_LINE_MAX_COUNT = 1000;
-
-    /** Adjusted value for detecting the selected candidate */
-    private static final int TOUCH_ADJUSTED_VALUE = 1;
+    /** Width of the view */
+    private static final int CANDIDATE_MINIMUM_WIDTH = 48;
+    /** Height of the view */
+    private static final int CANDIDATE_MINIMUM_HEIGHT = 35;
+    /** Align the candidate left if the width of the string exceeds this threshold */
+    private static final int CANDIDATE_LEFT_ALIGN_THRESHOLD = 120;
+    /** Maximum number of displaying candidates par one line (full view mode) */
+    private static final int FULL_VIEW_DIV = 4;
 
     /** Body view of the candidates list */
     private ViewGroup  mViewBody;
     /** Scroller of {@code mViewBodyText} */
     private ScrollView mViewBodyScroll;
-    /** Body of the list view */
-    private EditText mViewBodyText;
-    /** Text displayed bottom of the view when there are more candidates. */
-    private TextView mReadMoreText;
-    
+    /** Base of {@code mViewCandidateList1st}, {@code mViewCandidateList2nd} */
+    private ViewGroup mViewCandidateBase;
+    /** Button displayed bottom of the view when there are more candidates. */
+    private ImageView mReadMoreButton;
+    /** The view of the scaling up candidate */
+    private View mViewScaleUp;
+    /** Layout for the candidates list on normal view */
+    private LinearLayout mViewCandidateList1st;
+    /** Layout for the candidates list on full view */
+    private RelativeLayout mViewCandidateList2nd;
     /** {@link OpenWnn} instance using this manager */
     private OpenWnn mWnn;
     /** View type (VIEW_TYPE_NORMAL or VIEW_TYPE_FULL or VIEW_TYPE_CLOSE) */
@@ -96,8 +104,6 @@
     private WnnEngine mConverter;
     /** Limitation of displaying candidates */
     private int mDisplayLimit;
-    /** The last displaying word */
-    private WnnWord mLastWord;
 
     /** Vibrator for touch vibration */
     private Vibrator mVibrator = null;
@@ -106,15 +112,6 @@
 
     /** Number of candidates displaying */
     private int mWordCount;
-    private int mWordCountInNormalView;
-    /** List of word's index to convert from the position of the cursor */
-    private ArrayList<Integer> mPositionToWordIndexArray;
-    /** The string to display candidates */
-    private StringBuffer mCandidates;
-    /** List of the start position of each candidate */
-    private ArrayList<Integer> mStartPositionArray;
-    /** List of the end position of each candidate */
-    private ArrayList<Integer> mEndPositionArray;
     /** List of candidates */
     private ArrayList<WnnWord> mWnnWordArray;
 
@@ -122,31 +119,17 @@
     private GestureDetector mGestureDetector;
     /** The word pressed */
     private WnnWord mWord;
-    /** Text on the select button */
-    private String mSelectBottonText = null;
-    /** Text on the cancel button */
-    private String mCancelBottonText = null;
-
     /** Character width of the candidate area */
     private int mLineLength = 0;
-    /** Word count on a single line in the candidate area */
-    private int mLineWordCount = -1;
-
-    /** {@code true} if the hardware keyboard is shown */
-    private boolean mHardKeyboardHidden = true;
+    /** Number of lines displayed */
+    private int mLineCount = 1;
 
     /** {@code true} if the candidate delete state is selected */
-    private boolean mCandidateDeleteState = false;
+    private boolean mIsScaleUp = false;
 
     /** {@code true} if the full screen mode is selected */
     private boolean mIsFullView = false;
 
-    /** {@code true} if the selection state is started */
-    private boolean mHasStartedSelect = false;
-
-    /** {@code true} if the candidate list is created */
-    private boolean mHasCreatedCandidateList = false;
-
     /** The event object for "touch" */
     private MotionEvent mMotionEvent = null;
 
@@ -154,7 +137,96 @@
     private int mDisplayEndOffset = 0;
     /** {@code true} if there are more candidates to display. */
     private boolean mCanReadMore = false;
+    /** Width of {@code mReadMoreButton} */
+    private int mReadMoreButtonWidth = 0;
+    /** Color of the candidates */
+    private int mTextColor = 0;
+    /** Template object for each candidate and normal/full view change button */
+    private TextView mViewCandidateTemplate;
+    /** Number of candidates in full view */
+    private int mFullViewWordCount;
+    /** Number of candidates in the current line (in full view) */
+    private int mFullViewOccupyCount;
+    /** View of the previous candidate (in full view) */
+    private TextView mFullViewPrevView;
+    /** Id of the top line view (in full view) */
+    private int mFullViewPrevLineTopId;
+    /** Layout of the previous candidate (in full view) */
+    private RelativeLayout.LayoutParams mFullViewPrevParams;
+    /** Whether all candidates is displayed */
+    private boolean mCreateCandidateDone;
+    /** Number of lines in normal view */
+    private int mNormalViewWordCountOfLine;
+    /** general infomation about a display */
+    private final DisplayMetrics mMetrics = new DisplayMetrics();
+
+    /** Event listener for touching a candidate */
+    private OnTouchListener mCandidateOnTouch = new OnTouchListener() {
+            public boolean onTouch(View v, MotionEvent event) {
+                if (mMotionEvent != null) {
+                    return true;
+                }
+
+                if ((event.getAction() == MotionEvent.ACTION_UP)
+                    && (v instanceof TextView)) {
+                    Drawable d = v.getBackground();
+                    if (d != null) {
+                        d.setState(new int[] {});
+                    }
+                }
+
+                mMotionEvent = event;
+                boolean ret = mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.CANDIDATE_VIEW_TOUCH));
+                mMotionEvent = null;
+                return ret;
+            }
+        };
     
+    
+    /** Event listener for clicking a candidate */
+    private OnClickListener mCandidateOnClick = new OnClickListener() {
+            public void onClick(View v) {
+                if (!v.isShown()) {
+                    return;
+                }
+                
+                if (v instanceof TextView) {
+                    TextView text = (TextView)v;
+                    int wordcount = text.getId();
+                    WnnWord word = null;
+                    word = mWnnWordArray.get(wordcount);
+                    selectCandidate(word);
+                }
+            }
+        };
+
+    /** Event listener for long-clicking a candidate */
+    private OnLongClickListener mCandidateOnLongClick = new OnLongClickListener() {
+            public boolean onLongClick(View v) {
+                if (mViewScaleUp == null) {
+                    return false;
+                }
+
+                if (!v.isShown()) {
+                    return true;
+                }
+
+                Drawable d = v.getBackground();
+                if (d != null) {
+                    if(d.getState().length == 0){
+                        return true;
+                    }
+                }
+            
+                int wordcount = ((TextView)v).getId();
+                mWord = mWnnWordArray.get(wordcount);
+                setViewScaleUp(true, mWord);
+            
+                return true;
+            }
+        };
+
+
     /**
      * Constructor
      */
@@ -169,12 +241,9 @@
      */
     public TextCandidatesViewManager(int displayLimit) {
         this.mDisplayLimit = displayLimit;
-        this.mCandidates = new StringBuffer();
-        this.mStartPositionArray = new ArrayList<Integer>();
-        this.mEndPositionArray = new ArrayList<Integer>();
-        this.mPositionToWordIndexArray = new ArrayList<Integer>();
         this.mWnnWordArray = new ArrayList<WnnWord>();
         this.mAutoHideMode = true;
+        mMetrics.setToDefaults();
     }
 
     /**
@@ -190,35 +259,131 @@
     public View initView(OpenWnn parent, int width, int height) {
         mWnn = parent;
         mViewWidth = width;
+        mViewHeight = height;
+        mPortrait = 
+            (parent.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE);
 
-        mSelectBottonText =  mWnn.getResources().getString(R.string.button_candidate_select);
-        mCancelBottonText = mWnn.getResources().getString(R.string.button_candidate_cancel);
+        Resources r = mWnn.getResources();
 
-        mViewBody = (ViewGroup)parent.getLayoutInflater().inflate(R.layout.candidates, null);
+        LayoutInflater inflater = parent.getLayoutInflater();
+        mViewBody = (ViewGroup)inflater.inflate(R.layout.candidates, null);
 
         mViewBodyScroll = (ScrollView)mViewBody.findViewById(R.id.candview_scroll);
-        mViewBodyScroll.setOnTouchListener(this);
+        mViewBodyScroll.setOnTouchListener(mCandidateOnTouch);
 
-        mViewBodyText = (EditText)mViewBody.findViewById(R.id.text_candidates_view);
-        mViewBodyText.setOnTouchListener(this);
-        mViewBodyText.setTextSize(18.0f);
-        mViewBodyText.setLineSpacing(6.0f, 1.5f);
-        mViewBodyText.setIncludeFontPadding(false);
-        mViewBodyText.setFocusable(true);
-        mViewBodyText.setCursorVisible(false);
-        mViewBodyText.setGravity(Gravity.TOP);
+        mViewCandidateBase = (ViewGroup)mViewBody.findViewById(R.id.candview_base);
+
+        createNormalCandidateView();
+        mViewCandidateList2nd = (RelativeLayout)mViewBody.findViewById(R.id.candidates_2nd_view);
+
+        mReadMoreButtonWidth = r.getDrawable(R.drawable.cand_up).getMinimumWidth();
+
+        mTextColor = r.getColor(R.color.candidate_text);
         
-        mReadMoreText = (TextView)mViewBody.findViewById(R.id.read_more_text);
-        mReadMoreText.setText(mWnn.getResources().getString(R.string.read_more));
-        mReadMoreText.setTextSize(24.0f);
+        mReadMoreButton = (ImageView)mViewBody.findViewById(R.id.read_more_text);
+        mReadMoreButton.setOnTouchListener(new View.OnTouchListener() {
+                public boolean onTouch(View v, MotionEvent event) {
+                    switch (event.getAction()) {
+                    case MotionEvent.ACTION_DOWN:
+                        if (mIsFullView) {
+                            mReadMoreButton.setImageResource(R.drawable.cand_down_press);
+                        } else {
+                            mReadMoreButton.setImageResource(R.drawable.cand_up_press);
+                        }
+                	    break;
+                    case MotionEvent.ACTION_UP:
+                        if (mIsFullView) {
+                            mReadMoreButton.setImageResource(R.drawable.cand_down);
+                        } else {
+                            mReadMoreButton.setImageResource(R.drawable.cand_up);
+                        }
+                        break;
+                    default:
+                        break;
+                    }
+                    return false;
+                }
+            });
+        mReadMoreButton.setOnClickListener(new View.OnClickListener() {
+                public void onClick(View v) {
+                    if (!v.isShown()) {
+                        return;
+                    }
 
-        mPortrait = (height > 450)? true : false;
+                    if (mIsFullView) {
+                        mIsFullView = false;
+                        mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.LIST_CANDIDATES_NORMAL));
+                    } else {
+                        mIsFullView = true;
+                        mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.LIST_CANDIDATES_FULL));
+                    }
+                }
+            });
+
         setViewType(CandidatesViewManager.VIEW_TYPE_CLOSE);
 
         mGestureDetector = new GestureDetector(this);
+
+        View scaleUp = (View)inflater.inflate(R.layout.candidate_scale_up, null);
+        mViewScaleUp = scaleUp;
+
+        /* select button */
+        Button b = (Button)scaleUp.findViewById(R.id.candidate_select);
+        b.setOnClickListener(new View.OnClickListener() {
+                public void onClick(View v) {
+                    selectCandidate(mWord);
+                }
+            });
+
+        /* cancel button */
+        b = (Button)scaleUp.findViewById(R.id.candidate_cancel);
+        b.setOnClickListener(new View.OnClickListener() {
+                public void onClick(View v) {
+                    setViewLayout(CandidatesViewManager.VIEW_TYPE_NORMAL);
+                    mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.UPDATE_CANDIDATE));
+                }
+            });
+
         return mViewBody;
     }
 
+    /**
+     * Create the normal candidate view
+     */
+    private void createNormalCandidateView() {
+        mViewCandidateList1st = (LinearLayout)mViewBody.findViewById(R.id.candidates_1st_view);
+        mViewCandidateList1st.setOnTouchListener(mCandidateOnTouch);
+        mViewCandidateList1st.setOnClickListener(mCandidateOnClick);
+
+        int line = getMaxLine();
+        int width = mViewWidth;
+        for (int i = 0; i < line; i++) {
+            LinearLayout lineView = new LinearLayout(mViewBodyScroll.getContext());
+            lineView.setOrientation(LinearLayout.HORIZONTAL);
+            LinearLayout.LayoutParams layoutParams = 
+                new LinearLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
+                                              ViewGroup.LayoutParams.WRAP_CONTENT);
+            lineView.setLayoutParams(layoutParams);
+            for (int j = 0; j < (width / getCandidateMinimumWidth()); j++) {
+                TextView tv = createCandidateView();
+                lineView.addView(tv);
+            }
+
+            if (i == 0) {
+                TextView tv = createCandidateView();
+                layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
+                                                             ViewGroup.LayoutParams.WRAP_CONTENT);
+                layoutParams.weight = 0;
+                layoutParams.gravity = Gravity.RIGHT;
+                tv.setLayoutParams(layoutParams);
+
+                lineView.addView(tv);
+                mViewCandidateTemplate = tv;
+            }
+            mViewCandidateList1st.addView(lineView);
+        }
+    }
+
     /** @see CandidatesViewManager#getCurrentView */
     public View getCurrentView() {
         return mViewBody;
@@ -227,7 +392,6 @@
     /** @see CandidatesViewManager#setViewType */
     public void setViewType(int type) {
         boolean readMore = setViewLayout(type);
-        addNewlineIfNecessary();
 
         if (readMore) {
             displayCandidates(this.mConverter, false, -1);
@@ -242,7 +406,7 @@
                 }
             } else {
                 if (mViewBody.isShown()) {
-                	mWnn.setCandidatesViewShown(false);
+                    mWnn.setCandidatesViewShown(false);
                 }
             }
         }
@@ -256,62 +420,28 @@
      */
     private boolean setViewLayout(int type) {
         mViewType = type;
-        boolean readMore = false;
-        int height;
-        if (type == CandidatesViewManager.VIEW_TYPE_CLOSE) {
-        	mViewBody.setVisibility(View.GONE);
+        setViewScaleUp(false, null);
+
+        switch (type) {
+        case CandidatesViewManager.VIEW_TYPE_CLOSE:
+            mViewCandidateBase.setMinimumHeight(-1);
             return false;
+
+        case CandidatesViewManager.VIEW_TYPE_NORMAL:
+            mViewBodyScroll.scrollTo(0, 0);
+            mViewCandidateList1st.setVisibility(View.VISIBLE);
+            mViewCandidateList2nd.setVisibility(View.GONE);
+            mViewCandidateBase.setMinimumHeight(-1);
+            int line = (mPortrait) ? LINE_NUM_PORTRAIT : LINE_NUM_LANDSCAPE;
+            mViewCandidateList1st.setMinimumHeight(getCandidateMinimumHeight() * line);
+            return false;
+
+        case CandidatesViewManager.VIEW_TYPE_FULL:
+        default:
+            mViewCandidateList2nd.setVisibility(View.VISIBLE);
+            mViewCandidateBase.setMinimumHeight(mViewHeight);
+            return true;
         }
-        
-        mViewBody.setVisibility(View.VISIBLE);
-
-        if (mPortrait) {
-            if (type == CandidatesViewManager.VIEW_TYPE_NORMAL) {
-                mViewBodyScroll.scrollTo(0, 0);
-                height = LINE_HEIGHT * LINE_NUM_PORTRAIT;
-                mViewBodyText.setMaxLines(LINE_NUM_PORTRAIT);
-                mViewBodyText.setLines(LINE_NUM_PORTRAIT);
-                if (mWordCount > 1) {
-                    int displayEndCount = (mWordCountInNormalView != -1)    ? mWordCountInNormalView : mWordCount;
-                    int endPosition = mEndPositionArray.get(displayEndCount - 1);
-                    mViewBodyText.setText(mCandidates.subSequence(0, endPosition));
-                    mViewBodyText.setSelection(0, 0);
-                    mViewBodyText.setCursorVisible(false);
-                }
-                mViewBodyText.setMinimumHeight(height);
-            } else {
-                height = LINE_HEIGHT * LINE_NUM_PORTRAIT_FULL;
-                mViewBodyText.setMaxLines(DISPLAY_LINE_MAX_COUNT);
-                readMore = true;
-                mViewBodyText.setMinimumHeight(height);
-            }
-        } else {
-            if (type == CandidatesViewManager.VIEW_TYPE_NORMAL) {
-                mViewBodyScroll.scrollTo(0, 0);
-                height = LINE_HEIGHT * LINE_NUM_LANDSCAPE;
-                mViewBodyText.setMaxLines(LINE_NUM_LANDSCAPE);
-                mViewBodyText.setLines(LINE_NUM_LANDSCAPE);
-                if (mWordCount > 1) {
-                    int displayEndCount = (mWordCountInNormalView != -1)    ? mWordCountInNormalView : mWordCount;
-                    int endPosition = mEndPositionArray.get(displayEndCount - 1);
-                    mViewBodyText.setText(mCandidates.subSequence(0, endPosition));
-                    mViewBodyText.setSelection(0, 0);
-                    mViewBodyText.setCursorVisible(false);
-                }
-                mViewBodyText.setMinimumHeight(height);
-            } else {
-                height = LINE_HEIGHT * LINE_NUM_LANDSCAPE_FULL * ((!mHardKeyboardHidden) ? 2 : 1);
-                mViewBodyText.setMaxLines(DISPLAY_LINE_MAX_COUNT);
-                readMore = true;
-                mViewBodyText.setMinimumHeight(height);
-            }
-        }
-
-        mViewBody.updateViewLayout(mViewBodyScroll,
-                                   new FrameLayout.LayoutParams(mViewWidth, height));
-
-        mViewHeight = height;
-        return readMore;
     }
 
     /** @see CandidatesViewManager#getViewType */
@@ -321,11 +451,24 @@
 
     /** @see CandidatesViewManager#displayCandidates */
     public void displayCandidates(WnnEngine converter) {
+
         mCanReadMore = false;
         mDisplayEndOffset = 0;
         mIsFullView = false;
-        int maxLine = getMaxLine();
-        displayCandidates(converter, true, maxLine);
+        mFullViewWordCount = 0;
+        mFullViewOccupyCount = 0;
+        mFullViewPrevLineTopId = 0;
+        mCreateCandidateDone = false;
+        mNormalViewWordCountOfLine = 0;
+
+        clearCandidates();
+        mConverter = converter;
+        setViewLayout(CandidatesViewManager.VIEW_TYPE_NORMAL);
+        
+        mViewCandidateTemplate.setVisibility(View.VISIBLE);
+        mViewCandidateTemplate.setBackgroundResource(R.drawable.cand_back);
+
+        displayCandidates(converter, true, getMaxLine());
     }
 
     /** @see CandidatesViewManager#getMaxLine */
@@ -335,59 +478,6 @@
     }
 
     /**
-     * Add a new line if necessary.
-     */
-    private void addNewlineIfNecessary() {
-        int maxLine = getMaxLine();
-        int lineNum = mViewBodyText.getLineCount();
-        if (lineNum == 0) {
-            lineNum = countLineUsingMeasureText(mViewBodyText.getText());
-        }
-        int textLength = mViewBodyText.length();
-        for (int i = 0; i < 3; i++) {
-            mPositionToWordIndexArray.add(textLength + i,-1);
-        }
-        for (int i = 0; i < maxLine - lineNum; i++) {
-            mViewBodyText.append("\n");
-        }
-        if (mPortrait && maxLine == -1 && lineNum == 1) {
-            mViewBodyText.append("\n");
-        }
-        return;
-    }
-
-    /**
-     * Count lines using {@link Paint#measureText}.
-     *
-     * @param text      The text to display
-     * @return          Number of lines
-     */
-    private int countLineUsingMeasureText(CharSequence text) {
-        StringBuffer tmpText = new StringBuffer(text);
-        mStartPositionArray.add(mWordCount,tmpText.length());
-        int padding =
-            ViewConfiguration.getScrollBarSize() +
-            mViewBodyText.getPaddingLeft() +       
-            mViewBodyText.getPaddingRight();       
-        TextPaint p = mViewBodyText.getPaint();
-        int lineCount = 1;
-        int start = 0;
-        for (int i = 0; i < mWordCount; i++) {
-            if (tmpText.length() < start ||
-                tmpText.length() < mStartPositionArray.get(i + 1)) {
-                return 1;
-            }
-            float lineLength = measureText(p, tmpText, start, mStartPositionArray.get(i + 1));
-            if (lineLength > (mViewWidth - padding)) {
-                lineCount++;
-                start = mStartPositionArray.get(i);
-                i--;
-            }
-        }
-        return lineCount;
-    }
-
-    /**
      * Display the candidates.
      * 
      * @param converter  {@link WnnEngine} which holds candidates.
@@ -399,155 +489,47 @@
             return;
         }
 
-        mHasStartedSelect = false;
-
-        /* Clear for the first time */
-        if (dispFirst) {
-            clearCandidates();
-            this.mConverter = converter;
-            mLastWord = null;
-            mHasCreatedCandidateList = true;
-        }
-
         /* Concatenate the candidates already got and the last one in dispFirst mode */
-        boolean category = false;
-        StringBuffer tmp = new StringBuffer();
-        tmp.append(mCandidates);
-        if ((!dispFirst) && (mLastWord != null) && (mLastWord.candidate.length() != 0)) {
-            mLineWordCount = -1;
-
-            StringBuffer displayText = createDisplayText(mLastWord, maxLine);
-
-            if (category) {
-                tmp.append(displayText);
-                category = false;
-            } else {
-                mWnnWordArray.add(mWordCount, mLastWord);
-                int i = 0;
-                for (i = 0 ; i < tmp.length(); i++) {
-                    if (!displayText.subSequence(i, i + 1).equals("\n")) {
-                        break;
-                    }
-                }
-                mStartPositionArray.add(mWordCount, tmp.length() + i);
-                tmp.append(displayText);
-                mEndPositionArray.add(mWordCount, tmp.length());
-                tmp.append(CANDIDATE_SEPARATOR);
-                mWordCount++;
-            }
-            mLastWord = null;
-        }
-
         int displayLimit = mDisplayLimit;
-        StringBuffer displayText;
+
+        boolean isHistorySequence = false;
+        boolean isBreak = false;
+
         /* Get candidates */
-        WnnWord result;
-        while ((result = converter.getNextCandidate()) != null && (displayLimit == -1 || mWordCount < displayLimit)) {
+        WnnWord result = null;
+        while ((displayLimit == -1 || mWordCount < displayLimit)) {
+            result = converter.getNextCandidate();
 
-            displayText = createDisplayText(result, maxLine);
-            if (displayText == null) {
-                continue;
-            }
-            
-            mWnnWordArray.add(mWordCount, result);
-            int i = 0;
-            for (i = 0 ; i < tmp.length(); i++) {
-                if (!displayText.subSequence(i, i + 1).equals("\n")) {
-                    break;
-                }
-            }
-            mStartPositionArray.add(mWordCount, tmp.length() + i);
-            tmp.append(displayText);
-            mEndPositionArray.add(mWordCount,tmp.length());
-            tmp.append(CANDIDATE_SEPARATOR);
-            mWordCount++;
-
-            if (mIsFullView) {
-                continue;
-            }
-        
-            mViewBodyText.setText(tmp);
-            int lineNum = mViewBodyText.getLineCount();
-            if (lineNum == 0) {
-                lineNum = countLineUsingMeasureText(mViewBodyText.getText());
-                if (lineNum == -1) {
-                    return;
-                }
-            }
-            if (dispFirst &&  lineNum > maxLine) {
-                if (mWordCount == 1) {
-                    setViewLayout(CandidatesViewManager.VIEW_TYPE_FULL);
-                    maxLine = -1;
-                    mIsFullView = true;
-                    continue;
-                }               
-                
-                mCanReadMore = true;
-
-                    mLastWord = result;
-                if (mWordCount > 1) {
-                    tmp.delete(mStartPositionArray.get(mWordCount - 1), tmp.length());
-                    mWnnWordArray.remove(mWordCount -1);
-                    mStartPositionArray.remove(mWordCount -1);
-                    mEndPositionArray.remove(mWordCount -1);
-                } else {
-                    return;
-                }
-                mWordCount--;
-                mWordCountInNormalView = mWordCount;
+            if (result == null) {
                 break;
-            } else {
-                if (mWordCount == 1) {
-                    setViewLayout(CandidatesViewManager.VIEW_TYPE_NORMAL);
-                }               
             }
+
+            setCandidate(false, result);
+
+            if (dispFirst && (maxLine < mLineCount)) {
+                mCanReadMore = true;
+                isBreak = true;
+                break;
+            }
+        }
+
+        if (!isBreak && !mCreateCandidateDone) {
+            /* align left if necessary */
+            createNextLine();
+            mCreateCandidateDone = true;
         }
         
-        /* save the candidate string */
-        mCandidates.delete(0, mCandidates.length());
-        mCandidates.append(tmp);
-        int j = 0;
-        for (int i = 0; i < mWordCount; i++) {
-            while (j <= mEndPositionArray.get(i)) {
-                if (j < mStartPositionArray.get(i)) {
-                    mPositionToWordIndexArray.add(j,-1);
-                } else {
-                    mPositionToWordIndexArray.add(j,i);
-                }
-                j++;
+        if (mWordCount < 1) { /* no candidates */
+            if (mAutoHideMode) {
+                mWnn.setCandidatesViewShown(false);
+                return;
+            } else {
+                mCanReadMore = false;
+                mIsFullView = false;
+                setViewLayout(CandidatesViewManager.VIEW_TYPE_NORMAL);
             }
-            mPositionToWordIndexArray.add(j,-1);    
-            mPositionToWordIndexArray.add(j + 1,-1);
         }
 
-        if (mAutoHideMode && mWordCount < 1) {
-            mWnn.setCandidatesViewShown(false);
-            return;
-        }
-
-        int displayEndCount = 
-            ((mViewType == CandidatesViewManager.VIEW_TYPE_NORMAL) &&
-             (mWordCountInNormalView != -1))
-            ? mWordCountInNormalView : mWordCount;
-        int endPosition = mEndPositionArray.get(displayEndCount - 1);
-        endPosition += CANDIDATE_SEPARATOR.length();
-
-        if (mDisplayEndOffset > 0 && maxLine != -1) {
-            mCanReadMore = true;
-            String str = mCandidates.substring(0, mDisplayEndOffset);
-            StringBuffer sub = new StringBuffer(str);
-            sub.append(CANDIDATE_SEPARATOR);
-            mViewBodyText.setText(sub.subSequence(0, mDisplayEndOffset + CANDIDATE_SEPARATOR.length()));
-        } else {
-            mViewBodyText.setText(mCandidates.subSequence(0, endPosition));
-            addNewlineIfNecessary();
-        }
-
-        /* Set EditText */
-        mViewBodyText.setSelection(0, 0);
-        mViewBodyText.setCursorVisible(false);
-        mViewBodyText.requestFocus();
-
         setReadMore();
 
         if (!(mViewBody.isShown())) {
@@ -557,144 +539,234 @@
     }
 
     /**
-     * Display {@code mReadMoreText} if there are more candidates.
-     *
+     * Add a candidate into the list.
+     * @param isCategory  {@code true}:caption of category, {@code false}:normal word
+     * @param word        A candidate word
      */
-    private void setReadMore() {
-        if (mCanReadMore && !mIsFullView && !mCandidateDeleteState) {
-            mReadMoreText.setHeight(mViewHeight);
-            mReadMoreText.setVisibility(View.VISIBLE);
-        } else {
-            mReadMoreText.setVisibility(View.GONE);
-        }
-    }
-        
-    /**
-     * Create the string to show in the candidate window.
-     *
-     * @param word      A candidate word
-     * @param maxLine   The maximum number of line in the candidate window
-     * @return      The string to show
-     */
-    private StringBuffer createDisplayText(WnnWord word, int maxLine) {
-        StringBuffer tmp = new StringBuffer();
-        int padding = ViewConfiguration.getScrollBarSize() + 
-                      mViewBodyText.getPaddingLeft() +       
-                      mViewBodyText.getPaddingRight();       
-        int width = mViewWidth - padding;
-        TextPaint p = mViewBodyText.getPaint();
-        float newLineLength = measureText(p, word.candidate, 0, word.candidate.length());
-        float separatorLength = measureText(p, CANDIDATE_SEPARATOR, 0, CANDIDATE_SEPARATOR.length());
-        boolean isFirstWordOfLine = (mLineLength == 0);
+    private void setCandidate(boolean isCategory, WnnWord word) {
+        int textLength = measureText(word.candidate, 0, word.candidate.length());
+        TextView template = mViewCandidateTemplate;
+        textLength += template.getPaddingLeft() + template.getPaddingRight();
+        int maxWidth = mViewWidth;
 
-        int maxWidth = 0;
-        int lineLength = 0;
-        lineLength += newLineLength;
-        maxWidth += width - separatorLength;
-        
-        mLineLength += newLineLength;
-        mLineLength += separatorLength;
-        mLineWordCount++;
-
-        if (mLineWordCount == 0) {
-            mLineLength = lineLength;
-            mLineLength += separatorLength;
-        }
-        
-        if (!isFirstWordOfLine && (width < mLineLength) && mLineWordCount != 0) {
-            tmp.append("\n");
-            mLineLength = lineLength;
-            mLineLength += separatorLength;
-            mLineWordCount = 0;
-        }
-        return adjustDisplaySize(word, tmp, lineLength, maxWidth, maxLine);
-    }
-
-    
-    /**
-     * Adjust the width of specified string
-     *
-     * @param word              A candidate word
-     * @param tmp               A work area
-     * @param newLineLength     The line length to show
-     * @param maxwidth          The maximum number of width that can be displayed in the candidate window
-     * @param maxLine           The maximum number of line in the candidate window
-     * @return              The string to show
-     */
-    private StringBuffer adjustDisplaySize(WnnWord word, StringBuffer tmp, int newLineLength, int maxWidth, int maxLine) {
-        StringBuffer string = new StringBuffer(tmp);
-        if (newLineLength > maxWidth) {
-            TextPaint p = mViewBodyText.getPaint();
-            float separatorLength = measureText(p, CANDIDATE_SEPARATOR, 0, CANDIDATE_SEPARATOR.length());
-            int length = word.candidate.length();
-            int size = 0;
-            int count = 0;
-            int line = 0;
-            float LineLength = 0;
-            for (int i = 0 ; i < length;i++) {
-                string.append(word.candidate.charAt(i));
-                LineLength = measureText(p, string, count, count + 1);
-                size += LineLength;
-                if (size > maxWidth) {
-                    line++;
-                    string.delete(string.length() - 1, string.length());
-                    if (mDisplayEndOffset == 0 && line == maxLine && mWordCount == 0) {
-                        mDisplayEndOffset = count;
-                    }
-                    string.append("\n");
-                    string.append(word.candidate.charAt(i));
-                    size = 0;
-                    count++;
-                    LineLength = measureText(p, string, count, count + 1);
-                    size += LineLength;
-                }
-                count++;
+        TextView textView;
+        if (mIsFullView || getMaxLine() < mLineCount) {
+            /* Full view */
+            int indentWidth = mViewWidth / FULL_VIEW_DIV;
+            int occupyCount = Math.min((textLength + indentWidth) / indentWidth, FULL_VIEW_DIV);
+            if (isCategory) {
+                occupyCount = FULL_VIEW_DIV;
             }
 
-            mLineWordCount = 0;
-            mLineLength = newLineLength;
-            mLineLength += separatorLength;
+            if (FULL_VIEW_DIV < (mFullViewOccupyCount + occupyCount)) {
+                if (FULL_VIEW_DIV != mFullViewOccupyCount) {
+                    mFullViewPrevParams.width += (FULL_VIEW_DIV - mFullViewOccupyCount) * indentWidth;
+                    mViewCandidateList2nd.updateViewLayout(mFullViewPrevView, mFullViewPrevParams);
+                }
+                mFullViewOccupyCount = 0;
+                mFullViewPrevLineTopId = mFullViewPrevView.getId();
+                mLineCount++;
+            }
+
+            RelativeLayout layout = mViewCandidateList2nd;
+
+            int width = indentWidth * occupyCount;
+            int height = getCandidateMinimumHeight();
+            RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(width, height);
+
+            if (mFullViewPrevLineTopId == 0) {
+                params.addRule(RelativeLayout.ALIGN_PARENT_TOP);
+            } else {
+                params.addRule(RelativeLayout.BELOW, mFullViewPrevLineTopId);
+            }
+            
+            if (mFullViewOccupyCount == 0) {
+                params.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
+            } else {
+                params.addRule(RelativeLayout.RIGHT_OF, (mWordCount - 1));
+            }
+
+            textView = (TextView) layout.getChildAt(mFullViewWordCount);
+            if (textView == null) {
+                textView = createCandidateView();
+                textView.setLayoutParams(params);
+
+                mViewCandidateList2nd.addView(textView);
+            } else {
+                mViewCandidateList2nd.updateViewLayout(textView, params);
+            }
+
+            mFullViewOccupyCount += occupyCount;
+            mFullViewWordCount++;
+            mFullViewPrevView = textView;
+            mFullViewPrevParams = params;
+
         } else {
-            string.append(word.candidate);
+            textLength = Math.max(textLength, getCandidateMinimumWidth());
+
+            /* Normal view */
+            int nextEnd = mLineLength + textLength;
+            if (mLineCount == 1) {
+                maxWidth -= getCandidateMinimumWidth();
+            }
+
+            if ((maxWidth < nextEnd) && (mWordCount != 0)) {
+                createNextLine();
+                if (getMaxLine() < mLineCount) {
+                    mLineLength = 0;
+                    /* Call this method again to add the candidate in the full view */
+                    setCandidate(isCategory, word);
+                    return;
+                }
+                
+                mLineLength = textLength;
+            } else {
+                mLineLength = nextEnd;
+            }
+
+            LinearLayout lineView = (LinearLayout) mViewCandidateList1st.getChildAt(mLineCount - 1);
+            textView = (TextView) lineView.getChildAt(mNormalViewWordCountOfLine);
+
+            if (isCategory) {
+                if (mLineCount == 1) {
+                    mViewCandidateTemplate.setBackgroundDrawable(null);
+                }
+                mLineLength += CANDIDATE_LEFT_ALIGN_THRESHOLD;
+            }
+
+            mNormalViewWordCountOfLine++;
         }
-        return string;
+
+        textView.setText(word.candidate);
+        textView.setTextColor(mTextColor);
+        textView.setId(mWordCount);
+        textView.setVisibility(View.VISIBLE);
+        textView.setPressed(false);
+
+        if (isCategory) {
+            textView.setOnClickListener(null);
+            textView.setOnLongClickListener(null);
+            textView.setBackgroundDrawable(null);
+        } else {
+            textView.setOnClickListener(mCandidateOnClick);
+            textView.setOnLongClickListener(mCandidateOnLongClick);
+            textView.setBackgroundResource(R.drawable.cand_back);
+        }
+        textView.setOnTouchListener(mCandidateOnTouch);
+
+        if (maxWidth < textLength) {
+            textView.setEllipsize(TextUtils.TruncateAt.END);
+        } else {
+            textView.setEllipsize(null);
+        }
+
+        ImageSpan span = null;
+        if (word.candidate.equals(" ")) {
+            span = new ImageSpan(mWnn, R.drawable.word_half_space,
+                                 DynamicDrawableSpan.ALIGN_BASELINE);
+        } else if (word.candidate.equals("\u3000" /* full-width space */)) {
+            span = new ImageSpan(mWnn, R.drawable.word_full_space,
+                                 DynamicDrawableSpan.ALIGN_BASELINE);
+        }
+
+        if (span != null) {
+            SpannableString spannable = new SpannableString("   ");
+            spannable.setSpan(span, 1, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
+            textView.setText(spannable);
+        }
+
+        mWnnWordArray.add(mWordCount, word);
+        mWordCount++;
     }
-        
+
+    /**
+     * Create a view for a candidate.
+     * @return the view
+     */
+    private TextView createCandidateView() {
+        TextView text = new TextView(mViewBodyScroll.getContext());
+        text.setTextSize(20);
+        text.setBackgroundResource(R.drawable.cand_back);
+        text.setGravity(Gravity.CENTER);
+        text.setSingleLine();
+        text.setPadding(4, 4, 4, 4);
+        text.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
+                                                           ViewGroup.LayoutParams.WRAP_CONTENT,
+                                                           1.0f));
+        text.setMinHeight(getCandidateMinimumHeight());
+        text.setMinimumWidth(getCandidateMinimumWidth());
+        return text;
+    }
+
+    /**
+     * Display {@code mReadMoreText} if there are more candidates.
+     */
+    private void setReadMore() {
+        if (mIsScaleUp) {
+            mReadMoreButton.setVisibility(View.GONE);
+            mViewCandidateTemplate.setVisibility(View.GONE);
+            return;
+        }
+
+        if (mIsFullView) {
+            mReadMoreButton.setVisibility(View.VISIBLE);
+            mReadMoreButton.setImageResource(R.drawable.cand_down);
+        } else {
+            if (mCanReadMore) {
+                mReadMoreButton.setVisibility(View.VISIBLE);
+                mReadMoreButton.setImageResource(R.drawable.cand_up);
+            } else {
+                mReadMoreButton.setVisibility(View.GONE);
+                mViewCandidateTemplate.setVisibility(View.GONE);
+            }
+        }
+    }
+
+    /**
+     * Clear the list of the normal candidate view.
+     */
+    private void clearNormalViewCandidate() {
+        LinearLayout candidateList = mViewCandidateList1st;
+        int lineNum = candidateList.getChildCount();
+        for (int i = 0; i < lineNum; i++) {
+
+            LinearLayout lineView = (LinearLayout)candidateList.getChildAt(i);
+            int size = lineView.getChildCount();
+            for (int j = 0; j < size; j++) {
+                View v = lineView.getChildAt(j);
+                v.setVisibility(View.GONE);
+            }
+        }
+    }
         
     /** @see CandidatesViewManager#clearCandidates */
     public void clearCandidates() {
-        mViewBodyText.setText("");
+        clearNormalViewCandidate();
+
+        RelativeLayout layout = mViewCandidateList2nd;
+        int size = layout.getChildCount();
+        for (int i = 0; i < size; i++) {
+            View v = layout.getChildAt(i);
+            v.setVisibility(View.GONE);
+        }
     
-        mCandidates.delete(0, mCandidates.length());
+        mLineCount = 1;
         mWordCount = 0;
-        mWordCountInNormalView = -1;
-        mStartPositionArray.clear();
-        mEndPositionArray.clear();
-        mPositionToWordIndexArray.clear();
         mWnnWordArray.clear();
 
         mLineLength = 0;
-        mLineWordCount = -1;
 
+        mIsFullView = false;
+        setViewLayout(CandidatesViewManager.VIEW_TYPE_NORMAL);
         if (mAutoHideMode) {
             setViewLayout(CandidatesViewManager.VIEW_TYPE_CLOSE);
         }
 
-        if (mCandidateDeleteState) {
-            mViewBodyScroll.removeAllViews();
-            mViewBodyScroll.addView(mViewBodyText);
-        }
-        mCandidateDeleteState = false;
-
-        mHasCreatedCandidateList = false;
-
         if (mAutoHideMode && mViewBody.isShown()) {
             mWnn.setCandidatesViewShown(false);
         }
-        if (!mAutoHideMode) {
-            mCanReadMore = false;
-            setReadMore();
-        }
+        mCanReadMore = false;
+        setReadMore();
     }
 
     /** @see CandidatesViewManager#setPreferences */
@@ -716,30 +788,11 @@
     }
     
     /**
-     * @see OnTouchListener#onTouch
-     */
-    public boolean onTouch(View v, MotionEvent event) {
-        if (mMotionEvent != null) {
-            return true;
-        }
-
-        mMotionEvent = event;
-        boolean ret = mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.CANDIDATE_VIEW_TOUCH));
-        mMotionEvent = null;
-        return ret;
-    }
-
-    /**
-     * Process CANDIDATE_VIEW_TOUCH event.
+     * Process {@code OpenWnnEvent.CANDIDATE_VIEW_TOUCH} event.
      * 
      * @return      {@code true} if event is processed; {@code false} if otherwise
      */
     public boolean onTouchSync() {
-        if (!mHasCreatedCandidateList) {
-            return false;
-        }
-
-        mViewBodyText.setCursorVisible(false);
         return mGestureDetector.onTouchEvent(mMotionEvent);
     }
 
@@ -761,61 +814,20 @@
         mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.SELECT_CANDIDATE, word));
     }
 
-    /**
-     * Convert a coordinate into the offset of character
-     *
-     * @param x     The horizontal position
-     * @param y     The vertical position
-     * @return  The offset of character
-     */
-    public int getOffset(int x,int y){
-        Layout layout = mViewBodyText.getLayout();
-        int line = layout.getLineForVertical(y);
-        
-        if( y >= layout.getLineTop(line+1) ){
-            return layout.getText().length();
-        }
-
-        int offset = layout.getOffsetForHorizontal(line,x);
-        offset -= TOUCH_ADJUSTED_VALUE;
-        if (offset < 0) {
-            offset = 0;
-        }
-        return offset;
-    }
-
-    /** from GestureDetector.OnGestureListener class */
+    /** @see android.view.GestureDetector.OnGestureListener#onDown */
     public boolean onDown(MotionEvent arg0) {
-        if (!mCandidateDeleteState) {
-            int position = getOffset((int)arg0.getX(),(int)arg0.getY());
-            int wordIndex = mPositionToWordIndexArray.get(position);
-            if (wordIndex != -1) {
-                int startPosition = mStartPositionArray.get(wordIndex);
-                int endPosition = 0;
-                if (mDisplayEndOffset > 0 && getViewType() == CandidatesViewManager.VIEW_TYPE_NORMAL) {
-                    endPosition = mDisplayEndOffset + CANDIDATE_SEPARATOR.length();
-                } else {
-                    endPosition = mEndPositionArray.get(wordIndex);
-                }
-                mViewBodyText.setSelection(startPosition, endPosition);
-                mViewBodyText.setCursorVisible(true);
-                mViewBodyText.invalidate();
-                mHasStartedSelect = true;
-            }
-        }
-        return true;
+        return false;
     }
 
-    /** from GestureDetector.OnGestureListener class */
+    /** @see android.view.GestureDetector.OnGestureListener#onFling */
     public boolean onFling(MotionEvent arg0, MotionEvent arg1, float arg2, float arg3) {
-
-        if (mCandidateDeleteState) {
+        if (mIsScaleUp) {
             return false;
         }
 
         boolean consumed = false;
-        if (arg1.getY() < arg0.getY()) {
-            if (mViewType == CandidatesViewManager.VIEW_TYPE_NORMAL) {
+        if (arg1 != null && arg0 != null && arg1.getY() < arg0.getY()) {
+            if ((mViewType == CandidatesViewManager.VIEW_TYPE_NORMAL) && mCanReadMore) {
                 if (mVibrator != null) {
                     try { mVibrator.vibrate(30); } catch (Exception ex) { }
                 }
@@ -837,176 +849,120 @@
         return consumed;
     }
 
-    /** from GestureDetector.OnGestureListener class */
+    /** @see android.view.GestureDetector.OnGestureListener#onLongPress */
     public void onLongPress(MotionEvent arg0) {
-        if (!mHasStartedSelect) {
-            return;
-        }
-
-        mWord = null;
-        int position = getOffset((int)arg0.getX(),(int)arg0.getY());
-        if (position < mPositionToWordIndexArray.size()) {
-            int wordIndex = mPositionToWordIndexArray.get(position);
-            if (wordIndex != -1) {
-                mCandidateDeleteState = true;
-                mViewBodyScroll.removeAllViews();
-                mViewBody.updateViewLayout(mViewBodyScroll,
-                                           new FrameLayout.LayoutParams(LayoutParams.FILL_PARENT,
-                                                                         LayoutParams.WRAP_CONTENT));
-                setReadMore();
-                mWord = mWnnWordArray.get(wordIndex);
-                LinearLayout mLinerLayout;
-                mLinerLayout = new  LinearLayout(mViewBodyScroll.getContext());
-                mLinerLayout.setOrientation(LinearLayout.VERTICAL);
-                Resources r = mViewBodyScroll.getContext().getResources();
-                int color = r.getColor(R.color.candidate_background);
-                mLinerLayout.setBackgroundColor(color);
-                TextView text = new TextView(mViewBodyScroll.getContext());
-                text.setText(mWord.candidate);
-                text.setTextColor(mWnn.getResources().getColor(R.color.candidate_text));
-                text.setTextSize(mWnn.getResources().getDimension(R.dimen.candidate_delete_word_size));
-                text.setGravity(Gravity.CENTER);
-                mLinerLayout.addView(text);
-                
-                LinearLayout linearLayout = new LinearLayout(mViewBodyScroll.getContext());
-                linearLayout.setOrientation(LinearLayout.HORIZONTAL);
-                
-                linearLayout.addView(createSelectButton());
-
-                linearLayout.addView(createCancelButton());
-                linearLayout.setGravity(Gravity.CENTER);
-                mLinerLayout.addView(linearLayout);
-                mViewBodyScroll.addView(mLinerLayout);
-            }
-        }
+        return;
     }
 
-    /** from GestureDetector.OnGestureListener class */
-    public boolean onScroll(MotionEvent arg0, MotionEvent arg1, float arg2,
-            float arg3) {
+    /** @see android.view.GestureDetector.OnGestureListener#onScroll */
+    public boolean onScroll(MotionEvent arg0, MotionEvent arg1, float arg2, float arg3) {
         return false;
     }
 
-    /** from GestureDetector.OnGestureListener class */
+    /** @see android.view.GestureDetector.OnGestureListener#onShowPress */
     public void onShowPress(MotionEvent arg0) {
     }
 
-    /** from GestureDetector.OnGestureListener class */
+    /** @see android.view.GestureDetector.OnGestureListener#onSingleTapUp */
     public boolean onSingleTapUp(MotionEvent arg0) {
-        if (!mHasStartedSelect) {
-            return true;
-        }
-
-        WnnWord word = null;
-
-        if (!mCandidateDeleteState) {
-            int position = getOffset((int)arg0.getX(),(int)arg0.getY());
-            if (position < mPositionToWordIndexArray.size()) {
-                int wordIndex = mPositionToWordIndexArray.get(position);
-                if (wordIndex != -1) {
-                    word = mWnnWordArray.get(wordIndex);
-                }
-            
-                if (word != null) {
-                    selectCandidate(word);
-                    return true;
-                } else {
-                    return false;
-                }
-            }
-        }
         return false;
     }
     
     /**
-     * Create the select button.
-     *
-     * @return Button The button object
-     */
-    private Button createSelectButton(){
-        final Button selectB;
-        selectB= new Button(mViewBodyScroll.getContext()) {
-            public boolean onTouchEvent(MotionEvent me) {
-                boolean ret = super.onTouchEvent(me);
-                Drawable d = getBackground();
-                switch (me.getAction()) {
-                case MotionEvent.ACTION_DOWN:
-                    d.setState(View.PRESSED_ENABLED_SELECTED_WINDOW_FOCUSED_STATE_SET);
-                    break;
-                case MotionEvent.ACTION_UP:
-                default:
-                    d.clearColorFilter();
-                    break;
-                }
-                return ret;
-            }
-        };
-        selectB.setOnClickListener(new View.OnClickListener() {
-            public void onClick(View v) {
-                selectCandidate(mWord);
-            }
-        });
-        selectB.setText(mSelectBottonText);
-        return selectB;
-    }
-
-    /**
-     * Create the cancel button
-     *
-     * @return Button       the button object
-     */
-    private Button createCancelButton(){
-        final Button cancelB;
-        cancelB= new Button(mViewBodyScroll.getContext()) {
-            public boolean onTouchEvent(MotionEvent me) {
-                boolean ret = super.onTouchEvent(me);
-                Drawable d = getBackground();
-                switch (me.getAction()) {
-                case MotionEvent.ACTION_DOWN:
-                    d.setState(View.PRESSED_ENABLED_SELECTED_WINDOW_FOCUSED_STATE_SET);
-                    break;
-                case MotionEvent.ACTION_UP:
-                default:
-                    d.clearColorFilter();
-                    break;
-                }
-                return ret;
-            }
-        };
-        cancelB.setOnClickListener(new View.OnClickListener() {
-            public void onClick(View v) {
-                setViewLayout(CandidatesViewManager.VIEW_TYPE_NORMAL);
-                mViewBodyScroll.removeAllViews();
-                mCandidateDeleteState = false;
-                mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.UPDATE_CANDIDATE));
-                mViewBodyScroll.addView(mViewBodyText);
-            }
-        });
-        cancelB.setText(mCancelBottonText);
-        return cancelB;
-    }
-
-
-    /**
-     * Set the show state of hardware keyboard
+     * Retrieve the width of string to draw.
      * 
-     * @param hidden    {@code true} if the hardware keyboard is not shown
-     */
-    public void setHardKeyboardHidden(boolean hidden) {
-        mHardKeyboardHidden = hidden;
-    }
-
-    /**
-     * Retrieve the width of string to draw
-     * (Emoji is supported by this method)
-     * 
-     * @param paint         The information to draw
      * @param text          The string
      * @param start         The start position (specified by the number of character)
      * @param end           The end position (specified by the number of character)
      * @return          The width of string to draw
      */ 
-    public int measureText(TextPaint paint, CharSequence text, int start, int end) {
-        return (int)Styled.measureText(paint, new TextPaint(), text, start, end, null);
+    public int measureText(CharSequence text, int start, int end) {
+        TextPaint paint = mViewCandidateTemplate.getPaint();
+        return (int)paint.measureText(text, start, end);
+    }
+
+    /**
+     * Switch list/enlarge view mode.
+     * @param up  {@code true}:enlarge, {@code false}:list
+     * @param word  The candidate word to be enlarged.
+     */
+    private void setViewScaleUp(boolean up, WnnWord word) {
+        if (up == mIsScaleUp || (mViewScaleUp == null)) {
+            return;
+        }
+
+        if (up) {
+            setViewLayout(CandidatesViewManager.VIEW_TYPE_NORMAL);
+            mViewCandidateList1st.setVisibility(View.GONE);
+            mViewCandidateBase.setMinimumHeight(-1);
+            mViewCandidateBase.addView(mViewScaleUp);
+            TextView text = (TextView)mViewScaleUp.findViewById(R.id.candidate_scale_up_text);
+            text.setText(word.candidate);
+            if (!mPortrait) {
+                Resources r = mViewBodyScroll.getContext().getResources();
+                text.setTextSize(r.getDimensionPixelSize(R.dimen.candidate_delete_word_size_landscape));
+            }
+
+            mIsScaleUp = true;
+            setReadMore();
+        } else {
+            mIsScaleUp = false;
+            mViewCandidateBase.removeView(mViewScaleUp);
+        }
+    }
+
+    /**
+     * Create a layout for the next line.
+     */
+    private void createNextLine() {
+        int lineCount = mLineCount;
+        if (mIsFullView || getMaxLine() < lineCount) {
+            /* Full view */
+            mFullViewOccupyCount = 0;
+            mFullViewPrevLineTopId = mFullViewPrevView.getId();
+        } else {
+            /* Normal view */
+            LinearLayout lineView = (LinearLayout) mViewCandidateList1st.getChildAt(lineCount - 1);
+            float weight = 0;
+            if (mLineLength < CANDIDATE_LEFT_ALIGN_THRESHOLD) {
+                if (lineCount == 1) {
+                    mViewCandidateTemplate.setVisibility(View.GONE);
+                }
+            } else {
+                weight = 1.0f;
+            }
+
+            LinearLayout.LayoutParams params
+                = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
+                                                ViewGroup.LayoutParams.WRAP_CONTENT,
+                                                weight);
+            
+            int child = lineView.getChildCount();
+            for (int i = 0; i < child; i++) {
+                View view = lineView.getChildAt(i);
+
+                if (view != mViewCandidateTemplate) {
+                    view.setLayoutParams(params);
+                }
+            }
+
+            mLineLength = 0;
+            mNormalViewWordCountOfLine = 0;
+        }
+        mLineCount++;
+    }
+
+    /**
+     * @return the minimum width of a candidate view.
+     */
+    private int getCandidateMinimumWidth() {
+        return (int)(CANDIDATE_MINIMUM_WIDTH * mMetrics.density);
+    }
+
+    /**
+     * @return the minimum height of a candidate view.
+     */
+    private int getCandidateMinimumHeight() {
+        return (int)(CANDIDATE_MINIMUM_HEIGHT * mMetrics.density);
     }
 }
diff --git a/src/jp/co/omronsoft/openwnn/UserDictionaryToolsEdit.java b/src/jp/co/omronsoft/openwnn/UserDictionaryToolsEdit.java
index 40e780f..a12496a 100644
--- a/src/jp/co/omronsoft/openwnn/UserDictionaryToolsEdit.java
+++ b/src/jp/co/omronsoft/openwnn/UserDictionaryToolsEdit.java
@@ -23,7 +23,6 @@
 import android.content.Intent;
 import android.os.Bundle;
 import android.text.Editable;
-import android.text.SpannableStringBuilder;
 import android.text.TextWatcher;
 import android.util.Log;
 import android.view.KeyEvent;
@@ -57,8 +56,6 @@
 
     /** The error code (Already registered the same word) */
     private static final int RETURN_SAME_WORD = -11;
-    /** The error code (Insufficient the free space of the user dictionary) */
-    private static final int RETURN_USER_DICTIONARY_FULL = -12;
 
     /** The focus view and pair view */
     private static View sFocusingView = null;
@@ -181,12 +178,14 @@
      */
     public void setAddButtonControl() {
 
+        /* Text changed listener for the reading text */
         mReadEditText.addTextChangedListener(new TextWatcher() {
             public void afterTextChanged(Editable s) {
             }
             public void beforeTextChanged(CharSequence s, int start, int count, int after) {
             }
             public void onTextChanged(CharSequence s, int start, int before, int count) {
+                /* Enable/disable the "Add" button */
                 if ((mReadEditText.getText().toString().length() != 0) && 
                     (mCandidateEditText.getText().toString().length() != 0)) {
                     mEntryButton.setEnabled(true);
@@ -195,12 +194,14 @@
                 }
             }
         });
+        /* Text changed listener for the candidate text */
         mCandidateEditText.addTextChangedListener(new TextWatcher() {
             public void afterTextChanged(Editable s) {
             }
             public void beforeTextChanged(CharSequence s, int start, int count, int after) {
             }
             public void onTextChanged(CharSequence s, int start, int before, int count) {
+            	/* Enable/disable the "Add" button */
                 if ((mReadEditText.getText().toString().length() != 0) && 
                     (mCandidateEditText.getText().toString().length() != 0)) {
                     mEntryButton.setEnabled(true);
@@ -301,6 +302,12 @@
                             }
                         })
                         .setCancelable(true)
+                        .setOnCancelListener(new DialogInterface.OnCancelListener() {
+                            public void onCancel(DialogInterface dialog) {
+                                mEntryButton.setEnabled(true);
+                                mCancelButton.setEnabled(true);
+                            }
+                        })
                         .create();
 
             case DIALOG_CONTROL_OVER_MAX_TEXT_SIZE:
@@ -328,22 +335,26 @@
      * @return              {@code true} if success; {@code false} if fail.
      */
     private boolean addDictionary(String stroke, String candidate) {
-
         boolean ret;
 
+        /* create WnnWord from the strings */
         WnnWord wnnWordAdd = new WnnWord();
         wnnWordAdd.stroke = stroke;
         wnnWordAdd.candidate = candidate;
+        /* add word event */
         OpenWnnEvent event = new OpenWnnEvent(OpenWnnEvent.ADD_WORD,
                                   WnnEngine.DICTIONARY_TYPE_USER,
                                   wnnWordAdd);
+        /* notify the event to IME */
         ret = sendEventToIME(event);
         if (ret == false) {
+            /* get error code if the process in IME is failed */
             int ret_code = event.errorCode;
             if (ret_code == RETURN_SAME_WORD) {
                 showDialog(DIALOG_CONTROL_WORDS_DUPLICATE);
             }
         } else {
+            /* update the dictionary */
             mListInstance = createUserDictionaryToolsList();
         }
         return ret;
@@ -355,7 +366,7 @@
      * @param  word     The information of word
      */
     private void deleteDictionary(WnnWord word) {
-
+        /* delete the word from the dictionary */
         mListInstance = createUserDictionaryToolsList();
         boolean deleted = mListInstance.deleteWord(word);
         if (!deleted) {
@@ -363,7 +374,6 @@
                            R.string.user_dictionary_delete_fail,
                            Toast.LENGTH_LONG).show();
         }
-
     }
 
     /**
@@ -379,6 +389,7 @@
      */
     private boolean inputDataCheck(View v) {
 
+        /* return false if the length of the string exceeds the limit. */
         if ((((TextView)v).getTextSize()) > MAX_TEXT_SIZE) {
             showDialog(DIALOG_CONTROL_OVER_MAX_TEXT_SIZE);
             Log.e("OpenWnn", "inputDataCheck() : over max string length.");
@@ -394,10 +405,11 @@
     private void screenTransition() {
         finish();
 
+        /* change to the word listing window */
         Intent intent = new Intent();
         intent.setClassName(mPackageName, mListViewName);
         startActivity(intent);
-
+        
     }
 
 }
diff --git a/src/jp/co/omronsoft/openwnn/UserDictionaryToolsList.java b/src/jp/co/omronsoft/openwnn/UserDictionaryToolsList.java
index e0182bf..0b9a2cd 100644
--- a/src/jp/co/omronsoft/openwnn/UserDictionaryToolsList.java
+++ b/src/jp/co/omronsoft/openwnn/UserDictionaryToolsList.java
@@ -23,7 +23,6 @@
 import android.content.Intent;
 import android.graphics.Color;
 import android.os.Bundle;
-import android.os.Handler;
 import android.text.TextUtils;
 import android.util.Log;
 import android.view.Display;
@@ -41,6 +40,12 @@
 import android.widget.TableRow;
 import android.widget.TextView;
 import android.widget.Toast;
+import android.widget.Button;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
+
 
 /**
  * The abstract class for user dictionary tool.
@@ -74,8 +79,9 @@
     /** The size of font*/
     private final int WORD_TEXT_SIZE = 16;
 
-    /** The color of background */
+    /** The color of background (unfocused item) */
     private final int UNFOCUS_BACKGROUND_COLOR = 0xFF242424;
+    /** The color of background (focused item) */
     private final int FOCUS_BACKGROUND_COLOR = 0xFFFF8500;
 
     /** The minimum count of registered words */
@@ -83,31 +89,33 @@
     /** The maximum count of registered words */
     private final int MAX_WORD_COUNT = 100;
     /** Maximum word count to display */
-    private final int MAX_LIST_WORD_COUNT = 50;
-    /** Maximum word count to display (at the first step) */
-    private final int MAX_LIST_WORD_DELAY_COUNT = 50;
+    private final int MAX_LIST_WORD_COUNT = 100;
 
     /** The threshold time of the double tapping */
     private final int DOUBLE_TAP_TIME = 300;
 
     /** Widgets which constitute this screen of activity */
     private Menu mMenu;
+    /** Table layout for the lists */
     private TableLayout mTableLayout;
+    /** Focusing view */
     private static View sFocusingView = null;
+    /** Focusing pair view */
     private static View sFocusingPairView = null;
 
     /** Objects which control state transitions */
     private Intent mIntent;
-    private OpenWnnEvent mEvent;
-    private Handler mDelayUpdateHandler;
 
     /** The number of the registered words */
-    private int mWordCount = -1;
+    private int mWordCount = 0;
 
-    /** The state of menu items */
+    /** The state of "Add" menu item */
     private boolean mAddMenuEnabled;
+    /** The state of "Edit" menu item */
     private boolean mEditMenuEnabled;
+    /** The state of "Delete" menu item */
     private boolean mDeleteMenuEnabled;
+    /** The state of "Initialize" menu item */
     private boolean mInitMenuEnabled;
 
     /** {@code true} if the menu option is initialized */
@@ -121,7 +129,20 @@
     /** The time of previous action */
     private static long sJustBeforeActionTime = -1;
 
-    private boolean mHasCreatedList = false;
+    /** List of the words in the user dictionary */
+    private ArrayList<WnnWord> mWordList = null;
+
+    /** Work area for sorting the word list */
+    private WnnWord[] mSortData;
+
+    /** Whether the view is initialized */
+    private boolean mInit = false;
+
+    /** Page left button */
+    private Button mLeftButton = null;
+
+    /** Page right button */
+    private Button mRightButton = null;
 
     /**
      * Send the specified event to IME
@@ -130,6 +151,8 @@
      * @return      {@code true} if this event is processed
      */
     protected abstract boolean sendEventToIME(OpenWnnEvent ev);
+    /** Get the comparator for sorting the list */
+    protected abstract Comparator<WnnWord> getComparator();
 
     /**
      * Create the header
@@ -142,10 +165,36 @@
 
         super.onCreate(savedInstanceState);
 
-        mDelayUpdateHandler = new Handler();
         /* create XML layout */
         requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
         setContentView(R.layout.user_dictionary_tools_list);
+        mTableLayout = (TableLayout)findViewById(R.id.user_dictionary_tools_table);
+
+        Button b = (Button)findViewById(R.id.user_dictionary_left_button);
+        b.setOnClickListener(new View.OnClickListener() {
+                public void onClick(View v) {
+                    int pos = mWordCount - MAX_LIST_WORD_COUNT;
+                    if (0 <= pos) {
+                        mWordCount = pos;
+                        updateWordList();
+                        mTableLayout.findViewById(1).requestFocus();
+                    }
+                }
+            });
+        mLeftButton = b;
+
+        b = (Button)findViewById(R.id.user_dictionary_right_button);
+        b.setOnClickListener(new View.OnClickListener() {
+                public void onClick(View v) {
+                    int pos = mWordCount + MAX_LIST_WORD_COUNT;
+                    if (pos < mWordList.size()) {
+                        mWordCount = pos;
+                        updateWordList();
+                        mTableLayout.findViewById(1).requestFocus();
+                    }
+                }
+            });
+        mRightButton = b;
 
     }
 
@@ -154,13 +203,13 @@
         super.onStart();
         sBeforeSelectedViewID = -1;
         sJustBeforeActionTime = -1;
-        updateWordList();
-    }
+        mWordList = getWords();
 
-    /** @see android.app.Activity#onStop */
-    @Override protected void onStop() {
-        super.onStop();
-        mDelayUpdateHandler.removeCallbacks(updateWordListRunnable);
+        headerCreate();
+        final TextView leftText = (TextView) findViewById(R.id.user_dictionary_tools_list_title_words_count);
+        leftText.setText(mWordList.size() + "/" + MAX_WORD_COUNT);
+
+        updateWordList();
     }
 
     /**
@@ -213,7 +262,7 @@
 
 
         /* [menu] add a word */
-        if ((mWordCount >= MAX_WORD_COUNT) || !mHasCreatedList) {
+        if (mWordList.size() >= MAX_WORD_COUNT) {
             /* disable if the number of registered word exceeds MAX_WORD_COUNT */
             mAddMenuEnabled = false;
         } else {
@@ -221,13 +270,17 @@
         }
         
         /* [menu] edit a word/delete a word */
-        if (mWordCount <= MIN_WORD_COUNT) {
+        if (mWordList.size() <= MIN_WORD_COUNT) {
             /* disable if no word is registered or no word is selected */
             mEditMenuEnabled = false;
             mDeleteMenuEnabled = false;
         } else {
             mEditMenuEnabled = true;
-            mDeleteMenuEnabled = true;
+            if (mSelectedWords) {
+                mDeleteMenuEnabled = true;
+            } else {
+                mDeleteMenuEnabled = false;
+            }
         }
         
         /* [menu] clear the dictionary (always enabled) */
@@ -323,7 +376,7 @@
                 CharSequence focusPairString = ((TextView)sFocusingPairView).getText();
                 WnnWord wnnWordSearch = new WnnWord();
 
-            if (mSelectedViewID > MAX_WORD_COUNT) {
+                if (mSelectedViewID > MAX_WORD_COUNT) {
                     wnnWordSearch.stroke = focusPairString.toString();
                     wnnWordSearch.candidate = focusString.toString();
                 } else {
@@ -339,38 +392,19 @@
                     Toast.makeText(getApplicationContext(),
                                    R.string.user_dictionary_delete_fail,
                                    Toast.LENGTH_LONG).show();
-                return;
-                }
- 
-                int id = mSelectedViewID;
-            id = (MAX_WORD_COUNT < id) ? id - MAX_WORD_COUNT : id;
-                View v = null;
-
-                mTableLayout.removeView((View)sFocusingView.getParent());
-
-                for (int i = id; i < MAX_WORD_COUNT; i++) {
-                    v = mTableLayout.findViewById(i);
-                    if (v != null) {
-                        break;
-                    }
+                    return;
                 }
 
-                if (v == null) {
-                    for (int i = id; 0 <= i; i--) {
-                        v = mTableLayout.findViewById(i);
-                        if (v != null) {
-                            break;
-                        }
-                    }
+                mWordList = getWords();
+                int size = mWordList.size();
+                if (size <= mWordCount) {
+                    int newPos = (mWordCount - MAX_LIST_WORD_COUNT);
+                    mWordCount = (0 <= newPos) ? newPos : 0;
                 }
-            
-                if (v != null) {
-                    ((View)v.getParent()).requestFocus();
-                }
-                mWordCount--;
+                updateWordList();
 
                 TextView leftText = (TextView) findViewById(R.id.user_dictionary_tools_list_title_words_count);
-                leftText.setText(mWordCount + "/" + MAX_WORD_COUNT);
+                leftText.setText(size + "/" + MAX_WORD_COUNT);
 
                 if (mInitializedMenu) {
                     onCreateOptionsMenu(mMenu);
@@ -395,10 +429,15 @@
                 /* show the message */
                 Toast.makeText(getApplicationContext(), R.string.dialog_clear_user_dictionary_done,
                                Toast.LENGTH_LONG).show();
+                mWordList = new ArrayList<WnnWord>();
+                mWordCount = 0;
                 updateWordList();
-            if (mInitializedMenu) {
-                onCreateOptionsMenu(mMenu);
-            }
+                TextView leftText = (TextView) findViewById(R.id.user_dictionary_tools_list_title_words_count);
+                leftText.setText(mWordList.size() + "/" + MAX_WORD_COUNT);
+
+                if (mInitializedMenu) {
+                    onCreateOptionsMenu(mMenu);
+                }
             }
         };
 
@@ -447,9 +486,7 @@
             sFocusingPairView.setBackgroundColor(FOCUS_BACKGROUND_COLOR);
             mSelectedWords = true;
         } else {
-            if (mSelectedViewID == 0) {
-                mSelectedWords = false;
-            }
+            mSelectedWords = false;
             ((TextView)v).setTextColor(Color.LTGRAY);
             v.setBackgroundColor(UNFOCUS_BACKGROUND_COLOR);
             ((TextView)sFocusingPairView).setTextColor(Color.LTGRAY);
@@ -464,6 +501,7 @@
      * Add the word
      */
     public void wordAdd() {
+        /** change to the edit window */
         screenTransition(Intent.ACTION_INSERT, mEditViewName);
     }
 
@@ -551,149 +589,141 @@
         finish();
     }
 
+    /**
+     * Get the list of words in the user dictionary.
+     * @return The list of words
+     */
+    private ArrayList<WnnWord> getWords() {
+        WnnWord word = new WnnWord();
+        OpenWnnEvent event = new OpenWnnEvent(OpenWnnEvent.LIST_WORDS_IN_USER_DICTIONARY,
+                                              WnnEngine.DICTIONARY_TYPE_USER,
+                                              word);
+        sendEventToIME(event);
+
+        ArrayList<WnnWord> list = new ArrayList<WnnWord>();
+        for (int i = 0; i < MAX_WORD_COUNT; i++) {
+            event = new OpenWnnEvent(OpenWnnEvent.GET_WORD, word);
+            if (!sendEventToIME(event)) {
+                break;
+            }
+            list.add(event.word);
+        }
+
+        compareTo(list);
+
+        return list;
+    }
+
+    /**
+     * Sort the list of words
+     * @param array The array list of the words
+     */
+    protected void compareTo(ArrayList<WnnWord> array) {
+        mSortData = new WnnWord[array.size()];
+        array.toArray(mSortData);
+        Arrays.sort(mSortData, getComparator());   
+    }
+
 
     /**
      * Update the word list.
      */
     private void updateWordList() {
-        mWordCount = 0;
-        WnnWord wnnWordSearch = new WnnWord();
-        mEvent = new OpenWnnEvent(OpenWnnEvent.LIST_WORDS_IN_USER_DICTIONARY,
-                                  WnnEngine.DICTIONARY_TYPE_USER,
-                                  wnnWordSearch);
-        sendEventToIME(mEvent);
+        if (!mInit) {
+            mInit = true;
+            mSelectedViewID = 1;
 
-        mTableLayout = (TableLayout)findViewById(R.id.user_dictionary_tools_table);
-        mTableLayout.removeAllViews();
+            Window window = getWindow();
+            WindowManager windowManager = window.getWindowManager();
+            Display display = windowManager.getDefaultDisplay();
+            int system_width = display.getWidth();
 
-        if (createWordList(mWordCount,MAX_LIST_WORD_COUNT, this)) {
-            headerCreate();
-            final TextView leftText = (TextView) findViewById(R.id.user_dictionary_tools_list_title_words_count);
-            leftText.setText(R.string.user_dictionary_creating_wordlist);
-            mDelayUpdateHandler.removeCallbacks(updateWordListRunnable);
-            mDelayUpdateHandler.postDelayed(updateWordListRunnable, 0);
+            for (int i = 1; i <= MAX_LIST_WORD_COUNT; i++) {
+                TableRow row = new TableRow(this);
+                UserDictionaryToolsListFocus stroke = new UserDictionaryToolsListFocus(this);
+                stroke.setId(i);
+                stroke.setWidth(system_width/2);
+                stroke.setTextSize(WORD_TEXT_SIZE);
+                stroke.setTextColor(Color.LTGRAY);
+                stroke.setBackgroundColor(UNFOCUS_BACKGROUND_COLOR);
+                stroke.setSingleLine();
+                stroke.setPadding(1,0,1,1);
+                stroke.setEllipsize(TextUtils.TruncateAt.END);
+                stroke.setClickable(true);
+                stroke.setFocusable(true);
+                stroke.setFocusableInTouchMode(true);
+                stroke.setOnTouchListener(this);
+                stroke.setOnFocusChangeListener(this);
+
+                UserDictionaryToolsListFocus candidate = new UserDictionaryToolsListFocus(this);
+                candidate.setId(i+MAX_WORD_COUNT);
+                candidate.setWidth(system_width/2);
+                candidate.setTextSize(WORD_TEXT_SIZE);
+                candidate.setTextColor(Color.LTGRAY);
+                candidate.setBackgroundColor(UNFOCUS_BACKGROUND_COLOR);
+                candidate.setSingleLine();
+                candidate.setPadding(1,0,1,1);
+                candidate.setEllipsize(TextUtils.TruncateAt.END);
+                candidate.setClickable(true);
+                candidate.setFocusable(true);
+                candidate.setFocusableInTouchMode(true);
+                candidate.setOnTouchListener(this);
+                candidate.setOnFocusChangeListener(this);
+
+                stroke.setPairView(candidate);
+                candidate.setPairView(stroke);
+
+                row.addView(stroke);
+                row.addView(candidate);
+                mTableLayout.addView(row, tableCreateParam(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
+            }
+        }
+
+        int size = mWordList.size();
+        int start = mWordCount;
+
+        TextView t = (TextView)findViewById(R.id.user_dictionary_position_indicator);
+        if (size <= MAX_LIST_WORD_COUNT) {
+            ((View)mLeftButton.getParent()).setVisibility(View.GONE);
         } else {
-            if (mSelectedViewID >= 0) {
-                View v;
-                v = mTableLayout.findViewById(mSelectedViewID);
-                if (v != null) {
-                    ((View)v.getParent()).requestFocus();
-                } else {
-                    mSelectedViewID--;
-                    if (mSelectedViewID < 0) {
-                        mSelectedViewID = 0;
-                    }
-                    v = mTableLayout.findViewById(mSelectedViewID);
-                    if (v != null) {
-                        ((View)v.getParent()).requestFocus();
-                    }
-                }
-            }
-            headerCreate();
-            final TextView leftText = (TextView) findViewById(R.id.user_dictionary_tools_list_title_words_count);
-            leftText.setText(mWordCount + "/" + MAX_WORD_COUNT);
-            mHasCreatedList = true;
-        }
-    }
+            ((View)mLeftButton.getParent()).setVisibility(View.VISIBLE);
+            int last = (start + MAX_LIST_WORD_COUNT);
+            t.setText((start + 1) + " - " + Math.min(last, size));
 
-    /**
-     * Handler for updating the word list.
-     */
-    private final Runnable updateWordListRunnable = new Runnable() {
-            public void run() {
-                UserDictionaryToolsList self = UserDictionaryToolsList.this;
-                if (createWordList(mWordCount,mWordCount+MAX_LIST_WORD_DELAY_COUNT, self)) {
-                    mDelayUpdateHandler.removeCallbacks(updateWordListRunnable);
-                    mDelayUpdateHandler.postDelayed(updateWordListRunnable, 0);
-                } else {
-                    mDelayUpdateHandler.removeCallbacks(updateWordListRunnable);
-                    final TextView leftText = (TextView) findViewById(R.id.user_dictionary_tools_list_title_words_count);
-                    leftText.setText(mWordCount + "/" + MAX_WORD_COUNT);
-                    mHasCreatedList = true;
-                    if (mInitializedMenu) {
-                        onCreateOptionsMenu(mMenu);
-                    }
-                }
-            }
-        };
-        
-    /**
-     * Create the list of words.
-     *
-     * @param  position     Start position to create the list
-     * @param  max          Maximum number of words to display
-     * @param  self         UserDictionaryToolsList
-     * @return          {@code true} if more words undisplayed; {@code false} if no more.
-     */
-    private boolean createWordList(int position ,int max, UserDictionaryToolsList self) {
-        boolean ret = true;
-                
-        if (position >= MAX_WORD_COUNT) {
-            return false;
+            mLeftButton.setEnabled(start != 0);
+            mRightButton.setEnabled(last < size);
         }
-        Window window = getWindow();
-        WindowManager windowManager = window.getWindowManager();
-        Display display = windowManager.getDefaultDisplay();
-        int system_width = display.getWidth();
-        WnnWord wnnWordGet = new WnnWord();
-        mEvent = new OpenWnnEvent(OpenWnnEvent.GET_WORD, wnnWordGet);
+
+        int selectedId = mSelectedViewID - ((MAX_WORD_COUNT < mSelectedViewID) ? MAX_WORD_COUNT : 0);
         
-        int i;
-        for (i = position; i < max; i++) {
-            if (!sendEventToIME(mEvent)) {
-                ret =  false;
-                break;
+        for (int i = 0; i < MAX_LIST_WORD_COUNT; i++) {
+            if ((size - 1) < (start + i)) {
+                if ((0 < i) && (selectedId == (i + 1))) {
+                    mTableLayout.findViewById(i).requestFocus();
+                }
+
+                ((View)(mTableLayout.findViewById(i + 1)).getParent()).setVisibility(View.GONE);
+                continue;
             }
-            wnnWordGet = mEvent.word;
+
+            WnnWord wnnWordGet;
+            wnnWordGet = mSortData[start + i];
             int len_stroke = wnnWordGet.stroke.length();
             int len_candidate = wnnWordGet.candidate.length();
             if (len_stroke == 0 || len_candidate == 0) {
-                ret =  false;
                 break;
             }
 
-            mWordCount++;
-            TableRow row = new TableRow(self);
-            UserDictionaryToolsListFocus stroke = new UserDictionaryToolsListFocus(self);
-            stroke.setId(mWordCount);
-            stroke.setText(wnnWordGet.stroke);
-            stroke.setWidth(system_width/2);
-            stroke.setTextSize(WORD_TEXT_SIZE);
-            stroke.setTextColor(Color.LTGRAY);
-            stroke.setBackgroundColor(UNFOCUS_BACKGROUND_COLOR);
-            stroke.setSingleLine();
-            stroke.setPadding(1,0,1,1);
-            stroke.setEllipsize(TextUtils.TruncateAt.END);
-            stroke.setClickable(true);
-            stroke.setFocusable(true);
-            stroke.setFocusableInTouchMode(true);
-            stroke.setOnTouchListener(self);
-            stroke.setOnFocusChangeListener(self);
+            if (selectedId == i + 1) {
+                mTableLayout.findViewById(i + 1).requestFocus();
+            }
 
-            UserDictionaryToolsListFocus candidate = new UserDictionaryToolsListFocus(self);
-            candidate.setId(mWordCount+MAX_WORD_COUNT);
-            candidate.setText(wnnWordGet.candidate);
-            candidate.setWidth(system_width/2);
-            candidate.setTextSize(WORD_TEXT_SIZE);
-            candidate.setTextColor(Color.LTGRAY);
-            candidate.setBackgroundColor(UNFOCUS_BACKGROUND_COLOR);
-            candidate.setSingleLine();
-            candidate.setPadding(1,0,1,1);
-            candidate.setEllipsize(TextUtils.TruncateAt.END);
-            candidate.setClickable(true);
-            candidate.setFocusable(true);
-            candidate.setFocusableInTouchMode(true);
-            candidate.setOnTouchListener(self);
-            candidate.setOnFocusChangeListener(self);
-
-            stroke.setPairView(candidate);
-            candidate.setPairView(stroke);
-
-            row.addView(stroke);
-            row.addView(candidate);
-            mTableLayout.addView(row, tableCreateParam(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
+            TextView text = (TextView)mTableLayout.findViewById(i + 1);
+            text.setText(wnnWordGet.stroke);
+            text = (TextView)mTableLayout.findViewById(i + 1 + MAX_WORD_COUNT);
+            text.setText(wnnWordGet.candidate);
+            ((View)text.getParent()).setVisibility(View.VISIBLE);
         }
         mTableLayout.requestLayout();
-        return ret;
     }
 }
diff --git a/src/jp/co/omronsoft/openwnn/WnnDictionary.java b/src/jp/co/omronsoft/openwnn/WnnDictionary.java
index c83d140..c4b2aa5 100644
--- a/src/jp/co/omronsoft/openwnn/WnnDictionary.java
+++ b/src/jp/co/omronsoft/openwnn/WnnDictionary.java
@@ -84,7 +84,7 @@
     public static final int POS_TYPE_V3                             = 2;
     /** Type of a part of speech (Top of sentence) */
     public static final int POS_TYPE_BUNTOU                         = 3;
-    /** Type of a part of speech (Single chinese character) */
+    /** Type of a part of speech (Single Chinese character) */
     public static final int POS_TYPE_TANKANJI                       = 4;
     /** Type of a part of speech (Numeric) */
     public static final int POS_TYPE_SUUJI                          = 5;
diff --git a/src/jp/co/omronsoft/openwnn/ZH/CN/KeyboardListPreferenceZHCN.java b/src/jp/co/omronsoft/openwnn/ZH/CN/KeyboardListPreferenceZHCN.java
index 21f569b..e0a7e98 100644
--- a/src/jp/co/omronsoft/openwnn/ZH/CN/KeyboardListPreferenceZHCN.java
+++ b/src/jp/co/omronsoft/openwnn/ZH/CN/KeyboardListPreferenceZHCN.java
@@ -36,7 +36,7 @@
 		this(context, null);
 	}
 
-	/** see android.preference.DialogPreference#onDialogClosed */
+	/** @see android.preference.DialogPreference#onDialogClosed */
 	@Override protected void onDialogClosed(boolean positiveResult) {
 		super.onDialogClosed(positiveResult);
 
diff --git a/src/jp/co/omronsoft/openwnn/ZH/CN/TutorialZHCN.java b/src/jp/co/omronsoft/openwnn/ZH/CN/TutorialZHCN.java
new file mode 100644
index 0000000..7bbc87e
--- /dev/null
+++ b/src/jp/co/omronsoft/openwnn/ZH/CN/TutorialZHCN.java
@@ -0,0 +1,305 @@
+/*
+ * Copyright (C) 2008,2009  OMRON SOFTWARE Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * Copyright (C) 2008-2009 Google Inc.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package jp.co.omronsoft.openwnn.ZH.CN;
+
+import jp.co.omronsoft.openwnn.*;
+import jp.co.omronsoft.openwnn.ZH.*;
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.drawable.Drawable;
+import android.os.Handler;
+import android.os.Message;
+import android.text.Layout;
+import android.text.SpannableStringBuilder;
+import android.text.StaticLayout;
+import android.text.Spanned;
+import android.text.style.ImageSpan;
+import android.text.style.DynamicDrawableSpan;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.View.OnTouchListener;
+import android.widget.PopupWindow;
+import android.widget.TextView;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class TutorialZHCN implements OnTouchListener {
+    
+    private List<Bubble> mBubbles = new ArrayList<Bubble>();
+    private View mInputView;
+    private OpenWnnZHCN mIme;
+    private int[] mLocation = new int[2];
+    private static final int MSG_SHOW_BUBBLE = 0;
+    
+    private int mBubbleIndex;
+    private boolean mEnableKeyTouch = false;
+    
+    Handler mHandler = new Handler() {
+        @Override
+        public void handleMessage(Message msg) {
+            switch (msg.what) {
+                case MSG_SHOW_BUBBLE:
+                    Bubble bubba = (Bubble) msg.obj;
+                    bubba.show(mLocation[0], mLocation[1]);
+                    break;
+            }
+        }
+    };
+
+    class Bubble {
+        Drawable bubbleBackground;
+        int x;
+        int y;
+        int width;
+        int gravity;
+        CharSequence text;
+        boolean dismissOnTouch;
+        boolean dismissOnClose;
+        PopupWindow window;
+        TextView textView;
+        View inputView;
+
+        Bubble(Context context, View inputView,
+                int backgroundResource, int bx, int by, int description, int guide) {
+
+            CharSequence text = context.getResources().getText(description);
+            init(context, inputView, backgroundResource, bx, by, text, guide, false);
+        }
+
+        Bubble(Context context, View inputView, int backgroundResource, int bx, int by,
+               CharSequence description, int guide, boolean leftAlign) {
+            init(context, inputView, backgroundResource, bx, by, description, guide, leftAlign);
+        }
+        
+        void init(Context context, View inputView, int backgroundResource,
+                  int bx, int by, CharSequence description, int guide, boolean leftAlign) {
+            bubbleBackground = context.getResources().getDrawable(backgroundResource);
+            x = bx;
+            y = by;
+            width = (int) (inputView.getWidth() * 0.9);
+            this.gravity = Gravity.TOP | Gravity.LEFT;
+            text = new SpannableStringBuilder()
+                .append(description)
+                .append("\n") 
+                .append(context.getResources().getText(guide));
+            this.dismissOnTouch = true;
+            this.dismissOnClose = false;
+            this.inputView = inputView;
+            window = new PopupWindow(context);
+            window.setBackgroundDrawable(null);
+            LayoutInflater inflate =
+                (LayoutInflater) context
+                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+            textView = (TextView) inflate.inflate(R.layout.bubble_text, null);
+            textView.setBackgroundDrawable(bubbleBackground);
+            textView.setText(text);
+            if (leftAlign) {
+                textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
+            }
+            window.setContentView(textView);
+            window.setFocusable(false);
+            window.setTouchable(true);
+            window.setOutsideTouchable(false);
+        }
+
+        private int chooseSize(PopupWindow pop, View parentView, CharSequence text, TextView tv) {
+            int wid = tv.getPaddingLeft() + tv.getPaddingRight();
+            int ht = tv.getPaddingTop() + tv.getPaddingBottom();
+
+            /*
+             * Figure out how big the text would be if we laid it out to the
+             * full width of this view minus the border.
+             */
+            int cap = width - wid;
+
+            Layout l = new StaticLayout(text, tv.getPaint(), cap,
+                                        Layout.Alignment.ALIGN_NORMAL, 1, 0, true);
+            float max = 0;
+            for (int i = 0; i < l.getLineCount(); i++) {
+                max = Math.max(max, l.getLineWidth(i));
+            }
+
+            /*
+             * Now set the popup size to be big enough for the text plus the border.
+             */
+            pop.setWidth(width);
+            pop.setHeight(ht + l.getHeight());
+            return l.getHeight();
+        }
+
+        void show(int offx, int offy) {
+            int textHeight = chooseSize(window, inputView, text, textView);
+            offy -= textView.getPaddingTop() + textHeight;
+            if (inputView.getVisibility() == View.VISIBLE 
+                    && inputView.getWindowVisibility() == View.VISIBLE) {
+                try {
+                    if ((gravity & Gravity.BOTTOM) == Gravity.BOTTOM) offy -= window.getHeight();
+                    if ((gravity & Gravity.RIGHT) == Gravity.RIGHT) offx -= window.getWidth();
+                    textView.setOnTouchListener(new View.OnTouchListener() {
+                        public boolean onTouch(View view, MotionEvent me) {
+                            boolean ret = !mEnableKeyTouch;
+                            switch (me.getAction()) {
+                            case MotionEvent.ACTION_UP:
+                                if (mBubbleIndex >= mBubbles.size()) {
+                                    mInputView.setOnTouchListener(null);
+                                } else {
+                                    TutorialZHCN.this.next();
+                                }
+                                break;
+                            default:
+                                break;
+                            }
+                            return ret;
+                        }
+                    });
+                    window.showAtLocation(inputView, Gravity.NO_GRAVITY, x + offx, y + offy);
+                } catch (Exception e) {
+                }
+            }
+        }
+        
+        void hide() {
+            if (window.isShowing()) {
+                textView.setOnTouchListener(null);
+                window.dismiss();
+            }
+        }
+        
+        boolean isShowing() {
+            return window.isShowing();
+        }
+    }
+
+    /** Constructor */
+    public TutorialZHCN(OpenWnnZHCN ime, View inputView, DefaultSoftKeyboardZH inputManager) {
+        mInputView = inputView;
+        mIme = ime;
+
+        Context context = inputView.getContext();
+        int inputWidth = inputView.getWidth();
+        Resources r = inputView.getContext().getResources();
+        final int x = inputWidth / 20;
+        r.getDimensionPixelOffset(R.dimen.bubble_pointer_offset);
+
+        SpannableStringBuilder spannable = new SpannableStringBuilder();
+        Bubble button;
+
+        spannable.clear();
+        spannable.append(r.getText(R.string.tip_en_to_open_keyboard));
+        button = new Bubble(context, inputView, 
+                R.drawable.dialog_bubble, x, 0, 
+                spannable, R.string.touch_to_continue, false);
+        mBubbles.add(button);
+
+        spannable.clear();
+        spannable.append(r.getText(R.string.tip_en_to_close_keyboard));
+ 
+        setSpan(spannable, "\u2190", R.drawable.tutorial_back);
+ 
+        button = new Bubble(context, inputView, 
+                R.drawable.dialog_bubble, x, 0, 
+                spannable, R.string.touch_to_continue, false);
+        mBubbles.add(button);
+
+        button = new Bubble(context, inputView, 
+                R.drawable.dialog_bubble, x, 0, 
+                R.string.tip_en_end_of_tutorial, R.string.touch_to_finish);
+        mBubbles.add(button);
+    }
+
+    private void setSpan(SpannableStringBuilder spannable, String marker, int imageResourceId) {
+        String text = spannable.toString();
+        int target = text.indexOf(marker);
+        while (0 <= target) {
+            ImageSpan span = new ImageSpan(mIme, imageResourceId,
+                    DynamicDrawableSpan.ALIGN_BOTTOM);
+            spannable.setSpan(span, target, target + 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
+            target = text.indexOf(marker, target + 1);
+        }
+    }
+    
+    public void start() {
+        mInputView.getLocationInWindow(mLocation);
+        mBubbleIndex = -1;
+        mInputView.setOnTouchListener(this);
+        next();
+    }
+
+    boolean next() {
+        if (mBubbleIndex >= 0) {
+            if (!mBubbles.get(mBubbleIndex).isShowing()) {
+                return true;
+            }
+            for (int i = 0; i <= mBubbleIndex; i++) {
+                mBubbles.get(i).hide();
+            }
+        }
+        mBubbleIndex++;
+        if (mBubbleIndex >= mBubbles.size()) {
+            mEnableKeyTouch = true;
+            mIme.sendDownUpKeyEvents(-1);
+            mIme.tutorialDone();
+            return false;
+        }
+
+        mHandler.sendMessageDelayed(
+                mHandler.obtainMessage(MSG_SHOW_BUBBLE, mBubbles.get(mBubbleIndex)), 500);
+        return true;
+    }
+    
+    void hide() {
+        for (int i = 0; i < mBubbles.size(); i++) {
+            mBubbles.get(i).hide();
+        }
+        mInputView.setOnTouchListener(null);
+    }
+
+    public boolean close() {
+        mHandler.removeMessages(MSG_SHOW_BUBBLE);
+        hide();
+        return true;
+    }
+
+    public boolean onTouch(View v, MotionEvent event) {
+        boolean ret = !mEnableKeyTouch;
+        if (event.getAction() == MotionEvent.ACTION_UP) {
+            if (mBubbleIndex >= mBubbles.size()) {
+                mInputView.setOnTouchListener(null);
+            }
+        }
+        return ret;
+    }
+}
diff --git a/src/jp/co/omronsoft/openwnn/ZH/CN/UserDictionaryToolsListZHCN.java b/src/jp/co/omronsoft/openwnn/ZH/CN/UserDictionaryToolsListZHCN.java
index 7691560..586aba0 100644
--- a/src/jp/co/omronsoft/openwnn/ZH/CN/UserDictionaryToolsListZHCN.java
+++ b/src/jp/co/omronsoft/openwnn/ZH/CN/UserDictionaryToolsListZHCN.java
@@ -19,6 +19,7 @@
 import jp.co.omronsoft.openwnn.*;
 import android.view.View;
 import android.view.Window;
+import java.util.Comparator;
 
 /**
  * The user dictionary tool class for Chinese IME.
@@ -34,6 +35,7 @@
         mEditViewName = "jp.co.omronsoft.openwnn.ZH.CN.UserDictionaryToolsEditZHCN";
         mPackageName  = "jp.co.omronsoft.openwnn";
     }
+
     /** @see jp.co.omronsoft.openwnn.UserDictionaryToolsList#headerCreate */
     @Override protected void headerCreate() {
       getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,
@@ -55,4 +57,15 @@
         return false;
     }
 
+    /** @see jp.co.omronsoft.openwnn.UserDictionaryToolsList#getComparator */
+    @Override protected Comparator<WnnWord> getComparator() {
+        return new ListComparatorZHCN();
+    }
+
+    /** Comparator class for sorting the list of Chinese user dictionary */
+    protected class ListComparatorZHCN implements Comparator<WnnWord>{
+        public int compare(WnnWord word1, WnnWord word2) {
+            return word1.stroke.compareTo(word2.stroke);
+        };
+    }
 }
diff --git a/src/jp/co/omronsoft/openwnn/ZH/DefaultSoftKeyboardZH.java b/src/jp/co/omronsoft/openwnn/ZH/DefaultSoftKeyboardZH.java
index 139c4a8..29ce85a 100644
--- a/src/jp/co/omronsoft/openwnn/ZH/DefaultSoftKeyboardZH.java
+++ b/src/jp/co/omronsoft/openwnn/ZH/DefaultSoftKeyboardZH.java
@@ -19,6 +19,7 @@
 import jp.co.omronsoft.openwnn.*;
 import android.view.KeyEvent;
 import android.view.inputmethod.EditorInfo;
+import android.view.inputmethod.InputConnection;
 import android.inputmethodservice.Keyboard;
 import android.util.Log;
 import android.view.View;
@@ -38,16 +39,11 @@
         KEYMODE_CN_PINYIN, KEYMODE_CN_ALPHABET, KEYMODE_CN_HALF_NUMBER
     };
 
-    /** Definition for {@code mInputType} (toggle) */
-    private static final int INPUT_TYPE_TOGGLE = 1;
-    /** Definition for {@code mInputType} (commit instantly) */
-    private static final int INPUT_TYPE_INSTANT = 2;
-
     /** The constant for mFixedKeyMode. It means that input mode is not fixed. */
-    private static final int INVALID_KEYMODE = -1;    
+    private static final int INVALID_KEYMODE = -1;
 
     /** Input mode that is not able to be changed. If ENABLE_CHANGE_KEYMODE is set, input mode can change. */
-    private int mFixedKeyMode = INVALID_KEYMODE;
+    private int[] mLimitedKeyMode = null;
 
     /** Input mode that is given the first priority. If ENABLE_CHANGE_KEYMODE is set, input mode can change. */
     private int mPreferenceKeyMode = INVALID_KEYMODE;
@@ -62,32 +58,34 @@
     /** Auto caps mode */
     private boolean mEnableAutoCaps = true;
 
-    /**
-     * Default constructor
-     */
+    /** Whether the InputType is null */
+    private boolean mIsInputTypeNull = false;
+    
+
+    /** Default constructor */
     public DefaultSoftKeyboardZH() {
         mCurrentLanguage     = LANG_CN;
         mCurrentKeyboardType = KEYBOARD_QWERTY;
         mShiftOn             = KEYBOARD_SHIFT_OFF;
         mCurrentKeyMode      = KEYMODE_CN_PINYIN;
     }
-	
+    
 
     /** @see jp.co.omronsoft.openwnn.DefaultSoftKeyboard#createKeyboards */
     @Override protected void createKeyboards(OpenWnn parent) {
         mKeyboard = new Keyboard[3][2][4][2][7][2];
 
         if (mHardKeyboardHidden) {
-        	/* Create the suitable keyboard object */
-        	if (mDisplayMode == DefaultSoftKeyboard.PORTRAIT) {
-        		createKeyboardsPortrait(parent);
-        	} else {
-        	
-        	}
+            /* Create the suitable keyboard object */
+            if (mDisplayMode == DefaultSoftKeyboard.PORTRAIT) {
+                createKeyboardsPortrait(parent);
+            } else {
+            }
         }
         mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.CHANGE_MODE,
-        		OpenWnnJAJP.ENGINE_MODE_OPT_TYPE_QWERTY));
+                OpenWnnZHCN.ENGINE_MODE_OPT_TYPE_QWERTY));
     }
+
     /**
      * Commit the pre-edit string for committing operation that is not explicit
      * (ex. when a candidate is selected)
@@ -104,28 +102,21 @@
      * @param keyMode   The type of input mode
      */
     public void changeKeyMode(int keyMode) {
-    	int targetMode = keyMode;
-    	commitText();
+        int targetMode = filterKeyMode(keyMode);
+        if (targetMode == INVALID_KEYMODE) {
+            return;
+        }
+        
+        commitText();
 
-    	if (mCapsLock) {
-    		mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.INPUT_SOFT_KEY,
+        if (mCapsLock) {
+            mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.INPUT_SOFT_KEY,
                                           new KeyEvent(KeyEvent.ACTION_UP,
                                                        KeyEvent.KEYCODE_SHIFT_LEFT)));
-    		mCapsLock = false;
-    	}
-    	mShiftOn = KEYBOARD_SHIFT_OFF;
-
-    	if (mFixedKeyMode != INVALID_KEYMODE) {
-    		targetMode = mFixedKeyMode;
-    	}
-
-        if (!mHardKeyboardHidden) {
-        	if (targetMode == KEYMODE_CN_HALF_NUMBER) {
-        		targetMode = KEYMODE_CN_ALPHABET;
-        	} else if (targetMode == KEYMODE_CN_FULL_NUMBER) {
-        		targetMode = KEYMODE_CN_PINYIN;
-        	}
+            mCapsLock = false;
         }
+        mShiftOn = KEYBOARD_SHIFT_OFF;
+
         Keyboard kbd = getModeChangeKeyboard(targetMode);
         mCurrentKeyMode = targetMode;
         
@@ -163,9 +154,9 @@
 
     /** @see jp.co.omronsoft.openwnn.DefaultSoftKeyboard#initView */
     @Override public View initView(OpenWnn parent, int width, int height) {
-    	View view = super.initView(parent, width, height);
-    	changeKeyboard(mKeyboard[mCurrentLanguage][mDisplayMode][mCurrentKeyboardType][mShiftOn][mCurrentKeyMode][0]);
-    	return view;
+        View view = super.initView(parent, width, height);
+        changeKeyboard(mKeyboard[mCurrentLanguage][mDisplayMode][mCurrentKeyboardType][mShiftOn][mCurrentKeyMode][0]);
+        return view;
     }
 
     /** @see jp.co.omronsoft.openwnn.DefaultSoftKeyboard#changeKeyboardType */
@@ -183,7 +174,9 @@
 
         switch (primaryCode) {
         case KEYCODE_QWERTY_TOGGLE_MODE:
-            nextKeyMode();
+            if (!mIsInputTypeNull) {
+                nextKeyMode();
+            }
             break;
 
         case KEYCODE_QWERTY_BACKSPACE:
@@ -207,8 +200,8 @@
             break;
 
         case KEYCODE_QWERTY_EMOJI:
-        	commitText();
-        	mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.CHANGE_MODE, OpenWnnZHCN.ENGINE_MODE_SYMBOL));
+            commitText();
+            mWnn.onEvent(new OpenWnnEvent(OpenWnnEvent.CHANGE_MODE, OpenWnnZHCN.ENGINE_MODE_SYMBOL));
             break;
 
         case KEYCODE_QWERTY_HAN_ALPHA:
@@ -256,6 +249,7 @@
             break;
         }
 
+        /* update shift key's state */
         if (!mCapsLock && (primaryCode != DefaultSoftKeyboard.KEYCODE_QWERTY_SHIFT)) {
             setShiftByEditorInfo();
         }
@@ -266,15 +260,25 @@
         super.setPreferences(pref, editor);
 
         int inputType = editor.inputType;
-        if (inputType == EditorInfo.TYPE_NULL) {
-            return;
+        if (mHardKeyboardHidden) {
+            if (inputType == EditorInfo.TYPE_NULL) {
+                if (!mIsInputTypeNull) {
+                    mIsInputTypeNull = true;
+                }
+                return;
+            }
+            
+            if (mIsInputTypeNull) {
+                mIsInputTypeNull = false;
+            }
         }
 
         mEnableAutoCaps = pref.getBoolean("auto_caps", true);
-        mFixedKeyMode = INVALID_KEYMODE;
+        mLimitedKeyMode = null;
         mPreferenceKeyMode = INVALID_KEYMODE;
         mNoInput = true;
         mDisableKeyInput = false;
+        mCapsLock = false;
 
         switch (inputType & EditorInfo.TYPE_MASK_CLASS) {
 
@@ -284,17 +288,23 @@
             break;
 
         case EditorInfo.TYPE_CLASS_PHONE:
-            mFixedKeyMode = KEYMODE_CN_PHONE;
+            if (mHardKeyboardHidden) {
+                mLimitedKeyMode = new int[] {KEYMODE_CN_PHONE};
+            } else {
+                mLimitedKeyMode = new int[] {KEYMODE_CN_ALPHABET};
+            }
             break;
 
         case EditorInfo.TYPE_CLASS_TEXT:
             switch (inputType & EditorInfo.TYPE_MASK_VARIATION) {
 
             case EditorInfo.TYPE_TEXT_VARIATION_PASSWORD:
-                mPreferenceKeyMode = KEYMODE_CN_ALPHABET;
+                mLimitedKeyMode = new int[] {KEYMODE_CN_ALPHABET, KEYMODE_CN_HALF_NUMBER};
                 break;
 
             case EditorInfo.TYPE_TEXT_VARIATION_EMAIL_ADDRESS:
+                mLimitedKeyMode = new int[] {KEYMODE_CN_ALPHABET, KEYMODE_CN_HALF_NUMBER};
+                break;
             case EditorInfo.TYPE_TEXT_VARIATION_URI:
                 mPreferenceKeyMode = KEYMODE_CN_ALPHABET;
                 break;
@@ -313,6 +323,7 @@
             mLastInputType = inputType;
         }
 
+        setStatusIcon();
         setShiftByEditorInfo();
     }
 
@@ -331,6 +342,8 @@
         int keymode = KEYMODE_CN_PINYIN;
         if (mPreferenceKeyMode != INVALID_KEYMODE) {
             keymode = mPreferenceKeyMode;
+        } else if (mLimitedKeyMode != null) {
+            keymode = mLimitedKeyMode[0];
         }
         changeKeyMode(keymode);
     } 
@@ -338,7 +351,8 @@
     /**
      * Change to the next input mode
      */
-    private void nextKeyMode() {
+    public void nextKeyMode() {
+        /* Search the current mode in the toggle table */
         boolean found = false;
         int index;
         for (index = 0; index < CN_MODE_CYCLE_TABLE.length; index++) {
@@ -349,14 +363,24 @@
         }
 
         if (!found) {
+            /* If the current mode not exists, set the default mode */
             setDefaultKeyboard();
         } else {
-            index++;
-            if (CN_MODE_CYCLE_TABLE.length <= index) {
-                index = 0;
+            /* If the current mode exists, set the next input mode */
+            int size = CN_MODE_CYCLE_TABLE.length;
+            int keyMode = INVALID_KEYMODE;
+            for (int i = 0; i < size; i++) {
+                index = (++index) % size;
+
+                keyMode = filterKeyMode(CN_MODE_CYCLE_TABLE[index]);
+                if (keyMode != INVALID_KEYMODE) {
+                    break;
+                }
             }
 
-            changeKeyMode(CN_MODE_CYCLE_TABLE[index]);
+            if (keyMode != INVALID_KEYMODE) {
+                changeKeyMode(keyMode);
+            }
         }
     }
 
@@ -381,7 +405,7 @@
         /* qwerty shift_on */
         keyList = mKeyboard[LANG_CN][PORTRAIT][KEYBOARD_QWERTY][KEYBOARD_SHIFT_ON];
         keyList[KEYMODE_CN_ALPHABET][0] = 
-        	mKeyboard[LANG_CN][PORTRAIT][KEYBOARD_QWERTY][KEYBOARD_SHIFT_OFF][KEYMODE_CN_ALPHABET][0];
+            mKeyboard[LANG_CN][PORTRAIT][KEYBOARD_QWERTY][KEYBOARD_SHIFT_OFF][KEYMODE_CN_ALPHABET][0];
         keyList[KEYMODE_CN_HALF_NUMBER][0] = new Keyboard(parent, R.xml.default_cn_half_symbols_shift);
         keyList[KEYMODE_CN_PHONE][0] = new Keyboard(parent, R.xml.keyboard_12key_phone);
         keyList[KEYMODE_CN_PINYIN][0] = new Keyboard(parent, R.xml.default_cn_qwerty_pinyin_shift);
@@ -410,7 +434,7 @@
             icon = R.drawable.immodeic_half_number;
             break;
         default:
-        	break;
+            break;
         }
 
         mWnn.showStatusIcon(icon);
@@ -419,12 +443,17 @@
     /**
      * Get the shift key state from the editor.
      * <br>
-     * @param editor	The editor information
-     * @return			The state id of the shift key (0:off, 1:on)
+     * @param editor    The editor information
+     * @return          The state id of the shift key (0:off, 1:on)
      */
     protected int getShiftKeyState(EditorInfo editor) {
-        int caps = mWnn.getCurrentInputConnection().getCursorCapsMode(editor.inputType);
-        return (caps == 0) ? 0 : 1;
+        InputConnection connection = mWnn.getCurrentInputConnection();
+        if (connection != null) {
+            int caps = connection.getCursorCapsMode(editor.inputType);
+            return (caps == 0) ? 0 : 1;
+        } else {
+            return 0;
+        }
     }
 
     /**
@@ -439,5 +468,51 @@
         }
     }
 
+    /**
+     * Change the key-mode to the allowed one which is restricted
+     *  by the text input field or the type of the keyboard.
+     * @param keyMode The key-mode
+     * @return the key-mode allowed
+     */
+    private int filterKeyMode(int keyMode) {
+        int targetMode = keyMode;
+        int[] limits = mLimitedKeyMode;
+
+        if (!mHardKeyboardHidden) { /* for hardware keyboard */
+            if (targetMode == KEYMODE_CN_HALF_NUMBER) {
+                targetMode = KEYMODE_CN_ALPHABET;
+            } else if (targetMode == KEYMODE_CN_FULL_NUMBER) {
+                targetMode = KEYMODE_CN_PINYIN;
+            }
+        } 
+
+        /* restrict by the type of the text field */
+        if (limits != null) {
+            boolean hasAccepted = false;
+            boolean hasRequiredChange = true;
+            int size = limits.length;
+            int nowMode = mCurrentKeyMode;
+
+            for (int i = 0; i < size; i++) {
+                if (targetMode == limits[i]) {
+                    hasAccepted = true;
+                    break;
+                }
+                if (nowMode == limits[i]) {
+                    hasRequiredChange = false;
+                }
+            }
+
+            if (!hasAccepted) {
+                if (hasRequiredChange) {
+                    targetMode = mLimitedKeyMode[0];
+                } else {
+                    targetMode = INVALID_KEYMODE;
+                }
+            }
+        }
+
+        return targetMode;
+    }
 }
 
diff --git a/src/jp/co/omronsoft/openwnn/ZH/OpenWnnEngineZH.java b/src/jp/co/omronsoft/openwnn/ZH/OpenWnnEngineZH.java
index 2be414c..538b8c0 100644
--- a/src/jp/co/omronsoft/openwnn/ZH/OpenWnnEngineZH.java
+++ b/src/jp/co/omronsoft/openwnn/ZH/OpenWnnEngineZH.java
@@ -111,6 +111,7 @@
     /** Length of the search key */
     private int mSearchLength;
     
+    /* Cache for results of search */
     private HashMap<String,ArrayList<WnnWord>> mSearchCache;
     private ArrayList<WnnWord> mSearchCacheArray;
     private ArrayList<WnnWord> mNoWord;
