anchor.diff:  pack_array(L) when is_list(L)->
       case length(L) of
    	Len when Len < 16 ->
  - 	    << 2#1001:4, Len:4/integer-unit:1, (pack_array_(L))/binary >>;
  + 	    << 2#1001:4, Len:4/integer-unit:1, (pack_array_(L, <<>>))/binary >>;
   	Len when Len < 16#10000 -> % 65536
  -	    << 16#DC:8, Len:16/big-unsigned-integer-unit:1,(pack_array_(L))/binary >>;
  +	    << 16#DC:8, Len:16/big-unsigned-integer-unit:1,(pack_array_(L, <<>>))/binary >>;
   	Len ->
  -	    << 16#DD:8, Len:32/big-unsigned-integer-unit:1,(pack_array_(L))/binary >>
  -    end.
  -pack_array_([])-> <<>>;
  -pack_array_([Head|Tail])->
  -    << (pack(Head))/binary, (pack_array_(Tail))/binary >>.
  +	    << 16#DD:8, Len:32/big-unsigned-integer-unit:1,(pack_array_(L, <<>>))/binary >>
  +    end.
  +pack_array_([], Acc) -> Acc;
  +pack_array_([Head|Tail], Acc) ->
  +    pack_array_(Tail, <<Acc/binary,  (pack(Head))/binary>>).
   
   % FIXME! this should be tail-recursive and without lists:reverse/1
   unpack_array_(<<>>, 0, RetList)   -> {lists:reverse(RetList), <<>>};
  
positive.code: 	    {(Code - 16#100), Payload};
  
  	Code when Code >= 2#10100000 , Code < 2#11000000 ->
  %	 101XXXXX for FixRaw 
  	    Len = Code rem 2#10100000,
  	    << Return:Len/binary, Remain/binary >> = Payload,
  	    {Return, Remain};
  
negative.code: % ===== internal APIs ===== %
  
  % positive fixnum
  pack_uint_(N) when is_integer( N ) , N < 128 ->
      << 2#0:1, N:7 >>;
  % uint 8
  pack_uint_( N ) when is_integer( N ) andalso N < 256 ->
  