diff --git a/src/term.c b/src/term.c
index 570e736a..ad426fd9 100644
--- a/src/term.c
+++ b/src/term.c
@@ -1361,7 +1361,7 @@ void term_gotline(char *cmdstr) {
   if(cmdstr) {
     if(*cmdstr) {
       add_history(cmdstr);
-      // only quit/abort returns a value > 0
+      // Only quit returns a value > 0
       if(process_line(cmdstr, term_pgm, term_p) > 0)
         term_running = 0;
     }
@@ -1373,14 +1373,18 @@ void term_gotline(char *cmdstr) {
      *
      * see https://github.com/avrdudes/avrdude/issues/1173
      */
-    rl_callback_handler_remove();
-    rl_callback_handler_install("avrdude> ", term_gotline);
+    if(term_running) {
+      rl_callback_handler_remove();
+      rl_callback_handler_install("avrdude> ", term_gotline);
+    }
   } else {
-    // call quit at end of file or terminal ^D
+    // End of file or terminal ^D
     term_out("\n");
     cmd_quit(term_pgm, term_p, 0, NULL);
     term_running = 0;
   }
+  if(!term_running)
+    rl_callback_handler_remove();
 }
 
 
@@ -1401,8 +1405,6 @@ int terminal_mode_interactive(PROGRAMMER *pgm, struct avrpart *p) {
       rl_callback_read_char();
   }
 
-  rl_callback_handler_remove();
-
   return pgm->flush_cache(pgm, p);
 }