diff --git a/dclish/dclish.go b/dclish/dclish.go
index 74f03a1aa93a76439b0d29e3aa91cf42ff6443f3..07d4a13fdedd792716d00f062424772451aeef83 100644
--- a/dclish/dclish.go
+++ b/dclish/dclish.go
@@ -14,6 +14,7 @@ type Flag struct {
 	Value       string
 	Default     string
 	Description string
+	// TODO: Toggle bool
 }
 
 // Flags is the list of flags.
@@ -21,8 +22,11 @@ type Flags map[string]*Flag
 
 // Command contains the definition of a command, it's flags and subcommands.
 type Command struct {
-	Flags       Flags
-	Args        []string
+	Flags Flags
+	// TODO: FlagOrder []string
+	Args []string
+	// TODO: MaxArgs int
+	// TODO: MinArgs int
 	Commands    []*Command
 	Action      ActionFunc
 	Description string
@@ -52,18 +56,19 @@ func (c Commands) ParseAndRun(line string) error {
 		return cmd.Action(cmd)
 	}
 	// TODO: need to clean this up.
-	for i := range words[1:] {
-		if strings.HasPrefix(words[i], "/") {
-			flag, val, assigned := strings.Cut(words[i], "=")
+	args := words[1:]
+	for i := range args {
+		if strings.HasPrefix(args[i], "/") {
+			flag, val, assigned := strings.Cut(args[i], "=")
 			if assigned {
 				wordup := strings.ToUpper(flag)
 				flg, ok := cmd.Flags[wordup]
 				if !ok {
-					fmt.Printf("ERROR: Flag '%s' not recognised.", words[i])
+					fmt.Printf("ERROR: Flag '%s' not recognised.", args[i])
 				}
 				flg.Value = val
 			} else {
-				wordup := strings.ToUpper(words[i])
+				wordup := strings.ToUpper(args[i])
 				value := "true"
 				if strings.HasPrefix(wordup, "/NO") {
 					wordup = strings.Replace(wordup, "/NO", "/", 1)
@@ -71,12 +76,12 @@ func (c Commands) ParseAndRun(line string) error {
 				}
 				flg, ok := cmd.Flags[wordup]
 				if !ok {
-					fmt.Printf("ERROR: Flag '%s' not recognised.", words[i])
+					fmt.Printf("ERROR: Flag '%s' not recognised.", args[i])
 				}
 				flg.Value = value
 			}
 		} else {
-			cmd.Args = append(cmd.Args, words[i])
+			cmd.Args = append(cmd.Args, args[i])
 		}
 	}
 	return cmd.Action(cmd)
diff --git a/repl/command.go b/repl/command.go
index 3bd1bd14110300319b91bbd772db68b0352150a0..72161f8ff31ba51e915667b00ab372bc542f9a1f 100644
--- a/repl/command.go
+++ b/repl/command.go
@@ -552,17 +552,6 @@ folder at the other node is also a SYSTEM folder.
 			},
 		},
 	},
-	"Ctrl-C": {
-		Description: `Except for when BULLETIN is awaiting input from the terminal, a 
-CTRL-C will cause BULLETIN to abort the execution of any command.  If
-BULLETIN is waiting for terminal input, a CTRL-C will cause BULLETIN
-to return to the BULLETIN> prompt.  If for some reason the user wishes
-to suspend BULLETIN, CTRL-Y will usually do so.  However, this is not
-always true, as BULLETIN will ignore the CTRL-Y if it has a data file
-opened at the time. (Otherwise it would be possible to put the files
-in a state such that they would be inaccessible by other users.)
-`,
-	},
 	"CURRENT": {
 		Description: `Displays the beginning of the message you are currently reading.  If
 you  are  reading  a long message and want to display the first part
@@ -835,52 +824,6 @@ file exists, the file would be appended to that file.
 	},
 	"FORWARD": {
 		Description: `Synonym for MAIL command.
-`,
-	},
-	"Folders": {
-		Description: `All messages are divided into separate folders.  The default folder is
-GENERAL.  New folders can be created by any user.  As an example, the
-following creates a folder for GAMES related messages: 
- 
-BULLETIN> CREATE GAMES
-Enter a one line description of folder.
-GAMES
- 
-To see the list of available folders, use DIRECTORY/FOLDERS.  To select
-a specific folder, use the SELECT command.  
- 
-If a user selects a folder and enters the SET READNEW command, that
-user will be alerted of topics of new messages at login time, and will 
-then be given the option of reading them.  Similar to READNEW is SHOWNEW,
-which displays the topics but doesn't prompt to read them.  Even less is
-SET BRIEF, which will cause only a one line output indicating that there
-are new messages in the folder.  There also is the SET NOTIFY option,
-which will cause a message to be broadcast to a user's terminal alerting
-the user that a new message has been added.  Any of these options can be
-the default for the folder by using the /DEFAULT switch on the command.
- 
-A folder can be restricted to only certain users, if desired.  This is 
-done by specifying CREATE/PRIVATE.  Afterwards, access to the folder is 
-controlled by the creator by the SET [NO]ACCESS command.  If /SEMIPRIVATE
-rather than /PRIVATE is specified, all users can read the messages in the
-folder, but only those give access can add messages.
- 
-A folder can be converted into a remote folder using CREATE/NODE or SET
-NODE.  A remote folder is one which points to a folder on a remote DECNET
-node.  Messages added to a remote node are actually stored on the folder
-on the remote node.  The BULLCP process (created by BULLETIN/STARTUP)
-must be running on the remote node for this option to be used.
- 
-A folder can be specified as a SYSTEM folder, i.e. one in which SYSTEM/
-SHUTDOWN/BROADCAST messages can be added.  By default, the GENERAL folder
-is a SYSTEM folder (and cannot be changed).  One use for this is to create
-a remote SYSTEM folder which is shared by all nodes, so that the GENERAL
-folder is used for messages pertaining only to the local host, while the
-remote folder is used for messages pertaining to all nodes.  Another
-use is to create a folder for posting SYSTEM messages only meant for a
-certain UIC group.  This is done by creating a PRIVATE SYSTEM folder, and
-giving access to that UIC group.  Only users in that UIC group will see
-the messages in that folder when they log in.
 `,
 	},
 	"HELP": {
diff --git a/repl/help.go b/repl/help.go
index 2e57c4bd4598aacc85ff1702df002b5620fbef60..b2beca93c3ddce51fad74e30320232cd0e6e9d18 100644
--- a/repl/help.go
+++ b/repl/help.go
@@ -8,7 +8,66 @@ import (
 	"git.lyda.ie/kevin/bulletin/dclish"
 )
 
-var helpmap map[string]string
+var helpmap = map[string]string{
+	"FOLDERS": `All messages are divided into separate folders.  The default folder is
+GENERAL.  New folders can be created by any user.  As an example, the
+following creates a folder for GAMES related messages: 
+ 
+BULLETIN> CREATE GAMES
+Enter a one line description of folder.
+GAMES
+ 
+To see the list of available folders, use DIRECTORY/FOLDERS.  To select
+a specific folder, use the SELECT command.  
+ 
+If a user selects a folder and enters the SET READNEW command, that
+user will be alerted of topics of new messages at login time, and will 
+then be given the option of reading them.  Similar to READNEW is SHOWNEW,
+which displays the topics but doesn't prompt to read them.  Even less is
+SET BRIEF, which will cause only a one line output indicating that there
+are new messages in the folder.  There also is the SET NOTIFY option,
+which will cause a message to be broadcast to a user's terminal alerting
+the user that a new message has been added.  Any of these options can be
+the default for the folder by using the /DEFAULT switch on the command.
+ 
+A folder can be restricted to only certain users, if desired.  This is 
+done by specifying CREATE/PRIVATE.  Afterwards, access to the folder is 
+controlled by the creator by the SET [NO]ACCESS command.  If /SEMIPRIVATE
+rather than /PRIVATE is specified, all users can read the messages in the
+folder, but only those give access can add messages.
+ 
+A folder can be converted into a remote folder using CREATE/NODE or SET
+NODE.  A remote folder is one which points to a folder on a remote DECNET
+node.  Messages added to a remote node are actually stored on the folder
+on the remote node.  The BULLCP process (created by BULLETIN/STARTUP)
+must be running on the remote node for this option to be used.
+
+A folder can be specified as a SYSTEM folder, i.e. one in which SYSTEM/
+SHUTDOWN/BROADCAST messages can be added.  By default, the GENERAL folder
+is a SYSTEM folder (and cannot be changed).  One use for this is to create
+a remote SYSTEM folder which is shared by all nodes, so that the GENERAL
+folder is used for messages pertaining only to the local host, while the
+remote folder is used for messages pertaining to all nodes.  Another
+use is to create a folder for posting SYSTEM messages only meant for a
+certain UIC group.  This is done by creating a PRIVATE SYSTEM folder, and
+giving access to that UIC group.  Only users in that UIC group will see
+the messages in that folder when they log in.`,
+	"Ctrl-C": `Except for when BULLETIN is awaiting input from the terminal, a 
+CTRL-C will cause BULLETIN to abort the execution of any command.  If
+BULLETIN is waiting for terminal input, a CTRL-C will cause BULLETIN
+to return to the BULLETIN> prompt.  If for some reason the user wishes
+to suspend BULLETIN, CTRL-Y will usually do so.  However, this is not
+always true, as BULLETIN will ignore the CTRL-Y if it has a data file
+opened at the time. (Otherwise it would be possible to put the files
+in a state such that they would be inaccessible by other users.)
+`,
+}
+
+func init() {
+	for c := range commands {
+		helpmap[c] = commands[c].Description
+	}
+}
 
 // ActionHelp handles the `HELP` command.
 func ActionHelp(cmd *dclish.Command) error {
@@ -19,7 +78,6 @@ func ActionHelp(cmd *dclish.Command) error {
 	wordup := strings.ToUpper(cmd.Args[0])
 	helptext, ok := helpmap[wordup]
 	if !ok {
-		// TODO: add a help structure for topics that are not command.
 		fmt.Printf("ERROR: Topic not found: '%s'.\n", cmd.Args[0])
 		return nil
 	}