diff --git a/src/sbbs3/xtrn.cpp b/src/sbbs3/xtrn.cpp
index ea7333e642dc6b8d7dd3ce1d7591381f88d067e1..68899d88cc5ec5991e22f140e6f3fa11792013c3 100644
--- a/src/sbbs3/xtrn.cpp
+++ b/src/sbbs3/xtrn.cpp
@@ -495,6 +495,7 @@ int sbbs_t::external(char* cmdline, long mode, char* startup_dir)
     		// Wait for notification from VXD that new VM has started
 			if((retval=WaitForSingleObject(start_event, 5000))!=WAIT_OBJECT_0) {
 				XTRN_CLEANUP;
+                TerminateProcess(process_info.hProcess, __LINE__);
 				errormsg(WHERE, ERR_TIMEOUT, "start_event", retval);
 				return(GetLastError());
 			}
@@ -513,6 +514,7 @@ int sbbs_t::external(char* cmdline, long mode, char* startup_dir)
 				NULL					// Overlapped I/O
 				)) {
 				XTRN_CLEANUP;
+                TerminateProcess(process_info.hProcess, __LINE__);
 				errormsg(WHERE, ERR_IOCTL, SBBSEXEC_VXD, SBBSEXEC_IOCTL_COMPLETE);
 				return(GetLastError());
 			}