diff --git a/ext/alsa/gstalsamixer.h b/ext/alsa/gstalsamixer.h
index 6208a1c..69b0bc1 100644
--- a/ext/alsa/gstalsamixer.h
+++ b/ext/alsa/gstalsamixer.h
@@ -180,7 +180,7 @@ interface_as_function ## _get_option (GstMixer * mixer, GstMixerOptions * opts)
 static void                                                                     \
 interface_as_function ## _interface_init (GstMixerClass * klass)                \
 {                                                                               \
-  GST_MIXER_TYPE (klass) = GST_MIXER_HARDWARE;                                  \
+  GST_MIXER_FLAGS (klass) = GST_MIXER_FLAGS_HARDWARE | GST_MIXER_FLAGS_NOTIFY;  \
                                                                                 \
   /* set up the interface hooks */                                              \
   klass->list_tracks = interface_as_function ## _list_tracks;                   \
diff --git a/gst-libs/gst/interfaces/mixer.c b/gst-libs/gst/interfaces/mixer.c
index 6058b9f..44d3b6d 100644
--- a/gst-libs/gst/interfaces/mixer.c
+++ b/gst-libs/gst/interfaces/mixer.c
@@ -109,7 +109,7 @@ gst_mixer_class_init (GstMixerClass * klass)
     initialized = TRUE;
   }
 
-  klass->mixer_type = GST_MIXER_SOFTWARE;
+  klass->flags |= GST_MIXER_FLAGS_SOFTWARE;
 
   /* default virtual functions */
   klass->list_tracks = NULL;
diff --git a/gst-libs/gst/interfaces/mixer.h b/gst-libs/gst/interfaces/mixer.h
index 28c5f11..1046d1f 100644
--- a/gst-libs/gst/interfaces/mixer.h
+++ b/gst-libs/gst/interfaces/mixer.h
@@ -42,7 +42,9 @@ G_BEGIN_DECLS
 #define GST_MIXER_GET_CLASS(inst) \
   (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GST_TYPE_MIXER, GstMixerClass))
 
-#define GST_MIXER_TYPE(klass) (klass->mixer_type)
+/* compatibility with version <= 0.10.12 */
+#define GST_MIXER_TYPE(klass)  (GST_MIXER_IS_HARDWARE(klass) ? GST_MIXER_HARDWARE : GST_MIXER_SOFTWARE)
+#define GST_MIXER_FLAGS(klass) (klass->flags)
 
 typedef struct _GstMixer GstMixer;
 typedef struct _GstMixerClass GstMixerClass;
@@ -53,10 +55,22 @@ typedef enum
   GST_MIXER_SOFTWARE
 } GstMixerType;
 
+typedef enum
+{
+  GST_MIXER_FLAGS_HARDWARE	= 1 << 0,
+  GST_MIXER_FLAGS_SOFTWARE	= 1 << 1,
+  GST_MIXER_FLAGS_NOTIFY	= 1 << 2
+} GstMixerFlags;
+
+
+#define GST_MIXER_IS_HARDWARE(klass) !!(GST_MIXER_FLAGS(klass) & GST_MIXER_FLAGS_HARDWARE)
+#define GST_MIXER_IS_SOFTWARE(klass) !!(GST_MIXER_FLAGS(klass) & GST_MIXER_FLAGS_SOFTWARE)
+#define GST_MIXER_HAS_NOTIFY(klass) !!(GST_MIXER_FLAGS(klass) & GST_MIXER_FLAGS_NOTIFY)
+
 struct _GstMixerClass {
   GTypeInterface klass;
 
-  GstMixerType mixer_type;
+  GstMixerFlags flags;
   
   /* virtual functions */
   const GList *  (* list_tracks)   (GstMixer      *mixer);
diff --git a/gst/volume/gstvolume.c b/gst/volume/gstvolume.c
index a1ad3de..090f2aa 100644
--- a/gst/volume/gstvolume.c
+++ b/gst/volume/gstvolume.c
@@ -283,7 +283,7 @@ gst_volume_set_mute (GstMixer * mixer, GstMixerTrack * track, gboolean mute)
 static void
 gst_volume_mixer_init (GstMixerClass * klass)
 {
-  GST_MIXER_TYPE (klass) = GST_MIXER_SOFTWARE;
+  GST_MIXER_FLAGS (klass) |= GST_MIXER_FLAGS_SOFTWARE;
 
   /* default virtual functions */
   klass->list_tracks = gst_volume_list_tracks;
