private static void addTagsFromClass(Class<?> clazz, Object clazzInstance)
    {
        final Field[] fields = clazz.getDeclaredFields();

        for (Field field : fields) {
            if (Modifier.isStatic(field.getModifiers())) {
                continue;
            }
            if (!field.isAnnotationPresent(Tag.class)) {
                continue;
            }
            Tag tag = field.getAnnotation(Tag.class);
            String tagValue = tag.value().toUpperCase();
            String classTagValue = clazz.getAnnotation(Tagged.class).value().toUpperCase();
            String fullTag = classTagValue.isEmpty() ? tagValue : String.format("%s::%s", classTagValue, tagValue);

            // u instancnich promennych musi byt vyplnen tag
            if (tagValue.isEmpty()) {
                continue;
            }
            LOGGER.debug("addTagsFromClass", "Nacten tag %s pro %s", fullTag, field.getName());

            try {
                if (TAGS.containsKey(fullTag)) {
                    LOGGER.warning("addTagsFromClass", "Tag %s jiz existuje", fullTag);
                } else {
                    Object value = field.get(clazzInstance);

                    if (value == null) {
                        LOGGER.info("addTagsFromClass", "Tag %s ma hodnotu NULL", fullTag);
                    } else {
                        TAGS.put(fullTag, value);
                        LOGGER.debug("addTagsFromClass", "Tag %s byl pridan s hodnotou %s", fullTag, value);
                    }
                }
            } catch (IllegalAccessException e) {
                LOGGER.error("addTagsFromClass", "Hodnotu pro tag %s nelze pridat", fullTag);
                LOGGER.debug(e);
            }
        }
    }