anchor.diff:    const replInit = () => {
       // Trying to put Terminal inside a jQuery dialog is, empirically,
       // very tricksy (because of CSS z-Index issues I think).
  +    cd.saveCodeFromSyntaxHighlightEditors();
  +    setSessionId();
       const element = document.getElementById('repl-terminal');
       const terminal = createTerminalIn(element);
  -    setSessionId();
  -    createRepl(terminal).then(() => {
  -      const ws = new WebSocketMonitor(terminal);
  -      ws.open();
  +    const repl = new Repl(terminal);
  +    repl.create().then(() => {
  +      const socket = new WebSocketMonitor(terminal);
  +      socket.open();
         resumeButton.unbind().click(() => {
  -        ws.close();
  -        deleteRepl(terminal);
  +        socket.close();
  +        repl.delete();
           closeReplPage();
         });
       });
  
positive.code:       }
      };
      this.socket.onerror = function(event) {
        this.terminal.greenWriteln('Error connecting to REPL');
      };
    };
  
    WebSocketMonitor.prototype.close = function() {
      this.terminal.greenWriteln('Closing WebSocket');
      this.terminal.detach(this.socket);
      this.socket.close(1000, 'User closed the REPL');
    };
  
    //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  
negative.code:   const resumeButton = $('.resume-button', replPage);
    const kataId = "<%= @kata.id %>";
    const replUrl = () => `${location.hostname}/repler/${kataId}-${sessionId}`;
    let sessionId = null;
  
    cd.openReplPage = () => {
  