diff --git a/src/sbbs3/js_socket.c b/src/sbbs3/js_socket.c
index 99d5ab3dbefd12ce35dbcee6d8799cc9347bb62e..bb107564e450dcdf4779a0ea7ba890590355feda 100644
--- a/src/sbbs3/js_socket.c
+++ b/src/sbbs3/js_socket.c
@@ -1114,8 +1114,6 @@ static JSBool js_socket_get(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
 	BOOL		rd;
 	BOOL		wr;
 	private_t*	p;
-	socklen_t	addr_len;
-	SOCKADDR_IN	addr;
 	JSString*	js_str;
 
 	if((p=(private_t*)JS_GetPrivate(cx,obj))==NULL) {
@@ -1179,7 +1177,7 @@ static JSBool js_socket_get(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
 				*vp=JSVAL_VOID;
 			break;
 		case SOCK_PROP_REMOTE_IP:
-			if(p->is_connected) {
+			if(p->is_connected || p->external) {
 				if((js_str=JS_NewStringCopyZ(cx,inet_ntoa(p->remote_addr.sin_addr)))==NULL)
 					return(JS_FALSE);
 				*vp = STRING_TO_JSVAL(js_str);
@@ -1188,7 +1186,7 @@ static JSBool js_socket_get(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
 				*vp=JSVAL_VOID;
 			break;
 		case SOCK_PROP_REMOTE_PORT:
-			if(p->is_connected)
+			if(p->is_connected || p->external)
 				*vp = INT_TO_JSVAL(ntohs(p->remote_addr.sin_port));
 			else
 				*vp=JSVAL_VOID;
@@ -1467,6 +1465,12 @@ JSObject* DLLCALL js_CreateSocketObject(JSContext* cx, JSObject* parent, char *n
 	p->external = TRUE;
 	p->network_byte_order = TRUE;
 
+	len=sizeof(p->local_addr);
+	getsockname(p->sock, (struct sockaddr *)&p->local_addr,&len);
+
+	len=sizeof(p->remote_addr);
+	getpeername(p->sock, (struct sockaddr *)&p->remote_addr,&len);
+
 	if(!JS_SetPrivate(cx, obj, p)) {
 		dbprintf(TRUE, p, "JS_SetPrivate failed");
 		return(NULL);