diff --git a/src/sbbs3/dosxtrn/dosxtrn.c b/src/sbbs3/dosxtrn/dosxtrn.c
index 9cca3b56b9b01fe6deb02917c57123bebed4bd43..336a9683df2719f9eb1d529e33d72dce84b89a94 100644
--- a/src/sbbs3/dosxtrn/dosxtrn.c
+++ b/src/sbbs3/dosxtrn/dosxtrn.c
@@ -46,6 +46,8 @@
 #include "isvbop.h"			/* ddk\inc */
 #include "fossdefs.h"
 
+#define VDD_FILENAME	"sbbsexec.dll"
+
 /****************************************************************************/
 /* Truncates white-space chars off end of 'str' and terminates at first tab */
 /****************************************************************************/
@@ -459,7 +461,7 @@ char* getfname(const char* path)
 	return((char*)fname);
 }
 
-char *	DllName		="SBBSEXEC.DLL";
+char *	DllName		=VDD_FILENAME;
 char *	InitFunc	="VDDInitialize";
 char *	DispFunc	="VDDDispatch";
 
@@ -493,7 +495,7 @@ int main(int argc, char **argv)
 	sprintf(exec_dir,"%.*s",sizeof(exec_dir)-1,argv[0]);
 	p=getfname(exec_dir);
 	*p=0;
-	sprintf(dll,"%ssbbsexec.dll",exec_dir);
+	sprintf(dll,"%s%s",exec_dir,VDD_FILENAME);
 	DllName=dll;
 
 	if(argc>2 && !strcmp(argv[2],"NT")) 
@@ -545,22 +547,33 @@ int main(int argc, char **argv)
 
 	if(NT) {	/* Windows NT/2000 */
 
-		/* Register VDD */
-       	_asm {
-			push	es
-			push	ds
-			pop		es
-			mov     si, DllName		; ds:si = dll name
-		    mov     di, InitFunc    ; es:di = init routine
-			mov     bx, DispFunc    ; ds:bx = dispatch routine
-		};
-		RegisterModule();
-		_asm {
-			mov		vdd, ax
-			jc		err
-			mov		success, TRUE
-			err:
-			pop		es
+		for(i=0;i<2;i++) {
+
+			/* Register VDD */
+       		_asm {
+				push	es
+				push	ds
+				pop		es
+				mov     si, DllName		; ds:si = dll name
+				mov     di, InitFunc    ; es:di = init routine
+				mov     bx, DispFunc    ; ds:bx = dispatch routine
+#if 1	/* Vista work-around, apparently doesn't support an InitFunc (RegisterModule fails with AX=1) */
+				xor		di,di
+				mov		es,di
+#endif
+
+			};
+			RegisterModule();
+			_asm {
+				mov		vdd, ax
+				jc		err
+				mov		success, TRUE
+				err:
+				pop		es
+			}
+			if(success)
+				break;
+			DllName=VDD_FILENAME;	/* try again with no path (for Windows Vista) */
 		}
 		if(!success) {
 			fprintf(stderr,"Error %d loading %s\n",vdd,DllName);
@@ -655,5 +668,6 @@ int main(int argc, char **argv)
 		UnRegisterModule();
 
 	}
+
 	return(i);
 }