diff --git a/README-extentions.rst b/README-extentions.rst
index 97d78af..b443d01 100644
--- a/README-extentions.rst
+++ b/README-extentions.rst
@@ -208,6 +208,29 @@
   group_errors: True
 
 
+
+Use global classes
+------------------
+
+Allows specify regexp pattern for "global class".
+
+Normally, classes are loaded when first seen. Thus they are not evaluated later when hit 2nd time. Only way to override
+parameters they load is by another class.
+
+Global classes, recognized by regexp pattern, are always loaded when hit and thus their content might be
+understood as enforced, globally available and not to be overridden by other class, even deeper in hierarchy.
+
+To avoid pitfalls do not over-engineer your solution. By default global class regexp pattern is not set.
+
+
+Global class regexp setup:
+
+.. code-block:: yaml
+
+  #/etc/reclass/reclass-config.yml
+  global_class_regexp = ['.*global']
+
+
 Inventory Queries
 -----------------
 
diff --git a/reclass/core.py b/reclass/core.py
index 9a23d89..3dcacac 100644
--- a/reclass/core.py
+++ b/reclass/core.py
@@ -22,6 +22,7 @@
 from reclass.output.yaml_outputter import ExplicitDumper
 from reclass.datatypes import Entity, Classes, Parameters, Exports
 from reclass.errors import MappingFormatError, ClassNotFound, InvQueryClassNotFound, InvQueryError, InterpolationError
+from reclass.values.parser import Parser
 
 try:
     basestring
@@ -37,6 +38,8 @@
         self._input_data = input_data
         if self._settings.ignore_class_notfound:
             self._cnf_r = re.compile('|'.join([x for x in self._settings.ignore_class_notfound_regexp]))
+        self._gcl_r = re.compile('|'.join([x for x in self._settings.global_class_regexp]))
+
 
     @staticmethod
     def _get_timestamp():
@@ -97,6 +100,10 @@
         return Entity(self._settings, parameters=p, name='input data')
 
     def _recurse_entity(self, entity, merge_base=None, seen=None, nodename=None, environment=None):
+
+        # values/parser in order to interpolate references in classes
+        _parser = Parser()
+
         if seen is None:
             seen = {}
 
@@ -107,7 +114,10 @@
             merge_base = Entity(self._settings, name='empty (@{0})'.format(nodename))
 
         for klass in entity.classes.as_list():
-            if klass not in seen:
+            if merge_base is not None:
+               klass=str(_parser.parse(klass, self._settings).render(merge_base.parameters.as_dict(), {}))
+            # class not seen or class on a list of global classes (always (re)loaded)
+            if klass not in seen or self._gcl_r.match(klass):
                 try:
                     class_entity = self._storage.get_class(klass, environment, self._settings)
                 except ClassNotFound as e:
diff --git a/reclass/defaults.py b/reclass/defaults.py
index 408307d..ccd3db9 100644
--- a/reclass/defaults.py
+++ b/reclass/defaults.py
@@ -23,6 +23,9 @@
 OPT_IGNORE_CLASS_NOTFOUND_REGEXP = ['.*']
 OPT_IGNORE_CLASS_NOTFOUND_WARNING = True
 
+
+OPT_GLOBAL_CLASS_REGEXP = []
+
 OPT_IGNORE_OVERWRITTEN_MISSING_REFERENCES = True
 
 OPT_ALLOW_SCALAR_OVER_DICT = False
diff --git a/reclass/settings.py b/reclass/settings.py
index e3fc26e..a33b742 100644
--- a/reclass/settings.py
+++ b/reclass/settings.py
@@ -38,6 +38,11 @@
         self.ref_parser = reclass.values.parser_funcs.get_ref_parser(self.escape_character, self.reference_sentinels, self.export_sentinels)
         self.simple_ref_parser = reclass.values.parser_funcs.get_simple_ref_parser(self.escape_character, self.reference_sentinels, self.export_sentinels)
 
+        self.global_class_regexp = options.get('global_class_regexp', OPT_GLOBAL_CLASS_REGEXP)
+        if isinstance(self.global_class_regexp, basestring):
+            self.global_class_regexp = [ self.global_class_regexp ]
+
+
     def __eq__(self, other):
         return isinstance(other, type(self)) \
                and self.allow_scalar_over_dict == other.allow_scalar_over_dict \
@@ -56,7 +61,8 @@
                and self.reference_sentinels == other.reference_sentinels \
                and self.ignore_class_notfound == other.ignore_class_notfound \
                and self.ignore_class_notfound_regexp == other.ignore_class_notfound_regexp \
-               and self.ignore_class_notfound_warning == other.ignore_class_notfound_warning
+               and self.ignore_class_notfound_warning == other.ignore_class_notfound_warning \
+               and self.global_class_regexp == other.global_class_regexp
 
     def __copy__(self):
         cls = self.__class__
