diff --git a/res/values/custom_arrays.xml b/res/values/custom_arrays.xml
index 17e86fe..e91e790 100644
--- a/res/values/custom_arrays.xml
+++ b/res/values/custom_arrays.xml
@@ -284,13 +284,11 @@
 
     <string-array name="custom_header_provider_entries" translatable="false">
         <item>@string/daylight_header_provider_title</item>
-        <item>@string/static_header_provider_title</item>
         <item>@string/file_header_provider_title</item>
     </string-array>
 
     <string-array name="custom_header_provider_values" translatable="false">
         <item>@string/daylight_header_provider</item>
-        <item>@string/static_header_provider</item>
         <item>@string/file_header_provider</item>
     </string-array>
 
@@ -507,7 +505,7 @@
         <item>3</item>
     </string-array>
 
-    <string-array name="entries_battery_styles" translatable="false">
+    <string-array name="battery_styles_entries" translatable="false">
         <item>@string/battery_style_default</item>
         <item>@string/battery_style_meter_horizontal</item>
         <item>@string/battery_style_circle</item>
@@ -516,7 +514,7 @@
         <item>@string/battery_style_droid</item>
     </string-array>
 
-    <string-array name="values_battery_styles" translatable="false">
+    <string-array name="battery_styles_values" translatable="false">
         <item>0</item>
         <item>1</item>
         <item>2</item>
@@ -524,4 +522,16 @@
         <item>4</item>
         <item>5</item>
     </string-array>
+
+    <string-array name="battery_percent_enable_entries" translatable="false">
+        <item>@string/battery_percent_none</item>
+        <item>@string/battery_percent_always</item>
+        <item>@string/battery_percent_expanded</item>
+    </string-array>
+
+    <string-array name="battery_percent_enable_values" translatable="false">
+        <item>0</item>
+        <item>1</item>
+        <item>2</item>
+    </string-array>
 </resources>
diff --git a/res/values/custom_strings.xml b/res/values/custom_strings.xml
index 7968be9..8959079 100644
--- a/res/values/custom_strings.xml
+++ b/res/values/custom_strings.xml
@@ -262,18 +262,15 @@
     <string name="static_header_provider_title">Static image</string>
     <string name="daylight_header_provider_title">Image collection</string>
     <string name="custom_header_provider_title">Header provider</string>
-    <string name="custom_header_browse_title">Browse installed headers</string>
-    <string name="custom_header_browse_summary">Click on any image to use for static mode</string>
-    <string name="custom_header_browse_summary_new">Browse all available header collections</string>
     <string name="custom_header_pick_title">Select header image</string>
-    <string name="custom_header_pick_summary">Select an image to use for static mode</string>
+    <string name="custom_header_pick_summary">Select a local or remote image</string>
     <string name="style_enabled_summary">Custom header image is ON</string>
     <string name="style_disabled_summary">Custom header image is OFF</string>
     <string name="header_provider_disabled">Disabled</string>
     <string name="custom_header_title">Custom header image</string>
-    <string name="file_header_select_title">Select image</string>
-    <string name="file_header_select_summary">Select custom image</string>
-    <string name="file_header_provider_title">Custom image</string>
+    <string name="file_header_select_title">Select local image</string>
+    <string name="file_header_select_summary">Select image from storage</string>
+    <string name="file_header_provider_title">Single image</string>
     <string name="file_header_provider" translatable="false">file</string>
 
     <!-- Network traffic -->
diff --git a/res/xml/style_settings.xml b/res/xml/style_settings.xml
index 1bbfc6b..639a2ce 100644
--- a/res/xml/style_settings.xml
+++ b/res/xml/style_settings.xml
@@ -79,8 +79,8 @@
 
         <Preference
             android:key="custom_header_browse"
-            android:title="@string/custom_header_browse_title"
-            android:summary="@string/custom_header_browse_summary"
+            android:title="@string/custom_header_pick_title"
+            android:summary="@string/custom_header_pick_summary"
             android:persistent="false"
             android:dependency="status_bar_custom_header" >
             <intent android:action="android.intent.action.MAIN"
diff --git a/src/org/omnirom/omnigears/interfacesettings/StyleSettings.java b/src/org/omnirom/omnigears/interfacesettings/StyleSettings.java
index 1347590..9b4fd87 100644
--- a/src/org/omnirom/omnigears/interfacesettings/StyleSettings.java
+++ b/src/org/omnirom/omnigears/interfacesettings/StyleSettings.java
@@ -80,6 +80,12 @@
     private String mFileHeaderProvider;
 
     @Override
+    public void onResume() {
+        super.onResume();
+        updateEnablement();
+    }
+
+    @Override
     public int getMetricsCategory() {
         return MetricsEvent.OMNI_SETTINGS;
     }
@@ -97,7 +103,9 @@
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        //addPreferencesFromResource(R.xml.style_settings);
+
+        mDaylightHeaderProvider = getResources().getString(R.string.daylight_header_provider);
+        mFileHeaderProvider = getResources().getString(R.string.file_header_provider);
 
         mWallBrowse = findPreference(CUSTOM_WALL_BROWSE);
         mWallBrowse.setEnabled(isBrowseWallsAvailable());
@@ -126,32 +134,18 @@
         mHeaderShadow.setValue((int)(((double) headerShadow / 255) * 100));
         mHeaderShadow.setOnPreferenceChangeListener(this);
 
-        mDaylightHeaderProvider = getResources().getString(R.string.daylight_header_provider);
-        mFileHeaderProvider = getResources().getString(R.string.file_header_provider);
-        String providerName = Settings.System.getString(getContentResolver(),
-                Settings.System.STATUS_BAR_CUSTOM_HEADER_PROVIDER);
-        if (providerName == null) {
-            providerName = mDaylightHeaderProvider;
-        }
-        mHeaderBrowse.setEnabled(isBrowseHeaderAvailable() && !providerName.equals(mFileHeaderProvider));
-
         mHeaderProvider = (ListPreference) findPreference(CUSTOM_HEADER_PROVIDER);
-        int valueIndex = mHeaderProvider.findIndexOfValue(providerName);
-        mHeaderProvider.setValueIndex(valueIndex >= 0 ? valueIndex : 0);
-        mHeaderProvider.setSummary(mHeaderProvider.getEntry());
         mHeaderProvider.setOnPreferenceChangeListener(this);
-        mDaylightHeaderPack.setEnabled(providerName.equals(mDaylightHeaderProvider));
 
         mSystemUIThemeStyle = (ListPreference) findPreference(SYSTEMUI_THEME_STYLE);
         int systemUIThemeStyle = Settings.System.getInt(getContentResolver(),
                 Settings.System.SYSTEM_UI_THEME, 0);
-        valueIndex = mSystemUIThemeStyle.findIndexOfValue(String.valueOf(systemUIThemeStyle));
+        int valueIndex = mSystemUIThemeStyle.findIndexOfValue(String.valueOf(systemUIThemeStyle));
         mSystemUIThemeStyle.setValueIndex(valueIndex >= 0 ? valueIndex : 0);
         mSystemUIThemeStyle.setSummary(mSystemUIThemeStyle.getEntry());
         mSystemUIThemeStyle.setOnPreferenceChangeListener(this);
 
         mFileHeader = findPreference(FILE_HEADER_SELECT);
-        mFileHeader.setEnabled(providerName.equals(mFileHeaderProvider));
     }
 
     private void updateHeaderProviderSummary(boolean headerEnabled) {
@@ -201,11 +195,7 @@
                     Settings.System.STATUS_BAR_CUSTOM_HEADER_PROVIDER, value);
             int valueIndex = mHeaderProvider.findIndexOfValue(value);
             mHeaderProvider.setSummary(mHeaderProvider.getEntries()[valueIndex]);
-            mDaylightHeaderPack.setEnabled(value.equals(mDaylightHeaderProvider));
-            mHeaderBrowse.setEnabled(!value.equals(mFileHeaderProvider));
-            mHeaderBrowse.setTitle(valueIndex == 0 ? R.string.custom_header_browse_title : R.string.custom_header_pick_title);
-            mHeaderBrowse.setSummary(valueIndex == 0 ? R.string.custom_header_browse_summary_new : R.string.custom_header_pick_summary);
-            mFileHeader.setEnabled(value.equals(mFileHeaderProvider));
+            updateEnablement();
         } else if (preference == mHeaderEnabled) {
             Boolean headerEnabled = (Boolean) newValue;
             updateHeaderProviderSummary(headerEnabled);
@@ -273,6 +263,7 @@
                 return;
             }
             final Uri imageUri = result.getData();
+            Settings.System.putString(getContentResolver(), Settings.System.STATUS_BAR_CUSTOM_HEADER_PROVIDER, "file");
             Settings.System.putString(getContentResolver(), Settings.System.STATUS_BAR_FILE_HEADER_IMAGE, imageUri.toString());
         }
     }
@@ -284,6 +275,23 @@
         return controllers;
     }
 
+    private void updateEnablement() {
+        String providerName = Settings.System.getString(getContentResolver(),
+                Settings.System.STATUS_BAR_CUSTOM_HEADER_PROVIDER);
+        if (providerName == null) {
+            providerName = mDaylightHeaderProvider;
+        }
+        if (!providerName.equals(mDaylightHeaderProvider)) {
+            providerName = mFileHeaderProvider;
+        }
+        int valueIndex = mHeaderProvider.findIndexOfValue(providerName);
+        mHeaderProvider.setValueIndex(valueIndex >= 0 ? valueIndex : 0);
+        mHeaderProvider.setSummary(mHeaderProvider.getEntry());
+        mDaylightHeaderPack.setEnabled(providerName.equals(mDaylightHeaderProvider));
+        mFileHeader.setEnabled(providerName.equals(mFileHeaderProvider));
+        mHeaderBrowse.setEnabled(isBrowseHeaderAvailable() && providerName.equals(mFileHeaderProvider));
+    }
+    
     public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
             new BaseSearchIndexProvider() {
                 @Override
