diff --git a/res/values/custom_strings.xml b/res/values/custom_strings.xml
index beb459b..ec9d69c 100644
--- a/res/values/custom_strings.xml
+++ b/res/values/custom_strings.xml
@@ -206,6 +206,8 @@
     <string name="keys_action_double">Double tap</string>
     <string name="dialog_no_home_key_title">No home action</string>
     <string name="no_home_key">You have no button assigned to the \"Home\" action! This can make your device unusable!</string>
+    <string name="virtual_key_haptic_feedback_title">Vibrate on touch</string>
+    <string name="virtual_key_haptic_feedback_summary">Enable depends on \"Vibrate on touch\" in sound settings</string>
 
     <!-- Power Menu Options-->
     <string name="bars_and_menus_category_power_menu_title">Power menu</string>
diff --git a/res/xml/button_settings.xml b/res/xml/button_settings.xml
index 2260816..c5867e1 100644
--- a/res/xml/button_settings.xml
+++ b/res/xml/button_settings.xml
@@ -55,6 +55,12 @@
         android:key="button_keys"
         android:title="@string/button_keys_title" >
 
+        <CheckBoxPreference
+            android:key="virtual_key_haptic_feedback"
+            android:title="@string/virtual_key_haptic_feedback_title"
+            android:summary="@string/virtual_key_haptic_feedback_summary"
+            android:persistent="false"/>
+
         <SwitchPreference
             android:key="keys_enable_custom"
             android:title="@string/keys_enable_custom_title"
diff --git a/src/org/omnirom/omnigears/ButtonSettings.java b/src/org/omnirom/omnigears/ButtonSettings.java
index d73b6e3..d35c92a 100644
--- a/src/org/omnirom/omnigears/ButtonSettings.java
+++ b/src/org/omnirom/omnigears/ButtonSettings.java
@@ -36,8 +36,10 @@
 
 import android.content.ContentResolver;
 import android.content.res.Resources;
+import android.content.Context;
 import android.media.AudioSystem;
 import android.os.Bundle;
+import android.os.Vibrator;
 import android.preference.CheckBoxPreference;
 import android.preference.ListPreference;
 import android.preference.Preference;
@@ -87,6 +89,7 @@
     private static final String KEYS_ASSIST_LONG_PRESS = "keys_assist_long_press";
     private static final String KEYS_APP_SWITCH_PRESS = "keys_app_switch_press";
     private static final String KEYS_APP_SWITCH_LONG_PRESS = "keys_app_switch_long_press";
+    private static final String VIRTUAL_KEY_HAPTIC_FEEDBACK = "virtual_key_haptic_feedback";
 
     // Available custom actions to perform on a key press.
     private static final int ACTION_NOTHING = 0;
@@ -124,6 +127,7 @@
     private Map<String, Integer> mKeySettings = new HashMap<String, Integer>();
     private ListPreference mVolumeDefault;
     private CheckBoxPreference mHeadsetHookLaunchVoice;
+    private CheckBoxPreference mVirtualKeyHapticFeedback;
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
@@ -131,7 +135,7 @@
 
         addPreferencesFromResource(R.xml.button_settings);
 
-        final ContentResolver resolver = getActivity().getContentResolver();
+        final ContentResolver resolver = getContentResolver();
         final PreferenceScreen prefScreen = getPreferenceScreen();
         final Resources res = getResources();
 
@@ -215,9 +219,11 @@
                     KEYS_APP_SWITCH_PRESS);
             mAppSwitchLongPressAction = (ListPreference) prefScreen.findPreference(
                     KEYS_APP_SWITCH_LONG_PRESS);
+            mVirtualKeyHapticFeedback = (CheckBoxPreference) prefScreen.findPreference(
+                    VIRTUAL_KEY_HAPTIC_FEEDBACK);
 
             if (hasBackKey) {
-                int backPressAction = Settings.System.getInt(getContentResolver(),
+                int backPressAction = Settings.System.getInt(resolver,
                         Settings.System.KEY_BACK_ACTION, ACTION_BACK);
 
                 mBackPressAction.setValue(Integer.toString(backPressAction));
@@ -226,7 +232,7 @@
 
                 mKeySettings.put(Settings.System.KEY_BACK_ACTION, backPressAction);
 
-                int backLongPressAction = Settings.System.getInt(getContentResolver(),
+                int backLongPressAction = Settings.System.getInt(resolver,
                         Settings.System.KEY_BACK_LONG_PRESS_ACTION, ACTION_NOTHING);
 
                 mBackLongPressAction.setValue(Integer.toString(backLongPressAction));
@@ -239,7 +245,7 @@
             }
 
             if (hasHomeKey) {
-                int homePressAction = Settings.System.getInt(getContentResolver(),
+                int homePressAction = Settings.System.getInt(resolver,
                         Settings.System.KEY_HOME_ACTION, ACTION_HOME);
 
                 mHomePressAction.setValue(Integer.toString(homePressAction));
@@ -261,11 +267,11 @@
                 }
 
                 if (hasAppSwitchKey) {
-                    homeLongPressAction = Settings.System.getInt(getContentResolver(),
+                    homeLongPressAction = Settings.System.getInt(resolver,
                             Settings.System.KEY_HOME_LONG_PRESS_ACTION, ACTION_NOTHING);
                 } else {
                     int defaultAction = ACTION_NOTHING;
-                    homeLongPressAction = Settings.System.getInt(getContentResolver(),
+                    homeLongPressAction = Settings.System.getInt(resolver,
                             Settings.System.KEY_HOME_LONG_PRESS_ACTION, longPressOnHomeBehavior);
                 }
                 mHomeLongPressAction.setValue(Integer.toString(homeLongPressAction));
@@ -277,7 +283,7 @@
                 int doubleTapOnHomeBehavior = getResources().getInteger(
                         com.android.internal.R.integer.config_doubleTapOnHomeBehavior);
 
-                int homeDoubleTapAction = Settings.System.getInt(getContentResolver(),
+                int homeDoubleTapAction = Settings.System.getInt(resolver,
                             Settings.System.KEY_HOME_DOUBLE_TAP_ACTION,
                             doubleTapOnHomeBehavior == 1 ? ACTION_APP_SWITCH : ACTION_NOTHING);
 
@@ -291,7 +297,7 @@
             }
 
             if (hasMenuKey) {
-                int menuPressAction = Settings.System.getInt(getContentResolver(),
+                int menuPressAction = Settings.System.getInt(resolver,
                         Settings.System.KEY_MENU_ACTION, ACTION_MENU);
                 mMenuPressAction.setValue(Integer.toString(menuPressAction));
                 mMenuPressAction.setSummary(mMenuPressAction.getEntry());
@@ -304,7 +310,7 @@
                     menuLongPressAction = ACTION_SEARCH;
                 }
 
-                menuLongPressAction = Settings.System.getInt(getContentResolver(),
+                menuLongPressAction = Settings.System.getInt(resolver,
                             Settings.System.KEY_MENU_LONG_PRESS_ACTION, menuLongPressAction);
 
                 mMenuLongPressAction.setValue(Integer.toString(menuLongPressAction));
@@ -317,7 +323,7 @@
             }
 
             if (hasAssistKey) {
-                int assistPressAction = Settings.System.getInt(getContentResolver(),
+                int assistPressAction = Settings.System.getInt(resolver,
                         Settings.System.KEY_ASSIST_ACTION, ACTION_SEARCH);
                 mAssistPressAction.setValue(Integer.toString(assistPressAction));
                 mAssistPressAction.setSummary(mAssistPressAction.getEntry());
@@ -325,7 +331,7 @@
 
                 mKeySettings.put(Settings.System.KEY_ASSIST_ACTION, assistPressAction);
 
-                int assistLongPressAction = Settings.System.getInt(getContentResolver(),
+                int assistLongPressAction = Settings.System.getInt(resolver,
                         Settings.System.KEY_ASSIST_LONG_PRESS_ACTION, ACTION_VOICE_SEARCH);
                 mAssistLongPressAction.setValue(Integer.toString(assistLongPressAction));
                 mAssistLongPressAction.setSummary(mAssistLongPressAction.getEntry());
@@ -337,7 +343,7 @@
             }
 
             if (hasAppSwitchKey) {
-                int appSwitchPressAction = Settings.System.getInt(getContentResolver(),
+                int appSwitchPressAction = Settings.System.getInt(resolver,
                         Settings.System.KEY_APP_SWITCH_ACTION, ACTION_APP_SWITCH);
                 mAppSwitchPressAction.setValue(Integer.toString(appSwitchPressAction));
                 mAppSwitchPressAction.setSummary(mAppSwitchPressAction.getEntry());
@@ -345,7 +351,7 @@
 
                 mKeySettings.put(Settings.System.KEY_APP_SWITCH_ACTION, appSwitchPressAction);
 
-                int appSwitchLongPressAction = Settings.System.getInt(getContentResolver(),
+                int appSwitchLongPressAction = Settings.System.getInt(resolver,
                         Settings.System.KEY_APP_SWITCH_LONG_PRESS_ACTION, ACTION_NOTHING);
                 mAppSwitchLongPressAction.setValue(Integer.toString(appSwitchLongPressAction));
                 mAppSwitchLongPressAction.setSummary(mAppSwitchLongPressAction.getEntry());
@@ -356,10 +362,17 @@
                 prefScreen.removePreference(keysAppSwitchCategory);
             }
 
-            mEnableCustomBindings.setChecked((Settings.System.getInt(getActivity().
-                    getApplicationContext().getContentResolver(),
+            mEnableCustomBindings.setChecked((Settings.System.getInt(resolver,
                     Settings.System.HARDWARE_KEY_REBINDING, 0) == 1));
 		    mEnableCustomBindings.setOnPreferenceChangeListener(this);
+
+            Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
+            if (vibrator == null || !vibrator.hasVibrator()) {
+                removePreference(VIRTUAL_KEY_HAPTIC_FEEDBACK);
+            } else {
+                mVirtualKeyHapticFeedback.setChecked(Settings.System.getInt(resolver,
+                        Settings.System.VIRTUAL_KEYS_HAPTIC_FEEDBACK, 1) == 1);
+            }
         }
 
         final PreferenceCategory headsethookCategory =
@@ -374,16 +387,22 @@
     public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
         if (preference == mVolumeWake) {
             boolean checked = ((CheckBoxPreference)preference).isChecked();
-            Settings.System.putInt(getActivity().getContentResolver(),
+            Settings.System.putInt(getContentResolver(),
                     Settings.System.VOLUME_WAKE_SCREEN, checked ? 1:0);
             return true;
         }
         else if (preference == mHeadsetHookLaunchVoice) {
             boolean checked = ((CheckBoxPreference)preference).isChecked();
-            Settings.System.putInt(getActivity().getContentResolver(),
+            Settings.System.putInt(getContentResolver(),
                     Settings.System.HEADSETHOOK_LAUNCH_VOICE, checked ? 1:0);
 
             return true;
+        } else if (preference == mVirtualKeyHapticFeedback){
+            boolean checked = ((CheckBoxPreference)preference).isChecked();
+            Settings.System.putInt(getContentResolver(),
+                    Settings.System.VIRTUAL_KEYS_HAPTIC_FEEDBACK, checked ? 1:0);
+
+            return true;
         }
 
         return super.onPreferenceTreeClick(preferenceScreen, preference);
@@ -507,7 +526,7 @@
             return true;
         } else if (preference == mVolumeDefault) {
             String value = (String)newValue;
-            Settings.System.putString(getActivity().getContentResolver(), Settings.System.VOLUME_KEYS_DEFAULT, value);
+            Settings.System.putString(getContentResolver(), Settings.System.VOLUME_KEYS_DEFAULT, value);
             return true;
         }
         return false;
