diff --git a/src/Make_bc5.mak b/src/Make_bc5.mak
index 012866b..532160f 100644
--- a/src/Make_bc5.mak
+++ b/src/Make_bc5.mak
@@ -464,7 +464,7 @@
 !endif
 
 !if ("$(CHANNEL)"=="yes")
-DEFINES = $(DEFINES) -DFEAT_CHANNEL
+DEFINES = $(DEFINES) -DFEAT_JOB_CHANNEL
 !endif
 
 !ifdef XPM
diff --git a/src/Make_cyg_ming.mak b/src/Make_cyg_ming.mak
index f6ab0db..d6e0d0a 100644
--- a/src/Make_cyg_ming.mak
+++ b/src/Make_cyg_ming.mak
@@ -529,7 +529,7 @@
 endif
 
 ifeq ($(CHANNEL),yes)
-DEFINES += -DFEAT_CHANNEL
+DEFINES += -DFEAT_JOB_CHANNEL
 endif
 
 # DirectWrite (DirectX)
diff --git a/src/Make_mvc.mak b/src/Make_mvc.mak
index 4378e00..841dbd4 100644
--- a/src/Make_mvc.mak
+++ b/src/Make_mvc.mak
@@ -332,7 +332,7 @@
 !if "$(CHANNEL)" == "yes"
 CHANNEL_PRO	= proto/channel.pro
 CHANNEL_OBJ	= $(OBJDIR)/channel.obj
-CHANNEL_DEFS	= -DFEAT_CHANNEL
+CHANNEL_DEFS	= -DFEAT_JOB_CHANNEL
 
 NETBEANS_LIB	= WSock32.lib
 !endif
diff --git a/src/auto/configure b/src/auto/configure
index bf0bfee..a708230 100755
--- a/src/auto/configure
+++ b/src/auto/configure
@@ -7427,7 +7427,7 @@
 
 fi
 if test "$enable_channel" = "yes"; then
-  $as_echo "#define FEAT_CHANNEL 1" >>confdefs.h
+  $as_echo "#define FEAT_JOB_CHANNEL 1" >>confdefs.h
 
   CHANNEL_SRC="channel.c"
 
diff --git a/src/channel.c b/src/channel.c
index f65b31f..e17fc52 100644
--- a/src/channel.c
+++ b/src/channel.c
@@ -12,7 +12,7 @@
 
 #include "vim.h"
 
-#if defined(FEAT_CHANNEL) || defined(PROTO)
+#if defined(FEAT_JOB_CHANNEL) || defined(PROTO)
 
 /* TRUE when netbeans is running with a GUI. */
 #ifdef FEAT_GUI
@@ -294,11 +294,7 @@
     channel->ch_id = next_ch_id++;
     ch_log(channel, "Created channel");
 
-#ifdef CHANNEL_PIPES
     for (part = PART_SOCK; part <= PART_IN; ++part)
-#else
-    part = PART_SOCK;
-#endif
     {
 	channel->ch_part[part].ch_fd = INVALID_FD;
 #ifdef FEAT_GUI_X11
@@ -330,10 +326,8 @@
 channel_still_useful(channel_T *channel)
 {
     int has_sock_msg;
-#ifdef CHANNEL_PIPES
     int	has_out_msg;
     int	has_err_msg;
-#endif
 
     /* If the job was killed the channel is not expected to work anymore. */
     if (channel->ch_job_killed && channel->ch_job == NULL)
@@ -348,24 +342,16 @@
     has_sock_msg = channel->ch_part[PART_SOCK].ch_fd != INVALID_FD
 	          || channel->ch_part[PART_SOCK].ch_head.rq_next != NULL
 		  || channel->ch_part[PART_SOCK].ch_json_head.jq_next != NULL;
-#ifdef CHANNEL_PIPES
     has_out_msg = channel->ch_part[PART_OUT].ch_fd != INVALID_FD
 		  || channel->ch_part[PART_OUT].ch_head.rq_next != NULL
 		  || channel->ch_part[PART_OUT].ch_json_head.jq_next != NULL;
     has_err_msg = channel->ch_part[PART_ERR].ch_fd != INVALID_FD
 		  || channel->ch_part[PART_ERR].ch_head.rq_next != NULL
 		  || channel->ch_part[PART_ERR].ch_json_head.jq_next != NULL;
-#endif
     return (channel->ch_callback != NULL && (has_sock_msg
-#ifdef CHANNEL_PIPES
-		|| has_out_msg || has_err_msg
-#endif
-		))
-#ifdef CHANNEL_PIPES
+		|| has_out_msg || has_err_msg))
 	    || (channel->ch_part[PART_OUT].ch_callback != NULL && has_out_msg)
-	    || (channel->ch_part[PART_ERR].ch_callback != NULL && has_err_msg)
-#endif
-	    ;
+	    || (channel->ch_part[PART_ERR].ch_callback != NULL && has_err_msg);
 }
 
 /*
@@ -507,12 +493,10 @@
 {
     if (channel->CH_SOCK_FD != INVALID_FD)
 	channel_gui_register_one(channel, PART_SOCK);
-# ifdef CHANNEL_PIPES
     if (channel->CH_OUT_FD != INVALID_FD)
 	channel_gui_register_one(channel, PART_OUT);
     if (channel->CH_ERR_FD != INVALID_FD)
 	channel_gui_register_one(channel, PART_ERR);
-# endif
 }
 
 /*
@@ -557,14 +541,8 @@
 {
     int	    part;
 
-#ifdef CHANNEL_PIPES
     for (part = PART_SOCK; part < PART_IN; ++part)
-#else
-    part = PART_SOCK;
-#endif
-    {
 	channel_gui_unregister_one(channel, part);
-    }
 }
 
 #endif
@@ -842,7 +820,6 @@
     return channel;
 }
 
-#if defined(CHANNEL_PIPES) || defined(PROTO)
     static void
 may_close_part(sock_T *fd)
 {
@@ -884,7 +861,6 @@
 # endif
     }
 }
-#endif
 
 /*
  * Sets the job the channel is associated with and associated options.
@@ -1897,10 +1873,7 @@
 channel_can_write_to(channel_T *channel)
 {
     return channel != NULL && (channel->CH_SOCK_FD != INVALID_FD
-#ifdef CHANNEL_PIPES
-			  || channel->CH_IN_FD != INVALID_FD
-#endif
-			  );
+			  || channel->CH_IN_FD != INVALID_FD);
 }
 
 /*
@@ -1911,12 +1884,9 @@
 channel_is_open(channel_T *channel)
 {
     return channel != NULL && (channel->CH_SOCK_FD != INVALID_FD
-#ifdef CHANNEL_PIPES
 			  || channel->CH_IN_FD != INVALID_FD
 			  || channel->CH_OUT_FD != INVALID_FD
-			  || channel->CH_ERR_FD != INVALID_FD
-#endif
-			  );
+			  || channel->CH_ERR_FD != INVALID_FD);
 }
 
 /*
@@ -1951,11 +1921,9 @@
 	sock_close(channel->CH_SOCK_FD);
 	channel->CH_SOCK_FD = INVALID_FD;
     }
-#if defined(CHANNEL_PIPES)
     may_close_part(&channel->CH_IN_FD);
     may_close_part(&channel->CH_OUT_FD);
     may_close_part(&channel->CH_ERR_FD);
-#endif
 
     if (invoke_close_cb && channel->ch_close_cb != NULL)
     {
@@ -2036,10 +2004,8 @@
 {
     ch_log(channel, "Clearing channel");
     channel_clear_one(channel, PART_SOCK);
-#ifdef CHANNEL_PIPES
     channel_clear_one(channel, PART_OUT);
     channel_clear_one(channel, PART_ERR);
-#endif
     vim_free(channel->ch_callback);
     channel->ch_callback = NULL;
     vim_free(channel->ch_close_cb);
@@ -2357,11 +2323,7 @@
 	for (channel = first_channel; channel != NULL;
 						   channel = channel->ch_next)
 	{
-#  ifdef CHANNEL_PIPES
 	    for (part = PART_SOCK; part < PART_IN; ++part)
-#  else
-	    part = PART_SOCK;
-#  endif
 		if (channel->ch_part[part].ch_fd == fd)
 		{
 		    *partp = part;
@@ -2386,13 +2348,8 @@
 
     for (channel = first_channel; channel != NULL; channel = channel->ch_next)
     {
-#  ifdef CHANNEL_PIPES
 	/* check the socket and pipes */
 	for (part = PART_SOCK; part <= PART_ERR; ++part)
-#  else
-	/* only check the socket */
-	part = PART_SOCK;
-#  endif
 	{
 	    fd = channel->ch_part[part].ch_fd;
 	    if (fd != INVALID_FD && channel_wait(channel, fd, 0) == OK)
@@ -2471,11 +2428,7 @@
 
     for (channel = first_channel; channel != NULL; channel = channel->ch_next)
     {
-#  ifdef CHANNEL_PIPES
 	for (part = PART_SOCK; part < PART_IN; ++part)
-#  else
-	part = PART_SOCK;
-#  endif
 	{
 	    if (channel->ch_part[part].ch_fd != INVALID_FD)
 	    {
@@ -2505,11 +2458,7 @@
 
     for (channel = first_channel; channel != NULL; channel = channel->ch_next)
     {
-#  ifdef CHANNEL_PIPES
 	for (part = PART_SOCK; part < PART_IN; ++part)
-#  else
-	part = PART_SOCK;
-#  endif
 	{
 	    int idx = channel->ch_part[part].ch_poll_idx;
 
@@ -2539,11 +2488,7 @@
 
     for (channel = first_channel; channel != NULL; channel = channel->ch_next)
     {
-#  ifdef CHANNEL_PIPES
 	for (part = PART_SOCK; part < PART_IN; ++part)
-#  else
-	part = PART_SOCK;
-#  endif
 	{
 	    sock_T fd = channel->ch_part[part].ch_fd;
 
@@ -2572,11 +2517,7 @@
 
     for (channel = first_channel; channel != NULL; channel = channel->ch_next)
     {
-#  ifdef CHANNEL_PIPES
 	for (part = PART_SOCK; part < PART_IN; ++part)
-#  else
-	part = PART_SOCK;
-#  endif
 	{
 	    sock_T fd = channel->ch_part[part].ch_fd;
 
@@ -2657,11 +2598,9 @@
 		continue;
 	    }
 	}
-#ifdef CHANNEL_PIPES
 	if (part < PART_ERR)
 	    ++part;
 	else
-#endif
 	{
 	    channel = channel->ch_next;
 	    part = PART_SOCK;
@@ -2692,11 +2631,7 @@
 
     for (channel = first_channel; channel != NULL; channel = channel->ch_next)
     {
-#ifdef CHANNEL_PIPES
 	for (part = PART_SOCK; part < PART_IN; ++part)
-#else
-	part = PART_SOCK;
-#endif
 	{
 	    jsonq_T *head = &channel->ch_part[part].ch_json_head;
 	    jsonq_T *item = head->jq_next;
@@ -2723,10 +2658,8 @@
     int
 channel_part_send(channel_T *channel)
 {
-#ifdef CHANNEL_PIPES
     if (channel->CH_SOCK_FD == INVALID_FD)
 	return PART_IN;
-#endif
     return PART_SOCK;
 }
 
@@ -2736,10 +2669,8 @@
     int
 channel_part_read(channel_T *channel)
 {
-#ifdef CHANNEL_PIPES
     if (channel->CH_SOCK_FD == INVALID_FD)
 	return PART_OUT;
-#endif
     return PART_SOCK;
 }
 
@@ -2764,4 +2695,4 @@
     return channel->ch_part[part].ch_timeout;
 }
 
-#endif /* FEAT_CHANNEL */
+#endif /* FEAT_JOB_CHANNEL */
diff --git a/src/config.h.in b/src/config.h.in
index f8475a1..9d35e48 100644
--- a/src/config.h.in
+++ b/src/config.h.in
@@ -432,7 +432,7 @@
 #undef FEAT_NETBEANS_INTG
 
 /* Define if you want to include process communication. */
-#undef FEAT_CHANNEL
+#undef FEAT_JOB_CHANNEL
 
 /* Define default global runtime path */
 #undef RUNTIME_GLOBAL
diff --git a/src/configure.in b/src/configure.in
index b618b8c..f29b62c 100644
--- a/src/configure.in
+++ b/src/configure.in
@@ -2014,7 +2014,7 @@
   AC_SUBST(NETBEANS_OBJ)
 fi
 if test "$enable_channel" = "yes"; then
-  AC_DEFINE(FEAT_CHANNEL)
+  AC_DEFINE(FEAT_JOB_CHANNEL)
   CHANNEL_SRC="channel.c"
   AC_SUBST(CHANNEL_SRC)
   CHANNEL_OBJ="objects/channel.o"
diff --git a/src/eval.c b/src/eval.c
index f3ebaa5..e78bbb0 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -496,14 +496,12 @@
 #ifdef FEAT_FLOAT
 static void f_ceil(typval_T *argvars, typval_T *rettv);
 #endif
-#ifdef FEAT_CHANNEL
+#ifdef FEAT_JOB_CHANNEL
 static void f_ch_close(typval_T *argvars, typval_T *rettv);
 static void f_ch_evalexpr(typval_T *argvars, typval_T *rettv);
 static void f_ch_evalraw(typval_T *argvars, typval_T *rettv);
 static void f_ch_getbufnr(typval_T *argvars, typval_T *rettv);
-# ifdef FEAT_JOB
 static void f_ch_getjob(typval_T *argvars, typval_T *rettv);
-# endif
 static void f_ch_log(typval_T *argvars, typval_T *rettv);
 static void f_ch_logfile(typval_T *argvars, typval_T *rettv);
 static void f_ch_open(typval_T *argvars, typval_T *rettv);
@@ -632,10 +630,8 @@
 static void f_isnan(typval_T *argvars, typval_T *rettv);
 #endif
 static void f_items(typval_T *argvars, typval_T *rettv);
-#ifdef FEAT_JOB
-# ifdef FEAT_CHANNEL
+#ifdef FEAT_JOB_CHANNEL
 static void f_job_getchannel(typval_T *argvars, typval_T *rettv);
-# endif
 static void f_job_setoptions(typval_T *argvars, typval_T *rettv);
 static void f_job_start(typval_T *argvars, typval_T *rettv);
 static void f_job_stop(typval_T *argvars, typval_T *rettv);
@@ -6236,11 +6232,11 @@
 	    return tv1->vval.v_float == tv2->vval.v_float;
 #endif
 	case VAR_JOB:
-#ifdef FEAT_JOB
+#ifdef FEAT_JOB_CHANNEL
 	    return tv1->vval.v_job == tv2->vval.v_job;
 #endif
 	case VAR_CHANNEL:
-#ifdef FEAT_CHANNEL
+#ifdef FEAT_JOB_CHANNEL
 	    return tv1->vval.v_channel == tv2->vval.v_channel;
 #endif
 	case VAR_UNKNOWN:
@@ -6926,7 +6922,7 @@
     abort = abort || set_ref_in_python3(copyID);
 #endif
 
-#ifdef FEAT_CHANNEL
+#ifdef FEAT_JOB_CHANNEL
     abort = abort || set_ref_in_channel(copyID);
 #endif
 
@@ -7738,7 +7734,7 @@
     return OK;
 }
 
-#if defined(FEAT_CHANNEL) || defined(PROTO)
+#if defined(FEAT_JOB_CHANNEL) || defined(PROTO)
 /*
  * Decrement the reference count on "channel" and maybe free it when it goes
  * down to zero.  Don't free it if there is a pending action.
@@ -7751,15 +7747,12 @@
 	return channel_may_free(channel);
     return FALSE;
 }
-#endif
 
-#if defined(FEAT_JOB) || defined(PROTO)
 static job_T *first_job = NULL;
 
     static void
 job_free(job_T *job)
 {
-# ifdef FEAT_CHANNEL
     ch_log(job->jv_channel, "Freeing job");
     if (job->jv_channel != NULL)
     {
@@ -7771,7 +7764,6 @@
 	job->jv_channel->ch_job = NULL;
 	channel_unref(job->jv_channel);
     }
-# endif
     mch_clear_job(job);
 
     if (job->jv_next != NULL)
@@ -7798,7 +7790,6 @@
 	{
 	    job_free(job);
 	}
-# ifdef FEAT_CHANNEL
 	else if (job->jv_channel != NULL)
 	{
 	    /* Do remove the link to the channel, otherwise it hangs
@@ -7807,7 +7798,6 @@
 	    channel_unref(job->jv_channel);
 	    job->jv_channel = NULL;
 	}
-# endif
     }
 }
 
@@ -8204,14 +8194,12 @@
 #ifdef FEAT_FLOAT
     {"ceil",		1, 1, f_ceil},
 #endif
-#ifdef FEAT_CHANNEL
+#ifdef FEAT_JOB_CHANNEL
     {"ch_close",	1, 1, f_ch_close},
     {"ch_evalexpr",	2, 3, f_ch_evalexpr},
     {"ch_evalraw",	2, 3, f_ch_evalraw},
     {"ch_getbufnr",	2, 2, f_ch_getbufnr},
-# ifdef FEAT_JOB
     {"ch_getjob",	1, 1, f_ch_getjob},
-# endif
     {"ch_log",		1, 2, f_ch_log},
     {"ch_logfile",	1, 2, f_ch_logfile},
     {"ch_open",		1, 2, f_ch_open},
@@ -8344,10 +8332,8 @@
     {"isnan",		1, 1, f_isnan},
 #endif
     {"items",		1, 1, f_items},
-#ifdef FEAT_JOB
-# ifdef FEAT_CHANNEL
+#ifdef FEAT_JOB_CHANNEL
     {"job_getchannel",	1, 1, f_job_getchannel},
-# endif
     {"job_setoptions",	2, 2, f_job_setoptions},
     {"job_start",	1, 2, f_job_start},
     {"job_status",	1, 1, f_job_status},
@@ -9955,7 +9941,7 @@
 }
 #endif
 
-#if defined(FEAT_CHANNEL) || defined(FEAT_JOB)
+#if defined(FEAT_JOB_CHANNEL)
 /*
  * Get a callback from "arg".  It can be a Funcref or a function name.
  * When "arg" is zero return an empty string.
@@ -10312,7 +10298,7 @@
 }
 #endif
 
-#ifdef FEAT_CHANNEL
+#ifdef FEAT_JOB_CHANNEL
 /*
  * Get the channel from the argument.
  * Returns NULL if the handle is invalid.
@@ -10387,7 +10373,6 @@
     }
 }
 
-# ifdef FEAT_JOB
 /*
  * "ch_getjob()" function
  */
@@ -10404,7 +10389,6 @@
 	    ++channel->ch_job->jv_refcount;
     }
 }
-# endif
 
 /*
  * "ch_log()" function
@@ -11427,13 +11411,13 @@
 	    break;
 
 	case VAR_JOB:
-#ifdef FEAT_JOB
+#ifdef FEAT_JOB_CHANNEL
 	    n = argvars[0].vval.v_job == NULL
 			   || argvars[0].vval.v_job->jv_status != JOB_STARTED;
 	    break;
 #endif
 	case VAR_CHANNEL:
-#ifdef FEAT_CHANNEL
+#ifdef FEAT_JOB_CHANNEL
 	    n = argvars[0].vval.v_channel == NULL
 			       || !channel_is_open(argvars[0].vval.v_channel);
 	    break;
@@ -13815,7 +13799,7 @@
 #ifdef FEAT_BYTEOFF
 	"byte_offset",
 #endif
-#ifdef FEAT_CHANNEL
+#ifdef FEAT_JOB_CHANNEL
 	"channel",
 #endif
 #ifdef FEAT_CINDENT
@@ -13951,7 +13935,7 @@
 #ifdef FEAT_INS_EXPAND
 	"insert_expand",
 #endif
-#ifdef FEAT_JOB
+#ifdef FEAT_JOB_CHANNEL
 	"job",
 #endif
 #ifdef FEAT_JUMPLIST
@@ -15092,7 +15076,7 @@
     dict_list(argvars, rettv, 2);
 }
 
-#if defined(FEAT_JOB) || defined(PROTO)
+#if defined(FEAT_JOB_CHANNEL) || defined(PROTO)
 /*
  * Get the job from the argument.
  * Returns NULL if the job is invalid.
@@ -15114,7 +15098,6 @@
     return job;
 }
 
-# ifdef FEAT_CHANNEL
 /*
  * "job_getchannel()" function
  */
@@ -15131,7 +15114,6 @@
 	    ++job->jv_channel->ch_refcount;
     }
 }
-# endif
 
 /*
  * "job_setoptions()" function
@@ -15298,7 +15280,6 @@
     }
 
 #ifdef USE_ARGV
-# ifdef FEAT_CHANNEL
     if (ch_log_active())
     {
 	garray_T    ga;
@@ -15314,20 +15295,15 @@
 	ch_logs(NULL, "Starting job: %s", (char *)ga.ga_data);
 	ga_clear(&ga);
     }
-# endif
     mch_start_job(argv, job, &opt);
 #else
-# ifdef FEAT_CHANNEL
     ch_logs(NULL, "Starting job: %s", (char *)cmd);
-# endif
     mch_start_job((char *)cmd, job, &opt);
 #endif
 
-#ifdef FEAT_CHANNEL
     /* If the channel is reading from a buffer, write lines now. */
     if (job->jv_channel != NULL)
 	channel_write_in(job->jv_channel);
-#endif
 
 theend:
 #ifdef USE_ARGV
@@ -15354,10 +15330,8 @@
     else
     {
 	result = mch_job_status(job);
-# ifdef FEAT_CHANNEL
 	if (job->jv_status == JOB_ENDED)
 	    ch_log(job->jv_channel, "Job ended");
-# endif
 	if (job->jv_status == JOB_ENDED && job->jv_exit_cb != NULL)
 	{
 	    typval_T	argv[3];
@@ -15450,9 +15424,7 @@
 		return;
 	    }
 	}
-# ifdef FEAT_CHANNEL
 	ch_logs(job->jv_channel, "Stopping job with '%s'", (char *)arg);
-# endif
 	if (mch_stop_job(job, arg) == FAIL)
 	    rettv->vval.v_number = 0;
 	else
@@ -22414,12 +22386,12 @@
 		dict_unref(varp->vval.v_dict);
 		break;
 	    case VAR_JOB:
-#ifdef FEAT_JOB
+#ifdef FEAT_JOB_CHANNEL
 		job_unref(varp->vval.v_job);
 		break;
 #endif
 	    case VAR_CHANNEL:
-#ifdef FEAT_CHANNEL
+#ifdef FEAT_JOB_CHANNEL
 		channel_unref(varp->vval.v_channel);
 		break;
 #endif
@@ -22468,13 +22440,13 @@
 		break;
 #endif
 	    case VAR_JOB:
-#ifdef FEAT_JOB
+#ifdef FEAT_JOB_CHANNEL
 		job_unref(varp->vval.v_job);
 		varp->vval.v_job = NULL;
 #endif
 		break;
 	    case VAR_CHANNEL:
-#ifdef FEAT_CHANNEL
+#ifdef FEAT_JOB_CHANNEL
 		channel_unref(varp->vval.v_channel);
 		varp->vval.v_channel = NULL;
 #endif
@@ -22543,12 +22515,12 @@
 	    return varp->vval.v_number == VVAL_TRUE ? 1 : 0;
 	    break;
 	case VAR_JOB:
-#ifdef FEAT_JOB
+#ifdef FEAT_JOB_CHANNEL
 	    EMSG(_("E910: Using a Job as a Number"));
 	    break;
 #endif
 	case VAR_CHANNEL:
-#ifdef FEAT_CHANNEL
+#ifdef FEAT_JOB_CHANNEL
 	    EMSG(_("E913: Using a Channel as a Number"));
 	    break;
 #endif
@@ -22589,12 +22561,12 @@
 	    EMSG(_("E907: Using a special value as a Float"));
 	    break;
 	case VAR_JOB:
-# ifdef FEAT_JOB
+# ifdef FEAT_JOB_CHANNEL
 	    EMSG(_("E911: Using a Job as a Float"));
 	    break;
 # endif
 	case VAR_CHANNEL:
-# ifdef FEAT_CHANNEL
+# ifdef FEAT_JOB_CHANNEL
 	    EMSG(_("E914: Using a Channel as a Float"));
 	    break;
 # endif
@@ -22711,7 +22683,7 @@
 	    STRCPY(buf, get_var_special_name(varp->vval.v_number));
 	    return buf;
 	case VAR_JOB:
-#ifdef FEAT_JOB
+#ifdef FEAT_JOB_CHANNEL
 	    {
 		job_T *job = varp->vval.v_job;
 		char  *status;
@@ -22738,7 +22710,7 @@
 #endif
 	    break;
 	case VAR_CHANNEL:
-#ifdef FEAT_CHANNEL
+#ifdef FEAT_JOB_CHANNEL
 	    {
 		channel_T *channel = varp->vval.v_channel;
 		char      *status = channel_status(channel);
@@ -23377,14 +23349,14 @@
 	    break;
 #endif
 	case VAR_JOB:
-#ifdef FEAT_JOB
+#ifdef FEAT_JOB_CHANNEL
 	    to->vval.v_job = from->vval.v_job;
 	    if (to->vval.v_job != NULL)
 		++to->vval.v_job->jv_refcount;
 	    break;
 #endif
 	case VAR_CHANNEL:
-#ifdef FEAT_CHANNEL
+#ifdef FEAT_JOB_CHANNEL
 	    to->vval.v_channel = from->vval.v_channel;
 	    if (to->vval.v_channel != NULL)
 		++to->vval.v_channel->ch_refcount;
diff --git a/src/feature.h b/src/feature.h
index f753227..957bbf2 100644
--- a/src/feature.h
+++ b/src/feature.h
@@ -1250,15 +1250,8 @@
 /*
  * The +channel feature requires +eval.
  */
-#if !defined(FEAT_EVAL) && defined(FEAT_CHANNEL)
-# undef FEAT_CHANNEL
-#endif
-
-/*
- * The +job feature requires +eval and Unix or MS-Windows.
- */
-#if (defined(UNIX) || defined(WIN32)) && defined(FEAT_EVAL)
-# define FEAT_JOB
+#if !defined(FEAT_EVAL) && defined(FEAT_JOB_CHANNEL)
+# undef FEAT_JOB_CHANNEL
 #endif
 
 /*
diff --git a/src/gui.c b/src/gui.c
index f7ec508..e91fcaf 100644
--- a/src/gui.c
+++ b/src/gui.c
@@ -4949,7 +4949,7 @@
 	 * of the argument ending up after the shell prompt. */
 	msg_clr_eos_force();
 	gui_start();
-#ifdef FEAT_CHANNEL
+#ifdef FEAT_JOB_CHANNEL
 	channel_gui_register_all();
 #endif
     }
diff --git a/src/macros.h b/src/macros.h
index 7b7b17d..ca54cb4 100644
--- a/src/macros.h
+++ b/src/macros.h
@@ -317,7 +317,7 @@
 # define PLINES_NOFILL(x) plines(x)
 #endif
 
-#if defined(FEAT_CHANNEL) || defined(FEAT_JOB) || defined(FEAT_CLIENTSERVER)
+#if defined(FEAT_JOB_CHANNEL) || defined(FEAT_CLIENTSERVER)
 # define MESSAGE_QUEUE
 #endif
 
diff --git a/src/main.c b/src/main.c
index a7bc9e9..076898c 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1488,7 +1488,7 @@
 	windgoto((int)Rows - 1, 0);
 #endif
 
-#ifdef FEAT_JOB
+#ifdef FEAT_JOB_CHANNEL
     job_stop_on_exit();
 #endif
 #ifdef FEAT_LUA
diff --git a/src/memline.c b/src/memline.c
index 334392b..1c2ddbf 100644
--- a/src/memline.c
+++ b/src/memline.c
@@ -3059,7 +3059,7 @@
 							   (char_u *)"\n", 1);
     }
 #endif
-#ifdef FEAT_CHANNEL
+#ifdef FEAT_JOB_CHANNEL
     if (buf->b_write_to_channel)
 	channel_write_new_lines(buf);
 #endif
diff --git a/src/misc2.c b/src/misc2.c
index 48acde8..e247a92 100644
--- a/src/misc2.c
+++ b/src/misc2.c
@@ -1127,7 +1127,7 @@
 # ifdef FEAT_DIFF
     diff_clear(curtab);
 # endif
-# ifdef FEAT_CHANNEL
+# ifdef FEAT_JOB_CHANNEL
     channel_free_all();
 # endif
     clear_sb_text();	      /* free any scrollback text */
@@ -6221,7 +6221,7 @@
 parse_queued_messages(void)
 {
     /* For Win32 mch_breakcheck() does not check for input, do it here. */
-# if defined(WIN32) && defined(FEAT_CHANNEL)
+# if defined(WIN32) && defined(FEAT_JOB_CHANNEL)
     channel_handle_events();
 # endif
 
@@ -6229,7 +6229,7 @@
     /* Process the queued netbeans messages. */
     netbeans_parse_messages();
 # endif
-# ifdef FEAT_CHANNEL
+# ifdef FEAT_JOB_CHANNEL
     /* Process the messages queued on channels. */
     channel_parse_messages();
 # endif
@@ -6237,7 +6237,7 @@
     /* Process the queued clientserver messages. */
     server_parse_messages();
 # endif
-# ifdef FEAT_JOB
+# ifdef FEAT_JOB_CHANNEL
     /* Check if any jobs have ended. */
     job_check_ended();
 # endif
diff --git a/src/os_mswin.c b/src/os_mswin.c
index 46b3780..2a80381 100644
--- a/src/os_mswin.c
+++ b/src/os_mswin.c
@@ -144,7 +144,7 @@
 static HWND s_hwnd = 0;	    /* console window handle, set by GetConsoleHwnd() */
 #endif
 
-#ifdef FEAT_CHANNEL
+#ifdef FEAT_JOB_CHANNEL
 int WSInitialized = FALSE; /* WinSock is initialized */
 #endif
 
@@ -216,7 +216,7 @@
 # ifdef FEAT_OLE
     UninitOLE();
 # endif
-# ifdef FEAT_CHANNEL
+# ifdef FEAT_JOB_CHANNEL
     if (WSInitialized)
     {
 	WSInitialized = FALSE;
@@ -3018,7 +3018,7 @@
 
 #endif /* defined(FEAT_GUI) || defined(FEAT_PRINTER) */
 
-#if defined(FEAT_CHANNEL) || defined(PROTO)
+#if defined(FEAT_JOB_CHANNEL) || defined(PROTO)
 /*
  * Initialize the Winsock dll.
  */
diff --git a/src/os_unix.c b/src/os_unix.c
index 8a61166..f2ae513 100644
--- a/src/os_unix.c
+++ b/src/os_unix.c
@@ -3919,7 +3919,7 @@
     return wait_pid;
 }
 
-#if defined(FEAT_JOB) || !defined(USE_SYSTEM) || defined(PROTO)
+#if defined(FEAT_JOB_CHANNEL) || !defined(USE_SYSTEM) || defined(PROTO)
 /*
  * Parse "cmd" and put the white-separated parts in "argv".
  * "argv" is an allocated array with "argc" entries.
@@ -3984,7 +3984,7 @@
 }
 #endif
 
-#if !defined(USE_SYSTEM) || defined(FEAT_JOB)
+#if !defined(USE_SYSTEM) || defined(FEAT_JOB_CHANNEL)
     static void
 set_child_environment(void)
 {
@@ -5035,12 +5035,11 @@
 #endif /* USE_SYSTEM */
 }
 
-#if defined(FEAT_JOB) || defined(PROTO)
+#if defined(FEAT_JOB_CHANNEL) || defined(PROTO)
     void
 mch_start_job(char **argv, job_T *job, jobopt_T *options UNUSED)
 {
     pid_t	pid;
-# ifdef FEAT_CHANNEL
     int		fd_in[2];	/* for stdin */
     int		fd_out[2];	/* for stdout */
     int		fd_err[2];	/* for stderr */
@@ -5122,7 +5121,6 @@
 	if (channel == NULL)
 	    goto failed;
     }
-# endif
 
     pid = fork();	/* maybe we should use vfork() */
     if (pid  == -1)
@@ -5133,9 +5131,7 @@
 
     if (pid == 0)
     {
-# ifdef FEAT_CHANNEL
 	int		null_fd = -1;
-# endif
 
 	/* child */
 	reset_signals();		/* handle signals normally */
@@ -5149,8 +5145,6 @@
 
 	set_child_environment();
 
-	/* TODO: re-enable this when pipes connect without a channel */
-# ifdef FEAT_CHANNEL
 	if (use_null_for_in || use_null_for_out || use_null_for_err)
 	    null_fd = open("/dev/null", O_RDWR | O_EXTRA, 0);
 
@@ -5205,7 +5199,6 @@
 	}
 	if (null_fd >= 0)
 	    close(null_fd);
-# endif
 
 	/* See above for type of argv. */
 	execvp(argv[0], argv);
@@ -5217,11 +5210,8 @@
     /* parent */
     job->jv_pid = pid;
     job->jv_status = JOB_STARTED;
-# ifdef FEAT_CHANNEL
     job->jv_channel = channel;  /* ch_refcount was set above */
-# endif
 
-# ifdef FEAT_CHANNEL
     /* child stdin, stdout and stderr */
     if (!use_file_for_in)
 	close(fd_in[0]);
@@ -5240,13 +5230,11 @@
 						    ? INVALID_FD : fd_err[0]);
 	channel_set_job(channel, job, options);
     }
-# endif
 
     /* success! */
     return;
 
-failed: ;
-# ifdef FEAT_CHANNEL
+failed:
     channel_unref(channel);
     if (fd_in[0] >= 0)
 	close(fd_in[0]);
@@ -5260,7 +5248,6 @@
 	close(fd_err[0]);
     if (fd_err[1] >= 0)
 	close(fd_err[1]);
-# endif
 }
 
     char *
@@ -5560,7 +5547,7 @@
 	    nfd++;
 	}
 # endif
-#ifdef FEAT_CHANNEL
+#ifdef FEAT_JOB_CHANNEL
 	nfd = channel_poll_setup(nfd, &fds);
 #endif
 
@@ -5608,7 +5595,7 @@
 		finished = FALSE;	/* Try again */
 	}
 # endif
-#ifdef FEAT_CHANNEL
+#ifdef FEAT_JOB_CHANNEL
 	if (ret > 0)
 	    ret = channel_poll_check(ret, &fds);
 #endif
@@ -5690,7 +5677,7 @@
 		maxfd = xsmp_icefd;
 	}
 # endif
-# ifdef FEAT_CHANNEL
+# ifdef FEAT_JOB_CHANNEL
 	maxfd = channel_select_setup(maxfd, &rfds);
 # endif
 
@@ -5772,7 +5759,7 @@
 	    }
 	}
 # endif
-#ifdef FEAT_CHANNEL
+#ifdef FEAT_JOB_CHANNEL
 	if (ret > 0)
 	    ret = channel_select_check(ret, &rfds);
 #endif
diff --git a/src/os_win32.c b/src/os_win32.c
index 49fd0f7..d7b5634 100644
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -1492,7 +1492,7 @@
 	{
 	    DWORD dwWaitTime = dwEndTime - dwNow;
 
-#ifdef FEAT_CHANNEL
+#ifdef FEAT_JOB_CHANNEL
 	    /* Check channel while waiting input. */
 	    if (dwWaitTime > 100)
 		dwWaitTime = 100;
@@ -4991,7 +4991,7 @@
     return x;
 }
 
-#if defined(FEAT_JOB) || defined(PROTO)
+#if defined(FEAT_JOB_CHANNEL) || defined(PROTO)
     static HANDLE
 job_io_file_open(
         char_u *fname,
@@ -5033,7 +5033,6 @@
     STARTUPINFO		si;
     PROCESS_INFORMATION	pi;
     HANDLE		jo;
-# ifdef FEAT_CHANNEL
     SECURITY_ATTRIBUTES saAttr;
     channel_T		*channel = NULL;
     HANDLE		ifd[2];
@@ -5057,7 +5056,6 @@
     ofd[1] = INVALID_HANDLE_VALUE;
     efd[0] = INVALID_HANDLE_VALUE;
     efd[1] = INVALID_HANDLE_VALUE;
-# endif
 
     jo = CreateJobObject(NULL, NULL);
     if (jo == NULL)
@@ -5072,7 +5070,6 @@
     si.dwFlags |= STARTF_USESHOWWINDOW;
     si.wShowWindow = SW_HIDE;
 
-# ifdef FEAT_CHANNEL
     saAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
     saAttr.bInheritHandle = TRUE;
     saAttr.lpSecurityDescriptor = NULL;
@@ -5149,7 +5146,6 @@
 	if (channel == NULL)
 	    goto failed;
     }
-# endif
 
     if (!vim_create_process(cmd, TRUE,
 	    CREATE_SUSPENDED |
@@ -5176,7 +5172,6 @@
     job->jv_job_object = jo;
     job->jv_status = JOB_STARTED;
 
-# ifdef FEAT_CHANNEL
     if (!use_file_for_in)
 	CloseHandle(ifd[0]);
     if (!use_file_for_out)
@@ -5196,11 +5191,9 @@
 					    ? INVALID_FD : (sock_T)efd[0]);
 	channel_set_job(channel, job, options);
     }
-# endif
     return;
 
 failed:
-# ifdef FEAT_CHANNEL
     CloseHandle(ifd[0]);
     CloseHandle(ofd[0]);
     CloseHandle(efd[0]);
@@ -5208,9 +5201,6 @@
     CloseHandle(ofd[1]);
     CloseHandle(efd[1]);
     channel_unref(channel);
-# else
-    ;  /* make compiler happy */
-# endif
 }
 
     char *
diff --git a/src/proto.h b/src/proto.h
index 7e4180b..d975f92 100644
--- a/src/proto.h
+++ b/src/proto.h
@@ -193,7 +193,7 @@
 # ifdef FEAT_NETBEANS_INTG
 #  include "netbeans.pro"
 # endif
-# ifdef FEAT_CHANNEL
+# ifdef FEAT_JOB_CHANNEL
 #  include "channel.pro"
 # endif
 
diff --git a/src/structs.h b/src/structs.h
index 9ccc09a..6bf2126 100644
--- a/src/structs.h
+++ b/src/structs.h
@@ -1147,10 +1147,8 @@
 	char_u		*v_string;	/* string value (can be NULL!) */
 	list_T		*v_list;	/* list value (can be NULL!) */
 	dict_T		*v_dict;	/* dict value (can be NULL!) */
-#ifdef FEAT_JOB
+#ifdef FEAT_JOB_CHANNEL
 	job_T		*v_job;		/* job value (can be NULL!) */
-#endif
-#ifdef FEAT_CHANNEL
 	channel_T	*v_channel;	/* channel value (can be NULL!) */
 #endif
     }		vval;
@@ -1312,8 +1310,7 @@
 #define PART_SOCK   0
 #define CH_SOCK_FD	ch_part[PART_SOCK].ch_fd
 
-#if defined(UNIX) || defined(WIN32)
-# define CHANNEL_PIPES
+#ifdef FEAT_JOB_CHANNEL
 # define INVALID_FD  (-1)
 
 # define PART_OUT   1
@@ -2057,7 +2054,7 @@
     int		b_netbeans_file;    /* TRUE when buffer is owned by NetBeans */
     int		b_was_netbeans_file;/* TRUE if b_netbeans_file was once set */
 #endif
-#ifdef FEAT_CHANNEL
+#ifdef FEAT_JOB_CHANNEL
     int		b_write_to_channel; /* TRUE when appended lines are written to
 				     * a channel. */
 #endif
diff --git a/src/ui.c b/src/ui.c
index 875be1b..a7c9064 100644
--- a/src/ui.c
+++ b/src/ui.c
@@ -1531,7 +1531,7 @@
  * descriptions which would otherwise overflow.  The buffer is considered full
  * when only this extra space (or part of it) remains.
  */
-#if defined(FEAT_SUN_WORKSHOP) || defined(FEAT_CHANNEL) \
+#if defined(FEAT_SUN_WORKSHOP) || defined(FEAT_JOB_CHANNEL) \
 	|| defined(FEAT_CLIENTSERVER)
    /*
     * Sun WorkShop and NetBeans stuff debugger commands into the input buffer.
diff --git a/src/version.c b/src/version.c
index 4f6c51d..c290b50 100644
--- a/src/version.c
+++ b/src/version.c
@@ -106,7 +106,7 @@
 #else
 	"-byte_offset",
 #endif
-#ifdef FEAT_CHANNEL
+#ifdef FEAT_JOB_CHANNEL
 	"+channel",
 #else
 	"-channel",
@@ -289,7 +289,7 @@
 #else
 	"-insert_expand",
 #endif
-#ifdef FEAT_JOB
+#ifdef FEAT_JOB_CHANNEL
 	"+job",
 #else
 	"-job",
@@ -744,6 +744,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1537,
+/**/
     1536,
 /**/
     1535,
diff --git a/src/vim.h b/src/vim.h
index d0b979f..a89b668 100644
--- a/src/vim.h
+++ b/src/vim.h
@@ -2273,7 +2273,7 @@
 # define SET_NO_HLSEARCH(flag) no_hlsearch = (flag)
 #endif
 
-#ifdef FEAT_CHANNEL
+#ifdef FEAT_JOB_CHANNEL
 # define MAX_OPEN_CHANNELS 10
 #else
 # define MAX_OPEN_CHANNELS 0
