anchor.diff:  parse_isup_msgt(Msgt, Bin) when Msgt == ?ISUP_MSGT_RES; Msgt == ?ISUP_MSGT_SUS ->
   	<<SuspResInd:8, Remain/binary>> = Bin,
   	FixedOpts = [{susp_res_ind, SuspResInd}],
  -	Opts = parse_isup_opts(Remain),
  +	Opts = parse_isup_opts_ptr(Remain),
   	[FixedOpts|Opts];
   % Table C-23
   parse_isup_msgt(M, <<>>) when
  
positive.code: encode_isup_hdr(#isup_msg{msg_type = MsgType, cic = Cic}) ->
  	<<Cic:12/little, 0:4, MsgType:8>>.
  
  % Table C-16	Initial address
  encode_isup_msgt(?ISUP_MSGT_IAM, #isup_msg{parameters = Params}) ->
  	% Fixed part
  
negative.code: 					proplists:get_value(?ISUP_PAR_CALLED_P_NUM, Params)),
  	CalledPartyLen = byte_size(CalledParty),
  	% Optional part
  	OptBin = encode_isup_opts(Params),
  	case OptBin of
  		<<>>	-> PtrOpt = 0;
  		_	-> PtrOpt = CalledPartyLen + 1 + 1 % 1 byte length, 1 byte start offset
  	end,
  	<<FixedBin/binary, PtrVar:8, PtrOpt:8, CalledPartyLen:8, CalledParty/binary, OptBin/binary>>;
  % Table C-17	Release
  encode_isup_msgt(?ISUP_MSGT_REL, #isup_msg{parameters = Params}) ->
  	PtrVar = 2, % one byte behind the PtrOpt
  	% V: Cause indicators
  	CauseInd = encode_isup_par(?ISUP_PAR_CAUSE_IND,
  					proplists:get_value(?ISUP_PAR_CAUSE_IND, Params)),
  	CauseIndLen = byte_size(CauseInd),
  	% Optional Part
  	OptBin = encode_isup_opts(Params),
  	case OptBin of
  		<<>>	-> PtrOpt = 0;
  		_	-> PtrOpt = CauseIndLen + 1 + 1	% 1 byte length, 1 byte start offset
  	end,
  	<<PtrVar:8, PtrOpt:8, CauseIndLen:8, CauseInd/binary, OptBin/binary>>;
  % Table C-19	Subsequent address
  encode_isup_msgt(?ISUP_MSGT_SAM, #isup_msg{parameters = Params}) ->
  	PtrVar = 2, % one byte behind the PtrOpt
  	% V: Subsequent number
  	SubseqNum = encode_isup_par(?ISUP_PAR_SUBSEQ_NUM,
  					proplists:get_value(?ISUP_PAR_SUBSEQ_NUM, Params)),
  	SubseqNumLen = byte_size(SubseqNum),
  	% Optional Part
  	OptBin = encode_isup_opts(Params),
  	case OptBin of
  		<<>>	-> PtrOpt = 0;
  		_	-> PtrOpt = SubseqNumLen + 1 + 1 % 1 byte length, 1 byte start offset
  	end,
  	<<PtrVar:8, PtrOpt:8, SubseqNumLen:8, SubseqNum/binary, OptBin/binary>>;
  % Table C-21	Suspend, Resume
  encode_isup_msgt(Msgt, #isup_msg{parameters = Params}) when Msgt == ?ISUP_MSGT_RES; Msgt == ?ISUP_MSGT_SUS ->
  	SuspResInd = proplists:get_value(susp_res_ind, Params),
  	OptBin = encode_isup_opts(Params),
  	case OptBin of
  		<<>>	-> PtrOpt = 0;
  		_	-> PtrOpt = 1
  	end,
  	<<SuspResInd:8, PtrOpt:8, OptBin/binary>>;
  % Table C-23
  encode_isup_msgt(M, #isup_msg{}) when
  	M == ?ISUP_MSGT_BLO;
  	M == ?ISUP_MSGT_BLA;
  	M == ?ISUP_MSGT_CCR;
  	M == ?ISUP_MSGT_RSC;
  	M == ?ISUP_MSGT_UBL;
  	M == ?ISUP_MSGT_UBA ->
  		<<>>;
  % Table C-25
  encode_isup_msgt(M, #isup_msg{parameters = Params}) when
  	M == ?ISUP_MSGT_CGB;
  	M == ?ISUP_MSGT_CGBA;
  	M == ?ISUP_MSGT_CGU;
  	M == ?ISUP_MSGT_CGUA ->
  		PtrVar = 1, % one byte behind the PtrVar
  		CGMsgt = proplists:get_value(cg_supv_msgt, Params),
  		% V: Range and status
  		{RangStsLen, RangeStatus} = proplists:get_value(?ISUP_PAR_RANGE_AND_STATUS, Params),
  		<<CGMsgt:8, PtrVar:8, RangStsLen:8, RangeStatus/binary>>;
  % Table C-26	Circuit group reset
  encode_isup_msgt(?ISUP_MSGT_GRS, #isup_msg{parameters = Params}) ->
  	PtrVar = 1, % one byte behind the PtrVar
  	{RangeLen, Range} = proplists:get_value(?ISUP_PAR_RANGE_AND_STATUS, Params),
  	% V: Range without status
  	<<PtrVar:8, RangeLen:8, Range/binary>>.
  
  encode_isup_msg(Msg = #isup_msg{msg_type = MsgType}) ->
  	HdrBin = encode_isup_hdr(Msg),
  