diff --git a/src/sbbs3/execnet.cpp b/src/sbbs3/execnet.cpp
index fac39ad1194f543ed849a9d52110ba64ad0116f0..6cdf9301c5233b6dcf69149d8a227a3e134aefd1 100644
--- a/src/sbbs3/execnet.cpp
+++ b/src/sbbs3/execnet.cpp
@@ -614,7 +614,7 @@ SOCKET sbbs_t::ftp_data_sock(csi_t* csi, SOCKET ctrl_sock, SOCKADDR_IN* addr)
 
 		ip_addr.dw=ntohl(ctrl_addr.sin_addr.s_addr);
 		port.w=ntohs(addr->sin_port);
-		sprintf(cmd,"PORT %u,%u,%u,%u,%hu,%hu"
+		sprintf(cmd,"PORT %u,%u,%u,%u,%u,%u"
 			,ip_addr.b[3]
 			,ip_addr.b[2]
 			,ip_addr.b[1]
@@ -666,8 +666,20 @@ bool sbbs_t::ftp_get(csi_t* csi, SOCKET ctrl_sock, char* src, char* dest, bool d
 			close_socket(data_sock);
 			return(false);
 		}
+	}
 
-	} else {	/* Normal (Active) FTP */
+	if(dir)
+		sprintf(cmd,"LIST %s",src);
+	else
+		sprintf(cmd,"RETR %s",src);
+
+	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;
@@ -697,17 +709,6 @@ bool sbbs_t::ftp_get(csi_t* csi, SOCKET ctrl_sock, char* src, char* dest, bool d
 		data_sock=accept_sock;
 	}
 
-	if(dir)
-		sprintf(cmd,"LIST %s",src);
-	else
-		sprintf(cmd,"RETR %s",src);
-
-	if(!ftp_cmd(csi,ctrl_sock,cmd,rsp) 
-		|| atoi(rsp)!=150 /* Open data connection */) {
-		close_socket(data_sock);
-		return(false);
-	}
-
 	if(!dir)
 		if((fp=fopen(dest,"wb"))==NULL) {
 			close_socket(data_sock);