diff --git a/src/sbbs3/execnet.cpp b/src/sbbs3/execnet.cpp
index 6cdf9301c5233b6dcf69149d8a227a3e134aefd1..852a59863fb8b500ae745635b177470178979e82 100644
--- a/src/sbbs3/execnet.cpp
+++ b/src/sbbs3/execnet.cpp
@@ -793,8 +793,22 @@ bool sbbs_t::ftp_put(csi_t* csi, SOCKET ctrl_sock, char* src, char* dest)
 			close_socket(data_sock);
 			return(false);
 		}
+	}
 
-	} else {	/* Normal (Active) FTP */
+	if((fp=fopen(src,"rb"))==NULL) {
+		close_socket(data_sock);
+		return(false);
+	}
+
+	sprintf(cmd,"STOR %s",dest);
+
+	if(!ftp_cmd(csi,ctrl_sock,cmd,rsp) 
+		|| atoi(rsp)!=150 /* Open data connection */) {
+		close_socket(data_sock);
+		return(false);
+	}
+
+	if(!(csi->ftp_mode&CS_FTP_PASV)) {	/* Normal (Active) FTP */
 
 		/* Setup for select() */
 		tv.tv_sec=TIMEOUT_SOCK_LISTEN;
@@ -824,22 +838,8 @@ bool sbbs_t::ftp_put(csi_t* csi, SOCKET ctrl_sock, char* src, char* dest)
 		data_sock=accept_sock;
 	}
 
-	if((fp=fopen(src,"rb"))==NULL) {
-		close_socket(data_sock);
-		return(false);
-	}
-
-	sprintf(cmd,"STOR %s",dest);
-
-	if(!ftp_cmd(csi,ctrl_sock,cmd,rsp) 
-		|| atoi(rsp)!=150 /* Open data connection */) {
-		close_socket(data_sock);
-		return(false);
-	}
-
 	while(online && !feof(fp)) {
 
-
 		rd=fread(buf,sizeof(char),sizeof(buf),fp);
 		if(rd<1) /* EOF or READ error */
 			break;