anchor.diff:              From ! {Id, Reply},
               {next_state, opened, S0#state{ rpcs = RPC1 }};
           false ->
  -            %%% unsolicited frames .. like #publish{}!
  -            ok
  +            %% TODO deal with QoS
  +            #state{ receiver = Receiver } = S0,
  +            Receiver ! {frame, Frame},
  +            {next_state, opened, S0}
       end;
   
   opened(disconnect, S0 = #state{ socket = Sock }) ->
  
positive.code:           socket = undefined,
            parse_fun = undefined,
            rpcs = gb_trees:empty(),
            id_counter = 1
           }).
  
  -type(connection() :: pid()).
  
negative.code: 
  %% worth putting specs on these?
  
  unopened({open, Socket, Receiver, Connect}, From,
           S0 = #state{ socket = undefined }) ->
      S = S0#state{ socket = Socket, receiver = Receiver },
      write(S, Connect),
      case recv(S) of
          {ok, #connack{ return_code = ok }, Rest, S1} ->
  