diff --git a/src/channel.c b/src/channel.c
index 40a3e95..d654dc0 100644
--- a/src/channel.c
+++ b/src/channel.c
@@ -5525,7 +5525,11 @@
  * Returns NULL when out of memory.
  */
     job_T *
-job_start(typval_T *argvars, char **argv_arg, jobopt_T *opt_arg)
+job_start(
+	typval_T    *argvars,
+	char	    **argv_arg,
+	jobopt_T    *opt_arg,
+	int	    is_terminal UNUSED)
 {
     job_T	*job;
     char_u	*cmd = NULL;
@@ -5679,7 +5683,7 @@
 	ch_log(NULL, "Starting job: %s", (char *)ga.ga_data);
 	ga_clear(&ga);
     }
-    mch_job_start(argv, job, &opt);
+    mch_job_start(argv, job, &opt, is_terminal);
 #else
     ch_log(NULL, "Starting job: %s", (char *)cmd);
     mch_job_start((char *)cmd, job, &opt);
diff --git a/src/evalfunc.c b/src/evalfunc.c
index 3cd3c3d..2bbeb25 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -7254,7 +7254,7 @@
     rettv->v_type = VAR_JOB;
     if (check_restricted() || check_secure())
 	return;
-    rettv->vval.v_job = job_start(argvars, NULL, NULL);
+    rettv->vval.v_job = job_start(argvars, NULL, NULL, FALSE);
 }
 
 /*
diff --git a/src/os_unix.c b/src/os_unix.c
index a9fb3b5..7188653 100644
--- a/src/os_unix.c
+++ b/src/os_unix.c
@@ -4159,7 +4159,11 @@
  * Set the environment for a child process.
  */
     static void
-set_child_environment(long rows, long columns, char *term)
+set_child_environment(
+	long	rows,
+	long	columns,
+	char	*term,
+	int	is_terminal UNUSED)
 {
 # ifdef HAVE_SETENV
     char	envbuf[50];
@@ -4169,7 +4173,9 @@
     static char	envbuf_Lines[20];
     static char	envbuf_Columns[20];
     static char	envbuf_Colors[20];
+#  ifdef FEAT_TERMINAL
     static char	envbuf_Version[20];
+#  endif
 #  ifdef FEAT_CLIENTSERVER
     static char	envbuf_Servername[60];
 #  endif
@@ -4190,8 +4196,13 @@
     setenv("COLUMNS", (char *)envbuf, 1);
     sprintf((char *)envbuf, "%ld", colors);
     setenv("COLORS", (char *)envbuf, 1);
-    sprintf((char *)envbuf, "%ld",  get_vim_var_nr(VV_VERSION));
-    setenv("VIM_TERMINAL", (char *)envbuf, 1);
+#  ifdef FEAT_TERMINAL
+    if (is_terminal)
+    {
+	sprintf((char *)envbuf, "%ld",  get_vim_var_nr(VV_VERSION));
+	setenv("VIM_TERMINAL", (char *)envbuf, 1);
+    }
+#  endif
 #  ifdef FEAT_CLIENTSERVER
     setenv("VIM_SERVERNAME", serverName == NULL ? "" : (char *)serverName, 1);
 #  endif
@@ -4212,9 +4223,14 @@
     putenv(envbuf_Columns);
     vim_snprintf(envbuf_Colors, sizeof(envbuf_Colors), "COLORS=%ld", colors);
     putenv(envbuf_Colors);
-    vim_snprintf(envbuf_Version, sizeof(envbuf_Version), "VIM_TERMINAL=%ld",
-						   get_vim_var_nr(VV_VERSION));
-    putenv(envbuf_Version);
+#  ifdef FEAT_TERMINAL
+    if (is_terminal)
+    {
+	vim_snprintf(envbuf_Version, sizeof(envbuf_Version),
+			       "VIM_TERMINAL=%ld", get_vim_var_nr(VV_VERSION));
+	putenv(envbuf_Version);
+    }
+#  endif
 #  ifdef FEAT_CLIENTSERVER
     vim_snprintf(envbuf_Servername, sizeof(envbuf_Servername),
 	    "VIM_SERVERNAME=%s", serverName == NULL ? "" : (char *)serverName);
@@ -4224,9 +4240,9 @@
 }
 
     static void
-set_default_child_environment(void)
+set_default_child_environment(int is_terminal)
 {
-    set_child_environment(Rows, Columns, "dumb");
+    set_child_environment(Rows, Columns, "dumb", is_terminal);
 }
 #endif
 
@@ -4689,7 +4705,7 @@
 #  endif
 		}
 # endif
-		set_default_child_environment();
+		set_default_child_environment(FALSE);
 
 		/*
 		 * stderr is only redirected when using the GUI, so that a
@@ -5367,7 +5383,7 @@
 
 #if defined(FEAT_JOB_CHANNEL) || defined(PROTO)
     void
-mch_job_start(char **argv, job_T *job, jobopt_T *options)
+mch_job_start(char **argv, job_T *job, jobopt_T *options, int is_terminal)
 {
     pid_t	pid;
     int		fd_in[2] = {-1, -1};	/* for stdin */
@@ -5515,11 +5531,12 @@
 	    set_child_environment(
 		    (long)options->jo_term_rows,
 		    (long)options->jo_term_cols,
-		    term);
+		    term,
+		    is_terminal);
 	}
 	else
 # endif
-	    set_default_child_environment();
+	    set_default_child_environment(is_terminal);
 
 	if (options->jo_env != NULL)
 	{
diff --git a/src/os_win32.c b/src/os_win32.c
index 3b0291e..f340949 100644
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -5275,26 +5275,31 @@
 	}
     }
 
-    if (is_terminal)
+# if defined(FEAT_CLIENTSERVER) || defined(FEAT_TERMINAL)
     {
-# ifdef FEAT_CLIENTSERVER
+#  ifdef FEAT_CLIENTSERVER
 	char_u	*servername = get_vim_var_str(VV_SEND_SERVER);
 	size_t	servername_len = STRLEN(servername);
-# endif
+#  endif
+#  ifdef FEAT_TERMINAL
 	char_u	*version = get_vim_var_str(VV_VERSION);
 	size_t	version_len = STRLEN(version);
+#  endif
 	// size of "VIM_SERVERNAME=" and value,
 	// plus "VIM_TERMINAL=" and value,
 	// plus two terminating NULs
 	size_t	n = 0
-# ifdef FEAT_CLIENTSERVER
+#  ifdef FEAT_CLIENTSERVER
 		    + 15 + servername_len
-# endif
-		    + 13 + version_len + 2;
+#  endif
+#  ifdef FEAT_TERMINAL
+		    + 13 + version_len + 2
+#  endif
+		    ;
 
 	if (ga_grow(gap, (int)n) == OK)
 	{
-# ifdef FEAT_CLIENTSERVER
+#  ifdef FEAT_CLIENTSERVER
 	    for (n = 0; n < 15; n++)
 		*((WCHAR*)gap->ga_data + gap->ga_len++) =
 		    (WCHAR)"VIM_SERVERNAME="[n];
@@ -5302,14 +5307,19 @@
 		*((WCHAR*)gap->ga_data + gap->ga_len++) =
 		    (WCHAR)servername[n];
 	    *((WCHAR*)gap->ga_data + gap->ga_len++) = L'\0';
-# endif
-	    for (n = 0; n < 13; n++)
-		*((WCHAR*)gap->ga_data + gap->ga_len++) =
-		    (WCHAR)"VIM_TERMINAL="[n];
-	    for (n = 0; n < version_len; n++)
-		*((WCHAR*)gap->ga_data + gap->ga_len++) =
-		    (WCHAR)version[n];
-	    *((WCHAR*)gap->ga_data + gap->ga_len++) = L'\0';
+#  endif
+#  ifdef FEAT_TERMINAL
+	    if (is_terminal)
+	    {
+		for (n = 0; n < 13; n++)
+		    *((WCHAR*)gap->ga_data + gap->ga_len++) =
+			(WCHAR)"VIM_TERMINAL="[n];
+		for (n = 0; n < version_len; n++)
+		    *((WCHAR*)gap->ga_data + gap->ga_len++) =
+			(WCHAR)version[n];
+		*((WCHAR*)gap->ga_data + gap->ga_len++) = L'\0';
+	    }
+#  endif
 	}
     }
 }
diff --git a/src/proto/channel.pro b/src/proto/channel.pro
index e6c9508..5326276 100644
--- a/src/proto/channel.pro
+++ b/src/proto/channel.pro
@@ -66,7 +66,7 @@
 void job_stop_on_exit(void);
 int has_pending_job(void);
 void job_check_ended(void);
-job_T *job_start(typval_T *argvars, char **argv_arg, jobopt_T *opt_arg);
+job_T *job_start(typval_T *argvars, char **argv_arg, jobopt_T *opt_arg, int is_terminal);
 char *job_status(job_T *job);
 void job_info(job_T *job, dict_T *dict);
 void job_info_all(list_T *l);
diff --git a/src/proto/os_unix.pro b/src/proto/os_unix.pro
index 5d90c0e..262a8d5 100644
--- a/src/proto/os_unix.pro
+++ b/src/proto/os_unix.pro
@@ -62,7 +62,7 @@
 void mch_new_shellsize(void);
 void may_send_sigint(int c, pid_t pid, pid_t wpid);
 int mch_call_shell(char_u *cmd, int options);
-void mch_job_start(char **argv, job_T *job, jobopt_T *options);
+void mch_job_start(char **argv, job_T *job, jobopt_T *options, int is_terminal);
 char *mch_job_status(job_T *job);
 job_T *mch_detect_ended_job(job_T *job_list);
 int mch_signal_job(job_T *job, char_u *how);
diff --git a/src/terminal.c b/src/terminal.c
index 275a5a7..9b7bc03 100644
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -5769,7 +5769,7 @@
 #endif
 
     /* This may change a string in "argvar". */
-    term->tl_job = job_start(argvar, argv, opt);
+    term->tl_job = job_start(argvar, argv, opt, TRUE);
     if (term->tl_job != NULL)
 	++term->tl_job->jv_refcount;
 
diff --git a/src/version.c b/src/version.c
index 770eea8..29cb801 100644
--- a/src/version.c
+++ b/src/version.c
@@ -762,6 +762,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    50,
+/**/
     49,
 /**/
     48,
