anchor.diff:  %% ===================================================================
   %% Exported functions
   %% ===================================================================
  --ifdef(ALLOW_MAPS).
   %% @doc Find function, returns {ok,Value} or error
   -spec find(key(),data_object()) -> {ok, value()} | error.
  +-ifdef(ALLOW_MAPS).
   find(Key,DataObject) when is_list(DataObject) ->
       case proplists:get_value(Key,DataObject,undefined) of
           undefined -> error;
  
positive.code:     maps:fold(No_Common_Element,true,DataObject1);
  is_disjoint(DataObject1, DataObject2) ->
      is_disjoint(?FROM_JSON(DataObject1), ?FROM_JSON(DataObject2)).
  
  %% ===================================================================
  %% Internal functions
  
negative.code:              DataObject);
  exclude(Keys,DataObject) ->
      ?TO_JSON(exclude(Keys,?FROM_JSON(DataObject))).
  -else.
  exclude(Keys,DataObject) when is_list(DataObject) -> 
      [{K,V} || {K,V} <- DataObject, lists:member(K,Keys) =:= false];
  exclude(Keys,DataObject) ->
      ?TO_JSON(exclude(Keys,?FROM_JSON(DataObject))).
  -endif.
  
  
  %% @doc Merges two data objects into a data object. 
  %% If two keys exists in both data objects  the value in the first data object
  %% will be superseded by the value in the second data object, unless the value 
  %% of the second data object is null.
  -spec merge(data_object(),data_object()) -> data_object().
  -ifdef(ALLOW_MAPS).
  merge(DataObject1,DataObject2) when is_list(DataObject1), is_list(DataObject2) ->
      CleanObject2 = ?CL(DataObject2),
      Object2Keys = proplists:get_keys(CleanObject2),
  