anchor.diff:  	  end
         end;
       neg ->
  +      MapJ = join_maps_begin(Map),
         {Map1, Type1} =
  -	try bind_guard(Arg1, Map, Env, neg, State)
  -	catch throw:{fail, _} -> bind_guard(Arg2, Map, Env, pos, State)
  +	try bind_guard(Arg1, MapJ, Env, neg, State)
  +	catch throw:{fail, _} -> bind_guard(Arg2, MapJ, Env, pos, State)
   	end,
         {Map2, Type2} =
  -	try bind_guard(Arg2, Map, Env, neg, State)
  -	catch throw:{fail, _} -> bind_guard(Arg1, Map, Env, pos, State)
  +	try bind_guard(Arg2, MapJ, Env, neg, State)
  +	catch throw:{fail, _} -> bind_guard(Arg1, MapJ, Env, pos, State)
   	end,
         case t_is_atom(false, Type1) orelse t_is_atom(false, Type2) of
  -	true -> {join_maps([Map1, Map2], Map), t_atom(false)};
  +	true -> {join_maps_end([Map1, Map2], MapJ), t_atom(false)};
   	false -> signal_guard_fail(Eval, Guard, [Type1, Type2], State)
         end;
       dont_know ->
  -      {Map1, Type1} = bind_guard(Arg1, Map, Env, dont_know, State),
  -      {Map2, Type2} = bind_guard(Arg2, Map, Env, dont_know, State),
  +      MapJ = join_maps_begin(Map),
  +      {Map1, Type1} = bind_guard(Arg1, MapJ, Env, dont_know, State),
  +      {Map2, Type2} = bind_guard(Arg2, MapJ, Env, dont_know, State),
         Bool1 = t_inf(Type1, t_boolean()),
         Bool2 = t_inf(Type2, t_boolean()),
         case t_is_none(Bool1) orelse t_is_none(Bool2) of
   	true -> throw({fatal_fail, none});
   	false ->
  -	  NewMap = join_maps([Map1, Map2], Map),
  +	  NewMap = join_maps_end([Map1, Map2], MapJ),
   	  NewType =
   	    case {t_atom_vals(Bool1), t_atom_vals(Bool2)} of
   	      {['true'] , ['true'] } -> t_atom(true);
  
positive.code: 			AccType, AccMaps, _State) ->
    case t_is_none(AccType) of
      true -> throw({fail, none});
      false -> {join_maps(AccMaps, Map), AccType}
    end.
  
  %%% ===========================================================================
  
negative.code: 	  false ->
  	    SubTuples = t_tuple_subtypes(Tuple),
  	    %% Need to call the top function to get the try-catch wrapper
              MapJ = join_maps_begin(Map),
  	    Results =
  	      case Rev of
  		true ->
  		  [bind_pat_vars_reverse(Es, t_tuple_args(SubTuple), [],
  					 MapJ, State)
  		   || SubTuple <- SubTuples];
  		false ->
  		  [bind_pat_vars(Es, t_tuple_args(SubTuple), [], MapJ, State)
  		   || SubTuple <- SubTuples]
  	      end,
  	    case lists:keyfind(opaque, 2, Results) of
  