diff --git a/docs/protocol.md b/docs/protocol.md
index 01883d94..1e6f8b83 100644
--- a/docs/protocol.md
+++ b/docs/protocol.md
@@ -150,21 +150,43 @@ window (the session window):
```
# Session control
-Any echoed input or interpreter output or the initial content of the session are sent to RIDE using either;
+#### apiVersion < 1
+Any echoed input or interpreter output are sent to RIDE using either;
### EchoInput
```json
["EchoInput",{"input":" 1 2 3+4 5 6\n"}] // Interpreter -> RIDE
```
-
### AppendSessionOutput
```json
-["AppendSessionOutput",{"result":["5 7 9"]}] // Interpreter -> RIDE
+["AppendSessionOutput",{"result":"5 7 9"}] // Interpreter -> RIDE
```
+These two perform essentially the same task except that `AppendSessionOutput` doesn't necessarily have trailing `"\n"`-s at the end of `result`.
-These two perform essentially the same task except that `AppendSessionOutput` doesn't have trailing `"\n"`-s at the end of each element of `result`.
-
-:red_circle: Sometimes the interpreter returns `"result"` as a string, other times as an array of strings.
+#### apiVersion = 1
+Any echoed input or interpreter output are sent to RIDE using either;
+```json
+["AppendSessionOutput",{"result":"5 7 9","type":1,"group":1}] // Interpreter -> RIDE
+```
+`type` specifies the source of the output:
+
+|type| description |
+|----|----------------------------------------------|
+| 0 | reserved |
+| 1 | undetermined session output |
+| 2 | default output e.g. not assigned to ⎕ or ⍞ |
+| 3 | what would have been always sent to stderr |
+| 4 | output from system commands |
+| 5 | APL error message. e.g. ^ and DOMAIN ERROR |
+| 6 | reserved |
+| 7 | ⎕ output |
+| 8 | ⍞ output |
+| 9 | "information" that would have gone to the "status window" |
+| 10 | reserved |
+| 11 | echoed input |
+| 12 | ⎕TRACE output |
+| 13 | reserved |
+| 14 | A “normal” input line |
### SetPromptType
The interpreter informs RIDE about changes in its ability to accept user input with
@@ -689,11 +711,17 @@ Request RIDE shows some HTML. See [`3500⌶`](http://help.dyalog.com/16.0/Conten
### UpdateDisplayName
-RIDE can use the display name as the title of its application window.
+This message is sent by the interpreter when WSID is changed.
```json
["UpdateDisplayName",{"displayName":"CLEAR WS"}] // Interpreter -> RIDE
```
+### UpdateSessionCaption
+RIDE can use the display name as the title of its application window.
+```json
+["UpdateSessionCaption",{"text":"CLEAR WS - Dyalog APL/W-64"}] // Interpreter -> RIDE
+```
+
### Disconnect
Sent from any peer to shut down the connection cleanly.