diff --git a/gnome-volume-control/src/gvc-channel-bar.c b/gnome-volume-control/src/gvc-channel-bar.c
index dfe5027..4dbeab8 100644
--- a/gnome-volume-control/src/gvc-channel-bar.c
+++ b/gnome-volume-control/src/gvc-channel-bar.c
@@ -35,6 +35,7 @@
 #define ADJUSTMENT_MAX_NORMAL 65536.0 /* PA_VOLUME_NORM */
 #define ADJUSTMENT_MAX_AMPLIFIED 98304.0 /* 1.5 * ADJUSTMENT_MAX_NORMAL */
 #define ADJUSTMENT_MAX (bar->priv->is_amplified ? ADJUSTMENT_MAX_AMPLIFIED : ADJUSTMENT_MAX_NORMAL)
+#define DEFAULT_NUM_STEPS 65537
 
 #define GVC_CHANNEL_BAR_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GVC_TYPE_CHANNEL_BAR, GvcChannelBarPrivate))
 
@@ -64,6 +65,7 @@ struct GvcChannelBarPrivate
         gboolean       click_lock;
         gboolean       is_amplified;
         guint32        base_volume;
+        guint32        n_volumes;
 };
 
 enum
@@ -571,11 +573,12 @@ gvc_channel_bar_set_is_amplified (GvcChannelBar *bar, gboolean amplified)
         bar->priv->is_amplified = amplified;
         gtk_adjustment_set_upper (bar->priv->adjustment, ADJUSTMENT_MAX);
         gtk_adjustment_set_upper (bar->priv->zero_adjustment, ADJUSTMENT_MAX);
-        gtk_scale_clear_marks (GTK_SCALE (bar->priv->scale));
 
         if (amplified) {
                 char *str;
 
+		gtk_scale_clear_marks (GTK_SCALE (bar->priv->scale));
+
                 if (bar->priv->base_volume == ADJUSTMENT_MAX_NORMAL) {
                         str = g_strdup_printf ("<small>%s</small>", C_("volume", "100%"));
                         gtk_scale_add_mark (GTK_SCALE (bar->priv->scale), ADJUSTMENT_MAX_NORMAL,
@@ -614,6 +617,25 @@ gvc_channel_bar_set_base_volume (GvcChannelBar *bar,
         bar->priv->base_volume = base_volume;
 }
 
+void
+gvc_channel_bar_set_n_volumes (GvcChannelBar *bar,
+			       guint          n_volumes)
+{
+        g_return_if_fail (GVC_IS_CHANNEL_BAR (bar));
+
+        if (n_volumes == 0) {
+        	bar->priv->n_volumes = DEFAULT_NUM_STEPS;
+        	return;
+	} else {
+		bar->priv->n_volumes = n_volumes;
+	}
+
+	if (bar->priv->n_volumes != DEFAULT_NUM_STEPS) {
+	}
+
+	//FIXME add marks if there's only a few steps
+}
+
 static void
 gvc_channel_bar_set_property (GObject       *object,
                               guint          prop_id,
diff --git a/gnome-volume-control/src/gvc-channel-bar.h b/gnome-volume-control/src/gvc-channel-bar.h
index d405038..519b8d7 100644
--- a/gnome-volume-control/src/gvc-channel-bar.h
+++ b/gnome-volume-control/src/gvc-channel-bar.h
@@ -77,6 +77,8 @@ void                gvc_channel_bar_set_is_amplified    (GvcChannelBar *bar,
                                                          gboolean amplified);
 void                gvc_channel_bar_set_base_volume     (GvcChannelBar *bar,
                                                          guint32        base_volume);
+void                gvc_channel_bar_set_n_volumes       (GvcChannelBar *bar,
+							 guint          n_volumes);
 
 gboolean            gvc_channel_bar_scroll              (GvcChannelBar *bar,
                                                          GdkScrollDirection direction);
diff --git a/gnome-volume-control/src/gvc-mixer-control.c b/gnome-volume-control/src/gvc-mixer-control.c
index 166bdc3..94a8b42 100644
--- a/gnome-volume-control/src/gvc-mixer-control.c
+++ b/gnome-volume-control/src/gvc-mixer-control.c
@@ -538,6 +538,7 @@ update_sink (GvcMixerControl    *control,
         gvc_mixer_stream_set_volume (stream, (guint)max_volume);
         gvc_mixer_stream_set_is_muted (stream, info->mute);
         gvc_mixer_stream_set_can_decibel (stream, !!(info->flags & PA_SINK_DECIBEL_VOLUME));
+        gvc_mixer_stream_set_n_volumes (stream, (guint32) info->n_volume_steps);
         if (!!(info->flags & PA_SINK_DECIBEL_VOLUME)) {
                 gdouble db;
                 db = pa_sw_volume_to_dB (max_volume);
diff --git a/gnome-volume-control/src/gvc-mixer-stream.c b/gnome-volume-control/src/gvc-mixer-stream.c
index 60464e7..b81fcd0 100644
--- a/gnome-volume-control/src/gvc-mixer-stream.c
+++ b/gnome-volume-control/src/gvc-mixer-stream.c
@@ -51,6 +51,7 @@ struct GvcMixerStreamPrivate
         gboolean       can_decibel;
         gboolean       is_event_stream;
         guint32        base_volume;
+        guint32        n_volumes;
 };
 
 enum
@@ -361,6 +362,25 @@ gvc_mixer_stream_set_base_volume (GvcMixerStream *stream,
         return TRUE;
 }
 
+guint32
+gvc_mixer_stream_get_n_volumes (GvcMixerStream *stream)
+{
+        g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), 0);
+
+        return stream->priv->n_volumes;
+}
+
+gboolean
+gvc_mixer_stream_set_n_volumes (GvcMixerStream *stream,
+				guint           n_volumes)
+{
+        g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
+
+        stream->priv->n_volumes = n_volumes;
+
+        return TRUE;
+}
+
 static void
 gvc_mixer_stream_set_property (GObject       *object,
                                guint          prop_id,
diff --git a/gnome-volume-control/src/gvc-mixer-stream.h b/gnome-volume-control/src/gvc-mixer-stream.h
index 1c28cd0..b8d7c6e 100644
--- a/gnome-volume-control/src/gvc-mixer-stream.h
+++ b/gnome-volume-control/src/gvc-mixer-stream.h
@@ -67,6 +67,7 @@ gdouble             gvc_mixer_stream_get_decibel     (GvcMixerStream *stream);
 gboolean            gvc_mixer_stream_change_volume   (GvcMixerStream *stream,
                                                       guint           volume);
 guint32             gvc_mixer_stream_get_base_volume (GvcMixerStream *stream);
+guint32             gvc_mixer_stream_get_n_volumes   (GvcMixerStream *stream);
 
 gboolean            gvc_mixer_stream_get_is_muted    (GvcMixerStream *stream);
 gboolean            gvc_mixer_stream_get_can_decibel (GvcMixerStream *stream);
@@ -100,6 +101,8 @@ gboolean            gvc_mixer_stream_set_application_id (GvcMixerStream *stream,
                                                          const char *application_id);
 gboolean            gvc_mixer_stream_set_base_volume (GvcMixerStream *stream,
                                                       guint32         base_volume);
+gboolean            gvc_mixer_stream_set_n_volumes   (GvcMixerStream *stream,
+						      guint           n_volumes);
 
 G_END_DECLS
 
