diff --git a/res/values/custom_arrays.xml b/res/values/custom_arrays.xml
index 0c28d0b..ffad247 100644
--- a/res/values/custom_arrays.xml
+++ b/res/values/custom_arrays.xml
@@ -190,4 +190,16 @@
         <item>3</item>
     </string-array>
 
+    <string-array name="button_volume_default_entries" translatbale="false">
+        <item>@string/button_volume_default_none</item>
+        <item>@string/button_volume_default_media</item>
+        <item>@string/button_volume_default_ringer</item>
+    </string-array>
+
+    <string-array name="button_volume_default_values" translatable="false">
+        <item>-1</item>
+        <item>3</item>
+        <item>2</item>
+    </string-array>
+
 </resources>
diff --git a/res/values/custom_strings.xml b/res/values/custom_strings.xml
index c6027fb..70343d4 100644
--- a/res/values/custom_strings.xml
+++ b/res/values/custom_strings.xml
@@ -265,8 +265,16 @@
     <string name="recent_clear_all_button_location_bottom_left">Bottom left</string>
     <string name="recent_clear_all_button_location_bottom_right">Bottom right</string>
 
+    <!-- Contextual Notification Panel Header -->
     <string name="notification_drawer_category_title">Notification drawer</string>
     <string name="custom_statusbar_header_title">Contextual notification panel header</string>
     <string name="custom_statusbar_header_summary">Sets the background of the notification panel header to an image based on the current date and time</string>
 
+    <!-- Volume default -->
+    <string name="button_volume_default_none">None</string>
+    <string name="button_volume_default_ringer">Ringer</string>
+    <string name="button_volume_default_media">Media</string>
+    <string name="button_volume_default_title">Volume default</string>
+    <string name="button_volume_default_summary">Choose which volume gets changed by default</string>
+
 </resources>
diff --git a/res/xml/button_settings.xml b/res/xml/button_settings.xml
index c6fd472..38ea732 100644
--- a/res/xml/button_settings.xml
+++ b/res/xml/button_settings.xml
@@ -41,6 +41,14 @@
             android:summary="@string/button_volume_wake_summary"
             android:defaultValue="false" />
 
+        <ListPreference
+            android:key="button_volume_default_screen"
+            android:title="@string/button_volume_default_title"
+            android:summary="@string/button_volume_default_summary"
+            android:entries="@array/button_volume_default_entries"
+            android:entryValues="@array/button_volume_default_values"
+            android:defaultValue="0" />
+
     </PreferenceCategory>
 
     <PreferenceCategory
diff --git a/src/org/omnirom/omnigears/ButtonSettings.java b/src/org/omnirom/omnigears/ButtonSettings.java
index e014f8a..4102c4a 100644
--- a/src/org/omnirom/omnigears/ButtonSettings.java
+++ b/src/org/omnirom/omnigears/ButtonSettings.java
@@ -32,10 +32,13 @@
  */
 package org.omnirom.omnigears;
 
+import java.util.prefs.PreferenceChangeListener;
+
 import android.content.ContentResolver;
 import android.content.res.Resources;
 import android.os.Bundle;
 import android.preference.CheckBoxPreference;
+import android.preference.ListPreference;
 import android.preference.Preference;
 import android.preference.Preference.OnPreferenceChangeListener;
 import android.preference.PreferenceCategory;
@@ -66,6 +69,7 @@
     private static final String CATEGORY_APPSWITCH = "button_keys_appSwitch";
     
     private static final String BUTTON_VOLUME_WAKE = "button_volume_wake_screen";
+    private static final String BUTTON_VOLUME_DEFAULT = "button_volume_default_screen";
 
     private static final String KEYS_CATEGORY_BINDINGS = "keys_bindings";
     private static final String KEYS_ENABLE_CUSTOM = "keys_enable_custom";
@@ -115,6 +119,7 @@
     private ListPreference mAppSwitchPressAction;
     private ListPreference mAppSwitchLongPressAction;
     private Map<String, Integer> mKeySettings = new HashMap<String, Integer>();
+    private ListPreference mVolumeDefault;
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
@@ -130,13 +135,21 @@
                 (PreferenceCategory) prefScreen.findPreference(CATEGORY_VOLUME);
 
         if (hasVolumeRocker()) {
+            mVolumeWake = (CheckBoxPreference) findPreference(BUTTON_VOLUME_WAKE);
+            mVolumeDefault = (ListPreference) findPreference(BUTTON_VOLUME_DEFAULT);
             if (!res.getBoolean(R.bool.config_show_volumeRockerWake)) {
-                prefScreen.removePreference(volumeCategory);
+                prefScreen.removePreference(mVolumeWake);
             } else {
-                mVolumeWake = (CheckBoxPreference) findPreference(BUTTON_VOLUME_WAKE);
                 mVolumeWake.setChecked(Settings.System.getInt(resolver,
-                        Settings.System.VOLUME_WAKE_SCREEN, 0) != 0);
+                    Settings.System.VOLUME_WAKE_SCREEN, 0) != 0);
             }
+            String currentDefault = Settings.System.getString(resolver, Settings.System.VOLUME_KEYS_DEFAULT);
+
+            if (currentDefault == null) {
+                currentDefault = mVolumeDefault.getEntryValues()[mVolumeDefault.getEntryValues().length - 1].toString();
+            }
+            mVolumeDefault.setValue(currentDefault);
+            mVolumeDefault.setOnPreferenceChangeListener(this);
         } else {
             prefScreen.removePreference(volumeCategory);
         }
@@ -348,7 +361,6 @@
             boolean checked = ((CheckBoxPreference)preference).isChecked();
             Settings.System.putInt(getActivity().getContentResolver(),
                     Settings.System.VOLUME_WAKE_SCREEN, checked ? 1:0);
-
             return true;
         }
         return super.onPreferenceTreeClick(preferenceScreen, preference);
@@ -470,6 +482,10 @@
             mKeySettings.put(Settings.System.KEY_APP_SWITCH_LONG_PRESS_ACTION, value);
             checkForHomeKey();
             return true;
+        } else if (preference == mVolumeDefault) {
+            String value = (String)newValue;
+            Settings.System.putString(getActivity().getContentResolver(), Settings.System.VOLUME_KEYS_DEFAULT, value);
+            return true;
         }
         return false;
     }
