diff --git a/generated.mako.cpp b/generated.mako.cpp
index a92daf1..44528cf 100644
--- a/generated.mako.cpp
+++ b/generated.mako.cpp
@@ -3,6 +3,9 @@
 // This file was auto generated.  Do not edit.
 
 #include "manager.hpp"
+% for i in interfaces:
+#include <${'/'.join(i.split('.') + ['server.hpp'])}>
+% endfor
 
 namespace phosphor
 {
@@ -11,6 +14,16 @@
 namespace manager
 {
 
+const Manager::Makers Manager::_makers{
+% for i in interfaces:
+    {
+        "${i}",
+        details::interface::holder::Holder<
+            sdbusplus::server::${'::'.join(i.split('.'))}>::make,
+    },
+% endfor
+};
+
 const Manager::Events Manager::_events{
 % for e in events:
     {
diff --git a/manager.cpp b/manager.cpp
index a846a0b..77d5990 100644
--- a/manager.cpp
+++ b/manager.cpp
@@ -101,18 +101,10 @@
 void Manager::notify(std::string path, Object object)
 {
     try {
-        using MakerType = HolderPtr(*)(
-                sdbusplus::bus::bus &, const char *);
-        using Makers = std::map<std::string, MakerType>;
-
         if(object.cbegin() == object.cend())
             throw std::runtime_error(
                     "No interfaces in " + path);
 
-        static const Makers makers{
-            // TODO - Add mappings here.
-        };
-
         path.insert(0, _root);
 
         auto obj = _refs.find(path);
@@ -126,9 +118,9 @@
         InterfaceComposite ref;
 
         for (auto &x: object) {
-            auto maker = makers.find(x.first.c_str());
+            auto maker = _makers.find(x.first.c_str());
 
-            if(maker == makers.end())
+            if(maker == _makers.end())
                 throw std::runtime_error(
                         "Unimplemented interface: " + x.first);
 
diff --git a/manager.hpp b/manager.hpp
index 5f78066..16a13e6 100644
--- a/manager.hpp
+++ b/manager.hpp
@@ -143,6 +143,9 @@
     using InterfaceComposite = std::map<std::string, HolderPtr>;
     using ObjectReferences = std::map<std::string, InterfaceComposite>;
     using Events = std::map<const char *, Event>;
+    using MakerType = HolderPtr(*)(
+            sdbusplus::bus::bus &, const char *);
+    using Makers = std::map<std::string, MakerType>;
 
     /** @brief Provided for testing only. */
     bool _shutdown;
@@ -167,6 +170,9 @@
 
     /** @brief A container of pimgen generated events and responses.  */
     static const Events _events;
+
+    /** @brief A container of pimgen generated factory methods.  */
+    static const Makers _makers;
 };
 
 } // namespace manager
diff --git a/test/test.cpp b/test/test.cpp
index 350684b..6b8e7e1 100644
--- a/test/test.cpp
+++ b/test/test.cpp
@@ -43,8 +43,8 @@
         using inner = std::map<std::string, var>;
         using outer = std::map<std::string, inner>;
 
-        inner i = {{"test.property", "a"}};
-        outer o = {{"test.iface", i}};
+        inner i = {{"ExampleProperty1", "test"}};
+        outer o = {{"xyz.openbmc_project.Example.Iface1", i}};
 
         m.append(o);
         auto reply = b.call(m);
