Index: gnome-settings-daemon-2.28.2/data/apps_gnome_settings_daemon_keybindings.schemas.in
===================================================================
--- gnome-settings-daemon-2.28.2.orig/data/apps_gnome_settings_daemon_keybindings.schemas.in
+++ gnome-settings-daemon-2.28.2/data/apps_gnome_settings_daemon_keybindings.schemas.in
@@ -35,6 +35,17 @@
 	    </locale>
 	</schema>
 
+         <schema>
+	    <key>/schemas/apps/gnome_settings_daemon/volume_step_icons</key>
+	    <applyto>/apps/gnome_settings_daemon/volume_step_icons</applyto>
+	    <type>bool</type>
+	    <default>FALSE</default>
+	    <locale name="C">
+		<short>Volume step icons</short>
+		<long>Turn this switch on will hide the volume progress bar, and show volume icon by current level.</long>
+	    </locale>
+	</schema>
+
         <schema>
             <key>/schemas/apps/gnome_settings_daemon/keybindings/volume_mute</key>
             <applyto>/apps/gnome_settings_daemon/keybindings/volume_mute</applyto>
Index: gnome-settings-daemon-2.28.2/plugins/media-keys/gsd-media-keys-window.c
===================================================================
--- gnome-settings-daemon-2.28.2.orig/plugins/media-keys/gsd-media-keys-window.c
+++ gnome-settings-daemon-2.28.2/plugins/media-keys/gsd-media-keys-window.c
@@ -37,6 +37,8 @@
 #define BG_ALPHA 0.50
 #define FG_ALPHA 1.00
 
+#define VOLUME_STEP 6           /* percents for one volume button press */
+
 #define GCONF_MISC_DIR "/apps/gnome_settings_daemon"
 
 static void     gsd_media_keys_window_class_init (GsdMediaKeysWindowClass *klass);
@@ -202,6 +204,67 @@ window_set_icon_name (GsdMediaKeysWindow
                                       name, GTK_ICON_SIZE_DIALOG);
 }
 
+static gboolean
+volume_step_icons (void)
+{
+	gboolean volume_step_icons;
+        GConfClient *conf_client;
+        GError *error;
+
+	/* get set volume_step_icons */
+        error = NULL;
+        conf_client = gconf_client_get_default ();
+        volume_step_icons = gconf_client_get_bool (conf_client,
+                                                   GCONF_MISC_DIR "/volume_step_icons",
+                                                   &error);
+        if (error) {
+                volume_step_icons = FALSE;
+                g_error_free (error);
+         }
+
+         if (conf_client) {
+                 g_object_unref (conf_client);
+                 conf_client = NULL;
+         }
+
+	return volume_step_icons;
+}
+
+static char *
+volume_step_icon_name (GsdMediaKeysWindow *window)
+{
+        int		n;
+	int 		vol_step;
+	GConfClient    *conf_client;
+	GError 	       *error;
+	gchar		icon_name_tmp [25];
+
+	if (window->priv->volume_muted)
+		return g_strdup("audio-volume-muted");
+
+	error = NULL;
+	conf_client = gconf_client_get_default ();
+	vol_step = gconf_client_get_int (conf_client,
+					 GCONF_MISC_DIR "/volume_step",
+					 &error);
+	if (error) {
+		vol_step = VOLUME_STEP;
+		g_error_free (error);
+	}
+
+	if (conf_client) {
+		g_object_unref (conf_client);
+		conf_client = NULL;
+	}
+
+	g_debug ("volume_step_icon_name volume_level: %d, vol_step: %d", window->priv->volume_level, vol_step);
+	n = window->priv->volume_level / vol_step;
+	g_snprintf (icon_name_tmp, 25, "audio-volume-%02d", n);
+
+	g_debug ("volume_step_icon_name icon_name_tmp: %s", icon_name_tmp);
+
+	return g_strdup(icon_name_tmp);
+}
 static void
 action_changed (GsdMediaKeysWindow *window)
 {
@@ -212,7 +275,9 @@ action_changed (GsdMediaKeysWindow *wind
 
                         if (window->priv->volume_muted) {
                                 window_set_icon_name (window, "audio-volume-muted");
-                        } else {
+                        } else if (volume_step_icons()) {
+				window_set_icon_name (window, volume_step_icon_name(window));
+			} else {
                                 window_set_icon_name (window, "audio-volume-high");
                         }
 
@@ -266,7 +331,7 @@ gsd_media_keys_window_set_action (GsdMed
         g_return_if_fail (GSD_IS_MEDIA_KEYS_WINDOW (window));
         g_return_if_fail (action == GSD_MEDIA_KEYS_WINDOW_ACTION_VOLUME);
 
-        if (window->priv->action != action) {
+        if (window->priv->action != action || volume_step_icons()) {
                 window->priv->action = action;
                 action_changed (window);
         } else {
@@ -554,6 +619,7 @@ render_speaker (GsdMediaKeysWindow *wind
         GdkPixbuf         *pixbuf;
         int                icon_size;
         int                n;
+	char              *icon_name;
         static const char *icon_names[] = {
                 "audio-volume-muted",
                 "audio-volume-low",
@@ -562,21 +628,27 @@ render_speaker (GsdMediaKeysWindow *wind
                 NULL
         };
 
-        if (window->priv->volume_muted) {
-                n = 0;
+        if (volume_step_icons()) {
+		icon_name = volume_step_icon_name (window);
+		g_debug ("volume_step_icon_name: %s", icon_name);
         } else {
-                /* select image */
-                n = 3 * window->priv->volume_level / 100 + 1;
-                if (n < 1) {
-                        n = 1;
-                } else if (n > 3) {
-                        n = 3;
-                }
-        }
+		if (window->priv->volume_muted) {
+			n = 0;
+		} else {
+			/* select image */
+			n = 3 * window->priv->volume_level / 100 + 1;
+			if (n < 1) {
+				n = 1;
+			} else if (n > 3) {
+				n = 3;
+			}
+		}
+		icon_name = g_strdup(icon_names[n]);
+	}
 
         icon_size = (int)width;
 
-        pixbuf = load_pixbuf (window, icon_names[n], icon_size);
+        pixbuf = load_pixbuf (window, icon_name, icon_size);
 
         if (pixbuf == NULL) {
                 return FALSE;
@@ -587,6 +659,9 @@ render_speaker (GsdMediaKeysWindow *wind
 
         g_object_unref (pixbuf);
 
+	if (icon_name)
+		g_free (icon_name);
+
         return TRUE;
 }
 
@@ -662,7 +737,12 @@ draw_action_volume (GsdMediaKeysWindow *
         volume_box_height = round (window_height * 0.05);
 
         icon_box_x0 = (window_width - icon_box_width) / 2;
-        icon_box_y0 = (window_height - icon_box_height - volume_box_height) / 2;
+        if (volume_step_icons())
+        {
+                icon_box_y0 = (window_height - icon_box_height) / 2;
+        } else {
+                icon_box_y0 = (window_height - icon_box_height - volume_box_height) / 2;
+        }
         volume_box_x0 = round (icon_box_x0);
         volume_box_y0 = round (icon_box_height + icon_box_y0);
 
@@ -731,13 +811,16 @@ draw_action_volume (GsdMediaKeysWindow *
         }
 
         /* draw volume meter */
-        draw_volume_boxes (window,
-                           cr,
-                           (double)window->priv->volume_level / 100.0,
-                           volume_box_x0,
-                           volume_box_y0,
-                           volume_box_width,
-                           volume_box_height);
+	if (!volume_step_icons())
+	{
+		draw_volume_boxes (window,
+				   cr,
+				   (double)window->priv->volume_level / 100.0,
+				   volume_box_x0,
+				   volume_box_y0,
+				   volume_box_width,
+				   volume_box_height);
+	}
 }
 
 static gboolean
