diff --git a/pd/src/s_midi_alsa.c b/pd/src/s_midi_alsa.c
index 972214e9dcb6240a496df8c2a952f5618f57cff9..bcffa7d3dbf5df04743ab2525151e52f8a74258d 100644
--- a/pd/src/s_midi_alsa.c
+++ b/pd/src/s_midi_alsa.c
@@ -32,6 +32,7 @@ static snd_seq_t *midi_handle;
 
 static snd_midi_event_t *midiev;
 
+void midi_alsa_setndevs(int in, int out);
 
 void sys_alsa_do_open_midi(int nmidiin, int *midiinvec,
     int nmidiout, int *midioutvec)
@@ -45,6 +46,7 @@ void sys_alsa_do_open_midi(int nmidiin, int *midiinvec,
 
     alsa_nmidiin = 0;
     alsa_nmidiout = 0;
+    midi_alsa_setndevs(alsa_nmidiin, alsa_nmidiout);
 
     if (nmidiout == 0 && nmidiin == 0) return;
 
@@ -105,6 +107,10 @@ void sys_alsa_do_open_midi(int nmidiin, int *midiinvec,
     snd_midi_event_new(ALSA_MAX_EVENT_SIZE,&midiev);
     alsa_nmidiout = nmidiout;
     alsa_nmidiin = nmidiin;
+    // We need to keep the ALSA devices list (midi_alsa_getdevs) in sync with
+    // the actual device config. Not sure why this table (used by the GUI)
+    // uses its own device counts. -ag
+    midi_alsa_setndevs(alsa_nmidiin, alsa_nmidiout);
 
     return;
  error:
@@ -218,6 +224,7 @@ void sys_alsa_poll_midi(void)
 void sys_alsa_close_midi()
 {
     alsa_nmidiin = alsa_nmidiout = 0;
+    midi_alsa_setndevs(alsa_nmidiin, alsa_nmidiout);
     if(midi_handle)
       {
         snd_seq_close(midi_handle);