}
     if ( (err = collect_all()) )
       return err;
-    if ( (err = soundcard_setup_load( cfgfile )) )
+    if ( (err = soundcard_setup_load( cfgfile, 1 )) )
       return err;
     if ( (err = soundcard_setup_collect( cardno )) ) {
       soundcard_setup_done();
   }
   if ( (err = collect_all()) )
     return err;
-  if ( (err = soundcard_setup_load( cfgfile )) )
+  if ( (err = soundcard_setup_load( cfgfile, 0 )) )
     return err;
   err = soundcard_setup_process( cardno );
   soundcard_setup_done();
 
 
 void soundcard_setup_init( void );
 void soundcard_setup_done( void );
-int soundcard_setup_load( const char *filename );
+int soundcard_setup_load( const char *filename, int skip );
 int soundcard_setup_write( const char *filename );
 int soundcard_setup_collect( int cardno );
 int soundcard_setup_process( int cardno );
 
     ctl -> no = idx;
     if ( (err = snd_ctl_switch_read( handle, idx, &ctl -> s )) < 0 ) {
       free( ctl );
-      snd_ctl_close( handle );
       error( "CTL switch read error (%s) - skipping", snd_strerror( err ) );
       break;
     }
   return 0;
 }
 
-int soundcard_setup_load( const char *cfgfile )
+int soundcard_setup_load(const char *cfgfile, int skip)
 {
   extern int yyparse( void );
   extern int linecount;
 #endif
   if ( debugflag )
     printf( "cfgfile = '%s'\n", cfgfile );
+  if (skip && access(cfgfile, R_OK)) return 0;
   if ( ( yyin = fopen( cfgfile, "r" ) ) == NULL ) {
     error( "Cannot open configuration file '%s'...", cfgfile );
     return 1;