diff --git a/README.md b/README.md
index e8e4b6e..1b06514 100644
--- a/README.md
+++ b/README.md
@@ -44,7 +44,6 @@
 
 The available filters provided by PIM are:
 
-* none - A non-filter.
 * propertyChangedTo - Only match events when the specified property has
 the specified value.
 
@@ -66,7 +65,6 @@
 
 The available actions provided by PIM are:
 
-* noop - A non-action.
 * destroyObject - Destroy the specified DBus object.
 * setProperty - Set the specified property on the specified DBus object.
 
diff --git a/actions.hpp b/actions.hpp
index 380df8b..3060145 100644
--- a/actions.hpp
+++ b/actions.hpp
@@ -39,9 +39,6 @@
 namespace actions
 {
 
-/** @brief The default action.  */
-inline void noop(Manager& mgr) noexcept { }
-
 /** @brief Destroy an object action.  */
 inline auto destroyObject(const char* path)
 {
diff --git a/events.hpp b/events.hpp
index 90c1024..0c789bd 100644
--- a/events.hpp
+++ b/events.hpp
@@ -152,12 +152,6 @@
 } // namespace property_condition
 } // namespace details
 
-/** @brief The default filter.  */
-inline bool none(sdbusplus::message::message&, Manager&) noexcept
-{
-    return true;
-}
-
 /** @brief Implicit type deduction for constructing PropertyCondition.  */
 template <typename T>
 auto propertyChangedTo(
diff --git a/pimgen.py b/pimgen.py
index 6c1eab7..0e5ee25 100755
--- a/pimgen.py
+++ b/pimgen.py
@@ -298,22 +298,6 @@
         super(SetProperty, self).__init__(**kw)
 
 
-class NoopAction(Action):
-    '''Render a noop action.'''
-
-    def __init__(self, **kw):
-        kw['pointer'] = True
-        super(NoopAction, self).__init__(**kw)
-
-
-class NoopFilter(Filter):
-    '''Render a noop filter.'''
-
-    def __init__(self, **kw):
-        kw['pointer'] = True
-        super(NoopFilter, self).__init__(**kw)
-
-
 class PropertyChanged(Filter):
     '''Render a propertyChanged filter.'''
 
@@ -331,7 +315,6 @@
     '''Render an inventory manager event.'''
 
     action_map = {
-        'noop': NoopAction,
         'destroyObject': DestroyObject,
         'setProperty': SetProperty,
     }
@@ -340,7 +323,7 @@
         self.cls = kw.pop('type')
         self.actions = \
             [self.action_map[x['name']](**x)
-                for x in kw.pop('actions', [{'name': 'noop'}])]
+                for x in kw.pop('actions', [])]
         super(Event, self).__init__(**kw)
 
 
@@ -349,7 +332,6 @@
     a filter.'''
 
     filter_map = {
-        'none': NoopFilter,
         'propertyChangedTo': PropertyChanged,
     }
 
@@ -358,7 +340,7 @@
             [DbusSignature(**x) for x in kw.pop('signatures', [])]
         self.filters = \
             [self.filter_map[x['name']](**x)
-                for x in kw.pop('filters', [{'name': 'none'}])]
+                for x in kw.pop('filters')]
         super(MatchEvent, self).__init__(**kw)
 
 
