anchor.diff:        cycle.cnt <= cycle.cnt + 1;
      endrule
   
  -   ParseIpv4Arbiter nextStateArbiter <- mkParseIpv4Arbiter();
  -
  +   // Parse State
  +   (* fire_when_enabled *)
  +   rule arbitrate_outgoing_state if (state == S3);
  +      Vector#(3, Bool) next_state_valid = replicate(False);
  +      Bool stateSet = False;
  +      for (Integer port=0; port<3; port=port+1) begin
  +         next_state_valid[port] = isValid(next_state_wire[port]);
  +         if (!stateSet && next_state_valid[port]) begin
  +            stateSet = True;
  +            ParserState next_state = fromMaybe(?, next_state_wire[port]);
  +            state <= next_state;
  +         end
  +      end
  +   endrule
  +
  +   // Parse Data In
      rule load_packet_in if (state == S3);
         let data_current <- toGet(datain).get;
         packet_in_wire <= data_current.data;
         $display("Parser::mkParserIpv4 ", fshow(cycle) + fshow("loading packet ") + fshow(data_current));
      endrule
   
  -   mkConnection(nextStateArbiter.outToFSM, toPipeIn(next_state_fifo));
  -
  +   // Parse State Machine
      Stmt parse_ipv4_0 =
      // IP
      seq
  
positive.code:    FIFOF#(Bit#(112)) unparsed_out_fifo <- mkSizedFIFOF(1);
     FIFOF#(Bit#(144)) internal_fifo <- mkSizedFIFOF(1);
  
     FIFOF#(ParserState) next_state_fifo <- mkBypassFIFOF;
     Wire#(Bit#(128)) packet_in_wire <- mkDWire(0);
  
     let verbose = True;
     Reg#(Cycle_t) cycle <- mkReg(defaultValue);
  
negative.code:    mkConnection(parse_ethernet.unparsedOutVlan, parse_vlan.unparsedIn);
     mkConnection(parse_vlan.unparsedOutVlan0, parse_ipv4.unparsedInVlan0);
  
     rule start_parser_fsm if (start_fsm);
        if (!started) begin
           parse_ethernet.start;
           parse_vlan.start;
  