diff --git a/reclass/adapters/salt.py b/reclass/adapters/salt.py
index d7d34f0..5b493a0 100755
--- a/reclass/adapters/salt.py
+++ b/reclass/adapters/salt.py
@@ -25,7 +25,8 @@
                classes_uri=OPT_CLASSES_URI,
                class_mappings=None,
                propagate_pillar_data_to_reclass=False,
-               ignore_class_notfound=OPT_IGNORE_CLASS_NOTFOUND):
+               ignore_class_notfound=OPT_IGNORE_CLASS_NOTFOUND,
+               ignore_class_regexp=OPT_IGNORE_CLASS_REGEXP):
 
     nodes_uri, classes_uri = path_mangler(inventory_base_uri,
                                           nodes_uri, classes_uri)
@@ -35,7 +36,8 @@
     if propagate_pillar_data_to_reclass:
         input_data = pillar
     reclass = Core(storage, class_mappings, input_data=input_data,
-                   ignore_class_notfound=ignore_class_notfound)
+                   ignore_class_notfound=ignore_class_notfound,
+                   ignore_class_regexp=ignore_class_regexp)
 
     data = reclass.nodeinfo(minion_id)
     params = data.get('parameters', {})
@@ -50,14 +52,17 @@
 def top(minion_id, storage_type=OPT_STORAGE_TYPE,
         inventory_base_uri=OPT_INVENTORY_BASE_URI, nodes_uri=OPT_NODES_URI,
         classes_uri=OPT_CLASSES_URI,
-        class_mappings=None, ignore_class_notfound=OPT_IGNORE_CLASS_NOTFOUND):
+        class_mappings=None,
+        ignore_class_notfound=OPT_IGNORE_CLASS_NOTFOUND,
+        ignore_class_regexp=OPT_IGNORE_CLASS_REGEXP):
 
     nodes_uri, classes_uri = path_mangler(inventory_base_uri,
                                           nodes_uri, classes_uri)
     storage = get_storage(storage_type, nodes_uri, classes_uri,
                           default_environment='base')
     reclass = Core(storage, class_mappings, input_data=None,
-                   ignore_class_notfound=ignore_class_notfound)
+                   ignore_class_notfound=ignore_class_notfound,
+                   ignore_class_regexp=ignore_class_regexp):
 
     # if the minion_id is not None, then return just the applications for the
     # specific minion, otherwise return the entire top data (which we need for
@@ -106,7 +111,8 @@
                               nodes_uri=options.nodes_uri,
                               classes_uri=options.classes_uri,
                               class_mappings=class_mappings,
-                              ignore_class_notfound=options.ignore_class_notfound)
+                              ignore_class_notfound=options.ignore_class_notfound,
+                              ignore_class_regexp=options.ignore_class_regexp)
         else:
             data = top(minion_id=None,
                        storage_type=options.storage_type,
@@ -114,7 +120,8 @@
                        nodes_uri=options.nodes_uri,
                        classes_uri=options.classes_uri,
                        class_mappings=class_mappings,
-                       ignore_class_notfound=options.ignore_class_notfound)
+                       ignore_class_notfound=options.ignore_class_notfound,
+                       ignore_class_regexp=options.ignore_class_regexp)
 
         print output(data, options.output, options.pretty_print)
 
diff --git a/reclass/cli.py b/reclass/cli.py
index 8f4617b..d7e22b7 100644
--- a/reclass/cli.py
+++ b/reclass/cli.py
@@ -29,7 +29,7 @@
         storage = get_storage(options.storage_type, options.nodes_uri,
                               options.classes_uri, default_environment='base')
         class_mappings = defaults.get('class_mappings')
-        reclass = Core(storage, class_mappings, ignore_class_notfound=options.ignore_class_notfound)
+        reclass = Core(storage, class_mappings, ignore_class_notfound=options.ignore_class_notfound, ignore_class_regexp=options.ignore_class_regexp)
 
         if options.mode == MODE_NODEINFO:
             data = reclass.nodeinfo(options.nodename)
diff --git a/reclass/config.py b/reclass/config.py
index fca982f..36fbf5a 100644
--- a/reclass/config.py
+++ b/reclass/config.py
@@ -32,6 +32,9 @@
     ret.add_option('-z', '--ignore-class-notfound', dest='ignore_class_notfound',
                    default=defaults.get('ignore_class_notfound', OPT_IGNORE_CLASS_NOTFOUND),
                    help='decision for not found classes [%default]')
+    ret.add_option('-x', '--ignore-class-regexp', dest='ignore_class_regexp',
+                   default=defaults.get('ignore_class_regexp', OPT_IGNORE_CLASS_REGEXP),
+                   help='decision for not found classes [%default]')
     return ret
 
 
diff --git a/reclass/core.py b/reclass/core.py
index 0c8543d..c93ab14 100644
--- a/reclass/core.py
+++ b/reclass/core.py
@@ -19,12 +19,17 @@
 class Core(object):
 
     def __init__(self, storage, class_mappings, input_data=None,
-            ignore_class_notfound=False):
+            ignore_class_notfound=False, ignore_class_regexp=['*']):
         self._storage = storage
         self._class_mappings = class_mappings
         self._ignore_class_notfound = ignore_class_notfound
         self._input_data = input_data
 
+        if type(self._ignore_class_regexp) == type(''):
+          self._ignore_class_regexp = [ignore_class_regexp]
+        else:
+          self._ignore_class_regexp = ignore_class_regexp
+
     @staticmethod
     def _get_timestamp():
         return time.strftime('%c')
@@ -90,13 +95,17 @@
         if merge_base is None:
             merge_base = Entity(name='empty (@{0})'.format(nodename))
 
+        cnf_r = None # class_not_found_regexp compiled
         for klass in entity.classes.as_list():
             if klass not in seen:
                 try:
                     class_entity = self._storage.get_class(klass)
                 except ClassNotFound, e:
                     if self._ignore_class_notfound:
-                        continue
+                        if not cnf_r:
+                            cnf_r = re.compile('||'.join([re.escape(x) for x in self._ignore_class_regexp]))
+                        if cnf_r.match(klass):
+                            continue
                     e.set_nodename(nodename)
                     raise e
 
diff --git a/reclass/defaults.py b/reclass/defaults.py
index 3892a89..0180521 100644
--- a/reclass/defaults.py
+++ b/reclass/defaults.py
@@ -17,6 +17,7 @@
 OPT_PRETTY_PRINT = True
 OPT_OUTPUT = 'yaml'
 OPT_IGNORE_CLASS_NOTFOUND = False
+OPT_IGNORE_CLASS_REGEXP = ['*']
 
 CONFIG_FILE_SEARCH_PATH = [os.getcwd(),
                            os.path.expanduser('~'),
