diff --git a/src/syncterm/ssh.c b/src/syncterm/ssh.c
index e2be607e3863c19ab846fe1dbc4f998059c11b3f..0fa6f3d804cac6f725516b2ac00cbf0df4a58273 100644
--- a/src/syncterm/ssh.c
+++ b/src/syncterm/ssh.c
@@ -67,27 +67,27 @@ void ssh_input_thread(void *args)
 		}
 		if(rd == 0)
 			continue;
-		while(rd) {
-			pthread_mutex_lock(&ssh_mutex);
-			status=cl.PopData(ssh_session, conn_api.rd_buf, conn_api.rd_buf_size, &rd);
-			pthread_mutex_unlock(&ssh_mutex);
-			if(cryptStatusError(status)) {
-				if(status==CRYPT_ERROR_COMPLETE || status == CRYPT_ERROR_READ) {	/* connection closed */
-					ssh_active=FALSE;
-					break;
-				}
-				cryptlib_error_message(status, "recieving data");
+
+		pthread_mutex_lock(&ssh_mutex);
+		status=cl.PopData(ssh_session, conn_api.rd_buf, conn_api.rd_buf_size, &rd);
+		pthread_mutex_unlock(&ssh_mutex);
+
+		if(cryptStatusError(status)) {
+			if(status==CRYPT_ERROR_COMPLETE || status == CRYPT_ERROR_READ) {	/* connection closed */
 				ssh_active=FALSE;
 				break;
 			}
-			else {
-				buffered=0;
-				while(buffered < rd) {
-					pthread_mutex_lock(&(conn_inbuf.mutex));
-					buffer=conn_buf_wait_free(&conn_inbuf, rd-buffered, 100);
-					buffered+=conn_buf_put(&conn_inbuf, conn_api.rd_buf+buffered, buffer);
-					pthread_mutex_unlock(&(conn_inbuf.mutex));
-				}
+			cryptlib_error_message(status, "recieving data");
+			ssh_active=FALSE;
+			break;
+		}
+		else {
+			buffered=0;
+			while(buffered < rd) {
+				pthread_mutex_lock(&(conn_inbuf.mutex));
+				buffer=conn_buf_wait_free(&conn_inbuf, rd-buffered, 100);
+				buffered+=conn_buf_put(&conn_inbuf, conn_api.rd_buf+buffered, buffer);
+				pthread_mutex_unlock(&(conn_inbuf.mutex));
 			}
 		}
 	}
@@ -278,6 +278,18 @@ int ssh_connect(struct bbslist *bbs)
 	ssh_active=TRUE;
 	uifc.pop(NULL);
 
+	/* Clear ownership */
+	uifc.pop(NULL);
+	uifc.pop("Clearing Ownership");
+	status=cl.SetAttribute(ssh_session, CRYPT_PROPERTY_OWNER, CRYPT_UNUSED);
+	if(cryptStatusError(status)) {
+		cryptlib_error_message(status, "clearing session ownership");
+		conn_api.terminate=1;
+		uifc.pop(NULL);
+		return(-1);
+	}
+	uifc.pop(NULL);
+
 	create_conn_buf(&conn_inbuf, BUFFER_SIZE);
 	create_conn_buf(&conn_outbuf, BUFFER_SIZE);
 	conn_api.rd_buf=(unsigned char *)malloc(BUFFER_SIZE);