diff --git a/configure.ac b/configure.ac
index e159549..f5b5ba9 100644
--- a/configure.ac
+++ b/configure.ac
@@ -15,9 +15,9 @@
 AC_CHECK_PROG([FIND], find, find)
 AC_CHECK_PROG([BASENAME], basename, basename)
 AC_CHECK_PROG([DIRNAME], dirname, dirname)
-AM_PATH_PYTHON([2.7],
+AM_PATH_PYTHON([3],
     [AC_SUBST([PYTHON], [echo "$PYTHON"])],
-    [AC_MSG_ERROR([Could not find python-2.7 installed...python-2.7 is required])])
+    [AC_MSG_ERROR([Could not find python-3 installed...python-3 is required])])
 
 # Checks for libraries.
 PKG_CHECK_MODULES([SYSTEMD], [libsystemd >= 221])
diff --git a/pimgen.py b/pimgen.py
index c7ed933..fef22ad 100755
--- a/pimgen.py
+++ b/pimgen.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 
 '''Phosphor Inventory Manager YAML parser and code generator.
 
@@ -42,7 +42,7 @@
         self.dict = dict
 
     def interfaces(self):
-        return self.dict.keys()
+        return list(self.dict.keys())
 
     def names(self, interface):
         names = []
@@ -204,7 +204,7 @@
     '''DBus signature arguments.'''
 
     def __init__(self, **kw):
-        self.sig = {x: y for x, y in kw.iteritems()}
+        self.sig = {x: y for x, y in kw.items()}
         kw.clear()
         super(DbusSignature, self).__init__(**kw)
 
@@ -284,18 +284,18 @@
     def __init__(self, **kw):
         objs = []
 
-        for path, interfaces in kw.pop('objs').iteritems():
+        for path, interfaces in kw.pop('objs').items():
             key_o = TrivialArgument(
                 value=path,
                 type='string',
                 decorators=[Literal('string')])
             value_i = []
 
-            for interface, properties, in interfaces.iteritems():
+            for interface, properties, in interfaces.items():
                 key_i = TrivialArgument(value=interface, type='string')
                 value_p = []
                 if properties:
-                    for prop, value in properties.iteritems():
+                    for prop, value in properties.items():
                         key_p = TrivialArgument(value=prop, type='string')
                         value_v = TrivialArgument(
                             decorators=[Literal(value.get('type', None))],
@@ -528,9 +528,8 @@
         events_dir = os.path.join(args.inputdir, 'events.d')
 
         if os.path.exists(events_dir):
-            yaml_files = filter(
-                lambda x: x.endswith('.yaml'),
-                os.listdir(events_dir))
+            yaml_files = [x for x in os.listdir(events_dir) if
+                    x.endswith('.yaml')]
 
             for x in yaml_files:
                 with open(os.path.join(events_dir, x), 'r') as fd:
@@ -565,11 +564,10 @@
                 if not files:
                     continue
 
-                yaml_files += map(
-                    lambda f: os.path.relpath(
+                yaml_files += [os.path.relpath(
                         os.path.join(directory, f),
-                        targetdir),
-                    filter(lambda f: f.endswith('.interface.yaml'), files))
+                        targetdir) for f in [f for f in files if
+                                f.endswith('.interface.yaml')]]
 
         for y in yaml_files:
             # parse only phosphor dbus related interface files
@@ -659,8 +657,8 @@
         help='Inventory manager busname.')
     parser.add_argument(
         'command', metavar='COMMAND', type=str,
-        choices=valid_commands.keys(),
-        help='%s.' % " | ".join(valid_commands.keys()))
+        choices=list(valid_commands.keys()),
+        help='%s.' % " | ".join(list(valid_commands.keys())))
 
     args = parser.parse_args()
 
