public Set<Tag> addTags(Subject subject, Set<Tag> tags) {
Set<Tag> results = new HashSet<Tag>();
// This isn't efficient, but then how many tags will you really be creating at once
for (Tag tag : tags) {
TagCriteria criteria = new TagCriteria();
criteria.addFilterNamespace(tag.getNamespace());
criteria.addFilterSemantic(tag.getSemantic());
criteria.addFilterName(tag.getName());
criteria.setStrict(true);
List<Tag> found = findTagsByCriteria(subject, criteria);
if (!found.isEmpty()) {
assert found.size() == 1; // should never be more than one
results.add(found.get(0));