+The L</Tag> is separated from its data L</Fields> by a comma ','.
+
+=head2 Fields
+
+All fields
+in any subsequent data shall be separated by a comma ','.
+All fields shall
+be HTTP encoded such that reserved characters (comma ',',
+vertical bar '|',
+percent '%',
+equals '='
+and non printable characters less than 127 (or %7F in hex)
+[including newline and carraige return] are tranlated to
+their two hex digit equivalent preceeded by the percent '%' character.
+
+For example:
+
+ "%0D%0A" is "<carriage return><linefeed>".
+ "hello%2C there" is "hello, there"
+
+This is not standard CSV, fields are not quoted (delimited with either
+' or ").
+
+All national characters above 127 are UTF8 encoded in the
+standard perl 5.8.x way. It follows that all (perl) programs that
+are written according to this specification must say:
+
+ use UTF8;
+
+A message (or line) is terminated with <carriage return><linefeed>
+0x0d 0x0a. Incoming L</Messages> must be accepted even when terminated
+with just <linefeed>.
+
+Care must be taken to make sure that fields have any reserved characters
+encoded. In particular: it is perfectly permissible to have <linefeed>
+characters in a field - so long as they are escaped.
+
+Fields come in two styles: either simple fields (just containing
+data) or B<key>=B<value> pairs. Each pair must be separated from
+the next by a comma ','. The B<key> must consist of the set of
+characters [a-z0-9_] (ie lowercase letters, digits and underscore),
+with a leading letter. The B<value> must be HTTP encoded as
+specified above and can otherwise contain any character.
+
+There is no maximum size specified for a message. It is up to each
+implimentation to enforce one (if only for their own protection).
+
+=head2 Standard Commands
+
+There are a number of L</Standard Commands> which must be accepted by