diff --git a/usr.sbin/ppp/command.c b/usr.sbin/ppp/command.c
index 542ee92564c9..f14f467b794f 100644
--- a/usr.sbin/ppp/command.c
+++ b/usr.sbin/ppp/command.c
@@ -17,7 +17,7 @@
  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  *
- * $Id: command.c,v 1.131.2.85 1998/05/16 23:47:22 brian Exp $
+ * $Id: command.c,v 1.131.2.86 1998/05/16 23:47:41 brian Exp $
  *
  */
 #include <sys/types.h>
@@ -94,17 +94,16 @@
 #define	VAR_OPENMODE	10
 #define	VAR_PHONE	11
 #define	VAR_HANGUP	12
-#define	VAR_ENC		13
-#define	VAR_IDLETIMEOUT	14
-#define	VAR_LQRPERIOD	15
-#define	VAR_LCPRETRY	16
-#define	VAR_CHAPRETRY	17
-#define	VAR_PAPRETRY	18
-#define	VAR_CCPRETRY	19
-#define	VAR_IPCPRETRY	20
-#define	VAR_DNS		21
-#define	VAR_NBNS	22
-#define	VAR_MODE	23
+#define	VAR_IDLETIMEOUT	13
+#define	VAR_LQRPERIOD	14
+#define	VAR_LCPRETRY	15
+#define	VAR_CHAPRETRY	16
+#define	VAR_PAPRETRY	17
+#define	VAR_CCPRETRY	18
+#define	VAR_IPCPRETRY	19
+#define	VAR_DNS		20
+#define	VAR_NBNS	21
+#define	VAR_MODE	22
 
 /* ``accept|deny|disable|enable'' masks */
 #define NEG_HISMASK (1)
@@ -124,7 +123,7 @@
 #define NEG_DNS		50
 
 const char Version[] = "2.0-beta";
-const char VersionDate[] = "$Date: 1998/05/16 23:47:22 $";
+const char VersionDate[] = "$Date: 1998/05/16 23:47:41 $";
 
 static int ShowCommand(struct cmdargs const *);
 static int TerminalCommand(struct cmdargs const *);
@@ -144,11 +143,23 @@ static int AliasEnable(struct cmdargs const *);
 static int AliasOption(struct cmdargs const *);
 #endif
 
+static const char *
+showcx(struct cmdtab const *cmd)
+{
+  if (cmd->lauth & LOCAL_CX)
+    return "(c)";
+  else if (cmd->lauth & LOCAL_CX_OPT)
+    return "(o)";
+
+  return "";
+}
+
 static int
 HelpCommand(struct cmdargs const *arg)
 {
   struct cmdtab const *cmd;
-  int n, cmax, dmax, cols;
+  int n, cmax, dmax, cols, cxlen;
+  const char *cx;
 
   if (!arg->prompt) {
     log_Printf(LogWARN, "help: Cannot help without a prompt\n");
@@ -160,7 +171,7 @@ HelpCommand(struct cmdargs const *arg)
       if ((cmd->lauth & arg->prompt->auth) &&
           ((cmd->name && !strcasecmp(cmd->name, arg->argv[arg->argn])) ||
            (cmd->alias && !strcasecmp(cmd->alias, arg->argv[arg->argn])))) {
-	prompt_Printf(arg->prompt, "%s\n", cmd->syntax);
+	prompt_Printf(arg->prompt, "%s %s\n", cmd->syntax, showcx(cmd));
 	return 0;
       }
     return -1;
@@ -169,7 +180,7 @@ HelpCommand(struct cmdargs const *arg)
   cmax = dmax = 0;
   for (cmd = arg->cmdtab; cmd->func; cmd++)
     if (cmd->name && (cmd->lauth & arg->prompt->auth)) {
-      if ((n = strlen(cmd->name)) > cmax)
+      if ((n = strlen(cmd->name) + strlen(showcx(cmd))) > cmax)
         cmax = n;
       if ((n = strlen(cmd->helpmes)) > dmax)
         dmax = n;
@@ -177,10 +188,14 @@ HelpCommand(struct cmdargs const *arg)
 
   cols = 80 / (dmax + cmax + 3);
   n = 0;
+  prompt_Printf(arg->prompt, "(o) = Optional context,"
+                " (c) = Context required\n");
   for (cmd = arg->cmdtab; cmd->func; cmd++)
     if (cmd->name && (cmd->lauth & arg->prompt->auth)) {
-      prompt_Printf(arg->prompt, " %-*.*s: %-*.*s",
-              cmax, cmax, cmd->name, dmax, dmax, cmd->helpmes);
+      cx = showcx(cmd);
+      cxlen = cmax - strlen(cmd->name);
+      prompt_Printf(arg->prompt, " %s%-*.*s: %-*.*s",
+              cmd->name, cxlen, cxlen, cx, dmax, dmax, cmd->helpmes);
       if (++n % cols == 0)
         prompt_Printf(arg->prompt, "\n");
     }
@@ -543,45 +558,45 @@ ShowProtocolStats(struct cmdargs const *arg)
 
 static struct cmdtab const ShowCommands[] = {
   {"bundle", NULL, bundle_ShowStatus, LOCAL_AUTH,
-  "Show bundle details", "show bundle"},
+  "bundle details", "show bundle"},
   {"ccp", NULL, ccp_ReportStatus, LOCAL_AUTH | LOCAL_CX_OPT,
-  "Show CCP status", "show cpp"},
+  "CCP status", "show cpp"},
   {"compress", NULL, sl_Show, LOCAL_AUTH,
-  "Show compression stats", "show compress"},
+  "VJ compression stats", "show compress"},
   {"escape", NULL, ShowEscape, LOCAL_AUTH | LOCAL_CX,
-  "Show escape characters", "show escape"},
+  "escape characters", "show escape"},
   {"filter", NULL, filter_Show, LOCAL_AUTH,
-  "Show packet filters", "show filter [in|out|dial|alive]"},
+  "packet filters", "show filter [in|out|dial|alive]"},
   {"hdlc", NULL, hdlc_ReportStatus, LOCAL_AUTH | LOCAL_CX,
-  "Show HDLC errors", "show hdlc"},
+  "HDLC errors", "show hdlc"},
   {"ipcp", NULL, ipcp_Show, LOCAL_AUTH,
-  "Show IPCP status", "show ipcp"},
+  "IPCP status", "show ipcp"},
   {"lcp", NULL, lcp_ReportStatus, LOCAL_AUTH | LOCAL_CX,
-  "Show LCP status", "show lcp"},
+  "LCP status", "show lcp"},
   {"link", "datalink", datalink_Show, LOCAL_AUTH | LOCAL_CX,
-  "Show (high-level) link info", "show link"},
+  "(high-level) link info", "show link"},
   {"links", NULL, bundle_ShowLinks, LOCAL_AUTH,
-  "Show available link names", "show links"},
+  "available link names", "show links"},
   {"log", NULL, log_ShowLevel, LOCAL_AUTH,
-  "Show log levels", "show log"},
+  "log levels", "show log"},
   {"mem", NULL, mbuf_Show, LOCAL_AUTH,
-  "Show memory map", "show mem"},
+  "mbuf allocations", "show mem"},
   {"modem", NULL, modem_ShowStatus, LOCAL_AUTH | LOCAL_CX,
-  "Show (low-level) link info", "show modem"},
+  "(low-level) link info", "show modem"},
   {"mp", "multilink", mp_ShowStatus, LOCAL_AUTH,
-  "Show multilink setup", "show mp"},
+  "multilink setup", "show mp"},
   {"proto", NULL, ShowProtocolStats, LOCAL_AUTH | LOCAL_CX_OPT,
-  "Show protocol summary", "show proto"},
+  "protocol summary", "show proto"},
   {"route", NULL, route_Show, LOCAL_AUTH,
-  "Show routing table", "show route"},
+  "routing table", "show route"},
   {"stopped", NULL, ShowStopped, LOCAL_AUTH | LOCAL_CX,
-  "Show STOPPED timeout", "show stopped"},
+  "STOPPED timeout", "show stopped"},
   {"timers", NULL, ShowTimerList, LOCAL_AUTH,
-  "Show alarm timers", "show timers"},
+  "alarm timers", "show timers"},
   {"version", NULL, ShowVersion, LOCAL_NO_AUTH | LOCAL_AUTH,
-  "Show version string", "show version"},
+  "version string", "show version"},
   {"who", NULL, log_ShowWho, LOCAL_AUTH,
-  "Show client list", "show who"},
+  "client list", "show who"},
   {"help", "?", HelpCommand, LOCAL_NO_AUTH | LOCAL_AUTH,
   "Display this message", "show help|? [command]", ShowCommands},
   {NULL, NULL, NULL},
@@ -1136,9 +1151,9 @@ SetVariable(struct cmdargs const *arg)
   u_long ulong_val;
   const char *argp;
   int param = (int)arg->cmd->args, mode;
-  struct datalink *cx = arg->cx;	/* AUTH_CX uses this */
+  struct datalink *cx = arg->cx;	/* LOCAL_CX uses this */
   const char *err = NULL;
-  struct link *l = command_ChooseLink(arg);	/* AUTH_CX_OPT uses this */
+  struct link *l = command_ChooseLink(arg);	/* LOCAL_CX_OPT uses this */
   int dummyint;
   struct in_addr dummyaddr, *addr;
 
@@ -1392,86 +1407,83 @@ SetCtsRts(struct cmdargs const *arg)
 
 static struct cmdtab const SetCommands[] = {
   {"accmap", NULL, SetVariable, LOCAL_AUTH | LOCAL_CX,
-  "Set accmap value", "set accmap hex-value", (const void *)VAR_ACCMAP},
+  "accmap value", "set accmap hex-value", (const void *)VAR_ACCMAP},
   {"authkey", "key", SetVariable, LOCAL_AUTH,
-  "Set authentication key", "set authkey|key key", (const void *)VAR_AUTHKEY},
+  "authentication key", "set authkey|key key", (const void *)VAR_AUTHKEY},
   {"authname", NULL, SetVariable, LOCAL_AUTH,
-  "Set authentication name", "set authname name", (const void *)VAR_AUTHNAME},
+  "authentication name", "set authname name", (const void *)VAR_AUTHNAME},
   {"ccpretry", NULL, SetVariable, LOCAL_AUTH | LOCAL_CX_OPT,
-  "Set FSM retry period", "set ccpretry value", (const void *)VAR_CCPRETRY},
+  "FSM retry period", "set ccpretry value", (const void *)VAR_CCPRETRY},
   {"chapretry", NULL, SetVariable, LOCAL_AUTH | LOCAL_CX,
-  "Set CHAP retry period", "set chapretry value", (const void *)VAR_CHAPRETRY},
+  "CHAP retry period", "set chapretry value", (const void *)VAR_CHAPRETRY},
   {"ctsrts", "crtscts", SetCtsRts, LOCAL_AUTH | LOCAL_CX,
   "Use hardware flow control", "set ctsrts [on|off]"},
   {"deflate", NULL, SetVariable, LOCAL_AUTH | LOCAL_CX_OPT,
-  "Set deflate window sizes", "set deflate out-winsize in-winsize",
+  "deflate window sizes", "set deflate out-winsize in-winsize",
   (const void *) VAR_WINSIZE},
   {"device", "line", SetVariable, LOCAL_AUTH | LOCAL_CX,
-  "Set modem device name", "set device|line device-name[,device-name]",
+  "modem device name", "set device|line device-name[,device-name]",
   (const void *) VAR_DEVICE},
   {"dial", NULL, SetVariable, LOCAL_AUTH | LOCAL_CX,
-  "Set dialing script", "set dial chat-script", (const void *) VAR_DIAL},
-  {"dns", NULL, SetVariable, LOCAL_AUTH, "Set Domain Name Server",
+  "dialing script", "set dial chat-script", (const void *) VAR_DIAL},
+  {"dns", NULL, SetVariable, LOCAL_AUTH, "Domain Name Server",
   "set dns pri-addr [sec-addr]", (const void *)VAR_DNS},
-  {"encrypt", NULL, SetVariable, LOCAL_AUTH | LOCAL_CX,
-  "Select CHAP encryption type", "set encrypt MSChap|MD5",
-  (const void *)VAR_ENC},
   {"enddisc", NULL, mp_SetEnddisc, LOCAL_AUTH,
-  "Set Endpoint Discriminator", "set enddisc [IP|magic|label|psn value]"},
+  "Endpoint Discriminator", "set enddisc [IP|magic|label|psn value]"},
   {"escape", NULL, SetEscape, LOCAL_AUTH | LOCAL_CX,
-  "Set escape characters", "set escape hex-digit ..."},
+  "escape characters", "set escape hex-digit ..."},
   {"filter", NULL, filter_Set, LOCAL_AUTH,
-  "Set packet filters", "set filter alive|dial|in|out rule-no permit|deny "
+  "packet filters", "set filter alive|dial|in|out rule-no permit|deny "
   "[src_addr[/width]] [dst_addr[/width]] [tcp|udp|icmp [src [lt|eq|gt port]] "
   "[dst [lt|eq|gt port]] [estab] [syn] [finrst]]"},
   {"hangup", NULL, SetVariable, LOCAL_AUTH | LOCAL_CX,
-  "Set hangup script", "set hangup chat-script", (const void *) VAR_HANGUP},
-  {"ifaddr", NULL, SetInterfaceAddr, LOCAL_AUTH, "Set destination address",
+  "hangup script", "set hangup chat-script", (const void *) VAR_HANGUP},
+  {"ifaddr", NULL, SetInterfaceAddr, LOCAL_AUTH, "destination address",
   "set ifaddr [src-addr [dst-addr [netmask [trg-addr]]]]"},
   {"ipcpretry", NULL, SetVariable, LOCAL_AUTH,
-  "Set FSM retry period", "set ipcpretry value", (const void *)VAR_IPCPRETRY},
+  "FSM retry period", "set ipcpretry value", (const void *)VAR_IPCPRETRY},
   {"lcpretry", NULL, SetVariable, LOCAL_AUTH | LOCAL_CX,
-  "Set FSM retry period", "set lcpretry value", (const void *)VAR_LCPRETRY},
+  "FSM retry period", "set lcpretry value", (const void *)VAR_LCPRETRY},
   {"log", NULL, log_SetLevel, LOCAL_AUTH,
-  "Set log level", "set log [local] [+|-]value..."},
+  "log level", "set log [local] [+|-]value..."},
   {"login", NULL, SetVariable, LOCAL_AUTH | LOCAL_CX,
-  "Set login script", "set login chat-script", (const void *) VAR_LOGIN},
+  "login script", "set login chat-script", (const void *) VAR_LOGIN},
   {"lqrperiod", NULL, SetVariable, LOCAL_AUTH | LOCAL_CX_OPT,
-  "Set LQR period", "set lqrperiod value", (const void *)VAR_LQRPERIOD},
-  {"mode", NULL, SetVariable, LOCAL_AUTH | LOCAL_CX, "Set mode value",
+  "LQR period", "set lqrperiod value", (const void *)VAR_LQRPERIOD},
+  {"mode", NULL, SetVariable, LOCAL_AUTH | LOCAL_CX, "mode value",
   "set mode interactive|auto|ddial|background", (const void *)VAR_MODE},
-  {"mrru", NULL, SetVariable, LOCAL_AUTH, "Set MRRU value",
+  {"mrru", NULL, SetVariable, LOCAL_AUTH, "MRRU value",
   "set mrru value", (const void *)VAR_MRRU},
   {"mru", NULL, SetVariable, LOCAL_AUTH | LOCAL_CX_OPT,
-  "Set MRU value", "set mru value", (const void *)VAR_MRU},
+  "MRU value", "set mru value", (const void *)VAR_MRU},
   {"mtu", NULL, SetVariable, LOCAL_AUTH,
-  "Set interface MTU value", "set mtu value", (const void *)VAR_MTU},
-  {"nbns", NULL, SetVariable, LOCAL_AUTH, "Set NetBIOS Name Server",
+  "interface MTU value", "set mtu value", (const void *)VAR_MTU},
+  {"nbns", NULL, SetVariable, LOCAL_AUTH, "NetBIOS Name Server",
   "set nbns pri-addr [sec-addr]", (const void *)VAR_NBNS},
-  {"openmode", NULL, SetVariable, LOCAL_AUTH | LOCAL_CX, "Set open mode",
+  {"openmode", NULL, SetVariable, LOCAL_AUTH | LOCAL_CX, "open mode",
   "set openmode active|passive [secs]", (const void *)VAR_OPENMODE},
   {"papretry", NULL, SetVariable, LOCAL_AUTH | LOCAL_CX,
-  "Set PAP retry period", "set papretry value", (const void *)VAR_PAPRETRY},
+  "PAP retry period", "set papretry value", (const void *)VAR_PAPRETRY},
   {"parity", NULL, SetModemParity, LOCAL_AUTH | LOCAL_CX,
-  "Set modem parity", "set parity [odd|even|none]"},
-  {"phone", NULL, SetVariable, LOCAL_AUTH | LOCAL_CX, "Set telephone number(s)",
+  "modem parity", "set parity [odd|even|none]"},
+  {"phone", NULL, SetVariable, LOCAL_AUTH | LOCAL_CX, "telephone number(s)",
   "set phone phone1[:phone2[...]]", (const void *)VAR_PHONE},
   {"reconnect", NULL, datalink_SetReconnect, LOCAL_AUTH | LOCAL_CX,
-  "Set Reconnect timeout", "set reconnect value ntries"},
+  "Reconnect timeout", "set reconnect value ntries"},
   {"redial", NULL, datalink_SetRedial, LOCAL_AUTH | LOCAL_CX,
-  "Set Redial timeout", "set redial value|random[.value|random] [attempts]"},
+  "Redial timeout", "set redial value|random[.value|random] [attempts]"},
   {"server", "socket", SetServer, LOCAL_AUTH,
-  "Set server port", "set server|socket TcpPort|LocalName|none [mask]"},
+  "server port", "set server|socket TcpPort|LocalName|none [mask]"},
   {"speed", NULL, SetModemSpeed, LOCAL_AUTH | LOCAL_CX,
-  "Set modem speed", "set speed value"},
+  "modem speed", "set speed value"},
   {"stopped", NULL, SetStoppedTimeout, LOCAL_AUTH | LOCAL_CX,
-  "Set STOPPED timeouts", "set stopped [LCPseconds [CCPseconds]]"},
-  {"timeout", NULL, SetVariable, LOCAL_AUTH, "Set Idle timeout",
+  "STOPPED timeouts", "set stopped [LCPseconds [CCPseconds]]"},
+  {"timeout", NULL, SetVariable, LOCAL_AUTH, "Idle timeout",
   "set timeout idletime", (const void *)VAR_IDLETIMEOUT},
   {"vj", NULL, ipcp_vjset, LOCAL_AUTH,
-  "Set vj values", "set vj slots|slotcomp [value]"},
+  "vj values", "set vj slots|slotcomp [value]"},
   {"weight", NULL, mp_SetDatalinkWeight, LOCAL_AUTH | LOCAL_CX,
-  "Set datalink weighting", "set weight n"},
+  "datalink weighting", "set weight n"},
   {"help", "?", HelpCommand, LOCAL_AUTH | LOCAL_NO_AUTH,
   "Display this message", "set help|? [command]", SetCommands},
   {NULL, NULL, NULL},
@@ -1826,8 +1838,8 @@ static int
 NegotiateSet(struct cmdargs const *arg)
 {
   int param = (int)arg->cmd->args;
-  struct link *l = command_ChooseLink(arg);	/* AUTH_CX_OPT uses this */
-  struct datalink *cx = arg->cx;	/* AUTH_CX uses this */
+  struct link *l = command_ChooseLink(arg);	/* LOCAL_CX_OPT uses this */
+  struct datalink *cx = arg->cx;	/* LOCAL_CX uses this */
   const char *cmd;
   unsigned keep;			/* Keep these bits */
   unsigned add;				/* Add these bits */
diff --git a/usr.sbin/ppp/ppp.8 b/usr.sbin/ppp/ppp.8
index c712cf577498..20803d5d3685 100644
--- a/usr.sbin/ppp/ppp.8
+++ b/usr.sbin/ppp/ppp.8
@@ -1,4 +1,4 @@
-.\" $Id: ppp.8,v 1.97.2.35 1998/05/16 23:47:28 brian Exp $
+.\" $Id: ppp.8,v 1.97.2.36 1998/05/18 23:24:24 brian Exp $
 .Dd 20 September 1995
 .Os FreeBSD
 .Dt PPP 8
@@ -1743,6 +1743,13 @@ command:
  link 3 set device /dev/cuaa2
 .Ed
 .Pp
+Use the
+.Dq help
+command to see which commands require context (using the
+.Dq link
+command), which have optional
+context and which should not have any context.
+.Pp
 When
 .Nm
 has negotiated
@@ -1828,9 +1835,10 @@ CHAP is accepted by default.
 Some
 .Em PPP
 implementations use "MS-CHAP" rather than MD5 when encrypting the
-challenge.  Refer to the description of the
-.Dq set encrypt
-command for further details.
+challenge.  MS-CHAP is a combination of MD4 and DES.  If
+.Nm was build
+on a machine with DES libraries available, it will respond to MS-CHAP
+authentication requests, but will never request them.
 .It deflate
 Default: Enabled and Accepted.  This option decides if deflate
 compression will be used by the Compression Control Protocol (CCP).