diff --git a/tools/sdbus++ b/tools/sdbus++
index fa12677..fbbc3cd 100755
--- a/tools/sdbus++
+++ b/tools/sdbus++
@@ -1,45 +1,5 @@
 #!/usr/bin/env python3
-import sdbusplus
-import mako.lookup
-import argparse
-import sys
-import os
-
-
-def main():
-    module_path = os.path.dirname(sdbusplus.__file__)
-
-    valid_types = {'interface': sdbusplus.Interface,
-                   'error': sdbusplus.Error}
-    valid_processes = {'markdown': "markdown",
-                       'server-header': "server_header",
-                       'server-cpp': "server_cpp",
-                       'exception-header': "exception_header",
-                       'exception-cpp': "exception_cpp",
-                       'client-header': "client_header"}
-
-    parser = argparse.ArgumentParser(description='Process sdbus++ YAML files.')
-
-    parser.add_argument('-r', '--rootdir', dest='rootdir', default='.',
-                        type=str, help='Location of files to process.')
-    parser.add_argument('-t', '--templatedir', dest='templatedir',
-                        default=os.path.join(module_path, 'templates'),
-                        type=str, help='Location of templates files.')
-    parser.add_argument('typeName', metavar='TYPE', type=str,
-                        choices=valid_types.keys(), help='Type to operate on.')
-    parser.add_argument('process', metavar='PROCESS', type=str,
-                        choices=valid_processes.keys(),
-                        help='Process to apply.')
-    parser.add_argument('item', metavar='ITEM', type=str,
-                        help='Item to process.')
-
-    args = parser.parse_args()
-
-    lookup = mako.lookup.TemplateLookup(directories=[args.templatedir])
-
-    instance = valid_types[args.typeName].load(args.item, args.rootdir)
-    function = getattr(instance, valid_processes[args.process])
-    print(function(lookup))
+from sdbusplus.main import main
 
 if __name__ == '__main__':
     main()
diff --git a/tools/sdbusplus/main.py b/tools/sdbusplus/main.py
new file mode 100644
index 0000000..54812a5
--- /dev/null
+++ b/tools/sdbusplus/main.py
@@ -0,0 +1,40 @@
+import sdbusplus
+import mako.lookup
+import argparse
+import sys
+import os
+
+def main():
+    module_path = os.path.dirname(sdbusplus.__file__)
+
+    valid_types = {'interface': sdbusplus.Interface,
+                   'error': sdbusplus.Error}
+    valid_processes = {'markdown': "markdown",
+                       'server-header': "server_header",
+                       'server-cpp': "server_cpp",
+                       'exception-header': "exception_header",
+                       'exception-cpp': "exception_cpp",
+                       'client-header': "client_header"}
+
+    parser = argparse.ArgumentParser(description='Process sdbus++ YAML files.')
+
+    parser.add_argument('-r', '--rootdir', dest='rootdir', default='.',
+                        type=str, help='Location of files to process.')
+    parser.add_argument('-t', '--templatedir', dest='templatedir',
+                        default=os.path.join(module_path, 'templates'),
+                        type=str, help='Location of templates files.')
+    parser.add_argument('typeName', metavar='TYPE', type=str,
+                        choices=valid_types.keys(), help='Type to operate on.')
+    parser.add_argument('process', metavar='PROCESS', type=str,
+                        choices=valid_processes.keys(),
+                        help='Process to apply.')
+    parser.add_argument('item', metavar='ITEM', type=str,
+                        help='Item to process.')
+
+    args = parser.parse_args()
+
+    lookup = mako.lookup.TemplateLookup(directories=[args.templatedir])
+
+    instance = valid_types[args.typeName].load(args.item, args.rootdir)
+    function = getattr(instance, valid_processes[args.process])
+    print(function(lookup))
