diff --git a/ext/alsa/gstalsamixeroptions.c b/ext/alsa/gstalsamixeroptions.c
index da5630d..96f5834 100644
--- a/ext/alsa/gstalsamixeroptions.c
+++ b/ext/alsa/gstalsamixeroptions.c
@@ -73,13 +73,19 @@ gst_alsa_mixer_options_new (snd_mixer_elem_t * element, gint track_num)
   GstAlsaMixerOptions *alsa_opts;
   GstMixerTrack *track;
   const gchar *label;
+  gint index;
   gint num, i;
   gchar str[256];
 
   label = snd_mixer_selem_get_name (element);
+  index = snd_mixer_selem_get_index (element);
+
+  GST_LOG ("[%s,%i]", label, index);
 
   opts = g_object_new (GST_ALSA_MIXER_OPTIONS_TYPE,
-      "untranslated-label", label, NULL);
+      "untranslated-label", label,
+      "index", index,
+      NULL);
   alsa_opts = (GstAlsaMixerOptions *) opts;
   track = (GstMixerTrack *) opts;
 
diff --git a/ext/alsa/gstalsamixertrack.c b/ext/alsa/gstalsamixertrack.c
index 12831b5..b3fb4dd 100644
--- a/ext/alsa/gstalsamixertrack.c
+++ b/ext/alsa/gstalsamixertrack.c
@@ -119,6 +119,7 @@ gst_alsa_mixer_track_new (snd_mixer_elem_t * element,
   GstAlsaMixerTrack *alsa_track;
   GstMixerTrack *track;
   const gchar *name;
+  gint index;
   const gchar *label;
   gint i;
   long min = 0, max = 0;
@@ -142,12 +143,15 @@ gst_alsa_mixer_track_new (snd_mixer_elem_t * element,
   };
 
   name = snd_mixer_selem_get_name (element);
+  index = snd_mixer_selem_get_index (element);
 
-  GST_LOG ("[%s] num=%d,track_num=%d,flags=0x%08x,sw=%s,shared_mute_track=%p",
-      name, num, track_num, flags, (sw) ? "true" : "false", shared_mute_track);
+  GST_LOG ("[%s,%i] num=%d,track_num=%d,flags=0x%08x,sw=%s,shared_mute_track=%p",
+      name, index, num, track_num, flags, (sw) ? "true" : "false", shared_mute_track);
 
   track = (GstMixerTrack *) g_object_new (GST_ALSA_MIXER_TRACK_TYPE,
-      "untranslated-label", name, NULL);
+      "untranslated-label", name,
+      "index", index,
+      NULL);
 
   alsa_track = (GstAlsaMixerTrack *) track;
 
diff --git a/gst-libs/gst/interfaces/mixertrack.c b/gst-libs/gst/interfaces/mixertrack.c
index 6d0cba6..69d032a 100644
--- a/gst-libs/gst/interfaces/mixertrack.c
+++ b/gst-libs/gst/interfaces/mixertrack.c
@@ -41,6 +41,7 @@ enum
   ARG_0,
   ARG_LABEL,
   ARG_UNTRANSLATED_LABEL,
+  ARG_INDEX,
   ARG_MIN_VOLUME,
   ARG_MAX_VOLUME,
   ARG_FLAGS,
@@ -116,6 +117,20 @@ gst_mixer_track_class_init (GstMixerTrackClass * klass)
           "The untranslated label assigned to the track (since 0.10.13)",
           NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
 
+  /**
+   * GstMixerTrack:index
+   *
+   * Index of the mixer track, if available. Mixer track implementations
+   * must set this at construct time. This can be used to discern between
+   * multiple tracks with identical labels.
+   *
+   * Since: 0.10.21
+   */
+  g_object_class_install_property (object_klass, ARG_INDEX,
+      g_param_spec_int ("index", "Index",
+          "Track index", 0, G_MAXINT,
+          0, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+
   g_object_class_install_property (object_klass, ARG_MIN_VOLUME,
       g_param_spec_int ("min_volume", "Minimum volume level",
           "The minimum possible volume level", G_MININT, G_MAXINT,
@@ -172,8 +187,9 @@ gst_mixer_track_init (GstMixerTrack * mixer_track)
   mixer_track->num_channels = 0;
 }
 
-/* FIXME 0.11: move this as a member into the mixer track structure */
+/* FIXME 0.11: move these as members into the mixer track structure */
 #define MIXER_TRACK_OBJECT_DATA_KEY_UNTRANSLATED_LABEL "gst-mixer-track-ulabel"
+#define MIXER_TRACK_OBJECT_DATA_KEY_INDEX "index"
 
 static void
 gst_mixer_track_get_property (GObject * object, guint prop_id, GValue * value,
@@ -192,6 +208,11 @@ gst_mixer_track_get_property (GObject * object, guint prop_id, GValue * value,
           (const gchar *) g_object_get_data (G_OBJECT (mixer_track),
               MIXER_TRACK_OBJECT_DATA_KEY_UNTRANSLATED_LABEL));
       break;
+    case ARG_INDEX:
+      g_value_set_int (value,
+	  GPOINTER_TO_INT (g_object_get_data (G_OBJECT (mixer_track),
+	      MIXER_TRACK_OBJECT_DATA_KEY_INDEX)));
+      break;
     case ARG_MIN_VOLUME:
       g_value_set_int (value, mixer_track->min_volume);
       break;
@@ -224,6 +245,11 @@ gst_mixer_track_set_property (GObject * object, guint prop_id,
           MIXER_TRACK_OBJECT_DATA_KEY_UNTRANSLATED_LABEL,
           g_value_dup_string (value), (GDestroyNotify) g_free);
       break;
+    case ARG_INDEX:
+      g_object_set_data (G_OBJECT (mixer_track),
+	  MIXER_TRACK_OBJECT_DATA_KEY_INDEX,
+	  GINT_TO_POINTER (g_value_get_int (value)));
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
