diff --git a/java/res/values/strings.xml b/java/res/values/strings.xml
index 25d9827..07b3f31 100644
--- a/java/res/values/strings.xml
+++ b/java/res/values/strings.xml
@@ -111,10 +111,16 @@
     <!-- Description for "next word suggestion" option. This displays suggestions even when there is no input, based on the previous word. -->
     <string name="bigram_prediction_summary">Based on previous word</string>
 
-    <!-- Option to enable gesture input. The user can input a word by tracing the letters of a word without releasing the finger from the screen. [CHAR LIMIT=20]-->
+    <!-- Option to enable gesture input. The user can input a word by tracing the letters of a word without releasing the finger from the screen. [CHAR LIMIT=30]-->
     <string name="gesture_input">Gesture input</string>
     <!-- Description for "gesture_input" option. The user can input a word by tracing the letters of a word without releasing the finger from the screen. [CHAR LIMIT=65]-->
     <string name="gesture_input_summary">Input a word by tracing the letters of a word</string>
+    <!-- Option to enable gesture trail preview. The user can see a trail of the gesture during gesture input. [CHAR LIMIT=30]-->
+    <string name="gesture_preview_trail">Show gesture trail</string>
+    <!-- Option to enable gesture floating text preview. The user can see a suggested word floating under the moving finger during a gesture input. [CHAR LIMIT=30]-->
+    <string name="gesture_floating_preview_text">Show gesture word</string>
+    <!-- Description for "gesture_floating_preview_text" option. The user can see a suggested word floating under the moving finger during a gesture input. [CHAR LIMIT=65]-->
+    <string name="gesture_floating_preview_text_summary">Show floating preview word with gesture</string>
 
     <!-- Indicates that a word has been added to the dictionary -->
     <string name="added_word"><xliff:g id="word">%s</xliff:g> : Saved</string>
diff --git a/java/res/xml/prefs.xml b/java/res/xml/prefs.xml
index 4f11cb7..ef6be3e 100644
--- a/java/res/xml/prefs.xml
+++ b/java/res/xml/prefs.xml
@@ -102,6 +102,12 @@
             android:title="@string/advanced_settings"
             android:summary="@string/advanced_settings_summary">
             <CheckBoxPreference
+                android:key="pref_key_use_contacts_dict"
+                android:title="@string/use_contacts_dict"
+                android:summary="@string/use_contacts_dict_summary"
+                android:persistent="true"
+                android:defaultValue="true" />
+            <CheckBoxPreference
                 android:key="pref_suppress_language_switch_key"
                 android:title="@string/suppress_language_switch_key"
                 android:persistent="true"
@@ -120,18 +126,23 @@
             <ListPreference
                 android:key="pref_key_preview_popup_dismiss_delay"
                 android:title="@string/key_preview_popup_dismiss_delay" />
-            <CheckBoxPreference
-                android:key="pref_key_use_contacts_dict"
-                android:title="@string/use_contacts_dict"
-                android:summary="@string/use_contacts_dict_summary"
-                android:persistent="true"
-                android:defaultValue="true" />
             <PreferenceScreen
                 android:key="pref_vibration_duration_settings"
                 android:title="@string/prefs_keypress_vibration_duration_settings"/>
             <PreferenceScreen
                 android:key="pref_keypress_sound_volume"
                 android:title="@string/prefs_keypress_sound_volume_settings" />
+            <CheckBoxPreference
+                android:key="pref_gesture_preview_trail"
+                android:title="@string/gesture_preview_trail"
+                android:persistent="true"
+                android:defaultValue="true" />
+            <CheckBoxPreference
+                android:key="pref_gesture_floating_preview_text"
+                android:title="@string/gesture_floating_preview_text"
+                android:summary="@string/gesture_floating_preview_text_summary"
+                android:persistent="true"
+                android:defaultValue="true" />
         </PreferenceScreen>
     </PreferenceCategory>
 </PreferenceScreen>
diff --git a/java/src/com/android/inputmethod/keyboard/Key.java b/java/src/com/android/inputmethod/keyboard/Key.java
index e1e1ca9..178c9ff 100644
--- a/java/src/com/android/inputmethod/keyboard/Key.java
+++ b/java/src/com/android/inputmethod/keyboard/Key.java
@@ -414,8 +414,14 @@
 
     @Override
     public String toString() {
-        return String.format("%s/%s %d,%d %dx%d %s/%s/%s",
-                Keyboard.printableCode(mCode), mLabel, mX, mY, mWidth, mHeight, mHintLabel,
+        final String label;
+        if (StringUtils.codePointCount(mLabel) == 1 && mLabel.codePointAt(0) == mCode) {
+            label = "";
+        } else {
+            label = "/" + mLabel;
+        }
+        return String.format("%s%s %d,%d %dx%d %s/%s/%s",
+                Keyboard.printableCode(mCode), label, mX, mY, mWidth, mHeight, mHintLabel,
                 KeyboardIconsSet.getIconName(mIconId), backgroundName(mBackgroundType));
     }
 
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardView.java b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
index 9c6543b..e70c7a1 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
@@ -432,8 +432,11 @@
         return mShowKeyPreviewPopup;
     }
 
-    public void setGestureHandlingMode(boolean shouldHandleGesture) {
+    public void setGestureHandlingMode(boolean shouldHandleGesture,
+            boolean drawsGesturePreviewTrail, boolean drawsGestureFloatingPreviewText) {
         mShouldHandleGesture = shouldHandleGesture;
+        mPreviewPlacerView.setGesturePreviewMode(
+                drawsGesturePreviewTrail, drawsGestureFloatingPreviewText);
     }
 
     @Override
@@ -896,15 +899,12 @@
     }
 
     public void showGesturePreviewText(String gesturePreviewText) {
-        // TDOD: Add user settings option to control drawing gesture trail.
         locatePreviewPlacerView();
         mPreviewPlacerView.setGesturePreviewText(gesturePreviewText);
-        mPreviewPlacerView.invalidate();
     }
 
     @Override
     public void showGestureTrail(PointerTracker tracker) {
-        // TDOD: Add user settings option to control drawing gesture trail.
         locatePreviewPlacerView();
         mPreviewPlacerView.invalidatePointer(tracker);
     }
diff --git a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
index 9c28419..7ad5521 100644
--- a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
@@ -481,8 +481,10 @@
     }
 
     @Override
-    public void setGestureHandlingMode(final boolean shouldHandleGesture) {
-        super.setGestureHandlingMode(shouldHandleGesture);
+    public void setGestureHandlingMode(final boolean shouldHandleGesture,
+            boolean drawsGesturePreviewTrail, boolean drawsGestureFloatingPreviewText) {
+        super.setGestureHandlingMode(shouldHandleGesture, drawsGesturePreviewTrail,
+                drawsGestureFloatingPreviewText);
         PointerTracker.setKeyDetector(mKeyDetector, shouldHandleGesture);
     }
 
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeySpecParser.java b/java/src/com/android/inputmethod/keyboard/internal/KeySpecParser.java
index 099e561..94a7b82 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeySpecParser.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeySpecParser.java
@@ -90,8 +90,12 @@
             final String label = (mIconId == KeyboardIconsSet.ICON_UNDEFINED ? mLabel
                     : PREFIX_ICON + KeyboardIconsSet.getIconName(mIconId));
             final String output = (mCode == Keyboard.CODE_OUTPUT_TEXT ? mOutputText
-                    : String.format("0x%04x", mCode));
-            return label + "/" + output;
+                    : Keyboard.printableCode(mCode));
+            if (StringUtils.codePointCount(label) == 1 && label.codePointAt(0) == mCode) {
+                return output;
+            } else {
+                return label + "|" + output;
+            }
         }
     }
 
diff --git a/java/src/com/android/inputmethod/keyboard/internal/PreviewPlacerView.java b/java/src/com/android/inputmethod/keyboard/internal/PreviewPlacerView.java
index 2a53c59..a400fda 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/PreviewPlacerView.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/PreviewPlacerView.java
@@ -51,6 +51,8 @@
     private final SparseArray<PointerTracker> mPointers = new SparseArray<PointerTracker>();
 
     private String mGesturePreviewText;
+    private boolean mDrawsGesturePreviewTrail;
+    private boolean mDrawsGestureFloatingPreviewText;
 
     public PreviewPlacerView(Context context) {
         super(context);
@@ -89,6 +91,12 @@
         mYOrigin = y;
     }
 
+    public void setGesturePreviewMode(boolean drawsGesturePreviewTrail,
+            boolean drawsGestureFloatingPreviewText) {
+        mDrawsGesturePreviewTrail = drawsGesturePreviewTrail;
+        mDrawsGestureFloatingPreviewText = drawsGestureFloatingPreviewText;
+    }
+
     public void invalidatePointer(PointerTracker tracker) {
         synchronized (mPointers) {
             mPointers.put(tracker.mPointerId, tracker);
@@ -100,18 +108,19 @@
     @Override
     public void onDraw(Canvas canvas) {
         super.onDraw(canvas);
-        // TDOD: Add user settings option to control drawing gesture trail and gesture preview.
         synchronized (mPointers) {
             canvas.translate(mXOrigin, mYOrigin);
             final int trackerCount = mPointers.size();
-            boolean floatingPreviewHasDrawn = false;
+            boolean hasDrawnFloatingPreviewText = false;
             for (int index = 0; index < trackerCount; index++) {
                 final PointerTracker tracker = mPointers.valueAt(index);
-                tracker.drawGestureTrail(canvas, mGesturePaint);
+                if (mDrawsGesturePreviewTrail) {
+                    tracker.drawGestureTrail(canvas, mGesturePaint);
+                }
                 // TODO: Figure out more cleaner way to draw gesture preview text.
-                if (!floatingPreviewHasDrawn) {
+                if (mDrawsGestureFloatingPreviewText && !hasDrawnFloatingPreviewText) {
                     drawGesturePreviewText(canvas, tracker, mGesturePreviewText);
-                    floatingPreviewHasDrawn = true;
+                    hasDrawnFloatingPreviewText = true;
                 }
             }
             canvas.translate(-mXOrigin, -mYOrigin);
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 1aac734..22213be 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -2095,7 +2095,9 @@
         if (keyboardView != null) {
             final boolean shouldHandleGesture = mCurrentSettings.mGestureInputEnabled
                     && mIsMainDictionaryAvailable;
-            keyboardView.setGestureHandlingMode(shouldHandleGesture);
+            keyboardView.setGestureHandlingMode(shouldHandleGesture,
+                    mCurrentSettings.mGesturePreviewTrailEnabled,
+                    mCurrentSettings.mGestureFloatingPreviewTextEnabled);
         }
     }
 
diff --git a/java/src/com/android/inputmethod/latin/Settings.java b/java/src/com/android/inputmethod/latin/Settings.java
index 45608f4..6251c9a 100644
--- a/java/src/com/android/inputmethod/latin/Settings.java
+++ b/java/src/com/android/inputmethod/latin/Settings.java
@@ -62,6 +62,7 @@
     public static final String PREF_LAST_USER_DICTIONARY_WRITE_TIME =
             "last_user_dictionary_write_time";
     public static final String PREF_ADVANCED_SETTINGS = "pref_advanced_settings";
+    public static final String PREF_KEY_USE_CONTACTS_DICT = "pref_key_use_contacts_dict";
     public static final String PREF_SUPPRESS_LANGUAGE_SWITCH_KEY =
             "pref_suppress_language_switch_key";
     public static final String PREF_INCLUDE_OTHER_IMES_IN_LANGUAGE_SWITCH_LIST =
@@ -69,13 +70,15 @@
     public static final String PREF_CUSTOM_INPUT_STYLES = "custom_input_styles";
     public static final String PREF_KEY_PREVIEW_POPUP_DISMISS_DELAY =
             "pref_key_preview_popup_dismiss_delay";
-    public static final String PREF_KEY_USE_CONTACTS_DICT = "pref_key_use_contacts_dict";
     public static final String PREF_BIGRAM_PREDICTIONS = "next_word_prediction";
     public static final String PREF_GESTURE_INPUT = "gesture_input";
     public static final String PREF_VIBRATION_DURATION_SETTINGS =
             "pref_vibration_duration_settings";
     public static final String PREF_KEYPRESS_SOUND_VOLUME =
             "pref_keypress_sound_volume";
+    public static final String PREF_GESTURE_PREVIEW_TRAIL = "pref_gesture_preview_trail";
+    public static final String PREF_GESTURE_FLOATING_PREVIEW_TEXT =
+            "pref_gesture_floating_preview_text";
 
     public static final String PREF_INPUT_LANGUAGE = "input_language";
     public static final String PREF_SELECTED_LANGUAGES = "selected_languages";
@@ -94,13 +97,17 @@
     private TextView mKeypressVibrationDurationSettingsTextView;
     private TextView mKeypressSoundVolumeSettingsTextView;
 
+    private static void setPreferenceEnabled(Preference preference, boolean enabled) {
+        if (preference != null) {
+            preference.setEnabled(enabled);
+        }
+    }
+
     private void ensureConsistencyOfAutoCorrectionSettings() {
         final String autoCorrectionOff = getResources().getString(
                 R.string.auto_correction_threshold_mode_index_off);
         final String currentSetting = mAutoCorrectionThresholdPreference.getValue();
-        if (null != mBigramPrediction) {
-            mBigramPrediction.setEnabled(!currentSetting.equals(autoCorrectionOff));
-        }
+        setPreferenceEnabled(mBigramPrediction, !currentSetting.equals(autoCorrectionOff));
     }
 
     @Override
@@ -180,13 +187,11 @@
             if (null == mKeyPreviewPopupDismissDelay.getValue()) {
                 mKeyPreviewPopupDismissDelay.setValue(popupDismissDelayDefaultValue);
             }
-            mKeyPreviewPopupDismissDelay.setEnabled(
+            setPreferenceEnabled(mKeyPreviewPopupDismissDelay,
                     SettingsValues.isKeyPreviewPopupEnabled(prefs, res));
         }
 
-        final CheckBoxPreference includeOtherImesInLanguageSwitchList =
-                (CheckBoxPreference)findPreference(PREF_INCLUDE_OTHER_IMES_IN_LANGUAGE_SWITCH_LIST);
-        includeOtherImesInLanguageSwitchList.setEnabled(
+        setPreferenceEnabled(findPreference(PREF_INCLUDE_OTHER_IMES_IN_LANGUAGE_SWITCH_LIST),
                 !SettingsValues.isLanguageSwitchKeySupressed(prefs));
 
         final PreferenceScreen dictionaryLink =
@@ -200,10 +205,19 @@
 
         final boolean gestureInputEnabledByBuildConfig = res.getBoolean(
                 R.bool.config_gesture_input_enabled_by_build_config);
+        final Preference gesturePreviewTrail = findPreference(PREF_GESTURE_PREVIEW_TRAIL);
+        final Preference gestureFloatingPreviewText = findPreference(
+                PREF_GESTURE_FLOATING_PREVIEW_TEXT);
         if (!gestureInputEnabledByBuildConfig) {
-            final Preference gestureInputPref = findPreference(PREF_GESTURE_INPUT);
-            miscSettings.removePreference(gestureInputPref);
+            miscSettings.removePreference(findPreference(PREF_GESTURE_INPUT));
+            miscSettings.removePreference(gesturePreviewTrail);
+            miscSettings.removePreference(gestureFloatingPreviewText);
+        } else {
+            final boolean gestureInputEnabledByUser = prefs.getBoolean(PREF_GESTURE_INPUT, true);
+            setPreferenceEnabled(gesturePreviewTrail, gestureInputEnabledByUser);
+            setPreferenceEnabled(gestureFloatingPreviewText, gestureInputEnabledByUser);
         }
+
         final boolean showUsabilityStudyModeOption =
                 res.getBoolean(R.bool.config_enable_usability_study_mode_option)
                         || ProductionFlag.IS_EXPERIMENTAL || ENABLE_EXPERIMENTAL_SETTINGS;
@@ -277,17 +291,22 @@
     public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
         (new BackupManager(getActivity())).dataChanged();
         if (key.equals(PREF_POPUP_ON)) {
-            final ListPreference popupDismissDelay =
-                (ListPreference)findPreference(PREF_KEY_PREVIEW_POPUP_DISMISS_DELAY);
-            if (null != popupDismissDelay) {
-                popupDismissDelay.setEnabled(prefs.getBoolean(PREF_POPUP_ON, true));
-            }
+            setPreferenceEnabled(findPreference(PREF_KEY_PREVIEW_POPUP_DISMISS_DELAY),
+                    prefs.getBoolean(PREF_POPUP_ON, true));
         } else if (key.equals(PREF_SUPPRESS_LANGUAGE_SWITCH_KEY)) {
-            final CheckBoxPreference includeOtherImesInLanguageSwicthList =
-                    (CheckBoxPreference)findPreference(
-                            PREF_INCLUDE_OTHER_IMES_IN_LANGUAGE_SWITCH_LIST);
-            includeOtherImesInLanguageSwicthList.setEnabled(
+            setPreferenceEnabled(findPreference(PREF_INCLUDE_OTHER_IMES_IN_LANGUAGE_SWITCH_LIST),
                     !SettingsValues.isLanguageSwitchKeySupressed(prefs));
+        } else if (key.equals(PREF_GESTURE_INPUT)) {
+            final boolean gestureInputEnabledByConfig = getResources().getBoolean(
+                    R.bool.config_gesture_input_enabled_by_build_config);
+            if (gestureInputEnabledByConfig) {
+                final boolean gestureInputEnabledByUser = prefs.getBoolean(
+                        PREF_GESTURE_INPUT, true);
+                setPreferenceEnabled(findPreference(PREF_GESTURE_PREVIEW_TRAIL),
+                        gestureInputEnabledByUser);
+                setPreferenceEnabled(findPreference(PREF_GESTURE_FLOATING_PREVIEW_TEXT),
+                        gestureInputEnabledByUser);
+            }
         }
         ensureConsistencyOfAutoCorrectionSettings();
         updateVoiceModeSummary();
@@ -335,16 +354,18 @@
     private void refreshEnablingsOfKeypressSoundAndVibrationSettings(
             SharedPreferences sp, Resources res) {
         if (mKeypressVibrationDurationSettingsPref != null) {
-            final boolean hasVibrator = VibratorUtils.getInstance(getActivity()).hasVibrator();
-            final boolean vibrateOn = hasVibrator && sp.getBoolean(Settings.PREF_VIBRATE_ON,
+            final boolean hasVibratorHardware = VibratorUtils.getInstance(getActivity())
+                    .hasVibrator();
+            final boolean vibrateOnByUser = sp.getBoolean(Settings.PREF_VIBRATE_ON,
                     res.getBoolean(R.bool.config_default_vibration_enabled));
-            mKeypressVibrationDurationSettingsPref.setEnabled(vibrateOn);
+            setPreferenceEnabled(mKeypressVibrationDurationSettingsPref,
+                    hasVibratorHardware && vibrateOnByUser);
         }
 
         if (mKeypressSoundVolumeSettingsPref != null) {
             final boolean soundOn = sp.getBoolean(Settings.PREF_SOUND_ON,
                     res.getBoolean(R.bool.config_default_sound_enabled));
-            mKeypressSoundVolumeSettingsPref.setEnabled(soundOn);
+            setPreferenceEnabled(mKeypressSoundVolumeSettingsPref, soundOn);
         }
     }
 
diff --git a/java/src/com/android/inputmethod/latin/SettingsValues.java b/java/src/com/android/inputmethod/latin/SettingsValues.java
index 3ed9813..0843bdb 100644
--- a/java/src/com/android/inputmethod/latin/SettingsValues.java
+++ b/java/src/com/android/inputmethod/latin/SettingsValues.java
@@ -84,6 +84,8 @@
     private final float mKeypressSoundVolumeRawValue;
     private final InputMethodSubtype[] mAdditionalSubtypes;
     public final boolean mGestureInputEnabled;
+    public final boolean mGesturePreviewTrailEnabled;
+    public final boolean mGestureFloatingPreviewTextEnabled;
 
     // From the input box
     private final InputAttributes mInputAttributes;
@@ -174,6 +176,9 @@
                 R.bool.config_gesture_input_enabled_by_build_config);
         mGestureInputEnabled = gestureInputEnabledByBuildConfig
                 && prefs.getBoolean(Settings.PREF_GESTURE_INPUT, true);
+        mGesturePreviewTrailEnabled = prefs.getBoolean(Settings.PREF_GESTURE_PREVIEW_TRAIL, true);
+        mGestureFloatingPreviewTextEnabled = prefs.getBoolean(
+                Settings.PREF_GESTURE_FLOATING_PREVIEW_TEXT, true);
         mCorrectionEnabled = mAutoCorrectEnabled && !mInputAttributes.mInputTypeNoAutoCorrect;
         mSuggestionVisibility = createSuggestionVisibility(res);
     }
diff --git a/native/jni/com_android_inputmethod_keyboard_ProximityInfo.cpp b/native/jni/com_android_inputmethod_keyboard_ProximityInfo.cpp
index 0a8aabf..42284ed 100644
--- a/native/jni/com_android_inputmethod_keyboard_ProximityInfo.cpp
+++ b/native/jni/com_android_inputmethod_keyboard_ProximityInfo.cpp
@@ -1,6 +1,5 @@
 /*
- *
- * Copyright 2011, The Android Open Source Project
+ * Copyright (C) 2011, 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.
diff --git a/native/jni/com_android_inputmethod_keyboard_ProximityInfo.h b/native/jni/com_android_inputmethod_keyboard_ProximityInfo.h
index f5ccf20..51fa895 100644
--- a/native/jni/com_android_inputmethod_keyboard_ProximityInfo.h
+++ b/native/jni/com_android_inputmethod_keyboard_ProximityInfo.h
@@ -1,6 +1,5 @@
 /*
- *
- * Copyright 2011, The Android Open Source Project
+ * Copyright (C) 2011, 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.
diff --git a/native/jni/com_android_inputmethod_latin_BinaryDictionary.cpp b/native/jni/com_android_inputmethod_latin_BinaryDictionary.cpp
index 8725b0c..71bef93 100644
--- a/native/jni/com_android_inputmethod_latin_BinaryDictionary.cpp
+++ b/native/jni/com_android_inputmethod_latin_BinaryDictionary.cpp
@@ -1,6 +1,5 @@
 /*
- *
- * Copyright 2009, The Android Open Source Project
+ * Copyright (C) 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.
diff --git a/native/jni/com_android_inputmethod_latin_BinaryDictionary.h b/native/jni/com_android_inputmethod_latin_BinaryDictionary.h
index 0b67e6b..b9e944f 100644
--- a/native/jni/com_android_inputmethod_latin_BinaryDictionary.h
+++ b/native/jni/com_android_inputmethod_latin_BinaryDictionary.h
@@ -1,6 +1,5 @@
 /*
- *
- * Copyright 2011, The Android Open Source Project
+ * Copyright (C) 2011, 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.
diff --git a/native/jni/com_android_inputmethod_latin_NativeUtils.cpp b/native/jni/com_android_inputmethod_latin_NativeUtils.cpp
index 32d8954..9aae817 100644
--- a/native/jni/com_android_inputmethod_latin_NativeUtils.cpp
+++ b/native/jni/com_android_inputmethod_latin_NativeUtils.cpp
@@ -1,6 +1,5 @@
 /*
- *
- * Copyright 2012, The Android Open Source Project
+ * Copyright (C) 2012, 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.
diff --git a/native/jni/com_android_inputmethod_latin_NativeUtils.h b/native/jni/com_android_inputmethod_latin_NativeUtils.h
index 4d29d7d..d1ffb8f 100644
--- a/native/jni/com_android_inputmethod_latin_NativeUtils.h
+++ b/native/jni/com_android_inputmethod_latin_NativeUtils.h
@@ -1,6 +1,5 @@
 /*
- *
- * Copyright 2012, The Android Open Source Project
+ * Copyright (C) 2012, 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.
diff --git a/native/jni/jni_common.cpp b/native/jni/jni_common.cpp
index 8d7bce7..4eeda1d 100644
--- a/native/jni/jni_common.cpp
+++ b/native/jni/jni_common.cpp
@@ -1,6 +1,5 @@
 /*
- *
- * Copyright 2011, The Android Open Source Project
+ * Copyright (C) 2011, 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.
@@ -37,11 +36,11 @@
     JNIEnv *env = 0;
     jint result = -1;
 
-    if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
+    if (vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) {
         AKLOGE("ERROR: GetEnv failed");
         goto bail;
     }
-    assert(env != 0);
+    assert(env);
 
     if (!register_BinaryDictionary(env)) {
         AKLOGE("ERROR: BinaryDictionary native registration failed");
@@ -59,7 +58,7 @@
     }
 
     /* success -- return valid version number */
-    result = JNI_VERSION_1_4;
+    result = JNI_VERSION_1_6;
 
 bail:
     return result;
@@ -70,7 +69,7 @@
 int registerNativeMethods(JNIEnv *env, const char *className, JNINativeMethod *methods,
         int numMethods) {
     jclass clazz = env->FindClass(className);
-    if (clazz == 0) {
+    if (!clazz) {
         AKLOGE("Native registration unable to find class '%s'", className);
         return JNI_FALSE;
     }
diff --git a/native/jni/jni_common.h b/native/jni/jni_common.h
index 32f9fa9..771361d 100644
--- a/native/jni/jni_common.h
+++ b/native/jni/jni_common.h
@@ -1,6 +1,5 @@
 /*
- *
- * Copyright 2011, The Android Open Source Project
+ * Copyright (C) 2011, 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.
diff --git a/native/jni/src/bigram_dictionary.cpp b/native/jni/src/bigram_dictionary.cpp
index 4f5493a..8dc21220 100644
--- a/native/jni/src/bigram_dictionary.cpp
+++ b/native/jni/src/bigram_dictionary.cpp
@@ -1,6 +1,5 @@
 /*
- *
- * Copyright 2010, The Android Open Source Project
+ * Copyright (C) 2010, 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.
diff --git a/native/jni/src/debug.h b/native/jni/src/debug.h
index 2fee6e8..2168d66 100644
--- a/native/jni/src/debug.h
+++ b/native/jni/src/debug.h
@@ -1,6 +1,5 @@
 /*
- *
- * Copyright 2011, The Android Open Source Project
+ * Copyright (C) 2011, 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.
diff --git a/native/jni/src/defines.h b/native/jni/src/defines.h
index 05b997d..e172b04 100644
--- a/native/jni/src/defines.h
+++ b/native/jni/src/defines.h
@@ -1,6 +1,5 @@
 /*
- *
- * Copyright 2010, The Android Open Source Project
+ * Copyright (C) 2010, 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.
@@ -96,7 +95,7 @@
     }
     if (all == 0) all = 1;
     for (int i = 0; i < PROF_BUF_SIZE - 1; ++i) {
-        if (profile_buf[i] != 0) {
+        if (profile_buf[i]) {
             AKLOGI("(%d): Used %4.2f%%, %8.4f ms. Called %d times.",
                     i, (profile_buf[i] * 100 / all),
                     profile_buf[i] * 1000 / (float)CLOCKS_PER_SEC, profile_counter[i]);
diff --git a/native/jni/src/dictionary.cpp b/native/jni/src/dictionary.cpp
index 4703a38..dabd98b 100644
--- a/native/jni/src/dictionary.cpp
+++ b/native/jni/src/dictionary.cpp
@@ -1,5 +1,4 @@
 /*
- *
  * Copyright (C) 2009, The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/native/jni/src/unigram_dictionary.cpp b/native/jni/src/unigram_dictionary.cpp
index b121d08..ce3108b 100644
--- a/native/jni/src/unigram_dictionary.cpp
+++ b/native/jni/src/unigram_dictionary.cpp
@@ -1,6 +1,5 @@
 /*
- *
- * Copyright 2010, The Android Open Source Project
+ * Copyright (C) 2010, 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.
