{
        int i,j,k;
        int err;
-       void *handle;
+       snd_ctl_t *handle;
 
        cards = snd_cards();
        card = calloc(cards, sizeof(Card));
                        }
                                        
                mixer->group[index].element[idx].eid = mixer->group[index].group.pelements[idx];
-               if((err = snd_mixer_element_build(mixer->handle, 
-                                                 &mixer->group[index].element[idx])) < 0) {
-                       printf("Unable to read element %s!  ",
-                              mixer->group[index].group.pelements[idx].name);
-                       printf("Error: %s.\n", snd_strerror(err));
-               }
+               if(snd_mixer_element_has_control(&mixer->group[index].element[idx].eid))
+                       if((err = snd_mixer_element_build(mixer->handle, 
+                                                       &mixer->group[index].element[idx])) < 0) {
+                               printf("Unable to read element %s!  ",
+                                               mixer->group[index].group.pelements[idx].name);
+                               printf("Error: %s.\n", snd_strerror(err));
+                       }
 
                init_element_route(mixer->handle, 
                                   &mixer->group[index].routes[idx], 
 
 struct _Mixer
 {
         int number; /* The number of the mixer device */
-        void *handle;
+        snd_mixer_t *handle;
         snd_mixer_info_t info; /* The info for the mixer */
         int cnum; /* The number of channels present */
         int snum; /* The number of mixer switches present */