diff --git a/src/process.c b/src/process.c
index da9188d..6194d65 100644
--- a/src/process.c
+++ b/src/process.c
@@ -5885,7 +5885,7 @@ char *arg;
  * -f, -f0, -f1, -fy, -fa
  * -t title, -T terminal-type, -h height-of-scrollback, 
  * -ln, -l0, -ly, -l1, -l
- * -a, -M, -L
+ * -a, -M, -L, -zy, -zn
  */
 void
 DoScreen(fn, av)
@@ -5978,6 +5978,18 @@ char *fn, **av;
 	case 'L':
 	  nwin.Lflag = 1;
 	  break;
+	case 'z':
+	  switch (av[0][2])
+	    {
+	    case 'y':
+	      nwin.zombie = 1;
+	      break;
+	    case 'n':
+	      nwin.zombie = 0;
+              break;
+	    }
+	  break;
+
 	default:
 	  Msg(0, "%s: screen: invalid option -%c.", fn, av[0][1]);
 	  break;
diff --git a/src/screen.c b/src/screen.c
index 3dde3b4..0ae1a07 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -654,6 +654,20 @@ char **av;
 		      exit_with_usage(myname, "%s: Unknown suboption to -l", --ap);
 		    }
 		  break;
+		case 'z':
+		  ap++;
+		  switch (*ap++)
+		    {
+		    case 'y':
+		      nwin_options.zombie = 1;
+		      break;
+		    case 'n':
+		      nwin_options.zombie = 0;
+                      break;
+		    default:
+		      exit_with_usage(myname, "%s: Unknown suboption to -z", --ap);
+		    }
+		  break;
 		case 'w':
 		  lsflag = 1;
 		  wipeflag = 1;
@@ -1501,6 +1515,9 @@ int wstat_valid;
   if (ZombieKey_destroy && ZombieKey_onerror && wstat_valid &&
       WIFEXITED(wstat) && WEXITSTATUS(wstat) == 0)
 	killit = 1;
+  if (!killit && !p->w_zombie){
+      killit = 1;
+  }
 
   if (ZombieKey_destroy && !killit)
     {
diff --git a/src/screen.h b/src/screen.h
index 5c93f32..c4e3df1 100644
--- a/src/screen.h
+++ b/src/screen.h
@@ -183,7 +183,7 @@ struct mode
  * 					 carried version 1, but should have carried 2.
  * 2:	screen version 4.1.0devel	(revisions 8b46d8a upto YYYYYYY)
  */
-#define MSG_VERSION	2
+#define MSG_VERSION	3
 
 #define MSG_REVISION	(('m'<<24) | ('s'<<16) | ('g'<<8) | MSG_VERSION)
 struct msg
@@ -200,6 +200,7 @@ struct msg
 	  int flowflag;
 	  int hheight;		/* size of scrollback buffer */
 	  int nargs;
+	  int zombie;
 	  char line[MAXPATHLEN];
 	  char dir[MAXPATHLEN];
 	  char screenterm[20];	/* is screen really "screen" ? */
diff --git a/src/socket.c b/src/socket.c
index 940034d..e2b6bdb 100644
--- a/src/socket.c
+++ b/src/socket.c
@@ -677,6 +677,7 @@ struct NewWindow *nwin;
   m.m.create.flowflag = nwin->flowflag;
   m.m.create.lflag = nwin->lflag;
   m.m.create.hheight = nwin->histheight;
+  m.m.create.zombie = nwin->zombie;
   if (getcwd(m.m.create.dir, sizeof(m.m.create.dir)) == 0)
     {
       Msg(errno, "getcwd");
@@ -761,6 +762,7 @@ struct msg *mp;
   if (*mp->m.create.dir)
     nwin.dir = mp->m.create.dir;
   nwin.lflag = mp->m.create.lflag;
+  nwin.zombie = mp->m.create.zombie;
   nwin.histheight = mp->m.create.hheight;
   if (*mp->m.create.screenterm)
     nwin.term =  mp->m.create.screenterm;
diff --git a/src/window.c b/src/window.c
index 55bcf5d..c4b2d22 100644
--- a/src/window.c
+++ b/src/window.c
@@ -136,6 +136,7 @@ struct NewWindow nwin_undef   =
   -1, 		/* c1 */
   -1, 		/* bce */
   -1, 		/* encoding */
+  -1, 		/* zombie */
   (char *)0,	/* hstatus */
   (char *)0	/* charset */
 };
@@ -161,6 +162,7 @@ struct NewWindow nwin_default =
   1,		/* c1 */
   0,		/* bce */
   0,		/* encoding */
+  1,		/* zombie */
   (char *)0,	/* hstatus */
   (char *)0	/* charset */
 };
@@ -194,6 +196,7 @@ struct NewWindow *def, *new, *res;
   COMPOSE(c1);
   COMPOSE(bce);
   COMPOSE(encoding);
+  COMPOSE(zombie);
   COMPOSE(hstatus);
   COMPOSE(charset);
 #undef COMPOSE
@@ -623,6 +626,7 @@ struct NewWindow *newwin;
 #endif
 
   p->w_type = type;
+  p->w_zombie = nwin.zombie;
 
   /* save the command line so that zombies can be resurrected */
   for (i = 0; nwin.args[i] && i < MAXARGS - 1; i++)
diff --git a/src/window.h b/src/window.h
index 7311ecb..950b672 100644
--- a/src/window.h
+++ b/src/window.h
@@ -55,6 +55,7 @@ struct NewWindow
   int   c1;
   int   bce;
   int   encoding;
+  int   zombie;
   char	*hstatus;
   char	*charset;
 };
@@ -212,6 +213,7 @@ struct win
   int	 w_gr;			/* enable GR flag */
   int	 w_c1;			/* enable C1 flag */
   int	 w_bce;			/* enable backcol erase */
+  int	 w_zombie;		/* zombie */
 #if 0
   int    w_encoding;		/* for input and paste */
 #endif
