diff --git a/src/configure.in b/src/configure.in
index 2aa54d0b5ed72e6f796ee3bbaa3d54bec61ae9c5..bc5d5f7b87513685a77c8f94a0b2ab4d72d0f6fb 100644
--- a/src/configure.in
+++ b/src/configure.in
@@ -101,10 +101,6 @@ fi
 
 dnl look for tcl 8.x... do I really have to go through all this!?
 
-if test x$tk != "xno"; then
-GUISRC="t_main.c t_tkcmd.c"
-fi
-
 foundit=no
 if test $foundit = "no";
 then
@@ -171,6 +167,12 @@ AC_CHECK_LIB(tk85, main,,
                             echo no tk library found; exit 1)))))))
 
 
+if test x$tk != "xno"; then
+GUISRC="t_main.c t_tkcmd.c"
+else
+GUISRC=
+fi
+
 if test `uname -s` = Linux;
 then
     dnl Ckecking for ALSA
diff --git a/src/m_sched.c b/src/m_sched.c
index 8801e285dd00acd4728aca8feb0ab2bf317c8647..a719574206c510b158a900a5659779f78845220a 100644
--- a/src/m_sched.c
+++ b/src/m_sched.c
@@ -28,7 +28,10 @@ int sys_schedblocksize = DEFDACBLKSIZE;
 int sys_usecsincelastsleep(void);
 int sys_sleepgrain;
 
-int sched_reopenmeplease = 0;   /* request from s_audio for deferred reopen */
+void sched_reopenmeplease(void)   /* request from s_audio for deferred reopen */
+{
+	sys_quit = SYS_QUIT_RESTART;
+}
 
 typedef void (*t_clockmethod)(void *client);
 
diff --git a/src/s_audio.c b/src/s_audio.c
index ca8713c8b42336b583d1c26ada065891bea6f752..626c9f58d9157f4a64b20140faf5c8ea6089825a 100644
--- a/src/s_audio.c
+++ b/src/s_audio.c
@@ -68,7 +68,7 @@ static int audio_advance;
 static int audio_callback;
 
 void sched_audio_callbackfn(void);
-extern int sched_reopenmeplease;
+void sched_reopenmeplease(void);
 
 static int audio_isopen(void)
 {
@@ -364,10 +364,11 @@ void sys_close_audio(void)
         mmio_close_audio();
     else
 #endif
-        post("sys_close_audio: unknown API %d", sys_audioapi);
+        post("sys_close_audio: unknown API %d", sys_audioapiopened);
     sys_inchannels = sys_outchannels = 0;
     sys_audioapiopened = -1;
     sched_set_using_audio(SCHED_AUDIO_NONE);
+    audio_state = 0;
 }
 
     /* open audio using whatever parameters were last used */
@@ -432,6 +433,7 @@ void sys_reopen_audio( void)
     }
     else
     {
+		/* fprintf(stderr, "started w/callback %d\n", callback); */
         audio_state = 1;
         sched_set_using_audio(
             (callback ? SCHED_AUDIO_CALLBACK : SCHED_AUDIO_POLL));
@@ -743,7 +745,7 @@ void glob_audio_dialog(t_pd *dummy, t_symbol *s, int argc, t_atom *argv)
         newrate, newadvance, (newcallback >= 0 ? newcallback : 0));
     if (!audio_callback && !newcallback)
         sys_reopen_audio();
-    else sched_reopenmeplease = 1;
+    else sched_reopenmeplease();
 }
 
 void sys_listdevs(void )
@@ -820,7 +822,6 @@ void glob_audio_setapi(void *dummy, t_floatarg f)
     else if (audio_isopen())
     {
         sys_close_audio();
-        audio_state = 0;
     }
 }
 
@@ -837,7 +838,6 @@ void sys_set_audio_state(int onoff)
         if (audio_isopen())
             sys_close_audio();
     }
-    audio_state = onoff;
 }
 
 void sys_get_audio_apis(char *buf)