diff --git a/src/syncterm/telnets.c b/src/syncterm/telnets.c
index 5cf741a21226d8f33254395cbf27901562b4a9da..0e0f4e89c472581cb5722e688d581fa18aaab087 100644
--- a/src/syncterm/telnets.c
+++ b/src/syncterm/telnets.c
@@ -25,8 +25,7 @@
 
 static SOCKET telnets_sock;
 static CRYPT_SESSION telnets_session;
-static atomic_bool telnets_active = true;
-static pthread_once_t telnets_active_once = PTHREAD_ONCE_INIT;
+static atomic_bool telnets_active = false;
 static pthread_mutex_t telnets_mutex;
 
 void
@@ -38,7 +37,7 @@ telnets_input_thread(void *args)
 	size_t buffer;
 	SetThreadName("TelnetS Input");
 	conn_api.input_thread_running = 1;
-	while (atomic_load(&telnets_active) && !conn_api.terminate) {
+	while (telnets_active && !conn_api.terminate) {
 		if (!socket_readable(telnets_sock, 100))
 			continue;
 		pthread_mutex_lock(&telnets_mutex);
@@ -50,11 +49,11 @@ telnets_input_thread(void *args)
 			continue;
 		if (cryptStatusError(status)) {
 			if ((status == CRYPT_ERROR_COMPLETE) || (status == CRYPT_ERROR_READ)) { /* connection closed */
-				atomic_store(&telnets_active, false);
+				telnets_active = false;
 				break;
 			}
 			cryptlib_error_message(status, "recieving data");
-			atomic_store(&telnets_active, false);
+			telnets_active = false;
 			break;
 		}
 		else {
@@ -78,24 +77,24 @@ telnets_output_thread(void *args)
 	int    status;
 	SetThreadName("TelnetS Output");
 	conn_api.output_thread_running = 1;
-	while (atomic_load(&telnets_active) && !conn_api.terminate) {
+	while (telnets_active && !conn_api.terminate) {
 		pthread_mutex_lock(&(conn_outbuf.mutex));
 		wr = conn_buf_wait_bytes(&conn_outbuf, 1, 100);
 		if (wr) {
 			wr = conn_buf_get(&conn_outbuf, conn_api.wr_buf, conn_api.wr_buf_size);
 			pthread_mutex_unlock(&(conn_outbuf.mutex));
 			sent = 0;
-			while (atomic_load(&telnets_active) && sent < wr) {
+			while (telnets_active && sent < wr) {
 				pthread_mutex_lock(&telnets_mutex);
 				status = cryptPushData(telnets_session, conn_api.wr_buf + sent, wr - sent, &ret);
 				pthread_mutex_unlock(&telnets_mutex);
 				if (cryptStatusError(status)) {
 					if (status == CRYPT_ERROR_COMPLETE) { /* connection closed */
-						atomic_store(&telnets_active, false);
+						telnets_active = false;
 						break;
 					}
 					cryptlib_error_message(status, "sending data");
-					atomic_store(&telnets_active, false);
+					telnets_active = false;
 					break;
 				}
 				sent += ret;
@@ -113,14 +112,6 @@ telnets_output_thread(void *args)
 	conn_api.output_thread_running = 2;
 }
 
-static void
-init_once(void)
-{
-	// We do this with a once because there's no destroy function, and it may not be lock-free
-	atomic_init(&telnets_active, false);
-}
-
-
 int
 telnets_connect(struct bbslist *bbs)
 {
@@ -130,8 +121,7 @@ telnets_connect(struct bbslist *bbs)
 	if (!bbs->hidepopups)
 		init_uifc(true, true);
 	pthread_mutex_init(&telnets_mutex, NULL);
-	pthread_once(&telnets_active_once, init_once);
-	atomic_store(&telnets_active, false);
+	telnets_active = false;
 
 	telnets_sock = conn_socket_connect(bbs);
 	if (telnets_sock == INVALID_SOCKET)
@@ -189,7 +179,7 @@ telnets_connect(struct bbslist *bbs)
 		return -1;
 	}
 
-	atomic_store(&telnets_active, true);
+	telnets_active = true;
 	if (!bbs->hidepopups) {
                 /* Clear ownership */
 		uifc.pop(NULL); // TODO: Why is this called twice?
@@ -203,7 +193,7 @@ telnets_connect(struct bbslist *bbs)
 		conn_api.terminate = 1;
 		if (!bbs->hidepopups)
 			uifc.pop(NULL);
-		atomic_store(&telnets_active, false);
+		telnets_active = false;
 		return -1;
 	}
 	if (!bbs->hidepopups)
@@ -233,7 +223,7 @@ telnets_close(void)
 	char garbage[1024];
 	conn_api.terminate = 1;
 	cryptSetAttribute(telnets_session, CRYPT_SESSINFO_ACTIVE, 0);
-	atomic_store(&telnets_active, false);
+	telnets_active = false;
 	while (conn_api.input_thread_running == 1 || conn_api.output_thread_running == 1) {
 		conn_recv_upto(garbage, sizeof(garbage), 0);
 		SLEEP(1);