--- oevents.py	2008-12-13 21:56:29.000000000 -0500
+++ oevents-dv.py	2008-12-13 22:22:14.000000000 -0500
@@ -129,19 +129,38 @@
                 logger.info( "Removing rule %s", name )
                 self.rules.remove(rule)
 
+
 #============================================================================#
 def factory(prefix, controller):
 #============================================================================#
     """This is the magic function that will be called by the framework module manager"""
-    events_manager = EventsManager(controller.bus)
 
-    # Get the initial rules files
+    events_manager = EventsManager(controller.bus)
     parser = Parser()
+ 
+    def parse_rules_file(file):
+        try:
+            rules = parser.parse_rules(open(file).read())
+        except IOError, e:
+            logger.error("can't open rules file %s: %s" % (file, e))
+        if rules:
+            for rule in rules:
+                events_manager.add_rule(rule)
+
+    # Get and parse the initial rules file
     rules_file = os.path.join( rootdir, 'rules.yaml' )
-    rules = parser.parse_rules(open(rules_file).read())
-    for rule in rules:
-        events_manager.add_rule(rule)
-            
+    parse_rules_file(rules_file)
+    # Get and parse rules files in rules.d
+    rules_dir = os.path.join(rootdir, 'rules.d')    
+    try:
+        files = os.listdir(rules_dir)
+    except OSError, e:
+        logger.error("%s", e)
+    for file in files:
+        rules_file = os.path.join(rules_dir, file)
+        logger.debug("Parsing rules in %s." % rules_file)
+        parse_rules_file(rules_file)
+
     # This is to ensure that all the other subsystems are up before we update the events_manager
     gobject.idle_add( events_manager.update )
 

