diff --git a/src/syncterm/modem.c b/src/syncterm/modem.c
index 1a6eb56eda6c63be32766894b2f77ecba8352c36..f716dea04aba67f4e749c55bbeabcffb209cafea 100644
--- a/src/syncterm/modem.c
+++ b/src/syncterm/modem.c
@@ -22,8 +22,13 @@ void modem_input_thread(void *args)
 	int		rd;
 	int	buffered;
 	size_t	buffer;
+	BOOL	monitor_dsr=TRUE;
 
 	conn_api.input_thread_running=1;
+	if(args != NULL) {
+		if((comGetModemStatus(com)&COM_DSR) == 0)
+			monitor_dsr=FALSE;
+	}
 	while(com != COM_HANDLE_INVALID && !conn_api.terminate) {
 		rd=comReadBuf(com, conn_api.rd_buf, conn_api.rd_buf_size, NULL, 100);
 		buffered=0;
@@ -37,7 +42,7 @@ void modem_input_thread(void *args)
 			if((comGetModemStatus(com)&COM_DCD) == 0)
 				break;
 		}
-		else {
+		else if(monitor_dsr) {
 			if((comGetModemStatus(com)&COM_DSR) == 0)
 				break;
 		}
@@ -52,8 +57,13 @@ void modem_output_thread(void *args)
 	int		wr;
 	int		ret;
 	int	sent;
+	BOOL	monitor_dsr=TRUE;
 
 	conn_api.output_thread_running=1;
+	if(args != NULL) {
+		if((comGetModemStatus(com)&COM_DSR) == 0)
+			monitor_dsr=FALSE;
+	}
 	while(com != COM_HANDLE_INVALID && !conn_api.terminate) {
 		pthread_mutex_lock(&(conn_outbuf.mutex));
 		wr=conn_buf_wait_bytes(&conn_outbuf, 1, 100);
@@ -76,7 +86,7 @@ void modem_output_thread(void *args)
 			if((comGetModemStatus(com)&COM_DCD) == 0)
 				break;
 		}
-		else {
+		else if(monitor_dsr) {
 			if((comGetModemStatus(com)&COM_DSR) == 0)
 				break;
 		}